from pathlib import Path
import base64,html,json
R=Path(__file__).resolve().parents[3];D=R/'meta/brand-vi-research/world-map-brand-round1.assets'
D.mkdir(exist_ok=True)
bg='data:image/webp;base64,'+base64.b64encode((R/'.vitepress/theme/assets/world-map-hero.webp').read_bytes()).decode()
routes=[
 {'id':'a','code':'01','name':'有立场的入口','en':'A WORLD TO ENTER','claim':'从一处入口，展开自己的理解。','mechanism':'阈口、后续空间与可继续的边界；强画面进入，阅读中收敛。','color':'#242424','paper':'#ededeb','accent':'#666b69','risk':'空间有吸引力，也可能被读成建筑或门户；三入口与具体内容共同交代用途。'},
 {'id':'b','code':'02','name':'关系中的坐标','en':'A MAP IN RELATION','claim':'让知识彼此定位。','mechanism':'共同参照，三条并行路径；从问题定位到内容，再返回相关理解。','color':'#122f33','paper':'#f2f1e8','accent':'#a1c53c','risk':'关系很清楚，也容易接近通用知识图谱；需要独有的构造与编辑关系。'},
 {'id':'c','code':'03','name':'持续修订的图谱','en':'AN ATLAS IN THE MAKING','claim':'理解，在下一次改写中生长。','mechanism':'当前层清楚，旧层退后；页边接续痕迹与内容中的真实修订各有职责。','color':'#332b28','paper':'#f4eee5','accent':'#bd4c2e','risk':'容易被理解为出版物或版本工具；装饰痕迹不承担真实修订状态。'}]
marks={
'a':'<path d="M44 10H10V54H54V30H35V54 M35 30L48 17" fill="none" stroke="currentColor" stroke-width="5" stroke-linejoin="miter"/>',
'b':'<path d="M10 42V10H42M54 22V54H22" fill="none" stroke="currentColor" stroke-width="5"/><path d="M10 42L42 10M22 54L54 22" fill="none" stroke="currentColor" stroke-width="2"/><circle cx="32" cy="32" r="5" fill="currentColor"/>',
'c':'<path d="M7 44V9H42V44ZM15 51V17H50V51ZM23 58V25H58V58Z" fill="none" stroke="currentColor" stroke-width="2.7"/>'}
compact_c='<path d="M10 42V10H42M20 54V20H54V54Z" fill="none" stroke="currentColor" stroke-width="4"/>'
def symbol(key,css='mark'):
 return f'<svg class="{css}" viewBox="0 0 64 64" aria-hidden="true"><g class="mark-detail">{marks[key]}</g>'+ (f'<g class="mark-compact">{compact_c}</g>' if key=='c' else '')+'</svg>'
def art(key,variant=0):
 if key=='a':return f'<div class="portal-image" style="background-image:url({bg})"></div>'
 if key=='b':
  # Three related folded contours share a pivot. Positions encode this drawing, not a geographic map.
  paths=''
  for i in range(6):
   k=i*12
   paths+=f'<path d="M{280+k} 505C{230+k} 340 {165+k} 260 {160+k} 85"/><path d="M{280+k} 505C{220+k} 290 {480+k} 300 {510+k} 60"/><path d="M{280+k} 505C{260+k} 375 {660+k} 480 {755+k} 270"/>'
  return f'''<svg class="field-art" viewBox="0 0 880 570" aria-hidden="true"><defs><pattern id="grid-{variant}" width="58" height="58" patternUnits="userSpaceOnUse"><path d="M58 0H0V58" fill="none" stroke="#d9dfcc" stroke-opacity=".15" stroke-width=".6"/></pattern></defs><rect width="880" height="570" fill="url(#grid-{variant})"/><g fill="none" stroke="#c1d2aa" stroke-width="1.2" opacity=".55">{paths}</g><g fill="none" stroke="#b6d64c" stroke-width="3"><path d="M304 505C254 340 189 260 184 85"/><path d="M304 505C244 290 504 300 534 60"/><path d="M304 505C284 375 684 480 779 270"/></g><g fill="#b6d64c"><circle data-landmark="aesthetics" cx="184" cy="85" r="7"/><circle data-landmark="thought" cx="534" cy="60" r="7"/><circle data-landmark="engineering" cx="779" cy="270" r="7"/><circle data-landmark="worldview" cx="304" cy="505" r="9"/></g><g fill="#e5ead6" font-size="16" font-family="Arial,sans-serif"><text data-label="aesthetics" x="205" y="88">美学</text><text data-label="thought" x="557" y="65">思想</text><text data-label="engineering" x="716" y="247">工程</text><text data-label="worldview" x="334" y="518" font-size="12">世界观 · 共同参照</text></g></svg>'''

 return '''<svg class="field-art strata" viewBox="0 0 880 570" aria-hidden="true"><g fill="none" stroke="#b29d8d" stroke-width="1"><path d="M180 480V128H650V480Z"/><path d="M230 510V96H698V510Z"/><path d="M282 542V64H750V542Z"/></g><path d="M330 0H880V570H330V460H650V230H330Z" fill="#bd4c2e"/><path d="M282 64H750V542" fill="none" stroke="#332b28" stroke-width="2"/><g stroke="#332b28" stroke-width="2"><path d="M212 177H290M212 202H273M212 227H282M212 252H258"/></g><circle cx="330" cy="460" r="10" fill="#332b28"/><path d="M345 460H620" stroke="#f4eee5" stroke-width="1"/></svg>'''
def brand(key):return f'<span class="signature">{symbol(key)}<span class="wordmark">World Map<span class="wm-dot">.</span></span></span>'
links=[('美学','感知与判断','/aesthetics/'),('思想','追问与论证','/thought/'),('工程','实践与演化','/engineering/')]
def nav():return '<nav class="paths" aria-label="三个阅读入口">'+''.join(f'<a href="{u}"><b>{n}</b><span>{s}</span><i>↗</i></a>' for n,s,u in links)+'</nav>'
body='批评将看到的、理解的、按当前目标作出的判断与下一选择接起来。它既能推动作品修改，也能发现原先的目标或评价方式需要改变。'
longtitle='从物件关系发展品牌创作机制'
def hero(r,overview=False):
 key=r['id'];c='mini-hero' if overview else 'hero'
 return f'''<div class="{c} {key}" data-design="hero-{key}">{art(key,0 if overview else 1)}<header class="product-header">{brand(key)}<span class="product-description">连接美学、思想与工程</span></header><div class="hero-copy"><p class="eyebrow">感知 / 追问 / 实践</p><h2>建立自己的<br>理解。</h2><p class="intro">沿问题找到依据与方法，<br class="wide-only">把读到的知识带回理解与实践。</p><a class="start" href="#entry-{key}">从一个问题开始 <span>↗</span></a></div>{nav()}<span class="art-index" aria-hidden="true">WORLD MAP / {r['code']}</span></div>'''
def entry(r):
 key=r['id']
 return f'''<div class="problem-entry {key}" id="entry-{key}" data-design="entry-{key}"><div class="entry-title"><span>从一个具体问题开始</span><a href="/worldview/">体系从哪里来 ↗</a></div><div class="problem-links"><a href="/aesthetics/03-applications/brand-vi"><small>美学 / 创作</small><b>怎样推导一套品牌设计？</b><span>从任务、概念到比较与下一稿 ↗</span></a><a href="/thought/"><small>思想 / 论证</small><b>一个判断的依据从哪里来？</b><span>回到源典与概念形成过程 ↗</span></a><a href="/engineering/change-management/"><small>工程 / 实践</small><b>怎样让一次变更可控？</b><span>从风险、部署到反馈与回滚 ↗</span></a></div></div>'''
def chapter(r):
 key=r['id']
 return f'''<div class="chapter {key}" data-design="chapter-{key}"><div class="chapter-art">{art(key,2)}</div>{brand(key)}<div class="chapter-copy"><p class="eyebrow">美学 / 构想与创作</p><h3>{longtitle}</h3><p>把来源关系变成自己的判断与表达。</p></div><a class="chapter-link" href="/aesthetics/brand-creative-mechanisms">展开这项研究 ↗</a></div>'''
def reading(r):
 key=r['id']
 return f'''<article class="reading {key}" data-design="reading-{key}"><div class="reading-top">{brand(key)}<span>美学 / 认知骨架</span></div><div class="reading-content"><span class="section-marker">A6</span><h3>批评与发展</h3><p class="lead">{body}</p><p class="evidence-line">本项目方法归纳 · <a href="/meta/brand-vi-research/world-map-entry-guidance-study">推导与案例 ↗</a></p><div class="relation-line" aria-hidden="true">{symbol(key)}</div><h4>观感成立以后，下一稿究竟改什么</h4><p>先描述看到的细节，再讨论解释与取舍。把所得带入下一次制作，让方法也接受作品的反例。</p><a href="/aesthetics/00-structures/critique-development">阅读完整研究 ↗</a></div></article>'''
def note(r):
 key=r['id']
 return f'''<div class="note {key}" data-design="note-{key}"><div class="note-label">RESEARCH NOTE / 美学</div><div class="note-icon">{symbol(key)}</div><h3>批评与发展</h3><p>{body}</p><a href="/aesthetics/00-structures/critique-development">World Map <span>↗</span></a></div>'''
style='''
.mark-compact{display:none}.reading.c .mark-detail,.mini-hero.c .mark-detail,.marks-line>div[style="--size:16px"] .mark-detail:has(+.mark-compact),.marks-line>div[style="--size:24px"] .mark-detail:has(+.mark-compact){display:none}.reading.c .mark-compact,.mini-hero.c .mark-compact,.marks-line>div[style="--size:16px"] .mark-compact,.marks-line>div[style="--size:24px"] .mark-compact{display:block}.problem-entry{background:var(--paper);color:var(--ink);padding:26px 5%;border-top:1px solid #80808033;scroll-margin-top:85px}.entry-title{display:flex;justify-content:space-between;gap:15px;font-size:12px;margin-bottom:24px}.entry-title>a{font-size:10px;opacity:.75}.problem-links{display:grid;grid-template-columns:repeat(3,1fr);gap:30px}.problem-links>a{display:flex;flex-direction:column;gap:9px;padding:0 15px 15px 0;border-right:1px solid #80808044;min-width:0}.problem-links>a:last-child{border:0}.problem-links small{font-size:9px;opacity:.7}.problem-links b{font-size:14px;font-weight:500;line-height:1.65}.problem-links span{font-size:10px;line-height:1.8;opacity:.8}.touchpoints>div{display:flex;flex-direction:column}.touchpoints>div>[data-design]{flex:1}@media(max-width:720px){.problem-entry{padding:28px 25px}.problem-links{grid-template-columns:1fr;gap:20px}.problem-links>a{border-right:0;border-bottom:1px solid #80808033;padding-bottom:20px}.problem-links b{font-size:16px}.problem-links span{font-size:12px}.touchpoints>div{display:block}}

*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:#111412;color:#e5e8df;font-family:"Helvetica Neue","PingFang SC","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:5px}a:focus-visible,summary:focus-visible{outline:2px solid #b7d383;outline-offset:5px}svg{display:block}button{font:inherit}.shell{max-width:1600px;margin:auto;padding:32px 4vw 70px}.mast{display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #3a4038;padding-bottom:22px;font-size:12px;letter-spacing:.09em}.mast .right{display:flex;gap:24px}.study-intro{display:grid;grid-template-columns:1.4fr 1fr;gap:70px;padding:70px 0 65px;align-items:end}.study-intro h1{font-size:clamp(32px,4.5vw,68px);font-weight:400;letter-spacing:-.055em;line-height:1.16;margin:0}.study-intro p{font-size:14px;line-height:1.9;color:#a5afa0;max-width:430px;margin:0}.kicker{font-size:11px;letter-spacing:.14em;color:#a0ae8e;margin-bottom:20px}.study-nav{position:sticky;z-index:10;top:0;display:flex;background:#111412f2;backdrop-filter:blur(14px);border-block:1px solid #3a4038;gap:30px;align-items:center;padding:18px 0;font-size:12px}.study-nav span{margin-left:auto;color:#a5afa0}.overview{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;padding:40px 0 55px}.overview-card{min-width:0}.overview-card h2{font-size:20px;font-weight:400;margin:18px 0 9px}.overview-card p{font-size:12px;color:#a5afa0;line-height:1.8}.overview-mini{aspect-ratio:1.28;overflow:hidden}.mini-hero{position:relative;width:100%;height:100%;overflow:hidden}.mini-hero .product-header{padding:20px}.mini-hero .wordmark{font-size:16px}.mini-hero .mark{width:23px;height:23px}.mini-hero .signature{gap:7px}.mini-hero .product-header>.product-description{display:none}.mini-hero .hero-copy{left:23px;top:30%;width:58%}.mini-hero h2{font-size:clamp(22px,2.3vw,36px);margin:0;line-height:1.18}.mini-hero .eyebrow{font-size:6px;letter-spacing:.05em;margin:0 0 12px}.mini-hero .intro,.mini-hero .start,.mini-hero .paths,.mini-hero .art-index{display:none}.mini-hero.b .field-art{right:0;width:60%}.mini-hero .portal-image{background-position:75% center}.mini-hero .field-art{height:90%;width:82%;right:-15%;bottom:-10%}.a{--paper:#ededeb;--ink:#242424;--accent:#666b69;background:var(--paper);color:var(--ink)}.b{--paper:#f2f1e8;--ink:#122f33;--accent:#a1c53c;background:var(--ink);color:var(--paper)}.c{--paper:#f4eee5;--ink:#332b28;--accent:#bd4c2e;background:var(--paper);color:var(--ink)}.signature{display:inline-flex;align-items:center;gap:12px;color:inherit;flex:none}.mark{width:34px;height:34px;flex:none}.wordmark{font-family:"Helvetica Neue",Arial,sans-serif;font-size:23px;font-weight:500;letter-spacing:-.065em;white-space:nowrap}.wm-dot{margin-left:1px}.b .wordmark{font-weight:400;letter-spacing:-.055em}.c .wordmark{font-family:Georgia,"Times New Roman",serif;font-weight:400;letter-spacing:-.07em;font-size:25px}.product-header{position:relative;z-index:2;display:flex;justify-content:space-between;gap:20px;padding:32px 5%;font-size:11px;align-items:center}.product-header>.product-description{opacity:.75}.portal-image{position:absolute;inset:0;background-size:cover;background-position:80% 0}.field-art{position:absolute;right:-1%;bottom:0;width:64%;height:94%;opacity:1}.hero{height:650px;position:relative;overflow:hidden;isolation:isolate}.hero-copy{position:absolute;left:6%;top:27%;width:43%;z-index:2}.eyebrow{font-size:11px;letter-spacing:.13em;margin:0 0 25px}.hero h2{font-size:clamp(44px,4.6vw,66px);font-weight:500;line-height:1.16;letter-spacing:-.055em;margin:0}.hero .intro{font-size:14px;line-height:1.9;margin:28px 0 22px;max-width:340px}.start{font-size:13px;display:inline-flex;gap:40px;border-bottom:1px solid currentColor;padding:10px 0 8px;min-height:44px;align-items:center}.start span{font-size:20px}.paths{position:absolute;bottom:30px;left:6%;width:43%;display:grid;grid-template-columns:repeat(3,1fr);gap:14px;border-top:1px solid #24242440;padding-top:15px;z-index:2}.b .paths{border-color:#f2f1e840}.paths a{display:grid;grid-template-columns:1fr auto;gap:5px}.paths b{font-size:13px;font-weight:500}.paths span{font-size:10px;grid-row:2;white-space:nowrap;opacity:.8}.paths i{font-style:normal;font-size:14px;grid-column:2;grid-row:1/3}.art-index{position:absolute;right:32px;bottom:30px;writing-mode:vertical-rl;letter-spacing:.17em;font-size:9px;z-index:1;opacity:.6}.hero.c h2{font-family:"Songti SC","STSong",serif;font-weight:500;letter-spacing:-.025em}.c .field-art{right:-5%;width:63%}.route{padding:65px 0 15px;scroll-margin-top:60px;border-top:1px solid #3a4038}.route-heading{display:grid;grid-template-columns:1fr 1fr;gap:50px;margin-bottom:30px;align-items:end}.route-heading h2{font-size:36px;font-weight:400;letter-spacing:-.04em;margin:0}.route-heading .route-sub{color:#b1bba9;font-size:13px;line-height:1.85;margin:0}.route-heading small{display:block;color:#9eae8c;font-size:10px;letter-spacing:.12em;margin-bottom:14px}.touchpoints{display:grid;grid-template-columns:1fr 1.5fr .85fr;gap:16px;margin:16px 0}.touchpoints>div{min-width:0}.surface-label{font-size:10px;color:#a5afa0;letter-spacing:.07em;margin:16px 0 12px}.chapter{position:relative;overflow:hidden;min-height:500px;padding:26px 24px 24px;display:flex;flex-direction:column;align-items:start}.chapter .signature{position:relative;z-index:2}.chapter .wordmark{font-size:16px}.chapter .mark{width:25px;height:25px}.chapter-copy{position:relative;z-index:2;margin-top:75px;max-width:100%;padding-bottom:20px}.chapter-copy .eyebrow{font-size:9px;margin-bottom:16px}.chapter h3{font-size:31px;line-height:1.45;letter-spacing:-.04em;margin:0;font-weight:500;max-width:250px;overflow-wrap:anywhere}.chapter-copy>p:last-child{font-size:10px;line-height:1.9;max-width:200px}.chapter-art{position:absolute;inset:0;opacity:.19}.chapter.a .chapter-art{opacity:.36}.chapter.a{background:#dededc}.chapter .portal-image{background-position:85% center}.chapter .field-art [data-label]{display:none}.chapter .field-art{width:120%;height:90%;right:-20%}.chapter-link{position:relative;margin-top:auto;font-size:11px;z-index:2}.reading{min-height:500px;background:var(--paper);color:var(--ink);padding:24px 28px}.reading-top{display:flex;justify-content:space-between;align-items:center;gap:10px;padding-bottom:20px;border-bottom:1px solid #24242422}.reading .signature .wordmark{font-size:15px}.reading .mark{width:23px;height:23px}.reading-top>span{font-size:8px;white-space:nowrap}.reading-content{padding-top:25px;position:relative}.section-marker{font-size:10px;letter-spacing:.08em;opacity:.65}.reading h3{font-size:30px;letter-spacing:-.035em;font-weight:500;margin:12px 0 17px}.evidence-line{font-size:10px!important;opacity:.7;line-height:1.8!important;margin:12px 0!important}.reading .lead{font-size:14px;line-height:1.95;margin:0}.reading h4{font-size:14px;margin:20px 0 12px;font-weight:500;line-height:1.7}.reading-content>p:not(.lead){font-size:13px;line-height:1.9;margin:0}.reading-content>a{font-size:10px;display:inline-block;border-bottom:1px solid currentColor;padding:12px 0 4px;margin-top:8px}.relation-line{height:12px;border-bottom:1px solid #24242422;position:relative;margin:16px 0 0}.relation-line .mark{position:absolute;right:0;width:18px;height:18px;background:var(--paper);padding-left:4px}.note{min-height:500px;padding:25px 24px;display:flex;flex-direction:column}.note-label{font-size:9px;letter-spacing:.06em}.note-icon{margin:34px 0 26px}.note-icon .mark{width:52px;height:52px}.note h3{font-size:25px;letter-spacing:-.04em;font-weight:500;margin:0 0 18px}.note p{font-size:11px;line-height:1.9;margin:0 0 25px}.note>a{margin-top:auto;padding-top:18px;border-top:1px solid currentColor;font-size:11px;display:flex;justify-content:space-between}.note.b{background:#c4d4ad;color:#122f33}.note.c{background:#bd4c2e;color:#f4eee5}.identity-strip{background:#1a1f1a;display:grid;grid-template-columns:1fr 1.2fr 1fr;gap:30px;padding:25px 28px;margin:30px 0 25px;align-items:center}.identity-strip p{font-size:11px;line-height:1.9;color:#b7c0b0;margin:8px 0 0}.identity-strip small{font-size:9px;color:#9eae8c;letter-spacing:.08em}.marks-line{display:flex;gap:18px;align-items:center;margin-top:15px}.marks-line>div{display:flex;flex-direction:column;gap:9px;align-items:center}.marks-line .mark{width:var(--size);height:var(--size)}.marks-line span{font-size:8px;color:#8d9b84}.mono{color:#fff}.swatches{display:flex;margin-top:15px;gap:6px}.swatch{height:32px;flex:1;position:relative;border:1px solid #ffffff22}.swatch b{position:absolute;top:40px;font-weight:400;font-family:monospace;font-size:9px;color:#b7c0b0}.risk{font-size:12px;line-height:1.85;color:#b4bfae;max-width:900px;padding:0 0 30px}details{border-top:1px solid #3a4038;padding:20px 0;font-size:12px;color:#a9b69f;line-height:1.85}summary{cursor:pointer;color:#d8dfd1}details p{max-width:850px}.comparison{padding:70px 0 20px;scroll-margin-top:40px}.comparison h2{font-size:32px;font-weight:400;margin-bottom:30px}.table-wrap{overflow:auto}table{border-collapse:collapse;width:100%;min-width:650px;font-size:12px;line-height:1.85}th,td{text-align:left;vertical-align:top;padding:17px 18px;border-bottom:1px solid #3a4038}th{color:#9eae8c;font-weight:400}td:first-child{color:#9eae8c;width:18%}.decision{display:grid;grid-template-columns:1fr 1fr;gap:50px;padding:45px 0;align-items:start}.decision h3{font-size:28px;font-weight:400;line-height:1.4;margin:0}.decision p{font-size:13px;line-height:1.9;color:#b4bfae;margin:0 0 15px}.foot{border-top:1px solid #3a4038;padding-top:25px;display:flex;justify-content:space-between;font-size:10px;color:#8a9981;gap:20px}body:has(#long:checked) .chapter h3{font-size:35px}#long{accent-color:#accf79}.probe-toggle{display:flex;gap:9px;align-items:center;font-size:11px;color:#a9b69f;margin:20px 0}.study-nav a{padding:4px 0}
@media(min-width:1800px){.hero{height:680px}.hero-copy{width:43%}}
@media(max-width:1100px){.touchpoints{grid-template-columns:1fr 1fr}.touchpoints>div:last-child{grid-column:1/-1}.note{min-height:230px;display:grid;grid-template-columns:1fr 2fr;gap:15px 30px}.note-label{grid-column:1/-1}.note-icon{grid-column:1;grid-row:2/5;margin:10px 0}.note-icon .mark{width:78px;height:78px}.note h3,.note p,.note a{grid-column:2}.identity-strip{grid-template-columns:1fr 1fr}.identity-strip>div:last-child{grid-column:1/-1;padding-bottom:20px}.hero-copy{width:45%}.hero h2{font-size:50px}.study-intro{gap:35px}}
@media(max-width:720px){.shell{padding:20px 18px 45px}.mast{font-size:9px}.mast .right{gap:14px}.study-intro{display:block;padding:45px 0 30px}.study-intro h1{font-size:42px}.study-intro p{margin-top:25px;font-size:12px;max-width:390px}.study-nav{gap:20px;font-size:10px;padding:14px 0}.study-nav span{display:none}.overview{grid-template-columns:1fr;gap:32px;padding-top:28px}.overview-mini{aspect-ratio:1.7}.mini-hero h2{font-size:32px}.mini-hero .hero-copy{left:24px;top:28%}.mini-hero .field-art{width:75%;height:100%}.overview-card h2{font-size:20px}.route{padding-top:40px}.route-heading{display:block;margin-bottom:22px}.route-heading h2{font-size:28px}.route-heading .route-sub{margin-top:17px;font-size:12px}.hero{height:750px}.product-header{padding:22px 24px}.product-header>.product-description{display:none}.hero-copy{left:24px;right:24px;top:118px;width:auto}.hero h2{font-size:46px;max-width:400px}.hero .eyebrow{margin-bottom:22px;font-size:9px}.hero .intro{max-width:310px;font-size:12px;margin:23px 0 17px}.hero .start{font-size:12px;gap:30px}.hero .portal-image{inset:340px 0 65px;background-position:86% center;mask-image:linear-gradient(transparent,#000 15%,#000 80%,transparent)}.hero .field-art{inset:auto -12% 55px auto;width:100%;height:340px;opacity:.8}.hero.b .field-art{right:0;width:100%;height:320px;bottom:70px}.hero.c .field-art{inset:auto -18% 50px auto;width:95%;height:350px;opacity:.65}.paths{left:24px;right:24px;bottom:20px;width:auto;gap:9px}.paths span{font-size:9px}.paths b{font-size:12px}.art-index{display:none}.touchpoints{display:block}.chapter{min-height:500px;padding:26px}.chapter h3{font-size:35px;max-width:280px}.reading{padding:26px;min-height:475px}.reading-top>span{font-size:8px}.reading h3{font-size:32px}.evidence-line{font-size:10px!important;opacity:.7;line-height:1.8!important;margin:12px 0!important}.reading .lead{font-size:14px}.reading-content>p:not(.lead){font-size:12px}.note{display:flex;min-height:410px;padding:28px}.note-icon{margin:32px 0 25px}.note-icon .mark{width:56px;height:56px}.note h3{font-size:30px}.note p{font-size:13px}.note-label{font-size:10px}.identity-strip{display:block;padding:25px}.identity-strip>div{margin-bottom:25px}.identity-strip>div:last-child{margin-bottom:0}.swatches{margin-bottom:30px}.comparison{padding-top:40px}.comparison h2{font-size:27px}.decision{display:block;padding:32px 0}.decision h3{margin-bottom:25px;font-size:25px}.foot{flex-direction:column;gap:15px}.wide-only{display:none}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}@media print{body{background:white;color:#111}.study-nav,.probe-toggle{display:none}.route{break-before:page}.hero{height:600px}.risk,.route-sub,.study-intro p{color:#333}}
'''
# Export individual native symbols, live-text wordmarks and token declarations.
for r in routes:
 key=r['id']
 family='Georgia,Times New Roman,serif' if key=='c' else 'Helvetica Neue,Arial,sans-serif'
 (D/f'mark-{key}.svg').write_text(f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" style="color:{r["color"]}"><title>World Map {r["name"]} 核心标记草案</title>{marks[key]}</svg>')
 (D/f'wordmark-{key}.svg').write_text(f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 64" width="300" height="64" style="color:{r["color"]}"><title>World Map {r["name"]} 组合签名草案</title><g transform="translate(0 0)">{marks[key]}</g><text x="80" y="43" font-family="{family}" font-size="36" letter-spacing="-1.7" fill="currentColor">World Map.</text></svg>')
(D/'tokens.json').write_text(json.dumps({'status':'draft_screen_design','routes':routes,'font_roles':{'interface':'Helvetica Neue / PingFang SC / Microsoft YaHei / sans-serif','c_expressive_chinese':'Songti SC / STSong / serif','reading':'系统无衬线；当前屏幕试作，需按实际字体和输出复查'},'asset_scope':'标记原创路径；wordmark为活字排印草案，未完成专属字形、商标检索或字体打包；A背景复用既有已认可资产'},ensure_ascii=False,indent=2)+'\n')
head='''<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>World Map — 三种关系 一套任务</title><style>'''+style+'</style></head><body><main class="shell">'
intro='''<header class="mast"><a href="/">WORLD MAP / BRAND STUDY 01</a><div class="right"><span>研究 → 构想 → 制作 → 判断</span><a href="/meta/brand-vi-research/world-map-brand-round1">推导记录 ↗</a></div></header><section class="study-intro"><div><div class="kicker">THREE RELATIONS · ONE SHARED BRIEF</div><h1>一份理解，<br>如何成为一个世界。</h1></div><p>面向更多读者的公共知识品牌。三种关系使用同一内容，展开首页、问题入口、章节、阅读与分享；比较哪种表达更值得继续。</p></section><nav class="study-nav" aria-label="方案比较导航"><a href="#overview">三案总览</a><a href="#route-a">A / 入口</a><a href="#route-b">B / 坐标</a><a href="#route-c">C / 修订</a><a href="#comparison">比较与选择</a><span>阶段样稿 · 作者审查</span></nav>'''
overview='<section class="overview" id="overview">'+''.join(f'<article class="overview-card"><div class="overview-mini">{hero(r,True)}</div><h2><a href="#route-{r["id"]}">{r["code"]} / {r["name"]}</a></h2><p>{r["claim"]}<br>{r["mechanism"]}</p></article>' for r in routes)+'</section>'
sections=''
for r in routes:
 key=r['id']
 sections+=f'''<section class="route" id="route-{key}"><div class="route-heading"><div><small>{r['code']} / {r['en']}</small><h2>{r['name']}</h2></div><p class="route-sub">{r['mechanism']}</p></div>{hero(r)}{entry(r)}<div class="touchpoints"><div><div class="surface-label">01 / CHAPTER — 长标题章节封面</div>{chapter(r)}</div><div><div class="surface-label">02 / READING — 持续阅读</div>{reading(r)}</div><div><div class="surface-label">03 / SHARE — 研究分享卡</div>{note(r)}</div></div><div class="identity-strip"><div><small>CORE MARK / 单色与小尺寸</small><div class="marks-line mono">{''.join(f'<div style="--size:{sz}px">{symbol(key)}<span>{sz}px</span></div>' for sz in [16,24,32,48])}</div></div><div><small>TYPE / 表达与阅读分工</small><p>{'系统无衬线，标题保持明确；结构标记退入阅读。' if key=='a' else '无衬线与坐标关系；连线不进入正文行间。' if key=='b' else '宋体表达标题与无衬线正文；痕迹留在页边。'}</p><p>World Map. / 建立自己的理解 / A6</p></div><div><small>PALETTE / 角色用色</small><div class="swatches">{''.join(f'<div class="swatch" style="background:{c}"><b>{c}</b></div>' for c in [r['paper'],r['color'],r['accent']])}</div></div></div><p class="risk">本案需继续判断：{r['risk']}</p><details><summary>这条概念怎样改变了制作</summary><p>{r['claim']}命题进入图形母体、标题职责、区域关系与阅读中的简化。三个方案使用同一主张、相同说明、相同长标题和正文内容，比较整组配置，不把结果单独归因于颜色或标记。A复用既有灰度阈口；B与C为本轮原创矢量构造。</p><p>图形标与组合签名可在资产包中继续精修。这里的16—48像素是观察样张，尚未设为品牌通用最小尺寸；系统字体依赖当前环境，实体输出与受众辨认另检。</p></details></section>'''
comparison='''<section class="comparison" id="comparison"><div class="kicker">DECISION / 公共知识品牌</div><h2>先让读者找到位置，<br>再让理解继续生长。</h2><div class="table-wrap"><table><thead><tr><th>判断问题</th><th>A / 有立场的入口</th><th>B / 关系中的坐标</th><th>C / 持续修订的图谱</th></tr></thead><tbody><tr><td>回应公共任务</td><td>入口与空间有力量，提供被邀请进入的关系；仍依赖问题卡交代用途。</td><td>共同参照和三条并行路径对应现有体系；问题、领域与阅读位置相接。</td><td>前后层次表达理解可修订；修订的价值需要具体内容支撑。</td></tr><tr><td>已有支持</td><td>灰度阈口有历史审美认可；公共受众与新配套未检。</td><td>内容结构支持共同参照与并行入口；新视觉尚无受众反馈。</td><td>实际修订过程支持概念；新视觉尚无受众反馈。</td></tr><tr><td>当前制作所得</td><td>空间退为结构标记，能继续做章节与阅读；高对比区域要分配文字。</td><td>单一线性路径已改为三条并行支路，避免暗示固定学习次序。</td><td>小尺寸密集叠层改为两层简化标记；正文仍保持当前内容完整。</td></tr><tr><td>阶段决定</td><td>保留完整备选与历史视觉基准。</td><td>优先进入公共入口与核心标识的下一轮比较。</td><td>保留为专题出版和过程表达的备选，不混入最终体系。</td></tr></tbody></table></div><div class="decision"><h3>阶段优先 B。<br>先比较公共入口能否工作。</h3><div><p>用户明确将目标改为公共知识品牌。当前优先B，是因为它以共同参照与并行路径承担“在复杂知识中找到位置”的公共任务；A的历史认可仍然有效，但不足以独自确定新目标下的整套选择。</p><p>这是一项有范围的作者选择。当前样稿和检查支持制作、结构与条件修订；陌生读者的第一眼理解、品牌辨认、入口选择与阅读所得仍需相应观察。</p><p><a href="/meta/brand-vi-research/world-map-brand-round1">查看研究、方法调用、检查和回写 ↗</a></p></div></div></section><footer class="foot"><span>World Map / 建立自己的理解。</span><span>公共知识品牌 · 阶段设计研究 · 2026.10</span></footer>'''
(D/'studio.htm').write_text(head+intro+overview+sections+comparison+'</main></body></html>')
(D/'mark-c-small.svg').write_text(f'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" style="color:#332b28"><title>World Map 修订路线小尺寸变体草案</title>{compact_c}</svg>')
print('Built public-knowledge edition; three parallel paths; small C variant; existing image reused.')
