Skip to content

Colors

Our color system is built for accessibility and visual hierarchy, drawing from the best practices of Helsinki DS (accessibility-first), Atlassian DS (enterprise scale), and Carbon (data-dense interfaces). Every color is tested for WCAG AA contrast.

Brand scale
SwatchNameHexCSS Variable
Brand 50#f0f4ff--brand-50
Brand 100#dbe4ff--brand-100
Brand 200#bac8ff--brand-200
Brand 300#91a7ff--brand-300
Brand 400#748ffc--brand-400
Brand 500#5c7cfa--brand-500
Brand 600#4c6ef5--brand-600
Brand 700#4263eb--brand-700
Brand 800#3b5bdb--brand-800
Brand 900#364fc7--brand-900
Gray scale
SwatchNameHex
Gray 50#f8f9fa
Gray 100#f1f3f5
Gray 200#e9ecef
Gray 300#dee2e6
Gray 400#ced4da
Gray 500#adb5bd
Gray 600#868e96
Gray 700#495057
Gray 800#343a40
Gray 900#212529
Status & feedback
SwatchNameHex
Success#40c057
Warning#fab005
Error#fa5252
Info#339af0

RoleLight modeDark modeInspired by
Page bgwhite / gray-50gray-950Linear, Vercel
Text primarygray-900gray-100Carbon, Polaris
Text secondarygray-600gray-400Atlassian
Bordergray-200gray-700Stripe
Primary CTAbrand-600brand-500Helsinki DS
Hoverdarken 10%lighten 10%Material 3

Helsinki maps every color to a semantic purpose rather than a raw palette. Colors are named by what they do, not what they are:

--color-success → green
--color-warning → amber
--color-error → red

Atlassian’s design system spans Jira, Confluence, Trello, and Bitbucket — each with distinct product identities. They use a layered token architecture:

LayerExamplePurpose
Primitiveblue-500Raw palette
Semanticcolor-background-brandMeaning-based
Componentbutton-primary-bgScoped to element

IBM’s Carbon system serves enterprise dashboards with thousands of data points:

  • Minimal accent color — blue used sparingly for data viz
  • Extensive gray scale — 10+ steps for precise layering
  • High contrast — all combinations meet WCAG AA
  • Primary actions → brand-600 (default), brand-700 (hover)
  • Text → gray-900 (light), gray-100 (dark)
  • Borders → gray-200 (light), gray-700 (dark)
  • Semantic colors → reserved for status, alerts, badges
  • One primary per section — don’t compete for attention