Files
contentm_agent/docs/pm/mcn-shortvideo-agent/ui/DESIGN.md
T

460 lines
65 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# MCN 短视频整合营销工作台 · DESIGN.md(V4 · 八条口径落进②段两份与原型)
> 项目 slug:`mcn-shortvideo-agent` | ③段(界面交互)第 3a 子步产出
> 本版是**第 6 步(把用户 2026-10-09~10-10 的八条口径落进②段两份与原型)**的绑定规范。⛔ 不是给 V3 打补丁,是按②段 V4 重出一版。
> 落点:`执行会话/目标-把八条已定口径落进②段两份与原型-fa6e07/ui/DESIGN.md`(目标目录内;⛔ 未写域外 `docs/pm/`)。
> 判据源:`product-planning/references/stage-delivery/SKILL.md`(含 §供给 / Gate-1)+ `references/execution-runbook.md` §2 + `references/layouts-tooling.md` §5.5。
> V4 的口径原文:`执行会话/目标-征询GPT对当前七页结构与操作路径的建议-b49e02/用户口径裁决-5条回应.md`(2026-10-09)+ `执行会话/目标-分析social-auto-upload项目,用于投放页与发布对象的判断-0ec0a07/用户口径追加-账号是两个概念.md`(2026-10-10)。
> 上一版原型只读对照:`执行会话/目标-导航改七项一层并重排功能归属(P8 并入复盘)-fc471a/ui/`(V3 原型与 `DESIGN.md`)。本版沿用其令牌与组件,⛔ 不覆盖 V3 文件。
---
## 〇、开工声明(声明制,四字段)
| 字段 | 内容 |
|---|---|
| 当前段与子步 | ③段 / 3a 视觉规范(D0 锚需求 → D1 定调 → Gate-1)→ 3b 原型 |
| 主干与挡位 | 供给=`oil-ui-pro`(**基础层**)+ 叠加层(本段自带样式库 `design-system-tiaoyue` 定调与令牌 + 本段自有判据)。挡位 **标准** |
| 依据文件 | `stage-delivery/SKILL.md` §供给 + §3a/§3b;`execution-runbook.md` §2;`layouts-tooling.md` §0/§1/§5.5;②段 `2a-产品功能-新版.md`/`2b-界面布局-新版.md` |
| 产出落点 | `ui/DESIGN.md`(本份)、`ui/mcn-workbench.html`(3b)、`ui/_tools/`、`ui/_gate_shots/` |
### 供给核对(runbook §2.0 · 步 −1,每轮必做)
| 步 | 动作 | 结果 |
|---|---|---|
| −1 | 确认 §供给 三处在位 | ✅ `references/layouts-tooling.md`、`references/execution-runbook.md` 都在位;定调与令牌档在位 1 套 `assets/design-systems/design-system-tiaoyue/` |
| −1b | 套名与上一版记录比对 | ✅ 上一版 `DESIGN.md` 选定 `design-system-tiaoyue`,本版**沿用同一套**(用户 2026-10-07 令「每次设计只选一套」)⇒ 不触发变更清单 |
| −1c | 可选档是否动用 | ⛔ **未动用** `assets/open-design/`(随后续口径可选)。它独有的四项(反 AI 味 / 无障碍 / 表单校验 / 动效纪律)**本次无逐项数值供给来源** —— 见 §五 缺口 1,⛔ 没有凭感觉编一套顶上 |
### V4 本轮改了什么(六条 · 骨架与令牌一格未动)
1. **P2 选题库**:分组控件加一层**类型**维度(选题/对标线索/评论洞察/数据异动/灵感),与**进度**(待做/在写/已用)正交;选题行多一列「类型」。⛔ 不新增「待整理」状态。
2. **P2 去掉「灵感速记」板块**(骨架 5 → 4 块):随手记本来就是全局可达的框架层入口(顶栏 `G-06`),写进来的东西落选题库。🔴 顺带订正 V3 遗留的一处文档打架(见 §五 缺口 8)。
3. **P3 资产库**:页面职责由「存拆解结果」改成「**统一管理**」;入库不限页(P2 拆解结果可就地入库)。骨架仍 4 块。
4. **P4 版本管理**:展开单位由「账号 × 平台」改成「**平台账号**」(一个平台账号一版)。
5. **P5 目标选择改成两级**:先选内容账号,再勾它下面的平台账号(渠道);数据摘要区由「目标账号数/目标平台数」改成「**目标渠道数/覆盖平台数**」;各版本块写死「**一个平台账号一版**(一版一路)」。
6. **P6**:画像六维收成**画像五维**(去掉「平台」这一维),**新增「平台账号」板块**(骨架 4 → 5 块):平台账号=发布渠道,每条带「平台 + 登录态 + 授权状态」,是内容账号下的子项(1 → N)。🔴 页面数、导航、流转 20 条**都不动**;业务板块总数仍是 **39**(P2 −1、P6 +1)。
### 页型判定(硬前置,SKILL.md §3b)
**全部 7 页都是工具型页面。** 依据:用户是天天来干活的 MCN 团队,每页都有人在里面完成一件事(决定先处理哪件 / 挑一条选题 / 存一条拆解 / 推一个环节 / 确认一次发布 / 改一份画像 / 写一条归因并核一条记录);没有一页是让人「看一眼就下决心」。
⇒ 本份零 `.eyebrow`、零 `.lead`、零 `.hero`,且 `body.is-marketing` 之外的类名一个不设。与②段 `2b` §二「本产品是工具型页面,不是营销页」一致。
---
## 一、设计契约(十二个字段)
### 1.1 项目级字段
**① 主用户**:MCN 机构的内容负责人(矩阵级决策)、编导与文案(选题与创作)、剪辑与投放(版本与发布)。依据①段 `1c-用户画像.md`(零访谈画像 —— 局限已登记在旧版 §四缺口 4,本版沿用)。
**② 主操作**:**逐页唯一**,照②段 `2b` §五 各页「主操作」原样落,本段未改一个(逐页见 1.2)。
**③ 必要内容(核对面)**:②段信息分档表逐页核对,见 1.2。只做**落位核对**(主屏常驻=零点击可见,可点入=一次点击可达),⛔ 不以它为由增删档位。
**④ 重复项的信息量**:四个主列表(账号矩阵 / 对标内容 / 资产条目 / 发布记录)是**满宽表格**,每行除「主标识 + 动作」外都带次级信息,逐页列在 1.2。
**⑤ 结构骨架(翻译面)**:
- **骨架档:主区 + 侧区**。理由:一级导航覆盖 7 个目的地、宽屏 ≥1024;选定套的外壳本身就是「侧栏 + 主区」的应用型外壳,两者同构。
- **导航层级:一层七项**(2026-10-09 按用户口径与 `2b` V3 §三 重做)。V2 做的是「3 个业务组 + 1 个跨组入口」,本版**把层级整个压平**:
- 七项按用户给的先后:**首页(P1)/选题(P2)/创作(P4)/投放(P5)/复盘(P7)/账号(P6)/资产(P3,排最后)**。
- ⛔ **零组标、⛔ 零跨组分隔线、⛔ 零第二层**。V2 的三个组标(找选题/走创作流水线/看矩阵复盘)与跨组线连同对应 CSS 一起删掉。
- 项名**逐字取用户口径**(首页/选题/创作/投放/复盘/账号/资产);页面自己的名字不变(矩阵总览/选题雷达/资产库/创作台/发布中心/账号画像/复盘台)。最要紧的一处:**导航叫「投放」,页面仍叫「发布中心」** —— 这一页只管内容发布与排期,⛔ 没有扩功能。
- 「资产排最后」是硬约束(用户明说);其余六项照用户给的先后。
- ⚠️ V2 遗留的「组名与短名怎么对应」这项待确认随之作废(组没了);**新冒出一个问号**:七项是否要另配一套两字短名 —— 现已按用户口径直接用全名,⛔ 本段没替用户起短名。
- **侧栏形态:药丸浮栏,宽 `64px`**(2026-10-10 用户令「左侧导航改回去」;V5 由 `128px` 改回设计供给的**基准形态**,相对 V4 是一处**显式改动**):
- 依据:`design-system-tiaoyue/SKILL.md` 行 95 逐字「左侧栏(`app-sidebar`,宽 `w-16`)」⇒ `w-16` = `64px`;第八轮实测值(栏 `64`/内衬 `3`/圆角 `100`/项 `56×78`/字 `12px-500-行高 16`)。
- V3 那条「按最长项名 2 字 + 徽章 + 余量」的推理不假,但它把栏做成了**横排**;用户令要的是**基准形态** ⇒ `128px` 与「图标在左、名字在右」一起推翻。
- `64px` 栏里放不下横排 ⇒ 导航项改成**竖排**:图标在上(`24px`)、名字在下(**两字常驻**,说明走悬停提示)。项 `56×78`、内衬 `3px`、圆角 `100px`(药丸)。
- 保住选定套的**圆角浮栏**性格(淡底、`1px` 淡描边、四周留白、随内容高、在列内垂直居中);⛔ 没有引入第二套配色或第二套圆角 —— 令牌全部来自 `design-system-tiaoyue`。
- 品牌名在 `64px` 里放不下(顶栏已写全称)⇒ **侧栏只留标记并居中**,`.sidebar .brand-name` 隐藏。
- ⚠️ **几何不在样式库内**(§供给 明写「自带样式库实测只到调色板级」)⇒ 栏宽是③段的判断,不是从包里抄的;取值按上条的基准实测值。改**一处** `--nav-w` 即可推翻(见 §七 修订记录 V5)。
- **每页收口形态(七页统一)**:`页面公共框架(Page Shell)` → `业务板块若干(从上到下)`。⛔ 本版继续**不要**上一版那层「功能入口卡」(`.sect-nav` / `.data-cards` / `.data-card`):`2b` §一第 2 条与 §九第 2 条明令撤掉,它的文字本来就是流转表的副本。跨页入口只留在两处:**侧栏**(七页一次点击可达)与**业务板块内的行级动作**(流转表就落在那里)。
- **密度目标:密集(8–32)**。理由:7 页都是一屏要放多行记录的工具型页面,`2b` P1 要求矩阵与今日待办**同时**常驻,宽松档放不下。同一页面只取这一档。
- 块间距 ≥ 块内间距的 2 倍:块间 `32px`、块内 `8/12/16px` ⇒ 比值 2.0–4.0 ✅。
**⑥ 交互清单**:见 §二 表 2.4(逐元素四列)。**它是唯一的交互真相源** —— 3b 实测、自检、变异对照都引这一张,⛔ 不另建一份。
**⑦ 状态覆盖六项**:见 1.3,逐页逐项有结论。
**⑧ 组件来源**:优先沿用选定套既有组件族,其次自创。⛔ 未参考 `teamOnly: true` 的族。清单见 §二 表 2.5。
**⑨ 响应式行为**:
| 断点 | 布局怎么变 |
|---|---|
| `>1024` | 侧栏 `64px` 药丸浮栏常驻(⛔ 宽度不随断点变)+ 主区 `minmax(0,1fr)` |
| `1001–1024` | 侧栏仍 `64px`;两栏分栏与满宽表格都不变;顶栏间距收到 `8px`;顶栏不折行 |
| `901–1000` | 同上,另:统计条最小宽 `132 → 96px`(4 格不折行) |
| `821–900` | 上述继续;另:两栏分栏 `.grid-main-side` → 单列(右栏被挤到 300px 以下就会折行) |
| `641–820` | 上述继续;另:统计条、表格列宽由 `auto` 收窄,主区内衬 `32 → 16px` |
| `≤640` | 侧栏**变成页头下方一条可横向滚动的标签条**(⛔ 不隐藏);导航项在这一档**还原成横排小标签**(图标+名字一行,⛔ 不竖排)、项高 `36px`;主区单列 |
**滚动容器**:整页不滚、**只有主区 `.view` 滚**。高度链三件套必须齐:`.app{height:100vh;grid-template-rows:minmax(0,1fr)}` + `.main{min-height:0;overflow:hidden}` + `.view{flex:1 1 auto;min-height:0;overflow:auto}`。少写一处 ⇒ 整页「滚不动」而不是「不滚」(上一版踩过并留档)。**判滚动四个容器都要核**:`window`/`html`/`body`/`.view`。
**⑩ 明确拒绝的模式**(≥3 条,每条可判定):
1、⛔ 不出现「眉标/大标题/灰色副标题」三段式标题区(判据:DOM 里 `.eyebrow` / `.lead` / `.hero` 三个类名出现次数为 0)。
2、⛔ 不用围合边框假装分组(判据:非控件元素里 `border` + `border-radius` 同时出现在同一「分组」用途上 ≥3 次即判不过;结构性容器靠底色差 + 多层阴影分层)。
3、⛔ 不给列表行套框、不给状态上整行底色(判据:行间只用 `border-top`;状态只出现在 `tag` 内)。
4、⛔ 不做**逐区块**入场编排(判据:`@keyframes` 至多 1 处;过渡只用 `transition`,⛔ 不用 `linear` / `ease`)。
5、⛔ 不可点的东西不长成可点样子(判据:页面里所有 `button` / `[role=button]` / `.btn*` 集合与 §二 表 2.4 的元素列做双向差集,差集为空)。
6、⛔ **不用内联样式表达「选中态」或覆盖「字号」**(判据:七页里 `[style*=border-color]`、`[style*=color]`、`[style*=font-size]` 的出现次数**都为 0**)。选中态全站**只有一套画法**:`.is-on` / `.is-active`(整块浅紫底 + `--accent-text` + 字重 600);字号只许走 `--fs-*` 七档。
7、⛔ **页面公共框架不许进板块计数、不许参与功能归属、不许占对象冻结计数**(判据:`.block` 数逐页等于 `FROZEN`;`.page-shell` 自身不带 `.block` / 不带 `.block-head h2`)。
8、⛔ **辅助入口区不许把流转表再写一遍**(判据:每页 `.shell-aux` 里的 `[data-page]` 元素 ≤1 个)。
**⑪ 验收标准(可观察可判定)**:
- 七页各自可达(`#/p/p1` … `#/p/p7` 直接打开都渲染出该页内容,不是空壳)。
- 表 2.4 每一行的「触发 → 反馈」都真发生过,无死按钮。
- 六态在每一页都能被看到(正常 / 加载 / 空 / 错误 / 禁用 / 无权限)。
- 宽视口 `1440×900` 与窄视口各留截图,横向溢出为 0。
- 页面上每个可点元素都能在表 2.4 里查到;表里没有的可点元素为 0。
**⑫ 明确拒绝的「编造」**:界面上不出现「示例 / 示意图 / 未接入 / 待核实」这类制作说明;也不把机器结论说成人已认可(如把「疑似原因」写成「已确认原因」)。
### 1.2 逐页字段(页面职责 / 主操作 / 必要内容落位 / 重复项信息量)
| 页 | 页面职责 | 主操作(唯一) | 必要内容的落位核对 | 重复项的次级信息 |
|---|---|---|---|---|
| P1 矩阵总览 | 让内容负责人在 1 分钟内决定**今天先处理哪一件** | 挑一件待办并进到那一件事 | 账号矩阵、今日待处理=零点击可见;异常值、本月最好、全局检索=一次点击可达 | 账号行=账号名 + 今日该发/已发/效果 + 异动标 |
| P2 选题雷达 | 让编导在 3 分钟内**找到一条能做的选题** | 把一条选题推进下一步 | 对标监控概览、对标内容、选题库=零点击可见;评论区洞察=一次点击可达;随手记=全局可达(框架层,⛔ 不占板块) | 对标行=标题 + 账号 + 倍数 + 时间;选题行=选题 + 类型 + 来源 + 状态 |
| P3 资产库 | 让编导在 2 分钟内**把资产条目管到位、或引用一条去创作**(⛔ 入库不限页,本页是统一管理的地方) | 管好一条 / 引用一条 | 分区切换、资产条目=零点击可见;单条详情、引用入口=一次点击可达 | 条目行=条目摘要 + 出处 + 草稿/已入库 + 采集时间 |
| P4 创作台 | 让编导在一条内容上**把当前环节推到下一环节** | 推进到下一环节 | 创作流程、当前环节工作区、AI 产出与采纳、当前内容上下文=零点击可见;资产引用、版本管理、录制卡片与画板=一次点击可达 | 版本行=vN + 语义名 + 时间 + 当前标记 |
| P5 发布中心 | 让投放**确认发出这一批版本** | 确认发布 | 检查结果、各版本与逐版编辑、确认发布=零点击可见;目标选择、发布记录=一次点击可达 | 版本行=内容账号·平台账号 + 字数 + 检查结论(一版一路) |
| P6 账号画像 | 让内容负责人**改好并保存一个内容账号的画像**,并管好它下面的平台账号(渠道) | 保存这一份画像 | 画像五维、账号列表=零点击可见;平台账号、记忆条目、关联内容=一次点击可达 | 账号行=账号名 + 平台账号数 + 内容数;平台账号行=平台 + 登录态 + 授权状态;记忆行=日期 + 来源 + 一句话 |
| P7 复盘台 | 让内容负责人**确认归因并写回这个账号**,顺带**核销一条发布记录** | 确认归因并回写 / 核销一条记录 | 表现数据、归因结论、确认与改判、待复盘项、回写目标提示、发布记录、对账核对区=零点击可见;历史复盘、单条溯源、商单与收支=一次点击可达 | 待复盘行=内容 + 发布账号 + 发布日 + 数据到没到;记录行=内容 + 确认人 + 时间 + 版本 + 状态 |
### 1.3 状态覆盖六项(逐页给结论)
判据源:`SKILL.md` 铁律 2 的六态清单。⚠️ 逐项**数值判据**出自供给可选档 `craft/state-coverage.md`,本轮未动用可选档 ⇒ **该项本次无供给来源**,故只给「有没有、长什么样」的结论,不编阈值。
| 页 | loading | empty | error | success | disabled | 无权限 |
|---|---|---|---|---|---|---|
| P1 | ✅ 矩阵数据加载中(骨架行) | ✅ 还没接入账号(给「去账号画像建第一个账号」) | ✅ 数据源不可用(显时间戳 + 重试) | ✅ 默认态 | ✅ 无可处理项时待办区禁用并说明 | ✅ 非管理员看利润字段时的遮罩说明 |
| P2 | ✅ 拉取对标中 | ✅ 监控名单为空(给「录一个对标号」) | ✅ 拉取失败(退路=手工录入) | ✅ 默认态 | ✅ 未选账号时「转入创作」禁用 | ✅ —(不适用:本页对所有角色开放) |
| P3 | ✅ 条目加载中 | ✅ 该分区还没有条目(给「去拆解一条」) | ✅ 读取失败(重试) | ✅ 默认态 | ✅ 无出处条目「入库」禁用(门禁) | ✅ —(不适用) |
| P4 | ✅ 环节生成中 | ✅ 该环节还没产出(给「开始这一步」) | ✅ 本步失败(保留已产出 + 重试该步) | ✅ 默认态 | ✅ 文案与封面缺一,「进检查态」禁用(封面缺只提示;F6 守卫) | ✅ —(不适用) |
| P5 | ✅ 检查中 | ✅ 还没有可发布的版本(回 P4) | ✅ 检查自身失败 ⇒ **按不过处理**(fail-closed) | ✅ 无硬拦、可发 | ✅ 有硬拦项时「确认发布」禁用 | ✅ 未授权账号的版本标「无发布权限」并禁用该版 |
| P6 | ✅ 画像加载中 | ✅ 还没有画像(给「建画像」) | ✅ 保存失败(保留编辑内容) | ✅ 保存成功提示 | ✅ 只读角色时字段禁用 | ✅ 非本人负责账号:可看不可改 |
| P7 | ✅ 读数据中 | ✅ 还没有可复盘的内容 | ✅ 数据读不到 ⇒ 转手工录入表现 | ✅ 回写成功提示 | ✅ **未确认归因(`confirmed` 未置)时「回写」禁用**(F10 前置开关) | ✅ —(不适用) |
| P7 后半(原 P8) | ✅ 记录加载中 | ✅ 还没有发布记录 | ✅ 读取失败(重试) | ✅ 核销成功 | ✅ 未选中记录时「核销」禁用 | ✅ 利润列对非管理员隐藏(列级遮罩) |
> 口径:`disabled` 与 `无权限` 是两件事 —— 前者是「当前条件不满足」(自己能解开),后者是「角色不允许」(自己解不开)。界面文案分开写,⛔ 不拿「不可用」一句话糊过去。
> 🔴 V4 追加:P6 的「平台账号」块**逐行**给「登录态 + 授权状态」(状态标),未登录/未授权时行内动作改成「去登录」。它落在六态的 `disabled` 里(条件未满足、自己能解开),⛔ 不新造第七种态。
---
## 二、令牌表
### 2.1 三层结构(`primitive → semantic → component`)
组件层只引语义层,语义层只引 primitive;⛔ 无孤立 token。
### 2.2 色值(来源=选定套 `design-system-tiaoyue` 亮色基线 · 9 页 clipper 实测)
| 语义 token | 值 | 用途 |
|---|---|---|
| `--paper` | `#faf9f5` | 页面底(暖白纸感) |
| `--surface` | `#ffffff` | 面板 / 卡片底 |
| `--surface-soft` | `#f7f6f1` | 次级面(表头、只读块、侧栏组标底) |
| `--ink` | `#1a1a18` | 主文字 |
| `--ink-mute` | `#57564f` | 次级文字 |
| `--ink-faint` | `#8a887f` | 三级文字 / 占位 / 组标(⛔ 只用于非正文) |
| `--line` | `#e7e5dc` | 分隔线(行间 `border-top`) |
| `--line-soft` | `#efeee7` | 更弱的分隔(块内) |
| `--accent` | `#9E4CFF` | 主强调色(品牌紫) |
| `--accent-text` | `#963dff` | accent 当**文字**时用这一档 |
| `--on-accent` | `#FFFFFF` | 主色上的文字 |
| `--ok` | `#3d7a4f` | 成功态 |
| `--err` | `#b4453a` | 错误态 |
| `--warn` | `#8a5a00` | 提醒 / 异常值 / 软劝。**本项目追加**:选定套亮色基线没有 warn 档,而②段 P5 要求「硬的拦住、软的只提醒」要有两种可见区分 ⇒ 新增一档并登记实测对比度 |
**强调色允许位置**:① 主按钮填充底;② 侧栏当前项与分段控件选中项的**整块浅底**;③ 链接文字(用 `--accent-text`);④ 焦点环。⛔ 不允许出现在页面大背景、卡片底、图标填充(除主按钮内图标)、任何渐变。全屏面积 ≤5%。
**禁止**:⛔ 无紫→粉渐变;⛔ 无装饰性发光;⛔ 状态色只用红/绿/黄三系,不做装饰。
### 2.3 几何 · 字体 · 间距 · 字阶 · 高度层级 · 脚手架
| 项 | 值 | 来源 / 说明 |
|---|---|---|
| 字体 | `"PingFang SC", -apple-system, BlinkMacSystemFont, "Segoe UI", "Microsoft YaHei", "Noto Sans SC", sans-serif` | 选定套实测:源站 `@font-face` 为 0 条,走系统字体栈 |
| 标题字体(展示体) | `"Songti SC", "Noto Serif SC", "Source Han Serif SC", "SimSun", Georgia, serif`(正文仍走黑体栈);字重 ≤600 | 沿用上一版方案 A:宋体标题 + 黑体正文=两族对照,符合「字族 ≤2–3」。⛔ 未用 Inter / Roboto / `system-ui` 关键字 |
| 等宽数字 | `font-variant-numeric: tabular-nums` | 所有数字列,防刷新抖动 |
| 圆角 | 大容器 `24px`/面板 `16px`/行与小件 `14px`/输入框 `9px`/按钮 `26px`(药丸) | 全部取自选定套 |
| 间距 · 主刻度 | `4 / 8 / 16 / 24 / 32 / 64` | 供布局。块间用 32,块内 8/12/16 |
| 间距 · 微网格 | `2 / 4 / 6 / 8 / 12` | **仅供**按钮内衬、徽章内衬、图标间隙 |
| 块间距 / 块内间距 | 32 / 8–16 ⇒ 比值 2.0–4.0 | 判据要求 ≥2 ✅ |
| 字阶定值表(七档) | `--fs-12` 12 / `--fs-14` 14 / `--fs-16` 16 / `--fs-18` 18 / `--fs-20` 20 / `--fs-24` 24 / `--fs-30` 30 | 相邻差 2/2/2/2/4/6 全部 ≥2 ✅;每档只一个定值 |
| 高度层级(每层多层叠层) | L1(行/内嵌):`0 1px 1px rgba(26,26,24,.03), 0 2px 6px -2px rgba(26,26,24,.06)`<br>L2(面板):`0 1px 2px rgba(26,26,24,.04), 0 8px 20px -12px rgba(26,26,24,.14), 0 18px 40px -18px rgba(26,26,24,.10)`<br>L3(浮层):`0 2px 4px rgba(26,26,24,.05), 0 14px 32px -12px rgba(26,26,24,.18), 0 32px 64px -24px rgba(26,26,24,.16)` | 每层 ≥2 层叠层 ✅ |
| 布局脚手架 | 侧栏 `64px` 药丸浮栏(随内容高、列内垂直居中)+ 主区 `minmax(0,1fr)`;主数据块走满宽表格(`.ds-table.tbl-dense`);两栏分栏 `.grid-main-side` 宽比 `1.35fr : .9fr` | 骨架档=主区+侧区,已落到具体列宽 |
| 容器与对齐锚点 | 主区左右内衬 `32px`;表格与块标题左锚点同一条线;数字列右对齐且右锚点对齐块右内衬 | 判据要求「对齐锚点」写明 |
| 浮层 | 居中面板,宽 `min(560px, calc(100vw - 32px))`,内衬 `24px`;**只有一个可见关闭出口**(右上 ×);遮罩与 `Esc` 也可关,但不计为可见出口 | 满足 Gate-3「可见关闭出口唯一」 |
### 2.4 交互清单(唯一交互真相源 · 四列)
**通用规则**(适用于下面所有浮层):每个浮层**只有一个可见关闭出口**(右上 ×,ID `X-close`);遮罩点击(`X-mask`)与 `Esc` 也能关,但**不视为可见出口**;关闭后焦点回到触发它的那个按钮,Tab 只在层内循环。下表不逐浮层重复这三条。
| ID | 元素 | 触发 | 反馈 | 何时不可点 |
|---|---|---|---|---|
| G-05 | 侧栏七个功能项(一层七项,一项一页;⛔ 无组标、⛔ 无第二层) | 点击 | 切到该页(hash 变、主区重绘);当前项转整块浅紫底 + `--accent-text` + 600 | 从不可点 |
| G-06 | 顶栏「随手记」 | 点击 | 打开随手记浮层,焦点进输入框 | 从不可点 |
| G-08 | 两处「假设」徽章(P1 页头 / P7「商单与收支」块头) | 点击 | 打开假设浮层(逐条给复核人 / 时机 / 落点) | 从不可点 |
| X-close | 各浮层右上 × | 点击 | 关闭浮层;焦点回触发它的按钮 | 从不可点 |
| X-mask | 浮层遮罩(层外空白区) | 点击 | 关闭浮层;焦点回触发它的按钮 | 没有浮层时不渲染 |
| SP-01…SP-07 | 各页**页面标题行右侧**的 icon 按钮(页面级动作:刷新本页数据;⛔ 不另起一行) | 点击 | 提示「已刷新本页数据」;不改数据 | 从不可点 |
| STATE-NORMAL | 状态面板 ·「回到正常内容」 | 点击 | 该页回 `ok` 态,主操作恢复 | 仅在非 `ok` 态出现 |
| STATE-RETRY | 出错态 ·「重试一次」 | 点击 | 提示已重试(示意);不改数据 | 仅在 `error` 态出现 |
| STATE-GO | 空态 ·「去〈某页〉」 | 点击 | 跳到该页;面板关 | 仅在 `empty` 态且该页定义了去处时出现 |
| R-01 | 随手记浮层 · 输入框 | 输入 | 内容非空时「保存」由禁用转可用 | 从不可点(可输入) |
| R-02 | 随手记浮层 · 保存 | 点击 | 写入选题库「待做」;提示 1.5s 后消失;浮层关闭 | 输入为空时 `:disabled` |
| R-03 | 随手记浮层 · 取消 | 点击 | 关闭,不写入;焦点回触发按钮 | 从不可点 |
| A-01 | 假设浮层 · 两处假设条目 | 展示 | 只读,逐条给复核人 / 时机 / 落点 | 不适用(只读,非控件) |
| P1-01 | 今日待处理项(每条) | 点击 | 跳到该待办所属的页(选题类→P2、在写→P4、待审→P5、待复盘→P7、待核销→P7 的记录区) | 从不可点 |
| P1-02 | 账号矩阵行名 | 点击 | 跳到 P6 并选中该账号(传 `accountId`) | 从不可点 |
| P1-03 | 账号矩阵行 ·「看复盘」 | 点击 | 跳到 P7 并选中该账号的待复盘内容(传 `accountId`) | 该账号没有可复盘内容时禁用 |
| P1-04 | 异常值提示条目 | 点击 | 跳到 P2 并带 `filter=异常值` 定位(传 `benchmarkId`) | 无异常值时整块显示空态 |
| P1-05 | 本月最好的一条 | 点击 | 跳到 P7 的该条复盘 | 无数据时禁用 |
| P1-06 | 全局检索 · 输入框 | 输入 | 结果列表按关键字过滤;无结果显示空态行 | 从不可点(可输入) |
| P1-07 | 全局检索 · 结果项 | 点击 | 跳到该结果所属的页;关键字清空 | 无结果时不渲染可点项 |
| P2-01 | 监控概览 ·「低粉爆款」数 | 点击 | 筛选对标内容列表(只看爆款) | 数为 0 时禁用 |
| P2-02 | 监控概览 ·「异常值」数 | 点击 | 筛选对标内容列表(只看异常) | 数为 0 时禁用 |
| P2-03 | 对标内容行 ·「发起拆解」 | 点击 | 跳到 P3 并带 `benchmarkContentId`(预填原文与出处) | 从不可点 |
| P2-04 | 评论区洞察 · 展开/收起 | 点击 | 展开子区并开始抓取(显示抓取中) | 从不可点 |
| P2-05 | 评论区洞察 ·「抓取评论」 | 点击 | 进入抓取中 → 出候选选题列表 | 抓取中时禁用 |
| P2-06 | 候选选题 ·「采纳」 | 点击 | 该条进选题库「待做」;候选行标为已采纳 | 该条已采纳时禁用 |
| P2-07 | 候选选题 ·「忽略」 | 点击 | 候选行标为已忽略(可恢复) | 该条已忽略时禁用 |
| P2-08 | 选题库 · 进度 tab(待做/在写/已用) | 点击 | 列表切换成该进度组 | 从不可点 |
| P2-09 | 选题行 ·「转入创作」 | 点击 | 建/切当前 `Content` 并跳到 P4;选题转「在写」(流转 8) | 未选账号时禁用(行内说明) |
| P2-10 | 选题行 ·「拆解」 | 点击 | 跳到 P3 并把该选题当素材 | 从不可点 |
| P2-12 | 选题库 · 类型 tab(全部/选题/对标线索/评论洞察/数据异动/灵感) | 点击 | 列表按该类型过滤(与进度维度正交,两个维度的筛选同时生效) | 从不可点 |
| P2-AUX | 辅助入口区 ·「开始创作」 | 点击 | 跳到 P4(不带条目,落在当前内容上) | 从不可点 |
| P3-01 | 分区切换 tab(角度/结构/开场白/标题) | 点击 | 条目列表换成该分区 | 从不可点 |
| P3-02 | 条目行 | 点击 | 右区显示单条详情(原文 / 出处 / 草稿标记) | 从不可点 |
| P3-03 | 单条详情 ·「入库」 | 点击 | 无出处条目被门禁挡并说明原因;有出处的转「已入库」 | **无出处或原文缺失时禁用**(门禁) |
| P3-04 | 引用入口 ·「引用到创作台」 | 点击 | 跳到 P4 并把该条目加进资产引用区(流转 9) | 从不可点 |
| P4-01 | 创作流程 · 七个环节(逐项) | 点击 | 切到该环节;只许回退到已完成的环节 | 未到达的后续环节禁用 |
| P4-02 | 当前环节工作区 · 内容输入框 | 输入 | 「开始这一步」由禁用转可用 | 从不可点(可输入) |
| P4-03 | 当前环节工作区 ·「开始这一步」 | 点击 | 生成中 → 产出写进「AI 产出与采纳」(⛔ 不进正文) | 输入为空时禁用 |
| P4-04 | 资产引用 ·「从资产库拿一条」 | 点击 | 展开选择器;选中后收进引用区并显示来源 | 资产库为空时禁用并说明 |
| P4-05 | 资产引用 ·「移除引用」 | 点击 | 从引用区移除该条 | 引用区为空时不渲染 |
| P4-06 | 「推进到下一环节」 | 点击 | 当前环节 +1;流程与工作区跟着变 | 文案与封面缺一、进检查态时禁用(封面缺只提示;F6 守卫) |
| P4-07 | AI 产出与采纳 ·「采纳」 | 点击 | 机器产出并入本环节正文 | 无未裁决产出时禁用 |
| P4-08 | AI 产出与采纳 ·「驳回」 | 点击 | 正文不变;产出标为已驳回 | 无未裁决产出时禁用 |
| P4-09 | AI 产出与采纳 ·「改后再用」 | 点击 | 保留人的版本;产出标为改后再用 | 无未裁决产出时禁用 |
| P4-10 | AI 产出与采纳 ·「中断生成」 | 点击 | 停掉本步生成 | 仅在生成中出现 |
| P4-11 | 版本管理 ·「按平台账号展开」 | 点击 | 母版展开出多版本(每个版本绑一个**平台账号**,一个平台账号一版,F7) | 未到成稿态时禁用 |
| P4-12 | 版本管理 · 版本行「切为当前版」 | 点击 | 该版标为当前版;当前内容上下文的版本号跟着变(F8) | 该版已是当前版时禁用 |
| P4-13 | 录制卡片与画板 ·「生成卡片」 | 点击 | 成稿态生成一张卡片(F14) | 未到成稿态时禁用 |
| P4-14 | 录制卡片与画板 ·「同步到画板」 | 点击 | 卡片落到画板,可打开 | 还没有卡片时禁用 |
| P4-AUX | 辅助入口区 ·「查账号口径」 | 点击 | 跳到 P6 并选中当前账号(流转 11) | 从不可点 |
| PICK-ASSET | 资产选择器 · 单条 | 点击 | 收进引用区并显示来源;浮层关 | 已引用过的不渲染可点项 |
| P5-01 | 目标选择 · 展开/收起 | 点击 | 展开**两级**目标选择(内容账号 → 它下面的平台账号) | 从不可点 |
| P5-02 | 目标选择 · 内容账号项 | 点击 | 勾选/取消该内容账号;**连它下面的平台账号(渠道)一起增删**,版本列表跟着变 | 从不可点 |
| P5-03 | 目标选择 · 平台账号项(渠道) | 点击 | 勾选/取消一个平台账号;版本列表跟着增删一版(一版一路) | 从不可点 |
| P5-04 | 各版本 · 版本 tab(逐版) | 点击 | 右区换成该版内容 | 从不可点 |
| P5-05 | 版本内容编辑框 | 输入 | 「保存本版」由禁用转可用;标为「已改」 | 从不可点(可输入) |
| P5-06 | 版本内容 ·「保存本版」 | 点击 | 该版内容更新;检查结果跟着重算(回到未检) | 无改动时禁用 |
| P5-07 | 检查结果 ·「复检」 | 点击 | 检查中 → 出结论(硬拦 / 软劝 / 通过) | 检查中时禁用 |
| P5-08 | 「确认发布」 | 点击 | 打开二次确认浮层 | **有硬拦项时禁用**;无版本时禁用 |
| P5-09 | 二次确认 ·「确认发出」 | 点击 | 写发布记录(复盘页的记录区出现一条);提示成功(流转 14) | 从不可点 |
| P5-10 | 二次确认 ·「取消」 | 点击 | 关闭浮层,不发;焦点回触发按钮 | 从不可点 |
| P5-11 | 发布记录 · 记录行 | 点击 | 跳到 P7 并定位该记录 | 从不可点 |
| P6-01 | 账号列表项 | 点击 | 切换右区画像 | 从不可点 |
| P6-02 | 画像**五维**字段(定位/风格/受众/偏好与红线 + 长期记忆,共 5 个输入) | 输入 | 「保存画像」由禁用转可用 | 非本人负责账号时禁用(改由角色判定) |
| P6-03 | 「保存画像」 | 点击 | 保存成功提示;未保存时离开给提示 | 无改动时禁用 |
| P6-04 | 记忆条目 · 展开/收起 | 点击 | 展开记忆列表(只追加,不可编辑) | 从不可点 |
| P6-05 | 关联内容行 | 点击 | 跳到 P4 的该条内容 | 无关联内容时整块空态 |
| P6-06 | 平台账号行 ·「去登录/重新授权」 | 点击 | 该行登录态与授权状态一起转「已登录 · 已授权」 | 从不可点 |
| P6-07 | 平台账号 ·「加一个平台账号」 | 点击 | 该内容账号下多一个平台账号,初始「未登录 · 未授权」 | 从不可点 |
| P7-01 | 待复盘项 | 点击 | 右区换成该条的表现数据 | 从不可点 |
| P7-02 | 表现数据 ·「手工录入」 | 点击 | 数据读不到时的降级入口,展开输入 | 数据已读到时不渲染 |
| P7-03 | 归因结论 · 文本 | 输入 | 「采纳这条归因」由禁用转可用 | 从不可点(可输入) |
| P7-04 | 确认与改判 ·「采纳这条归因」 | 点击 | `confirmed` 置真 ⇒ 「确认归因并回写」转可用(**前置开关**) | 归因为空时禁用 |
| P7-05 | 确认与改判 ·「驳回」 | 点击 | 标为已驳回;回写按钮保持禁用 | 归因为空时禁用 |
| P7-06 | 确认与改判 ·「改后再用」 | 点击 | 标为改后再用;回写按钮保持禁用 | 归因为空时禁用 |
| P7-07 | 回写目标提示 ·「确认归因并回写」 | 点击 | 回写到当前账号画像:记忆 +1;显示回写目标(流转 17) | **未采纳归因(`confirmed` 为假)或未选账号时禁用** |
| P7-08 | 历史复盘 · 展开/收起 | 点击 | 展开历史复盘结论 | 从不可点 |
| P7-09 | 发布记录行 | 点击 | 右区换成该条的对账详情 | 从不可点 |
| P7-10 | 单条溯源 · 展开/收起 | 点击 | 展开溯源:从记录回到内容与版本 | 从不可点 |
| P7-11 | 对账核对区 ·「核销」 | 点击 | 二次确认 → 该条标「已核销」 | 未选记录时禁用;记录未「已发布」时禁用 |
| P7-12 | 商单与收支 · 展开/收起 | 点击 | 展开收支条目(F12 标 `P2/Deferred`) | 从不可点 |
| CHECKOUT-OK | 核销二次确认 ·「确认核销」 | 点击 | 该条标「已核销」;提示成功;浮层关 | 从不可点 |
| CHECKOUT-CANCEL | 核销二次确认 ·「取消」 | 点击 | 关闭浮层,不核销;焦点回触发按钮 | 从不可点 |
⚠️ **「可见关闭出口」与「决策型关闭」是两件事**:每个浮层的中性关闭出口只有一颗 ×(`X-close`),恰好 1 个;「取消」这类带决策语义的按钮也能关层,但它不是「找出口」用的,**单独登记**(`R-03` / `P5-10` / `CHECKOUT-CANCEL`)。⛔ 不把两类混成一个数。
**表外可点元素必须为 0** —— 自检里有一条逐集合做双向差集的检查(`#/selftest` 自动跑)。
⚠️ **`A-01` 不是控件**:它是假设浮层里的只读展示行,列出来是为了「假设有两处、逐条给复核人/时机/落点」这件事在清单里看得见 ⇒ **不进实现清单**(原型里的 `IMPL` 表),自检也不拿它去点。
⚠️ **V1 撤销的 7 个 ID 与 V2 再撤 5 个**:V1 撤 `G-01…G-04`(一级组)/`G-07`(账号切换器)/`G-09`(演示开关)/`G-11`(收起侧栏)。V2 因「功能入口」那一层整体撤销,再撤 `card()` 相关的 `data-page` 用法;因「全局检索」从浮层改为 P1 的业务板块,撤掉检索浮层与其 `S-01`/`S-02`(改由 `P1-06`/`P1-07` 承担)。⛔ 撤销一个 ID 时必须同时把它的 DOM 删掉,否则判据「页面上每个 `data-act` 都在清单里」会报红。
⚠️ **V4 撤 1 个、新增 3 个**:V4 因「灵感速记」不再是 P2 的业务板块(随手记本就有全局入口 `G-06`,那个页内按钮是重复),撤 `P2-11`;新增 `P2-12`(选题库的**类型**维度 tab —— 选题库现在两个正交维度:进度 `P2-08` + 类型 `P2-12`)与 `P6-06`/`P6-07`(平台账号的登录授权与新增,对应 P6 新板块)。⛔ 三个新 ID 的 DOM 必须同时在页面上,否则判据「清单里每个 ID 都在页面上出现过」会报红。清单共 **90 个 ID**(V3 是 88)。
### 2.5 组件规格(来源:选定套既有组件族)
| 组件 | 规格(具体值) | 来源 |
|---|---|---|
| 按钮 · 主档 | 高 `40px`,内衬 `12/20`,字号 `16px`,字重 `600`,圆角 `26px`,底 `--accent`,字 `--on-accent` | 选定套 `--btn-*`;字号 16 + 600 是**必须的**(`#FFFFFF` 压 `#9e4cff` 只有 4.26:1,须走大字线 3:1) |
| 按钮 · 次档 | 高 `40px`,内衬 `12/20`,字号 `14px`,字重 `500`,圆角 `26px`,底 `--surface`,描边 1px `--line`,字 `--ink` | 同族 |
| 按钮 · 弱档(文字) | 高 `32px`,内衬 `6/12`,字号 `14px`,圆角 `26px`,无底无描边,字 `--accent-text` | 同族 |
| 卡片 · 密卡 | 内衬 `16px`,圆角 `16px`,底 `--surface`,L1 阴影 | 同族 |
| 卡片 · 宽松卡 | 内衬 `24px`,圆角 `24px`,底 `--surface`,L2 阴影 | 同族 |
| 输入框 | 高 `36px`,内衬 `12/10`,圆角 `9px`,字号 `14px`,底 `--surface`,描边 1px `--line` | 同族 |
| 徽章 / 状态标 | 高 `22px`,内衬 `2/8`,字号 `12px`,圆角 `999px`,无描边,底为对应状态色 8% 叠加 | 同族 |
| 侧栏(`.sidebar`) | **药丸浮栏**:宽 `64px`、内衬 `3px`、圆角 `100px`、底色 `color-mix(in srgb, var(--ink) 5%, transparent)`、描边 `1px color-mix(in srgb, var(--ink) 12%, transparent)`;高度随内容、`align-self:center` 在 `64px` 列里垂直居中;品牌只留标记并居中(`.sidebar .brand-name` 隐藏) | 形态与宽度取自选定套 `.app-sidebar`(`w-16` ⇒ `64px`)+ 第八轮实测值(栏 64/内衬 3/圆角 100);V5 由 `128px` 改回基准形态(理由见 §1.1 ⑤) |
| 侧栏导航项(`.nav-item`) | **竖排**:宽 `56px`(=栏内容宽)、高 `78px`、内衬 `8/0`、圆角 `999px`、**图标在上 `24px`、名字在下 `12px/500/行高 16`**、图标与名字间距 `6px`;名字**两字常驻**(说明走悬停提示 `title` 与读屏 `aria-label`);计数徽章悬在项右上角;项间 `gap 2px`;hover 只换底色(`--tfast`),⛔ 不移位、⛔ 不加阴影 | 形态照选定套 `nav-item`(药丸、只换色);V5 因栏收到 `64px` 由横排改**竖排**(实测值:项 56×78、字 12px-500-行高 16) |
| 侧栏当前项(`.nav-item.is-active`) | 整块浅紫底 `color-mix(in srgb, var(--accent) 10%, var(--paper))` + 字色 `--accent-text` + 字重 `600`(⛔ 不用单侧色条、⛔ 不用描边变黑) | 与 §1.1 ⑩ 第 6 条「选中态只有一套画法」一致 |
| 页面公共框架(`.page-shell` / `.page-shell-title` / `.page-shell-stats` / `.page-shell-aux`) | 标题区:`h1` + 一行说明;**本页页面级动作 = 标题行右侧的 icon 按钮**(`.btn-icon` + `.shell-refresh`,靠 `margin-left:auto` 右对齐;例:刷新本页数据;⛔ 不另起一行);统计区用 `.stat-item`(白底 + 1px `--line` + 圆角 `16px` + 内衬 `12/16`,值 `20px/600` + `tabular-nums`,标签 `12px` `--ink-mute`);辅助入口区最多一个入口。⛔ 这一层**不带 `.block` / 不带 `.block-head h2`** | 落 `2b` §四:它不算板块数、不参与功能归属、不占冻结计数。V5 撤掉原「操作区」那一行 —— 页面级动作改挂标题行右侧 |
| 满宽表格(`.ds-table.tbl-dense`) | 容器 `.panel` + `.table-wrap`(`overflow-x:auto`);表头 `12px/600` `--ink-mute` + 下边框 1px `--line`;行内衬 `4/8`、行间 `border-top` 发丝线、单元格 `vertical-align:middle` + `nowrap` | 密度契约(一屏 ≥6 行)逼出来的紧凑档 |
| 栏内表(`.ds-table.tbl-side`) | 两栏**栏内**的列表:内衬同上,但 ⛔ **不套 `nowrap`** | 同上,只在窄栏里用 |
| 行级微按钮(`.btn-micro`) | 高 `22px`、内衬 `0/8`、字号 `12px`、圆角 `999px`、无底、字色 `--accent-text`、`:disabled` 时透明度 `.45`。⛔ 表格行里不许用 32px 的 `.btn-sm` | 同上 |
| 分段控件(`.seg` / `.seg-item`) | 容器 `gap 4px` + 可换行;项高 `32px`、内衬 `0/12`、圆角 `999px`、描边 1px `--line`、白底;选中项 `.is-on` =整块浅紫底 + `--accent-text` + 600 + 描边转 `--accent` | 选中态统一 |
| 表单字段(`.field`) | 字段块间距由 `.field + .field{ margin-top:16px }` 出 | 统一 |
| 表格当前行(`.cell-name.is-on`) | 当前行的行名转 `--accent-text`(选中态在表格里的落法,⛔ 不写内联 `color`) | 统一 |
| 两栏分栏(`.grid-main-side`) | 宽比 `1.35fr : .9fr`;左=上下文/列表,右=产出/动作/详情;主数据块仍满宽。`≤900px` 落单列 | 沿用 |
| 图标(唯一出口 `navSvg(page,size)`) | `viewBox 24` / `fill:none` / `stroke:currentColor` / `stroke-width:2` / 圆头圆角;尺寸只有两个用法:侧栏 `24px`、`≤640px` 的 `16px`;颜色只有一处 `--accent-text`(当前项走 `currentColor`) | 沿用 |
> 同屏主档按钮 ≤1(多步流程每步 ≤1):P1 无主档、P2/P3/P4/P5/P6/P7 各 1 个 ✅(P7 前后两半各有一个推进动作,但同屏只出当前上下文那一个)
> 实底底色 ≥2 种:主档 `--accent`、次档 `--surface`、状态标(ok/err/warn 三色 8% 叠加)✅
---
## 三、两处假设的显式标注(⛔ 不当已确认需求用)
②段 `2b` §七 标了两处骨架受限(第 1 条 P1 形态 / 第 2 条 P7 第 10 板块「商单与收支」)。本轮**尚无用户结论** ⇒ 按②段给的默认读法做,并在本份与原型里显式标注:
| # | 受影响处 | 假设内容 | 本轮默认读法 | 复核人 | 复核时机 | 结论落点 |
|---|---|---|---|---|---|---|
| 假设 1 | **P1 的形态** | 矩阵级视图是否真需要(1a 待复核第 5 条 + A1) | **按「需要矩阵级视图」做**:P1 = 矩阵总览,5 个板块全在。若复核为「不需要」,P1 降为「单账号今日」,只留第 1、4 板块,矩阵列表下移到账号切换 | 主会话转用户 | ②段收口时一次性过 | `2b` §七 + §五 P1;本轮落 `ui/DESIGN.md` 本节 + 原型 P1 页头的「假设」徽章 |
| 假设 2 | **P7 后半段第 4 板块「商单与收支」**(原 P8 的第 4 板块) | 商单对账进不进第一版、收支口径是否内容级(1a 待复核第 6 条 + A3) | **按「进第一版但属 P2、可整块缺」做**:第 4 板块**渲染出来但标「可点入 + 假设」**,展开后给一句「本块依赖未复核项」。它前面那 3 块(发布记录/单条溯源/对账核对区)不受影响 | 主会话转用户 | 同上 | `2b` §七 + §五 P7;本轮落 `ui/DESIGN.md` 本节 + 原型 P7 后半段第 4 板块标题行的「假设」徽章 |
**原型的兑现方式**:两处各在自己的**板块标题同行右侧**挂一个「假设」徽章,**徽章本身可点**(`G-08`)—— 点开后逐条给出复核人 / 时机 / 落点。⛔ 假设既没有被当已确认需求写死,也没有被编出答案。
---
## 四、Gate-1 方向门自检(硬闸,结果写在本份末尾)
逐条结论在 §八(十七行,含本轮现取的实测依据);逐视口表在 §6.1。
---
## 五、缺口与证据边界(⛔ 不假装支持)
1. **反 AI 味 / 无障碍 / 表单校验 / 动效纪律的逐项数值判据本次无供给来源** —— 这四项出自 §供给·工艺数值判据的**可选档**(`assets/open-design/craft/` 13 份),本轮未动用可选档 ⇒ ⛔ 不凭感觉编一套顶上。本段实际应用的是**默认档**判据:`execution-runbook.md` §3.3/§3.4 + `layouts-tooling.md` §5.5。
2. **暗色主题本轮不做** —— 选定套的暗色与亮色是两套独立基线,规则是「要暗色就整套切」。⇒ 本轮只做亮色基线,⛔ 不与暗色混搭。
3. **`--warn` 是本项目追加的第 14 个语义色** —— 选定套亮色基线只有 ok/err,无 warn;而②段 P5 要求软硬两种区分。追加值的对比度实测记在 §六。
4. **`1c-用户画像.md` 是零访谈画像** —— 界面里凡涉及「角色能看什么」的判据都基于它,**不得对外说成基于用户调研**。
5. **3c GPT 参考版本轮不做** —— 派活单明令「⛔ 不许再向外发送本项目内容」(第②棒曾把产品现状发到站外,属红线动作)⇒ 本轮**全部输入只看本地文件**,⛔ 不上传、不外发、不用站外模型服务。⇒ `3c` 的「让外部模型独立出一版」这一步本轮**按红线停做**,并在收尾明示「未取得参考版 ≠ 已通过」。这是**红线优先于流程**的处置,不是漏做。
6. **窄视口实测下限与红档** —— 本轮取证走 CDP 声明式视口(`Emulation.setDeviceMetricsOverride`),实测到 `390×844`;逐视口表(§6.1)现含 `390×844` 一档,⛔ 不写「已测 375」这种没测过的。🔴 **V5 整表 16 档全量重跑**:不达标由 **3 档降到 2 档** —— 只剩 `500×844`(P1 5 行)与 `390×844`(P1 2 行);`560×900` 的 P1 由 5 行升到 **6 行**、该档转绿(`逐视口:不达标 2 / 共 16`)。P1 首行顶逐档下移 `43~52px`(`669…822` → `626…779`),行数逐档上升(宽屏 7 → **8~9 行**,`390×844` 由 0 → 2 行;P2 由 12 → **14** 行、`390×844` 由 5 → **6** 行,也过线)。⇒ 两处改动各自兑现:① **页面级动作不再独立占一行**(省掉「按钮 32px + 下边距 12px」)⇒ 首行顶直接下移 ~44px;② **侧栏 `128 → 64px`** ⇒ 主区宽 64px、满宽表格列更宽 ⇒ P2 行数上升。⚠️ 这与 V2/V3「侧栏宽度对首行顶没有影响」**不矛盾** —— 那两次只动栏宽(`184→128px`),这次同时动了「撤掉操作区整行」+ 栏宽两件事,首行顶的变化主要来自前者,⛔ 别把这条读反。是否动窄屏断点,仍待用户裁定。
7. **规格核对只走本地已测值** —— §六 的实测值全部由 `#/selftest` 与 `_tools/` 现算,⛔ 不目测。上一版留档的两处遗留(`500×844` 一屏 −1 行、满宽表格与一屏 ≥6 行不可兼得)本轮**重测后如实登记**,⛔ 不靠改判据过关。
8. **②段那处内部不一致已订正(V3 登记 → V4 关闭)** —— V3 登记过:`2b` §五 P2 的板块清单把「灵感速记」列为第 5 块,而同页信息分档表把它标成「全局可达(框架层,不占板块)」,两处打架。🔴 V4 按用户口径(选题库容纳「对选题有帮助的任何信息」、随手记仍落选题库)**把两处统一**:灵感速记**不再是板块**,P2 由 5 块收成 4 块;现在板块清单与信息分档表一致。骨架总数仍 39(P2 −1、P6 +1)。
9. **定时发布本轮挂起(⛔ 不进界面)** —— 用户口径逐字(2026-10-10 07:56):「后续具体做投放功能的时候在说」。⇒ 本段**不写**定时发布:⛔ P5 不加「定时设置」块、⛔ 不加状态、⛔ 不改流转。登记在②段 `2a` §九 第 7 项与 `2b` §十 第 7 项,真做投放功能时再议。
---
## 六、数值取证登记(自检 + 工具实测回填,⛔ 非目测)
> 本表由 3b 阶段现算回填,数据源:`#/selftest`(DOM 取值 + 真实像素)+ `_tools/` 八个脚本。⛔ 一个数都不许拍脑袋。
> **Gate-1 方向门的逐条结论 + 实测依据在 §八**(全文结尾,⛔ 不在这里再抄一遍)。
> 此处只放一条 `DESIGN.md` 独有的登记:**逐视口表**(自检全文、27 条变异、四条反向变异、八条改动明细见 `ui/3b-实测记录.md`;两处冲突以 `3b-实测记录.md` 为准)。
### 6.1 逐视口表(16 档;契约:一屏可见行数 ≥6 / 900px 高,`layouts-tooling.md` §1,⛔ 不分档)
`P1 顶` = P1「账号矩阵」首行距视口顶的像素。全部走 CDP 声明式视口(只连 9223 已有实例)。
| 视口 | 自检 | P1 首行顶 | 行距 | P1 行数 | P2 行数 | 顶栏 | 侧栏 | 判定 |
|---|---|---|---|---|---|---|---|---|
| 1440×900 | 80/0 | 626px | 31px | 8 | 14 | 49px | 64×606 | ✅ |
| 1280×900 | 80/0 | 626px | 31px | 8 | 14 | 49px | 64×606 | ✅ |
| 1024×900 | 80/0 | 626px | 31px | 8 | 14 | 49px | 64×606 | ✅ |
| 1000×900 | 80/0 | 626px | 31px | 8 | 14 | 49px | 64×606 | ✅ |
| 960×900 | 80/0 | 626px | 31px | 8 | 14 | 49px | 64×606 | ✅ |
| 920×900 | 80/0 | 626px | 31px | 8 | 14 | 49px | 64×606 | ✅ |
| 901×900 | 80/0 | 626px | 31px | 8 | 14 | 49px | 64×606 | ✅ |
| 900×900 | 80/0 | 618px | 31px | 9 | 14 | 49px | 64×606 | ✅ |
| 840×900 | 80/0 | 618px | 31px | 9 | 14 | 49px | 64×606 | ✅ |
| 820×900 | 80/0 | 618px | 31px | 9 | 14 | 49px | 64×606 | ✅ |
| 768×900 | 80/0 | 618px | 31px | 9 | 14 | 49px | 64×606 | ✅ |
| 700×900 | 80/0 | 618px | 31px | 9 | 14 | 49px | 64×606 | ✅ |
| 640×900 | 80/0 | 671px | 31px | 7 | 12 | 49px | 640×53 横滚标签条 | ✅ |
| 560×900 | 80/0 | 686px | 31px | 6 | 12 | 49px | 560×53 横滚标签条 | ✅ |
| **500×844** | 79/**1** | 686px | 31px | **5** ❌ | 10 | 49px | 500×53 横滚标签条 | ❌ |
| **390×844** | 79/**1** | 779px | 31px | **2** ❌ | 6 | 49px | 390×53 横滚标签条 | ❌ |
**绿 14 档 / 红 2 档**(`run_viewports.py`:`逐视口:不达标 2 / 共 16`)。行距在所有档恒为 `31px`、行高齐(差 ≤2px)⇒ 红只出在 **P1 首行顶太高**(626 → 779px)。
> 🔴 **V5 重跑(整表 16 档全量重算,⛔ 不是沿用 V4 的数)**:`run_viewports.py` 输出 `逐视口:不达标 2 / 共 16`。两处改动各自兑现:① **页面级动作不再独立占一行** ⇒ 首行顶逐档下移 `43~52px`(`669…822` → `626…779`),宽屏行数 7 → 8~9;② **侧栏 `128 → 64px`** ⇒ 主区宽 64px,满宽表格列变宽,P2 行数由 12 升到 14、`560×900` 的 P1 由 5 行升到 6 行 ⇒ 该档转绿。
>
> ⚠️ **与 V2/V3「侧栏宽度不影响首行顶」不矛盾**:那两次只动栏宽(`184→128px`),这次同时动了「撤掉操作区整行」+ 栏宽两件事;首行顶的变化主要来自前者,⛔ 不要把这条读成「栏宽这回就有影响了」。
>
> ⚠️ **`390×844` 能测 ≠ 达标**:它是契约要求留档的第二个视口,帧已出(PNG 尺寸当场比对通过),P1 装下 2 行、P2 6 行(P2 已过线)。
>
> 🔴 本轮**未动**窄屏断点,⛔ 也没有为了让数好看改判据;剩余两档(`500×844` / `390×844`)仍如实登记,是否动窄屏断点待用户裁定。
---
## 七、修订记录
| 轮次 | 改了什么 | 为什么 |
|---|---|---|
| V2 初版(2026-10-09) | ①**导航**由「一层八项平铺」改回「3 个业务组 + 1 个跨组入口」,侧栏由 `64px` 药丸浮栏加宽到 `184px` 带组标圆角浮栏;②**新增页面公共框架(Page Shell)**一层(标题区/数据摘要区/页面操作区/辅助入口区),并写明三条硬规则(不计板块数、不参与功能归属、不占冻结计数);③**撤销「功能入口」那一层**(`.sect-nav` / `.data-cards` / `.data-card` 与 `card()` 全部删除);④**骨架按新版 39 块重排**:P4 由 5 → 6、P7 由 5 → 6、P2 第 3 块注明可点入子区;⑤**对象冻结**:每个业务板块带 `data-obj`;⑥P7「确认与改判」落为回写的**前置开关**(`confirmed` 为假时回写禁用);⑦P4 版本管理承担 F7/F8、录制卡片与画板承担 F14;⑧撤销检索浮层(全局检索改为 P1 业务板块) | 按新版 `2a`/`2b` 重做第 4 步。逐条依据:`2b` §三/§四/§一第 2 条+§九第 2 条/§九第 8–15 条/§五(39 块);`2a` §一第 2 条、§三 F7/F8/F14、F10 |
| V2 复核棒(2026-10-09) | ①新增 `3b-实测记录.md`(自检 77 项全文、变异 20/20、三条骨架反向变异、16 档逐视口、四条改动明细);②本份补 §6.1 逐视口表 + §八 Gate-1 加「实测依据」列;③`_tools/` 补齐到 8 个脚本(新增 `tab_close.py`,`cap.py`/`grab_selftest.py` 改单标签复用);④`_gate_shots/` 补到 17 张视口帧 | 第 4 步只差「闸门取证 + 台账上报」。⛔ **未重做界面**:原型仅动 4 处(自检重入死循环守卫 / 「功能入口层残留」判据改八页逐页查 / `hashchange` 守卫回退 + 注释 / `check_skeleton.py` 判据由「互为前缀」收紧为「剥注解后严格相等」),几何与骨架一格未动 |
| **V3 本轮(2026-10-09,用户令)** | ①**P8 记录与对账整页并入 P7 复盘台**:`pageP8` 删除、四个板块接进 `pageP7`、动作 ID 由 `P8-01…04` 改 `P7-09…12`、`FROZEN` 的 p7 由 6 块改 10 块、`PAGES` 由八页收成七页;②**导航压成一层七项**(首页/选题/创作/投放/复盘/账号/资产,资产排最后):删 `NAV_GROUPS`/`NAV_CROSS` 与 `.nav-group`/`.nav-group-label`/`.nav-cross` 及其 `≤640` 规则,改 `NAV` 数组 + `renderNav()`;③**侧栏由 `184px` 收窄到 `128px`**,侧栏品牌名隐藏(顶栏已写全称),`.nav-item` 内衬 `0/12 → 0/8`;④**功能 ↔ 板块一一对应**做成机检:`FN_HOME`(功能→归属页)+ `FN_MAP`(页→板块→功能)+ 自检 5b-3 双向查;⑤自检新增 **3a-0 页集合正好七页**、3a/3b 重写为「一层七项、零组标、项名与顺序照用户口径」;⑥`renderSelftest()` 的兜底分支改成**吐可读输出**(原来崩了就不带 `#selftest-out`,取证工具全瞎) | 按用户口径改导航层级与 P8 归属,并同步 `2a`/`2b` V3。逐条依据:`2b` §〇/§三/§五 P7/§六 第 6·14·18 条/§九;`2a` §二/§三 F12·F13/§四/§十。⚠️ 侧栏收窄是③段的判断(几何不在样式库内):`184px` 的唯一理由是容下组名,组名撤掉后该理由消失 ⇒ **可推翻,改一处 `--nav-w` 即回退** |
| **V4 本轮(2026-10-10,八条口径)** | ①**P2 选题库加「类型」维度**:第二个 `.seg`(全部/选题/对标线索/评论洞察/数据异动/灵感)+ 选题行加「类型」列,与「进度」正交(新 ID `P2-12`;`TOPICS` 逐条补 `type`);②**P2 删掉「灵感速记」板块**(骨架 5 → 4 块),随手记只留全局入口(撤 `P2-11`);③**P3 职责改「统一管理」**,页面副标题与分档对齐,入库不限页;④**P4 版本管理**展开单位由「账号 × 平台」改「**平台账号**」(按钮文案、说明、`P4-11` 实现与提示同步);⑤**P5 目标选择改两级**:数据由 `targets:{accounts,platforms}` 改 `{accounts,channels}`,新增 `PLATS`(平台账号=渠道,带登录态/授权状态),摘要区「目标渠道数/覆盖平台数」,各版本块写死「一个平台账号一版(一版一路)」,`P5-02`/`P5-03` 改为「内容账号连带渠道一起增删」;⑥**P6** 画像六维 → **画像五维**(删「平台」这一维与 `PROFILES` 的 `平台` 字段),**新增「平台账号」板块**(骨架 4 → 5 块,新 ID `P6-06`/`P6-07`),账号行次级信息改成「平台账号数」;⑦`FROZEN`/`OBJ_MAP`/`FN_MAP` 三表同步(总数仍 **39**);⑧本份 §1.2/§2.4/§五/§6.1/§八/§九 全量同步 | 按用户 2026-10-09~10-10 的八条口径改②段两份并重做原型。逐条依据:`2b` §〇/§一/§五 P2·P3·P4·P5·P6·P7/§九;`2a` §一 第 2·4 条/§二 对象字典/§三 F2·F4·F7·F9·F13/§九。⛔ 页面数、导航一层七项、流转 20 条、令牌与几何**一格未动**;⛔ 定时发布按用户口径挂起,本轮不落 |
| **V5 本轮(2026-10-10,用户令两处)** | ①**侧栏改回设计供给的基准形态**:`--nav-w` 由 `128px` 改 `64px`,内衬 `8 → 3px`、圆角 `24 → 100px`;`.nav-item` 由「图标在左、名字在右」改**竖排**(图标在上 `24px`、名字在下 `12px/500/行高 16`、项 `56×78`、名字两字常驻,说明走悬停提示),计数徽章改悬右上角;`≤640` 的横滚标签条跟着改回横排小标签。②**刷新按钮改 icon 并挪到页面标题行右侧**:撤 `.page-shell-ops` 那一行与 `SP_LABEL` 七条文案,改 `.btn-icon` + `.shell-refresh`(`margin-left:auto` 右对齐,语义走 `title`/`aria-label`「刷新本页数据」);P4 同步。③自检新增 **3b-2 侧栏基准形态**、**3b-3 页面级刷新=标题行 icon** 两条判据;变异新增 **M25/M26/M27**(**27 / 27** 全过、基线回绿)。④`2b` §四 撤销「页面操作区」并同步七页框架行;本份 §1.1⑤/⑨/§2.3/§2.4/§2.5/§五 6/§6.1/§八/§九 全量同步 | 按用户 2026-10-10 两条口令:① `design-system-tiaoyue/SKILL.md` 行 95「左侧栏(`app-sidebar`,宽 `w-16`)」⇒ `w-16` = `64px` + 第八轮实测值;②「刷新按钮用 icon 按钮就行,一般和小标题一行、右对齐」。⛔ 导航项名与顺序、页数、每页板块、流转契约、其余任何交互**一格未动** |
---
## 八、Gate-1 方向门自检(硬闸)
> 结论列=本轮(V5)的判定;**实测依据**列=本轮现取的证据(自检项名 / 脚本名 / 变异编号 / 实测像素),⛔ 不是目测。全量证据见 `ui/3b-实测记录.md`。
> V3 比 V2 多两行(第 13、14 行):V3 的两条主判据(页集合与导航层级、功能 ↔ 板块一一对应)各自单列,⛔ 不并进邻行糊过去。
> V4 比 V3 多一行(第 15 行):那一轮的主判据是「八条口径落进骨架」。
> V5 比 V4 多一行(第 16 行):本轮的主判据是「侧栏回基准形态 + 刷新改 icon 挂标题行」,单列一行;⛔ 不借用第 2/13 那几行的旧结论糊过去。
| # | 检查项 | 结论 | 依据 | 实测依据(2026-10-09 复核棒现取) |
|---|---|---|---|---|
| 1 | 设计契约十二字段 | ✅ 过 | §一 | 十二字段全填,无空、无「待定」;重复项逐页列了次级信息 |
| 1b | 页型判定 | ✅ 过 | §一 | 自检「工具型纪律:零 `.eyebrow` / 零 `.lead` / 零 `.hero`」PASS;「`@keyframes` 共 0 处」PASS |
| 2 | 结构骨架(翻译面) | ✅ 过 | §1.1 ⑤ | 骨架档=主区+侧区(给了理由);②段分档表每条信息都有落位(§1.2 逐页核对) |
| 2b | 骨架未漂 | ✅ 过 | §1.2 | `_tools/check_skeleton.py` 正向 PASS:七页 **39 块**与 `2b-界面布局-新版.md` §五 逐页逐位一致;自检「骨架冻结:七页 39 个板块…逐位一致」PASS;反向变异 **M4**(塞板块)/**M19**(改页标题)/**M22**(页面表多一页)各报红 |
| 3 | 状态覆盖 | ✅ 过 | §1.3 | 六态逐页有结论;自检「六态 × 七页 = 42 个组合全部渲染出内容」PASS;`disabled` 与 `无权限` 分开写 |
| 4 | 令牌表 | ✅ 过 | §2.2/§2.3 | 自检实测对比度:`--warn` 对 surface = 5.93:1、`--accent-text` = 4.76:1、`--ink-faint` = 3.55:1(三条均过契约) |
| 4b | 字阶定值表 | ✅ 过 | §2.3 | 七档各一个 px(12/14/16/18/20/24/30),相邻差 ≥2;自检实测**在用** 5 档:12/14/18/20/24 |
| 4c | 高度层级 | ✅ 过 | §2.3 | L1/L2/L3 每层 ≥2 层叠层;自检「无单层死黑重阴影」PASS |
| 4d | 布局脚手架 | ✅ 过 | §2.3 | 侧栏 `64px` + 主区 `minmax(0,1fr)`;自检实测 1440×900:侧栏 **64×606px**、顶栏 49px、主区 clientH 851 / scrollH 1392 |
| 5 | 组件规格 | ✅ 过 | §2.5 | 按钮三档+卡片两档+输入框+徽章均为具体值;自检「首屏同屏主档按钮 ≤1 个」PASS |
| 6 | 反 slop | ✅ 过 | §2.2 | 无紫→粉渐变;标题走展示体;强调色填充实测最高 0.52%(契约 ≤5%,在创作台) |
| 7 | 拒绝清单 | ✅ 过 | §1.1 ⑩ | 共 **8** 条,每条带可判定判据(≥3 ✅);其中第 6/7/8 条由自检「组件口径」「Page Shell」「辅助入口区」三条判据 + 变异 M15 看住 |
| 8 | token 引用完整性 | ✅ 过 | §2.1 | 三层结构;组件层只引语义层、语义层只引 primitive;无孤立 token |
| 9 | 分档兑现 | ✅ 过 | §1.2 | 常驻=零点击可见、可点入=一次点击可达;档位未被本段改动(P7 前后两半合页后逐条重核) |
| 10 | 供给核对 | ✅ 过 | §〇 | 选定套 `design-system-tiaoyue`,与上一版一致(沿用同一套) |
| 11 | 对象冻结(本项目追加) | ✅ 过 | §1.1 ⑩ 7 | 自检「七页 39 个业务板块各带一个核心业务对象,取值全在 11 对象字典内」PASS;变异 **M17** 报红 |
| 12 | Page Shell 不占板块(本项目追加) | ✅ 过 | §1.1 ⑩ 7 | 自检「七页各恰好 1 个,且都不带 `.block` / 不带 `.block-head h2`」PASS;逐页 `.block` 数 = `FROZEN` |
| 13 | 页集合与导航层级(本项目追加,V3 新立) | ✅ 过 | §1.1 ⑤ | 自检「页集合正好七页,且与骨架表逐项相同(⛔ 页集合里没有 P8)」PASS +「导航一层七项…零组标 / 零跨组线」PASS +「导航七项与用户口径逐字一致、顺序相同…(资产排最后)」PASS;变异 **M21**(塞回组标)/**M22**(P8 复活)/**M16**(项名漂移)各报红 |
| 14 | 功能 ↔ 板块一一对应(本项目追加,V3 新立) | ✅ 过 | §1.1 ⑤ | 自检 5b-3「功能 ↔ 板块一一对应:14 条功能各自落到归属页的板块上,39 个板块每个至少挂一条功能(无悬空、无孤立)」PASS;变异 **M23**(归属漂移)/**M24**(悬空功能)各报红 |
| 16 | 侧栏回基准形态 + 刷新改 icon(本项目追加,V5 新立) | ✅ 过 | §1.1 ⑤ / §2.5 / `2b` §四 | ① 自检「侧栏基准形态:64px 药丸浮栏、导航项 56×78、图标在上(24px)名字在下(两字常驻);≤640 回横滚标签条」PASS;② 自检「页面级刷新:七页各 1 个 icon 按钮挂在页面标题行右侧(无文字、带 title/aria-label),⛔ 不再独立占一行」PASS;③ 变异 **M25**(栏宽回退)/**M26**(导航项横排回退)/**M27**(刷新又独立成行)各报红;④ 变异对照 **27 / 27** 全过、基线回绿;⑤ 逐视口 16 档整表重跑:不达标由 3 档降到 **2 档**(`560×900` 转绿),P1 行数逐档上升 |
| 15 | 八条口径落进骨架(本项目追加,V4 新立) | ✅ 过 | §〇 / §1.2 / §2.4 | ① 骨架冻结「七页 **39** 个板块…逐位一致」PASS(P2 由 5 收 4、P6 由 4 增 5,一减一加);`_tools/check_skeleton.py` 正向 PASS;② 自检「页集合正好七页」「导航一层七项」「功能 ↔ 板块一一对应」三条全 PASS ⇒ 口径改的是**页内构成**,页集合/导航/流转一格未动;③ 交互清单 90 个 ID「无悬空、无未登记、0 死控件」PASS(撤 1 新增 3 已同步);④ 变异对照 **24 / 24** 全过、基线回绿;⑤ 逐视口 16 档整表重跑,不达标仍 3 档(与 V3 逐格同值 —— 未动被量的块) |
⇒ **Gate-1 二十一行全过。** 唯一未达线的是**密度契约**(窄屏两档:`500×844` / `390×844`,均为 P1 一屏不足 6 行),它属 3b 实测的登记项、⛔ 不属 Gate-1 门 —— 见 §6.1 与 `3b-实测记录.md` §八。
---
*本份是原型的绑定规范:原型只许引本份登记的 token。*
## 九、说人话自评(本轮改动的文字部分;判据源 `humanizer-zh`,五维各 10 分)
| 维度 | 分 | 说明 |
|---|---|---|
| 直接性 | 10 | §1.1 ⑤ 一上来就说清「64px 从哪来」——先引 `SKILL.md` 行 95 的 `w-16`,再给实测值;§五 缺口 6 把「红档从 3 降到 2」放在句首 |
| 节奏 | 8 | 规范体裁、表格为主,改动段已补叙述,⚠️ 弱项未变 |
| 信任度 | 10 | 逐视口整表重跑后如实写出「还剩 2 档不达标」,并把「为什么这次栏宽似乎起作用了、与 V2/V3 不矛盾」当场解释掉;两档红照旧留着不粉饰 |
| 真实性 | 9 | Gate-1 第 16 行挂的是本轮现取证据(判据名 / 变异 27-27 / 16 档重跑);正文数(64×606、626→779px、绿 14 红 2)都可由本份与 `3b-实测记录.md` 当场复核 |
| 精炼度 | 8 | 新增只落在 §1.1⑤/§2.5 两处 + §七 一行 + §八 一行;但 §五 缺口 6 与 §6.1 说明确实又长了一点 |
| **总分** | **45 / 50** | 门槛 ≥45 ⇒ 压线过;扣分点仍全在「节奏 / 精炼度」两行(规范体裁,叙述段天然少) |
> 全量实测与两处改动的现象/根因/证据见 `ui/3b-实测记录.md`(该份自评 47/50)。