Skip to main content
← All Foundations

Canon

Colors

Every color you need, ready to copy. Black and white for structure. Opacity for hierarchy. Semantic colors when something needs attention.

Published January 8, 2026

Why so few colors?

More colors mean more decisions. We use black and white as the foundation, then adjust opacity to create hierarchy—no need to pick new shades. When you need to show success, error, or a warning, semantic colors do the work.

“Color communicates. Decoration distracts.”

Backgrounds

Four levels from pure black to subtle grey. Stack them to create depth—like layers of paper.

TokenValueDescription
--color-bg-pure#000000Pure black, the canvas
--color-bg-base#0a0a0aSlight lift for main surfaces
--color-bg-surface#111111Cards and elevated elements
--color-bg-elevated#1a1a1aModals and popovers

Foregrounds

Five text colors, all white at different opacities. Use brighter for headlines, dimmer for captions.

TokenValueContrastDescription
--color-fg-primaryrgba(255,255,255,1)21:1Headlines, emphasis
--color-fg-secondaryrgba(255,255,255,0.8)13.7:1Body text
--color-fg-tertiaryrgba(255,255,255,0.6)9.7:1Secondary information
--color-fg-mutedrgba(255,255,255,0.46)4.56:1Captions, hints
--color-fg-subtlergba(255,255,255,0.2)2.1:1Decorative only

WCAG Compliance: --color-fg-muted (4.56:1) meets AA for normal text. --color-fg-subtle should only be used for decorative elements.

Borders

Three border levels for separation and emphasis.

TokenValueDescription
--color-border-defaultrgba(255,255,255,0.1)Subtle separation
--color-border-emphasisrgba(255,255,255,0.2)Hover states
--color-border-strongrgba(255,255,255,0.3)Active states

Semantic Colors

Four colors that mean something: success, error, warning, info. Each comes with -muted and -border variants.

TokenValueUse
--color-success#22c55ePositive feedback
--color-error#ef4444Errors, destructive actions
--color-warning#f59e0bCaution states
--color-info#3b82f6Informational

Variants

Each semantic color has muted and border variants:

/* Success variants */
--color-success: #22c55e;
--color-success-muted: rgba(34, 197, 94, 0.1);
--color-success-border: rgba(34, 197, 94, 0.3);

/* Error variants */
--color-error: #ef4444;
--color-error-muted: rgba(239, 68, 68, 0.1);
--color-error-border: rgba(239, 68, 68, 0.3);

Interactive States

TokenValueUse
--color-hoverrgba(255,255,255,0.05)Hover backgrounds
--color-activergba(255,255,255,0.1)Active/pressed states
--color-focusrgba(255,255,255,0.5)Focus rings

Usage Example

.card {
  background: var(--color-bg-surface);
  border: 1px solid var(--color-border-default);
  color: var(--color-fg-secondary);
}

.card:hover {
  border-color: var(--color-border-emphasis);
  background: var(--color-hover);
}

.card-title {
  color: var(--color-fg-primary);
}

.card-meta {
  color: var(--color-fg-muted);
}