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.
The handoff pack, file by file
Generated and committed today, never edited by hand. Six open slices remain.
- CSS tokens: tokens/css/contract.css · neutral.css. Shipped.
- iOS and Android tokens: FactoryTokens.swift · tokens.xml. In progress.
- ComponentSpec: pack.json, from system/specs/*.md. Shipped.
- DataContract: contracts/*.contract.json · JSON Schema. Shipped.
- Agent vocabulary: vocabulary.json. Shipped.
- Web Component wrappers: wc/vd-*.mjs. Shipped.
- Routing index: llms.txt. Shipped.
- Shipped component CSS and data bindings: components.css · bindings · one command contract. In progress.
- Figma import path: figma-import.md · tokens.dtcg.json. In progress.
Notes on the handoff pack
- DTCG token source
- The source of truth. W3C Design Tokens format. New tokens enter here first. system/tokens.source.json Shipped
- Generators
- gen-token-css · gen-handoff · gen-vocabulary; agent-layer/*.mjs, with Style Dictionary for the platform builds Shipped
- Drift-check gate
- CI regenerates every output and compares it with what is committed. Any difference fails the build. Shipped
- iOS and Android tokens
- Generated today. Spec-matching names, contract group and type tokens are an open slice.
- Agent vocabulary
- The only parts an agent may compose with.
- Web Component wrappers
- Shadow DOM, styled only by declared tokens. Three data-bound components so far.
- Routing index
- One line per pack file. Generated and gated.
- Component CSS and data bindings
- Lets an engineer wire a real service to the pack. Open slices.
- Figma import path
- Four import routes documented. Parity run against a real Figma file has not landed.