Foundations / Colour
Colour
A deliberately tight palette: one violet, ink, and warm neutrals. Components reference semantic aliases — never raw hex — so re-colouring the whole system is a one-line change in tokens.css.
Brand
Violet is the only accent. Ink is the dark ground and default text colour.
Neutrals
Semantic aliases
These are the tokens you use in components. Each maps a role to a raw colour.
--bg-page --bg-surface --bg-dark --fg-default --fg-muted --fg-accent --fg-on-dark Borders & overlays
Semi-transparent tokens for hairlines and glass panels. The glass tokens are white overlays meant for use on imagery / dark grounds.
Transparencies
Two transparency scales carry most of the depth. White-on-dark opacities set text hierarchy over ink and imagery; accent tints (via color-mix) give soft violet backgrounds without a second colour.
White on dark
Accent tints
color-mix(… 6%) Subtle accent background color-mix(… 12%) Tinted panel color-mix(… 16%) Badge / pill background These transparency values are used as literals across components, not yet as named tokens — a good candidate to tokenise (e.g. --fg-on-dark-70, --tint-accent-16) when the system firms up.
In context
How the roles combine. Text is single-colour; the accent is violet only; fills are flat — no gradients.
Heading on white
Muted body text sits below in Ink 70.
AccentHeading on cream
Cream cards separate content from the page.
AccentHeading on ink
On-dark text uses white at reduced opacity.
AccentRules
Use semantic aliases in components (--fg-accent), not raw hex. Keep the accent violet only. Fills stay flat.
Introduce new colours, mix violet + ink in one heading, or use gradients. If a design needs a colour that isn’t here, add a token first.