Colors

Drivers
The frozen OKLCH constants the whole palette is derived from.

brand

#1d82ff

primary, ring & sidebar accents

canvas

#f9f8f6

surface ladder, tint & text hue

--hue

85

--c-bg

0.003

--bg-l

0.979

--contrast

0.84

--brand-h

257

--brand-c

0.195

--brand-l

0.62

The two Opus source colors derive the seven OKLCH drivers, which derive every token below. The drivers are frozen constants in globals.css — the dashboard always ships this one theme.

Raw palette
The primitive ramps every semantic token is sampled from — generated from the frozen drivers.
Neutral ramp--color-gray-*
0
25
50
100
200
300
400
500
600
700
800
900
950
Red ramp--color-red-* · oklch(L · C · 17)
1
2
3
4
5
6
7
8
9
10
11
12
Green ramp--color-green-* · oklch(L · C · 145)
1
2
3
4
5
6
7
8
9
10
11
12
Yellow ramp--color-yellow-* · oklch(L · C · 91)
1
2
3
4
5
6
7
8
9
10
11
12
Orange ramp--color-orange-* · oklch(L · C · 55)
1
2
3
4
5
6
7
8
9
10
11
12
Purple ramp--color-purple-* · oklch(L · C · 295)
1
2
3
4
5
6
7
8
9
10
11
12
Teal ramp--color-teal-* · oklch(L · C · 180)
1
2
3
4
5
6
7
8
9
10
11
12
AI ramp--color-ai-* · saturated identity colors
1
2
3
4
5
6
7
8
Brand rampoklch(L · 0.195 · 257)
0.97
0.92
0.85
0.76
0.66
0.56
0.47
0.38
0.3
0.22
White alpha rampoklch(1 · 0 · 0 / A)
0.020.050.10.150.20.30.40.550.70.85
Dark alpha rampoklch(0 · 0 · 0 / A)
0.020.050.10.150.20.30.40.550.70.85
Brand anchors

--brand

oklch(0.62 0.195 257)

--brand-hover

oklch(0.570 0.195 257)

Neutral gray tokens
The named gray steps product tokens sample from, light to dark.

--color-gray-0

White

Cards, popovers, elevated surfaces

--color-gray-0

--color-gray-25

Near-white

Subtle canvas-adjacent tint

--color-gray-25

--color-gray-50

Canvas · secondary

Page shell, sidebar, trays, grouped blocks

--color-gray-50

--color-gray-100

Tertiary · inset

Recessed wells, stronger nested hierarchy

--color-gray-100

--color-gray-200

Deeper step

Available primitive step beyond tertiary

--color-gray-200

--color-gray-300

Soft neutral

Available primitive step

--color-gray-300

--color-gray-400

Disabled

Disabled text and icons

--color-gray-400

--color-gray-500

Tertiary text

Hints, metadata, low-emphasis labels

--color-gray-500

--color-gray-600

Secondary text

Sidebar text, supporting copy

--color-gray-600

--color-gray-700

Strong neutral

Available primitive step

--color-gray-700

--color-gray-800

Primary icon

Default icon color

--color-gray-800

--color-gray-900

Inverse surface

Dark surfaces

--color-gray-900

--color-gray-950

Primary text

Headings and body text

--color-gray-950

Semantic layer
Product UI should use these role tokens: backgrounds, text, icons, borders, state, accent, and full status triplets.

Backgrounds

App shell & page backgroundbg-canvas
Cards, panels & tablesbg-primary
Gentle section inside whitebg-subtle
Menus, popovers & dialogsbg-elevated
Menu itemAnother actionMore options
Grouped traybg-secondary
Inset wellbg-tertiary
White surfacebg-primary
Nested traybg-secondary
Grouped blockbg-secondary

Text

Primary — section titles and key content

Secondary — supporting copy and descriptions

Tertiary — metadata, timestamps, helper text

Disabled — inactive or unavailable text

Inverse — on dark, brand, or strong status fills

Icons

primary
secondary
tertiary
disabled
inverse

Borders and states

border-primary
border-secondary
border-tertiary
state-hover
state-pressed
state-selected

Accent

Status triplets

SuccessWarningErrorInfoAI
TokenValue
Backgrounds
Canvas
—
Primary
—
Subtle
—
Secondary
—
Tertiary
—
Elevated
—
Text
Primary
—
Secondary
—
Tertiary
—
Disabled
—
Inverse
—
Icons
Primary
—
Secondary
—
Tertiary
—
Disabled
—
Inverse
—
Borders
Primary
—
Secondary
—
Tertiary
—
States
Hover
—
Pressed
—
Selected
—
Focus
—
Overlay scrim
—
Accent
Primary
—
Primary hover
—
Primary active
—
Primary foreground
—
Secondary
—
Secondary hover
—
Secondary active
—
Secondary foreground
—
Destructive
—
Destructive hover
—
Destructive active
—
Destructive foreground
—
Status backgrounds
Success bg
—
Warning bg
—
Error bg
—
Info bg
—
AI bg
—
Status text
Success text
—
Warning text
—
Error text
—
Info text
—
AI text
—
Status borders
Success border
—
Warning border
—
Error border
—
Info border
—
AI border
—

shadcn tokens remain available as the adapter layer for primitives; product UI should prefer this API.

Primitive neutrals
Lower-level implementation tokens, tinted by --hue. The semantic layer above is the product-facing API.
TokenValue
Surfaces
Background
—
Card
—
Popover
—
Secondary
—
Muted
—
Accent
—
Text
Foreground
—
Muted foreground
—
Card foreground
—
Popover foreground
—
Secondary foreground
—
Accent foreground
—
Borders
Border
—
Input
—

Elevation — surfaces nested in z-order

--color-bg-canvaslowest dashboard layer
--color-bg-primarynormal white container
--color-bg-subtlealmost-white background
--color-bg-tertiaryrecessed well
--color-bg-secondary
--color-bg-elevated

The warm canvas sits lowest. White base and raised surfaces sit above it; subtle surfaces create almost-white background areas; secondary shares the canvas gray for trays and grouped blocks; inset tertiary surfaces create recessed areas inside containers.

Brand & interaction
Derived from the brand drivers. --ring and hover states follow the brand.
TokenValue
Primary
—
Primary foreground
—
Ring
—
Status
Fixed, not brand-derived — error must read as error. Meaning is always paired with an icon + label so it survives a red brand (§11).
TokenValue
Destructive
—
Destructive foreground
—
Success
—
12 overdueOn trackAlmost done
AI accent
Fixed violet — held off the brand hue so generative surfaces always read as “AI”. Used for assistant panels, draft borders, and proposal cards.
TokenValue
AI
—
AI foreground
—
AI draft — approve or discard in the outline

Dock door safety · 6 screens

Proposal card surface

Sidebar chrome
Dedicated tokens for the nav rail.
TokenValue
Sidebar
—
Sidebar foreground
—
Sidebar primary
—
Sidebar primary fg
—
Sidebar accent
—
Sidebar accent fg
—
Sidebar border
—
Sidebar ring
—
Chart series
Intentionally independent hues so data stays distinguishable — these do not follow the brand hue.
TokenValue
Chart 1
—
Chart 2
—
Chart 3
—
Chart 4
—
Chart 5
—