02 · Foundations
Color
Seven tokens. That’s the whole palette. A warm cream canvas instead of pure white, a single deep-indigo accent, four warm-grey steps for text, and one warm divider tone.
The palette
Every token below is a CSS custom property in tokens.css. Use them directly, don’t hand-pick hex values in components.
Why these, and no more
I start from warm cream because pure white reads as cold on screen and harsh in print. #F8F7F2 keeps the page feeling like paper without tilting sepia.
The accent is deep indigo, confident, quiet, and nothing like the indistinct blues that dominate software. It’s used sparingly: the accent line, the cursor, a hover state, a filled CTA. Never as a background.
The four grey steps are warm, not neutral. They layer on top of the cream without introducing a new temperature. The divider tone is the only one that sits between background and text, a single thin line to mark structure.
Usage
Every page follows the same rules:
--backgroundon every surface, the page body, cards, empty states.--foregroundfor headings and primary UI text.--text-secondaryfor body prose, where softer contrast reads better.--text-mutedfor nav, metadata, captions.--text-faintfor labels, timestamps, quiet affordances.--accentfor the accent line, active states, filled CTAs, the cursor. Never for backgrounds or body text.--dividerfor borders. Always 1px, never thicker.
In code
Drop tokens.css into a project and reference variables directly:
/* tokens.css */ :root { --background: #F8F7F2; --foreground: #1A1A1A; --accent: #1C1856; --text-secondary: #4A4A4A; --text-muted: #6B6B6B; --text-faint: #9B9B9B; --divider: #E0DED8; }