Foundations

Colors

The system uses CSS tokens with light and dark variants. Never hardcode hex — always use the token so everything respects the active mode.

Updated Jul 10, 2026 by Leonardo Posada

Brand

Light#3e4fe0
Dark#6373f7
Primary
var(--primary)

Main CTA, links, active states. One Primary per screen.

Light#ffffff
Dark#ffffff
Primary foreground
var(--primary-foreground)

Text on Primary surfaces.

Surfaces

Light#ffffff
Dark#09090b
Background
var(--background)

App base surface.

Light#ffffff
Dark#111113
Card
var(--card)

Containers elevated over the background.

Light#f5f5f5
Dark#18181b
Muted
var(--muted)

Subtle backgrounds: TabsList, alternating rows, code blocks.

Light#f5f5f5
Dark#1c1c22
Accent
var(--accent)

Hover states and selection in menus.

Light#ffffff
Dark#111113
Popover
var(--popover)

Dropdowns, tooltip content, context menus.

Text

Light#0a0a0a
Dark#fafafa
Foreground
var(--foreground)

Primary text.

Light#737373
Dark#a1a1aa
Muted foreground
var(--muted-foreground)

Secondary text, hints, low-hierarchy labels.

Borders & focus

Light#e5e5e5
Dark#27272a
Border
var(--border)

Card borders, separators.

Light#e5e5e5
Dark#27272a
Input
var(--input)

Input and toggle borders.

Light#a3a3a3
Dark#71717a
Ring
var(--ring)

Focus ring.

Semantic

Light#dc2626
Dark#ef4444
Destructive
var(--destructive)

Destructive actions, errors, critical alerts.

Light#16a34a
Dark#22c55e
Success
var(--success)

Confirmations, approved states.

Usage

System rules when applying color on screen.

Do
  • Always use var(--token) so light and dark work automatically.
  • One Primary per screen — reserve it for the main action.
  • Semantics (Destructive / Success) only communicate real state, they don't decorate.
  • Muted foreground for hints, timestamps, and low-hierarchy labels.
Don't
  • Never hardcode #hex in components — breaks dark mode.
  • Don't use Destructive as visual accent — it loses meaning.
  • Don't mix Muted background with Muted foreground without checking contrast.
  • Don't invent new tokens without discussing — you lose consistency with the real DS.

Tailwind palette

The full 22-family × 11-shade Tailwind default palette is available in the framework. Click any swatch to copy its class name (bg-slate-500, text-blue-600, etc.).

Reach for tokens first.
For anything Dashboard-adjacent, default to the semantic tokens above — that's what makes light/dark and future theme changes work automatically. The raw palette is only for cases the tokens can't serve: chart series, illustrations, and one-off brand accents.
50
100
200
300
400
500
600
700
800
900
950
slate
gray
zinc
neutral
stone
red
orange
amber
yellow
lime
green
emerald
teal
cyan
sky
blue
indigo
violet
purple
fuchsia
pink
rose

Notes from the real DS

Slate vs neutral.
The official DS has 2 tokens (--accent, --input) defined with slate/100 and slate/200 when the Figma DS documents them in neutral. Here we use neutral (Figma source of truth). Watch out when porting to the real Dashboard.