色彩注入的艺术:Impeccable 为灰阶界面系统化着色的完整方法论
【免费下载链接】impeccableThe design language that makes your AI harness better at design.项目地址: https://gitcode.com/GitHub_Trending/im/impeccable
导读
colorize.md 是 Impeccable 技能中colorize命令的完整行动规范——这是一套将色彩当作"层级、意义与氛围"而非装饰来引入的战略化工作流。本篇文章将带你掌握:在什么样的场景下应该启动 colorize、着色前如何审计既有品牌资产、如何构建"角色驱动"而非"色板堆砌"的色彩策略、如何在系统规模上落地(含 OKLCH 色彩空间的选择依据与 WCAG AA 对比度验收表),以及 Live 模式下color-amount签名参数的约定与实现。读完你既能对任一灰阶、灰暗、缺乏层次的前端界面执行一次有据可依的色彩升级,也能理解 Impeccable 命令体系与浏览器实时变体模式(live mode)为何要求色彩与对比度按系统级纪律落地。
一、定位:colorize 是"增色",不是"换世界"
在 Impeccable 的命令谱系中,colorize 属于 Enhance(增强)类别。查阅 SKILL.md 的命令表可知其定义为"为过于单色或缺乏视觉吸引力的界面添加战略性色彩",而 command-metadata.json 对它的触发场景描述得更为直白:当用户抱怨设计看起来"灰、呆板、缺乏温度、需要更多色彩、想要更生动更有表现力的配色"时,就应路由到 colorize。
但这恰恰是它最容易被误用的地方——colorize.md 在开头就用一句加粗的核心约束划清了边界:
Additional context needed: existing brand colors.Introduce color as hierarchy, meaning, and atmosphere. Preserve confirmed brand and semantic conventions; do not replace a visual world under the guise of colorizing it.
翻译过来即:colorize 是在"确认过的品牌色"基础上引入色彩,让它承载**层级(hierarchy)、语义(meaning)与氛围(atmosphere)**三件事;绝不可以在"顺手上个色"的幌子下替换掉一个已有的视觉世界。
这决定了它与 new-work.md(新表面 / 替换性视觉身份的完整流程)的分工:如果你需要的是一整套新身份,去走 new-work;colorize 只负责在既有世界里把色彩用得更好。两者之间只存在一个例外触发点——只有当无法从现有材料推断出具有约束力的品牌决策时,才可以向用户提问。
不同 Visitor Mode 下的色彩职责
SKILL.md 将界面的访问者模式分为四类:Persuade(说服,如落地页)、Operate(操作,如应用 UI)、Read(阅读,如文档)、Experience(体验,如作品集)。colorize.md 明确指出色彩在这两种模式下承担不同的职责:
| 模式组合 | 色彩的职责 |
|---|---|
| Persuade + Experience | 当所选视觉世界需要时,色彩可以承载品牌声音,并拥有大面积区域 |
| Operate + Read | 色彩主要用于编码操作、选中、状态、寻路与阅读层级;稀缺性(rarity)赋予了强调色力量 |
后者是一个非常值得玩味的点:在操作型/阅读型界面中,强调色的力量并不来自"用得多",恰恰来自"用得少"。色彩越是稀缺,越能精准命中视觉焦点。
二、着色前的审计:先读完整个视觉系统的证据
colorize.md 规定,在挑选任何颜色之前,必须先读取 DESIGN.md、设计令牌(tokens)、素材(assets)、当前主题以及有代表性的状态,完成一次系统审计。审计清单包括六类问题:
- 哪些颜色是已确认的品牌承诺(confirmed brand commitments);
- 当前的 surface(表面)、text(文本)、action(动作)、semantic(语义)角色分别由谁承担;
- 哪些地方灰阶(grayscale)遮蔽了层级或状态——这是 colorize 最典型的出手点;
- 是否存在对比度失败和仅靠颜色传达信息(color-only communication)的缺陷;
- 是否有浅色/深色主题或数据可视化需求;
- 本次任务要的是"更多色彩"还是"一个新身份"。
第 6 点是关键分流:若判定需要新身份,直接转入 new-work 流程(见上文 new-work.md)。这与 Impeccable 全局的"evidence over filename"原则一致——SKILL.md 强调"视觉权威是证据,不是文件名",即使缺少 DESIGN.md,也不代表项目是绿地项目,colorize 必须先读取真实存在的 tokens、CSS 变量与组件来确定身份基线。
三、选择策略:先命名情感温度、主导关系、对比区间与色彩剂量
在动手前,colorize.md 要求你先命名四件事:
- 情感温度(emotional temperature):这套配色想传达冷还是暖,静还是烈;
- 主导关系(dominant relationship):哪个色与哪个色构成画面主轴;
- 对比区间(contrast range):整体明暗对比的摆幅;
- 色彩剂量(color dosage):色彩在整个界面中的占比强度。
同时声明:策略可以是克制的(restrained),也可以是沉浸式的(immersive),但必须服从简报(brief)与所选视觉世界,而不是服从某个固定百分比规则。这是对"配色公式崇拜"的明确拒绝——不存在"30% 主色 + 60% 中性色 + 10% 强调色"这类放之四海皆准的配比。
构建角色(Roles),而非一袋色卡(a bag of swatches)
colorize.md 用了一个非常精辟的短语来概括最低级的配色失败:把一组好看的颜色摆在那里,却不给它们分配职责。正确做法是先列出系统需要哪些色彩角色,再逐一填充:
| 角色组 | 覆盖的内容 |
|---|---|
| Canvas / Elevated surfaces | 画布与抬升表面的底色 |
| Primary / Secondary text | 主文本与次级文本 |
| Action / Focus / Selection | 操作、焦点与选中态 |
| Borders / Separators | 边框与分隔线 |
| Success / Warning / Error / Information | 成功、警告、错误、信息等语义色 |
| Data categories or scales(按需) | 数据类别或数据标尺 |
这套角色清单本身就是一个可复用的"色彩系统思维模型":在任何一次着色任务中,先把角色表列全,再考虑每个角色用什么色相——而不是反过来从色卡出发。
色彩空间:为什么新 Web 配色优先选 OKLCH
colorize.md 给出的色彩空间建议是:沿用项目现有的色彩空间;而如果要为新的 Web 配色,优先选择 OKLCH,理由是"明度(lightness)与彩度(chroma)可以被可预测地调整"。
这也是 Impeccable 视觉体系里反复出现的工程取向:色彩管理要建立在可计算的坐标上,而不是依赖肉眼试错。OKLCH 将色相(hue)、明度(lightness)、彩度(chroma)分离,意味着你可以只动彩度把某个颜色从"灰调"推向"饱和",或在深色模式下成体系地调整明度轴,而不破坏色相关系。
而对色相的选择,colorize.md 给出了极具立场的一句:色相应来自产品含义与视觉方向,绝不能来自"某个默认的类别联想"——例如"成功必须是绿色、警告必须是黄色"这类默认关联。换言之:先想清楚这个产品、这个世界在色相上意味着什么,再决定红还是蓝;而不是反过来说"因为这是错误态所以涂红"。
四、在系统规模上落地:色彩纪律的七条军规
colorize.md 用七个要点框定了"把颜色真正用进系统"的纪律,这也是整个文档实操性最强的一段:
1. 让最强的色彩拥有一个深思熟虑的区域或角色,而不是散落成小碎片。与其在十个角落各撒一点强调色,不如让主色体面地拥有一整片领地。碎片化的彩色斑点既无法形成记忆点,也会让每个控件都"喊"。
2. 让主操作(primary action)容易被找到——不要把它该有的颜色花在装饰上。一个界面的第一要务是让人知道"该点哪里"。如果你把最高饱和的色相用在纯装饰元素上,真正的主按钮反而会退到背景里。
3. 只有在品牌色相真正产生凝聚力时才给中性色染色;当服务于这个世界时,中性灰是合法的。灰色不是原罪。关键是"这个灰是出于默认,还是出于世界的需要"——后者成立。
4. 在彩色表面上,次级文本应从前景色或表面色推导,而不是使用洗白了的通用灰。这条是大量实际界面的痛点:在一个深蓝的 banner 上放一个"通用浅灰"的副标题,对比度与色温都会失衡。正确的做法是从承载它的表面色相出发,调整明度推演出次级文本色,让它在色温上"属于这个表面"。
5. 保持语义含义的一致性,但尊重平台与领域惯例,不要假定固定色相。"错误用红"在不同平台、不同专业领域(金融、医疗、科学)的惯例并不相同。语义的含义要一致,语义的色相表达要入乡随俗。
6. 数据可视化里,用明度、彩度、形状、标签或图案的多重编码,让色彩不是唯一的信息通道。色觉障碍用户(色盲/色弱)无法依赖颜色区分数据,因此数据图表的每个色类都需要额外的非色彩线索兜底。
7. 深色模式下显式设计表面抬升与对比;不要机械地把浅色主题取反。"取反"会破坏抬升关系——浅色下靠阴影表达的分层,取反后阴影失效;正确做法是像画素描一样,在深色模式下显式设计每个表面的明度差。
此外,如果项目具备令牌(token)体系,应定义primitive values(原始值)与 semantic tokens(语义令牌)两层;主题切换时,通常应通过重新映射语义角色来完成(把 semantic token 指向不同的 primitive),而不是逐处改色值。
colorize.md 对本节给出了一个总结性的判定标准:"与层级、状态、内容或视觉世界毫无关系的装饰,不构成色彩策略。"一句话就把"滥用彩色渐变/荧光强调的廉价做法"开除出了策略范畴。
五、对比度与感知:不止是"看起来够清楚"
WCAG AA 对比度验收表
colorize.md 给出了明确的计算化验收表,要求逐对验证计算出的前景/背景组合:
| 内容类型 | WCAG AA 最低对比度 |
|---|---|
| 正文文本(body text) | 4.5:1 |
| 大号文本(large text) | 3:1 |
| 控件、图标、焦点指示器(controls, icons, focus indicators) | 3:1 |
三条硬性门槛中最容易被忽略的是最后一行:图标与焦点环只需要 3:1,但很多人会误用正文的标准去卡它,或在纯装饰图标上完全放弃对比度验收。
不要只靠肉眼——这句禁令意味着要通过计算工具验证这些场景:交互态(hover/focus/active)、浮层与遮罩、图片上的文字、禁用内容(disabled),以及浅色/深色两套主题;还要模拟常见的视觉缺陷(色盲/色弱滤镜)。凡是由颜色承载的信息,都需要文本、形状、图标或位置作为冗余通道——这正是前文"color-only communication"缺陷的系统级解法。
OKLCH 渐变推导的两条感知规则
当用 OKLCH 推导渐变(ramp)时,colorize.md 给出了两条容易被工程化思维带偏的感知规则:
- 靠近纯白与纯黑时,应降低明度的变化幅度并削减彩度。不要为了"让数值均匀"而在极亮或极暗端保留高彩度——那在数学上很整齐,在人眼上很难看(接近白色的高彩度会闪烁发灰,接近黑色的高彩度会吃掉层次)。
- 优先使用显式颜色,而不是一串半透明叠加层——当 alpha 叠加会把对比度变成"取决于下层是什么"的上下文依赖时,就应改回写死的不透明色。alpha 的可复用性是以对比度的不可预测为代价的。
六、验证清单:配色拿到入场资格前的六连问
colorize.md 规定,色彩方案落地后必须过一遍验证清单,全部通过才算合格:
- 每个颜色都有一个稳定的角色,或一个特定于世界(world-specific)的氛围用途;
- 注意力落在预期的动作、内容或状态上(而非被装饰抢走);
- 配色在安静、密集、交互、错误、空五种状态下都成立——单调的页面往往只在"干净 demo"状态好看,一旦进入错误态和空态就崩;
- 浅色与深色主题各自是自洽的设计,而非机械互逆;
- 在所有相关状态下,对比度与非色彩线索(non-color cues)都通过;
- 结果仍然是"这个产品"——可被识别、不脸谱化,而不是一套放之任何项目皆可的"通用彩色皮肤"。
当配色真正挣得自己的位置后,colorize.md 给出的收尾动作是:移交给/impeccable polish(对应 polish.md)做最后一轮质量收敛。这呼应了 Impeccable 的整体分工——colorize 负责"把色彩系统做好",polish 负责"把细节磨到可发布"。
七、Live 模式下的签名参数:让用户在不重新生成的前提下调节色彩剂量
colorize.md 的最后一节描述了它在 Impeccablelive 模式(浏览器实时变体模式)下的特殊契约。live 模式允许用户直接在浏览器中选中元素、生成多个 HTML+CSS 变体并通过 HMR 热替换(完整协议见 live.md)。当 colorize 从 live 模式被调用时,每个变体都必须声明一个color-amount参数:
当从 live 模式调用时,每个变体声明一个
color-amount参数。作者应针对var(--p-color-amount, 0.5)编写 CSS,使用户可以在中性色与变体的完整色彩策略之间滑动,而无需重新生成。
{"id":"color-amount","kind":"range","min":0,"max":1,"step":0.05,"default":0.5,"label":"Color amount"}这段契约的内涵值得展开:live 模式的参数是"零重生成成本"的粗粒度旋钮(knobs),浏览器为每个参数停靠一个控件,拖动即通过 CSS 变量或 data attribute 实时改变渲染。color-amount的默认值 0.5、步长 0.05、范围 0–1,意味着用户可以从"完全中性(0)"连续滑到"该变体的完整色彩策略(1)"。
对照 live.md 的参数契约可以还原其实现机制:
kind: "range"的参数会驱动 CSS 变量--p-<id>,因此 CSS 侧必须写作var(--p-color-amount, 0.5)这样的带默认值回退形式——即便变体在参数面板未展开时渲染,也会落在 0.5 的中性偏彩剂量上;- live.md 规定每个变体最多 0–4 个参数(依元素视觉体量分级),colorize 在此基础上进一步收紧为"签名参数
color-amount之外,至多再添加两个变体特定参数",例如 palette(色板切换)、temperature(冷暖)、tint behavior(着色行为)等方向性旋钮。
注意 colorize 参数的量级设计:color-amount是0 到 1 的连续滑杆,而不是"轻度/中度/重度"这类离散档位——因为色彩剂量是一条连续的光谱,用户从"去彩色"到"全策略"的探索天然是渐进的;这与 steps(分段控件)型参数(如 density 的 airy/snug)形成了刻意分工。此外,live.md 的 action 分诊还提到:在 live 中执行 colorize 时,三个变体应使用不同的色相家族,并在彩度与对比策略上彼此区分——而不是同族色相的三种深浅。
八、全流程串联:一次规范的 colorize 会话应当长什么样
把 colorize.md 与 SKILL.md、live.md 的路由与模式规则拼起来,一次完整的 colorize 会话应遵循这样的顺序:
- 判定命令归属:用户提出"太灰、缺色彩、太单色"类诉求 → 路由到
colorize(依据 command-metadata.json 的触发场景),或 live 会话内 action 为colorize; - 读取证据:DESIGN.md、tokens、素材、主题与代表状态;确认哪些颜色是品牌承诺、当前的表面/文本/动作/语义角色由谁承担;
- 判定范围:是"在既有世界里加色",还是用户真正想要"新身份"?后者改走 new-work.md;
- 命名策略:情感温度、主导关系、对比区间、色彩剂量四个参数先定调;建立角色表;如新建 Web 配色则选 OKLCH 色彩空间;
- 系统级落地:让强色拥有领地、主操作优先、中性色只按需染色、彩色表面上的次级文本派生自表面色、语义含义一致而色相尊重领域惯例、数据图表多重编码、深色模式显式设计抬升;
- 感知验收:按 WCAG AA 表逐对计算(正文 4.5:1 / 大文本 3:1 / 控件图标焦点 3:1),覆盖交互态与双主题,模拟视觉缺陷,用显式颜色而非透明叠加链;
- 验证与移交:过六连验证清单,然后交给
/impeccable polish收尾; - Live 模式特例:变体声明
color-amount滑杆参数,CSS 以var(--p-color-amount, 0.5)为锚,用户可在 0–1 间实时调节剂量而不触发重新生成;变体特定参数至多两个,遵循 live.md 的参数契约。
结语
colorize.md 通篇传递的核心立场,可以用两句话概括:色彩是一种系统资源,必须被分配角色、剂量与边界,而不是被挥霍成装饰;色彩是一种感知工程,必须通过计算化的对比度与多重编码来兜底,而不是依赖"看起来不错"的直觉。这套方法论对任何想把灰阶界面升级为有层次、有语义、有温度的前端系统——无论是落地页、仪表盘还是文档站——都提供了一份可直接执行的行动框架:先审计、再命名、后角色化、系统落地、感知验收、验证移交。严格遵循它,你得到的是一个"仍然属于这个产品"的彩色世界,而非一张谁都能贴上去的通用彩色皮肤。
【免费下载链接】impeccableThe design language that makes your AI harness better at design.项目地址: https://gitcode.com/GitHub_Trending/im/impeccable
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考