fix(design): M228 复审 r1 三条(字段底角色对齐、四处小疵、产品默认口径)

P2-1 字段底角色不对称(塔裁决方案 a):Silver 的 #dcddde 从 surface-container-high 改判到
surface-container-highest,与 Ink 的 #262b25 同位——component_map 的 TextField 口径就是最高
容器层,单一角色接法才不会一边掉层。Silver 的 high 改取推导值 #e4e4e5(tone 90),阶梯
94.12 → 90.61 → 88.07 保持单调、步长 ≥1.74 L*。实测:Error on 新 highest = 4.686(原按单一
角色接到 high 时的 4.379 失守已消除)、OnSurfaceVariant = 6.383、OnSurface = 12.576。
测试同步:Silver 三条字段用法 pin 从 high 改 highest(与 Ink 对称),并新增
`field_backdrop_is_the_same_role_on_both_boards` 把这个不对称钉住(顺带断言 high 比 highest
更亮、highest 就是规格卡的 #dcddde)。

P2-2 四处小疵:
① inkcat/size.rs 扩展 FAB 起始内距 16 → **28**(规格卡画的数):框 x=292 → 图标盒 320(`+`
   font-size 24 居中于 x=332),28 才是图上的距离;16 是 M3 官方口径,已在 doc 里登记为偏离,
  并说明「要回 M3 的 16 得同时把图标中心挪回 316,那是要出截图的视觉改动」。测试补一条自洽
   断言:292 + 28 + 24/2 = 332。
② inkcat/metrics.rs 的 SWITCH_THUMB_INSET 注释重写(原句断成碎片且读起来像算错):写明
   轨道 y=1060..1092 / 拇指 y=1064..1088 ⇒ 上下各 4、右端 116−112=4,以及行程
   52−24−2×4 = 20 的推导。
③ Silver「状态容器 / 容器层」数字统一成实测口径:boards/mod.rs 与 palette/visibility.rs 都写
   「最低 1.02」(Ink 1.54),并点名最差的一组是 tertiary-container 压 surface-container-high
   = 1.016;visibility 表的 Silver 阶梯步长改写 −1.7 ~ −4.1。
④ inkcat/type_scale.rs 正文清单只列 11 个**文字**字号(去掉 FAB 字形 20/26/34),并注明那三个
   归 FabSize::icon_px、SpecText 没有 20 这一档。

P2-3 产品默认口径统一:palettes.rs 的「两个入口」表与 Palettes::baseline 文档、color/mod.rs
的「出厂默认色」小节、Scheme::baseline 文档统一写明「M228 起出厂外观入口是
DesignTokens::brand,本入口是 D38 取色链中性锚点」,与 lib.rs 同口径;顺带把 BASELINE_SEED /
DEFAULT_SEED / DEFAULT_NEUTRAL_CHROMA 的「产品默认」措辞改成取色链口径。

另:tests/ink_cat_boards.rs 已 400 行贴线,把 4 条容器层可视性测试拆到新文件
tests/ink_cat_visibility.rs(纯搬移 + 补 import);palettes.rs 因新增口径说明到 403 行,按
「合并相邻段落、不删信息」压回 399 行;size.rs 现在 323 行。

五步(design 口径):fmt --all --check=0;check -p unlucky-design --all-targets=0(零 warning);
test -p unlucky-design --all-targets=0(267 passed);clippy -p unlucky-design --all-targets
-- -D warnings=0;400 行扫描只剩 README.md(豁免)、无 <2 字节 .rs。
This commit is contained in:
AskaEth committed 2026-11-10 22:34:05 +08:00
1 parent 0169d4c8fb
commit b8003177d7
11 files changed
+203 -118

No files matched your search

+8 -6
View File
@@ -14,25 +14,27 @@
//! `surface` 上时必须数得出来。这是唯一一条**数字门禁**,[`SurfaceHierarchy::state_failures`]
//! 守它。
//! 3. **容器层之间的亮度差不设门禁,改为「组合指示」要求**:M3 的容器层天生贴在一起
//! (官方口径浅色 `secondary-container` 对 `surface-container-high` 只有 1.05:1,
//! 深色也只有 1.54:1 —— 这是配色结构的必然,不是哪套板的失误)。所以
//! (官方口径浅色 `secondary-container` 对 `surface-container-high` 只有 1.06:1,
//! 本项目 Ink 板最低也只有 1.54:1 —— 这是配色结构的必然,不是哪套板的失误)。所以
//! **禁止**把「容器底色差异」当作唯一的选中 / 层级指示:选中态必须是
//! 「容器底(过第 2 条)+ 文字对比(第 1 条)+ 形状 / 图标 / 描边指示」三件套。
//! 另一半同理:`surface-container-*` 只表达「几乎看不见的抬升」,
//! 拿它当选中态用连第 2 条都过不了。
//!
//! 第 3 条为什么不是「把阈值降到 1.05 就完事」:那样等于承认「选中态可以看不见」,
//! 第 3 条为什么不是「把阈值降到 1.02 就完事」:那样等于承认「选中态可以看不见」,
//! 而用户抱怨的正是这个。把不可测的那一半转成**构成要求**,才是能落地的那一半。
//!
//! ## 实测(`tests/ink_cat_boards.rs` 守住第 2 条与阶梯)
//!
//! | 板 | 最弱状态容器 / `surface` | 状态容器 / 最亮(深)或最暗(浅)的容器层 | 阶梯 L\\* 步长 |
//! | 板 | 最弱状态容器 / `surface` | 状态容器 / 容器层(最低 ~ 最高) | 阶梯 L\\* 步长 |
//! |---|---|---|---|
//! | Ink | **1.97**(secondary-container) | 1.54 ~ 12.13 | +1.4 ~ +4.4 |
//! | Silver | **1.23**(tertiary/error-container) | 1.05 ~ 1.24 | −1.8 ~ −6.1 |
//! | Silver | **1.23**(tertiary/error-container) | **1.02** ~ 1.80 | −1.7 ~ −4.1 |
//! | 旧 baseline(债务现场) | 1.23 | **1.057**(对卡片,m223 实测) | — |
//!
//! 第三列就是第 3 条的由来:它过不了任何有意义的门禁,所以不设门禁、只设组合要求。
//! 第三列就是第 3 条的由来:它过不了任何有意义的门禁(Silver 最差的一组是
//! `tertiary-container` 压 `surface-container-high`,1.016 —— 两者几乎同亮度),
//! 所以不设门禁、只设组合要求。
//!
//! ## 阶梯本身还是要查([`SurfaceHierarchy::layer_violations`])
//!