Theming
Tokens, and how to make Lilt yours
Every component reads semantic --lilt-* variables — never raw hex values. The tables below render live from tokens/lilt.tokens.json, the canonical W3C-format token source.
Rebranding: mint is a guest
The pine accent and its mint wash are swappable defaults. To rebrand, replace five semantic values per mode and keep the contrast rules: a deep primary that can fill controls in light mode, a pale one in dark. Every button, badge, focus ring, and selection follows automatically:
:root {
--lilt-primary: #5b46b8; /* your accent, deep enough to fill controls */
--lilt-primary-tint: #c7b9ff; /* its pale wash: selection, soft hovers */
--lilt-primary-soft: #efeaff; /* its soft tint */
--lilt-primary-text: #3a2d73; /* AAA text on the tint */
--lilt-focus: #5b46b8; /* focus ring, AA on canvas */
}
.dark {
--lilt-primary: #b6a6f5;
--lilt-primary-tint: #b6a6f5;
--lilt-primary-soft: #2c2352;
--lilt-primary-text: #cfc3ff;
--lilt-focus: #b6a6f5;
}Color tokens
| Token (light) | Value |
|---|---|
| --lilt-canvas | #F8F7F3 |
| --lilt-surface | #FDFCF8 |
| --lilt-surface-secondary | #EFEDE7 |
| --lilt-field | #FBFAF6 |
| --lilt-text | #121713 |
| --lilt-text-muted | #475249 |
| --lilt-text-subtle | #69746C |
| --lilt-border | #C4CCC5 |
| --lilt-border-strong | #7C887F |
| --lilt-button | #121713 |
| --lilt-button-hover | #283029 |
| --lilt-button-text | #F7F8F3 |
| --lilt-button-border | #121713 |
| --lilt-primary | #167F55 |
| --lilt-primary-tint | #AEEACF |
| --lilt-primary-soft | #E3F7ED |
| --lilt-primary-text | #164C35 |
| --lilt-focus | #167F55 |
| --lilt-warning | #FFD0B5 |
| --lilt-highlight | #F8E8A6 |
| --lilt-danger | #A62B3B |
| --lilt-danger-soft | #FDE8EB |
| --lilt-danger-soft-hover | #F9D7DC |
| --lilt-danger-text | #7B1B2A |
| --lilt-selection-text | #102117 |
| --lilt-chart1 | #167F55 |
| --lilt-chart2 | #D97A4E |
| --lilt-chart3 | #B3902C |
| --lilt-chart4 | #A62B3B |
| --lilt-chart5 | #5C7263 |
| Token (dark) | Value |
|---|---|
| --lilt-canvas | #101411 |
| --lilt-surface | #171C18 |
| --lilt-surface-secondary | #222923 |
| --lilt-field | #141915 |
| --lilt-text | #F1F4EE |
| --lilt-text-muted | #C3CCC4 |
| --lilt-text-subtle | #9CA79F |
| --lilt-border | #465149 |
| --lilt-border-strong | #88948B |
| --lilt-button | #EEF2EC |
| --lilt-button-hover | #DCE3DD |
| --lilt-button-text | #111612 |
| --lilt-button-border | #EEF2EC |
| --lilt-primary | #A5E5C6 |
| --lilt-primary-tint | #A5E5C6 |
| --lilt-primary-soft | #1D3B2D |
| --lilt-primary-text | #B9F0D3 |
| --lilt-focus | #A5E5C6 |
| --lilt-warning | #7A4935 |
| --lilt-highlight | #5D532C |
| --lilt-danger | #FF94A2 |
| --lilt-danger-soft | #4B2028 |
| --lilt-danger-soft-hover | #5D2630 |
| --lilt-danger-text | #FFB3BD |
| --lilt-selection-text | #102117 |
| --lilt-chart1 | #A5E5C6 |
| --lilt-chart2 | #FFB98C |
| --lilt-chart3 | #F0D778 |
| --lilt-chart4 | #FF94A2 |
| --lilt-chart5 | #9CB3A4 |
Radius, motion, and type
- Radius roles: 12px compact controls, 16px controls and cards, 20px dialogs, pills for md/lg buttons.
- Motion: 140ms fast / 220ms base / 320ms expressive, one shared ease-out curve, hover lift capped at 2px — all removed under reduced motion.
- Type: Space Grotesk (display, tight tracking) and DM Sans (body, 1.65 line height).
- Elevation: none. Borders and surface shifts only.