Colors

Perceptually uniform OKLCH color palettes, semantic tokens, and contrast standards for the VOXFM interface.

Color Philosophy

By using OKLCH instead of legacy sRGB/HSL, lightness (L) is perceived identically across all hues, eliminating unexpected contrast drops. A disciplined, low-saturation cool slate spectrum (h ≈ 248°) creates a quiet baseline, letting content and audio telemetry take center stage. Components strictly consume semantic tokens (bg-card) rather than primitive values, guaranteeing seamless light and dark mode adaptation.

Primitive Palette (OKLCH Slate & Status)

The 11-step cool slate scale forming the structural foundation of all surfaces, borders, and typography, alongside calibrated status primitives.

50
Slate 50oklch(97.22% 0.003 247.86)
100
Slate 100oklch(95.07% 0.005 247.88)
200
Slate 200oklch(90.63% 0.008 236.57)
300
Slate 300oklch(82.56% 0.013 244.29)
400
Slate 400oklch(69.66% 0.018 242.54)
500
Slate 500oklch(57.41% 0.021 248.20)
600
Slate 600oklch(48.80% 0.018 248.20)
700
Slate 700oklch(41.32% 0.016 251.74)
800
Slate 800oklch(31.82% 0.011 248.18)
900
Slate 900oklch(25.05% 0.009 255.59)
950
Slate 950oklch(18.54% 0.005 248.11)
Light
Green Strict (Light Success)oklch(45% 0.15 145)
Dark
Green Luminous (Dark Success)oklch(0.72 0.17 145)
Light
Red Strict (Light Destructive)oklch(42% 0.16 27.325)
Dark
Red Luminous (Dark Destructive)oklch(0.704 0.191 22.216)
Light
Amber Strict (Light Warning)oklch(55% 0.15 75)
Dark
Amber Luminous (Dark Warning)oklch(76% 0.16 75)
Light
Sky Strict (Light Info)oklch(45% 0.14 240)
Dark
Sky Luminous (Dark Info)oklch(72% 0.14 240)

Semantic Theme Tokens

Semantic mappings consumed directly by components via Tailwind utility classes.

Canvas & SurfacesLayered backgrounds and elevated container surfaces.
backgroundbg-background

Main viewport and document background

Light:oklch(1 0 0) [Pure White]
Dark:oklch(13.90% 0.003 246.26) [Dark Slate]
cardbg-card

Elevated card and dialog panel surface

Light:var(--color-slate-50)
Dark:var(--color-slate-950)
popoverbg-popover

Floating menus, dropdowns, and tooltips

Light:var(--color-slate-50)
Dark:var(--color-slate-950)
Content & TypographySemantic foreground tokens establishing reading hierarchy.
foregroundtext-foreground

Primary text, headers, and essential icons

Light:var(--color-slate-950)
Dark:var(--color-slate-50)
card-foregroundtext-card-foreground

Primary copy rendered inside card containers

Light:var(--color-slate-950)
Dark:var(--color-slate-50)
muted-foregroundtext-muted-foreground

Secondary labels, captions, and helper descriptions

Light:var(--color-slate-700)
Dark:var(--color-slate-400)
Interactive & ActionsAction-oriented surface, status, and text tokens.
primarybg-primary / text-primary-foreground

Primary call-to-action buttons and active states

Light:var(--color-slate-900) / var(--color-slate-50)
Dark:var(--color-slate-50) / var(--color-slate-900)
secondarybg-secondary / text-secondary-foreground

Secondary interactive buttons and subtle pills

Light:var(--color-slate-50) / var(--color-slate-900)
Dark:var(--color-slate-800) / var(--color-slate-50)
accentbg-accent / text-accent-foreground

Hover states and list item highlights

Light:var(--color-slate-200) / var(--color-slate-900)
Dark:var(--color-slate-900) / var(--color-slate-50)
successbg-success / text-success-foreground

Positive feedback, validation checkmarks, active status badges

Light:var(--color-green-strict) / var(--color-slate-50)
Dark:oklch(0.72 0.17 145) / var(--color-slate-950)
infobg-info / text-info-foreground

System guides, informative hints, sync indicators

Light:var(--color-sky-strict) / var(--color-slate-50)
Dark:oklch(72% 0.14 240) / var(--color-slate-950)
warningbg-warning / text-warning-foreground

Caution alerts, non-blocking limits, buffer warnings

Light:var(--color-amber-strict) / var(--color-slate-950)
Dark:oklch(76% 0.16 75) / var(--color-slate-950)
destructivebg-destructive / text-destructive-foreground

Critical warnings, delete actions, error alerts

Light:var(--color-red-strict) / var(--color-slate-50)
Dark:oklch(0.704 0.191 22.216) / var(--color-slate-950)
Structure & FocusBorders, input fields, and keyboard accessibility indicators.
borderborder-border

Component perimeters and dividing rules

Light:color-mix(in oklab, var(--color-slate-700) 20%, transparent)
Dark:color-mix(in oklab, var(--color-slate-50) 10%, transparent)
inputborder-input / bg-input

Form field bounds and unfilled track states

Light:var(--color-slate-200)
Dark:var(--color-slate-800)
ringring-ring / outline-ring

Focus rings for keyboard navigation

Light:var(--color-slate-700)
Dark:var(--color-slate-400)
Sidebar TokensEncapsulated tokens dedicated to navigational rails.
sidebarbg-sidebar

Sidebar container background

Light:var(--color-slate-50)
Dark:var(--color-slate-950)
sidebar-foregroundtext-sidebar-foreground

Sidebar navigation links and labels

Light:var(--color-slate-950)
Dark:var(--color-slate-50)
sidebar-primarybg-sidebar-primary

Active navigational item indicator

Light:oklch(0.609 0.126 221.723)
Dark:oklch(0.715 0.143 215.221)
sidebar-accentbg-sidebar-accent

Sidebar hover and selection highlight

Light:var(--color-slate-300)
Dark:var(--color-slate-800)

WCAG 2.2 Contrast Compliance

Mathematical contrast ratios for core surface-to-content pairings across both theme modes.

SurfaceForeground TokenLight ModeDark ModeWCAG Level
backgroundforeground18.5:117.8:1AAA
cardcard-foreground17.2:117.8:1AAA
cardmuted-foreground10.1:19.4:1AAA
primaryprimary-foreground16.4:115.2:1AAA
successsuccess-foreground7.4:17.6:1AAA
warningwarning-foreground8.1:18.3:1AAA
infoinfo-foreground7.3:17.5:1AAA
destructivedestructive-foreground7.2:17.1:1AAA

Implementation Guidelines

Do

  • Use semantic classes exclusively (bg-card, text-foreground).
  • Use text-muted-foreground for all secondary and helper captions.
  • Use bg-success and text-success for positive feedback states.
  • Use color-mix(in oklab, ...) when creating custom translucent alpha borders.

Don't

  • Don't consume primitive tokens directly in components (text-slate-500).
  • Don't use hardcoded status utility classes (text-green-500, bg-red-600).
  • Don't use hardcoded hex or RGB strings in component markup.