Foundations

Color

A sky-blue brand scale for primary actions, slate neutrals for the canvas, semantic feedback for status, and a calibrated hail-intensity ramp for radar overlays. Every color is a token; no raw hex in product code.

Brand · Sky

11-step scale. sky-700 is primary brand. sky-600 is the default interactive primary (links, primary buttons in motion). Use 50–200 for soft surfaces and badges; 800–950 for dark-mode primaries and contrast type.

sky-50
#f0f9ff
sky-100
#e0f2fe
sky-200
#bae6fd
sky-300
#7dd3fc
sky-400
#38bdf8
sky-500
#0ea5e9
sky-600
#0284c7
sky-700
#0369a1
sky-800
#075985
sky-900
#0c4a6e
sky-950
#082f49

Neutrals · Slate

Cool slate reads as technical and modern alongside sky. Use 50–200 for muted backgrounds, 300–400 for borders, 500–600 for muted text, 700–950 for body and high-contrast type.

slate-50
#f8fafc
slate-100
#f1f5f9
slate-200
#e2e8f0
slate-300
#cbd5e1
slate-400
#94a3b8
slate-500
#64748b
slate-600
#475569
slate-700
#334155
slate-800
#1e293b
slate-900
#0f172a
slate-950
#020617

Semantic · Feedback

Full 11-step ramps for each state. Tier 50/100 for soft backgrounds, 500 for icons and accents, 700 for text on soft backgrounds, 800/900 for deep accents and badges, 950 for elevated dark surfaces. Intermediate stops fill chart gradients and hover states.

Success — emerald

Approved supplements, completed inspections, green-light indicators.

success-50
#ecfdf5
success-100
#d1fae5
success-200
#a7f3d0
success-300
#6ee7b7
success-400
#34d399
success-500
#10b981
success-600
#059669
success-700
#047857
success-800
#065f46
success-900
#064e3b
success-950
#022c22

Warning — amber

Pending reviews, missing fields, attention-required states.

warning-50
#fffbeb
warning-100
#fef3c7
warning-200
#fde68a
warning-300
#fcd34d
warning-400
#fbbf24
warning-500
#f59e0b
warning-600
#d97706
warning-700
#b45309
warning-800
#92400e
warning-900
#78350f
warning-950
#451a03

Danger — red

Rejected submissions, out-of-scope citations, destructive actions.

danger-50
#fef2f2
danger-100
#fee2e2
danger-200
#fecaca
danger-300
#fca5a5
danger-400
#f87171
danger-500
#ef4444
danger-600
#dc2626
danger-700
#b91c1c
danger-800
#991b1b
danger-900
#7f1d1d
danger-950
#450a0a

Info — blue

Neutral system messaging, informational notices, in-progress states.

info-50
#eff6ff
info-100
#dbeafe
info-200
#bfdbfe
info-300
#93c5fd
info-400
#60a5fa
info-500
#3b82f6
info-600
#2563eb
info-700
#1d4ed8
info-800
#1e40af
info-900
#1e3a8a
info-950
#172554

Domain · Hail intensity

Calibrated for radar overlays and storm event severity. The 5 named bins (100/300/500/700/900) align with MESH hail-size tiers and ship with a size legend below — color alone is insufficient evidence. The full 11-step ramp fills gradient interpolation in heat-map overlays.

Bin legend (5 named tiers)

trace< 0.5"
0.75"pea
1.25"quarter
1.75"golf ball
2.0"+tennis ball

Full ramp (11 stops for gradient interpolation)

hail-50
#fffbeb
hail-100
#fef3c7
hail-200
#fde68a
hail-300
#fcd34d
hail-400
#fbbf24
hail-500
#f59e0b
hail-600
#d97706
hail-700
#b45309
hail-800
#92400e
hail-900
#78350f
hail-950
#451a03

Semantic tokens · Light

What product code references. Tokens map to scale steps; if you need a new shade, add it to the scale and assign a token.

TokenValueUsage
--bg
slate-0
Page background
--bg-muted
slate-50
Sidebars, muted surfaces
--bg-subtle
slate-100
Hover states, subtle fills
--bg-inverse
slate-900
Inverted surfaces
--fg
slate-900
Body text
--fg-muted
slate-600
Secondary text
--fg-subtle
slate-500
Tertiary, captions
--border
slate-200
Default border
--border-strong
slate-300
Inputs, emphasized borders
--primary
sky-700
Primary actions, brand
--primary-hover
sky-800
Primary hover
--primary-soft
sky-50
Soft primary surfaces
--primary-soft-fg
sky-800
Text on primary-soft
--secondary
slate-700
Neutral secondary accent
--secondary-soft
slate-100
Soft neutral accent surfaces
--header-highlight-bg
primary
Table, card, modal, and picker headers
--header-highlight-border
primary-hover
Header highlight divider
--table-head-bg
header-highlight-bg
Forensic data table headers

Accessibility

All token pairings used for text meet WCAG AA at minimum. Body text on bg achieves AAA. Primary on white passes AA Large; primary-soft-fg on primary-soft passes AA at all sizes.

Do
Use sky-700 on white for primary CTAs. Use sky-50 + sky-800 for soft pills and tags.
Don't
Use sky-400 or sky-500 for body text on white — both fail AA. Reserve them for fills, icons, and dark-theme primary.