Distilled from the essay 《你的UI廉价,错在颜色》. These are the rules the generator enforces. Read this when you need to explain why a token looks the way it does, or when hand-tuning a system the script produced.
Cheap-looking UIs use pure neutral colors: #FFFFFF, #000000, #808080.
Expensive-looking UIs never do. Every neutral surface carries a few percent of
the brand hue. Brand color does not sit on top of the design — it flows
through it.
rgba(0,0,0,0.1). A shadow is light absence; it takes
the temperature of the surrounding light. Blue brand → blue-violet shadow;
warm brand → amber shadow. Keep alpha very low. The 0 0 0 1px hairline
border is part of the same shadow system and inherits its temperature.#000.
Muted text follows the brand’s warm/cool direction, not flat gray. Values
still pass WCAG AA at body sizes — temperature is added inside the existing
contrast budget, never at the cost of readability. The generator now
enforces this automatically: every text-on-surface pair is measured with
the WCAG 2.1 relative-luminance formula and, if it falls below AA
(4.5:1 normal / 3:1 muted), the text is nudged along its HSL lightness axis
until it passes — so readability always wins, and the brand hue-lean is kept
wherever lightness does not hit an extreme.--color-bg, never #FFFFFF.--color-brand-subtle.
Illustration shadows are derived from the same token family as UI shadows, so
illustration and chrome look lit by one source.Desaturate the whole interface to grayscale. If hierarchy still holds, the temperature work is correct and invisible. If it collapses, the hue was doing too much structural work — fix the gray ramp first, then re-add temperature.
--color-brand-subtle
or a slightly more saturated surface — never a flat gray overlay.Run this before you ship a system the generator produced. The generator enforces most of it automatically, but the checklist catches the human steps (wiring, review, edge brands).
#FFFFFF, #000000, #808080.
None should appear (degenerate black/white/gray brands are the only exception,
and even then the generator keeps a brand-lean where a hue exists).--color-on-brand (text on the brand button) is ≥ 4.5:1 on the
brand hue. The generator guarantees this, but re-check after any hand-tune.preview.html, toggle dark, and confirm the topbar
title + body text stay legible. Tinting must not wash out in dark.--color-brand-subtle
or a more saturated surface, not a gray overlay.tokens.css :root variables override the framework
defaults without a specificity war; no !important needed.--format all, tokens.css,
tokens.json (DTCG), tailwind.config.js, and _tokens.scss all exist and
carry the same values.#FFF to
“be sure it’s clean.” That is exactly the cheap look. Keep the 2–3% hue-lean.tint-strength: strong on an already-saturated brand reads as
“themed,” not “designed.” Default normal is right for most products; reserve
strong for brand-forward marketing surfaces.The cheap-vs-premium gap is almost never the layout or the font. It is the
neutrals. Flat #FFF/#000/#808080 read as “template”; a 2–3% brand hue-lean
reads as “someone designed this.” This skill automates that single, high-leverage
move — and keeps it accessible while it does.