和田三造配色方案
当用户需要“从和田三造书中”获取配色方案、特定组合编号或用于网站、品牌、设计或服饰的雅致调色板时使用。
1. 获取数据
数据来源:mattdesl/dictionary-of-colour-combinations(MIT许可证)。将其克隆到一个空文件夹中:
mkdir -p /tmp/wada && git clone --depth 1 -q https://github.com/mattdesl/dictionary-of-colour-combinations /tmp/wada/repo
备用方案:在空文件夹中执行 npm install dictionary-of-colour-combinations。
colors.json 是一个包含159种颜色的数组:
{"name": "Hermosa Pink", "combinations": [176, 227, 273], "swatch": 0,
"cmyk": [0,30,6,0], "lab": [...], "rgb": [249,193,206], "hex": "#f9c1ce"}
配色方案并非直接存储。组合编号N包含所有其 combinations 列表中含有N的颜色:
import json, collections
colors = json.load(open('/tmp/wada/repo/colors.json'))
combos = collections.defaultdict(list)
for c in colors:
for n in c['combinations']:
combos[n].append(c)
# combos[n] -> 包含2、3或4种颜色的列表
使用 -I 参数运行Python,并将脚本保留在克隆文件夹之外。
2. 选择配色方案
- 如果用户给出了组合编号,则直接使用。
- 否则,根据用户要求进行筛选:颜色数量(2、3或4种)、氛围(根据色调分为暖/冷,根据LAB色度分为柔和/鲜艳)、或他们希望包含的颜色(根据LAB距离最接近)。
- 为切换器(第4步)挑选5-10个候选方案。如果不是构建网站,则显示3-5个内联色板(十六进制值、名称、组合编号)。
- 对于UI工作,使用WCAG对比度比例检查文本对比度:正文文本为4.5:1。使用最浅或最深的颜色作为背景。如果某对颜色未达标,则通过从调色板颜色中派生出更浅/更深的色调用于文本,并加以注明。
3. 将每个配色映射为主题
对于Web工作(默认Tailwind/shadcn),将每个候选配色方案转换为一整套shadcn CSS变量:--background、--foreground、--card、--card-foreground、--primary、--primary-foreground、--secondary、--secondary-foreground、--accent、--accent-foreground、--muted、--muted-foreground、--border、--ring。使用项目已使用的颜色格式(HSL或OKLCH)。如果某个调色板没有接近白色或接近黑色的颜色,则从其自身颜色中派生色调和阴影,而不是使用纯灰色。
将所有主题写入一个文件,例如 lib/wada-themes.ts:
export const wadaThemes = [
{ id: 176, name: "Hermosa Pink / ...", swatches: ["#f9c1ce", ...], vars: { "--background": "...", ... } },
...
];
4. 添加主题切换器(对于Web工作始终执行)
构建一个客户端组件 components/wada-theme-switcher.tsx,并在根布局中渲染一次。
行为:
- 右下角一个小型浮动按钮(高z-index,使用自己的固定中性样式,以便在所有主题上保持可读性)。
- 点击后打开一个面板,列出每个主题:组合编号、名称及其色板(显示为小圆形)。点击一个主题会立即通过在其
vars上设置document.documentElement.style来应用该主题。 - 上一个/下一个箭头以及键盘快捷键(
[和])可快速循环浏览主题。 - 一个“默认”选项,用于移除内联变量以恢复网站的原始主题。
- 在
localStorage中记住所选主题(用 try/catch 包裹),以便在页面导航和重新加载后保留。 - 一个“复制CSS”按钮,将当前主题复制为可直接粘贴的
:root { ... }代码块,并带有注释的组合编号,适用于globals.css。 - 可见性:当
process.env.NODE_ENV !== "production"或 URL 包含?themes=1时显示。这样用户可以在实时 Vercel 预览中进行测试并与客户共享链接,而普通访问者永远不会看到它。
当用户选择了一个最终方案(例如“锁定176”)时,将该主题的变量写入 globals.css 作为默认值。询问是删除切换器和 wada-themes.ts,还是将它们保留在 ?themes=1 后面。
其他输出
- 纯CSS网站: 相同的切换器,使用普通JavaScript,在
:root上设置自定义属性。 - 设计/印刷: 列出每种颜色的十六进制、RGB和CMYK值以及组合编号。
- 服饰/非数字: 用简单语言描述每种颜色及其适合的衣物(基础色、主色、强调色)。
始终引用组合编号,以便用户可以在书中找到它们。
备注
- 十六进制值是数字化近似值。印刷书籍的CMYK值是参考依据。
- 颜色名称来自数据集。不要发明日语名称。