Derive a full UI palette from one or two brand colours — state variants, brand-tinted greys, semantic colours. Use when building or expanding a colour system.
日本語の概要は準備中です。原文の説明を表示しています。
A marketing site and its product may differ in density and scale but share one token layer. Use when the two drift apart, share components or need a single token owner.
インストールする前に、エージェントに与えられる指示の中身を確認できます。
The public site sells; the product is used. A visitor reads one marketing page for ninety seconds and leaves. An operator opens the same brand every morning and stays for hours. Designing both to one specification produces either a brochure that is exhausting to work in or a product screen that cannot sell anything.
So the two surfaces should diverge. The question is never whether, it is which layer is allowed to diverge.
Marketing and product are the pair that forces the question, because they are the two nobody can pretend are the same job. But the rule underneath is not about two. Most brands run four or five surfaces: the site, the product, the documentation, the transactional email, the status page, sometimes a sales deck. Each one is a different job for a different reader at a different moment. The brand owns the layer; every surface chooses from it. Adding a sixth surface then changes nothing about the rule, which is the test of whether the rule was right.
Where a new surface belongs is settled by the same question the layer rule asks, not by which team built it. Docs are read for minutes at a time by someone mid-task, so they sit near the product on density and near the site on reading width. Transactional email has no theme control and no hover, so it takes the shared values and little else. Neither is a special case; both are the general rule applied.
Brand values are shared. Application values are chosen per surface.
| Shared, one value for both | Chosen per surface |
|---|---|
| Hue: brand accent, warm accent, status colours | Which of them dominates a screen |
| Font families | Type scale in use |
| Radius scale (the set of allowed steps) | Which step a surface reaches for |
| Icon library | Icon size and weight |
| Contrast floors for text (4.5:1 body, 3:1 large) | Density, spacing rhythm |
| Component contracts (what a button is) | Button size defaults |
If a value answers who are we, it is shared. If it answers what is this screen for, it is the surface's own call. A product screen picking a tighter radius is design. A product screen picking a different blue is drift.
These divergences are healthy and worth stating explicitly rather than letting them happen by accident:
The header, the primary call to action, the pricing widget, the footer: a handful of components appear on both surfaces, and they are where a surface rule turns into an argument. They belong to neither surface.
The rule: a shared component reads its surface from context, it does not carry a variant per surface. A
component with a marketing prop and an app prop has already forked; the two branches drift on the next change
and nobody notices, because both still render.
What that means in practice:
This is where one codebase serving both surfaces usually fails, and it fails invisibly.
The failure looks like three mechanisms carrying the same values at once: CSS custom properties defined once, literal hex values pasted into markup, and a runtime helper that returns class names per theme. Each arrives for a good local reason. Together they mean a colour cannot be changed in one place, and nothing reports the mismatch.
The rule: one source of truth for values, any number of consumers. A themed surface resolving tokens at runtime is fine as long as it resolves the shared tokens rather than holding its own copies. The test is mechanical: change the brand accent in one place and see whether both surfaces move. If one does not, you have two design systems wearing one logo.
Literal values in markup are the specific thing to hunt, for two checkable reasons: a token audit does not see them, and a theme cannot reach them. A surface full of literals has not opted out of theming, it has quietly made theming impossible.
More often than a stray hex, the second blue arrives at a repository or system boundary. Where the boundary falls decides what work the single source needs:
The cost of crossing a boundary is what people actually optimise for. If consuming the shared source is slower than hardcoding the value, the value gets hardcoded, and no rule survives that.
A source of truth owned by everyone is owned by nobody, and this is the failure that outlives every other point here. The tokens go stale, each surface patches locally because asking is slower, and the split is complete before anyone proposes it.
Name one owner for the token source: a person or a single team, written down where the tokens live. The owner does not decide what each surface looks like. They decide what goes into the shared layer, they review changes to it, and they are the person a surface team asks before adding a value.
Two further rules make the ownership real rather than nominal:
Most readers arrive here already forked, and a rule about the correct end state is not a plan. The order matters, because doing it in the obvious order fails.
The step teams skip is the third, because it is the one requiring someone to overrule a surface they do not own. That is exactly what the owner is for.
See also: ui-density for choosing the product's density, color-mode-and-theme for adding a theme to one
surface, component-family-consistency for keeping a component meaning one thing everywhere.
まだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Derive a full UI palette from one or two brand colours — state variants, brand-tinted greys, semantic colours. Use when building or expanding a colour system.
日本語の概要は準備中です。原文の説明を表示しています。
Top bar, app launcher, tenant and environment cue, status bar. Use when designing the persistent shell or navigation between apps behind one login.
日本語の概要は準備中です。原文の説明を表示しています。
Product visuals must show the real product with real data. Use when building landing pages, hero sections, screenshots or demo panels.
日本語の概要は準備中です。原文の説明を表示しています。
Shape language across type, radius and icons carries brand personality. Use when starting a design system, picking icons or radius tokens, or reviewing visual consistency.
日本語の概要は準備中です。原文の説明を表示しています。
Rest, hover, active, focus, disabled and loading states, derived from the base colour. Use when designing buttons, links, inputs or any clickable component.
日本語の概要は準備中です。原文の説明を表示しています。
Rebuild a live web page 1:1 from measurement into Figma, Penpot or code, then verify it. Use when reproducing a page or checking a rebuild against the original.
日本語の概要は準備中です。原文の説明を表示しています。