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 Aug 21, 2026 by Juan Pablo Turina

Brand

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

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

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

Text on Primary surfaces.

Light#3e4fe0
Dark#7181ff
Primary text
var(--primary-text)

Primary as INK — links, ghost buttons, emphasis. It lifts in dark because one indigo cannot both carry white on a button and read as text on a dark ground; the two requirements do not overlap.

Surfaces

Light#ffffff
Dark#0a0a0a
Background
var(--background)

App base surface.

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

Containers elevated over the background.

Light#f5f5f5
Dark#262626
Muted
var(--muted)

Subtle backgrounds: TabsList, alternating rows, code blocks.

Light#f5f5f5
Dark#404040
Accent
var(--accent)

Hover states and selection in menus.

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

Dropdowns, tooltip content, context menus.

Text

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

Primary text.

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

Secondary text, hints, low-hierarchy labels.

Borders & focus

Light#e5e5e5
Darkrgb(255 255 255 / 10%)
Border
var(--border)

Card borders, separators.

Light#e5e5e5
Darkrgb(255 255 255 / 15%)
Input
var(--input)

Input and toggle borders.

Light#737373
Dark#a3a3a3
Ring
var(--ring)

Focus ring.

Semantic

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

Destructive actions, errors, critical alerts.

Light#15803d
Dark#4ade80
Success
var(--success)

Confirmations, approved states.

Light#ca8a04
Dark#facc15
Warning
var(--warning)

Cautions and states that need attention but are not errors. Yellow, imported from production — amber is not in the system.

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.