Skip to main content
Substrate does not emit a palette of named color tokens. It emits per-intent solver primitives — hue, chroma, and solved lightness channels — and the generated CSS composes final colors from them with calc(). Every variable below exists for every intent the brand declares: the conventional names (brand, neutral, danger, warning, success, info, beta) and any custom intents (tier-gold, acme-cyan, …) get identical treatment. See Core Concepts for the model.
There is no --color-* namespace. Intent names come solely from the brand’s intents: map — the demo configs and these docs use the conventional danger for destructive states, and no error intent exists unless a brand declares one. The reference tables on this page are generated from the ground-truth manifest extracted from the engine.

Intent primitives

The runtime solver writes these for each declared intent, scoped to the surface they were solved against: Two additional solver outputs are not per-intent: Per text role, the solver also writes a role-specific foreground lightness — --ucs-{intent}-fg-l-{role} for the roles heading, label, caption, code, and kbd — because APCA targets depend on the size and weight a role implies.

Baked per-mode triptychs

For the no-JS floor and native platforms, the pipeline also bakes resolved values per mode into generated/brands/<brand>/css/tokens.{light,dark,highContrast,darkHighContrast}.gen.css. Each intent resolves to a surface / text / border triple, as hex. For example, generated/brands/aurora/booking/css/tokens.light.gen.css:
There is no -subtle variant and no on-* naming — the foreground for an intent is its text channel, derived by the solver, never hand-picked.

Using color in markup

Elements opt into the cascade with data-ucs, and select an intent with the data-mode role attribute (a space-separated token list, so state tokens combine) — the full contract is on Markup Opt-In:
The runtime identifies the active brand by setting data-brand="<slug>" on the root. There is no theme attribute — scheme is a continuous preference; see Modes.

Cross-platform parity

The same brand data produces per-mode Swift (SubstrateSystemTokens, Display P3) and Kotlin/Compose artifacts with the same surface/text/border triptych, plus DTCG JSON for design tooling. See iOS and Android.