For a design team: an off-brand value or drifted token is flagged by a gate, not spotted by eye.
Three layers, loaded in order
The contract
tokens.contract.css
Every semantic token, each with a neutral fallback. No brand.
Shipped
A brand pack
tokens.neutral.css · tokens.verdant.css · tokens.saulera.css
Primitives bound to the semantic names. A re-skin is one <link> line.
Shipped
Token-only components
components.css
No literals. Token lint in CI fails any token the contract does not declare.
Shipped
Primitive behind each token, in two token sets
| Semantic token | This page's pack | Inverse set | Read by |
--color-bg-surface | ln-card | ln-ink | Card, Link, Chip |
--color-fg | ln-ink | ln-paper | Card, Chip |
--color-fg-muted | ln-grey | ln-paper at 62% | Card |
--color-border | ln-sand | ln-paper at 14% | Card, Chip |
--color-accent | ln-orange | ln-orange | Card, Chip |
--color-accent-secondary | ln-peacock | ln-orange | Link |
Every token is generated into the CSS, iOS and Android outputs. Illustrative components, built for this page.
Same component, two token sets
Same markup and CSS. Only the wrapper's bindings differ.
This page's pack
Agreement
Monthly repayment
£214.60
Next due 14 November
View schedule
Inverse set, six overrides
Agreement
Monthly repayment
£214.60
Next due 14 November
View schedule
.scope--inverse {
--color-bg-surface: var(--color-bg-inverse);
--color-fg: var(--color-fg-on-inverse);
--color-fg-muted: var(--color-fg-on-inverse-muted);
--color-border: var(--color-inverse-line);
/* …two more, all token to token */
}
Illustrative card and figures, built for this page.
One source, generated targets
DTCG token source, the source of truth
system/tokens.source.json
W3C Design Tokens format. New tokens enter here first.
Shipped
Generators: gen-token-css · gen-handoff · gen-vocabulary
agent-layer/*.mjs, with Style Dictionary for the platform builds
Drift-check gate. CI regenerates every output and compares it with what is committed. Any difference fails the build.
Shipped
The handoff pack, never edited by hand
Generated and committed today. Six open slices remain. Partly shipped
CSS tokens
tokens/css/contract.css · neutral.css Shipped
iOS and Android tokens
FactoryTokens.swift · tokens.xml
Generated today. Spec-matching names, contract group and type tokens are an open slice.
In progress
ComponentSpec
pack.json, from system/specs/*.md Shipped
DataContract
contracts/*.contract.json · JSON Schema Shipped
Agent vocabulary
vocabulary.json
The only parts an agent may compose with.
Shipped
Web Component wrappers
wc/vd-*.mjs
Shadow DOM, styled only by declared tokens. Three data-bound components so far.
Shipped
Routing index
llms.txt
One line per pack file. Generated and gated.
Shipped
Shipped component CSS and data bindings
components.css · bindings · one command contract
Lets an engineer wire a real service to the pack. Open slices.
In progress
Figma import path
figma-import.md · tokens.dtcg.json
Four import routes documented. Parity run against a real Figma file has not landed.
In progress