feat(design): M70 r2 —— 出厂默认定为 ④ 天蓝 #3C8DBC(用户 2026-11-01 拍板)
- `palettes::DEFAULT_SEED`:`#87CEEB`(③ 浅冷蓝)→ `#3C8DBC`(④ 天蓝,主色 `#236488`); `DEFAULT_NEUTRAL_CHROMA` 保持 12 - `tests/skyseed_candidates.rs`:`product_default_is_the_recommended_candidate` → `product_default_is_the_adopted_candidate`,绑定 `CANDIDATES[3]`(④);四档 pin 不变 - 文档:`color/mod.rs` / `palettes.rs` 的「临时默认 ③ / 待用户确认」全部换成 「出厂默认 ④(用户 2026-11-01 拍板)」,③ 标注为备选(值仍 pin 住,可一行换回) - 文档新增定位(D38):这两个常量只定义「**莫奈关闭时的出厂预选色卡**」(配色来源第三级), 不再代表唯一配色来源;背景图/壁纸取色与内置色卡库都不在本 crate、尚未实现
This commit is contained in:
1 parent
9519a89472
commit
e37b452345
3 files changed
+36
-23
No files matched your search
@@ -53,13 +53,20 @@
|
||||
//!
|
||||
//! ## 出厂默认色(M70:浅冷天蓝)——含一处**有意偏离**
|
||||
//!
|
||||
//! 产品默认不走官方紫,而是「浅冷天蓝」。默认值收在两个常量里,**换默认只改这两行**:
|
||||
//! 产品默认不走官方紫,而是「浅冷天蓝」。默认值收在两个常量里,**换默认只改这两行**
|
||||
//! (用户 2026-11-01 拍板采用候选 **④ 天蓝**;③ 浅冷天蓝 `#87CEEB` 留作备选,值仍 pin 在
|
||||
//! `tests/skyseed_candidates.rs`):
|
||||
//!
|
||||
//! | 常量 | 当前值 | 官方值 | 说明 |
|
||||
//! |---|---|---|---|
|
||||
//! | [`palettes::DEFAULT_SEED`] | `#87CEEB`(CSS `skyblue`) | `#6750A4`([`palettes::BASELINE_SEED`]) | 种子只贡献**色相**(CAM16 ≈ 226°);种子彩度会被 Tonal Spot 丢掉 |
|
||||
//! | [`palettes::DEFAULT_SEED`] | `#3C8DBC`(CAM16 hue ≈ 240°) | `#6750A4`([`palettes::BASELINE_SEED`]) | 种子只贡献**色相**(CAM16 240°);种子彩度会被 Tonal Spot 丢掉 |
|
||||
//! | [`palettes::DEFAULT_NEUTRAL_CHROMA`] | `12` | `6` | 让 surface / surface-container-* 带淡蓝调 |
|
||||
//!
|
||||
//! **定位(D38)**:这套默认只是「**莫奈关闭时的出厂预选色卡**」(首次启动、用户还没选过色卡时
|
||||
//! 用的那一套),**不是唯一的配色来源**。用户的配色来源有三级优先:① 启动器背景图取色(Monet)
|
||||
//! → ② 桌面壁纸取色 → ③ 莫奈关闭(默认)时从内置多套色卡里选。取色与「内置色卡库」都不在本 crate,
|
||||
//! 也还没实现;本模块只负责「给定一个种子 + 中性彩度,派生出 49 个角色」。
|
||||
//!
|
||||
//! > ⚠️ **有意偏离登记**:中性彩度 6 → 12 是对官方 Tonal Spot 的偏离,理由=产品要「浅冷」的冷调表面。
|
||||
//! > 官方 6 的表面几乎无色,单靠换种子做不到「浅」——因为 primary 的 tone 被官方钉在 40,
|
||||
//! > 种子再浅主色也还是中蓝;**「浅」只能落在中性色上**。除这一处外全部走官方常数
|
||||
@@ -71,8 +78,8 @@
|
||||
//! `tests/skyseed_candidates.rs` 把四档候选(保守蓝 / 冷调蓝 / 浅冷蓝 / 天蓝)的色值逐个 pin 住,
|
||||
//! 换默认时它会指着要改的行。
|
||||
//!
|
||||
//! ⚠️ 当前默认色是「待用户确认」的**临时默认**(③ 浅冷蓝 `#87CEEB`)。用户看过四档色卡后若选
|
||||
//! ④ 天蓝(`#3C8DBC`,主色 `#236488`,比 ③ 更偏蓝),只需改 [`palettes::DEFAULT_SEED`] 一行。
|
||||
//! ✅ 默认色已由用户 2026-11-01 拍板:**④ 天蓝 `#3C8DBC`**。备选 ③ 浅冷蓝 `#87CEEB`
|
||||
//! (主色偏青 `#0C6780`)仍在候选表里,换回去只需改 [`palettes::DEFAULT_SEED`] 一行。
|
||||
//!
|
||||
//! ## 对比度纪律(WCAG AA)
|
||||
//!
|
||||
|
||||
@@ -31,14 +31,18 @@ use super::Color;
|
||||
/// **不是**产品默认色——产品默认见 [`DEFAULT_SEED`]。
|
||||
pub const BASELINE_SEED: Color = Color::rgb(0x67, 0x50, 0xA4);
|
||||
|
||||
/// 产品出厂默认种子色(M70 候选③「浅冷蓝」,**待用户确认**)。
|
||||
/// 产品出厂默认种子色 —— M70 候选④「天蓝」,**用户 2026-11-01 拍板采用**。
|
||||
///
|
||||
/// `#87CEEB` 就是 CSS 的 `skyblue`。注意它的彩度(36)会被 Tonal Spot 丢掉——
|
||||
/// 主色板的彩度恒为 36,种子只贡献**色相**(这里 CAM16 hue ≈ 226°,偏 cyanish 的蓝)。
|
||||
/// `#3C8DBC`(CAM16 hue ≈ 239.5°,主色 `#236488`)。注意种子的彩度(42.6)会被 Tonal Spot
|
||||
/// 丢掉——主色板的彩度恒为 36,种子只贡献**色相**。
|
||||
///
|
||||
/// 第 4 档 ④「天蓝」`#3C8DBC`(CAM16 hue 239.5°,主色 `#236488`)在
|
||||
/// `tests/skyseed_candidates.rs` 里有完整 pin 与 WCAG 覆盖;用户若选 ④,改这一行常量的值即可。
|
||||
pub const DEFAULT_SEED: Color = Color::rgb(0x87, 0xCE, 0xEB);
|
||||
/// ## 定位(D38):这是「莫奈关闭时的出厂预选色卡」,不是唯一的配色来源
|
||||
///
|
||||
/// 用户定了三级优先的配色来源:① 启动器背景图取色(Monet)→ ② 桌面壁纸取色 → ③ 莫奈关闭
|
||||
/// (默认)时用户从内置多套色卡里选。本常量 + [`DEFAULT_NEUTRAL_CHROMA`] 只定义**第三级里
|
||||
/// 出厂预选的那一套**(首次启动、用户没选过色卡时的那一套)。取色(Monet / 壁纸 /
|
||||
/// `QuantizerCelebi`)与「内置多色卡库」都不在本 crate,也还没实现。
|
||||
pub const DEFAULT_SEED: Color = Color::rgb(0x3C, 0x8D, 0xBC);
|
||||
|
||||
/// 产品出厂默认的中性调色板彩度(官方 Tonal Spot 是 6,这里 12 = **有意偏离**)。
|
||||
///
|
||||
@@ -46,6 +50,9 @@ pub const DEFAULT_SEED: Color = Color::rgb(0x87, 0xCE, 0xEB);
|
||||
/// 这是「浅冷天蓝」唯一能落在表面上的手段(primary 的 tone 被官方钉在 40,
|
||||
/// 种子再浅也变不成浅蓝)。安全区间 6..=12:neutral-variant = neutral + 2,
|
||||
/// 超过 13 会顶到 secondary 的 16,破坏「neutral < neutral-variant < secondary」。
|
||||
///
|
||||
/// 同样只服务于「出厂预选色卡」(D38 第三级),不约束将来的取色结果。将来若做「内置多套色卡」,
|
||||
/// 每套色卡各带自己的中性彩度更合适——本常量到时候会退化成「默认那套的取值」。
|
||||
pub const DEFAULT_NEUTRAL_CHROMA: f64 = 12.0;
|
||||
|
||||
/// 调色板槽位(M3 的六条 tonal palette)。
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
//! |---|---|---|---|---|---|
|
||||
//! | ① 保守蓝 | `#2196F3` | 253.7° | 6(官方) | 近白/近黑,几乎无色 | 钢蓝 |
|
||||
//! | ② 冷调蓝 | `#2196F3` | 253.7° | 12 | 冷白/冷黑,带淡蓝调 | 钢蓝 |
|
||||
//! | ③ 浅冷蓝 | `#87CEEB`(CSS `skyblue`) | 225.7° | 12 | 浅天蓝 | 偏青(teal) |
|
||||
//! | ④ 天蓝 | `#3C8DBC` | 239.5° | 12 | 浅天蓝 | 偏蓝的天蓝 |
|
||||
//! | ③ 浅冷蓝(备选) | `#87CEEB`(CSS `skyblue`) | 225.7° | 12 | 浅天蓝 | 偏青(teal) |
|
||||
//! | ④ 天蓝(**出厂默认,用户 2026-11-01 拍板**) | `#3C8DBC` | 239.5° | 12 | 浅天蓝 | 偏蓝的天蓝 |
|
||||
//!
|
||||
//! ③ 与 ④ 是同一件事的两种「蓝」:色相越低越偏青(teal),越高越偏钢蓝;
|
||||
//! 239.5° 正好夹在中间,主色从 ③ 的 `#0C6780` 变成 `#236488`。
|
||||
@@ -243,23 +243,22 @@ fn the_candidates_are_actually_distinguishable() {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn product_default_is_the_recommended_candidate() {
|
||||
// ③ 是 M70 的**临时默认**(待用户确认)。第 4 档 ④ 加进来之后默认**故意不动**——
|
||||
// 由用户看完四档再拍。拍板后改 `DEFAULT_SEED`/`DEFAULT_NEUTRAL_CHROMA` 这里会立刻红,
|
||||
// 那条红就是在提醒你同步 pin 表(本用例就是那个提醒器)。
|
||||
let recommended = &CANDIDATES[2];
|
||||
fn product_default_is_the_adopted_candidate() {
|
||||
// 用户 2026-11-01 拍板采用 **④ 天蓝**。这条用例就是「默认值 ↔ 候选表」的绑定器:
|
||||
// 谁改了 `DEFAULT_SEED`/`DEFAULT_NEUTRAL_CHROMA` 却没同步这里(或反过来),它会立刻红。
|
||||
let adopted = &CANDIDATES[3];
|
||||
assert_eq!(
|
||||
DEFAULT_SEED,
|
||||
Color::from_hex(recommended.seed_hex).expect("合法 hex"),
|
||||
"DEFAULT_SEED 与推荐档 {}",
|
||||
recommended.tag
|
||||
Color::from_hex(adopted.seed_hex).expect("合法 hex"),
|
||||
"DEFAULT_SEED 与已采用的档 {}",
|
||||
adopted.tag
|
||||
);
|
||||
assert_eq!(DEFAULT_NEUTRAL_CHROMA, recommended.neutral_chroma);
|
||||
assert_eq!(DEFAULT_NEUTRAL_CHROMA, adopted.neutral_chroma);
|
||||
for flavor in [SchemeFlavor::Light, SchemeFlavor::Dark] {
|
||||
assert_eq!(
|
||||
Scheme::baseline(flavor),
|
||||
scheme(recommended, flavor),
|
||||
"产品默认(Scheme::baseline)必须等于推荐档的派生结果({})",
|
||||
scheme(adopted, flavor),
|
||||
"产品默认(Scheme::baseline)必须等于已采用档的派生结果({})",
|
||||
flavor.name()
|
||||
);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user