@font-face{font-family:ZX Bodoni;src:url(/fonts/zx-bodoni.woff2) format("woff2");font-weight:400 900;font-style:normal;font-display:swap}@font-face{font-family:ZX Bodoni;src:url(/fonts/zx-bodoni-italic.woff2) format("woff2");font-weight:400 900;font-style:italic;font-display:swap}@font-face{font-family:ZX Newsreader;src:url(/fonts/zx-newsreader.woff2) format("woff2");font-weight:400 600;font-style:normal;font-display:swap}@font-face{font-family:ZX Newsreader;src:url(/fonts/zx-newsreader-italic.woff2) format("woff2");font-weight:400 600;font-style:italic;font-display:swap}@font-face{font-family:ZX Plex Mono;src:url(/fonts/zx-plex-mono-400.woff2) format("woff2");font-weight:400;font-display:swap}@font-face{font-family:ZX Plex Mono;src:url(/fonts/zx-plex-mono-500.woff2) format("woff2");font-weight:500 700;font-display:swap}@font-face{font-family:"SMM Serif SC";src:url(fonts/smm-serif-sc-400.woff2) format("woff2");font-weight:400;font-display:swap;unicode-range:U+3000-303F,U+3400-4DBF,U+4E00-9FFF,U+FF00-FFEF,U+2014,U+2026,U+00B7,U+201C-201D,U+2018-2019}@font-face{font-family:"SMM Serif SC";src:url(fonts/smm-serif-sc-600.woff2) format("woff2");font-weight:500 700;font-display:swap;unicode-range:U+3000-303F,U+3400-4DBF,U+4E00-9FFF,U+FF00-FFEF,U+2014,U+2026,U+00B7,U+201C-201D,U+2018-2019}@font-face{font-family:"SMM Serif SC";src:url(fonts/smm-serif-sc-900.woff2) format("woff2");font-weight:800 900;font-display:swap;unicode-range:U+3000-303F,U+3400-4DBF,U+4E00-9FFF,U+FF00-FFEF,U+2014,U+2026,U+00B7,U+201C-201D,U+2018-2019}:root{--paper:#EEE8DC;--paper-2:#E5DDCD;--paper-3:#D7CDB9;--ink:#15130F;--ink-2:#3E3A32;--ink-3:#5F594E;--ink-4:#A0978A;--rule:rgba(21,19,15,.16);--rule-strong:#15130F;--verm:#C4351C;--verm-ink:#A82C16;--verm-wash:rgba(196,53,28,.09);--on-verm:#FBF6EC;--gold:#F2B45A;--gold-ink:#83530B;--gold-wash:rgba(242,180,90,.22);--plate:#0C0B09;--plate-2:#15130F;--plate-rule:rgba(238,232,220,.16);--plate-ink:#EEE8DC;--silver:#D8D0C0;--silver-ink:#B9B0A0;--lit-verm:#FF5A36;--ember-5:#FFC06E;--ember-6:#FFF0D2;--slip:rgba(238,232,220,.95);--slip-line:rgba(21,19,15,.55);--slip-shadow:rgba(12,11,9,.85);--plate-halation:0 44px 90px -56px rgba(229,66,31,.55),0 20px 44px -30px rgba(255,123,58,.28),0 2px 0 -1px rgba(21,19,15,.18);--grain-opacity:.42;--grain-blend:multiply;--grain-filter:none;--f-display:"ZX Bodoni","Bodoni Moda","Bodoni 72",Didot,"Bodoni MT",Georgia,serif;--f-text:"ZX Newsreader",Newsreader,"Iowan Old Style","Palatino Linotype",Palatino,Georgia,serif;--f-mono:"ZX Plex Mono","IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;--f-glyph:"SMM Serif SC","ZX Display SC","Noto Serif SC","Source Han Serif SC","Songti SC",serif;--f-zh:"SMM Serif SC","ZX Newsreader","Noto Serif SC","Source Han Serif SC","Songti SC","STSong","SimSun",serif;--f-zh-display:"SMM Serif SC","ZX Bodoni","Noto Serif SC","Source Han Serif SC","Songti SC",serif;--f-zh-mono:"ZX Plex Mono","SMM Serif SC","Noto Serif SC","Songti SC",serif;--maxw:1340px;--margin:clamp(16px,4vw,56px);--gut:clamp(16px,2vw,28px);--ease-ink:cubic-bezier(.16,.84,.24,1);--ease-ui:cubic-bezier(.2,.9,.1,1);color-scheme:light}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--paper:#12110E;--paper-2:#1A1814;--paper-3:#26231D;--ink:#ECE5D6;--ink-2:#C9C1B0;--ink-3:#A39B8A;--ink-4:#5E574B;--rule:rgba(236,229,214,.14);--rule-strong:#ECE5D6;--verm:#FF5A36;--verm-ink:#FF7A5C;--verm-wash:rgba(255,90,54,.12);--on-verm:#12110E;--gold-ink:#F2B45A;--gold-wash:rgba(242,180,90,.13);--plate:#070605;--plate-halation:0 44px 90px -50px rgba(229,66,31,.4),0 0 0 1px rgba(236,229,214,.1);--grain-opacity:.1;--grain-blend:screen;--grain-filter:invert(1);color-scheme:dark}}:root[data-theme=dark]{--paper:#12110E;--paper-2:#1A1814;--paper-3:#26231D;--ink:#ECE5D6;--ink-2:#C9C1B0;--ink-3:#A39B8A;--ink-4:#5E574B;--rule:rgba(236,229,214,.14);--rule-strong:#ECE5D6;--verm:#FF5A36;--verm-ink:#FF7A5C;--verm-wash:rgba(255,90,54,.12);--on-verm:#12110E;--gold-ink:#F2B45A;--gold-wash:rgba(242,180,90,.13);--plate:#070605;--plate-halation:0 44px 90px -50px rgba(229,66,31,.4),0 0 0 1px rgba(236,229,214,.1);--grain-opacity:.1;--grain-blend:screen;--grain-filter:invert(1);color-scheme:dark}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth;background:var(--paper)}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--f-text);font-size:17px;line-height:1.55;font-optical-sizing:auto;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}body:before{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;background:url(/img/grain.webp) repeat;background-size:256px;opacity:var(--grain-opacity);mix-blend-mode:var(--grain-blend);filter:var(--grain-filter)}@media(min-width:900px){body{font-size:18px}}img,svg{display:block;max-width:100%}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:.18em}a:hover{color:var(--verm-ink)}button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer;-webkit-tap-highlight-color:transparent}:focus-visible{outline:2px solid var(--ink);outline-offset:3px}h1,h2,h3,h4,p,dl,dd,ol,ul,blockquote,figure{margin:0}ol,ul{padding:0;list-style:none}.sr{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}.js .nojs-only{display:none!important}html:not(.js) .js-only{display:none!important}.is-pending body>*{visibility:hidden;animation:unhide 0s 1.2s forwards}@keyframes unhide{to{visibility:visible}}.wrap{max-width:var(--maxw);margin-inline:auto;padding-inline:var(--margin)}.skip{position:absolute;left:12px;top:-60px;z-index:50;background:var(--ink);color:var(--paper);padding:10px 14px;font-family:var(--f-mono);font-size:13px}.skip:focus{top:10px}.bar{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:16px;min-height:56px;padding-inline:var(--margin);background:color-mix(in srgb,var(--paper) 90%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border-bottom:1px solid var(--rule-strong)}.lang{display:inline-flex;border:1px solid var(--rule-strong)}.lang__b{min-width:44px;min-height:36px;padding:0 10px;font-family:var(--f-mono);font-size:13px;font-weight:500;letter-spacing:.06em}.lang__b--zh{font-family:var(--f-glyph);font-weight:900;font-size:15px;letter-spacing:0}.lang__b[aria-pressed=true]{background:var(--ink);color:var(--paper)}.lang__b:not([aria-pressed=true]):hover{background:var(--verm-wash)}.hero{position:relative;display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:var(--gut);align-items:center;padding-block:clamp(24px,3.4vw,52px) clamp(24px,3vw,40px)}.hero__glyph{position:relative;align-self:stretch;min-height:320px;overflow:visible}.glyph{position:absolute;left:calc(-1 * var(--margin) - .08em);top:50%;transform:translateY(-52%);font-family:var(--f-glyph);font-weight:900;font-size:clamp(250px,31vw,470px);line-height:1;color:var(--ink);text-shadow:-.0065em .006em 0 var(--verm);user-select:none}.kicker{font-family:var(--f-mono);font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--verm-ink);margin-bottom:18px}.hero__h1{font-family:var(--f-display);font-weight:500;font-size:clamp(42px,5.2vw,80px);line-height:.98;letter-spacing:-.01em;max-width:11.5em}.hero__h1 em{font-style:italic;color:var(--verm)}.hero__dek{margin-top:24px;font-size:clamp(19px,.6vw + 15.5px,23px);line-height:1.5;color:var(--ink-2);max-width:34em;font-style:italic}.hero__note{display:flex;align-items:center;gap:12px;margin-top:18px;font-size:15px;color:var(--ink-3)}.hero__note-rule{width:32px;height:1px;background:var(--verm)}.hz{font-family:var(--f-glyph);font-weight:900;color:var(--ink)}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;margin-top:26px;border-top:1px solid var(--rule-strong);max-width:40em}.stat{padding:12px 12px 0 0}.stat+.stat{padding-left:14px;border-left:1px solid var(--rule)}.stat dt{font-family:var(--f-display);font-weight:500;font-size:clamp(40px,4vw,54px);line-height:1}.stat dd{margin-top:6px;font-size:15px;line-height:1.3;color:var(--ink-3)}.hero__by{margin-top:18px;font-style:italic;font-size:15.5px;color:var(--ink-2)}.hero__jump{display:inline-block;margin-top:14px;font-family:var(--f-mono);font-size:13px;text-decoration:none;border-bottom:1px solid var(--verm);padding-bottom:3px;color:var(--verm-ink)}@media(max-width:860px){.hero{grid-template-columns:1fr;padding-top:8px}.hero__glyph{min-height:0;height:clamp(150px,44vw,240px);overflow:hidden;margin-inline:calc(-1 * var(--margin))}.glyph{left:-.06em;top:auto;bottom:-.24em;transform:none;font-size:clamp(210px,62vw,340px)}}@media(max-width:520px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.stat:nth-child(3){padding-left:0;border-left:0}.stat:nth-child(n+3){border-top:1px solid var(--rule);margin-top:12px}}.fig{padding-block:clamp(56px,7vw,112px) 0}#f1{padding-top:clamp(36px,4vw,64px)}.fig__head{display:grid;grid-template-columns:minmax(0,1fr);gap:10px;max-width:52em;margin-bottom:26px}.fig__meta{display:flex;align-items:center;gap:12px}.fig__num{font-family:var(--f-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--verm-ink)}.tag{font-family:var(--f-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;border:1px solid var(--rule-strong);padding:1px 7px 2px;color:var(--ink-2)}.fig__title{font-family:var(--f-display);font-weight:500;font-size:clamp(34px,3.8vw,56px);line-height:1.02;letter-spacing:-.005em}.fig__dek{font-size:clamp(18px,.3vw + 16.5px,20px);color:var(--ink-2);max-width:40em}.try{display:flex;align-items:center;gap:10px;font-style:italic;color:var(--verm-ink);font-size:16px}.try__dot{width:8px;height:8px;border-radius:50%;background:var(--verm);box-shadow:0 0 0 4px var(--verm-wash);flex:none}.fig__note{margin-top:18px;font-size:15px;font-style:italic;color:var(--ink-3);max-width:60em}.f1__grid{display:grid;grid-template-columns:minmax(0,8.4fr) minmax(0,3.6fr);grid-template-areas:"plate ladder" "detail ladder";gap:var(--gut) clamp(20px,2.4vw,40px)}.plate{grid-area:plate;background:var(--plate);color:var(--plate-ink);box-shadow:var(--plate-halation);padding:14px 14px 16px;position:relative}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .plate{outline:1px solid rgba(236,229,214,.16)}}:root[data-theme=dark] .plate{outline:1px solid rgba(236,229,214,.16)}.plate__bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;margin-bottom:10px}.seg{display:inline-flex;align-items:center;gap:6px;flex-wrap:wrap}.seg__label{font-family:var(--f-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--silver-ink);margin-right:4px}.seg__b,.pp{min-height:38px;padding:0 12px;border:1px solid var(--plate-rule);font-family:var(--f-mono);font-size:13px;color:var(--plate-ink);transition:background .12s,border-color .12s}.seg__b:hover,.pp:hover{border-color:#eee8dc80}.seg__b[aria-checked=true]{background:var(--slip);color:#15130f;border-color:var(--slip)}.seg__b[data-route=direct][aria-checked=true]{background:var(--lit-verm);border-color:var(--lit-verm);color:#12110e}.pp{display:inline-flex;align-items:center;gap:8px;margin-left:auto}.pp__icon{width:10px;height:11px;border-inline:3px solid currentColor}.pp.is-paused .pp__icon{border:0;border-left:10px solid currentColor;border-block:5.5px solid transparent;width:0;height:0}.plate :focus-visible{outline-color:var(--plate-ink)}.stage{position:relative;width:100%;aspect-ratio:1000/500;touch-action:pan-y}.stage__svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible}.grid line{stroke:#eee8dc0e;stroke-width:1;vector-effect:non-scaling-stroke}.edge{fill:none;stroke:var(--silver);stroke-opacity:.2;stroke-width:1.1;vector-effect:non-scaling-stroke}.edge--bpa,.edge--pap{stroke-dasharray:2 5;stroke-opacity:.26}.edge--g1,.edge--g2{stroke-dasharray:4 6}.route{fill:none;stroke-width:2.2;vector-effect:non-scaling-stroke;stroke-linecap:round}.route-glow{fill:none;stroke-width:9;stroke-linecap:round;opacity:.22;filter:blur(5px)}.route-glow--direct{stroke:var(--lit-verm);opacity:.4}.route-glow--hub{stroke:var(--silver)}.route-glow--grey{stroke:var(--silver);opacity:.1}.route--direct{stroke:var(--lit-verm);stroke-opacity:.9}.route--hub{stroke:var(--silver);stroke-opacity:.62}.route--grey{stroke:var(--silver);stroke-opacity:.45;stroke-dasharray:5 7}.n__halo{fill:#eee8dc12;stroke:#eee8dc61;stroke-width:1;vector-effect:non-scaling-stroke}.n__core{fill:var(--plate-ink)}.n--phone .n__core{fill:var(--gold)}.n--phone .n__halo{stroke:#f2b45a99}.n--simfarm .n__halo{stroke-dasharray:3 3}.n__sel{fill:none;stroke:var(--lit-verm);stroke-width:1.6;opacity:0;vector-effect:non-scaling-stroke;transition:opacity .2s}.n.is-sel .n__sel{opacity:1}.n.is-dim{opacity:.32}.phone-glow{mix-blend-mode:screen}.p__core{fill:var(--ember-6)}.p--rcpt .p__core,.p--trcpt .p__core{fill:var(--silver)}.p__ring{fill:none;stroke:var(--ember-5);stroke-width:1.2;vector-effect:non-scaling-stroke}.p--trcpt .p__ring{stroke:var(--silver)}.p__cash{fill:var(--slip);stroke:#15130f;stroke-width:.8}.stage[data-show=receipt] .p--msg{opacity:.35}.burst__ring{fill:none;stroke:var(--gold);stroke-width:2;vector-effect:non-scaling-stroke;transform-box:fill-box;transform-origin:center;animation:ring 1s var(--ease-ink) forwards}.burst--gold .burst__ring{filter:drop-shadow(0 0 6px rgba(242,180,90,.8))}.burst__x{stroke:var(--silver);stroke-width:2;stroke-linecap:round;vector-effect:non-scaling-stroke;animation:fade 1.1s ease-out forwards}.burst.is-still .burst__ring{animation:none;transform:scale(2.2);opacity:.85}.burst.is-still .burst__x{animation:none;opacity:.9}@keyframes ring{0%{transform:scale(.6);opacity:1}to{transform:scale(3.4);opacity:0}}@keyframes fade{0%{opacity:1}70%{opacity:1}to{opacity:0}}.node{position:absolute;z-index:2;display:flex;flex-direction:column;align-items:flex-start;gap:1px;text-align:left;background:var(--slip);color:#15130f;border:1px solid var(--slip-line);box-shadow:1px 1px 0 var(--slip-shadow);padding:4px 9px 5px;white-space:nowrap;min-height:32px;transition:transform .12s var(--ease-ui),background .12s,opacity .2s}.node--b{transform:translate(-50%,16px)}.node--t{transform:translate(-50%,calc(-100% - 16px))}.node--r{transform:translate(16px,-50%)}.node--l{transform:translate(calc(-100% - 16px),-50%)}.node--bl{transform:translate(-14px,16px)}.node__name{font-family:var(--f-text);font-style:italic;font-size:15.5px;line-height:1.15}.node__sub{font-family:var(--f-mono);font-size:12px;line-height:1.2;color:#4a453c}.node__tag{display:none;font-family:var(--f-mono);font-size:12px;line-height:1.2;color:#a82c16;font-weight:500}.node__tag:empty{display:none!important}.stage[data-show=money] .node__tag{display:block}.stage[data-show=money] .node__tag:before{content:"↳ "}.node:hover{background:#fff8ea}.node[aria-pressed=true]{background:var(--lit-verm);border-color:var(--lit-verm);color:#12110e}.node[aria-pressed=true] .node__sub,.node[aria-pressed=true] .node__tag{color:#12110e}.node.is-dim:not([aria-pressed=true]){background:#0c0b09b8;color:var(--silver-ink);border-color:#eee8dc47;box-shadow:none}.node.is-dim:not([aria-pressed=true]) .node__sub{color:#8f877a}.node.is-dim:not([aria-pressed=true]):hover{color:var(--plate-ink);border-color:#eee8dc99}.stage[data-orient=port] .node{padding:3px 8px 4px}.stage[data-orient=port] .node__sub{display:none}.stage[data-orient=port] .node__name{font-size:14.5px}.plate__cap{margin-top:10px;font-style:italic;font-size:16px;line-height:1.5;color:var(--silver-ink);max-width:60em;min-height:3em}.plate__fact{margin-top:6px;font-size:15px;color:var(--silver-ink);border-left:2px solid var(--lit-verm);padding-left:10px;max-width:60em}.chain-list h3{font-weight:400;font-family:var(--f-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--silver-ink);margin:4px 0 10px}.chain-list ol{counter-reset:c;display:grid;gap:12px}.chain-list li{counter-increment:c;padding-left:34px;position:relative}.chain-list li:before{content:counter(c,decimal-leading-zero);position:absolute;left:0;top:2px;font-family:var(--f-mono);font-size:12px;color:var(--lit-verm)}.chain-list b{font-weight:600}.chain-list__sub{font-family:var(--f-mono);font-size:12px;color:var(--silver-ink)}.chain-list p{font-size:16px;color:var(--silver);margin-top:2px}.detail{grid-area:detail;border-top:1px solid var(--rule-strong);padding-top:14px;max-width:44em}.detail__kicker{font-family:var(--f-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--verm-ink)}.detail__name{margin-top:6px;font-family:var(--f-display);font-weight:500;font-size:clamp(28px,2.4vw,36px);line-height:1.05}.detail__name span{display:inline-block;font-family:var(--f-mono);font-size:12.5px;font-weight:400;color:var(--ink-3);vertical-align:.5em;margin-left:6px}.detail__body{margin-top:10px;color:var(--ink-2)}.rules{margin-top:18px;padding:14px 16px;background:var(--paper-2);border-left:2px solid var(--ink)}.rules h4{font-weight:400;font-family:var(--f-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);margin-bottom:8px}.rules dl{display:grid;gap:8px}.rules dt{font-weight:600;font-size:15.5px}.rules dd{font-size:15.5px;color:var(--ink-2)}.rules__note{margin-top:10px;font-size:14px;font-style:italic;color:var(--ink-3)}.ladder{grid-area:ladder;align-self:start;border-top:2px solid var(--rule-strong);padding-top:14px}.ladder h3{font-family:var(--f-display);font-weight:500;font-size:clamp(26px,2.2vw,32px);line-height:1.06}.ladder__dek{margin-top:8px;font-size:16px;font-style:italic;color:var(--ink-2)}.ladder__list{margin-top:18px;position:relative}.ladder__list:before{content:"";position:absolute;left:8px;top:10px;bottom:22px;width:1px;background:var(--rule-strong)}.rung{position:relative;display:flex;gap:14px;padding:0 0 16px}.rung__mark{position:relative;flex:none;width:17px;height:17px;margin-top:3px;border-radius:50%;border:1.5px solid var(--ink);background:var(--paper);transition:background .3s,border-color .3s}.rung__mark:after{position:absolute;inset:0;display:grid;place-items:center;font-family:var(--f-mono);font-size:12px;line-height:1;font-weight:500}.rung__txt{display:grid;gap:1px}.rung__txt b{font-weight:600;font-size:16.5px;line-height:1.3}.rung__txt span{font-size:15px;line-height:1.4;color:var(--ink-3)}.rung--idle .rung__txt b{color:var(--ink-3)}.rung--ok .rung__mark{background:var(--ink)}.rung--ok:nth-child(n+4) .rung__mark{background:var(--gold);border-color:var(--gold-ink);box-shadow:0 0 0 4px var(--gold-wash)}.rung--warn .rung__mark{border-style:dashed}.rung--warn .rung__mark:after{content:"!"}.rung--fail .rung__mark{background:var(--paper-3);border-color:var(--ink-3)}.rung--fail .rung__mark:after{content:"×";color:var(--ink-2)}.rung--fail .rung__txt b{color:var(--ink-3);text-decoration:line-through;text-decoration-thickness:1px}@media(max-width:1000px){.f1__grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);grid-template-areas:"plate plate" "detail ladder"}}@media(max-width:700px){.f1__grid{grid-template-columns:minmax(0,1fr);grid-template-areas:"plate" "detail" "ladder"}}@media(max-width:640px){.plate{margin-inline:calc(-1 * var(--margin));padding:12px 12px 14px}.plate__bar{gap:8px 10px}.seg{width:100%}.seg__label{width:4.6em}.seg__b{flex:1;padding:0 6px;font-size:12.5px;min-height:40px}.pp{margin-left:0;min-height:40px}.stage{aspect-ratio:360/680}}.chips-wrap{position:relative;margin-bottom:16px}.chips{display:flex;flex-wrap:wrap;gap:8px}.chip{min-height:42px;padding:0 15px;border:1px solid var(--rule-strong);font-size:16.5px;line-height:1.2;transition:background .12s,color .12s}.chip:hover{background:var(--verm-wash)}.chip[aria-checked=true]{background:var(--verm);border-color:var(--verm);color:var(--on-verm)}@media(max-width:640px){.chips-wrap{margin-inline:calc(-1 * var(--margin))}.chips{flex-wrap:nowrap;overflow-x:auto;padding:2px var(--margin) 8px;scroll-snap-type:x proximity;scrollbar-width:none;-webkit-overflow-scrolling:touch}.chips::-webkit-scrollbar{display:none}.chip{flex:none;scroll-snap-align:start;white-space:nowrap}.chips-wrap:after{content:"";position:absolute;right:0;top:0;bottom:8px;width:28px;background:linear-gradient(90deg,transparent,var(--paper));pointer-events:none}}.ctx{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 14px;padding:12px 0;border-top:1px solid var(--rule);margin-bottom:6px}.ctx strong{font-weight:600;font-size:19px}.ctx span{color:var(--ink-2)}.ctx em{font-size:15px;color:var(--ink-3)}.map{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));grid-auto-rows:auto;border-top:2px solid var(--rule-strong);border-bottom:1px solid var(--rule-strong)}.col{padding:16px 16px 22px;min-width:0;display:grid;grid-row:span 2;grid-template-rows:subgrid;row-gap:0}.col+.col{border-left:1px solid var(--rule)}.col:first-child{padding-left:0}.col:last-child{padding-right:0}.col__head{padding-bottom:14px;border-bottom:1px solid var(--rule);margin-bottom:14px}.col__n{display:block;font-family:var(--f-display);font-style:italic;font-weight:500;font-size:40px;line-height:1;color:var(--verm)}.col__head h3{margin-top:8px;font-family:var(--f-text);font-weight:600;font-size:21px;line-height:1.15}.col__head p{margin-top:4px;font-size:15px;line-height:1.35;font-style:italic;color:var(--ink-3)}.blk+.blk{margin-top:18px;padding-top:16px;border-top:1px dashed var(--rule)}.blk h4{display:flex;align-items:center;gap:8px;font-weight:400;font-style:italic;font-size:15.5px;color:var(--verm-ink);margin-bottom:10px}.blk h4:before{content:"";width:6px;height:6px;background:var(--verm);flex:none}.it+.it{margin-top:12px}.it b{display:block;font-weight:600;font-size:16.5px;line-height:1.3}.it p{margin-top:2px;font-size:16px;line-height:1.5;color:var(--ink-2)}.map.is-in .it,.is-in>.sc,.detail.is-in{animation:inkin .62s var(--ease-ink) both;animation-delay:calc(var(--k,0) * 14ms)}.is-in>.sc:nth-child(2){animation-delay:60ms}.is-in>.sc:nth-child(3){animation-delay:.12s}@keyframes inkin{0%{opacity:0;filter:blur(5px);transform:translateY(4px)}to{opacity:1;filter:blur(0);transform:none}}@media(prefers-reduced-motion:reduce){.map.is-in .it,.is-in>.sc,.detail.is-in{animation:none}}.thesis{display:grid;grid-template-columns:auto 1fr;gap:6px 22px;align-items:baseline;margin-top:0;padding:18px 20px;background:var(--paper-2);border-left:3px solid var(--verm)}.thesis__label{font-family:var(--f-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--verm-ink)}.thesis__text{font-family:var(--f-text);font-style:italic;font-size:clamp(19px,1.2vw + 12px,24px);line-height:1.35}@media(max-width:1180px){.map{grid-template-columns:repeat(2,minmax(0,1fr))}.col,.col:first-child,.col:last-child{padding:16px 16px 22px}.col:nth-child(odd){padding-left:0;border-left:0}.col:nth-child(n+3){border-top:1px solid var(--rule-strong)}}@media(max-width:700px){.map{grid-template-columns:minmax(0,1fr)}.col,.col:first-child,.col:last-child{padding:16px 0 20px;border-left:0}.col+.col{border-top:1px solid var(--rule-strong)}.thesis{grid-template-columns:1fr}}.tabs{display:flex;flex-wrap:wrap;gap:4px 26px;border-bottom:1px solid var(--rule-strong);margin-bottom:22px}.tab{position:relative;min-height:46px;font-size:19px;color:var(--ink-3);padding:0 0 8px}.tab:hover,.tab[aria-selected=true]{color:var(--ink)}.tab[aria-selected=true]:after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:3px;background:var(--verm)}.sc-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--gut)}.sc{border-top:1px solid var(--rule-strong);padding-top:14px;display:grid;align-content:start;gap:10px}.sc__label{font-family:var(--f-mono);font-size:12px;letter-spacing:.06em;color:var(--verm-ink)}.sc h3{font-family:var(--f-display);font-weight:500;font-size:clamp(25px,2vw,30px);line-height:1.1}.sc p{color:var(--ink-2)}.sc__small{font-size:15.5px;color:var(--ink-3)!important}.formula{background:var(--paper-2);padding:16px 18px;font-style:italic;font-size:17px;line-height:1.35;text-align:center;border:1px solid var(--rule)}.formula--frac{display:grid;gap:8px}.formula__bar{height:1.5px;background:var(--ink);width:88%;justify-self:center}.formula--diff{display:grid;gap:4px}.formula__op{font-style:normal;font-family:var(--f-display);font-size:28px;line-height:1;color:var(--verm)}.sc--obj blockquote{position:relative;padding-left:18px;border-left:2px solid var(--verm)}.sc--obj blockquote p{font-family:var(--f-display);font-style:italic;font-size:clamp(21px,1.4vw + 10px,26px);line-height:1.25;color:var(--ink)}.sc-rest__h{font-family:var(--f-display);font-weight:500;font-size:28px;margin:34px 0 14px}@media(max-width:900px){.sc-grid{grid-template-columns:minmax(0,1fr)}}.track{position:relative;height:150px;margin-bottom:8px}.track__svg{position:absolute;left:0;top:0;width:100%;height:120px;overflow:visible}.track__line{stroke:var(--rule-strong);stroke-width:1.5}.track__loop{fill:none;stroke:var(--verm);stroke-width:1.3;stroke-dasharray:4 6;opacity:.7}.track__loop-label{position:absolute;left:50%;top:-6px;transform:translate(-50%);font-style:italic;font-size:15px;color:var(--verm-ink);background:var(--paper);padding:0 10px;white-space:nowrap}.track__loop-label:before{content:"↺ "}.track__light{position:absolute;top:78px;left:calc((var(--sel) + .5) / var(--n) * 100%);width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;background:radial-gradient(circle,#ff5a368c,#ff5a3600 70%);transition:left .7s var(--ease-ink);pointer-events:none}@media(prefers-reduced-motion:reduce){.track__light{transition:none}}.track__stations{position:absolute;inset:0;display:grid;grid-template-columns:repeat(var(--n),minmax(0,1fr))}.st{position:relative;display:flex;flex-direction:column;align-items:center;padding-top:69px;gap:6px;min-height:44px}.st__dot{width:18px;height:18px;border-radius:50%;background:var(--paper);border:1.5px solid var(--ink);transition:background .2s,transform .2s var(--ease-ui)}.st--gold .st__dot{background:var(--gold);border-color:var(--gold-ink);box-shadow:0 0 0 5px var(--gold-wash)}.st[aria-current=step] .st__dot{background:var(--verm);border-color:var(--verm);transform:scale(1.15)}.st__n{font-family:var(--f-mono);font-size:12px;color:var(--ink-3);line-height:1}.st__name{font-size:16px;line-height:1.1}.st[aria-current=step] .st__name{color:var(--verm-ink);font-weight:600}.st:hover .st__dot{transform:scale(1.15)}.track__nav{position:absolute;right:0;top:-6px;display:flex;gap:6px}.nav-b{width:40px;height:36px;border:1px solid var(--rule-strong);font-family:var(--f-mono);font-size:15px;background:var(--paper)}.nav-b:hover{background:var(--verm-wash)}.steps{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:14px}.step{border-top:1px solid var(--rule-strong);padding:12px 2px 14px;transition:background .25s,border-color .25s}.step.is-on{border-top:3px solid var(--verm);background:var(--verm-wash);padding-inline:10px;padding-top:10px}.step__n{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-family:var(--f-mono);font-size:12px;color:var(--ink-3)}.step__badge{font-style:normal;font-family:var(--f-mono);font-size:12px;color:var(--gold-ink);background:var(--gold-wash);border:1px solid var(--gold);padding:0 6px}.step h3{margin-top:6px;font-family:var(--f-display);font-weight:500;font-size:25px;line-height:1.05}.step__text{margin-top:8px;font-size:15.5px;line-height:1.45;color:var(--ink-2)}.step__out{margin-top:10px;font-size:15px;line-height:1.35;color:var(--ink)}.step__out span{display:block;font-family:var(--f-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}.steps__loop{margin-top:14px;font-style:italic;color:var(--verm-ink)}@media(max-width:1180px){.steps{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(max-width:760px){.track{display:none}.steps{grid-template-columns:minmax(0,1fr);gap:0;position:relative;padding-left:30px}.steps:before{content:"";position:absolute;left:8px;top:18px;bottom:18px;width:1px;background:var(--rule-strong)}.step,.step.is-on{position:relative;border-top:0;padding:10px 0 16px;background:none}.step:before{content:"";position:absolute;left:-29px;top:15px;width:15px;height:15px;border-radius:50%;background:var(--paper);border:1.5px solid var(--ink)}.step--gold:before{background:var(--gold);border-color:var(--gold-ink)}.js .steps__loop-m{display:block}.step:last-child:after{content:"↺";position:absolute;left:-30px;bottom:-6px;color:var(--verm);font-size:18px}}.q{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,7fr);gap:var(--gut) clamp(24px,4vw,64px);padding-block:clamp(56px,7vw,112px) 0}.q__head h2{font-family:var(--f-display);font-weight:500;font-size:clamp(32px,3.3vw,48px);line-height:1.04}.q__lede{margin-top:14px;color:var(--ink-2);max-width:30em}.q__actions{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-top:20px}.btn{min-height:44px;padding:0 16px;border:1px solid var(--rule-strong);font-size:16.5px;background:var(--paper)}.btn:hover{background:var(--ink);color:var(--paper)}.q__status{font-style:italic;font-size:15px;color:var(--ink-3)}.q__list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--gut);border-top:2px solid var(--rule-strong)}.q__list li{display:flex;gap:14px;padding:16px 0;border-bottom:1px solid var(--rule)}.q__n{flex:none;font-family:var(--f-display);font-style:italic;font-size:34px;line-height:.9;color:var(--verm);width:1.4em}.q__list b{display:block;font-weight:600;font-size:18px;line-height:1.3}.q__list p{margin-top:4px;font-size:16px;color:var(--ink-2)}@media(max-width:900px){.q{grid-template-columns:minmax(0,1fr)}}@media(max-width:620px){.q__list{grid-template-columns:minmax(0,1fr)}}.glossary{padding-block:clamp(56px,7vw,112px) 0}.glossary h2,.about h2{font-family:var(--f-display);font-weight:500;font-size:clamp(30px,3vw,42px);line-height:1.05;margin-bottom:18px}.gl{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,290px),1fr));gap:0 var(--gut);border-top:1px solid var(--rule-strong)}.gl>div{padding:12px 0;border-bottom:1px solid var(--rule)}.gl dt{font-weight:600;font-size:16.5px}.gl dd{margin-top:2px;font-size:15.5px;color:var(--ink-2)}.about{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:var(--gut) clamp(24px,4vw,64px);padding-block:clamp(56px,7vw,112px) clamp(40px,5vw,72px)}.about__text p+p{margin-top:12px}.about__text p{color:var(--ink-2);max-width:40em}.about__ver{margin-top:18px!important;font-family:var(--f-mono);font-size:12.5px;color:var(--ink-3)!important}.about__refs h3{font-weight:400;font-family:var(--f-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);margin:10px 0}.about__refs li{padding:9px 0;border-top:1px solid var(--rule);font-size:16px}.about__refs a{text-decoration:none}.about__refs a:hover{text-decoration:underline}@media(max-width:860px){.about{grid-template-columns:minmax(0,1fr)}}.foot{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:baseline;gap:10px 24px;padding-block:0 36px}.foot:before{content:"";flex-basis:100%;height:0;border-top:1px solid var(--rule-strong);margin-bottom:12px}.foot__credit{font-style:italic;font-size:17px}.foot__links{display:flex;gap:22px;font-family:var(--f-mono);font-size:13px}.foot__links a{text-decoration:none;border-bottom:1px solid var(--rule-strong);padding-bottom:2px;min-height:24px}[data-lang=zh]{--f-text:var(--f-zh);--f-display:var(--f-zh-display);--f-mono:var(--f-zh-mono)}[data-lang=zh] body{font-family:var(--f-zh);font-size:17px;line-height:1.85}[data-lang=zh] :is(.hero__dek,.try,.fig__note,.plate__cap,.ladder__dek,.ctx em,.thesis__text,.col__head p,.blk h4,.formula,.sc--obj blockquote p,.q__status,.foot__credit,.node__name,.track__loop-label,.hero__note,.rules__note){font-style:normal}[data-lang=zh] :is(.hero__h1,.fig__title,.detail__name,.ladder h3,.sc h3,.step h3,.q__head h2,.glossary h2,.about h2,.sc-rest__h){font-family:var(--f-zh-display);font-weight:900;letter-spacing:.01em}[data-lang=zh] .hero__h1{font-size:clamp(36px,4.6vw,70px);line-height:1.2;max-width:10em}[data-lang=zh] .hero__h1 em{font-style:normal}[data-lang=zh] .fig__title{font-size:clamp(30px,3.2vw,46px);line-height:1.2}[data-lang=zh] .detail__name,[data-lang=zh] .ladder h3{font-size:clamp(24px,2vw,30px);line-height:1.25}[data-lang=zh] .sc h3{font-size:clamp(21px,1.6vw,25px);line-height:1.35;font-weight:600}[data-lang=zh] .step h3{font-size:22px;font-weight:600}[data-lang=zh] .q__head h2{font-size:clamp(28px,2.8vw,40px);line-height:1.25}[data-lang=zh] .glossary h2,[data-lang=zh] .about h2{font-size:clamp(26px,2.6vw,36px)}[data-lang=zh] :is(.kicker,.fig__num,.tag,.seg__label,.detail__kicker,.rules h4,.thesis__label,.sc__label,.step__out span,.about__refs h3,.chain-list h3){font-family:var(--f-zh-mono);letter-spacing:0;text-transform:none;font-size:13.5px}[data-lang=zh] :is(.seg__b,.pp,.node__sub,.node__tag,.step__badge,.st__n,.about__ver,.hero__jump,.foot__links){font-family:var(--f-zh-mono);letter-spacing:0}[data-lang=zh] :is(.seg__b,.pp){font-size:14px;font-weight:600;font-family:var(--f-zh)}[data-lang=zh] :is(.chip,.tab,.btn,.st__name){font-weight:600}[data-lang=zh] .node__name{font-weight:600;font-size:15px}[data-lang=zh] .hero__dek{font-size:clamp(18px,.4vw + 16px,20px);line-height:1.85;max-width:32em}[data-lang=zh] :is(.it p,.rung__txt span,.gl dd,.rules dd,.sc__small,.step__text,.q__list p,.chain-list p){line-height:1.75}[data-lang=zh] :is(.col__head h3,.it b,.q__list b,.gl dt,.rules dt,.rung__txt b,.ctx strong){font-weight:600}[data-lang=zh] .stat dd{font-size:15px}@media print{body:before,.bar,.plate__bar,.stage,.try,.chips-wrap,.tabs,.track,.q__actions,.skip{display:none!important}.js .nojs-only{display:block!important}.plate{background:none;color:#15130f;box-shadow:none;padding:0}.chain-list p,.chain-list__sub,.chain-list h3{color:#3e3a32}.fig,.q,.glossary,.about{break-inside:avoid-page}}/* touch targets (R2-08, AMENDMENT §2): every control a thumb uses is at least 44 px tall; the route nodes keep their slip size and take a 44 px hit area; text links get 32 px */@media (pointer:coarse){.chip,.seg__b,.pp,.lang__b{min-height:44px}.nav-b{width:44px;height:44px}.track__nav{top:-10px}.node:before{content:"";position:absolute;left:-2px;right:-2px;top:50%;height:max(100%,44px);transform:translateY(-50%)}.hero__jump,.foot__links a{display:inline-flex;align-items:center;min-height:32px}.about__refs li>a{display:inline-block;padding-block:8px}}

/* §9-D (2026-10-02, reintegrate-r3): the EN page gets an English hero. The headline is the display element and 信 becomes a
   small vermilion seal at the top right (its gloss stays in .hero__note). zh keeps the giant 信. Also: honour the notch insets
   (viewport-fit=cover) on the bar and the page wrap. Port both blocks if build/ is regenerated. */
:root:not([data-lang=zh]) .hero{grid-template-columns:minmax(0,1fr);padding-top:clamp(20px,3vw,48px)}
:root:not([data-lang=zh]) .hero__glyph{position:absolute;top:clamp(18px,2.8vw,48px);right:0;z-index:1;min-height:0;height:auto;margin:0;overflow:visible}
:root:not([data-lang=zh]) .hero__glyph .glyph{position:static;display:grid;place-items:center;width:1.3em;height:1.3em;font-size:clamp(38px,5vw,80px);line-height:1;color:var(--on-verm);text-shadow:none;transform:rotate(-3deg);border-radius:3px 2px 4px 2px;background:radial-gradient(120% 70% at 30% 20%,rgba(255,255,255,.1),transparent 60%),radial-gradient(90% 60% at 80% 95%,rgba(0,0,0,.14),transparent 70%),var(--verm);box-shadow:inset 0 0 0 .07em var(--verm),inset 0 0 0 .1em var(--on-verm)}
:root:not([data-lang=zh]) .hero__text .kicker{padding-right:calc(clamp(38px,5vw,80px) * 1.3 + 16px)}
:root:not([data-lang=zh]) .hero__h1{font-size:clamp(44px,8vw,124px);line-height:.94;letter-spacing:-.018em;max-width:9.2em}
@media(max-width:560px){:root:not([data-lang=zh]) .hero__h1{padding-right:calc(38px * 1.3 + 8px)}}
.bar,.wrap{padding-left:max(var(--margin),env(safe-area-inset-left,0px));padding-right:max(var(--margin),env(safe-area-inset-right,0px))}

/* Polish R4 (2026-10-02, other-figs). Published file only, like the blocks above: port to research/materials-2026-09-30/sms-map/build/
   (style.src.css, app.src.js Se()/Ae()/ge(), render.mjs) before any rebuild.
   R4-44 — standalone / home-screen mode (viewport-fit=cover): the sticky bar clears the status bar, as the main site's header does;
   the skip link and anchor jumps (#f1 …, whose own top padding clears the 56 px bar) add the same inset. */
.bar{padding-top:env(safe-area-inset-top,0px);min-height:calc(56px + env(safe-area-inset-top,0px))}
.skip:focus{top:calc(10px + env(safe-area-inset-top,0px))}
html{scroll-padding-top:env(safe-area-inset-top,0px)}
/* R4-20 — the language switch is one button to the other language, as on the rest of the site (AMENDMENT §1.9, A6):
   「中文」 on the English page (aria-label "中文 — Chinese version"), "EN" on the Chinese page ("English — 英文版") */
.lang__b{background:transparent;color:var(--ink)}
.lang__b:hover{background:var(--verm-wash)}
.lang__b--zh{font-family:var(--f-zh);font-weight:600;font-size:15px;letter-spacing:.04em;padding:0 12px}
/* R4-20 — the English hero's right column, from 1100 px: Fig. 1's chain in miniature on a small plate — the five
   hands a text passes through, a message travelling down them, gold at the phone. It is a pointer shortcut to Fig. 1
   (aria-hidden, out of the tab order: "Start with one message ↓" is the link for everyone). zh keeps its giant 信. */
.hero__route{display:none}
@media (min-width:1100px){
  :root:not([data-lang=zh]) .hero__text{display:grid;grid-template-columns:minmax(0,1fr) clamp(300px,27vw,384px);column-gap:clamp(40px,4.4vw,72px);align-items:start}
  :root:not([data-lang=zh]) .hero__text>*{grid-column:1}
  :root:not([data-lang=zh]) .hero__text>:is(.kicker,.hero__h1){grid-column:1/-1}
  :root:not([data-lang=zh]) .hero__text>.hero__jump{justify-self:start}
  :root:not([data-lang=zh]) .hero__route{display:flex;grid-column:2;grid-row:3/span 5;align-self:stretch}
}
.hero__route{flex-direction:column;gap:16px;min-height:340px;margin-top:28px;padding:20px 22px 22px;background:var(--plate);color:var(--plate-ink);box-shadow:var(--plate-halation);text-decoration:none;position:relative;overflow:hidden;background-image:radial-gradient(70% 55% at 30% 100%,rgba(229,66,31,.14),transparent 70%),linear-gradient(rgba(238,232,220,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(238,232,220,.045) 1px,transparent 1px);background-size:auto,28px 28px,28px 28px;transition:box-shadow .2s var(--ease-ui)}
@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .hero__route{outline:1px solid rgba(236,229,214,.16)}}
:root[data-theme=dark] .hero__route{outline:1px solid rgba(236,229,214,.16)}
.hero__route:hover{box-shadow:var(--plate-halation),0 0 0 1px rgba(255,90,54,.55)}
.hero__route:hover .route__title{text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
.route__head{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px}
.route__fig{font-family:var(--f-mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--lit-verm)}
.route__title{font-family:var(--f-text);font-style:italic;font-size:18px;line-height:1.2;color:var(--plate-ink)}
.route__chain{position:relative;flex:1 1 auto;display:flex;flex-direction:column;justify-content:space-between;align-items:flex-start;gap:10px;padding-left:30px}
.route__chain:before{content:"";position:absolute;left:8px;top:22px;bottom:22px;width:1px;background:linear-gradient(rgba(216,208,192,.55),rgba(216,208,192,.3) 70%,rgba(242,180,90,.8))}
.route__st{position:relative;display:flex;flex-direction:column;justify-content:center;gap:1px;height:44px;max-width:100%;padding:0 10px;background:var(--slip);color:#15130f;border:1px solid var(--slip-line);box-shadow:1px 1px 0 var(--slip-shadow)}
.route__name,.route__sub{display:block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.route__name{font-family:var(--f-text);font-style:italic;font-size:15.5px;line-height:1.15}
.route__sub{font-family:var(--f-mono);font-size:12px;line-height:1.2;color:#4a453c}
.route__dot{position:absolute;left:-27px;top:50%;width:9px;height:9px;margin-top:-4.5px;border-radius:50%;background:var(--plate);border:1.5px solid var(--silver);animation:smm-route-ping 7s calc((.04 + var(--at,0) * .82) * 7s) infinite}
.route__st--phone .route__dot{background:var(--gold);border-color:var(--gold);box-shadow:0 0 12px 3px rgba(242,180,90,.55)}
.route__msg{position:absolute;left:4px;top:17px;width:10px;height:10px;border-radius:50%;background:radial-gradient(circle,#FFF0D2 0 30%,#FF7B3A 62%,rgba(255,90,54,0) 72%);box-shadow:0 0 14px 4px rgba(255,123,58,.45);opacity:0;animation:smm-route-msg 7s linear infinite;pointer-events:none}
@keyframes smm-route-msg{
  0%{top:17px;opacity:0}
  4%{top:17px;opacity:1}
  10%{top:17px}
  24.5%{top:calc((100% - 44px) * .25 + 17px)}
  30.5%{top:calc((100% - 44px) * .25 + 17px)}
  45%{top:calc((100% - 44px) * .5 + 17px)}
  51%{top:calc((100% - 44px) * .5 + 17px)}
  65.5%{top:calc((100% - 44px) * .75 + 17px)}
  71.5%{top:calc((100% - 44px) * .75 + 17px)}
  86%{top:calc(100% - 27px);opacity:1}
  94%,100%{top:calc(100% - 27px);opacity:0}
}
@keyframes smm-route-ping{
  0%{box-shadow:0 0 0 0 rgba(255,90,54,.65)}
  12%,100%{box-shadow:0 0 0 10px rgba(255,90,54,0)}
}
.route__st--phone .route__dot{animation-name:smm-route-arrive}
@keyframes smm-route-arrive{
  0%{box-shadow:0 0 12px 3px rgba(242,180,90,.55),0 0 0 0 rgba(242,180,90,.8)}
  14%{box-shadow:0 0 18px 6px rgba(242,180,90,.75),0 0 0 12px rgba(242,180,90,0)}
  40%,100%{box-shadow:0 0 12px 3px rgba(242,180,90,.55),0 0 0 12px rgba(242,180,90,0)}
}
@media(prefers-reduced-motion:reduce){.route__msg{display:none}.route__dot{animation:none!important}}
@media print{.hero__route{display:none!important}}
/* ─────────────────────────────────────────────────────────────────────────────────────────────────────────────
   J6-19 — the site's own chrome (polish round 2, integration → this page's owner). The lab page keeps its own
   layout, but its bar now speaks the site header's grammar (src/styles/header.css, src/templates/templates.css §1):
     · the 周易/潇潇 seal and the wordmark link home, with the page's place under the name on wide screens;
     · the way back to Chapter 04 sits where the site's header keeps its NOW line ("← Back to On Stage (Chapter 04)");
     · the same ◑ button opening the same Light / Dark / Auto popover ([data-theme-set], theme.js), and the same
       three choices again in the footer — the site's footer has them too;
     · phones get the site's phone header (seal, name, 中文, ◑, boxed, 44 px on touch) and carry the way back as
       the first line of the page; the footer ends with it as well.
   The bar's row lines up with the page column, as the site's header does with its content.
   ───────────────────────────────────────────────────────────────────────────────────────────────────────────── */
.bar{gap:16px;padding-left:max(env(safe-area-inset-left,0px),var(--margin),calc((100% - var(--maxw)) / 2 + var(--margin)));padding-right:max(env(safe-area-inset-right,0px),var(--margin),calc((100% - var(--maxw)) / 2 + var(--margin)))}.bar__id{display:flex;align-items:center;gap:12px;min-width:0;flex:none;min-height:44px;color:var(--ink);text-decoration:none}.bar__id:hover{color:var(--ink)}.bar__seal{width:38px;height:38px;flex:none;object-fit:contain;transition:transform .22s cubic-bezier(.2,.9,.1,1)}.bar__id:hover .bar__seal{transform:rotate(-3deg) scale(1.04)}.bar__name{display:flex;flex-direction:column;gap:3px;min-width:0;line-height:1.15}.bar__name b{font-family:var(--f-display);font-size:22px;font-weight:500;line-height:1.2;letter-spacing:-.01em;white-space:nowrap}.bar__place{font-family:var(--f-mono);font-size:13px;line-height:1.25;letter-spacing:.02em;color:var(--ink-2);white-space:nowrap}[data-lang=zh] .bar__name b{font-family:var(--f-zh-display);font-weight:900;font-size:22px;letter-spacing:.02em}[data-lang=zh] .bar__place{font-family:var(--f-zh);font-size:13.5px;letter-spacing:.02em}.bar__ch{flex:1 1 auto;min-width:0;text-align:center;font-family:var(--f-mono);font-size:13px;line-height:1.3;letter-spacing:.02em;color:var(--ink-2)}.ret{display:none;font-family:var(--f-mono);font-size:13px;line-height:1.3;letter-spacing:.02em;color:var(--ink-2);border-bottom:1px solid var(--rule)}:is(.bar__ch,.ret) a{display:inline-flex;align-items:center;gap:10px;min-height:44px;text-decoration:none;color:inherit;transition:color .22s cubic-bezier(.2,.9,.1,1)}:is(.bar__ch,.ret) a:hover{color:var(--verm-ink)}.back__arrow{color:var(--verm-ink);transition:transform .22s cubic-bezier(.2,.9,.1,1)}a:hover>.back__arrow{transform:translateX(-3px)}[data-lang=zh] :is(.bar__ch,.ret){font-family:var(--f-zh);font-size:14px;letter-spacing:.02em}.bar__nav{display:flex;align-items:center;gap:8px;margin-left:auto;flex:none}.bar__nav .lang{border-color:transparent}.bar__nav .lang__b{min-width:36px;padding:0 8px;color:var(--ink-2)}.bar__nav .lang__b:hover{background:var(--verm-wash);color:var(--verm-ink)}[data-lang=zh] .bar__nav .lang__b{font-family:var(--f-zh);font-size:14px;font-weight:600;letter-spacing:.02em}.theme-menu{position:relative;display:inline-flex;flex:none}.theme-menu__btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-width:36px;min-height:36px;padding:0 8px;border:1px solid transparent;color:var(--ink-2);font-family:var(--f-mono);font-size:13px;font-weight:500;letter-spacing:.02em;line-height:1;anchor-name:--smm-theme-btn;transition:background-color .22s cubic-bezier(.2,.9,.1,1),color .22s cubic-bezier(.2,.9,.1,1)}.theme-menu__btn:hover{background:var(--verm-wash);color:var(--verm-ink)}.theme-menu:has(:popover-open) .theme-menu__btn{background:var(--ink);color:var(--paper)}.theme-menu__btn .ico{width:18px;height:18px;flex:none}.theme-menu__btn .ico--theme-light,.theme-menu__btn .ico--theme-dark{display:none}:root[data-theme=light] .theme-menu__btn .ico--theme-auto,:root[data-theme=dark] .theme-menu__btn .ico--theme-auto{display:none}:root[data-theme=light] .theme-menu__btn .ico--theme-light,:root[data-theme=dark] .theme-menu__btn .ico--theme-dark{display:block}.theme-menu__word{display:none}@media (min-width:1500px){.theme-menu__word{display:inline}}[data-lang=zh] .theme-menu__btn{font-family:var(--f-zh);font-size:14px;font-weight:600;letter-spacing:.02em}.theme-menu__panel{position:fixed;inset:auto;top:calc(56px + env(safe-area-inset-top,0px) + 6px);right:max(var(--margin),env(safe-area-inset-right,0px));margin:0;min-width:11.5em;padding:4px;border:1px solid var(--rule-strong);background:var(--paper);color:var(--ink);box-shadow:0 1px 0 rgba(21,19,15,.08),0 18px 40px -22px rgba(21,19,15,.38);overflow:visible}.theme-menu__panel:popover-open{display:grid}@supports (position-anchor:--a) and (top:anchor(bottom)){.theme-menu__panel{position-anchor:--smm-theme-btn;top:calc(anchor(bottom) + 6px);right:anchor(right);position-try-fallbacks:flip-inline}}.theme-menu__panel>button{display:flex;align-items:center;gap:10px;min-height:40px;padding:0 14px 0 10px;font:500 13px/1 var(--f-mono);letter-spacing:.02em;text-align:start;white-space:nowrap;color:var(--ink);transition:background-color .22s cubic-bezier(.2,.9,.1,1),color .22s cubic-bezier(.2,.9,.1,1)}.theme-menu__panel>button+button{border-top:1px solid var(--rule)}.theme-menu__panel>button .ico{width:18px;height:18px;flex:none}.theme-menu__panel>button:hover{background:var(--verm-wash);color:var(--verm-ink)}.theme-menu__panel>[aria-pressed=true],.theme-menu__panel>[aria-pressed=true]:hover{background:var(--ink);color:var(--paper)}.theme-menu__panel>[aria-pressed=true]:after{content:"\2713";margin-left:auto;padding-left:14px;font-family:var(--f-mono)}.theme-menu__panel>button:focus-visible{outline-offset:-3px}.theme-menu__panel>[aria-pressed=true]:focus-visible{outline-color:var(--paper)}[data-lang=zh] .theme-menu__panel>button{font-family:var(--f-zh);font-size:15px;font-weight:600}@media (prefers-color-scheme:dark){:root:not([data-theme=light]) .theme-menu__panel{box-shadow:0 0 0 1px rgba(236,229,214,.1),0 18px 40px -20px rgba(0,0,0,.7)}}:root[data-theme=dark] .theme-menu__panel{box-shadow:0 0 0 1px rgba(236,229,214,.1),0 18px 40px -20px rgba(0,0,0,.7)}@media (prefers-reduced-motion:no-preference){.theme-menu__panel:popover-open{animation:smmThemeIn .16s cubic-bezier(.2,.9,.1,1) both}@keyframes smmThemeIn{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}}@supports not selector(:popover-open){.theme-menu{display:none!important}}.theme-switch{display:inline-flex;border:1px solid var(--rule-strong)}.theme-switch button{min-width:44px;min-height:36px;padding:0 12px;font:500 13px/1 var(--f-mono);letter-spacing:.02em;color:var(--ink-2);transition:background-color .22s cubic-bezier(.2,.9,.1,1),color .22s cubic-bezier(.2,.9,.1,1)}.theme-switch button+button{border-left:1px solid var(--rule-strong)}.theme-switch button:not([aria-pressed=true]):hover{background:var(--verm-wash);color:var(--verm-ink)}.theme-switch [aria-pressed=true]{background:var(--ink);color:var(--paper)}[data-lang=zh] .theme-switch button{font-family:var(--f-zh);font-size:14px;font-weight:600}.foot{align-items:center}.foot__links{flex:1 1 100%;flex-wrap:wrap;gap:12px 24px}.foot__links .back__arrow{margin-right:.5em}.foot__links [data-chapter-back]{color:var(--ink)}[data-lang=zh] .foot__links{font-family:var(--f-zh);font-size:14px;letter-spacing:.02em}@media (max-width:760px){.bar{gap:8px}.bar__id{flex:1 1 auto;gap:8px}.bar__seal{width:30px;height:30px}.bar__name b{font-size:19px;line-height:1.3}[data-lang=zh] .bar__name b{font-size:18px}.bar__place,.bar__ch{display:none}.ret{display:block}.bar__nav{gap:6px}.bar__nav .lang{border-color:var(--rule-strong)}.bar__nav .lang__b{color:var(--ink);padding:0 10px}.theme-menu__btn{width:44px;padding:0;border-color:var(--rule-strong);color:var(--ink)}}@media (max-width:359px){.bar__name b{font-size:17px}.bar__seal{width:26px;height:26px}}@media (pointer:coarse){.theme-menu__btn{min-height:44px;min-width:44px}.theme-menu__panel>button{min-height:44px}.theme-menu__panel{min-width:12.5em}.theme-switch button{min-height:44px}.foot__links{gap:22px 28px}.foot__links a{position:relative;display:inline-block;min-height:0}.foot__links a:after{content:"";position:absolute;left:-6px;right:-6px;top:50%;height:44px;transform:translateY(-50%)}}@media print{.ret,.theme-menu,.theme-switch{display:none!important}}

/* FA-31 / FA-32 (final fixes): Fig. 1–4 wear the site's honesty tag (base.css .tag: a box, the ◇ of "illustrative", a link to the colophon's
   #honesty with the meaning as its title; underline on hover only), then the figure's own word, unboxed and quieter. On touch the tag
   gets an invisible 44 px pad. The provider's glossed line breaks only between its items (U+00A0 inside them; keep-all for the
   Hanzi); in the detail heading it is an inline flex box, so when it wraps on a phone it hangs from its first line instead of
   climbing into the name's descenders. The references say what they are under their heading (balanced; the zh note breaks only after its commas: no lone 「单。」). */
.fig__meta{flex-wrap:wrap;row-gap:6px}
a.tag{display:inline-flex;align-items:center;gap:6px;position:relative;padding-left:6px;text-decoration:none;cursor:help;transition:color .15s var(--ease-ui),border-color .15s var(--ease-ui)}
a.tag:hover,a.tag:focus-visible{color:var(--verm-ink);border-color:currentColor;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px}
.tag--illustrative:before{content:"";flex:none;width:7px;height:7px;border:1px solid currentColor;transform:rotate(45deg) scale(.85)}
@media (pointer:coarse){a.tag:after{content:"";position:absolute;left:-6px;right:-6px;top:50%;height:44px;transform:translateY(-50%)}}
.fig__kind{font-family:var(--f-mono);font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}
[data-lang=zh] .fig__kind{font-family:var(--f-zh-mono);letter-spacing:0;text-transform:none;font-size:13.5px}
[data-lang=zh] :is(.detail__name span,.chain-list__sub,.node__sub,.route__sub){word-break:keep-all}
.detail__name span{display:inline-flex;max-width:100%;line-height:1.4}
.about__refs-note{margin:0 0 12px;font-family:var(--f-text);font-style:italic;font-size:15px;line-height:1.45;color:var(--ink-3);text-wrap:balance}
[data-lang=zh] .about__refs-note{font-style:normal;font-size:14.5px;line-height:1.7;word-break:keep-all}
