DESIGN TOKENS

Variables, values,
and what they do

Every token in the system with its oklch value. Toggle the theme to see how one color drives the entire inversion.

01 / FOREST BLACK

One color, two roles

The entire system pivots on a single oklch value. In dark mode it is the canvas. In light mode it becomes the primary text, the CTA button, and at reduced opacities it tints every surface, border, and overlay.

oklchDark modeLight mode
0.22 0.044 230.17 --bg-canvas (page background) --text-primary, --btn-primary-bg (headings, CTA button)
... / 10% -- --border-standard (cards, inputs)
... / 6% -- --border-subtle (dividers)
... / 5% -- --surface-05 (hover, badge bg)
... / 2% -- --surface-02 (input bg, table header)
... / 50% -- --overlay-backdrop
... / 85% --overlay-backdrop --
02 / SURFACES

Background & elevation

TokenDark oklchLight oklchRole
--bg-canvas0.22 0.044 2300.975 0.005 228Page background
--bg-panel0.25 0.038 2280.952 0.008 228Sidebars, panels
--bg-surface0.285 0.041 2280.993 0.003 228Cards, popovers
--bg-elevated0.331 0.043 2280.988 0.004 228Hover, raised

Both modes carry brand hue 228 (teal). Dark: luminance 0.22 to 0.331, chroma ~0.04. Light: luminance 0.952 to 0.993, chroma 0.003 to 0.008.

Surface compositing layers

TokenDarkLightRole
--surface-020.23 0.041 2330.968 0.006 228Input bg, table header
--surface-030.239 0.04 2340.963 0.007 228Mid compositing
--surface-050.256 0.041 2360.953 0.009 228Hover, badge bg
03 / TEXT

Content hierarchy

TokenDark oklchLight oklchRole
--text-primary0.978 0 00.22 0.044 230Headings, values
--text-secondary0.874 0.015 2610.331 0.043 228Body text
--text-tertiary0.649 0.015 2620.521 0.024 233Metadata, placeholders
--text-quaternary0.61 0.024 2330.53 0.015 232Timestamps, disabled

Primary inverts between modes (near-white L=0.978 in dark, forest-black L=0.22 in light). Quaternary is independently tuned per mode to pass WCAG AA (4.5:1) at all text sizes.

04 / ACCENT & STATUS

Brand, state, and signal

Brand accent

Tokenoklch
--accent-primary0.825 0.237 148
--accent-functional0.458 0.096 165
--accent-hover0.625 0.173 150
--accent-text0.825 0.237 148
--btn-primary-bg0.458 0.096 165
--btn-primary-hover0.625 0.173 150

CTA button is green in dark mode, forest-black in light mode. Hover reveals brand green in both modes. --accent-text shifts from neon (L=0.825) to functional (L=0.458) for AA contrast.

Status

TokenDarkLight
--status-success0.825 0.237 1480.458 0.096 165
--status-error0.637 0.208 250.57 0.215 27
--status-warning0.769 0.165 700.555 0.146 49
--status-info0.62 0.228 2600.473 0.168 257

Light mode darkens status colors (lower L values) to pass AA contrast on white. Hues stay in the same family.

Borders

TokenDarkLightRole
--border-subtlewhite / 5%forest / 6%Dividers, faint separators
--border-standardwhite / 8%forest / 10%Cards, inputs, tables

Dark: semi-transparent white on teal. Light: semi-transparent forest-black on white. Same visual weight, inverted source.

05 / TYPOGRAPHY

Fonts, weights, radius

Font families

TokenFamilyRole
--font-primarySatoshiUI, headings, body, nav
--font-monoSource Code ProTechnical labels (uppercase)
--font-dataJetBrains MonoAmounts, IDs (tabular-nums)

Weight system

WeightUse
400Reading text, body copy
500UI, navigation, labels (signature)
700Strong emphasis, display, logo

Radius scale

ValueNameUse
2pxMicroInline badges, toolbar
4pxStandardSmall containers
6pxComfortableButtons, inputs
8pxCardCards, tables
12pxPanelFeatured cards
9999pxPillChips, tags
50%CircleAvatars, dots
06 / MOTION

Duration, easing, states

Duration tokens

TokenValueUse
--duration-press100msActive/pressed
--duration-state150msToggle, switch
--duration-hover150msBackground hover
--duration-focus150msFocus ring
--duration-reveal200msTooltip, dropdown
--duration-panel300msModal, theme
--duration-mount400msContent enter
--duration-data600msCount-up, chart

Easing curves

TokenValue
--ease-outcubic-bezier(0.16, 1, 0.3, 1)
--ease-in-outcubic-bezier(0.77, 0, 0.175, 1)
--ease-springcubic-bezier(0.34, 1.56, 0.64, 1)

Interaction states

StateTreatment
Hoverbg +1 luminance step
Activescale(0.97)
Focus2px canvas + 4px accent ring
Disabledopacity: 0.4
Loadingshimmer, 1.5s infinite