From 1da4b14c19175fd88f5ca0172ff95f3e6c2e5162 Mon Sep 17 00:00:00 2001 From: WpyQwq <3911625973@qq.com> Date: Sat, 19 Sep 2026 11:21:45 +0800 Subject: [PATCH] =?UTF-8?q?Initial=20commit:=20=E8=87=AA=E7=84=B6=E8=AE=B0?= =?UTF-8?q?=E5=BF=86=E7=AB=99=EF=BC=9A12=20=E9=A1=B5=E7=BA=AF=E6=A0=87?= =?UTF-8?q?=E5=87=86=E5=BA=93=20Python=20=E9=9D=99=E6=80=81=E7=AB=99?= =?UTF-8?q?=E7=82=B9=E7=94=9F=E6=88=90=E5=99=A8=EF=BC=8C=E5=90=AB=E7=9C=9F?= =?UTF-8?q?=E5=AE=9E=E8=AF=84=E6=B5=8B=E5=8F=B0=E8=B4=A6=EF=BC=88108=20?= =?UTF-8?q?=E6=9D=A1=EF=BC=89=E4=B8=8E=E5=85=A8=E7=AB=99=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=AB=AF=E6=A3=80=E7=B4=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DESIGN.md | 230 +++ assets/css/site.css | 1448 +++++++++++++++++ assets/favicon.svg | 15 + assets/fonts/archivo-latin-wdth-normal.woff2 | Bin 0 -> 90104 bytes .../fonts/geist-mono-latin-wght-normal.woff2 | Bin 0 -> 23128 bytes assets/js/data.js | 334 ++++ assets/js/examples.js | 226 +++ assets/js/ledger.js | 11 + assets/js/nm21.js | 50 + assets/js/restart.js | 115 ++ assets/js/search.js | 2 + assets/js/site.js | 1188 ++++++++++++++ assets/js/space.js | 256 +++ build.py | 324 ++++ capacity.html | 184 +++ cost.html | 173 ++ division.html | 284 ++++ examples.html | 161 ++ index.html | 585 +++++++ ledger.html | 183 +++ limits.html | 164 ++ mechanism.html | 335 ++++ nm21.html | 704 ++++++++ reproduce.html | 195 +++ results.html | 170 ++ roadmap.html | 166 ++ server.py | 229 +++ src/pages/capacity.body.html | 26 + src/pages/cost.body.html | 15 + src/pages/division.body.html | 126 ++ src/pages/examples.body.html | 3 + src/pages/index.body.html | 401 +++++ src/pages/ledger.body.html | 25 + src/pages/limits.body.html | 6 + src/pages/mechanism.body.html | 114 ++ src/pages/nm21.body.html | 546 +++++++ src/pages/reproduce.body.html | 37 + src/pages/results.body.html | 12 + src/pages/roadmap.body.html | 8 + src/partials/readpath.svg | 64 + start.bat | 19 + templates/base.html | 119 ++ tools/_gate.html | 271 +++ tools/make_ledger.py | 100 ++ 44 files changed, 9624 insertions(+) create mode 100644 DESIGN.md create mode 100644 assets/css/site.css create mode 100644 assets/favicon.svg create mode 100644 assets/fonts/archivo-latin-wdth-normal.woff2 create mode 100644 assets/fonts/geist-mono-latin-wght-normal.woff2 create mode 100644 assets/js/data.js create mode 100644 assets/js/examples.js create mode 100644 assets/js/ledger.js create mode 100644 assets/js/nm21.js create mode 100644 assets/js/restart.js create mode 100644 assets/js/search.js create mode 100644 assets/js/site.js create mode 100644 assets/js/space.js create mode 100644 build.py create mode 100644 capacity.html create mode 100644 cost.html create mode 100644 division.html create mode 100644 examples.html create mode 100644 index.html create mode 100644 ledger.html create mode 100644 limits.html create mode 100644 mechanism.html create mode 100644 nm21.html create mode 100644 reproduce.html create mode 100644 results.html create mode 100644 roadmap.html create mode 100644 server.py create mode 100644 src/pages/capacity.body.html create mode 100644 src/pages/cost.body.html create mode 100644 src/pages/division.body.html create mode 100644 src/pages/examples.body.html create mode 100644 src/pages/index.body.html create mode 100644 src/pages/ledger.body.html create mode 100644 src/pages/limits.body.html create mode 100644 src/pages/mechanism.body.html create mode 100644 src/pages/nm21.body.html create mode 100644 src/pages/reproduce.body.html create mode 100644 src/pages/results.body.html create mode 100644 src/pages/roadmap.body.html create mode 100644 src/partials/readpath.svg create mode 100644 start.bat create mode 100644 templates/base.html create mode 100644 tools/_gate.html create mode 100644 tools/make_ledger.py diff --git a/DESIGN.md b/DESIGN.md new file mode 100644 index 0000000..608b237 --- /dev/null +++ b/DESIGN.md @@ -0,0 +1,230 @@ +# DESIGN.md — Natural Memory 站点重设计 + +> 这份文件是**设计动作的产物**,写在动效之前。依据是 `motion-web` skill: +> `page-design.md`(静态帧怎么设计)、`design-slop.md`(AI 味闸门)、`data/visual-bank.json`(可选原型)、 +> `motion-tokens.md`(时长/缓动/弹簧)、`choreography-arc.md`(叙事弧)。 + +--- + +## 0. 先测量,再设计:旧版站点的问题(实测,不是印象) + +在 `assets/_gate.html` 里按 `design-slop.md` + `page-design.md §2` 的可量化条款跑了一遍旧站(1576px,12 页): + +| 闸门 | 获奖站中位数(n=12) | 旧站实测 | 判定 | +|---|---|---|---| +| 最大渲染字号 | **108 px**(52–218) | **48 px** | ❌ | +| 正文字号 | 16 px(12–16) | 12–14 px | ✅ | +| **display ÷ body** | **≈ 8×**(3.3–14×) | **3.4–4.0×** | ❌ A6 | +| 主色数量 | **4**(1–6) | 6–7 | ❌ A4 | +| 渐变 | **0 / 15** | home 2、results 10 | ❌ A4 | +| body 全局 max-width | 15/15 无 | 无 | ✅ | +| `
` 一直没有显式 `font-family`,掉回 UA 样式表的 `monospace` ——
+**全站代码块此前都不是 Geist Mono**。这也是「字体家族 = 3」的来源。已修。
+
+**唯一保留的渐变**:`.bar--base .bar__fill` 用的是 `repeating-linear-gradient` 斜纹,
+它编码的是「无记忆基线」这一条数据,是数据墨水不是装饰(A4 针对的是渐变**背景处理**)。
+
+---
+
+## 7. 明确的偏差与代价(不藏)
+
+1. **移动端的字阶落差改用「数字」承担 —— 这一条已经解决,不是遗留问题。**
+ 中文标题在 320px 上推不到 7×:`page-design.md §4` 自己写了
+ 「weight contrast carries hierarchy better than size contrast alone, because a huge 黑体 becomes a solid block」——
+ 320px 宽放 98px 的中文标题,一行只有 3 个字,13 个字的标题要断成 5 行,那是排版事故。
+ 所以**每个证据页的页眉由一个真实数字领起**(`.doc__figure` + `.mega`),
+ 中文标题负责可读性,数字负责落差。实测结果:
+
+ | 视口 | 12 页 ratio 最小值 | ≥ 7× 的页数 | 布局问题 |
+ |---|---:|---:|---:|
+ | 1600 px | **11.1×** | 12 / 12 | 0 |
+ | 768 px | **7.8×** | 12 / 12 | 0 |
+ | 390 px | **7.1×** | 12 / 12 | 0 |
+ | 320 px | **7.1×** | 12 / 12 | 0 |
+ | 1600 px + reduced-motion | **11.1×** | 12 / 12 | 0 |
+
+ 这不是把数字调到达标,而是**让每一页自己先把最强的那条数字说出来** ——
+ 这些页面本来就是证据页,页眉只有一个标题反而浪费了它们最好的东西。
+2. **地址空间装置在 `≤900px` 与 `prefers-reduced-motion` 下不下降**,冻结成一帧静态地址空间
+ (窄屏冻结在 t=0.30「Qwen hidden state」,reduced-motion 冻结在 t=0.52「候选页」)。
+ 页面高度同时从 340vh 收到 1 屏,不留下 3 屏的空滚动。
+3. **`--body` 用 `#9a9a92` 而不是 p-07 原型写的 `#909090`** —— 为了 12 页技术文档的连续阅读,
+ 在原型值上抬了一档(对比度 7.6:1,AAA 正文标准以上)。这是对原型的**唯一**颜色偏离,特此标明。
+
+---
+
+## 8. 动效闸门自检结果(B1–B8)
+
+| 闸门 | 实测 | 处置 |
+|---|---|---|
+| B1 统一上浮 hover | `translateY(-*)` 命中 **0** | ✅ |
+| B2 全页统一 fade-up | 原本 ~20 个元素同款入场 → 现在 **3 处,三种不同手势**(擦除 / 数字冲入 / 侧向错峰)+ 路径图自己的画线 | ✅ |
+| B3 一个缓动一个时长 | 原本 5 个时长令牌有 3 个没用、**15 处硬编码 `120ms ease-out`** → 现在 **23 条 transition 全部走令牌**,实际用到 fast/std/med/slow **4 档** | ✅ |
+| B4 预算全烧在首屏 | 首屏是装置,但 ~60% 处另有头号数字、重启装置两处收网 | ✅ |
+| B5 动效与内容无关 | 机制来自「寻址」本身的物理,换到别的题材讲不通 | ✅ |
+| B6 只有视差做纵深 | 无视差图层 | ✅ |
+| B7 跟随光标的圆圈 | 无 | ✅ |
+| B8 reduced-motion 下什么都不剩 | 实测 `wipeTarget=none`、装置冻结成完整静态帧、页高收到 1 屏、12 页 0 布局问题 | ✅ |
+
+**顺带修掉的三个健壮性问题**(都不是猜的,是量出来的):
+
+1. **`` 没有 `font-family`** → 掉回 UA 的 `monospace`,**全站代码块此前都不是 Geist Mono**。
+2. **入场只靠 `IntersectionObserver`** → IO 在被节流的 iframe / 无头虚拟时间 / 某些低端 WebView 里不保证投递;
+ 而 `clip-path` 擦除一旦不触发就是**一个永远看不见的标题**。已加「按滚动位置判定」的兜底,实测未入场元素从 **5 → 0**。
+3. **首屏循环 latch**:`raf` 句柄非空但帧被冻结时,`kick()` 永远提前返回,循环永久卡死。
+ 已改为超时同步走一帧 —— 实测 `spaceT` 从 **0.00 → 0.39**。
+
+
+---
+
+## 1. 叙事结构(macrostructure)
+
+**Editorial + set-pieces** —— 页面主体是**可读的正文**,动效出现 3 次、每次都有明确含义,
+是段落之间的标点,不是背景装饰。
+
+选它的理由来自内容本身:这是一个**研究发布站**,主体是 12 页文档、数据表和一份 108 条台账。
+把它硬塞进「单场景」或「Acts」会牺牲可读性;而纯粹的 Editorial 又浪费了这套内容里
+**唯一真正有空间感的东西 —— 记忆的地址空间**。
+
+- **线性内容** → 走 editorial,而不是 index / instrument(`page-design.md §1` 的两条判据之一)。
+- **相机移动还是世界移动**:世界移动(地址空间被镜头穿过),所以镜头更像「下降」而不是「横摇」。
+
+**叙事弧:`cold-open`**(安静入场 → 复杂度上升 → 峰值 → 收束)
+`0–20%` 极简、只有字;`20–70%` 地址空间下降(峰值在此);`70–100%` 结果与边界,留白放开。
+
+---
+
+## 2. 视觉系统(提交一个原型,不混搭)
+
+来自 `data/visual-bank.json`,**选一个、执行到底**:
+
+- **调色:`p-07 Bold Black + Signal Accent`**("creative agencies, award sites, experimental portfolios, bold studios")
+ - ground `#000000`(纯黑,不是近黑)
+ - ink `#fffef4`(骨白,不是纯白)
+ - ink-2 `#909090` / ink-3 `#555555`
+ - surface `rgba(255,255,255,.05)` · border `rgba(255,255,255,.12)`
+ - **信号色 `#00ff6a`,每页只出现一次**(原型原文:one per page max)
+ - 主色数量从 6–7 压到 **≤4**;**渐变全部删除**
+- **字体:两个家族**(获奖站中位数就是 2,range 1–4)
+ - `Archivo Variable`(wght 100–900 · wdth 62–125%)—— 显示与正文的拉丁部分、**全部数字**
+ - `Geist Mono` —— 标签、代码、字段名
+ - 中文回落到系统 CJK(PingFang SC / 微软雅黑 / Noto Sans CJK),**不额外加载 CJK 字体**
+
+### 2.1 字阶:落差就是设计(`page-design.md §4`)
+
+| 令牌 | 值 | 用途 |
+|---|---|---|
+| `--fs-mega` | `clamp(4.5rem, 12vw, 12.5rem)` = 72 → **200 px** | 拉丁/数字巨字 |
+| `--fs-display` | `clamp(2.75rem, 7vw, 6.5rem)` = 44 → **104 px** | 页面主标题 |
+| `--fs-h2` | `clamp(1.75rem, 3.4vw, 3rem)` | 章节标题 |
+| `--fs-lede` | `1.125rem` | 导语 |
+| `--fs-body` | `0.875rem` | **正文(14 px)** |
+
+`mega ÷ body = 200/14 ≈ 14×`(获奖站上沿),`display ÷ body ≈ 7.4×`(≈ 中位数 8×)。
+旧站是 3.4× —— **这是本次重设计的核心动作**。
+
+### 2.2 中日韩显示字的特殊处理(`page-design.md §4` 明确点名)
+
+中文大字和拉丁大字**不是一套参数**:
+
+| | 行高 | 字距 | 字重 |
+|---|---|---|---|
+| 拉丁/数字 `.dsp--lat` | 0.90 | `-0.045em` | 700,`font-stretch: 92%` |
+| 中文 `.dsp` | **1.28** | **-0.005em** | 500 |
+
+中文行高更大、负字距要收(不然字腔会闭合),层级**靠字重对比**而不是只靠字号。
+所以拉丁与中文的 display 是两个 class,在标记里显式指定,不靠回落碰运气。
+
+---
+
+## 3. 版面(layout)
+
+- **全幅页面,逐元素设 measure**(获奖站 15/15 都没有 body 全局 max-width):
+ `--measure: 62ch` 用于连续正文,`--measure-wide: 88ch` 用于说明,媒体全幅。
+- **间距不是常数**(`page-design.md §6`):`--band-tight 48–80px` / `--band 80–160px` /
+ `--band-wide 120–260px`,按「两块该不该被读成一组」来给。
+- **至少三种不同的 section 形状**:全幅巨字带 / 非对称 2:1 分栏 / 数据表带 / 卡片网格 /
+ 装置带(整屏交互)/ 引用带 —— 不允许「每段都是居中标题 + 段落」。
+
+---
+
+## 4. 动效概念(来自题材自身的物理)
+
+**概念名:地址空间下降(Address Descent)**
+
+题材的物理就是**寻址**:1,048,576 个槽位、738 条活跃记录、730 个 LSH 桶、
+每页 32 条、每次只把少量记录提升到 GPU。整条读取路径本来就是**一次下降**:
+问题 → 128 维地址 → 粗索引桶 → 候选页 → 页内重排 → Top-K → 证据前缀 → 生成。
+
+**招牌场景**:一个整屏的地址空间栅格(1,048,576 个槽位画成点阵,738 个亮着)。
+滚动时镜头**一路下降五个数量级**:整个空间 → 730 个桶 → 一页 32 条 → 一条记录 →
+这条记录变成注入模型的前缀 token。终点是**一条记录**,不是一句 slogan。
+
+这个机制满足 `design-slop.md` B5(机制必须来自题材自身的物理):换到任何别的题材上都讲不通。
+
+**动效令牌**(`motion-tokens.md`,至少三档时长 + 弹簧):
+
+| 令牌 | 值 | 用途 |
+|---|---|---|
+| `--dur-fast` | 160ms | 悬停、按下、开关 |
+| `--dur-std` | 300ms | 面板、抽屉、状态切换 |
+| `--dur-med` | 460ms | 区块入场(少数几处) |
+| `--dur-slow` | 700ms | 巨字入场 |
+| `--dur-cine` | 1200ms | 冷开场 |
+| `--ease-exp` | `cubic-bezier(.16,1,.3,1)` | 默认出场 |
+| `--ease-sharp` | `cubic-bezier(.65,0,.45,1)` | 硬切、品牌感 |
+| `--ease-in-expo` | `cubic-bezier(.7,0,.84,0)` | **只用于离场** |
+
+**明确不做什么**(对应 `design-slop.md` B1–B8):
+- B1 不做「所有卡片统一上浮 4px + 阴影」
+- B2 不做「每个区块都 fade-up 20px」—— 大多数内容**本来就在那儿**,入场只留给 3 处
+- B3 不允许全站一个 `0.3s ease`
+- B4 不把预算全烧在首屏
+- B7 不做跟随光标的圆圈
+- B8 reduced-motion 下必须仍然是一张完整的页面
+
+---
+
+## 5. 移动端降级(`page-design.md §7`,显式写明,不含糊)
+
+- **地址空间装置**:`< 900px` 关闭点阵与镜头下降,改为一帧静态的地址空间图 + 数字条。
+ 降级**不是**隐藏内容,是把动效换成静态帧。
+- 巨字:`12vw` 下限 72px,320px 宽时仍是 72px(不缩到看不清)。
+- 悬停不存在 —— 所有悬停信息必须有第二个落点(见设备页/台账页的显式状态)。
+- 滚动在移动端更长,节奏按移动端重读一遍,不假设等比缩放。
+
+---
+
+## 6. 设计闸门自检(交付前必须全过)
+
+`design-slop.md` A1–A8 / B1–B8 + `page-design.md §8`,用 `assets/_gate.html` 逐条量:
+
+- [ ] A1 首屏不是「徽标 + 标题 + 副标题 + 两个按钮」
+- [ ] A2 没有三张等宽居中卡片
+- [ ] A3 每页 ≥3 种不同 section 形状
+- [ ] A4 无紫/靛渐变;主色 ≤4;信号色每页只出现一次
+- [ ] A5 没有噪点/光晕/网格纸这类「填空装饰」
+- [ ] A6 display ÷ body ≥ 7×
+- [ ] A7 没有手绘的假浏览器/假手机外壳
+- [ ] A8 没有编造的证明(本站所有数字都来自工程内真实报告)
+- [ ] B1–B8 动效闸门
+- [ ] D 移动端 320/375/414/768 无横向滚动;reduced-motion 下页面完整
diff --git a/assets/css/site.css b/assets/css/site.css
new file mode 100644
index 0000000..7168612
--- /dev/null
+++ b/assets/css/site.css
@@ -0,0 +1,1448 @@
+/* ==================================================================
+ Natural Memory — site.css
+
+ 设计系统见项目根目录 DESIGN.md(设计动作的产物,写在动效之前)。
+ 本文件按 motion-web skill 重建:
+
+ 调色 data/visual-bank.json → p-07「Bold Black + Signal Accent」
+ 纯黑地面 #000000 · 骨白 #fffef4 · 次级 #9a9a92 · 三级 #5c5c56
+ 信号色 #00ff6a —— 每页只出现一次(原型原文:one per page max)
+ 渐变全部删除(获奖站 15/15 都不用渐变做背景)
+
+ 字体 两个家族(获奖站中位数 2):
+ Archivo Variable(wght 100–900 · wdth 62–125%)—— 显示、正文拉丁、全部数字
+ Geist Mono —— 标签、代码、字段名
+ 中文回落系统 CJK,不额外加载 CJK 字体
+
+ 字阶 落差就是设计(page-design.md §4):
+ mega 200px / display 104px 对 body 14px = 14× / 7.4×
+ 中文大字与拉丁大字参数不同(§4 明确点名):
+ 拉丁 .dsp--lat lh .90 ls -.045em 700 stretch 92%
+ 中文 .dsp lh 1.28 ls -.005em 500
+
+ 版面 全幅页面、逐元素 measure(获奖站 15/15 都没有 body 全局 max-width)
+ 间距不是常数:tight / normal / wide 三档按语义给
+ ================================================================== */
+
+/* ---------- 1. 字体 ---------- */
+@font-face {
+ font-family: "Archivo Variable"; font-style: normal; font-weight: 100 900;
+ font-stretch: 62% 125%; font-display: swap;
+ src: url("../fonts/archivo-latin-wdth-normal.woff2") format("woff2-variations");
+}
+@font-face {
+ font-family: "Geist Mono"; font-style: normal; font-weight: 100 900; font-display: swap;
+ src: url("../fonts/geist-mono-latin-wght-normal.woff2") format("woff2-variations");
+}
+
+/* ---------- 2. 令牌 ---------- */
+:root {
+ /* 颜色 · p-07 —— 三个灰 + 一个信号色,不再有别的色相 */
+ --canvas: #000000;
+ --canvas-soft: #0e0e0e; /* 悬停/激活面 */
+ --canvas-card: #000000; /* 卡片与地面同色:层次只靠发丝线 */
+ --canvas-mid: #262623; /* 轨道底 */
+ --hairline: #1f1f1c;
+ --btn-border: rgba(255, 255, 255, .28);
+ --ink: #fffef4; /* 骨白,不是纯白 */
+ --ink-hover: #ffffff;
+ --on-primary: #000000;
+ --body: #9a9a92;
+ --mute: #5c5c56;
+ --signal: #00ff6a; /* 每页只用一次:首屏画布里那颗目标记录 */
+
+ /* 圆角:p-07 是硬边原型,圆角压到最小 */
+ --r-sm: 2px;
+ --r-pill: 9999px;
+
+ /* 间距 —— 4px 基数 */
+ --sp-xxs: 2px;
+ --sp-xs: 4px;
+ --sp-sm: 8px;
+ --sp-md: 12px;
+ --sp-lg: 16px;
+ --sp-xl: 24px;
+ --sp-2xl: 32px;
+ --sp-3xl: 48px;
+ --sp-4xl: 64px;
+
+ /* 版式 */
+ --font-sans: "Archivo Variable", "PingFang SC", "Microsoft YaHei", "Noto Sans CJK SC", system-ui, sans-serif;
+ --font-mono: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, monospace;
+
+ /* 字阶 —— mega ÷ body = 14×,display ÷ body = 7.4× */
+ --fs-mega: clamp(72px, 12vw, 200px);
+ --fs-display: clamp(44px, 7vw, 104px);
+ --fs-display-xl: var(--fs-display);
+ --fs-display-lg: clamp(32px, 4.6vw, 64px);
+ --fs-display-md: clamp(26px, 3.2vw, 44px);
+ --fs-display-sm: 24px;
+ --fs-display-xs: 18px;
+ --fs-lede: 1.125rem;
+ --fs-body: 0.875rem; /* 14px */
+ --fs-small: 0.875rem; /* 连续正文:不为了「看起来精致」压到 13px */
+ --fs-label: 0.75rem; /* 12px,标签/注释/字段名 */
+
+ --lh-lat: .90; /* 拉丁巨字 */
+ --lh-cjk: 1.28; /* 中文巨字:行高更大、负字距要收 */
+ --ls-lat: -.045em;
+ --ls-cjk: -.005em;
+ --ls-display: var(--ls-cjk);
+ --font-stretch-display: 92%;
+
+ /* 版面 */
+ --container: 1440px; /* 内层栅格上限,不是 body 的 max-width */
+ --measure: 62ch;
+ --measure-wide: 88ch;
+ --nav-h: 66px;
+
+ /* 段落留白 —— 三档,按「两块该不该被读成一组」给 */
+ --band-tight: clamp(48px, 6vw, 80px);
+ --band: clamp(80px, 10vw, 152px);
+ --band-wide: clamp(120px, 16vw, 248px);
+
+ /* 动效令牌(motion-tokens.md) */
+ --dur-fast: 160ms;
+ --dur-std: 300ms;
+ --dur-med: 460ms;
+ --dur-slow: 700ms;
+ --dur-cine: 1200ms;
+ --ease-exp: cubic-bezier(.16, 1, .3, 1);
+ --ease-sharp: cubic-bezier(.65, 0, .45, 1);
+ --ease-circ: cubic-bezier(0, .55, .45, 1);
+ --ease-in-expo: cubic-bezier(.7, 0, .84, 0);
+ --ease: var(--ease-exp); /* 兼容旧引用 */
+}
+
+/* ---------- 3. 基础 ---------- */
+*, *::before, *::after { box-sizing: border-box; }
+html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
+
+body {
+ margin: 0;
+ background: var(--canvas);
+ color: var(--body);
+ font-family: var(--font-sans);
+ font-size: var(--fs-body);
+ line-height: 1.7;
+ font-weight: 400;
+ letter-spacing: 0;
+ font-synthesis-weight: none;
+ text-wrap: pretty;
+ -webkit-font-smoothing: antialiased;
+ overflow-x: hidden;
+}
+
+a { color: inherit; text-decoration: none; }
+button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }
+::selection { background: var(--ink); color: var(--on-primary); }
+:focus-visible { outline: 1px solid var(--ink); outline-offset: 3px; }
+
+/* 行内代码 */
+code {
+ font-family: var(--font-mono);
+ font-size: 0.9em;
+ color: var(--ink);
+ background: var(--canvas-soft);
+ padding: 1px 5px;
+ border-radius: var(--r-sm);
+}
+/* pre 必须显式指定:UA 样式表给的是 font-family: monospace,
+ 不覆盖的话代码块会掉回浏览器默认等宽字体(此前全站就是这样)。 */
+pre {
+ margin: 0;
+ font-family: var(--font-mono);
+ font-size: var(--fs-label);
+ line-height: 1.75;
+ tab-size: 2;
+}
+pre code { background: none; padding: 0; font-size: inherit; border-radius: 0; }
+
+.wrap { width: 100%; max-width: var(--container); margin-inline: auto; padding-inline: clamp(20px, 4vw, 56px); }
+.wrap--narrow { max-width: none; }
+.skip { position: absolute; left: -9999px; }
+.skip:focus {
+ left: var(--sp-lg); top: var(--sp-lg); z-index: 99;
+ background: var(--ink); color: var(--on-primary);
+ padding: var(--sp-sm) var(--sp-lg);
+}
+
+/* ---------- 4. 排版:落差就是设计 ---------- */
+h1, h2, h3, h4 { margin: 0; font-family: var(--font-sans); font-weight: 500; color: var(--ink); }
+
+/* 中文大字:行高放大、负字距收回,层级靠字重(page-design.md §4) */
+.dsp {
+ font-size: var(--fs-display); line-height: var(--lh-cjk);
+ letter-spacing: var(--ls-cjk); font-weight: 500;
+}
+/* 拉丁/数字巨字:同一量级但可以收紧 */
+.dsp--lat {
+ font-size: var(--fs-display); line-height: var(--lh-lat);
+ letter-spacing: var(--ls-lat); font-weight: 700;
+ font-stretch: var(--font-stretch-display);
+ font-variant-numeric: tabular-nums;
+}
+/* 超巨:只给真正的头号数字。数字是拉丁字形,可以推到 200px 而不变成一块黑体方块 ——
+ 这正好绕开 page-design §4 说的「中文大字过大就成实心块」的问题,
+ 所以移动端撑住 display ÷ body 落差的是它,不是中文标题。 */
+.mega {
+ font-size: clamp(84px, 26vw, 200px); line-height: .86; letter-spacing: -.05em;
+ font-weight: 700; font-stretch: 88%; color: var(--ink);
+ font-variant-numeric: tabular-nums; display: block;
+}
+.mega--cjk { font-size: var(--fs-display); line-height: var(--lh-cjk); letter-spacing: var(--ls-cjk); font-weight: 500; font-stretch: 100%; }
+
+.h1 { font-size: var(--fs-display); line-height: var(--lh-cjk); letter-spacing: var(--ls-cjk); }
+.h2 { font-size: var(--fs-display-md); line-height: 1.16; letter-spacing: -.012em; }
+.h3 { font-size: var(--fs-display-sm); line-height: 1.3; letter-spacing: -.008em; }
+.doc__h { font-size: clamp(56px, 10.5vw, 100px); line-height: 1.14; letter-spacing: var(--ls-cjk); }
+
+strong, b { font-weight: 600; color: var(--ink); }
+em { font-style: italic; }
+
+.lede, .lede2 { font-size: var(--fs-lede); line-height: 1.65; color: var(--body); max-width: var(--measure); }
+.small { font-size: var(--fs-small); line-height: 1.65; color: var(--body); max-width: var(--measure-wide); }
+.tiny { font-size: var(--fs-label); line-height: 1.6; color: var(--mute); max-width: 96ch; }
+.mono { font-family: var(--font-mono); font-size: var(--fs-label); letter-spacing: 1.4px; }
+.src { font-family: var(--font-mono); font-size: var(--fs-label); letter-spacing: 1.2px; color: var(--mute); }
+
+/* 签名式眉标:等宽大写 + 正字距 */
+.eyebrow, .kicker, .shead__idx {
+ font-family: var(--font-mono);
+ font-size: var(--fs-label);
+ line-height: 1.6;
+ font-weight: 400;
+ letter-spacing: 1.8px;
+ text-transform: uppercase;
+ color: var(--mute);
+ margin: 0;
+ display: block;
+}
+.arrow { color: var(--mute); padding-inline: 6px; }
+.rule { height: 1px; background: var(--hairline); border: 0; margin: 0; }
+.serif-it { color: var(--ink); }
+
+/* 正文区的小节节奏:统一用 48px 上留白,避免各页内联边距不一致 */
+#doc h2, #doc h3, #doc h4 { margin-top: var(--sp-3xl); }
+#doc > *:first-child, .card h2, .card h3, .card h4,
+.panel h2, .panel h3, .panel h4, .ex h3 { margin-top: 0; }
+#doc > p + h2, #doc > p + h3 { margin-top: var(--sp-3xl); }
+#doc > p { margin: 0 0 var(--sp-lg); }
+#doc > p.small, #doc > p.tiny { margin-bottom: var(--sp-md); }
+
+/* ---------- 5. 顶栏(nav-bar: padding 12 24) ---------- */
+.site {
+ position: sticky; top: 0; z-index: 50;
+ background: var(--canvas);
+ border-bottom: 1px solid transparent;
+}
+.site.is-stuck { border-bottom-color: var(--hairline); }
+
+.topbar {
+ display: flex; align-items: center; gap: var(--sp-lg);
+ height: var(--nav-h); max-width: var(--container); margin-inline: auto;
+ padding-inline: var(--sp-xl);
+}
+.topbar__spacer { flex: 1 1 auto; }
+
+.brand { display: flex; align-items: center; gap: var(--sp-sm); flex: none; }
+.brand__mark { width: 22px; height: 22px; flex: none; }
+.brand__mark .dim { fill: var(--canvas-mid); }
+.brand__mark .on { fill: var(--ink); }
+.brand__name { font-size: 14px; line-height: 20px; color: var(--ink); }
+
+/* 药丸:整个交互形状系统 */
+.pill, .chip, .kbd {
+ display: inline-flex; align-items: center; gap: var(--sp-sm);
+ border: 1px solid var(--btn-border);
+ border-radius: var(--r-pill);
+ color: var(--ink);
+ white-space: nowrap;
+}
+.pill { height: 28px; padding: 0 var(--sp-md); font-size: 12px; letter-spacing: 1.2px; font-family: var(--font-mono); }
+.pill--acc { border-color: var(--ink); }
+.dot { width: 5px; height: 5px; border-radius: 50%; background: var(--ink); flex: none; }
+
+.crumb { display: flex; align-items: baseline; gap: var(--sp-sm); min-width: 0; }
+.crumb__n { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.crumb__t { font-size: 14px; line-height: 20px; color: var(--ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
+
+.progress { position: absolute; left: 0; bottom: -1px; height: 1px; width: 0; background: var(--ink); }
+
+/* ---------- 6. 骨架:侧栏 + 内容(容器 1200px) ---------- */
+.shell {
+ display: grid; grid-template-columns: 232px minmax(0, 1fr);
+ gap: var(--sp-4xl);
+ max-width: var(--container); margin-inline: auto; padding-inline: var(--sp-xl);
+ overflow-x: clip;
+}
+.side {
+ position: sticky; top: var(--nav-h); align-self: start;
+ max-height: calc(100vh - var(--nav-h)); overflow-y: auto;
+ padding: var(--sp-2xl) 0 var(--sp-3xl);
+ border-right: 1px solid var(--hairline);
+}
+.side__in { padding-right: var(--sp-lg); }
+.side, .side__in, .side__list, .side__a { min-width: 0; }
+
+.side__grp {
+ margin: var(--sp-xl) 0 var(--sp-sm); padding-left: var(--sp-md);
+ font-family: var(--font-mono); font-size: 12px; line-height: 16px;
+ letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute);
+}
+.side__grp:first-child { margin-top: 0; }
+.side__list { list-style: none; margin: 0; padding: 0; display: grid; gap: var(--sp-xxs); }
+/* ex-app-shell-row:active 用 primary 作为指示条 */
+.side__a {
+ display: grid; grid-template-columns: 20px minmax(0, 1fr); gap: var(--sp-sm);
+ align-items: baseline; padding: var(--sp-sm) var(--sp-md);
+ border-radius: var(--r-sm); border-left: 1px solid transparent;
+ transition: background var(--dur-fast) var(--ease-exp), border-color var(--dur-fast) var(--ease-exp);
+}
+.side__a:hover { background: var(--canvas-soft); }
+.side__a.is-on { background: var(--canvas-soft); border-left-color: var(--ink); }
+.side__n { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.side__t { font-size: 14px; line-height: 20px; color: var(--body); }
+.side__a:hover .side__t { color: var(--ink); }
+.side__a.is-on .side__t { color: var(--ink); }
+.side__a.is-on .side__n { color: var(--ink); }
+
+/* hero / content band */
+.doc { position: relative; min-width: 0; max-width: 100%; padding: var(--band) 0 var(--band-tight); }
+/* 页眉:标题左、头号数字右 —— 非对称分栏,不是居中标题块 */
+.doc__hd {
+ display: grid; grid-template-columns: minmax(0, 1fr) auto;
+ gap: var(--sp-xl) clamp(24px, 5vw, 72px);
+ align-items: end;
+ margin-bottom: var(--band-tight); padding-bottom: var(--sp-xl);
+ border-bottom: 1px solid var(--hairline);
+}
+.doc__hd > .kicker { grid-column: 1 / -1; }
+.doc__h { margin-top: var(--sp-lg); }
+.doc__lede {
+ margin: var(--sp-xl) 0 0; max-width: var(--measure);
+ font-size: var(--fs-lede); line-height: 1.6; color: var(--body);
+}
+/* 头号数字:文档页自己先把最强的那条数字说出来 */
+.doc__figure { margin: 0; text-align: right; display: grid; gap: var(--sp-md); justify-items: end; }
+.doc__figure .mega { color: var(--ink); }
+.doc__figure .mega small { font-size: .30em; letter-spacing: -.01em; margin-left: .04em; font-weight: 500; }
+.doc__figure-n {
+ font-family: var(--font-mono); font-size: var(--fs-label); letter-spacing: 1.2px;
+ color: var(--mute); max-width: 30ch; line-height: 1.8;
+}
+
+/* 文档页的章节标题不能停在 24px:页面标题 100px、正文 14px,
+ 章节标题落在中间会让层级整个塌掉。片段里写的是 class="h3",这里按上下文提上来。 */
+#doc h2 { font-size: var(--fs-display-md); line-height: 1.14; letter-spacing: -.012em; }
+
+@media (max-width: 900px) {
+ .doc__hd { grid-template-columns: minmax(0, 1fr); align-items: start; }
+ .doc__figure { text-align: left; justify-items: start; margin-top: var(--sp-xl); }
+ .doc__figure .mega { font-size: clamp(98px, 26vw, 140px); }
+}
+
+/* ---------- 7. 按钮:轮廓胶囊为常态,白色实底仅作极少数例外 ---------- */
+.btn {
+ display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-sm);
+ padding: var(--sp-sm) var(--sp-lg);
+ background: transparent;
+ border: 1px solid var(--btn-border);
+ border-radius: var(--r-pill);
+ color: var(--ink);
+ font-size: 14px; line-height: 20px; font-weight: 400;
+ transition: background var(--dur-fast) var(--ease-exp), border-color var(--dur-fast) var(--ease-exp);
+}
+.btn:hover { background: var(--canvas-soft); border-color: var(--ink); }
+.btn--pri { background: var(--ink); border-color: var(--ink); color: var(--on-primary); }
+.btn--pri:hover { background: var(--ink-hover); border-color: var(--ink-hover); color: var(--on-primary); }
+.hero__cta { display: flex; flex-wrap: wrap; gap: var(--sp-md); align-items: center; }
+
+.chip { height: 28px; padding: 0 var(--sp-md); font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--body); }
+.chip__dot { width: 5px; height: 5px; border-radius: 50%; background: var(--ink); }
+.kbd { min-width: 26px; height: 26px; padding: 0 var(--sp-sm); font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--body); }
+
+/* ---------- 8. 卡片:8px 圆角 · #191919 · 发丝线 · 零阴影 ---------- */
+.grid { display: grid; gap: var(--sp-lg); }
+.g2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+.g3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+.g4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+.g-2-1 { grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); }
+
+.card {
+ background: var(--canvas-card);
+ border: 1px solid var(--hairline);
+ border-radius: var(--r-sm);
+ padding: var(--sp-xl);
+}
+.card--flat { background: var(--canvas-card); }
+/* 极性翻转:白底近黑字,规范里的 featured/active 处理 */
+.card--acc { background: var(--ink); border-color: var(--ink); color: var(--on-primary); }
+.card--acc .eyebrow, .card--acc .h3, .card--acc strong, .card--acc .small, .card--acc .tiny { color: var(--on-primary); }
+.card--warn { background: var(--canvas-card); }
+
+/* ---------- 9. KPI / 数值(mono 计数器,规范里的 metric counter) ---------- */
+.kpis { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.kpi { background: var(--canvas-card); padding: var(--sp-xl); display: grid; gap: var(--sp-md); align-content: start; }
+.kpi__k { font-family: var(--font-mono); font-size: 12px; line-height: 16px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.kpi__v { font-family: var(--font-mono); font-size: 24px; line-height: 32px; color: var(--ink); letter-spacing: -.02em; }
+.kpi__v--long { font-size: 20px; line-height: 28px; }
+.kpi__v .to { color: var(--ink); }
+.kpi__v .mid { color: var(--mute); }
+.kpi__d { font-size: 14px; line-height: 20px; color: var(--mute); }
+
+.statrow { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.stat { background: var(--canvas-card); padding: var(--sp-xl); display: grid; gap: var(--sp-sm); align-content: start; }
+.stat__k { font-family: var(--font-mono); font-size: 12px; line-height: 16px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.stat__v { font-family: var(--font-mono); font-size: 28px; line-height: 32px; color: var(--ink); letter-spacing: -.02em; }
+.stat__v small { font-size: 12px; letter-spacing: 1.2px; color: var(--mute); margin-left: var(--sp-xs); }
+.stat--acc .stat__v { color: var(--ink); }
+.stat__d { font-size: 14px; line-height: 20px; color: var(--mute); }
+
+.mini { display: grid; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.mini > div { background: var(--canvas-card); display: flex; justify-content: space-between; gap: var(--sp-lg); padding: var(--sp-md) var(--sp-lg); }
+.mini span { font-size: 14px; line-height: 20px; color: var(--body); }
+.mini b { font-family: var(--font-mono); font-size: 14px; color: var(--ink); }
+.mini--lg > div { display: block; padding: var(--sp-lg); }
+.mini--lg span { font-size: 16px; line-height: 24px; }
+
+/* ---------- 10. 导航卡片 / 作者 ---------- */
+.navcard {
+ display: grid; gap: var(--sp-sm); align-content: start;
+ background: var(--canvas-card); border: 1px solid var(--hairline);
+ border-radius: var(--r-sm); padding: var(--sp-xl);
+ transition: background var(--dur-fast) var(--ease-exp), border-color var(--dur-fast) var(--ease-exp);
+}
+.navcard:hover { background: var(--canvas-soft); border-color: var(--btn-border); }
+.navcard__n { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.navcard__t { font-size: 20px; line-height: 28px; color: var(--ink); letter-spacing: -.01em; }
+.navcard__d { font-size: 14px; line-height: 20px; color: var(--mute); }
+.navcard--acc { border-color: var(--btn-border); }
+
+.authorcard { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sp-xl); }
+.authorcard__k { margin: 0 0 var(--sp-sm); font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.authorcard__a { font-size: 16px; line-height: 24px; color: var(--ink); border-bottom: 1px solid var(--btn-border); }
+.authorcard__a:hover { border-bottom-color: var(--ink); }
+.authorcard__v { margin: 0; font-family: var(--font-mono); font-size: 14px; color: var(--body); }
+
+.author { display: grid; gap: var(--sp-sm); }
+.author__a { display: inline-flex; align-items: baseline; gap: var(--sp-sm); }
+.author__k { font-size: 14px; line-height: 20px; color: var(--mute); white-space: nowrap; }
+.author__v { font-family: var(--font-mono); font-size: 14px; color: var(--ink); border-bottom: 1px solid var(--btn-border); }
+.author__a:hover .author__v { border-bottom-color: var(--ink); }
+
+/* ---------- 11. 表格(ex-data-table-cell:表头 mono 大写、内容 body-sm) ---------- */
+.tbl-wrap { overflow-x: auto; border: 1px solid var(--hairline); border-radius: var(--r-sm); background: var(--canvas-card); }
+.dtable { width: 100%; border-collapse: collapse; }
+.dtable th {
+ text-align: left; background: var(--canvas-soft);
+ font-family: var(--font-mono); font-size: 12px; line-height: 16px; font-weight: 400;
+ letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute);
+ padding: var(--sp-md) var(--sp-lg); border-bottom: 1px solid var(--hairline); white-space: nowrap;
+}
+.dtable td { padding: var(--sp-md) var(--sp-lg); border-bottom: 1px solid var(--hairline); color: var(--body); font-size: 14px; line-height: 20px; vertical-align: baseline; }
+.dtable tr:last-child td { border-bottom: 0; }
+.dtable tr:hover td { background: var(--canvas-soft); }
+.dtable td.n { font-family: var(--font-mono); color: var(--ink); white-space: nowrap; }
+.dtable td.acc { color: var(--ink); }
+.dtable td.bad { color: var(--mute); }
+
+.gt { display: grid; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.gt__h, .gt__r { display: grid; gap: var(--sp-lg); padding: var(--sp-md) var(--sp-lg); background: var(--canvas-card); align-items: baseline; }
+.gt__h { background: var(--canvas-soft); }
+.gt__h span { font-family: var(--font-mono); font-size: 12px; line-height: 16px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.gt--4 .gt__h, .gt--4 .gt__r { grid-template-columns: minmax(0, .8fr) minmax(0, 1.1fr) minmax(0, .75fr) minmax(0, 1.5fr); }
+.gt--3 .gt__h, .gt--3 .gt__r { grid-template-columns: minmax(0, .75fr) minmax(0, 1fr) minmax(0, 1.95fr); }
+.gt__r:hover { background: var(--canvas-soft); }
+.gt__k { font-size: 16px; line-height: 24px; color: var(--ink); }
+.gt__v { font-size: 14px; line-height: 20px; color: var(--body); }
+.gt__who { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.gt__who--acc { color: var(--ink); }
+.gt__why { font-size: 14px; line-height: 22px; color: var(--mute); }
+.scrollx { overflow-x: auto; border-radius: var(--r-sm); }
+.scrollx > .gt { min-width: 720px; }
+
+/* ---------- 12. 键值 / 容量 ---------- */
+.kv { display: grid; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.kv__r { background: var(--canvas-card); display: grid; grid-template-columns: 116px minmax(0, 1fr); gap: var(--sp-lg); padding: var(--sp-md) var(--sp-lg); }
+.kv__k { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.kv__v { font-family: var(--font-mono); font-size: 14px; color: var(--body); word-break: break-all; }
+
+.cap { display: grid; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.cap__r { background: var(--canvas-card); display: grid; grid-template-columns: minmax(0, 1fr) 168px; gap: var(--sp-lg); padding: var(--sp-md) var(--sp-lg); align-items: baseline; }
+.cap__k { font-size: 16px; line-height: 24px; color: var(--body); }
+.cap__k small { display: block; color: var(--mute); font-size: 14px; line-height: 20px; }
+.cap__v { font-family: var(--font-mono); font-size: 16px; text-align: right; color: var(--ink); }
+.cap__r--hi .cap__v { color: var(--ink); }
+
+.pagemap { display: grid; grid-template-columns: repeat(64, 1fr); gap: 2px; }
+.pagemap i { aspect-ratio: 1; background: var(--canvas-mid); border-radius: 1px; }
+.pagemap i.on { background: var(--ink); }
+
+/* ---------- 13. 账本 / 显存 ---------- */
+.ledger { display: grid; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.ledger__h, .ledger__r { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(0, .85fr) minmax(0, .85fr) minmax(0, .9fr); gap: var(--sp-lg); padding: var(--sp-md) var(--sp-lg); align-items: baseline; }
+.ledger__h { background: var(--canvas-soft); }
+.ledger__h span { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.ledger__r { background: var(--canvas-card); }
+.ledger__r:hover { background: var(--canvas-soft); }
+.ledger__k { font-size: 16px; line-height: 24px; color: var(--body); }
+.ledger__b, .ledger__n { font-family: var(--font-mono); font-size: 14px; color: var(--mute); }
+.ledger__n { color: var(--ink); }
+.ledger__d { font-family: var(--font-mono); font-size: 14px; text-align: right; color: var(--ink); }
+.ledger__d.t-ok, .ledger__d.t-warn, .ledger__d.t-bad, .ledger__d.t-mute { color: var(--body); }
+.ledger__d.t-bad, .ledger__d.t-mute { color: var(--mute); }
+
+.vram { display: grid; gap: var(--sp-lg); }
+.vram__row { display: grid; gap: var(--sp-sm); }
+.vram__top { display: flex; justify-content: space-between; gap: var(--sp-md); font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.vram__top b { color: var(--ink); }
+.vram__track { position: relative; height: 20px; background: var(--canvas-mid); border-radius: var(--r-pill); overflow: hidden; }
+.vram__fill { position: absolute; inset: 0 auto 0 0; width: 0; border-radius: var(--r-pill); transition: width 700ms cubic-bezier(.16,1,.3,1); }
+.vram__fill--base { background: repeating-linear-gradient(115deg, var(--mute) 0 3px, transparent 3px 7px); }
+.vram__fill--nm2 { background: var(--ink); }
+.vram__mark { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--btn-border); }
+.vram__card { display: flex; justify-content: space-between; font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+
+/* ---------- 14. 条形对比(单色明度阶梯,不用彩色编码) ---------- */
+.bars { display: grid; gap: var(--sp-xl); }
+.barset { display: grid; gap: var(--sp-sm); }
+.barset__top { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: var(--sp-sm); }
+.barset__t { font-size: 16px; line-height: 24px; color: var(--ink); }
+.barset__n { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+
+.bar { display: grid; grid-template-columns: 108px minmax(0, 1fr) 108px; gap: var(--sp-md); align-items: center; }
+.bar__l { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.bar__track { position: relative; height: 6px; background: var(--canvas-mid); border-radius: var(--r-pill); overflow: hidden; }
+.bar__fill { position: absolute; inset: 0 auto 0 0; width: 0; border-radius: var(--r-pill); transition: width 700ms cubic-bezier(.16,1,.3,1); }
+.bar--base .bar__fill { background: repeating-linear-gradient(115deg, var(--mute) 0 3px, transparent 3px 7px); }
+.bar--a .bar__fill { background: var(--mute); }
+.bar--rag .bar__fill { background: var(--mute); }
+.bar--nm2 .bar__fill { background: var(--ink); }
+.bar__v { font-family: var(--font-mono); font-size: 14px; color: var(--ink); text-align: right; }
+.bar__v small { color: var(--mute); display: block; font-size: 12px; letter-spacing: 1.2px; }
+
+.legend { display: flex; flex-wrap: wrap; gap: var(--sp-lg); }
+.legend span { display: inline-flex; align-items: center; gap: var(--sp-sm); font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.legend i { width: 14px; height: 6px; border-radius: var(--r-pill); display: block; }
+.legend i.l-base { background: repeating-linear-gradient(115deg, var(--mute) 0 3px, transparent 3px 7px); }
+.legend i.l-a { background: var(--mute); }
+.legend i.l-rag { background: var(--mute); }
+.legend i.l-nm2 { background: var(--ink); }
+
+.gap { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.gap__c { background: var(--canvas-card); padding: var(--sp-xl); display: grid; gap: var(--sp-sm); }
+.gap__k { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.gap__v { font-family: var(--font-mono); font-size: clamp(28px, 4vw, 40px); line-height: 1; letter-spacing: -.02em; }
+.gap__c--recall .gap__v { color: var(--body); }
+.gap__c--answer .gap__v { color: var(--ink); }
+.gap__n { font-size: 14px; line-height: 20px; color: var(--mute); }
+
+/* ---------- 15. 标签页(药丸) ---------- */
+.tabs { display: flex; flex-wrap: wrap; gap: var(--sp-sm); max-width: 100%; }
+.tab {
+ padding: var(--sp-sm) var(--sp-lg);
+ border: 1px solid var(--btn-border); border-radius: var(--r-pill);
+ color: var(--body); font-size: 14px; line-height: 20px; white-space: nowrap;
+ transition: background var(--dur-fast) var(--ease-exp), color var(--dur-fast) var(--ease-exp), border-color var(--dur-fast) var(--ease-exp);
+}
+.tab:hover { background: var(--canvas-soft); color: var(--ink); }
+.tab.is-on { background: var(--ink); border-color: var(--ink); color: var(--on-primary); }
+.panel { display: none; }
+.panel.is-on { display: block; }
+
+/* ---------- 16. 机制:步进器 / 流程图 / 记录 ---------- */
+.flow { display: grid; grid-template-columns: minmax(0, .82fr) minmax(0, 1.18fr); gap: var(--sp-2xl); align-items: start; }
+.steps { display: grid; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.step {
+ background: var(--canvas-card); text-align: left; width: 100%;
+ display: grid; grid-template-columns: 26px minmax(0, 1fr); gap: var(--sp-md);
+ padding: var(--sp-md) var(--sp-lg); align-items: center;
+ transition: background var(--dur-fast) var(--ease-exp);
+}
+.step:hover { background: var(--canvas-soft); }
+.step__i { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.step__l { font-size: 14px; line-height: 20px; color: var(--body); }
+.step.is-on { background: var(--canvas-soft); }
+.step.is-on .step__l { color: var(--ink); }
+.step.is-on .step__i { color: var(--ink); }
+.step.is-past .step__l { color: var(--mute); }
+
+.flow__detail { position: sticky; top: calc(var(--nav-h) + var(--sp-lg)); }
+.flow__stage { margin: 0 0 var(--sp-md); font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.flow__title { margin: 0 0 var(--sp-md); font-size: 24px; line-height: 32px; letter-spacing: -.02em; }
+.flow__body { margin: 0; color: var(--body); font-size: 14px; line-height: 22px; min-height: 88px; }
+.flow__io { margin: var(--sp-lg) 0 0; padding-top: var(--sp-md); border-top: 1px solid var(--hairline); font-family: var(--font-mono); font-size: 12px; line-height: 20px; color: var(--mute); }
+.flow__meta { margin-top: var(--sp-lg); padding-top: var(--sp-md); border-top: 1px solid var(--hairline); display: grid; gap: var(--sp-sm); }
+.flow__meta div { display: flex; justify-content: space-between; gap: var(--sp-lg); font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.flow__meta b { color: var(--ink); font-weight: 400; }
+
+.dgm { width: 100%; height: auto; display: block; overflow: visible; }
+.dgm__box { fill: var(--canvas-card); stroke: var(--hairline); }
+.dgm__box--acc { stroke: var(--btn-border); }
+.dgm__n { font-family: var(--font-mono); font-size: 9px; fill: var(--mute); letter-spacing: 1px; }
+.dgm__l { font-size: 12px; fill: var(--ink); }
+.dgm__s { font-family: var(--font-mono); font-size: 9px; fill: var(--mute); }
+.dgm__a { stroke: var(--btn-border); stroke-width: 1; fill: none; }
+.dgm__rule { stroke: var(--hairline); stroke-width: 1; }
+.dgm__note { font-family: var(--font-mono); font-size: 9.5px; fill: var(--mute); letter-spacing: .6px; }
+.dgm__note:first-of-type { fill: var(--ink); }
+
+.rec { display: grid; grid-template-columns: repeat(auto-fill, minmax(168px, 1fr)); gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.rec__f { background: var(--canvas-card); padding: var(--sp-md) var(--sp-lg); display: grid; gap: var(--sp-xxs); }
+.rec__f:hover { background: var(--canvas-soft); }
+.rec__k { font-family: var(--font-mono); font-size: 14px; color: var(--ink); }
+.rec__d { font-size: 12px; line-height: 16px; color: var(--mute); }
+
+.recjson { display: grid; gap: 1px; }
+.recjson__r { display: grid; grid-template-columns: 116px minmax(0, 1fr); gap: var(--sp-md); padding: var(--sp-sm) 0; border-bottom: 1px solid var(--hairline); align-items: baseline; }
+.recjson__r:last-child { border-bottom: 0; }
+.recjson__k { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.recjson__v { font-size: 14px; line-height: 20px; color: var(--ink); word-break: break-word; overflow-wrap: anywhere; }
+
+.states { display: grid; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.state { background: var(--canvas-card); display: grid; grid-template-columns: 132px minmax(0, 1fr); gap: var(--sp-lg); padding: var(--sp-md) var(--sp-lg); align-items: baseline; }
+.state__s { font-family: var(--font-mono); font-size: 14px; color: var(--ink); }
+.state--mute .state__s, .state--bad .state__s { color: var(--mute); }
+.state--warn .state__s { color: var(--body); }
+.state__d { font-size: 14px; line-height: 20px; color: var(--body); }
+
+/* ---------- 17. 提示块 / 声明 / 局限 ---------- */
+.callout {
+ background: var(--canvas-card);
+ border: 1px solid var(--btn-border);
+ border-radius: var(--r-sm);
+ padding: var(--sp-xl);
+}
+.callout--warn { border-color: var(--hairline); }
+.callout__t { margin: 0 0 var(--sp-sm); font-family: var(--font-mono); font-size: 14px; line-height: 20px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--ink); }
+.callout__b { margin: 0; font-size: 16px; line-height: 26px; color: var(--body); max-width: 78ch; }
+
+.claims { display: grid; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.claim { background: var(--canvas-card); display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; gap: var(--sp-md); padding: var(--sp-md) var(--sp-lg); align-items: center; }
+.claim:hover { background: var(--canvas-soft); }
+.claim__x { font-family: var(--font-mono); font-size: 14px; color: var(--mute); }
+.claim__t { font-size: 16px; line-height: 24px; color: var(--mute); text-decoration: line-through; text-decoration-color: var(--canvas-mid); }
+.claim__s { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.claims--loose .claim__s { display: none; }
+
+.lims { display: grid; gap: var(--sp-xl); }
+.lim { display: grid; grid-template-columns: 26px minmax(0, 1fr); gap: var(--sp-md); }
+.lim__i { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); padding-top: 3px; }
+.lim__t { font-size: 20px; line-height: 28px; margin-bottom: var(--sp-sm); }
+.lim__d { margin: 0; font-size: 14px; line-height: 22px; color: var(--mute); max-width: 76ch; }
+
+.quote { border-left: 1px solid var(--btn-border); padding: var(--sp-xs) 0 var(--sp-xs) var(--sp-xl); margin: 0; }
+.quote q { font-size: 24px; line-height: 34px; letter-spacing: -.02em; color: var(--ink); display: block; }
+.quote cite { display: block; margin-top: var(--sp-md); font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); font-style: normal; }
+
+.checks { display: grid; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.check { background: var(--canvas-card); display: grid; grid-template-columns: 40px minmax(0, 1fr); gap: var(--sp-md); padding: var(--sp-md) var(--sp-lg); align-items: baseline; }
+.check__i { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.check__t { font-size: 14px; line-height: 20px; color: var(--body); }
+
+.road { display: grid; gap: 1px; background: var(--hairline); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.road__r { background: var(--canvas-card); display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: var(--sp-md); padding: var(--sp-md) var(--sp-lg); align-items: baseline; }
+.road__r:hover { background: var(--canvas-soft); }
+.road__i { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.road__t { font-size: 14px; line-height: 20px; color: var(--body); }
+
+/* ---------- 18. 复现:代码块(规范:Canvas Mid 用作代码底) ---------- */
+.code { background: var(--canvas-mid); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.code__bar { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-md); padding: var(--sp-md) var(--sp-lg); border-bottom: 1px solid var(--hairline); background: var(--canvas-soft); }
+.code__t { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.copy {
+ font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px;
+ padding: var(--sp-xs) var(--sp-md);
+ background: transparent; border: 1px solid var(--btn-border); border-radius: var(--r-pill);
+ color: var(--ink);
+ transition: background var(--dur-fast) var(--ease-exp);
+}
+.copy:hover { background: var(--canvas-card); }
+.copy.is-done { border-color: var(--ink); }
+.code pre { margin: 0; padding: var(--sp-xl); overflow-x: auto; }
+.code code { font-family: var(--font-mono); font-size: 14px; line-height: 24px; color: var(--ink); white-space: pre; background: none; padding: 0; }
+.code code .k { color: var(--ink); }
+.code code .c { color: var(--mute); }
+
+/* ---------- 19. 实测样例 ---------- */
+.examples { display: grid; gap: var(--sp-xl); }
+.ex { background: var(--canvas-card); border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.ex__hd { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-sm); padding: var(--sp-md) var(--sp-xl); border-bottom: 1px solid var(--hairline); background: var(--canvas-soft); }
+.ex__no { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--ink); }
+.ex__q { margin: 0; padding: var(--sp-xl) var(--sp-xl) var(--sp-md); font-size: 24px; line-height: 32px; letter-spacing: -.02em; color: var(--ink); }
+.ex__exp { margin: 0; padding: 0 var(--sp-xl) var(--sp-xl); font-family: var(--font-mono); font-size: 12px; line-height: 20px; color: var(--mute); word-break: break-word; }
+.ex__exp span { color: var(--mute); margin-right: var(--sp-sm); }
+.ex__grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); border-top: 1px solid var(--hairline); }
+.ex__col { padding: var(--sp-xl); min-width: 0; }
+.ex__col + .ex__col { border-left: 1px solid var(--hairline); }
+.ex__col--nm { background: rgba(255, 255, 255, .015); }
+.ex__lab { margin: 0 0 var(--sp-md); font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.ex__col--nm .ex__lab { color: var(--ink); }
+.ex__ans { margin: 0 0 var(--sp-md); font-size: 14px; line-height: 22px; color: var(--body); white-space: pre-wrap; word-break: break-word; overflow-wrap: anywhere; }
+.ex__meta { margin: 0; padding-top: var(--sp-md); border-top: 1px solid var(--hairline); font-family: var(--font-mono); font-size: 12px; line-height: 20px; letter-spacing: 1.2px; color: var(--mute); }
+.v--ok { color: var(--ink); }
+.v--no { color: var(--mute); }
+.ex__ev { margin-top: var(--sp-lg); padding-top: var(--sp-md); border-top: 1px solid var(--hairline); }
+.ex__evt { margin: 0 0 var(--sp-sm); font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.ex__evr { display: grid; gap: var(--sp-xs); padding: var(--sp-sm) 0; border-bottom: 1px solid var(--hairline); }
+.ex__evr:last-child { border-bottom: 0; padding-bottom: 0; }
+.ex__evk { font-family: var(--font-mono); font-size: 14px; color: var(--ink); word-break: break-word; }
+.ex__evv { font-size: 14px; line-height: 20px; color: var(--body); word-break: break-word; }
+.ex__evs { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); word-break: break-all; }
+
+/* ---------- 20. 上一节 / 下一节 ---------- */
+.pn { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-lg); margin-top: var(--sp-4xl); padding-top: var(--sp-xl); border-top: 1px solid var(--hairline); }
+.pn__a {
+ display: grid; gap: var(--sp-sm); padding: var(--sp-lg) var(--sp-xl); position: relative;
+ background: var(--canvas-card); border: 1px solid var(--hairline); border-radius: var(--r-sm);
+ transition: background var(--dur-fast) var(--ease-exp), border-color var(--dur-fast) var(--ease-exp);
+}
+.pn__a:hover { background: var(--canvas-soft); border-color: var(--btn-border); }
+.pn__a--next { text-align: right; }
+.pn__k { font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.pn__t { font-size: 20px; line-height: 28px; color: var(--ink); }
+.pn__a .kbd { position: absolute; top: var(--sp-lg); right: var(--sp-lg); }
+.pn__a--prev .kbd { right: auto; left: var(--sp-lg); }
+.pn__x { display: block; }
+
+/* ---------- 21. 页脚(footer band: padding 48 24) ---------- */
+.footer { border-top: 1px solid var(--hairline); padding: var(--sp-3xl) 0; }
+.footer__in { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.05fr) minmax(0, 1.15fr); gap: var(--sp-3xl); align-items: start; }
+.footer__col--wide { min-width: 0; }
+.footer__h { margin: 0 0 var(--sp-md); font-family: var(--font-mono); font-size: 12px; line-height: 16px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.footer__note { margin: 0; font-size: 14px; line-height: 22px; color: var(--body); max-width: 64ch; }
+.footer__meta { margin: var(--sp-lg) 0 0; font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute); }
+.readout { display: flex; flex-wrap: wrap; gap: var(--sp-sm); }
+.readout > span {
+ display: inline-flex; align-items: center; padding: var(--sp-xs) var(--sp-md);
+ border: 1px solid var(--hairline); border-radius: var(--r-pill);
+ font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px; color: var(--mute);
+}
+
+/* ---------- 22. JS 渲染内容的淡入(只淡入,不位移 —— B2 的底线) ---------- */
+.reveal { opacity: 0; transition: opacity var(--dur-std) var(--ease-exp); }
+.reveal.is-in { opacity: 1; }
+
+/* 分带标题:眉标 + 标题的间距走令牌,不再用行内 style */
+.band__k { margin: 0 0 var(--sp-lg); }
+.band__k + .h2, .band__k + .h3 { margin-bottom: var(--sp-2xl); }
+
+@media (prefers-reduced-motion: reduce) {
+ html { scroll-behavior: auto; }
+ .reveal { opacity: 1; transform: none; transition: none; }
+ *, *::before, *::after { animation-duration: .001ms !important; transition-duration: .001ms !important; }
+ .bar__fill, .vram__fill { transition: none; }
+ /* B8:关掉动效时直接呈现终态,不允许有任何内容因为「还没入场」而消失 */
+ .js .arr-wipe { clip-path: none !important; }
+ .js .arr-num, .js .arr-cards > *, .js .teaser .dgm > g:not(.dgm__a) {
+ opacity: 1 !important; transform: none !important;
+ }
+ .js .teaser .dgm__a path { stroke-dashoffset: 0 !important; }
+ .rst__b { opacity: 1 !important; }
+ .pal__box { animation: none; }
+ .hero__cue { animation: none; opacity: .6; }
+ #doc h2.is-flash, #doc h3.is-flash { animation: none; box-shadow: inset 3px 0 0 var(--ink); }
+ /* 交叉淡入淡出全部关掉后,页面仍然是完整的一帧 */
+}
+
+/* ---------- 23. 响应式(<768:hero 96→48,网格 1 列) ---------- */
+@media (min-width: 1120px) {
+ .g3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
+ .g4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
+}
+@media (max-width: 1080px) {
+ /* 顶栏在窄屏必须能收:给导航一个可横向滚动的弹性列,
+ 否则 7 个胶囊 + 检索按钮 + 状态胶囊会把整行撑出视口。 */
+ .topbar { gap: var(--sp-sm); }
+ .topbar__spacer { display: none; }
+ .topnav {
+ flex: 1 1 auto; min-width: 0;
+ flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none;
+ }
+ .topnav::-webkit-scrollbar { display: none; }
+ .brand__name { display: none; }
+ .shell { grid-template-columns: minmax(0, 1fr); gap: 0; }
+ .side {
+ position: static; max-height: none; overflow: visible;
+ border-right: 0; border-bottom: 1px solid var(--hairline);
+ padding: var(--sp-lg) 0;
+ }
+ .side__in { display: flex; gap: var(--sp-sm); overflow-x: auto; padding-right: 0; scrollbar-width: none; }
+ .side__in::-webkit-scrollbar { display: none; }
+ .side__grp { display: none; }
+ .side__list { display: flex; gap: var(--sp-sm); }
+ .side__a { grid-template-columns: auto auto; white-space: nowrap; padding: var(--sp-sm) var(--sp-md); border-left: 0; border: 1px solid var(--hairline); border-radius: var(--r-pill); }
+ .side__a.is-on { border-color: var(--ink); }
+ .g-2-1 { grid-template-columns: minmax(0, 1fr); }
+ .statrow { grid-template-columns: repeat(2, minmax(0, 1fr)); }
+ .authorcard { grid-template-columns: 1fr; }
+ .footer__in { grid-template-columns: 1fr; }
+ .crumb { display: none; }
+ .flow { grid-template-columns: minmax(0, 1fr); }
+ .flow__detail { position: static; }
+}
+@media (max-width: 768px) {
+ .g2, .g3, .g4 { grid-template-columns: minmax(0, 1fr); }
+ .kpis { grid-template-columns: 1fr; }
+ .statrow { grid-template-columns: 1fr; }
+ .bar { grid-template-columns: 84px minmax(0, 1fr) 84px; gap: var(--sp-sm); }
+ .ledger__h { display: none; }
+ .ledger__r { grid-template-columns: minmax(0, 1fr) auto; gap: var(--sp-xs) var(--sp-md); }
+ .ledger__b { grid-column: 1 / -1; }
+ .ledger__d { text-align: left; }
+ .cap__r { grid-template-columns: minmax(0, 1fr); gap: var(--sp-xs); }
+ .cap__v { text-align: left; }
+ .state { grid-template-columns: minmax(0, 1fr); gap: var(--sp-xs); }
+ .gap { grid-template-columns: 1fr; }
+ .ex__grid { grid-template-columns: 1fr; }
+ .ex__col + .ex__col { border-left: 0; border-top: 1px solid var(--hairline); }
+ .pn { grid-template-columns: 1fr; }
+ .pn__a--next { text-align: left; }
+ .recjson__r { grid-template-columns: minmax(0, 1fr); gap: var(--sp-xxs); }
+ .tabs { width: 100%; }
+ .tab { flex: 1 1 auto; text-align: center; }
+ .doc { padding-top: var(--sp-3xl); }
+ .scrollx > .gt { min-width: 0; }
+ .gt--4 .gt__h, .gt--3 .gt__h { display: none; }
+ .gt--4 .gt__r, .gt--3 .gt__r { grid-template-columns: minmax(0, 1fr); gap: var(--sp-sm); padding: var(--sp-lg) var(--sp-md); }
+ .tbl-wrap, .scrollx {
+ background-image: linear-gradient(to left, rgba(255, 255, 255, .06), rgba(255, 255, 255, 0) 40px);
+ background-repeat: no-repeat; background-position: right center; background-size: 40px 100%;
+ }
+ :root { --band-tight: 40px; --band: 64px; --band-wide: 88px; }
+}
+
+/* ==================================================================
+ 24. 发布页版式(layout: release)
+ 按研究/模型发布页的通行骨架:发布头 → teaser → 关键数字 → 摘要 →
+ 发布清单 → 结果预览 → 深入阅读 → 边界 → 引用。
+ 规范约束:页面表面只用 canvas,band 之间用 divider-hairline 分隔,
+ 不引入第二种页面底色。
+ ================================================================== */
+.release { min-width: 0; }
+
+/* 段落留白不是常数(page-design.md §6):三档按语义给,
+ 紧的地方两块属于一组,宽的地方是留给观众的呼吸。 */
+.band { padding: var(--band) 0; }
+.band + .band { border-top: 1px solid var(--hairline); }
+.band--hero { padding-top: var(--band-tight); padding-bottom: var(--band-wide); }
+.band--tight { padding: var(--band-tight) 0; }
+.band--wide { padding: var(--band-wide) 0; }
+.band--teaser { padding: var(--band-tight) 0 var(--band); }
+.band--stats { padding: var(--band) 0; }
+.band--alt { /* 命名钩子:p-07 只有一种地面,不分带换底 */ }
+
+.wrap--narrow { max-width: 820px; }
+
+/* 顶栏快速导航(胶囊行) */
+.topnav { display: flex; flex-wrap: wrap; gap: var(--sp-sm); }
+.topnav__a {
+ padding: var(--sp-xs) var(--sp-md);
+ border: 1px solid transparent; border-radius: var(--r-pill);
+ color: var(--mute); font-size: 13px; line-height: 20px;
+ transition: color var(--dur-fast) var(--ease-exp), border-color var(--dur-fast) var(--ease-exp);
+}
+.topnav__a:hover { color: var(--ink); border-color: var(--hairline); }
+.topnav__a.is-on { border-color: var(--btn-border); color: var(--ink); }
+
+/* 侧栏返回发布页 */
+.side__back {
+ display: inline-flex; align-items: center;
+ margin: 0 0 var(--sp-xl) var(--sp-md);
+ padding: var(--sp-xs) var(--sp-md);
+ border: 1px solid var(--btn-border); border-radius: var(--r-pill);
+ font-size: 12px; line-height: 20px; letter-spacing: 1.2px; font-family: var(--font-mono);
+ color: var(--body);
+ transition: background var(--dur-fast) var(--ease-exp), color var(--dur-fast) var(--ease-exp);
+}
+.side__back:hover { background: var(--canvas-soft); color: var(--ink); }
+
+/* 发布头 */
+.release__badge { margin-bottom: var(--sp-xl); color: var(--mute); }
+.release__h1 { margin: 0 0 var(--sp-xl); max-width: 20ch; }
+.release__byline {
+ margin: 0 0 var(--sp-xl);
+ font-size: 14px; line-height: 20px; color: var(--body);
+ display: flex; flex-wrap: wrap; align-items: baseline; gap: var(--sp-sm);
+}
+.release__byline a { color: var(--ink); border-bottom: 1px solid var(--btn-border); }
+.release__byline a:hover { border-bottom-color: var(--ink); }
+.release__by { color: var(--mute); }
+.release__sep { color: var(--canvas-mid); }
+.release__lede { max-width: 68ch; margin: 0 0 var(--sp-2xl); }
+
+.linkrow { display: flex; flex-wrap: wrap; gap: var(--sp-md); align-items: center; }
+
+/* Teaser 全宽图 */
+.teaser {
+ margin: 0;
+ background: var(--canvas-card);
+ border: 1px solid var(--hairline); border-radius: var(--r-sm);
+ padding: var(--sp-xl);
+}
+.teaser .dgm { width: 100%; height: auto; }
+.teaser__cap {
+ margin-top: var(--sp-lg); padding-top: var(--sp-md);
+ border-top: 1px solid var(--hairline);
+ font-size: 14px; line-height: 22px; color: var(--mute); max-width: 92ch;
+}
+.teaser__k {
+ display: inline-block; margin-right: var(--sp-sm);
+ font-family: var(--font-mono); font-size: 12px; line-height: 16px;
+ letter-spacing: 1.2px; text-transform: uppercase; color: var(--ink);
+}
+
+/* 发布清单 */
+.rel__k { margin: 0 0 var(--sp-sm); font-family: var(--font-mono); font-size: 12px; line-height: 16px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--mute); }
+.rel__v { margin: 0 0 var(--sp-sm); font-family: var(--font-mono); font-size: 28px; line-height: 32px; letter-spacing: -.02em; color: var(--ink); }
+.rel__v small { font-size: 12px; letter-spacing: 1.2px; color: var(--mute); margin-left: var(--sp-xs); }
+.rel__d { margin: 0; font-size: 14px; line-height: 22px; color: var(--mute); }
+
+/* 正文内链接 */
+.linku { color: var(--ink); border-bottom: 1px solid var(--btn-border); }
+.linku:hover { border-bottom-color: var(--ink); }
+
+/* ==================================================================
+ 24. 抵达编排 —— 三种不同的抵达方式,不是全页统一 fade-up
+
+ design-slop B2:所有区块都 `opacity 0→1, translateY 20px` 会让页面变成
+ 一串相同的到达,读者到第三节就学会了无视它。所以这里只保留三处入场,
+ 而且**三处的手势互不相同**(擦除 / 数字冲入 / 侧向错峰),
+ 其余内容一律「本来就在那儿」。
+
+ 初始隐藏态全部写在 .js 下:脚本挂了内容不会被藏起来。
+ ================================================================== */
+
+/* 1 · 编辑式擦除:给「一句结论」用(choreography-arc 的 editorial 弧) */
+.js .arr-wipe {
+ clip-path: inset(0 0 106% 0);
+ transition: clip-path var(--dur-slow) cubic-bezier(.77, 0, .18, 1);
+}
+.arr-wipe.is-in { clip-path: inset(0 0 -2% 0); }
+
+/* 2 · 数字冲入:只给头号数字,带一点点压缩再回弹 */
+.js .arr-num {
+ opacity: 0; transform: translateY(16px) scale(.982);
+ transform-origin: 0 70%;
+ transition: opacity var(--dur-slow) var(--ease-exp), transform var(--dur-slow) var(--ease-sharp);
+}
+.arr-num.is-in { opacity: 1; transform: none; }
+
+/* 3 · 侧向错峰:只给一处列表,手势是从装订线推出来,不是往上浮 */
+.js .arr-cards > * {
+ opacity: 0; transform: translateX(-12px);
+ transition: opacity var(--dur-med) var(--ease-circ), transform var(--dur-med) var(--ease-circ);
+}
+.js .arr-cards.is-in > * { opacity: 1; transform: none; }
+.js .arr-cards.is-in > *:nth-child(1) { transition-delay: 0ms; }
+.js .arr-cards.is-in > *:nth-child(2) { transition-delay: 60ms; }
+.js .arr-cards.is-in > *:nth-child(3) { transition-delay: 120ms; }
+.js .arr-cards.is-in > *:nth-child(4) { transition-delay: 180ms; }
+.js .arr-cards.is-in > *:nth-child(5) { transition-delay: 240ms; }
+.js .arr-cards.is-in > *:nth-child(6) { transition-delay: 300ms; }
+
+/* 读取路径图:连接线自左向右绘出,环节随后依次点亮 —— 这一处是内容自己的
+ 语法(一条路径本来就是按顺序被走完的),所以保留,且它的手势与上面三种都不同 */
+.js .teaser .dgm__a path {
+ stroke-dasharray: 1; stroke-dashoffset: 1;
+ transition: stroke-dashoffset var(--dur-slow) var(--ease-exp);
+}
+.js .teaser.is-in .dgm__a path { stroke-dashoffset: 0; }
+.js .teaser.is-in .dgm__a path:nth-child(1) { transition-delay: 60ms; }
+.js .teaser.is-in .dgm__a path:nth-child(2) { transition-delay: 130ms; }
+.js .teaser.is-in .dgm__a path:nth-child(3) { transition-delay: 200ms; }
+.js .teaser.is-in .dgm__a path:nth-child(4) { transition-delay: 270ms; }
+.js .teaser.is-in .dgm__a path:nth-child(5) { transition-delay: 340ms; }
+.js .teaser.is-in .dgm__a path:nth-child(6) { transition-delay: 410ms; }
+.js .teaser.is-in .dgm__a path:nth-child(7) { transition-delay: 480ms; }
+.js .teaser .dgm > g:not(.dgm__a) { opacity: 0; transition: opacity var(--dur-med) var(--ease-exp); }
+.js .teaser.is-in .dgm > g:not(.dgm__a) { opacity: 1; }
+.js .teaser.is-in .dgm > g:nth-child(2) { transition-delay: 120ms; }
+.js .teaser.is-in .dgm > g:nth-child(3) { transition-delay: 200ms; }
+.js .teaser.is-in .dgm > g:nth-child(4) { transition-delay: 280ms; }
+.js .teaser.is-in .dgm > g:nth-child(5) { transition-delay: 360ms; }
+.js .teaser.is-in .dgm > g:nth-child(6) { transition-delay: 440ms; }
+.js .teaser.is-in .dgm > g:nth-child(7) { transition-delay: 520ms; }
+.js .teaser.is-in .dgm > g:nth-child(8) { transition-delay: 600ms; }
+.js .teaser.is-in .dgm > g:nth-child(9) { transition-delay: 680ms; }
+
+/* ==================================================================
+ 25. 重启实验装置
+ ================================================================== */
+.band--rst { padding-top: var(--sp-4xl); }
+.rst__lede { margin-bottom: var(--sp-2xl); }
+
+.rst {
+ border: 1px solid var(--hairline);
+ border-radius: var(--r-sm);
+ background: var(--canvas-card);
+ overflow: hidden;
+}
+
+/* --- 顶部控制条 --- */
+.rst__head {
+ display: flex; align-items: center; gap: var(--sp-lg);
+ padding: var(--sp-md) var(--sp-lg);
+ border-bottom: 1px solid var(--hairline);
+ flex-wrap: wrap;
+}
+.rst__file {
+ margin-left: auto; color: var(--mute); text-transform: none;
+ letter-spacing: 0; font-size: 11px;
+ overflow: hidden; text-overflow: ellipsis; white-space: nowrap; min-width: 0;
+}
+.seg {
+ display: inline-flex; padding: var(--sp-xxs);
+ border: 1px solid var(--hairline); border-radius: var(--r-pill);
+ background: var(--canvas);
+}
+.seg__b {
+ appearance: none; border: 0; cursor: pointer;
+ background: transparent; color: var(--mute);
+ font: inherit; font-size: 13px; letter-spacing: .01em;
+ padding: var(--sp-xs) var(--sp-lg); border-radius: var(--r-pill);
+ transition: color var(--dur-fast) var(--ease-exp), background-color var(--dur-fast) var(--ease-exp);
+}
+.seg__b:hover { color: var(--body); }
+.seg__b.is-on { background: var(--ink); color: var(--on-primary); }
+.seg__b.is-on[data-v="before"] { background: var(--canvas-mid); color: var(--ink); }
+.seg__b:focus-visible { outline: 2px solid var(--btn-border); outline-offset: 2px; }
+
+.rst__play { padding: var(--sp-xs) var(--sp-lg); font-size: 13px; }
+.rst__play::before {
+ content: ""; width: 0; height: 0; margin-right: var(--sp-sm);
+ border-left: 7px solid currentColor;
+ border-top: 5px solid transparent; border-bottom: 5px solid transparent;
+ display: inline-block; vertical-align: 1px;
+}
+.rst__play.is-playing::before { border-left-width: 6px; border-right: 6px solid currentColor; border-top-width: 6px; border-bottom-width: 6px; }
+
+/* --- 主体两栏 --- */
+.rst__grid {
+ display: grid; grid-template-columns: minmax(0, 340px) minmax(0, 1fr);
+ gap: 0;
+}
+
+/* --- 左栏:情境 + 状态 --- */
+.rst__aside {
+ padding: var(--sp-xl);
+ border-right: 1px solid var(--hairline);
+ background: var(--canvas);
+ min-width: 0;
+}
+.rst__k {
+ margin: 0 0 var(--sp-sm);
+ font-family: var(--font-mono); font-size: 11px; letter-spacing: 1.4px;
+ text-transform: uppercase; color: var(--mute);
+}
+.rst__k + .rst__quote { margin-bottom: var(--sp-xl); }
+.rst__quote {
+ margin: 0; padding: 0 0 0 var(--sp-md);
+ border-left: 1px solid var(--btn-border);
+ font-size: 14px; line-height: 22px; color: var(--body);
+ text-wrap: pretty;
+}
+.rst__quote--q { color: var(--ink); }
+
+.rst__gauges { display: grid; gap: var(--sp-xl); }
+.rst__g { display: grid; gap: var(--sp-sm); }
+.rst__gt { display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-md); }
+.rst__gt > span { font-size: 13px; color: var(--mute); }
+.rst__gt > b { font-size: 15px; letter-spacing: 1px; color: var(--ink); font-weight: 400; }
+.rst__gt > b small { font-size: 11px; color: var(--mute); letter-spacing: 1px; }
+.rst__track {
+ position: relative; height: 4px; border-radius: var(--r-pill);
+ background: var(--canvas-mid); overflow: hidden;
+}
+.rst__fill {
+ position: absolute; inset: 0 auto 0 0; width: 0;
+ border-radius: var(--r-pill); background: var(--mute);
+ transition: width var(--dur-slow) var(--ease-exp), background-color var(--dur-std) var(--ease-exp);
+}
+.rst__fill--store { background: var(--ink); }
+.rst__hint { margin: 0; font-family: var(--font-mono); font-size: 11px; letter-spacing: .6px; color: var(--mute); text-wrap: pretty; }
+
+/* --- 右栏:四个节拍 --- */
+.rst__beats { list-style: none; margin: 0; padding: 0; min-width: 0; }
+.rst__b {
+ position: relative;
+ display: grid; grid-template-columns: 36px minmax(0, 1fr);
+ gap: var(--sp-lg);
+ padding: var(--sp-xl);
+ border-bottom: 1px solid var(--hairline);
+ opacity: .28;
+ transition: opacity var(--dur-med) var(--ease-exp), background-color var(--dur-med) var(--ease-exp);
+}
+.rst__b:last-child { border-bottom: 0; }
+.rst__b.is-on { opacity: 1; background: var(--canvas-soft); }
+.rst__b.is-past { opacity: .62; }
+.rst__i {
+ font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.4px;
+ color: var(--mute); padding-top: 3px;
+}
+.rst__b.is-on .rst__i { color: var(--ink); }
+.rst__bt { margin: 0 0 var(--sp-sm); font-size: 16px; line-height: 22px; color: var(--ink); }
+.rst__bd { margin: 0; font-size: 13px; line-height: 21px; color: var(--mute); text-wrap: pretty; }
+/* 字段表始终参与布局:用 max-height 做展开动画在窄屏会截断较长的行,
+ 而且会造成跳动,所以层级只用节拍自身的透明度表达。 */
+.rst__data {
+ margin: var(--sp-md) 0 0; display: grid; gap: var(--sp-xs);
+ font-family: var(--font-mono); font-size: 12px; line-height: 19px;
+ letter-spacing: .4px; color: var(--body);
+}
+.rst__d { display: flex; gap: var(--sp-sm); }
+.rst__d > i { font-style: normal; color: var(--mute); min-width: 132px; flex: 0 0 auto; }
+.rst__d > span { min-width: 0; word-break: break-word; }
+
+/* --- 底部:模型输出 --- */
+.rst__out {
+ padding: var(--sp-xl);
+ border-top: 1px solid var(--hairline);
+ background: var(--canvas);
+ transition: opacity var(--dur-slow) var(--ease-exp);
+}
+.rst__out.is-idle { opacity: .38; }
+.rst__outhead {
+ display: flex; align-items: center; gap: var(--sp-md); margin-bottom: var(--sp-md);
+}
+.rst__outhead > .mono { color: var(--mute); }
+.rst__verdict { margin-left: auto; letter-spacing: 1.4px; }
+.rst__verdict.is-ok { color: var(--ink); }
+.rst__verdict.is-bad { color: var(--mute); }
+.rst__resp {
+ margin: 0; font-size: 22px; line-height: 32px; letter-spacing: -.01em;
+ color: var(--ink); text-wrap: pretty;
+ min-height: 32px;
+}
+/* 「答对了」这一帧不再用信号色:p-07 原型写明 one per page max,
+ 而信号色已经用在首屏画布里那颗目标记录上(accent 属于插图)。
+ 这里的含义由 ✓ 字形承担,跟「修复前 / 修复后」的对比一样,靠文字不靠颜色。 */
+.rst.is-payoff .rst__resp { color: var(--ink); }
+.rst.is-payoff .rst__verdict::before { content: ""; }
+.rst__kv {
+ display: flex; flex-wrap: wrap; gap: var(--sp-sm);
+ margin-top: var(--sp-lg); min-height: 26px;
+}
+.rst__kv > span {
+ display: inline-flex; align-items: baseline; gap: var(--sp-sm);
+ padding: var(--sp-xs) var(--sp-md);
+ border: 1px solid var(--hairline); border-radius: var(--r-pill);
+ font-family: var(--font-mono); font-size: 11px; letter-spacing: 1px;
+ color: var(--mute);
+}
+.rst__kv > span b { font-weight: 400; color: var(--body); }
+.rst__kv > span.is-hot { border-color: var(--btn-border); }
+.rst__kv > span.is-hot b { color: var(--ink); }
+
+.rst__note { margin-top: var(--sp-xl); max-width: 88ch; }
+
+@media (max-width: 1080px) {
+ .rst__grid { grid-template-columns: minmax(0, 1fr); }
+ .rst__aside { border-right: 0; border-bottom: 1px solid var(--hairline); }
+}
+@media (max-width: 768px) {
+ .rst__head { gap: var(--sp-md); }
+ /* 出处路径是证据本身,窄屏不截断,换行显示 */
+ .rst__file { margin-left: 0; width: 100%; white-space: normal; overflow: visible; text-overflow: clip; word-break: break-all; }
+ .rst__aside, .rst__b, .rst__out { padding: var(--sp-lg); }
+ .rst__b { grid-template-columns: 28px minmax(0, 1fr); gap: var(--sp-md); }
+ .rst__d { flex-direction: column; gap: 0; }
+ .rst__d > i { min-width: 0; }
+ .rst__resp { font-size: 18px; line-height: 26px; }
+}
+
+@media (max-width: 768px) {
+ .band { padding: var(--band-tight) 0; }
+ .release__h1 { max-width: none; }
+ .release__lede { margin-bottom: var(--sp-xl); }
+ .linkrow .btn { flex: 1 1 auto; justify-content: center; }
+ .teaser { padding: var(--sp-lg); }
+ .rel__v { font-size: 24px; line-height: 28px; }
+}
+
+/* ==================================================================
+ 29. 首屏:地址空间(本页的招牌机制)
+ 版面取舍来自 page-design §1/§3:
+ · hero **不是**「徽标 + 标题 + 副标题 + 两个按钮」的文字块,
+ 它就是这个机制本身,字被排进场景里(左上元信息 / 中间标题 / 右下读数)
+ · 不居中、没有按钮对、没有置顶徽标 —— A1 的四个特征一个都不占
+ 机制层见 assets/js/space.js;机制借用 press-stack 的「进度从文档读回来」,
+ 皮(配色 / 字体 / 结构)全部是本项目自己的。
+ ================================================================== */
+.hero { position: relative; height: 150vh; background: var(--canvas); }
+.hero__pin { position: sticky; top: 0; height: 100vh; overflow: hidden; }
+.hero__cv { position: absolute; inset: 0; display: block; }
+
+.hero__layer {
+ position: relative; z-index: 1;
+ height: 100%;
+ display: grid; grid-template-rows: auto 1fr auto;
+ padding: clamp(18px, 3.2vw, 44px) clamp(20px, 4vw, 56px) clamp(22px, 3.6vw, 48px);
+ pointer-events: none;
+}
+.hero__row { display: flex; min-width: 0; }
+.hero__row--top { justify-content: space-between; align-items: baseline; gap: var(--sp-xl); }
+.hero__row--mid { align-items: flex-end; justify-content: space-between; gap: clamp(24px, 5vw, 72px); }
+.hero__row--bot { justify-content: space-between; align-items: flex-end; gap: clamp(24px, 5vw, 72px); }
+
+.hero__geo { text-align: right; }
+.hero__h { max-width: 14ch; margin: 0; font-size: clamp(56px, 15vw, 132px); }
+
+/* 第一屏里的头号数字:读者不用滚三屏才知道这页在说什么 */
+.hero__fig { margin: 0; display: grid; gap: var(--sp-md); justify-items: end; text-align: right; max-width: 34ch; }
+.hero__fig-row { display: flex; align-items: baseline; gap: var(--sp-md); }
+.hero__fig-v {
+ font-size: clamp(38px, 4.4vw, 84px); line-height: .95;
+ letter-spacing: -.04em; font-weight: 700; font-stretch: 92%;
+ color: var(--ink); font-variant-numeric: tabular-nums;
+}
+.hero__fig-v small { font-size: .38em; font-weight: 500; letter-spacing: 0; margin-left: .04em; }
+.hero__fig-a { font-family: var(--font-mono); font-size: var(--fs-label); color: var(--mute); }
+.hero__fig-n {
+ font-family: var(--font-mono); font-size: var(--fs-label); letter-spacing: .8px;
+ line-height: 1.8; color: var(--mute);
+}
+.hero__lede-wrap { max-width: 44ch; min-width: 0; }
+.hero__lede { margin: 0 0 var(--sp-md); font-size: var(--fs-lede); line-height: 1.6; color: var(--body); }
+.hero__byline { margin: 0; color: var(--mute); }
+
+.hero__hud { display: grid; gap: var(--sp-xs); min-width: 250px; max-width: 34ch; text-align: right; }
+.hero__hud-i { color: var(--mute); }
+.hero__hud-n { font-size: 1rem; line-height: 1.4; color: var(--ink); }
+.hero__hud-v { color: var(--mute); }
+.hero__hud-track { display: block; height: 1px; margin-top: var(--sp-sm); background: var(--hairline); }
+.hero__hud-track > i { display: block; height: 100%; width: 0; background: var(--ink); }
+
+.hero__cue {
+ position: absolute; left: 50%; bottom: clamp(22px, 3.6vw, 48px);
+ transform: translateX(-50%);
+ margin: 0; color: var(--mute); white-space: nowrap;
+ animation: cue 2.6s var(--ease-exp) infinite;
+}
+@keyframes cue { 0%, 100% { opacity: .30; } 45% { opacity: .95; } }
+
+/* reduced-motion / 窄屏:不下降,就是一帧静态的地址空间 */
+.space--still .hero { height: auto; }
+.space--still .hero__pin { position: relative; height: 100vh; min-height: 560px; }
+.space--still .hero__cue { display: none; }
+
+@media (max-width: 900px) {
+ .hero { height: auto; }
+ .hero__pin { position: relative; height: auto; min-height: 92vh; padding-block: var(--sp-4xl); }
+ .hero__layer { grid-template-rows: auto auto auto; gap: var(--sp-3xl); }
+ .hero__row--mid { align-items: flex-start; flex-direction: column; }
+ .hero__fig { justify-items: start; text-align: left; max-width: none; }
+ .hero__fig-v { font-size: clamp(52px, 15vw, 84px); }
+ .hero__row--bot { flex-direction: column; align-items: flex-start; gap: var(--sp-xl); }
+ .hero__hud { text-align: left; min-width: 0; }
+ .hero__geo, .hero__cue { display: none; }
+}
+
+/* ==================================================================
+ 26. 全站检索(命令面板)
+ ================================================================== */
+.palbtn {
+ display: inline-flex; align-items: center; gap: var(--sp-sm);
+ height: 30px; padding: 0 var(--sp-md);
+ appearance: none; cursor: pointer; flex: none;
+ background: transparent; color: var(--mute);
+ border: 1px solid var(--hairline); border-radius: var(--r-pill);
+ font: inherit; font-size: 13px;
+ transition: color var(--dur-fast) var(--ease-exp), border-color var(--dur-fast) var(--ease-exp);
+}
+.palbtn:hover { color: var(--ink); border-color: var(--btn-border); }
+.palbtn:focus-visible { outline: 2px solid var(--btn-border); outline-offset: 2px; }
+.palbtn .kbd { min-width: 20px; height: 20px; font-size: 11px; }
+
+html.pal-open { overflow: hidden; }
+
+.pal { position: fixed; inset: 0; z-index: 80; }
+.pal__mask {
+ position: absolute; inset: 0;
+ background: rgba(0, 0, 0, .72);
+ backdrop-filter: blur(3px);
+}
+.pal__box {
+ position: relative;
+ width: min(720px, calc(100vw - 32px));
+ margin: 12vh auto 0;
+ background: var(--canvas-card);
+ border: 1px solid var(--hairline); border-radius: var(--r-sm);
+ overflow: hidden;
+ display: flex; flex-direction: column;
+ max-height: 70vh;
+ animation: palIn var(--dur-fast) var(--ease-exp);
+}
+@keyframes palIn { from { opacity: 0; transform: translateY(-8px); } to { opacity: 1; transform: none; } }
+
+.pal__hd {
+ display: flex; align-items: center; gap: var(--sp-md);
+ padding: var(--sp-md) var(--sp-lg);
+ border-bottom: 1px solid var(--hairline);
+}
+.pal__ico {
+ width: 12px; height: 12px; flex: none;
+ border: 1.5px solid var(--mute); border-radius: 50%;
+ position: relative;
+}
+.pal__ico::after {
+ content: ""; position: absolute; right: -5px; bottom: -4px;
+ width: 6px; height: 1.5px; background: var(--mute);
+ transform: rotate(45deg);
+}
+.pal__in {
+ flex: 1 1 auto; min-width: 0;
+ appearance: none; background: transparent; border: 0; outline: 0;
+ color: var(--ink); font: inherit; font-size: 16px; letter-spacing: -.005em;
+ padding: var(--sp-sm) 0;
+}
+.pal__in::placeholder { color: var(--mute); }
+
+.pal__list { overflow-y: auto; overscroll-behavior: contain; flex: 1 1 auto; }
+.pal__i {
+ display: grid; grid-template-columns: 34px minmax(0, 1fr) auto;
+ gap: var(--sp-lg); align-items: baseline;
+ padding: var(--sp-md) var(--sp-lg);
+ border-bottom: 1px solid var(--hairline);
+ color: inherit;
+}
+.pal__i:last-child { border-bottom: 0; }
+.pal__i.is-cur { background: var(--canvas-soft); }
+.pal__i-n { color: var(--mute); font-size: 11px; }
+.pal__i.is-cur .pal__i-n { color: var(--ink); }
+.pal__i-b { display: grid; gap: var(--sp-xs); min-width: 0; }
+.pal__i-h { font-size: 15px; line-height: 22px; color: var(--body); }
+.pal__i.is-cur .pal__i-h { color: var(--ink); }
+.pal__i-t {
+ font-size: 13px; line-height: 20px; color: var(--mute);
+ display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
+}
+.pal__i-g { font-family: var(--font-mono); font-size: 11px; letter-spacing: 1.2px; color: var(--mute); }
+.pal__i mark { background: transparent; color: var(--ink); box-shadow: inset 0 -1px 0 var(--ink); }
+.pal__none { margin: 0; padding: var(--sp-xl) var(--sp-lg); font-size: 14px; color: var(--mute); }
+.pal__ft {
+ display: flex; align-items: center; gap: var(--sp-lg);
+ padding: var(--sp-sm) var(--sp-lg);
+ border-top: 1px solid var(--hairline);
+ font-size: 12px; color: var(--mute);
+}
+.pal__ft .kbd { min-width: 20px; height: 20px; font-size: 11px; }
+.pal__n { margin-left: auto; }
+
+/* 检索跳转后闪一下目标标题 */
+#doc h2.is-flash, #doc h3.is-flash {
+ animation: flash 1700ms var(--ease);
+}
+@keyframes flash {
+ 0%, 100% { box-shadow: inset 3px 0 0 transparent; }
+ 12% { box-shadow: inset 3px 0 0 var(--ink); }
+ 70% { box-shadow: inset 3px 0 0 var(--ink); }
+}
+
+/* ==================================================================
+ 27. 剂量曲线(NM2.1 页)
+ ================================================================== */
+.dose {
+ margin: var(--sp-xl) 0 var(--sp-2xl);
+ padding: var(--sp-xl);
+ border: 1px solid var(--hairline); border-radius: var(--r-sm);
+ background: var(--canvas-card);
+}
+.dose__hd { display: flex; flex-wrap: wrap; gap: var(--sp-md); align-items: baseline; margin-bottom: var(--sp-lg); }
+.dose__hd .mono { color: var(--ink); text-transform: none; letter-spacing: .6px; font-size: 12px; }
+.dose__x, .dose__r {
+ display: grid; grid-template-columns: minmax(0, 190px) minmax(0, 1fr);
+ gap: var(--sp-lg); align-items: center;
+}
+.dose__x { margin-bottom: var(--sp-md); }
+.dose__x > span {
+ font-family: var(--font-mono); font-size: 12px; letter-spacing: 1.2px;
+ color: var(--mute); text-align: center;
+}
+.dose__x > span.is-pick { color: var(--ink); }
+.dose__r { padding: var(--sp-md) 0; border-top: 1px solid var(--hairline); }
+.dose__l { font-size: 14px; line-height: 20px; color: var(--body); display: grid; gap: var(--sp-xxs); }
+.dose__l small { font-family: var(--font-mono); font-size: 11px; letter-spacing: 1.2px; color: var(--mute); }
+.dose__cells { display: grid; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr); gap: var(--sp-xl); }
+.dose__c { display: grid; gap: var(--sp-sm); justify-items: center; }
+.dose__bar {
+ width: 100%; height: 6px; border-radius: var(--r-pill);
+ background: var(--canvas-mid); overflow: hidden;
+}
+.dose__fill { display: block; height: 100%; border-radius: var(--r-pill); background: var(--mute); }
+.dose__c.is-pick .dose__fill { background: var(--ink); }
+.dose__c b { font-family: var(--font-mono); font-size: 12px; font-weight: 400; letter-spacing: .6px; color: var(--mute); }
+.dose__c.is-pick b { color: var(--ink); }
+.dose__note { margin: var(--sp-lg) 0 0; color: var(--body); max-width: 88ch; }
+.dose__src { margin: var(--sp-sm) 0 0; color: var(--mute); }
+
+/* ==================================================================
+ 28. 真实评测台账
+ ================================================================== */
+.ledger-bar { display: flex; flex-wrap: wrap; gap: var(--sp-md); margin: var(--sp-2xl) 0 var(--sp-lg); }
+.ledger-bar .seg { flex-wrap: wrap; }
+.ledger-count {
+ display: flex; flex-wrap: wrap; gap: var(--sp-md); align-items: baseline;
+ padding-bottom: var(--sp-lg); border-bottom: 1px solid var(--hairline);
+}
+.ledger-count .mono { color: var(--ink); text-transform: none; letter-spacing: .6px; }
+.ledger { display: grid; }
+.lg { padding: var(--sp-xl) 0; border-bottom: 1px solid var(--hairline); }
+.lg:last-child { border-bottom: 0; }
+.lg__hd { display: flex; flex-wrap: wrap; gap: var(--sp-md); align-items: center; margin-bottom: var(--sp-md); }
+.lg__i { color: var(--mute); font-size: 11px; }
+.lg__id { margin-left: auto; }
+.lg__exp { margin: 0 0 var(--sp-sm); font-size: 14px; line-height: 22px; color: var(--mute); }
+.lg__exp > span { margin-right: var(--sp-md); font-family: var(--font-mono); font-size: 11px; letter-spacing: 1.2px; }
+.lg__exp code { color: var(--body); }
+.lg__rep {
+ margin: 0 0 var(--sp-md); font-size: 13px; line-height: 21px; color: var(--body);
+ padding-left: var(--sp-md); border-left: 1px solid var(--btn-border);
+ word-break: break-word;
+}
+.lg__meta { margin: 0; font-size: 11px; letter-spacing: .6px; color: var(--mute); }
+.lg__meta b { font-weight: 400; color: var(--body); }
+
+/* 发布页上「NM2.1」那一段的紧凑对照 */
+.nm21grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0; border: 1px solid var(--hairline); border-radius: var(--r-sm); overflow: hidden; }
+.nm21grid > div { padding: var(--sp-xl); border-right: 1px solid var(--hairline); }
+.nm21grid > div:last-child { border-right: 0; }
+.nm21grid .rel__v { font-size: 30px; line-height: 34px; }
+.nm21grid .rel__v em { font-style: normal; color: var(--mute); font-size: 20px; margin-right: var(--sp-sm); }
+
+/* 头号数字(money frame):整页唯一一个 .mega,放在 ~60% 滚动深度收网 */
+.money {
+ margin-top: var(--band-tight);
+ padding: var(--band-tight) 0;
+ border-top: 1px solid var(--hairline);
+ border-bottom: 1px solid var(--hairline);
+}
+.money__row {
+ display: flex; align-items: baseline; flex-wrap: wrap;
+ gap: clamp(14px, 3vw, 44px); margin: var(--sp-lg) 0 0;
+}
+.money .mega { color: var(--ink); }
+.money .mega small { font-size: .34em; letter-spacing: -.02em; margin-left: .03em; font-weight: 500; }
+.money__from {
+ font-family: var(--font-mono); font-size: var(--fs-label); letter-spacing: 1.2px;
+ color: var(--mute); max-width: 34ch; line-height: 1.8;
+}
+.money__cap { margin: var(--sp-xl) 0 0; max-width: var(--measure); font-size: var(--fs-small); line-height: 1.7; color: var(--body); }
+
+@media (max-width: 1080px) {
+ .dose__x, .dose__r { grid-template-columns: minmax(0, 1fr); gap: var(--sp-sm); }
+ .dose__x .dose__x0 { display: none; }
+ .dose__x > span { text-align: left; }
+ .nm21grid { grid-template-columns: minmax(0, 1fr); }
+ .nm21grid > div { border-right: 0; border-bottom: 1px solid var(--hairline); }
+ .nm21grid > div:last-child { border-bottom: 0; }
+}
+@media (max-width: 768px) {
+ .palbtn__t { display: none; }
+ .pal__box { margin-top: 6vh; max-height: 82vh; }
+ .pal__i { grid-template-columns: 26px minmax(0, 1fr); }
+ .pal__i-g { display: none; }
+ .dose, .lg { padding-left: 0; padding-right: 0; }
+ .dose { padding: var(--sp-lg); }
+}
diff --git a/assets/favicon.svg b/assets/favicon.svg
new file mode 100644
index 0000000..11ddc9e
--- /dev/null
+++ b/assets/favicon.svg
@@ -0,0 +1,15 @@
+
diff --git a/assets/fonts/archivo-latin-wdth-normal.woff2 b/assets/fonts/archivo-latin-wdth-normal.woff2
new file mode 100644
index 0000000000000000000000000000000000000000..e2448d0561ffdb0b0974d063a7cdbb712f41ad49
GIT binary patch
literal 90104
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