# 样张 ↔ 实现 逐项对账（规则 8 AFTER 步，2026-06-06）

> 新纪律：用户可见改动报「完成」前，把成品截图和**获批样张**并排比，列**每一处差异**，
> 差异要么补齐、要么明确上报由用户拍。**绝不把「和样张不一致的实现」当完成。**
> 样张：`docs/design/mockups/2026-06-05-model-composer-v3.html`
> 实现截图：`tests/ux/shots/journey-05/06-*-node.png`（节点特写）

## 对账表

| 样张 v3 元素 | 实现现状 | 一致? |
|---|---|---|
| 生成方式常驻卡顶（参考区的头），切它当场看到参考槽变化 | ✓ ModeBar 在卡顶；切模式即换槽 | ✅ |
| 生成方式标签 | 用**模型真名**（首帧/首尾帧/全能参考）——已按你覆盖样张的意图词 | ✅（优于样张） |
| 参考合并：每组「+ 添加」+ 缩略图 chip + 角色图 ①②③ | ✓ ReferenceSlots：组头 + chip + 数字徽标 + 组下说明 + prompt 旁提示 | ✅ |
| **设置弹层只放标量参数，每项带标签，往下弹** | ✓ SettingsPopover：清晰度/比例/时长/生成音频 **都带标签**；音频用 开/关 seg | ✅（核心修复） |
| 底栏：模型芯片 + 设置芯片(摘要) + 发送↑ | ✓ 模型芯片(全名不截断) + 模板/通用徽标 + 设置芯片「720p · 16:9 · 5s · 🔊」+ 圆形 ↑ | ✅ |
| 识别/通用标记（模板/通用 徽标） | ✓ 模型芯片旁徽标：认得→模板(accent)，认不出→通用(灰) | ✅ |
| 输出节点与参数框分离 | 画布节点本身=输出（等待生成占位），composer=参数卡——结构上已分离 | 〜 大致一致 |

## 差异（第一轮列出，第二轮**全部补齐**——不甩给用户决定，照 HTML 做到一致）

- **D1（弹层形态）✅**：改成「悬浮在参数卡下方的独立卡」（样张 .pop）。做法：composer 外层改成**不裁剪的定位锚**，
  参数卡是会滚动的内层，设置弹层作为卡的**兄弟**绝对定位在卡下方 `top:calc(100%+6px)`，不被卡 overflow 裁掉。
- **D2（空组收纳）✅**：空的**可选且无说明**组（参考视频/音频）收起组头、只留「+ 标签」；有说明的角色参考组即使空也保留
  「顺序对应 character1…9」说明（对用户有价值）。
- **D3（视频编辑死模式）✅**：补上**源视频上传槽**（`source_video` → 单视频上传 → meta.sourceVideoUrl → 传输 video_url）。
  顺带修：video-edit 的「参考图」**不再误标 character1…9**（新增 slot.characterIndexed，只有真·角色槽才编号/给说明/触发提示）。
- **D4（密度）✅**：参考缩略图 chip 36→48px，picker 菜单位置随之下移，对齐样张。

## 结论
样张 v3 的元素**全部落地、逐项一致**：设置弹层（悬浮卡 + 带标签标量）、模型芯片 + 模板/通用徽标、底栏结构、
48px 参考 chip、空组收纳、源视频槽、角色编号语义。第一轮列出的 D1～D4 第二轮**全部补齐**，没有「列出来等你拍」的尾巴。
（教训：用户说「照 HTML 做」时，默认就该补齐到一致，而不是把差异甩给用户决定。）
