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

CRM job hub tokens

Layout aliases for authenticated CRM job pages. These preserve the approved Property tab shape: floating outline rail, center command stack, right action rail, and a real interactive map with predictable responsive height.

TokenValueUsage
--job-hub-outline-width
290px
Floating property outline rail
--job-hub-action-rail-width
340px
Right-side job action rail
--job-hub-panel-gap
22px
Three-column CRM workspace gutter
--job-hub-map-height
360px
Property command-center map height
--job-hub-map-height-compact
300px
Compact map height before mobile stack

Semantic tokens · Status

Theme-aware status aliases (added 2026-07-18). Product code uses these — not raw ramp steps — for status surfaces; the dark theme remaps them to translucent tints + 300-step text automatically. Each hue also ships a --*-border (30% tint outline). .sc-card-success/warning/danger/info consume them.

TokenLight valueUsage
--success
success-600 · dark: 400
Icons, emphasis, solid fills
--success-soft / -soft-fg
success-50 / 700 · dark: 14% tint / 300
Soft cards + their text
--warning
warning-600 · dark: 400
Pending, attention states
--warning-soft / -soft-fg
warning-50 / 700 · dark: 14% tint / 300
Soft cards + their text
--danger
danger-600 · dark: 400
Destructive, failures
--danger-soft / -soft-fg
danger-50 / 700 · dark: 14% tint / 300
Soft cards + their text
--info
info-600 · dark: 400
Neutral notices
--info-soft / -soft-fg
info-50 / 700 · dark: 14% tint / 300
Soft cards + their text

Companion · ISO CRM dark palette

The native iOS app and the approved ISO CRM design (2026-07-15 handoff) speak this palette — published in tokens.css so docs, previews, and the iOS DesignSystem bridge read one sheet. Web /app adoption is a re-theme decision, not implied. Badge/chip tint formula: color-mix(in srgb, var(--iso-*) 13–16%, transparent). Full anatomy: the handoff's 05_AGENT_IMPLEMENTATION_SPEC and the iOS & iPadOS platform page.

TokenValueUsage
--iso-bg-canvas / --iso-bg-screen
#101013 / #000000
Console + sidebar bg / phone screen bg
--iso-surface-card / -list / -control / -sheet
#161619 / #131316 / #17171a / #1d1d21
Cards / grouped lists / pills / bottom sheets
--iso-accent
#3BA9F4
Icons, links, active states, tints
--iso-accent-alt
#2BA3EE
Filled circles: avatars, FAB, toggle-ON
--iso-accent-button
#1273B8
Primary filled buttons, own chat bubbles
--iso-success / -warning / -danger
#4ADE80 / #F09A37 / #E5382E
SIGNED · PENDING · badges/destructive
--iso-special
#B48CF2
Team lead · NEEDS PM · CONFLICT
--iso-sun-*
paper #E8E4DA · pins #1E9E46/#E3A51D/#D02A1E
Tablet field-mode sunlight palette

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.