# 颜色来源与采样证据

## 公开包边界与历史采样方法

三张原始参考图尚未取得再分发许可，因此不随公开源码分发。此处及 `assets/sampling/` 中的 JSON、CSV、原图哈希和数值表是历史采样记录，不是在当前公开检出中重新采样所得；仅凭公开包无法独立重现原图采样。MIT 许可证覆盖本项目原创代码与文档，不授予被排除参考图的使用或再分发权利。

历史记录：2026-11-13 从原对话获取三张附件并原样复制。Pillow 将图像解码为 RGB；不缩放、不量化、不做 ICC 转换，统计每个唯一 RGB 的数量，并在预先指定矩形区域取众数。坐标以原图左上角为原点，[left, top, right, bottom)，右/下边界不包含。色值属于解码后像素，不等于原设计文件中的填充属性；JPEG 压缩、文字抗锯齿、色彩管理与显示设备均会影响结果。

若已另行合法取得并获准使用原始输入，将其保留为 `reference-01.jpg`、`reference-02.png`、`reference-03.png` 三个文件名，放入显式指定的非公开输入目录，再运行：

```bash
uv run --script scripts/sample_colors.py --input-dir ./private-reference-images --output-dir ./sampling-output
```

脚本元数据固定 Python ≥ 3.10 与 Pillow 11.3.0；脚本不读取网络或改写原图，uv 首次准备依赖可能需要联网。输入、输出目录必须不同，缺少任何原图时不会创建输出。仅文件名相同不代表输入与历史原图相同，应自行核对下表哈希。CSV 中的占比是该文件所有像素的实际占比，不能当成推荐配色比例。

## 原图与完整直方图

| 文件 | 原始大小 | 不同 RGB 数 | SHA-256 |
|---|---|---|---|
| reference-01.jpg | 900 × 620 | 28506 | `273b7d9a7d006d55a4694a2b97d71659fc9d214e2269fb90698ff4aa5953257b` |
| reference-02.png | 1080 × 825 | 16185 | `bc6ede954b3af29896b0685143a4bf1d795c9074c0f4de36f47a5fb1dec384ae` |
| reference-03.png | 1080 × 848 | 19499 | `ce627d4743a0d11f1caa4b0f84f6e42378e880ea1573665251cacf04c82adeb3` |

完整色表分别见 `assets/sampling/reference-01-all-colors.csv`、`reference-02-all-colors.csv`、`reference-03-all-colors.csv`。JPEG 中的压缩变体和 PNG 中的抗锯齿像素都保留，不将全部不同像素提升为主题颜色。

## 区域实测（众数）

| 文件 / 角色 | 矩形 | 过滤 | 众数 | 众数像素 / 筛选像素 | 集中度 |
|---|---|---|---|---|---|
| reference-01.jpg / paper | `[350, 180, 750, 205]` | all | `#F7F1E5` | 10000 / 10000 | 100.00% |
| reference-01.jpg / insight | `[650, 410, 800, 475]` | all | `#F0E5D3` | 9750 / 9750 | 100.00% |
| reference-01.jpg / accent | `[464, 248, 493, 271]` | warm | `#A35436` | 69 / 640 | 10.78% |
| reference-01.jpg / ink | `[75, 247, 103, 273]` | dark | `#163E33` | 24 / 698 | 3.44% |
| reference-02.png / page | `[750, 30, 1000, 130]` | all | `#F5F2EA` | 25000 / 25000 | 100.00% |
| reference-02.png / primary | `[410, 210, 670, 220]` | all | `#193C35` | 2097 / 2600 | 80.65% |
| reference-02.png / card | `[410, 325, 660, 335]` | all | `#FCFCF7` | 738 / 2500 | 29.52% |
| reference-02.png / warning | `[60, 480, 300, 500]` | all | `#F6E8DD` | 3409 / 4800 | 71.02% |
| reference-02.png / sage | `[770, 625, 1010, 640]` | all | `#E7EDD9` | 3222 / 3600 | 89.50% |
| reference-03.png / page | `[700, 30, 1000, 120]` | all | `#F5F2EA` | 27000 / 27000 | 100.00% |
| reference-03.png / primary | `[800, 160, 970, 175]` | all | `#193C35` | 2550 / 2550 | 100.00% |
| reference-03.png / card | `[70, 400, 280, 415]` | all | `#FCFAF6` | 3040 / 3150 | 96.51% |
| reference-03.png / sage | `[900, 670, 1010, 685]` | all | `#E7EDD9` | 1650 / 1650 | 100.00% |
| reference-03.png / accent | `[40, 255, 270, 282]` | warm | `#9F5231` | 5 / 1326 | 0.38% |
| reference-03.png / secondary-text | `[58, 345, 280, 389]` | gray | `#808680` | 16 / 764 | 2.09% |
| reference-03.png / border | `[50, 300, 250, 303]` | all | `#C4C8C0` | 126 / 600 | 21.00% |

过滤规则：all = 全部像素；warm = R > 1.25G、G > 1.05B、R < 210；dark = max(R,G,B) < 110 且 G > R；gray = min(R,G,B) > 60、max(R,G,B) < 155 且 G ≥ R、G ≥ B。规则只帮助排除文本背景，不是自动语义分割。

低集中度的 accent / secondary-text / border 不能高置信度推定源 token。reference-02 的 card 区域众数是 `#FCFCF7`，但 reference-03 的平坦卡片区域高集中度为 `#FCFAF6`，因此后者更适合作为通用卡片 token。reference-01 的深绿局部众数 `#163E33` 与历史 `#173E33` 接近，但不能声称完全相同。

## 推荐 token 与历史归纳的区别

| 历史归纳 / 推荐值 | 本次证据 | 采用方式 |
|---|---|---|
| `#193C35` / `#F5F2EA` / `#E7EDD9` | 平坦区 100% 众数 | 直接采用 |
| `#FCFAF6` | reference-03 卡片区域 96.51% | 直接采用 |
| `#F7F1E5` / `#F0E5D3` | reference-01 平坦区 100% | 纸纹版 / 观点 |
| `#F6E8DD` | reference-02 风险区 71.02% | 风险底色 |
| `#A35436` | JPEG 圆点区域 10.78% 众数 | 保留历史推荐；不能称稳定源色 |
| `#173E33` | reference-03 全图中存在 6542 像素；局部深绿变体 | 兼容历史深绿 |
| `#66756D` / `#7D857B` | 历史归纳，文本局部众数并不一致 | 保留 raw，正文推荐调整 |
| `#B9C1B5` / `#D3CEC2` / `#C8C5B9` / `#D8D0C0` / `#CDB8A7` | 历史边框/线条建议；细线区域受渲染影响 | 推荐边框参数，不宣称精确采样 |
| `#F2F4EA` / `#D5E0D9` | 历史归纳的辅助浅底/反白说明 | 兼容 raw / 反白说明 |
| `#3E5248` / `#59675E` / `#994B30` | 本包新增，非采样色 | 正文 / 辅助文字 / 小字强调对比度优化 |

## 可读性

正常文本使用 WCAG 相对亮度对比度公式，目标 ≥ 4.5:1。`scripts/validate.py` 检查本包支持的常用文字/底色组合，包括深底反白。原始 `#7D857B` 和 `#66756D` 并非在所有浅底都达到该目标，因此默认正文更深；颜色选择不会自动证明整个页面满足 WCAG 全部要求。纹理纸面按平底计算，需同时在浏览器检查视觉干扰。

## 不能由本包证明的内容

无法从位图准确恢复字体家族、原始字号、源文件色彩空间、真实组件属性或业务事实。网页示例是忠于该视觉语言的可复用实现，不是三张原图逐像素复制。

特别处理：`#A35436` 在暖沙 `#F0E5D3` 上约为 4.345:1，未达到正常小字 4.5:1。因此图形填充保留 `--fe-accent`，小字标签与 hover 链接改用较深的 `--fe-text-accent: #994B30`。
