:root{
  /* 纸面中性灰 + 单一朱红强调，与「了解我们」年度报告风格同源 */
  --bg:#F1F2F4; --paper:#FFFFFF; --ink:#15181D; --ink-2:#3C4350; --ink-3:#6B7280;
  --line:#D3D7DE; --line-2:#E5E8ED; --accent:#C0392B; --accent-soft:#FBEDEA; --accent-deep:#8C2A1F;
  --navH:64px;
  /* 字号下限 11px：Windows 下 9~10px 的等宽小标签会糊成一片，全站统一到可读档 */
  /* 拉丁字形用自托管 IBM Plex；中文交给系统字体，避免子集字体缺字造成同行混排 */
  --serif:Georgia,"Times New Roman","Songti SC","STSong","Microsoft YaHei","PingFang SC",serif;
  --sans:"IBM Plex Sans","PingFang SC","Microsoft YaHei","Noto Sans CJK SC",system-ui,sans-serif;
  --mono:"IBM Plex Mono","JetBrains Mono",Consolas,"Microsoft YaHei",monospace;
}
*{box-sizing:border-box;margin:0;padding:0}
html{scroll-behavior:smooth}
/* Windows 上 antialiased 会把中文笔画削细发灰，交给系统默认的次像素抗锯齿 */
body{font-family:var(--sans);background:var(--bg);color:var(--ink);line-height:1.65}
a{color:inherit;text-decoration:none}
.wrap{max-width:1240px;margin:0 auto;padding:0 26px}

/* ---------- TOP NAV ---------- */
/* 不用 backdrop-filter：模糊合成层会让整条导航的文字发虚 */
header.nav{position:sticky;top:0;z-index:60;height:var(--navH);background:var(--paper);border-bottom:1px solid var(--line)}
.nav-in{height:100%;display:flex;align-items:center;gap:26px;padding:0 26px}
.brand{display:flex;flex:none;align-items:center;gap:9px;white-space:nowrap;font-family:var(--serif);font-weight:700;font-size:18px;letter-spacing:-.01em}
.brand .mark{width:28px;height:28px;flex:none;border-radius:5px;display:grid;place-items:center;overflow:hidden}
.brand .mark img{width:100%;height:100%;display:block;object-fit:contain}
.nav-search{position:relative;display:flex;align-items:center;gap:8px;background:#fff;border:1px solid var(--line);border-radius:3px;padding:6px 10px;min-width:200px}
.nav-search svg{width:14px;height:14px;color:var(--ink-3);flex:none}
.nav-search input{border:0;outline:0;background:transparent;font-family:inherit;font-size:13px;color:var(--ink);width:100%}
.nav-search input::placeholder{color:var(--ink-3)}
.nav-search-panel{position:absolute;top:calc(100% + 8px);right:0;width:340px;max-height:60vh;overflow:auto;background:#fff;border:1px solid var(--ink);border-radius:3px;box-shadow:0 20px 44px rgba(21,24,29,.14);padding:6px;z-index:70}
.nav-search-panel a{display:block;padding:9px 11px;border-radius:2px}
.nav-search-panel a:hover{background:var(--accent-soft)}
.nav-search-panel .t{display:block;font-family:var(--serif);font-weight:700;font-size:14.5px;color:var(--ink)}
.nav-search-panel .s{display:block;margin-top:2px;font-size:13px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.nav-search-empty{padding:14px;text-align:center;color:var(--ink-3);font-size:13px}
nav.menus{display:flex;gap:2px}
nav.menus a{padding:7px 12px;color:var(--ink-2);font-size:14px;font-weight:500;transition:.18s;border-bottom:2px solid transparent}
nav.menus a:hover{color:var(--accent);border-bottom-color:var(--accent-soft)}
nav.menus a.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}
.nav-right{margin-left:auto;display:flex;align-items:center;gap:10px}
.lang-switch{display:flex;align-items:center;gap:2px;padding:2px;border:1px solid var(--line-2);border-radius:3px;background:rgba(255,255,255,.6)}
.lang-switch a{font-family:var(--mono);font-size:12px;line-height:1;padding:4px 7px;border-radius:2px;color:var(--ink-3)}
.lang-switch a:hover{color:var(--accent)}
.lang-switch a.on{background:var(--accent-soft);color:var(--accent);font-weight:600}
.gh{display:flex;align-items:center;gap:7px;font-size:13px;color:var(--ink-2);border:1px solid var(--line);padding:7px 12px;border-radius:3px;background:#fff;transition:.18s}
.gh:hover{color:var(--accent);border-color:var(--accent)}
.gh svg{width:15px;height:15px}
.star-pills{display:flex;align-items:center;gap:8px;margin-left:-10px}
.star-pill{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 10px;border:1px solid var(--line);border-radius:2px;background:#fff;font-size:13px;color:var(--ink-2);transition:.18s}
.star-pill:hover{border-color:var(--ink);color:var(--ink)}
.star-pill .ic{width:15px;height:15px;flex:none}
.star-pill .ic svg{width:100%;height:100%;display:block}
.star-pill .ic.gitee{color:var(--accent)}
.star-pill .star{color:var(--ink-3);font-size:12px;line-height:1}
.star-pill b{font-family:var(--mono);font-weight:600;font-size:13px;color:var(--ink);line-height:1}
.ic-svg{width:16px;height:16px;flex:none;vertical-align:-3px}
.issuelinks{display:flex;flex-wrap:wrap;gap:12px;margin:22px 0}
.issuelinks .ibtn{display:inline-flex;align-items:center;gap:8px;font-family:var(--sans);font-weight:600;font-size:14px;color:#fff;background:var(--ink);border:1px solid var(--ink);border-radius:3px;padding:11px 18px;transition:.18s}
.issuelinks .ibtn:hover{background:var(--accent);border-color:var(--accent);transform:translateY(-2px)}
.issuelinks .ibtn svg{width:16px;height:16px;flex:none;display:block}

.progress{position:fixed;top:var(--navH);left:0;height:2px;width:0;background:var(--accent);z-index:61}

/* ---------- HOME : RELEASE RIBBON ---------- */
.ribbon{background:var(--paper);border-bottom:1px solid var(--line)}
.ribbon-in{display:flex;align-items:center;gap:18px;min-height:38px;flex-wrap:wrap;font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase}
.ribbon-tag{color:var(--accent);font-weight:600}
.ribbon-link{display:inline-flex;align-items:center;gap:6px;color:var(--ink);border-bottom:1px solid var(--line);padding-bottom:1px}
.ribbon-link:hover{border-bottom-color:var(--accent);color:var(--accent)}
.ribbon-link svg{width:11px;height:11px}
.ribbon-meta{color:var(--ink-3)}
.ribbon-meta-last{margin-left:auto}

/* ---------- HOME : HERO ---------- */
/* 纸面排印 + 大字号论断；朱红只出现在标题的一个词和主下载按钮上 */
.hero{position:relative;border-bottom:1px solid var(--line);overflow:hidden;background:var(--bg)}
.hero-in{position:relative;display:grid;grid-template-columns:1.06fr .94fr;gap:0;padding:0 26px;align-items:stretch}
.hero-copy{display:flex;flex-direction:column;justify-content:center;padding:66px 56px 58px 0;border-right:1px solid var(--line)}
.eyebrow{display:inline-flex;align-items:center;gap:10px;font-family:var(--mono);font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent);margin-bottom:24px}
.eyebrow .sq{width:24px;height:1px;background:var(--accent);flex:none}
h1.title{font-family:var(--serif);font-weight:700;font-size:clamp(44px,5.4vw,80px);line-height:1.04;letter-spacing:-.035em;margin-bottom:22px}
h1.title .hl{color:var(--accent);border-bottom:3px solid var(--accent);padding-bottom:1px}
/* 超紧字距/行高只适合拉丁大标题，中文会挤成一团 */
html[lang^="zh"] h1.title{letter-spacing:-.012em;line-height:1.2}
html[lang^="zh"] .rel-head h1{letter-spacing:-.012em;line-height:1.28}
html[lang^="zh"] .sec-head h2,html[lang^="zh"] .release h2,html[lang^="zh"] .rel-sec h2{letter-spacing:-.01em;line-height:1.35}
html[lang^="zh"] .rel-ver b{letter-spacing:-.01em}
.sub{font-size:17px;line-height:1.75;color:var(--ink-2);max-width:48ch;margin-bottom:28px}
.cta{display:flex;gap:12px;flex-wrap:wrap}
.btn{display:inline-flex;align-items:center;gap:9px;padding:12px 22px;border-radius:3px;font-weight:600;font-size:14.5px;transition:.18s}
.btn-primary{background:var(--accent);color:#fff}
.btn-primary:hover{background:var(--ink);transform:translateY(-2px)}
.btn-ghost{border:1px solid var(--line);background:transparent;color:var(--ink)}
.btn-ghost:hover{border-color:var(--ink)}
.btn svg{width:16px;height:16px}
.btn:focus-visible,.copy:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* 可复制的启动命令：开发者进站先看这个 */
.cmd{margin-top:30px;border:1px solid var(--line);background:var(--paper);max-width:520px}
.cmd-row{display:flex;align-items:center;gap:12px;padding:10px 12px}
.cmd-row+.cmd-row{border-top:1px solid var(--line-2)}
.cmd-os{flex:none;width:40px;font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--ink-3)}
.cmd-row code{flex:1;min-width:0;font-family:var(--mono);font-size:13px;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.copy{flex:none;border:1px solid var(--line);background:transparent;font-family:var(--mono);font-size:11px;letter-spacing:.12em;padding:5px 9px;color:var(--ink-3);cursor:pointer;transition:.18s}
.copy:hover{border-color:var(--ink);color:var(--ink)}
.copy.done{border-color:var(--accent);color:var(--accent)}
.cmd-note{margin-top:10px;font-family:var(--mono);font-size:11px;color:var(--ink-3)}

/* 右侧是产品本身：一张运行中的请求面板，不是装饰性插图 */
.hero-art{display:flex;align-items:center;justify-content:center;padding:60px 0 60px 48px}
.console{width:100%;max-width:470px;background:var(--paper);border:1px solid var(--line);box-shadow:0 18px 40px rgba(21,24,29,.06)}
.console-h{display:flex;align-items:center;gap:9px;padding:11px 14px;border-bottom:1px solid var(--line);font-family:var(--mono);font-size:11px;color:var(--ink-3)}
.console-h b{color:var(--ink);font-weight:600}
.console-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);flex:none;animation:livePulse 2s steps(2,end) infinite}
@keyframes livePulse{50%{opacity:.2}}
.console-state{color:var(--ink-2)}
.console-port{margin-left:auto}
.console-body{padding:6px 0}
.console-row{display:grid;grid-template-columns:38px minmax(0,1fr) 34px;gap:10px;align-items:center;padding:9px 14px;font-family:var(--mono);font-size:12px;border-bottom:1px solid var(--line-2)}
.console-row:last-child{border-bottom:0}
.console-row .m{color:var(--ink-3);font-size:11px;letter-spacing:.08em}
.console-row .u{color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.console-row .s{text-align:right;font-size:11px;color:var(--ink-2)}
.console-row .s.err{color:var(--accent)}
.console-f{display:flex;justify-content:space-between;padding:10px 14px;border-top:1px solid var(--line);font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:var(--ink-3)}

/* 事实条：不放大号数字，用等宽小字排成一行数据 */
.trust{display:grid;grid-template-columns:repeat(3,1fr);border-top:1px solid var(--line)}
.trust-item{display:flex;align-items:baseline;gap:14px;padding:18px 20px 18px 0;border-right:1px solid var(--line-2)}
.trust-item:last-child{border-right:0}
.trust-item b{font-family:var(--mono);font-weight:600;font-size:18px;letter-spacing:-.02em;color:var(--ink);white-space:nowrap}
.trust-item b em{font-style:normal;font-size:11px;color:var(--ink-3);margin-left:3px}
.trust-item span{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}

/* HOME : sections */
.sec{padding:66px 0}
.sec-head{margin-bottom:30px}
.sec-head .k{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent)}
.sec-head .k::before{content:"";display:inline-block;width:20px;height:1px;background:currentColor;vertical-align:middle;margin-right:9px}
.sec-head h2{font-family:var(--serif);font-size:clamp(24px,2.6vw,34px);font-weight:700;line-height:1.2;margin-top:10px;letter-spacing:-.015em}
.sec-lede{margin-top:10px;font-size:14px;line-height:1.7;color:var(--ink-3);max-width:62ch}
.grid4{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}
.card{background:var(--paper);border:1px solid var(--line);border-radius:0;padding:22px;position:relative;transition:border-color .2s}
.card::before{content:"";position:absolute;top:0;left:0;height:2px;width:0;background:var(--accent);transition:width .3s ease}
.card:hover{border-color:var(--ink)}
.card:hover::before{width:100%}
.card .n{font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--accent);margin-bottom:14px}
.card h3{font-family:var(--serif);font-size:16.5px;font-weight:700;margin-bottom:7px;letter-spacing:-.01em}
.card p{font-size:13.5px;color:var(--ink-3)}
.qs{border-top:1px solid var(--line);padding:62px 0 20px}
.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:6px}
.step{background:var(--paper);border:1px solid var(--line);border-left:2px solid var(--accent);border-radius:0;padding:20px}
.step .no{font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--accent);margin-bottom:10px}
.step h3{font-family:var(--serif);font-size:16px;font-weight:700;margin-bottom:6px}
.step p{font-size:13.5px;color:var(--ink-3)}
.step a{display:inline-flex;align-items:center;gap:6px;margin-top:10px;font-size:13px;color:var(--accent);font-weight:500;border-bottom:1px solid transparent;transition:border-color .18s}
.step a:hover{border-bottom-color:var(--accent)}
.step a svg{width:14px;height:14px}
.enter{border-top:1px solid var(--line);padding:54px 0}
.enter-in{display:grid;grid-template-columns:1fr 1fr 1fr;gap:14px}
.enter a{display:block;background:var(--paper);border:1px solid var(--line);border-radius:0;padding:22px;transition:border-color .2s,background .2s}
.enter a:hover{border-color:var(--ink);background:#fff}
.enter .l{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3)}
.enter h3{font-family:var(--serif);font-size:18px;font-weight:700;margin:9px 0 5px}
.enter p{font-size:13.5px;color:var(--ink-3)}
.enter-in.four{grid-template-columns:repeat(4,minmax(0,1fr))}
.enter .enter-card{display:block;background:var(--bg);border:1px dashed var(--line);padding:22px}
@media (max-width:960px){.enter-in,.enter-in.four{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:560px){.enter-in,.enter-in.four{grid-template-columns:1fr}}

/* ---------- HOME : ARCHITECTURE TRACE ---------- */
/* 真机剖面：外圈是请求环路，内圈是模块与依赖，底部是组合根。
   命令一跑，光点沿真实代码顺序推进；可拔插的钩子用实心/虚线区分 */
.trace-lede{font-size:14px;color:var(--ink-3);line-height:1.75;max-width:64ch;margin-top:12px}
.trace-shell{margin-top:26px;background:var(--paper);border:1px solid var(--line)}
.trace-bar{display:flex;align-items:stretch;border-bottom:1px solid var(--line)}
.trace-tag{display:flex;align-items:center;padding:0 14px;font-family:var(--mono);font-size:11px;letter-spacing:.16em;color:var(--ink-3);border-right:1px solid var(--line-2)}
.trace-form{flex:1;display:flex;align-items:center;min-width:0}
.trace-sig{padding-left:14px;font-family:var(--mono);font-size:14px;line-height:1;color:var(--accent)}
.trace-form input{flex:1;min-width:0;border:0;outline:0;background:none;padding:14px 12px;font-family:var(--mono);font-size:13.5px;color:var(--ink)}
.trace-form button{border:0;background:var(--ink);color:#fff;font-family:var(--mono);font-size:11px;letter-spacing:.16em;padding:0 22px;cursor:pointer;transition:background .18s}
.trace-form button:hover{background:var(--accent)}
.trace-st{display:flex;align-items:center;padding:0 16px;border-left:1px solid var(--line-2);font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--ink-3);white-space:nowrap}
.trace-st.live{color:var(--accent);animation:tracePulse 1s steps(2,end) infinite}
.trace-st.done{color:var(--ink)}
.trace-st.err{color:var(--accent-deep)}
@keyframes tracePulse{50%{opacity:.35}}

.trace-mw{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 14px;border-bottom:1px solid var(--line);background:var(--bg)}
.trace-mw-lbl{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);margin-right:4px}
.trace-sw{display:inline-flex;align-items:center;gap:7px;padding:5px 10px;background:var(--paper);border:1px solid var(--line);cursor:pointer;transition:.18s}
.trace-sw::before{content:"";width:6px;height:6px;flex:none;border:1px solid var(--line);background:transparent;transition:.18s}
.trace-sw b{font-family:var(--mono);font-size:11px;font-weight:600;color:var(--ink-3);transition:.18s}
.trace-sw i{font-style:normal;font-family:var(--mono);font-size:11px;color:#A7AFBA}
.trace-sw:hover{border-color:var(--accent)}
.trace-sw.on{border-color:var(--ink)}
.trace-sw.on::before{background:var(--accent);border-color:var(--accent)}
.trace-sw.on b{color:var(--ink)}
.trace-sw:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

.trace-grid{display:grid;grid-template-columns:minmax(0,1fr) 272px}
.trace-board{padding:4px 8px 8px;min-width:0}
.trace-board svg{display:block;width:100%;height:auto}
.trace-side{border-left:1px solid var(--line);padding:12px 14px 14px;min-width:0}
.trace-side h4{font-family:var(--mono);font-size:11px;font-weight:400;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3);margin-bottom:10px}
.trace-log{font-family:var(--mono);font-size:11px;line-height:1.6;max-height:348px;overflow-y:auto}
.trace-log p{display:flex;gap:7px;padding:3px 0;border-bottom:1px solid var(--line-2);white-space:nowrap;overflow:hidden}
.trace-log .n{flex:none;width:86px;color:var(--ink);overflow:hidden;text-overflow:ellipsis}
.trace-log .m{flex:1;min-width:0;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis}
.trace-log .c{flex:none;width:30px;text-align:right;font-size:11px}
.trace-log .c.ok{color:var(--ink-3)}
.trace-log .c.err{color:var(--accent);font-weight:600}
.trace-log .skip .n,.trace-log .skip .m{color:#AEB6C1}
.trace-log .sys .n{color:var(--accent)}
.trace-call{display:flex;align-items:flex-start;gap:16px;padding:13px 16px 14px;border-top:1px solid var(--line);background:var(--bg);min-height:74px}
.trace-call-i{flex:none;padding-top:2px;font-family:var(--mono);font-size:11px;letter-spacing:.12em;color:var(--ink-3);white-space:nowrap}
.trace-call-b{flex:1;min-width:0}
.trace-call-b b{display:block;font-family:var(--mono);font-size:12px;font-weight:600;color:var(--ink-3);transition:color .18s}
.trace-call-b p{margin-top:4px;font-size:13px;line-height:1.65;color:var(--ink-2);max-width:70ch}
.trace-call-c{flex:none;padding-top:2px;font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--ink-3)}
.trace-call-c.err{color:var(--accent);font-weight:600}
.trace-call-c.muted{color:#AEB6C1}
.trace-call.on{background:var(--paper)}
.trace-call.on .trace-call-b b{color:var(--accent)}
.trace-skip{margin-left:auto;padding:5px 10px;border:1px solid var(--line);background:transparent;font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--ink-3);cursor:pointer;transition:.18s}
.trace-skip:hover{border-color:var(--ink);color:var(--ink)}
.trace-hint{margin-top:12px;font-family:var(--mono);font-size:12px;line-height:1.7;color:var(--ink-3)}

.trace-board .lane{fill:none;stroke:var(--line);stroke-width:1}
.trace-board .pad{fill:var(--paper);stroke:#B9C0CA;stroke-width:1.4;transition:fill .18s,stroke .18s}
.trace-board .pad.hit{fill:var(--accent);stroke:var(--accent)}
.trace-board .pad.off{fill:none;stroke:#CDD3DB;stroke-dasharray:2 2}
.trace-board .focus{fill:none;stroke:var(--accent);stroke-width:1;stroke-dasharray:2 3}
.trace-board .nm{font-family:var(--mono);font-size:12px;fill:var(--ink)}
.trace-board .nm.off{fill:#AEB6C1}
.trace-board .nm.cur{fill:var(--accent);font-weight:600}
.trace-board .rl{font-family:var(--mono);font-size:11px;fill:#8A93A0}
.trace-board .zone{font-family:var(--mono);font-size:11px;fill:#9AA3B0;letter-spacing:.12em}
.trace-board .trace{fill:none;stroke:var(--accent);stroke-width:1.6;stroke-linejoin:round;stroke-linecap:round}
.trace-board .trace-h{fill:none;stroke:#C6CCD5;stroke-width:1.2;stroke-linejoin:round;opacity:.8}
.trace-board .dot,.trace-board .halo{fill:var(--accent)}

@media (max-width:960px){
  .trace-grid{grid-template-columns:1fr}
  .trace-side{border-left:0;border-top:1px solid var(--line)}
  .trace-log{max-height:220px}
}
@media (max-width:720px){
  /* 小屏上把板子横向滚动，保住等宽标识符的可读字号 */
  .trace-board{overflow-x:auto;-webkit-overflow-scrolling:touch}
  .trace-board svg{min-width:680px}
}
@media (max-width:560px){
  .trace-bar{flex-wrap:wrap}
  .trace-st{width:100%;padding:8px 14px;border-left:0;border-top:1px solid var(--line-2)}
}

/* ---------- HOME : RELEASE (唯一一处深色块) ---------- */
.release{background:var(--ink);color:var(--paper);padding:64px 0}
.release-in{display:grid;grid-template-columns:.9fr 1.1fr;gap:56px}
.release .k{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent)}
.release h2{font-family:var(--serif);font-size:clamp(26px,3vw,40px);font-weight:700;line-height:1.15;margin-top:12px;letter-spacing:-.02em}
.release-l p{margin-top:14px;font-size:14px;line-height:1.8;color:#B9C0CA;max-width:42ch}
.release-links{display:flex;gap:10px;flex-wrap:wrap;margin-top:24px}
.release-links a{display:inline-flex;align-items:center;gap:7px;border:1px solid #3C4350;padding:9px 14px;font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:var(--paper);transition:.18s}
.release-links a:hover{border-color:var(--paper);background:rgba(255,255,255,.06)}
.release-links a svg{width:12px;height:12px}
.release-r{border-top:1px solid #3C4350}
.pkg{display:grid;grid-template-columns:76px minmax(0,1fr) auto;gap:14px;align-items:center;padding:14px 0;border-bottom:1px solid #3C4350;font-family:var(--mono);font-size:12px}
.pkg-os{color:#9AA3B0;letter-spacing:.08em;text-transform:uppercase;font-size:11px}
.pkg code{color:var(--paper);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pkg-note{color:#9AA3B0;font-size:11px;white-space:nowrap}
.release-note{margin-top:16px;font-size:12px;line-height:1.7;color:#9AA3B0;max-width:56ch}

/* ---------- RELEASE PAGE : /download/ ---------- */
.rel-head{border-bottom:1px solid var(--line);background:var(--paper);padding:52px 0 46px}
.rel-head .k{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--accent)}
.rel-head h1{font-family:var(--serif);font-size:clamp(30px,4vw,52px);font-weight:700;line-height:1.1;letter-spacing:-.03em;margin-top:12px}
.rel-head p{margin-top:14px;font-size:15px;line-height:1.8;color:var(--ink-2);max-width:70ch}
.rel-current{background:var(--bg);border-bottom:1px solid var(--line)}
.rel-current-in{display:grid;grid-template-columns:280px minmax(0,1fr);gap:0}
.rel-ver{padding:34px 26px 34px 0;border-right:1px solid var(--line)}
.rel-ver .lbl,.rel-panel .lbl,.rel-known .lbl{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-3)}
.rel-ver b{display:block;margin-top:12px;font-family:var(--serif);font-size:34px;font-weight:700;letter-spacing:-.03em;line-height:1.1}
.rel-ver .date{display:block;margin-top:6px;font-family:var(--mono);font-size:11px;color:var(--ink-3)}
.rel-ver-links{display:flex;flex-wrap:wrap;gap:12px;margin-top:22px}
.rel-ver-links a{font-family:var(--mono);font-size:11px;color:var(--accent);border-bottom:1px solid transparent}
.rel-ver-links a:hover{border-bottom-color:var(--accent)}
.rel-assets{padding:30px 0 30px 26px;min-width:0}
.rel-assets-h{display:flex;align-items:baseline;gap:10px;font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2);padding-bottom:10px;border-bottom:1px solid var(--line)}
.rel-assets-h span{font-family:var(--mono);font-size:11px;letter-spacing:.04em;text-transform:none;color:var(--ink-3)}
.rel-asset{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:16px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line-2);font-size:11px}
.rel-asset code{font-family:var(--mono);font-size:12px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rel-asset span{font-family:var(--mono);font-size:11px;color:var(--ink-3);white-space:nowrap}
.rel-asset a{font-family:var(--mono);font-size:11px;letter-spacing:.1em;color:var(--accent)}
.rel-asset a:hover{text-decoration:underline}
.rel-assets-hint{margin-top:10px;font-size:12px;line-height:1.6;color:var(--ink-3)}
.rel-sec{padding:52px 0;border-bottom:1px solid var(--line)}
.rel-alt{background:var(--paper)}
.rel-sec h2{font-family:var(--serif);font-size:clamp(22px,2.6vw,32px);font-weight:700;letter-spacing:-.02em;line-height:1.2}
.rel-sec .lede{margin-top:10px;font-size:14px;line-height:1.75;color:var(--ink-3);max-width:68ch}
.rel-table-wrap{overflow-x:auto;margin-top:22px}
.rel-table{width:100%;border-collapse:collapse;min-width:720px;font-size:13px}
.rel-table th,.rel-table td{text-align:left;vertical-align:top;padding:14px 16px;border-bottom:1px solid var(--line-2)}
.rel-table thead th{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);font-weight:400;border-bottom:1px solid var(--line)}
.rel-table tbody th{font-family:var(--serif);font-size:15px;font-weight:700;color:var(--ink);width:150px}
.rel-table td{color:var(--ink-2);line-height:1.65}
.rel-table td:last-child,.rel-table thead th:last-child{width:80px}
.rel-table td a{font-family:var(--mono);font-size:11px;color:var(--accent)}
.rel-table td a:hover{text-decoration:underline}
.rel-check{list-style:none;margin-top:20px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 30px;max-width:1000px}
.rel-check li{position:relative;padding:11px 0 11px 26px;border-bottom:1px solid var(--line-2);font-size:13.5px;line-height:1.7;color:var(--ink-2)}
.rel-check li::before{content:"";position:absolute;left:2px;top:19px;width:7px;height:7px;border:1px solid var(--accent);transform:rotate(45deg)}
.rel-start{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin-top:22px}
.rel-panel{background:var(--paper);border:1px solid var(--line);padding:20px}
.rel-panel .cmd{margin-top:14px;max-width:none}
.rel-panel ol{margin:16px 0 0 18px;font-size:13px;line-height:1.9;color:var(--ink-2)}
.rel-note{margin-top:16px;font-size:13px;line-height:1.75;color:var(--ink-3);max-width:76ch}
.rel-verify-cmd{margin-top:22px;max-width:760px}
.rel-two{display:grid;grid-template-columns:1.2fr 1fr;gap:36px;margin-top:8px}
.rel-two .rel-check{grid-template-columns:1fr;margin-top:20px}
.rel-known{margin-top:20px;border-left:2px solid var(--accent);padding-left:18px}
.rel-known ul{margin:14px 0 0 16px;font-size:13px;line-height:1.9;color:var(--ink-2)}
.rel-help{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:22px}
.rel-help a,.rel-help-static{display:block;background:var(--bg);border:1px solid var(--line);padding:18px;transition:border-color .18s}
.rel-help a:hover{border-color:var(--ink)}
.rel-help span{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--accent)}
.rel-help p{margin-top:8px;font-size:13px;line-height:1.65;color:var(--ink-3)}
@media(max-width:960px){
  .rel-current-in{grid-template-columns:1fr}
  .rel-ver{border-right:0;border-bottom:1px solid var(--line);padding-right:0}
  .rel-assets{padding-left:0}
  .rel-start,.rel-two{grid-template-columns:1fr}
  .rel-help{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(max-width:640px){
  .rel-check{grid-template-columns:1fr}
  .rel-help{grid-template-columns:1fr}
  .rel-asset{grid-template-columns:minmax(0,1fr) auto;gap:6px 10px}
  .rel-asset span{grid-column:1/-1}
}

footer{border-top:1px solid var(--line);background:var(--bg);padding:26px 0}
.foot-in{display:flex;justify-content:space-between;flex-wrap:wrap;gap:12px;font-size:13px;color:var(--ink-3)}
.foot-in a:hover{color:var(--accent)}

/* ---------- DOCS : full-screen shell ---------- */
.shell{display:grid;grid-template-columns:276px minmax(0,1fr) 250px;height:calc(100vh - var(--navH))}
aside.side{overflow-y:auto;border-right:1px solid var(--line);background:rgba(255,255,255,.55);padding:24px 18px 40px}
aside.side .grp{margin-bottom:22px}
aside.side .t{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);margin:0 8px 9px}
aside.side a{display:block;padding:7px 11px;border-radius:2px;color:var(--ink-2);font-size:13.8px;margin-bottom:1px;border-left:2px solid transparent;transition:.15s}
aside.side a:hover{background:var(--accent-soft);color:var(--accent)}
aside.side a.on{background:var(--accent-soft);color:var(--accent-deep);border-left-color:var(--accent);font-weight:600}

/* 折叠式层级导航 */
aside.side .doctree .grp{margin-bottom:18px}
aside.side .doctree .grp>.th{display:flex;align-items:center;gap:2px;margin:0 8px 8px}
aside.side .doctree .grp>.th>a.t{flex:1;min-width:0;display:block;padding:0;margin:0;border:0;border-radius:4px;
  font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3)}
aside.side .doctree .grp>.th>a.t:hover{color:var(--accent);background:none}
aside.side .doctree .grp>.th>a.t.on{color:var(--accent);background:none;font-weight:600}
aside.side .doctree .caret{width:22px;height:22px;flex:none;display:flex;align-items:center;justify-content:center;
  padding:0;background:none;border:0;border-radius:6px;cursor:pointer;color:var(--ink-3)}
aside.side .doctree .caret:hover{color:var(--accent);background:var(--accent-soft)}
aside.side .doctree .caret::before{content:"";width:5px;height:5px;
  border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(45deg);transition:transform .18s}
aside.side .doctree .grp.collapsed>.th>.caret::before{transform:rotate(-45deg)}
aside.side .doctree .grp.collapsed>.items{display:none}

aside.side .doctree .grp.sub{margin:2px 0}
aside.side .doctree .grp.sub>.th{margin:0;display:flex;align-items:center;gap:2px}
aside.side .doctree .grp.sub>.th>a.t{flex:1;min-width:0;display:block;margin:0;padding:7px 11px;border-radius:6px;
  border-left:2px solid transparent;font-family:inherit;font-size:13.8px;letter-spacing:0;text-transform:none;color:var(--ink-2)}
aside.side .doctree .grp.sub>.th>a.t:hover{background:var(--accent-soft);color:var(--accent)}
aside.side .doctree .grp.sub>.th>a.t.on{background:var(--accent-soft);color:var(--accent);border-left-color:var(--accent);font-weight:600}
aside.side .doctree .grp.sub>.items{margin:2px 0 0 10px;padding-left:8px;border-left:1px dashed var(--line-2)}
aside.side .doctree .grp.sub>.items>a{font-size:13.2px;padding:6px 10px}
aside.side .foot{margin-top:26px;padding:14px 10px 0;border-top:1px solid var(--line-2);font-size:12px;color:var(--ink-3);display:flex;flex-direction:column;gap:6px}
aside.side .foot a:hover{color:var(--accent)}

.doccol{overflow-y:auto;scroll-behavior:smooth;background:var(--bg)}
.dochead{display:flex;align-items:center;gap:8px;padding:15px clamp(28px,4.5vw,64px);font-family:var(--mono);font-size:12px;color:var(--ink-3);border-bottom:1px solid var(--line-2);background:var(--paper)}
.dochead b{color:var(--accent);font-weight:500}
.dochead .sp{margin-left:auto;display:flex;gap:16px}
.dochead .sp span{color:var(--ink-3)}

.paper{position:relative;background:var(--paper);border-bottom:1px solid var(--line);min-height:calc(100vh - var(--navH) - 46px);padding:0 clamp(28px,4.5vw,72px) 72px}
.paper::before,.paper::after{content:"";position:absolute;width:18px;height:18px;border:2px solid var(--accent);pointer-events:none}
.paper::before{top:16px;left:16px;border-right:0;border-bottom:0}
.paper::after{top:16px;right:16px;border-left:0;border-bottom:0}

article.doc{position:relative;max-width:900px;padding-top:46px}
article.doc::before{content:"";position:absolute;left:-22px;top:58px;bottom:0;width:1px;background:repeating-linear-gradient(var(--line) 0 5px,transparent 5px 11px)}
article.doc h1{font-family:var(--serif);font-weight:700;font-size:clamp(30px,3.2vw,40px);line-height:1.18;letter-spacing:-.02em;margin-bottom:12px}
article.doc .lead{font-size:17px;color:var(--ink-3);margin-bottom:30px;padding-bottom:26px;border-bottom:1px solid var(--line-2)}
article.doc h2{font-family:var(--serif);font-weight:700;font-size:24px;letter-spacing:-.01em;margin:44px 0 14px;padding-top:14px;border-top:1px solid var(--line-2);display:flex;align-items:baseline;gap:12px}
article.doc h2 .no{font-family:var(--mono);font-size:13px;font-weight:500;color:var(--accent);border:1px solid var(--accent);border-radius:2px;padding:2px 7px;letter-spacing:0}
article.doc h3{font-family:var(--serif);font-weight:700;font-size:17.5px;margin:26px 0 10px;color:var(--ink)}
article.doc p{font-size:15.5px;color:var(--ink-2);margin-bottom:14px}
article.doc ul{margin:0 0 15px 20px;color:var(--ink-2);font-size:15px}
article.doc ol{margin:0 0 15px 22px;color:var(--ink-2);font-size:15px}
article.doc .doc-children{margin:0 0 18px;padding:0;list-style:none}
article.doc .doc-children li{padding:10px 0;border-bottom:1px solid var(--line-2)}
article.doc .doc-children li:last-child{border-bottom:0}
article.doc .doc-children a{font-weight:600}
article.doc .doc-children span{display:block;margin-top:4px;color:var(--ink-3);font-size:13px}
article.doc .doc-children-empty{margin:0 0 18px;color:var(--ink-3);font-size:14px}

/* 地址行 + 索引卡片 */
.entry-list{display:flex;flex-direction:column;gap:8px;margin:16px 0 22px}
.entry-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:18px 0 26px}
article.doc .entry-row,article.doc .entry-card{display:flex;align-items:center;gap:13px;padding:13px 15px;
  border:1px solid var(--line-2);border-radius:2px;background:var(--paper);color:var(--ink);text-decoration:none;
  transition:border-color .16s,background .16s}
article.doc .entry-row:hover,article.doc .entry-card:hover{border-color:var(--accent);border-bottom-color:var(--accent);
  background:var(--accent-soft);color:var(--ink)}
article.doc .entry-row .ico,article.doc .entry-card .ico{flex:none;width:34px;height:34px;display:flex;align-items:center;justify-content:center;
  border-radius:2px;background:var(--accent-soft);color:var(--accent)}
article.doc .ico svg{width:19px;height:19px;stroke:currentColor;fill:none;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
article.doc .entry-row .body,article.doc .entry-card .body{display:flex;flex-direction:column;gap:3px;min-width:0}
article.doc .entry-row b,article.doc .entry-card b{font-size:14.5px;font-weight:600;color:var(--ink)}
article.doc .entry-row em,article.doc .entry-card em{font-style:normal;font-family:var(--mono);font-size:12px;
  color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
article.doc .entry-card em{white-space:normal;font-family:inherit;font-size:13px;line-height:1.5}
@media(max-width:700px){.entry-grid{grid-template-columns:1fr}}
article.doc li{margin-bottom:7px}
article.doc strong{color:var(--ink)}
article.doc :not(pre) > code{font-family:var(--mono);font-size:13px;background:#F4F2F0;border:1px solid var(--line-2);border-radius:2px;padding:1px 6px;color:var(--accent-deep)}
article.doc a{color:var(--accent);border-bottom:1px solid rgba(192,57,43,.35)}
article.doc a:hover{border-bottom-color:var(--accent)}
article.doc img{max-width:100%;height:auto;border:1px solid var(--line);border-radius:2px;margin:16px 0;display:block}

/* 独立页面（了解我们等） */
.page-wrap{max-width:1040px;margin:0 auto;padding:56px 26px 90px}
article.doc.doc-standalone{background:var(--paper);border:1px solid var(--line);border-radius:0;padding:48px clamp(24px,4vw,56px) 56px;max-width:none;box-shadow:none}
article.doc.doc-standalone::before{display:none}
article.doc.doc-standalone h2:first-of-type{border-top:0;margin-top:22px;padding-top:0}
article.doc.doc-standalone .team{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:18px 0}
article.doc.doc-standalone .team .m{border:1px solid var(--line);border-radius:0;padding:16px;background:var(--bg)}
article.doc.doc-standalone .team .m b{font-family:var(--serif);font-size:15px;display:block;margin-bottom:4px}
article.doc.doc-standalone .team .m span{font-size:13px;color:var(--ink-3)}
@media(max-width:640px){article.doc.doc-standalone .team{grid-template-columns:1fr}}

.admon{display:flex;gap:12px;background:var(--bg);border-left:2px solid var(--accent);border-radius:0;padding:15px 17px;margin:22px 0;font-size:14.5px;color:var(--ink-2)}
.admon svg{width:19px;height:19px;flex:none;color:var(--accent);margin-top:2px}

article.doc pre{background:#F7F7F7;color:#24292E;border:1px solid var(--line-2);border-radius:2px;padding:15px 17px;font-family:var(--mono);font-size:13px;line-height:1.7;overflow-x:auto;margin:16px 0}
article.doc table{width:100%;border-collapse:collapse;margin:18px 0;font-size:14.5px}
article.doc table th{text-align:left;background:var(--ink);color:#fff;font-family:var(--sans);font-weight:600;padding:10px 13px;letter-spacing:.02em}
article.doc table td{padding:9px 13px;border:1px solid var(--line);color:var(--ink-2)}

.pager{display:grid;grid-template-columns:1fr 1fr;gap:14px;padding:26px clamp(28px,4.5vw,72px) 60px;max-width:1044px}
.pager a{border:1px solid var(--line);border-radius:0;padding:14px 16px;background:var(--paper);transition:border-color .18s,background .18s}
.pager a:hover{border-color:var(--ink);background:#fff}
.pager .lbl{font-family:var(--mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);display:block;margin-bottom:5px}
.pager .tt{font-family:var(--serif);font-weight:700;font-size:15px}
.pager a.next{grid-column:2;text-align:right}

aside.toc{overflow-y:auto;border-left:1px solid var(--line);padding:28px 20px 40px;background:rgba(255,255,255,.55)}
aside.toc .t{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);margin-bottom:12px}
aside.toc a, #TableOfContents a{display:block;padding:5px 0 5px 13px;border-left:2px solid var(--line-2);color:var(--ink-2);font-size:13px;transition:.15s}
aside.toc a:hover, #TableOfContents a:hover{color:var(--accent);border-left-color:var(--accent)}
aside.toc a.act, #TableOfContents a.act{color:var(--accent);border-left-color:var(--accent);font-weight:500}
#TableOfContents ul{list-style:none;margin:0;padding:0}
#TableOfContents li{margin:0}
aside.toc .badge{margin-top:22px;display:inline-flex;align-items:center;gap:6px;font-family:var(--mono);font-size:11px;letter-spacing:.06em;color:var(--accent-deep);background:var(--accent-soft);border:1px solid #EFD5D0;border-radius:2px;padding:4px 9px}
aside.toc .badge .d{width:5px;height:5px;border-radius:50%;background:var(--accent-deep)}

@media(max-width:1100px){.shell{grid-template-columns:250px minmax(0,1fr)}aside.toc{display:none}}
@media(max-width:960px){
  .hero-in{grid-template-columns:1fr}
  .hero-copy{border-right:0;padding:52px 0 40px}
  .hero-art{padding:0 0 46px}
  .console{max-width:none}
  .grid4,.steps{grid-template-columns:1fr 1fr}
  .release-in{grid-template-columns:1fr;gap:32px}
  .trust{grid-template-columns:repeat(3,1fr)}
  nav.menus a{padding:7px 8px;font-size:13px}
  .nav-search{min-width:0}
}
@media(max-width:820px){.shell{grid-template-columns:1fr}aside.side{display:none}.star-pills{display:none}}
@media(max-width:640px){
  .grid4,.steps{grid-template-columns:1fr}
  .trust{grid-template-columns:1fr}
  .trust-item{border-right:0;border-bottom:1px solid var(--line-2);padding:11px 0}
  .trust-item:last-child{border-bottom:0}
  .pkg{grid-template-columns:1fr;gap:5px}
  .ribbon-meta-last{margin-left:0}
  /* 窄屏导航：品牌不换行，搜索框吃掉剩余宽度 */
  .nav-in{gap:14px;padding:0 16px}
  .brand{font-size:17px}
  .nav-search{flex:1 1 0;min-width:0;padding:6px 9px}
  .lang-switch a{padding:4px 6px}
  /* 手机端顶栏放不下四项导航，首页底部四个入口卡承接同样的去向 */
  nav.menus{display:none}
  h1.title{font-size:clamp(36px,9vw,52px)}
}

/* ---------- 了解我们：滚动故事线 ---------- */
body.story-page #prog{display:none}
/* 与全站共用一套令牌：故事页不再是"另一套皮肤"，而是同一套排印的叙事模式 */
.story{--s-red:var(--accent);--s-ink:var(--ink);--s-ink2:var(--ink-2);--s-dim:var(--ink-3);--s-line:var(--line);
  --s-serif:var(--serif);
  --s-mono:var(--mono);
  background:var(--bg);color:var(--s-ink);
  font-family:var(--sans)}
.story-progress{position:fixed;top:var(--navH);left:0;height:3px;width:0;background:var(--s-red);z-index:80}
.story-hud{position:fixed;right:40px;top:50%;transform:translateY(-50%);z-index:55;text-align:right;pointer-events:none;
  font-family:var(--s-serif);font-size:clamp(34px,3vw,50px);font-weight:700;color:var(--s-red);line-height:1;opacity:.85}
.story-hud small{display:block;font-family:var(--s-mono);font-size:12px;font-weight:400;color:var(--s-dim);letter-spacing:.12em;margin-top:8px}

.story-hero{position:relative;min-height:calc(100vh - var(--navH));display:flex;flex-direction:column;justify-content:center;padding:8vh 8vw 10vh}
.story-top{position:absolute;top:40px;left:8vw;right:8vw;display:flex;justify-content:space-between;
  font-size:15px;color:var(--s-dim);border-bottom:1px solid var(--s-line);padding-bottom:12px}
.story-years{font-family:var(--s-serif);font-size:clamp(56px,8.5vw,136px);line-height:.95;letter-spacing:-.045em;font-weight:700}
.story-years em{font-style:normal;color:var(--s-red)}
.story-hero h1{font-size:clamp(22px,1.9vw,32px);font-weight:700;margin-top:22px;letter-spacing:-.01em}
.story-sub{font-size:clamp(15px,1.05vw,18px);line-height:1.8;color:var(--s-ink2);margin-top:14px;max-width:62ch}
.story-hint{position:absolute;bottom:44px;left:8vw;display:flex;align-items:center;gap:12px;font-family:var(--s-mono);font-size:13px;color:var(--s-dim)}
.story-hint .dot{width:9px;height:9px;border-radius:50%;background:var(--s-red);animation:storyPulse 1.8s infinite}
@keyframes storyPulse{0%,100%{box-shadow:0 0 0 0 rgba(192,57,43,.35)}50%{box-shadow:0 0 0 10px rgba(192,57,43,0)}}

.story-facts{display:flex;flex-wrap:wrap;margin-top:36px;border-top:1px solid var(--s-line);max-width:62ch}
.story-facts>div{flex:1 1 0;min-width:110px;padding:16px 20px 0 0}
.story-facts b{display:block;font-family:var(--s-serif);font-size:clamp(19px,1.7vw,26px);font-weight:700;letter-spacing:-.02em;line-height:1.15}
.story-facts span{display:block;margin-top:7px;font-family:var(--s-mono);font-size:11px;letter-spacing:.14em;color:var(--s-dim)}

.story-scrolly{position:relative;max-width:1400px;margin:0 auto;padding:0 5vw}
.story-scrolly::before{content:"";position:absolute;left:50%;top:0;bottom:0;width:2px;transform:translateX(-50%);background:var(--s-line)}
.story-rail{position:absolute;left:50%;top:0;width:3px;transform:translateX(-50%);height:0;
  background:linear-gradient(var(--s-red),#e8735f);z-index:0;box-shadow:0 0 16px rgba(192,57,43,.3)}

.story-node{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:9vw;align-items:center;min-height:86vh;padding:7vh 0;z-index:1}
.story-node::after{content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:13px;height:13px;border-radius:50%;background:var(--bg);border:2px solid var(--s-red);z-index:3}
.story-node .story-media{order:1;justify-self:end}
.story-node .story-body{order:2;text-align:left}
.story-node:nth-child(even) .story-media{order:2;justify-self:start}
.story-node:nth-child(even) .story-body{order:1;text-align:left;justify-self:end}

.story-media{position:relative;width:100%;max-width:500px;aspect-ratio:4/3;overflow:hidden;border-radius:4px;
  border:1px solid var(--s-line);background:linear-gradient(135deg,#DFE3E8,#C7CDD6);margin:0}
.story-media img{width:100%;height:100%;object-fit:cover;display:block;transform:scale(1.1);transition:transform 1.4s cubic-bezier(.2,.7,.2,1)}
.story-node.in .story-media img{transform:scale(1)}
.story-cap{position:absolute;left:0;bottom:0;padding:6px 10px;background:rgba(21,24,29,.72);color:#fff;
  font-family:var(--s-mono);font-size:11px;letter-spacing:.04em}

.story-year{font-family:var(--s-serif);font-size:clamp(36px,3.4vw,54px);line-height:1;font-weight:700;color:var(--s-red);letter-spacing:-.03em}
.story-tag{display:inline-block;font-family:var(--s-mono);font-size:12px;color:var(--s-dim);letter-spacing:.14em;margin:12px 0 8px}
.story-body h2{font-size:clamp(20px,1.6vw,27px);font-weight:700;line-height:1.3;letter-spacing:-.01em;margin:0 0 10px}
.story-lead{margin:0 0 14px;padding-left:14px;border-left:2px solid var(--s-red);
  font-size:clamp(15px,1.1vw,18px);font-weight:600;line-height:1.6;color:var(--s-ink);max-width:46ch}
.story-body .story-text p{font-size:clamp(15px,1.05vw,17px);line-height:1.75;color:var(--s-ink2);max-width:46ch;margin:0}
.story-body .story-text p+p{margin-top:10px}
.story-body .story-text strong{color:var(--s-ink);font-weight:700}
.story-body .story-text a{color:var(--s-red);text-decoration:none;border-bottom:1px solid rgba(192,57,43,.45);transition:border-color .2s}
.story-body .story-text a:hover{border-bottom-color:var(--s-red)}

.story-media,.story-body{opacity:0;transform:translateY(40px);transition:opacity .85s cubic-bezier(.2,.7,.2,1),transform .85s cubic-bezier(.2,.7,.2,1)}
.story-node.in .story-media,.story-node.in .story-body{opacity:1;transform:none}
.story-node.in .story-body{transition-delay:.1s}

.story-end{min-height:70vh;display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:12vh 5vw}
.story-end .story-year{font-size:clamp(38px,4.2vw,68px)}
.story-end h2{font-size:clamp(20px,1.6vw,28px);margin:16px 0 12px}
.story-end p{font-size:16px;color:var(--s-ink2);max-width:52ch;line-height:1.8}
.story-end .issuelinks{margin-top:26px}
.story-foot{margin-top:34px;font-family:var(--s-mono);font-size:13px;color:var(--s-dim);border-top:1px solid var(--s-line);padding-top:16px}

@media(max-width:900px){
  .story-hud{display:none}
  /* 窄屏取消绝对定位：标题栏回到文档流，避免压在大年份上 */
  .story-hero{padding:6vh 6vw 8vh;justify-content:flex-start}
  .story-top{position:static;display:flex;flex-wrap:wrap;gap:4px 14px;font-size:13px;margin-bottom:28px;padding-bottom:10px}
  .story-years{font-size:clamp(42px,10.5vw,76px)}
  .story-scrolly::before,.story-rail{left:16px}
  .story-node{grid-template-columns:1fr;gap:22px;padding:9vh 0 9vh 52px;min-height:auto}
  .story-node::after{left:16px;top:50%}
  .story-node .story-media,.story-node:nth-child(even) .story-media{order:1;justify-self:start;max-width:100%}
  .story-node .story-body,.story-node:nth-child(even) .story-body{order:2;text-align:left;justify-self:start}
  .story-node:nth-child(even) .story-text{margin-left:0}
  .story-facts>div{flex:1 1 calc(50% - 20px)}
}


