System · Semantic Tokens · v1.0
Four colors, one truth.
The canonical semantic palette — green / yellow / red / cyan — used everywhere across MobDial. Every status, badge, toast, call-state, chart series and focus ring resolves to one of these four hues. Tuned for CRT-phosphor glow on dark, desaturated 25% on light.
01The Canonical Four
Hover for 3D tilt · Click hex to copy
SuccessOK · 200
LIVE
Online · Confirmed · Paid · Pickup
#12FFA0COPY
oklch 92% 0.27 153 · rgb 18 255 160
WarningWARN · 3xx
HOLD
Caution · Review · Pending · Hold
#FFD60ACOPY
oklch 92% 0.18 100 · hi-vis saffron
DangerFAIL · 5xx
DROP
Error · Blocked · Destructive · Hangup
#FF3B5CCOPY
oklch 66% 0.27 18 · crimson neon
InfoINFO · 1xx
PING
Brand · Focus · Link · Transfer
#00E5FFCOPY
oklch 87% 0.18 209 · neon cyan
02Role Matrix
Where each color carries meaning
SURFACE
SUCCESS
WARNING
DANGER
INFO
STATUS BADGE
Online · Live · Paid
Pending · Review
Failed · Blocked
Active · Selected
CALL STATE
Connected · Pickup
Ringing · On hold
Hangup · Dropped
Transfer · Dial
TOAST / ALERT
Saved · Sent · Done
Verify · Confirm
Error · Lost
Update · Notice
FORM STATE
Validated
Touched · Unsaved
Invalid · Required
Focus ring
CHART SERIES
Series 1 (primary)
Series 3
Series 4 · Losses
Series 2
CTA / BUTTON
PRIMARY · ✓ default
Caution action
Destructive · delete
Secondary link
METRICS DELTA
▲ Up · Good
— Flat · Watch
▼ Down · Bad
◇ Net new
03Live Demos · In Context
Every component, every color
Toast Stack · ephemeral status
✓
Call connected to +1 415 555 0142Audio path established · jitter 12ms
DISMISS
!
Carrier route degradedFailover to Vonage in 8s
DISMISS
×
Outbound call droppedSIP 487 — recipient ended call
DISMISS
i
New AI summary availableMo wrote a 4-line digest of this call
DISMISS
Banners · persistent system messages
Status Badges · pill format, dot optional, ALL CAPS, max 18 chars
LIVE
CONNECTED
PAID · ACTIVE
WEBHOOK 200 OK
PENDING REVIEW
ON HOLD
RINGING
RATE LIMITED
FAILED
BLOCKED
SIP 500 ERR
OVERDUE
TRANSFER
DIAL OUT
AI ACTIVE
SELECTED
FREE TRIAL
EMERGENCY
Action Buttons · semantic CTAs
Metric Bars · dashboard readouts
UPTIME SLA99.96%
QUOTA USED62% of 10k min
FAILED ROUTES34 of 100 calls
AI HANDLED78% autonomous
04Where Each Color Lives
Component-by-component
SUCCESS · #12FFA0
15 documented uses
- Primary brand CTA
- Answer / accept button
- Online presence dot
- Webhook 2xx · API OK
- Validated form field
- Paid invoice badge
- Up-trend metric arrows
- "Connected" call state
- Save · Send · Submit
- Live transcription dot
- Free trial badge solid
- Chart series 1 (primary)
- Focus ring on dark
- Plan tier "Active"
- Mo's idle eye color
WARNING · #FFD60A
9 documented uses
- Pending review badge
- On-hold call state
- Ringing inbound state
- Quota approaching limit
- Unsaved changes dot
- Carrier degraded warning
- Trial expiring soon
- Chart series 3
- "Caution" destructive prompt
DANGER · #FF3B5C
11 documented uses
- End / hangup call button
- Call dropped state
- Form validation errors
- Webhook 5xx · API fail
- Destructive delete action
- Payment overdue alert
- Down-trend metric arrows
- Blocked / banned status
- Required field marker
- SIP error codes
- Chart series 4 (losses)
INFO · #00E5FF
8 documented uses
- Transfer call action
- Dial-out / outbound state
- AI active indicator
- Selected row highlight
- Informational toast
- Hyperlinks (alt to brand)
- Chart series 2
- "New" or "Updated" tag
05Contrast Matrix · WCAG AA
Verified across 4 surfaces
VOID · #05060A
SUCCESS
17.8 : 1 ✓✓
WARNING
14.6 : 1 ✓✓
DANGER
5.2 : 1 ✓
INFO
12.4 : 1 ✓✓
SURFACE · #10131A
SUCCESS
15.2 : 1 ✓✓
WARNING
12.5 : 1 ✓✓
DANGER
4.5 : 1 ✓
INFO
10.6 : 1 ✓✓
ELEVATED · #1A1F2B
SUCCESS
12.8 : 1 ✓✓
WARNING
10.5 : 1 ✓✓
DANGER
3.8 : 1 ✓ lg
INFO
8.9 : 1 ✓✓
LIGHT · #F8F9FA — desat 25%
#0BA365
4.6 : 1 ✓
#A88800
4.8 : 1 ✓
#D63148
4.9 : 1 ✓
#0084A8
5.4 : 1 ✓
06Token Reference
Direct CSS variable bindings
VARIABLE
HEX
USE CASE
ALIAS
--md-success
#12FFA0
Online · Confirmed · Live
--md-brand · --md-call-active
--md-warning
#FFD60A
Pending · Caution · Hold
--md-call-ringing · --md-warning-amber
--md-danger
#FF3B5C
Error · Destructive · Drop
--md-crimson · --md-call-ended · --md-brand-red
--md-info
#00E5FF
Brand alt · Focus · Link
--md-brand-blue
--md-call-hold
#FF9F0A
Hold orange (warning + danger)
derived
--md-call-muted
#6B7280
Muted · disabled call state
neutral
07Do / Don't
The rules that keep the system tight
✓DO
- Pair color with shape & text. Always: dot + label + (optional) icon. Never color alone.
- Use ONE color per surface. A toast is success OR danger, never both.
- Tint backgrounds at 6-12% alpha on dark. Solid fills only for primary action buttons.
- Desaturate 25% on light surfaces — neon doesn't read on white.
- Glow = state. Pulse only on live or attention-required states.
- Match call-state semantics: green = pickup, red = hangup, yellow = ring/hold, cyan = transfer.
✕DON'T
- Don't invent new hues. No teal, no orange-yellow, no magenta — only these four.
- Don't mix gradients across roles. A success → info gradient creates ambiguity.
- Don't use red for "important." Red means destructive or failed — only.
- Don't put neon on neon. Background = void/surface, never another semantic color.
- Don't rely on color alone for state. Colorblind users need text + shape too.
- Don't use #F59E0B / #EAB308 / #EF4444 / #38BDF8. The old palette is deprecated — these 4 are the only allowed semantic tokens.