# 美术报告的设计约定

报告由 `scripts/novel-art.mjs render --html` 生成，样式全部内联在 `renderHtml()` 里。**改样式只改那一处。**

与另外两份报告同一套视觉语言：冷灰印张 + 铁锈红印记，1600 宽，全部平铺可 Cmd+F，零外部依赖，离线双击能开。

## 结构

```
页眉      剧名 · 场景设定集 · 画风 · 质量门徽章 · 导出 JSON
KPI 带    场景数（主场景 + 变体）/ 一致性锚点 / 光照状态 / 复用变体
（病灶横幅）质量门有未过项才出现
01 场景清单    一张总表：ID/类型/出现集/锚点数/光照/变体改动
03 道具清单 04 道具设定卡    有 props 才渲染；道具卡与场景卡同构（状态变体替代光照，徽章显示尺度）
02 场景设定卡  每场景一张大卡（报告的主体）
03 质量门     完整 ✓/✗ 清单
```

## 场景设定卡

**一排两张**（1100px 以下降一列），卡内纵排——这个排法是给截图宣传定的：设定图占满卡宽、位置靠上，两张卡并排截出来就是一张能发的图。

卡内从上到下：卡头（ID + 名称 + 徽章 + 出现集）→ 设计意图（宋体，它是叙事不是参数）→ **环境设定图**（可点，弹层看大图，Esc 或点背景关闭；没出图就占位）→ 变体来源标注（铁锈红底）→ **一致性锚点**（编号列表，`01 02 03` 等宽序号——它是核对表，编号是给 QC 念的）→ **光照与时段**（状态名 + 提示词，每行带复制按钮） → 提示词包（折叠 + 复制，主视角/设定图/反向 + 整卡 JSON）。

## 质量门

11 道（场景与共用 7 + 道具 4），`gateReport()` 渲染时算好烘进页面。无道具的文档四道道具门直接放行并照常显示。特殊处理一条：「提示词不含角色名」在没给 cast.json 时**明说跳过**（面板上写「未提供 cast.json，本门跳过」），不装作查过——静默通过和撒谎只差一步。

## 导出 JSON

与另外两个 skill 同一套：`<script type="application/json" id="scenes-data">` 内嵌原样数据 + 页眉按钮下载。两个坑照旧：`<` 转 `<` 防 `</script` 截断；`revokeObjectURL` 延后调防 Safari 存出空文件。

## 质量底线

- 模型生成的数据一律 `esc()` 转义
- `@media print`：隐藏按钮、提示词全展开、卡片不跨页断
- `prefers-reduced-motion` 关动效
- 中文文案不用单字词（复制/展开/主场景，不写单字）
