PRIZM 4.0DSTA

Foundations

Colours

PRIZM uses a two-layer colour system: a fixed baseline palette of raw scales, and a set of semantic tokens that map onto those scales differently per theme. Component code only references semantic tokens — that's what makes theming free.

See Theming for the architecture behind these layers and how to activate a theme.

Semantic tokens

These tokens carry meaning, not raw colour. Each one resolves to a different value per theme, so the same component renders correctly across all four variants without any branching at the call site.

Every semantic token is wired into a Tailwind utility. Use the utility in component code:bg-bg, text-fg, border-border — never the raw CSS variable directly.

Backgrounds & surfaces

TokenC3 · LC3 · DEnt · LEnt · D
--prizm-color-bg
Page background.
bg-bg
--prizm-color-bg-subtle
Slightly recessed background tier.
bg-bg-subtle
--prizm-color-bg-muted
Muted fills — hovered rows, inactive states.
bg-bg-muted
--prizm-color-surface
Cards, panels, the standard container fill.
bg-surface
--prizm-color-surface-elevated
Floating elements — popovers, dialogs, dropdowns.
bg-surface-elevated

Borders

TokenC3 · LC3 · DEnt · LEnt · D
--prizm-color-border
Default border between regions and inside controls.
border-border
--prizm-color-border-strong
Emphasised border for focus or selected state.
border-border-strong

Foreground (text)

TokenC3 · LC3 · DEnt · LEnt · D
--prizm-color-fg
Primary body text. Highest contrast.
text-fg
Aa
Aa
Aa
Aa
--prizm-color-fg-muted
Secondary text — captions, descriptions, labels.
text-fg-muted
Aa
Aa
Aa
Aa
--prizm-color-fg-subtle
Tertiary text — metadata, placeholder, disabled.
text-fg-subtle
Aa
Aa
Aa
Aa

Accent

TokenC3 · LC3 · DEnt · LEnt · D
--prizm-color-accent
Brand accent. Cyan on C3, blue on Enterprise.
bg-accent
--prizm-color-accent-fg
Text rendered on an accent fill.
text-accent-fg
Aa
Aa
Aa
Aa
--prizm-color-accent-hover
Hover state for accent-filled buttons and links.
hover:bg-accent-hover

Status

TokenC3 · LC3 · DEnt · LEnt · D
--prizm-color-danger
Destructive actions, error states.
bg-danger
--prizm-color-danger-fg
Text on a danger fill.
text-danger-fg
Aa
Aa
Aa
Aa
--prizm-color-success
Confirmation, positive state.
bg-success
--prizm-color-warning
Caution, requires attention.
bg-warning
--prizm-color-info
Neutral informational state.
bg-info

Baseline scales

Raw palettes that the semantic tokens reference. These values are theme-independent — they look the same regardless of which zone or mode is active. Don't reference these directly in component code; they're inputs to the semantic layer.

slate

Neutral scale. Used for backgrounds, borders, and text in both zones.

50
100
200
300
400
500
600
700
800
900
950

cyan

C3 accent family.

50
100
200
300
400
500
600
700
800
900
950

blue

Enterprise accent family.

50
100
200
300
400
500
600
700
800
900
950

Status hues

Single-purpose hues used by the status semantic tokens. Two steps each.

red

Danger.

500
600

green

Success.

500
600

amber

Warning.

500
600

sky

Info.

500
600

Using colors in code

Always reach for the semantic tokens via Tailwind utilities. Baseline scales are for the token files only — referencing them from a component locks that component to a single visual treatment and defeats theming.

tsx
// ✓ Correct — semantic, theme-aware
<div className="bg-surface text-fg border border-border">
  <span className="text-accent">Important</span>
  <button className="bg-accent text-accent-fg hover:bg-accent-hover">Save</button>
</div>

// ✗ Wrong — references baseline directly, won't theme
<div style={{ backgroundColor: "var(--prizm-slate-100)" }}>...</div>