# 「纸 · 墨 · 印」重设计规范 本文是桌面端整体视觉重构的执行标准。配套阅读 [`desktop/src/components/AGENTS.md`](../src/components/AGENTS.md)(组件与 token 硬约束,冲突时以那份为准)。 ## 唯一边界:只换皮,不动功能 - 允许改:`className`、内联展示样式、纯展示用的 DOM 结构、i18n 文案里的视觉措辞。 - **不允许改**:`stores/`、`api/`、`hooks/` 里的任何逻辑,事件处理、状态流转、数据契约、组件 props 语义。 - 设计稿里有、原项目没有的**功能**(例如零态的三个建议胶囊),**不新增**。 - 原项目有、设计稿没画的界面,**不删**,按同一套规则收敛。 判断口径:如果一处改动会让某个 `.test.tsx` 里的行为断言(点击、请求、状态)失败,那它就越界了;只有快照式的样式断言才应该跟着改。 ## 设计主张 纸感暖底分层 + 墨色主按钮 + 衬线标题 + 陶土印章。层次靠**底色分层与 1px 细边框**建立,不靠重阴影。 ## Token(已定稿,不要改 `theme/globals.css`) 六套主题(`white` 纯白 / `paper` 纸墨 / `warm-classic` 经典暖色 / `celadon` 青瓷 / `dark` 墨夜 / `ink-blue` 墨夜蓝)只换一组 `--cc-*` 源变量,`:root` 语义层把它们映射成 `--color-*`。**组件一律只用 `--color-*` / `--radius-*` / `--shadow-*` / `--z-*`,永远不要直接用 `--cc-*`。** | 角色 | token | |---|---| | 页面底 | `--color-surface` / `--color-background` | | 侧栏与次级面板底 | `--color-surface-container-low` | | 悬停 / 选中 | `--color-surface-hover` / `--color-surface-selected` | | 卡片内衬 | `--color-surface-container` | | 常规边框 / 强边框 | `--color-border` / `--color-outline` | | 主 / 次 / 弱文字 | `--color-text-primary` / `--color-text-secondary` / `--color-text-tertiary` | | 陶土主色 / 深 / 浅底 / 描边 | `--color-brand` / `--color-brand-hover` / `--color-brand-soft` / `--color-primary-fixed-dim` | | **陶土浅底上的文字** | `--color-on-brand-soft`(**不是** `--color-brand`,见下) | | 状态色 | `--color-{success,warning,error,info}` + `-container` + `--color-on-*-container` | | 主按钮墨色 | `--color-btn-primary-bg` / `--color-btn-primary-fg` | **状态色成对使用。** `--color-` 是标识色(描边、图标、下划线);`--color-on--container` 才是 `-container` 底上的**文字**色。直接把 `--color-brand` 当 `--color-brand-soft` 上的文字,在两套墨色主题下只有 4.3:1,低于 AA。`contrast.test.ts` 会红。 ### 圆角阶梯 `--radius-sm` 6(小徽章)/ `--radius-md` 10(按钮、输入)/ `--radius-lg` 13(卡片内件)/ `--radius-xl` 17(卡片)/ `--radius-2xl` 20(composer)/ `--radius-3xl` 24(模态)/ `--radius-full` 胶囊。 写 `rounded-[var(--radius-md)]`,**不要**写 `rounded-md`(Tailwind 的 `rounded-lg` 是 8px,`--radius-lg` 是 13px,同名不同值)。 ### 阴影三级 `--shadow-card`(卡片静止)/ `--shadow-composer`(composer、卡片 hover 抬起)/ `--shadow-overlay`(浮层、下拉、模态)。 ### 字体 - 标题走 `style={{ fontFamily: 'var(--font-headline)' }}`:所有 h1/h2/h3、页面大标题、统计大数字、弹层里的大号数值(上下文百分比、推理档位名)。中文会落到系统衬线,这是预期。 - 正文默认 `--font-body`,14px / 1.5。 - 代码、路径、快捷键、ID、耗时、token 数走 `--font-mono`(Tailwind `font-mono`)。 - 字号阶梯:11 / 12 / 12.5 / 13 / 13.5 / 14 / 14.5 / 15 / 16.5 / 21 / 24–28(衬线页标题)/ 32(详情页标题)。 ## 组件规则 优先用 `components/ui/` 里的原语,别手写 `