` 有直接规则 `font-family: monospace`,**直接规则压继承**——`` 上声明的 `var(--f-mono)` 到不了真正画字的 ``。故 `foundation.css` 收一条全局口径 **`pre code { font: inherit }`**;新增任何「pre 里套 code」的机器文本面照此写,别在父层声明了事。
---
## 3. 墨色系统(已锁定 · 矿物颜料)
| token | 值 | 语义 | 用在哪 |
|---|---|---|---|
| `--ink-1` | `#26221C` | 松烟墨(正文) | 答 / 策 / 码正文 |
| `--ink-2` | `#55503F` | 次级墨 | 规线 / 次级文字 |
| `--ink-3` | `#8A8172` | 三级墨 | 注记 / 页码 |
| `--ink-4` | `#B5AC9A` | 弱规线 | 分隔 |
| `--seal` | `#A63A2E` | 朱砂(人的批改) | 印章 / 来文 / 圈点 / 朱批 |
| `--seal-deep` | `#8C2F26` | 朱砂深 | 来文文字 |
| `--indigo` | `#3A5B7A` | 石青(机器/仪表) | 脚注 / 拟策策面(左线·淡底·文类签)/ diff 新增 |
| `--graphite` | `#6F6E68` | 石墨(铅笔灰) | 夹注 / 擦改 / diff 删除 |
| `--paper` | `#F6F1E7` | 纸面 | 画布 / 页面底 |
| `--paper-deep` | `#EFE8DA` | 深纸 | 输入条 / 图版底 |
| `--paper-margin` | `#EDE5D5` | 页边 | 舞台底色 |
语义状态(保留原 `--pass/--warn/--fail` 语义,降饱和到矿物色):`--pass #5E7A55`、`--warn #B0782E`、`--fail #A9443F`。
**一条铁律:朱砂 = 人,石青 = 机,石墨 = 夹注,墨 = 正文。** 不许换义。
> 2026-09-16 口径订正:原写「石墨 = 草稿」与值层不符——`--graphite (#6F6E68)` 实挂夹注 / 擦改 / diff 删除。
> **「草稿」语义由虚线(`--rule-dashed`)表达,不占颜色位。**
唯一豁免(2026-08-23 B5 环2 用户拍板):**抄录(diff)加删色走红绿墨色化**——add=松绿(`--pass`),del=朱砂深+删除线。del 的朱砂深不表「人的声音」,读作擦改/勘误红笔;加删红绿对是代码块的视觉直觉,纯红纯绿不入纸面,必须落在矿物色族。
---
## 4. 块类型映射(已锁定)
现有 `paper/block-model.ts` 的 `BlockKind` 无需改动,只改渲染层视觉:
| BlockKind | 文类签 | 字体 | 墨色 | 视觉 |
|---|---|---|---|---|
| `user` | 来文 | `--f-kai` | `--seal-deep` | 左 2px 红批线 + 圈点关键词;16px / 行距 1.9(B4 环1 拍板:字号收到正文 17 之下,朱砂深保持——问仍是唯一彩色声音);附图缩略行(2026-09-09 multimodal-image B4):64px 方界 tile 规线细框 + wrap 居中多行 + 点击放大浮层,几何 token `--pp-ch-userImages-*`(measure 镜像 `userImagesRowHeight` wrap 行数整除推得);未命中预览/读失败降级 mono 占位盒 |
| `markdown` | 正文 | `--f-song` | `--ink-1` | 17px / 行距 2.0,居中主角 |
| `reasoning` | 夹注 | `--f-song`(英文走 Garamond) | `--graphite` | 86% 宽、虚线勾边、擦改痕迹 |
| `diff` | 抄录 | `--f-mono` | `--ink-1` | 3px 硬左线 + 米黄底图版,add 松绿(--pass)/ del 朱砂深+删除线(B5 环2 红绿墨色化定稿——铁律在 diff 语境豁免:删行读作擦改非人语);**顶层 markdown 围栏一律落本类**(2026-09-23):语言标记留在 `.pp-lang` 语言签,块体按语言分流——真差分(diff/patch)走 +/- 着色,其余语言与裸围栏走 hljs 代码体(几何同源,测高不因分流漂) |
| `tool` | 脚注 | `--f-mono` | `--indigo` | 44px 注线 + 11–11.5px 小字;卡内载荷 = 语义投影(见 §4.1a),不再是协议 JSON |
| `plan` | 拟策 | `--f-song` | `--ink-1` | 石青策面(2026-09-10 拟策卡渲染专项,用户拍板):顶硬线 + 底软线保留 + 3px 石青硬左线 + 石青淡底(indigo 4% 兑纸面)+ 横向内距 16——与来文的朱砂左线对仗(人声朱 / 机策青);内容走完整 markdown 体(`.pp-pc-body` + `.pp-md` 族共享,正文位 17px/2.0),行号机制(01/02/… 石青序号)退役;方案区 + 钤印三钮不变 |
| `notice` | 贴黄 | `--f-song` 小字 | `--warn` | 系统通知(建议作「贴黄」纸条) |
> `notice`(系统通知)原型未覆盖,建议按「贴黄」(古代奏章上贴的黄纸条)处理:小字、土黄底、一条弱规线,与正文明确区分。
### 4.1 正文(markdown)子元素版式与折叠机制(2026-08-30 补记)
正文块(`markdown`)不再是纯文本平铺——子元素按注疏版式降级渲染;结构模型 = `paper/markdown.ts` 单一解析(渲染与测量共用,块高镜像 `measure.ts` 的 `MD_*` 常量,CSS 镜像 `.pp-md-*`,改版式三处同步):
| 子元素 | 版式 |
|---|---|
| 段落 | 17px/2.0,段间 14px(旧 10px 段距小于行距、段落黏连,专项提到 14) |
| 标题 h1–h4 | 20/18/16.5/15.5px 正文位加粗,padding 承担上下距(首元素 margin 逃逸会破坏测高,禁 margin-top) |
| 列表 | 标记列等宽小字绝对定位(ul `·` / ol `n.`),条目缩进 26、嵌套再缩进 22 |
| 引用 | 石墨左线 + 缩进 + ink-2 |
| 图码 | 石青左线 + 深纸底(**列表/引用内**嵌套围栏 + mermaid 回落的兜底面——顶层围栏 2026-09-23 起升格为独立抄录块,见上表 `diff` 行) |
| 正文图(2026-09-09 远端 B4;2026-10 本地路径扩展 + 点击放大) | 独立行 `` 固定盒 160px(`--pp-md-imgBoxH`,chem 先例同族——加载/失败态都不改版面,measure 静态镜像即精确);图源分类过在解析层(`imageSrcRef` 单一真源):http/https 远端由浏览器直载;**本地绝对路径(盘符/UNC/POSIX 与 `file://` URI 归一)仅图片扩展名(`VIEWER_IMAGE_EXTS`)放行**,渲染期经 `fs_cap read_base64`(用户路径,8MiB 上限)回读成 data URI(块只携路径);非白名单(data:/相对路径/非图扩展名)降级 alt 文本,空 alt 整行不产块——data: 巨串不灌纸面;周框 `--rule-soft` + 深纸底;失败换 mono 弱墨行(远端=alt 文本、本地=「图片不可读:文件名」带原因 title——盒界常在,错误不静默);**点击看大图**:盒内图为按钮(`.pp-md-img-zoom` 无装饰重置 + 光标 zoom-in + title/aria 提示)→ 用户气泡/资产卡同款全局浮层(`.pp-media-preview-overlay`,Esc/遮罩点关) |
| 表格 | 等宽 11.5px + 弱规线(`.pp-grid-table` 同族) |
| 行内 | 加粗 600 / 斜体 / 删除线石墨 / 行内码等宽小号 chip / 链接石青下划线 |
**块体白空格纪律**:`.pp-body` 恒 `white-space: pre-wrap`——measure.ts 的 canvas 测量一律按 pre-wrap 计行,渲染端折叠换行会产生「测得多、渲染少」的幻影块间距(2026-08-30 间距根因之一,已修)。
**折叠机制**(`paper/fold.ts`;规则态 + 用户覆盖态):夹注(reasoning)恒折叠——流内只留一行预览;脚注(tool)/程文(code)按状态折叠——`running`/`error` 展开(过程与错误可见),`done`/`pending` 收起(完成即收);折叠行 = 块顶等宽小字(单工具 `▸ 名字 判别摘要 · 读数` / `▾ 收起`),用户点击写入覆盖态(状态翻转自动收回不打架)。**读数** = 语义投影的 `summary`(`42 行` / `9 处 · 1 文件` / `17 个改动` / `exit 0 · 110s`,见 §4.1a;无 summary 回落「输出 N 字」),名字走领域显示名 `fs(read)`。**判别量**(stream-rhythm 刀4a,2026-09-03):压缩的是重复不是信息——工具组折叠行露判别字段(`▸ 工具 ×3 · read_file src/a.ts / src/b.ts / src/c.ts`;shell 露命令;截断/同值去重补 ×N 总账;无判别字段回退名字计数),折叠行恒一行(10px mono,测高镜像零变化);**版面契约(2026-10-29 实机回归)**:`.pp-fold` 必须 `width: 100%`(`