/* DS-8 · R4 · landing 制作稿样式（舞台 / 层 / HUD）。色只有五个：ink / sand / red / gold / water（R2 §05）。 */
:root{--ink:#0F4C3F;--ink2:#08302A;--sand:#F3E7D3;--sand2:#FAF3E6;--red:#E63B2E;--red-act:#D22619;--gold:#F2C14E;--water:#7FB7D6;
  --disp:"Bricolage Grotesque","Instrument Sans",sans-serif;--sans:"Instrument Sans",sans-serif;--mono:"IBM Plex Mono",ui-monospace,monospace}
*{box-sizing:border-box}
html{scroll-behavior:auto;background:var(--sand)}
body{margin:0;background:var(--sand);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;overflow-x:hidden}
#track{position:relative}
#stage{position:sticky;top:0;height:100vh;overflow:hidden;background:var(--sand)}
#canvas{position:absolute;left:50%;top:50%;transform-origin:50% 50%;transform:translate(-50%,-50%)}
.mod{position:absolute;inset:0}
.lyr{position:absolute;inset:0;will-change:transform,opacity}
.lyr>svg{display:block;width:100%;height:100%}
#grain{position:absolute;inset:0;z-index:90;pointer-events:none;mix-blend-mode:multiply;opacity:.16}
#grain svg{display:block;width:100%;height:100%}
#hud{position:fixed;right:14px;top:14px;z-index:99;display:none;background:rgba(8,48,42,.92);color:var(--sand);font:12px/1.7 var(--mono);padding:10px 12px;white-space:pre;border-radius:2px}
#hint{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:95;font:12px var(--mono);letter-spacing:.08em;color:var(--ink);opacity:.72;pointer-events:none;transition:opacity .4s}
#hint.off{opacity:0}
#ms_t3 text,#ms_t4 text,#m2_t8 text,#m2_t9 text{paint-order:stroke;stroke:var(--sand);stroke-width:8px;stroke-linejoin:round}
/* 尾声的真输入框（HTML，不是 SVG）：由 m_office.js 的 coda 模块放进自己的 root 里 */
/* 尾声输入框：position:fixed 在 #canvas 之外，尺寸全部乘 --k（= FIT，由 m_office 写在 form 上）。🔴 别用 em：input 自己的 font-size 会成为它 height 的基准（64em×22px 撑到 1267px）。 */
.cta{position:fixed;z-index:60;display:flex;gap:0;font-family:var(--sans);--k:1}
.cta input{flex:1;height:calc(64px*var(--k));border:calc(3px*var(--k)) solid var(--ink);border-right:0;background:var(--sand2);color:var(--ink);font-weight:500;font-size:calc(22px*var(--k));font-family:var(--sans);padding:0 calc(22px*var(--k));outline:none;border-radius:0;min-width:0}
.cta input::placeholder{color:var(--ink);opacity:.55}
.cta button{height:calc(64px*var(--k));padding:0 calc(30px*var(--k));border:calc(3px*var(--k)) solid var(--ink);background:var(--red-act);color:var(--sand2);font-weight:700;font-size:calc(20px*var(--k));font-family:var(--disp);letter-spacing:.01em;cursor:pointer;border-radius:0;white-space:nowrap}
.cta input:focus{background:#fff}
@media (max-aspect-ratio:1/1) and (max-width:727px),(pointer:coarse) and (max-height:500px){.cta input,.cta button{height:max(44px,calc(64px*var(--k)))}.cta input{font-size:max(16px,calc(22px*var(--k)));padding:0 max(10px,calc(22px*var(--k)))}.cta button{font-size:max(16px,calc(20px*var(--k)));padding:0 max(12px,calc(30px*var(--k)))}}
@media (prefers-reduced-motion:reduce){#hint{display:none}}

/* ⑧ 分阶段解释栏（学参照站：动作走到哪一步，就弹出对应的一条说明；不是通篇字幕）。
   固定在视口里（不进画幅坐标系）⇒ 任何视口下都是同一号字，永远读得清。 */
#note{position:fixed;z-index:94;right:40px;bottom:40px;width:352px;padding:20px 22px 18px;
  background:rgba(250,243,230,.94);border-left:4px solid var(--red);
  box-shadow:0 18px 40px rgba(8,48,42,.13);opacity:0;transform:translateY(10px);
  transition:opacity .38s ease,transform .38s ease;pointer-events:none}
#note.on{opacity:1;transform:translateY(0)}
#note.dark{background:rgba(8,48,42,.90);box-shadow:0 18px 40px rgba(0,0,0,.28)}
#note b{display:block;font:500 11px/1 var(--mono);letter-spacing:.14em;color:var(--red);margin-bottom:11px}
#note h3{margin:0 0 8px;font:700 24px/1.14 var(--disp);letter-spacing:-.02em;color:var(--ink)}
#note p{margin:0;font:400 15px/1.5 var(--sans);color:var(--ink);opacity:.86}
#note i{display:block;margin-top:12px;font:400 11px/1.5 var(--mono);letter-spacing:.05em;color:var(--ink);opacity:.55;font-style:normal}
#note.dark h3,#note.dark p,#note.dark i{color:var(--sand)}
@media (max-aspect-ratio:1/1){
  /* 竖屏：大字按契约落在画面下方 40% ⇒ 解释栏必须走顶部，否则两块正好叠在一起（实测 390×844 全糊） */
  #note{right:12px;left:12px;top:12px;bottom:auto;width:auto;padding:15px 17px 13px;transform:translateY(-10px)}
  #note.on{transform:translateY(0)}
  #note.pb{top:auto;bottom:12px;transform:translateY(10px)}#note.pb.on{transform:translateY(0)}
  #note h3{font-size:20px}#note p{font-size:14px}
}
@media (max-height:560px){#note{display:none}}
@media (prefers-reduced-motion:reduce){#note{transition:none}}

/* ─── R18 · 页眉导航（8-546 D2）+ 页尾（R18 ⑥）──────────────────────────────
   页眉：两块纸色药丸（品牌 / 链接），同解释栏一个材质，任何一拍的底上都读得清；往下滚收起（chrome.js）。
   页尾：接尾声夜景的墨底，背景一根巨大的真地块红线（11 Ribblesdale 的 LINZ 轮廓）——参照站拿品牌字当底纹，我们拿量出来的线。 */
#topnav{position:fixed;z-index:96;left:0;right:0;top:0;display:flex;align-items:center;gap:10px;padding:18px 40px;pointer-events:none;
  transform:translateY(-110%);transition:transform .32s ease}
#topnav.on{transform:none}
#topnav>*{pointer-events:auto}
#topnav a{color:var(--ink);text-decoration:none}
.tn-brand{font:700 21px/1 var(--disp);letter-spacing:-.02em;background:rgba(250,243,230,.94);padding:11px 16px 12px;border-left:4px solid var(--red);box-shadow:0 10px 26px rgba(8,48,42,.12)}
.tn-links{margin-left:auto;display:flex;background:rgba(250,243,230,.94);box-shadow:0 10px 26px rgba(8,48,42,.12)}
.tn-links a{font:500 15px/1 var(--sans);padding:14px 16px}
.tn-links a:hover,.tn-links a:focus-visible{background:var(--sand);outline:none;text-decoration:underline;text-underline-offset:4px}
#topnav .tn-cta,#tn-sheet .tn-cta{font:700 15px/1 var(--disp);background:var(--ink);color:var(--sand2);padding:14px 18px}
#topnav .tn-cta:hover{background:var(--ink2)}
#topnav .tn-go,#tn-sheet .tn-go{font:700 19px/1 var(--disp);background:var(--red-act);color:var(--sand2);padding:12px 18px;white-space:nowrap;box-shadow:0 10px 26px rgba(8,48,42,.12)}
#topnav .tn-go:hover{background:var(--ink2)}
.tn-menu{display:none;margin-left:auto;font:500 12px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--ink);background:rgba(250,243,230,.94);border:0;padding:14px 16px;box-shadow:0 10px 26px rgba(8,48,42,.12);cursor:pointer}
#tn-sheet{position:fixed;z-index:95;left:12px;right:12px;top:66px;background:var(--sand2);box-shadow:0 18px 40px rgba(8,48,42,.2);display:flex;flex-direction:column;padding:6px 0}
#tn-sheet[hidden]{display:none}
#tn-sheet a{font:500 18px/1 var(--sans);color:var(--ink);text-decoration:none;padding:16px 20px;border-bottom:1px solid rgba(15,76,63,.12)}
#tn-sheet a.tn-cta{margin:12px 20px 8px;border:0;text-align:center}
#tn-sheet a.tn-go{margin:10px 20px 8px;border:0;text-align:center;color:var(--sand2);box-shadow:none}
:focus-visible{outline:2px solid var(--red);outline-offset:2px}
@media (max-width:960px){#topnav{padding:18px 20px}.tn-links a{padding:14px 10px}#topnav .tn-go{padding:12px 14px}}
@media (max-aspect-ratio:1/1),(max-width:760px){
  #topnav{padding:12px}
  .tn-links,#topnav .tn-cta,#topnav .tn-go{display:none}
  .tn-brand{font-size:18px;padding:10px 13px 11px}
  .tn-menu{display:block}
}
@media (prefers-reduced-motion:reduce){#topnav{transition:none}}
/* R20 ③：品牌药丸里换 8-424 定稿 logo（药丸是纸色＝浅底 ⇒ 彩色版）。浅底下限 24 px（8-424 实测 16 px 糊、24 px 两态都清楚）；
   横版锁定件的字标只占全高约 40%，30 px 时字只有 12 px ⇒ 定 38 / 32 px。红条去掉：红在 DS-8 只给本地块与主 CTA，不与品牌蓝并排 */
.tn-brand:has(.tn-logo){display:flex;align-items:center;padding:6px 14px;border-left:0;background:none;box-shadow:none}
.logo-w .tn-brand:has(.tn-logo){padding:11px 16px}
.tn-logo{display:block;height:38px;width:auto}
.logo-w .tn-logo{height:28px}
.ft-logo{display:block;height:48px;width:auto}
.logo-w .ft-logo{height:40px}
@media (max-aspect-ratio:1/1),(max-width:760px){.tn-brand:has(.tn-logo){padding:5px 11px}.logo-w .tn-brand:has(.tn-logo){padding:9px 12px}.tn-logo{height:32px}.logo-w .tn-logo{height:24px}}

#ft{position:relative;overflow:hidden;background:var(--ink2);color:var(--sand);padding:88px 40px 32px;font-family:var(--sans)}
#ft a{color:var(--sand);text-decoration:none}
#ft a:hover,#ft a:focus-visible{color:var(--sand2);text-decoration:underline;text-underline-offset:4px}
.ft-plot{position:absolute;right:-10%;top:-46%;width:min(52vw,640px);height:auto;pointer-events:none}
.ft-plot path{fill:none;stroke:var(--red);stroke-width:.22;opacity:.45;stroke-linejoin:round}
.ft-grid{position:relative;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1.3fr) minmax(0,.8fr) minmax(0,1fr);gap:48px;max-width:1280px;margin:0 auto}
.ft-word{font:700 44px/1 var(--disp);letter-spacing:-.03em;display:inline-block;margin-bottom:18px}
.ft-brand p{margin:0 0 24px;max-width:34ch;font:400 16px/1.55 var(--sans);opacity:.8}
.ft-col b{display:block;font:500 11px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--red);margin:10px 0 18px}
.ft-col ul{list-style:none;margin:0;padding:0}
.ft-col li{margin:0 0 12px;font:400 16px/1.35 var(--sans)}
.ft-two{columns:2;column-gap:28px}
.ft-two li{break-inside:avoid}
.ft-social{display:flex;gap:10px}
.ft-ico{display:inline-flex;align-items:center;justify-content:center;width:44px;height:44px;border:1.5px solid rgba(243,231,211,.35)}
.ft-ico[data-soon]{opacity:.55;cursor:not-allowed}   /* 8-551：只给占位；真链接（Facebook）不许显示禁止光标（同 8-546 chrome.css 那次） */
#ft .ft-ico:hover{text-decoration:none;color:var(--sand)}
.ft-ico svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.ft-base{position:relative;display:flex;flex-wrap:wrap;justify-content:space-between;gap:12px 32px;max-width:1280px;margin:64px auto 0;padding-top:22px;border-top:1px solid rgba(243,231,211,.16);background:var(--ink2);font:400 13px/1.5 var(--mono);letter-spacing:.02em;opacity:.7}
@media (max-width:980px){.ft-grid{grid-template-columns:1fr 1fr;gap:40px 28px}.ft-brand{grid-column:1/-1}}
@media (max-width:560px){#ft{padding:64px 20px 28px}.ft-grid{grid-template-columns:1fr 1fr}.ft-col:nth-of-type(1){grid-column:1/-1}.ft-word{font-size:38px}}
@media (max-width:560px){.ft-logo{height:40px}.logo-w .ft-logo{height:34px}}
/* R20 ④ 页尾与夜景分层。a＝纸色图签（默认）：墨色粗细双线收边，整块翻回纸 —— 夜景最暗、页尾最亮，亮度比 ≥10:1，读成「图纸的下沿」。
   b＝深底抬层：比夜景更深一档 + 顶边一根砂色细线 + 比例尺刻度（红色每 120 px 一个主刻度），靠描边而不是底色分层。 */
.ft-a #ft{background:var(--sand2);color:var(--ink);padding-top:100px}
.ft-a #ft::before{content:"";position:absolute;left:0;right:0;top:0;height:16px;border-top:7px solid var(--ink);border-bottom:1.5px solid var(--ink);box-sizing:border-box}
.ft-a #ft a{color:var(--ink)}
.ft-a #ft a:hover,.ft-a #ft a:focus-visible{color:var(--ink2)}
.ft-a .ft-col b{color:var(--ink2)}
.ft-a .ft-col b::before{content:"";display:inline-block;width:8px;height:8px;background:var(--red);margin-right:9px;vertical-align:0}
.ft-a .ft-ico{border-color:rgba(15,76,63,.35)}
.ft-a #ft .ft-ico:hover{color:var(--ink)}
.ft-a .ft-plot path{opacity:.3}
.ft-a .ft-base{background:var(--sand2);border-top-color:rgba(15,76,63,.22);opacity:.78}
.ft-b #ft{background:#03110E;box-shadow:inset 0 1px 0 rgba(243,231,211,.5);padding-top:104px}
.ft-b #ft::before{content:"";position:absolute;left:0;right:0;top:1px;height:14px;pointer-events:none;
  background:repeating-linear-gradient(90deg,var(--red) 0 2px,transparent 2px 120px) 0 0/100% 14px no-repeat,repeating-linear-gradient(90deg,rgba(243,231,211,.42) 0 1px,transparent 1px 12px) 0 0/100% 7px no-repeat}
.ft-b .ft-base{background:#03110E}
.ft-ico:not([data-soon]):hover{border-color:currentColor}

/* ─── 8-551 · 第二屏 What you get（旧首页 #props / #caps 的内容，DS-8 图纸语言重排）────────────────
   接在尾声夜景之后、页尾图签之前：整块翻回纸（与页尾同底），顶边一根墨线＝图纸的下一张。四张卡是图签格（墨线分格，不是浮卡），
   编号前一个红方块＝测量桩（与页尾小标同一个记号）。字号守旧判据：限定行 ≥13 px 且小于大数（T6）、能力表最大 ≤20 px（T9）。 */
#props{position:relative;z-index:1;background:var(--sand2);color:var(--ink);padding:112px 40px 120px;border-top:1.5px solid var(--ink)}
.pr-in{max-width:1280px;margin:0 auto}
.wy-h{margin:0 0 48px;font:700 clamp(44px,5.4vw,80px)/1 var(--disp);letter-spacing:-.035em}
.propgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:1.5px solid var(--ink);border-left:1.5px solid var(--ink)}
.prop{padding:28px 26px 30px;border-right:1.5px solid var(--ink);border-bottom:1.5px solid var(--ink);display:flex;flex-direction:column}
.plab{min-height:2.8em;margin:0 0 26px;font:500 12px/1.4 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink2)}
.plab::before,.propsmicro::before{content:"";display:inline-block;width:8px;height:8px;background:var(--red);margin-right:9px;vertical-align:0}
.pbig{margin:0 0 18px;font:700 60px/1 var(--disp);letter-spacing:-.035em}
.pbig u{display:block;margin-top:10px;text-decoration:none;font:500 20px/1.25 var(--sans);letter-spacing:0}
.pqual{margin:0 0 16px;font:400 16px/1.5 var(--sans)}
.pqual b{font-weight:500}
.pnote{margin:auto 0 0;padding-top:14px;border-top:1px solid rgba(15,76,63,.22);font:400 13px/1.5 var(--sans);opacity:.72}
#props.anim .prop{opacity:0;transform:translateY(14px);transition:opacity .5s ease,transform .5s ease}
#props.anim .prop.seen{opacity:1;transform:none}
.caps{margin-top:88px}
.propsmicro{margin:0 0 22px;font:500 12px/1.4 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink2)}
.capg{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2.4fr);margin:0;border-top:1.5px solid var(--ink)}
.capk,.capv{margin:0;padding:16px 0 17px;border-bottom:1px solid rgba(15,76,63,.22)}
.capk{font:500 12px/1.6 var(--mono);letter-spacing:.1em;text-transform:uppercase;padding-right:24px}
.capv{font:400 17px/1.55 var(--sans)}
.capv b{font-weight:500}
.capv .blk{font-weight:500;white-space:nowrap}
@media (max-width:860px){.capv .blk{white-space:normal}}
@media (max-width:1100px){.propgrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.plab{min-height:0}}
@media (max-width:640px){#props{padding:72px 20px 80px}.wy-h{margin-bottom:32px}.propgrid{grid-template-columns:1fr}.pbig{font-size:52px}
  .caps{margin-top:64px}.capg{grid-template-columns:1fr}.capk{padding:16px 0 4px;border-bottom:0}.capv{padding-top:0}.capv .blk{white-space:normal}}
@media (prefers-reduced-motion:reduce){#props.anim .prop{transition:none}}
