Skip to content
bitzorcas
中EN

Reference

Color and Legal Themes

Design System 1.2 neutral surfaces, status colors, brand semantics, and the Navy, Amber, Burgundy, Jade, and Orange legal themes.

Last updated

Color and Legal Themes

Neutral surfaces and text

System TokenLightDarkUse
--sys-color-canvas#F5F7F9#0D141AApplication background
--sys-color-surface#FFFFFF#151E26Default work surface
--sys-color-surface-raised#FFFFFF#1B2630Popover, dialog, sheet
--sys-color-surface-subtle#EEF2F5#1B2630Query and quiet regions
--sys-color-surface-hover#F6F8FA#202C36Neutral hover
--sys-color-text-strong#17212B#F2F5F7Headings and key data
--sys-color-text-default#2D3A47#DCE3E8Body text
--sys-color-text-muted#586777#AAB6C1Supporting text
--sys-color-border-subtle#D4DCE4#3A4855Separators
--sys-color-border-control#8795A5#5E6D7ARequired control boundaries

Inputs cannot rely on border-subtle as their only boundary.

Status colors

Status colors do not change with Brand.

RoleLight FGLight BGLight BorderDark FGDark BGDark Border
Danger#A92D38#FFF0F1#E2A2A8#F0A0A7#3B2026#74404A
Success#246745#EDF8F2#9DCDB2#9DD4B4#173126#3E6952
Warning#704A00#FFF7E0#D8B25C#E5C071#372B16#715A2A
Info#205C7A#ECF6FB#9AC6D9#9CC9DC#17303D#3A667B

Brand semantics

RoleLightDark
Primary actionBrand 700Brand 300
Primary hoverBrand 800Brand 200
Primary activeBrand 900Brand 400
Primary foreground#FFFFFF#0D141A
LinkBrand 700Brand 300
Focus ringBrand 500Brand 400
SelectionBrand 100 / Brand 900Brand 900 / Brand 100
Navigation backgroundBrand 500Brand 700
Navigation active lineBrand 500Brand 500

Registered brandOverrides

The default brandMapping applies to all themes. Themes that need to deviate from the default mapping for contrast reasons register an override in the brandOverrides block of system.tokens.json:

ThemeModeDeviationReason
legal-amberLightfocusRing=600, navigationFg uses dark textAmber 500 as a focus ring lacks contrast; dark navigation foreground improves readability
legal-orangeLight / DarkactionPrimaryBg=500 (+hover 600 / active 700), white foregroundOrange 700 is too dark and loses vibrancy; 500 is used for the primary button with white text. This is the only registered exception for the primary action step

Unregistered themes use the default brandMapping. New exceptions must be recorded here with WCAG contrast verification.

Slate

Framework and generic Platform use a separate low-chroma Slate fallback named enterprise-neutral. It is not part of legalBrandThemeIds, but the current workspace picker exposes it as the Slate option in the governed six-theme order.

#F5F7F9
#E8EDF1
#CFD7DE
#A8B5C0
#788A99
#586B7A
#435563
#334552
#283844
#21303A
#121C23
#F2F7FB
#E3EFF7
#C3DDED
#95C0DA
#609BC0
#3477A5
#285F89
#214C70
#203F5C
#1E354C
#102132

Gold

#FCFAF6
#F8F3E8
#F0E4CB
#E3D2AC
#D4BF91
#C5AD78
#9A7E49
#6D522B
#5D472A
#4D3A25
#2B2015

Primary action colors for Light/Dark come from the role mapping in system.tokens.json: brand step 700 in Light and step 300 in Dark; the theme itself carries no action-color special case. legal-amber has exactly two brand overrides: focusRing raised to step 600 (the champagne-gold 500 lacks focus-ring contrast) and a darker navigation foreground in Dark. Exact values live in frontend/packages/materials/src/tokens/source/themes/legal-amber.tokens.json (currently 500=#C5AD78, 700=#6D522B); this page never hand-copies swatches.

Burgundy

#FCF5F6
#F8E7EA
#F0CDD4
#E3A4B0
#CB6B7F
#A93F57
#8E3047
#75263B
#622334
#55212E
#2F0F18

Jade

#F0F8F6
#DCF0EB
#B9DDD5
#86C1B5
#4CA093
#247D72
#1B655C
#185149
#17423D
#153733
#0A201E

Orange

#FFF8F0
#FFEDD8
#FFD7AD
#FFB970
#FF9B3D
#FA8919
#ED6C00
#C45500
#A84400
#873500
#4D1B00

Both Light and Dark primary actions use Brand 500 (#FA8919) with a white foreground. This is the only registered exception for the primary button step: other themes use 700 in Light and 300 in Dark, but orange 700 is too dark and loses the brand’s energy. Focus ring uses step 700 to maintain contrast on light surfaces.

Component consumption examples

Component implementations consume Component Tokens first, leaving Brand, Mode, and interaction-state resolution to generated output:

/* A button never reads a color ramp or branches on the active theme. */
.primary-action {
color: var(--cmp-button-primary-fg);
background: var(--cmp-button-primary-bg-default);
}
.primary-action:hover {
background: var(--cmp-button-primary-bg-hover);
}

When a custom pattern has no Component Token, it may consume a System semantic role. Status UI must not borrow red, green, or orange from the active Brand:

/* Danger remains the same semantic role when Brand or Mode changes. */
.delivery-failure {
color: var(--sys-color-status-danger-fg);
background: var(--sys-color-status-danger-bg);
border: 1px solid var(--sys-color-status-danger-border);
}

Gold specimen

The specimen freezes direction, not product-code conformance.

100%

Scroll or use controls to zoom · drag when enlarged · double-click for 100% / 200%