# 视觉一比一还原锁定说明

## 1. 原则

未来所有 `AI流程再造解决方案` PDF 的视觉不是“参考 golden sample”，而是 **从 golden sample 一比一继承**。

正确做法：

1. 复制 `assets/golden_sample.html` 作为新报告 HTML 的起点；
2. 保留 `<style>...</style>` 中的 CSS 不变；
3. 保留所有组件 class 命名和页面结构；
4. 只替换正文内容、标题、表格文案、业务场景和必要的页内数据；
5. 保留最后作者页结构和公众号二维码；
6. 生成 PDF 后运行 `scripts/verify_visual_lock.py` 检查。

错误做法：

- 重新写一套 CSS；
- 按“大概风格”仿写；
- 改页面尺寸、留白、卡片圆角、主色、表格样式；
- 把作者页改成普通文字；
- 把二维码缩小或换位置；
- 为了适配内容把版式拆散。

## 2. Golden Sample 指纹

以下指纹用于识别当前金标准资产：

```text
golden_sample.html
sha256: 52643d437dc6eed06b6dabb41bb1a9c6db7f95d80d65fab0ac1e624e253acc33

golden_sample.pdf
sha256: 8f74318f1a0ef9fddf88901b388de80ce92d95ae2582661b9c08ab8f5d7a08d0

zhansheng_talk_qr_cropped.jpg
sha256: 7e4ab8c1e5ef662ac739469e3ea6abdc7d6fa55366a2dd639a84101c26c71a3b
```

如果后续用户明确要求升级视觉，可以生成新的 golden sample，并同步更新本文件指纹。

## 3. 必须保留的视觉骨架

### 页面

- `section.page.dark` 封面
- `section.page` 内页
- A4: 210mm x 297mm
- padding: `14mm 15mm 13mm`
- `page-break-after: always`
- 页码 `.page-no`

### 颜色

必须保留以下 CSS 变量：

- `--ink: #1f2933`
- `--muted: #60707c`
- `--line: #d9e1e8`
- `--teal: #0f766e`
- `--amber: #c7781c`
- `--coral: #d55745`
- `--green: #2f7d4f`
- `--blue: #365f8f`
- `--dark: #24313a`
- `--cream: #fbfaf6`

### 组件

必须保留以下组件类：

- `.kicker`
- `.statement`
- `.grid-3`
- `.grid-2`
- `.card`
- `.pill`
- `table / th / td`
- `.flow / .flow-step`
- `.two-track / .track`
- `.bar-stack / .bar`
- `.callout`
- `.matrix`
- `.score-box / .formula`
- `.roadmap / .phase`
- `.quote`
- `.question-list / .question / .qno`
- `.refs`
- `.author-wrap / .author-intro / .qr-card`

## 4. HTML 生成时的铁律

未来生成报告时，在动笔前先做这个动作：

```text
复制 golden_sample.html -> 新报告.html
```

然后按页替换内容。不要新建一个空 HTML。

可以调整：

- 每页文字；
- 页面标题；
- 卡片数量在 2/3/4/6 个之间；
- 表格行数；
- 讨论问题数量；
- 参考来源。

不能调整：

- CSS；
- 主题色；
- 页面基础尺寸；
- 作者页结构；
- 二维码资源；
- 渲染方式。

## 5. 视觉验收命令

生成 HTML 后运行：

```bash
python3 scripts/verify_visual_lock.py new_report.html --golden assets/golden_sample.html
```

严格模式会检查目标 HTML 的 CSS 是否与 golden sample 完全一致。若失败，应优先回滚 CSS，而不是解释“看起来差不多”。
