Color · foundations

Warm paper, cold ink

Veldris color is a single tension: warm birch paper against cold fjord ink. Five product accents share one lightness and one chroma, only the hue changes, because the products differ in purpose, not in importance. All values are oklch; use the tokens, never raw hex.

§ 1 · Neutrals

Ink & paper

paper-0
paper-1
ink-50
ink-100
ink-200
ink-300
ink-400
ink-500
ink-600
ink-700
ink-800
ink-900
ink-950

Ink carries hue 235 at chroma ≤ 0.02, never a pure grey. Paper carries hue 95. In dark theme the roles invert but text keeps the paper hue: never pure white on pure black.

§ 2 · Brand accent

Aurora

aurora-300
aurora-500
aurora-600
aurora-700

The aurora: sovereign light over a northern sky. It is the only accent allowed outside a product context, primary buttons, focus rings, active states, links. 500 for fills, 700 for text on light, 300 for text on dark.

§ 3 · Product accents

One hue per product

Midgard · aurora · H168
Forge · ember · H50
Mimir · violet · H300
Bifrost · cyan · H235
Heimdall · gold · H95

Shared L ≈ 0.70, C ≈ 0.14. A product accent appears only inside that product's UI chrome, its marketing, or as an ordered data-viz series. Two product accents never compete in one composition, the master brand's aurora wins.

§ 4 · Semantic

Status

TokenLightDarkUse
--success-textaurora-700aurora-300Sealed, verified, healthy
--warning-textgold-700gold-300Degraded, unsealed, expiring
--danger / --danger-textoklch(0.62 0.18 27)danger-300Breach, failed verification, destructive actions
--info-textbifrost-700bifrost-300Syncing, in-progress
✓ Do

Use semantic tokens for status, always with a text label, color never carries meaning alone.

Keep body text at ink-800 / 4.5:1 contrast minimum.

✗ Don't

Use raw hex or oklch literals in product code, tokens only.

Use accents decoratively, or gradients as fills (a <6% chroma aurora wash on hero surfaces is the sole exception).