Files
adolf/ui/docs/design-system/color-tokens.md
alvis bedb527145
Some checks failed
ClawSweeper Dispatch / dispatch (push) Has been cancelled
CodeQL / Security High (actions) (push) Has been cancelled
CodeQL / Security High (channel-runtime-boundary) (push) Has been cancelled
CodeQL / Security High (core-auth-secrets) (push) Has been cancelled
CodeQL / Security High (mcp-process-tool-boundary) (push) Has been cancelled
CodeQL / Security High (network-ssrf-boundary) (push) Has been cancelled
CodeQL / Security High (plugin-trust-boundary) (push) Has been cancelled
CodeQL / Security High (process-exec-boundary) (push) Has been cancelled
Docs Sync Publish Repo / sync-publish-repo (push) Has been cancelled
Docs / docs (push) Has been cancelled
OpenClaw Stable Main Closeout / Resolve stable release closeout inputs (push) Has been cancelled
OpenClaw Stable Main Closeout / Verify stable main closeout (push) Has been cancelled
Workflow Sanity / no-tabs (push) Has been cancelled
Workflow Sanity / actionlint (push) Has been cancelled
Workflow Sanity / generated-doc-baselines (push) Has been cancelled
CI / runner-admission (push) Has been cancelled
CI / preflight (push) Has been cancelled
CI / security-fast (push) Has been cancelled
CI / pnpm-store-warmup (push) Has been cancelled
CI / build-artifacts (push) Has been cancelled
CI / native-i18n (push) Has been cancelled
CI / ${{ matrix.check_name }} (push) Has been cancelled
CI / ${{ matrix.checkName }} (push) Has been cancelled
CI / checks-node-compat-node22 (push) Has been cancelled
CI / check-bundled-channel-config-metadata (push) Has been cancelled
CI / check-dependencies (push) Has been cancelled
CI / check-guards (push) Has been cancelled
CI / check-lint (push) Has been cancelled
CI / check-prod-types (push) Has been cancelled
CI / check-shrinkwrap (push) Has been cancelled
CI / check-test-types (push) Has been cancelled
CI / check-additional-boundaries-a (push) Has been cancelled
CI / check-additional-boundaries-bcd (push) Has been cancelled
CI / check-additional-extension-bundled (push) Has been cancelled
CI / check-additional-extension-channels (push) Has been cancelled
CI / check-additional-extension-package-boundary (push) Has been cancelled
CI / check-additional-runtime-topology-architecture (push) Has been cancelled
CI / check-session-accessor-boundary (push) Has been cancelled
CI / check-session-transcript-reader-boundary (push) Has been cancelled
CI / check-docs (push) Has been cancelled
CI / skills-python (push) Has been cancelled
CI / macos-swift (push) Has been cancelled
CI / ios-build (push) Has been cancelled
CI / ci-timings-summary (push) Has been cancelled
Native App Locale Refresh / Refresh native fa (push) Has been cancelled
Native App Locale Refresh / Refresh native fr (push) Has been cancelled
Native App Locale Refresh / Refresh native hi (push) Has been cancelled
Native App Locale Refresh / Refresh native id (push) Has been cancelled
Native App Locale Refresh / Refresh native it (push) Has been cancelled
Native App Locale Refresh / Refresh native ja-JP (push) Has been cancelled
Control UI Locale Refresh / plan (push) Has been cancelled
Control UI Locale Refresh / Refresh ${{ matrix.locale }} (push) Has been cancelled
Control UI Locale Refresh / Commit control UI locale refresh (push) Has been cancelled
Live Media Runner Image / Build live media runner image (push) Has been cancelled
Native App Locale Refresh / Refresh native ar (push) Has been cancelled
Native App Locale Refresh / Refresh native de (push) Has been cancelled
Native App Locale Refresh / Refresh native es (push) Has been cancelled
Native App Locale Refresh / Refresh native ko (push) Has been cancelled
Native App Locale Refresh / Refresh native nl (push) Has been cancelled
Native App Locale Refresh / Refresh native pl (push) Has been cancelled
Native App Locale Refresh / Refresh native pt-BR (push) Has been cancelled
Native App Locale Refresh / Refresh native ru (push) Has been cancelled
Native App Locale Refresh / Refresh native sv (push) Has been cancelled
Native App Locale Refresh / Refresh native th (push) Has been cancelled
Native App Locale Refresh / Refresh native tr (push) Has been cancelled
Native App Locale Refresh / Refresh native uk (push) Has been cancelled
Native App Locale Refresh / Refresh native vi (push) Has been cancelled
Native App Locale Refresh / Refresh native zh-CN (push) Has been cancelled
Native App Locale Refresh / Refresh native zh-TW (push) Has been cancelled
Native App Locale Refresh / Commit native locale refresh (push) Has been cancelled
Plugin Init Scaffold Validation / Validate provider scaffold (push) Has been cancelled
Plugin NPM Release / preview_plugins_npm (push) Has been cancelled
Plugin NPM Release / Validate release publish approval (push) Has been cancelled
Plugin NPM Release / preview_plugin_pack (push) Has been cancelled
Plugin NPM Release / publish_plugins_npm (push) Has been cancelled
Sandbox Common Smoke / sandbox-common-smoke (push) Has been cancelled
Website Installer Sync / static (push) Has been cancelled
Website Installer Sync / linux-docker (push) Has been cancelled
Website Installer Sync / macos-installer (push) Has been cancelled
Website Installer Sync / windows-installer (push) Has been cancelled
Website Installer Sync / sync-website (push) Has been cancelled
Vendor OpenClaw source as Adolf fork baseline
Adolf is a fork/vendored clone of github.com/openclaw/openclaw (v2026.6.11),
free to diverge. Tree copied sans upstream .git; upstream remote added for
future syncs. Node pinned to 24 (.nvmrc); engines already require >=22.19.
Preserves docs/ARCHITECTURE.md.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LeqyaxJF2nbRXJtae2kNB2
2026-07-05 09:36:54 +00:00

6.8 KiB

Color Tokens

All tokens are defined in ui/src/styles/base.css under :root (dark mode default) and :root[data-theme-mode="light"] (light override). Theme families may override accent tokens while keeping shared surface tokens.

Contrast ratios are measured against --bg (#0e1015) in dark mode using WCAG relative luminance formula. AA requires ≥4.5:1 for normal text, ≥3:1 for large text and UI components.


Background Scale

Token Dark Value Light Value Use Don't
--bg #0e1015 #faf9f7 Page root, deepest layer Never use on elevated surfaces
--bg-accent #13151b #f4f1ec Sidebar, secondary panels Not for interactive card hover
--bg-elevated #191c24 #ffffff Raised panels, modals Not for inline elements
--bg-hover #1f2330 #efebe4 List item hover state Not for default state
--bg-muted #1f2330 #efebe4 Subtle fills, disabled states Not for focus states

Light mode uses a warm paper palette: ivory backgrounds, warm gray borders (#e8e4dc), and a terracotta accent (#bd4531, ≈4.9:1 on --bg). Dark mode keeps the signature coral red.

Surface / Card

Token Dark Value Light Value Use Don't
--card #161920 #ffffff Card backgrounds, composer Avoid as border
--card-foreground #f0f0f2 #211e1a Text on cards
--card-highlight rgba(255,255,255,0.04) rgba(60,42,24,0.03) Inner highlight on hover Not for text
--popover #191c24 #ffffff Dropdown, tooltip backgrounds
--popover-foreground #f0f0f2 #211e1a Text inside popovers

Text

Token Dark Value Contrast on --bg Use
--text #d4d4d8 ~12.9:1 Body copy, labels
--text-strong #f4f4f5 ~17.3:1 Headings, emphasis
--muted #838387 ~5.0:1 Placeholder, metadata
--muted-strong #75757d ~4.2:1 Secondary text, captions; avoid for normal body text

Accent (Primary — Red)

Token Value Use Don't
--accent #ff5c5c Primary CTA, send button, active tab indicator Don't use for large filled backgrounds
--accent-hover #ff7070 Hover state of accent elements
--accent-muted #ff5c5c Same as accent (aliased)
--accent-subtle rgba(255,92,92,0.1) Badge backgrounds, tinted fills Not for text on dark bg (fails contrast)
--accent-glow rgba(255,92,92,0.2) Focus rings, glow effects Not as background
--primary #ff5c5c Component library primary alias

Accent 2 (Teal)

Token Value Use
--accent-2 #14b8a6 Success-adjacent status, secondary badges
--accent-2-muted rgba(20,184,166,0.7) Subtle teal fills
--accent-2-subtle rgba(20,184,166,0.1) Tinted teal background

Semantic

Token Dark Value Light Value Contrast on --bg Use
--ok #22c55e #15803d ~8.4:1 Success states, token meter low
--warn #f59e0b #d97706 ~8.9:1 Warnings, degraded states
--danger #ef4444 #dc2626 ~5.1:1 Errors, destructive actions, token meter high
--info #3b82f6 #2563eb ~5.2:1 Informational, token meter mid
--destructive #ef4444 ~5.1:1 Destructive action labels

Border

Token Value Use
--border #1e2028 Default subtle borders, dividers
--border-strong #2e3040 Active/focused borders
--border-hover #3e4050 Hover-state borders

Focus

Token Value Use
--ring #ff5c5c Focus ring colour
--focus-ring 0 0 0 2px var(--bg), 0 0 0 3px color-mix(in srgb, var(--ring) 80%, transparent) Standard focus ring box-shadow
--focus-glow 0 0 0 2px var(--bg), 0 0 0 3px var(--ring), 0 0 16px var(--accent-glow) Elevated interactive elements

Anti-Patterns

  • Hardcoded hex colours in component CSS — always use tokens
  • --accent-subtle as text colour — fails contrast on dark backgrounds
  • Mixing --ok and --accent-2 for "green success" — use --ok only
  • Using --danger for non-error states (e.g. "hot feature") — reserve for errors and destructive actions
  • --muted-strong for normal body text — below 4.5:1 on dark --bg; use --text instead