Design system

THEME & ACCESSIBILITY REVIEW

Every shipped component rendered in the light and dark state side by side, plus a live WCAG contrast audit generated from the tokens in styles.css.

Contrast audit

All token pairs meet WCAG AA (4.5:1 text, 3:1 non-text) in both states.

light state
WCAG contrast ratios for the light state
PairTypeRatioResult
body text on pagetext17.30:1PASS (min 4.5:1)
body text on cardtext15.80:1PASS (min 4.5:1)
muted text on pagetext7.82:1PASS (min 4.5:1)
muted text on cardtext7.15:1PASS (min 4.5:1)
neon headline on pagetext7.42:1PASS (min 4.5:1)
neon headline on cardtext6.78:1PASS (min 4.5:1)
gold kicker on pagetext9.81:1PASS (min 4.5:1)
gold kicker on cardtext8.96:1PASS (min 4.5:1)
primary button labeltext9.51:1PASS (min 4.5:1)
secondary button labeltext13.45:1PASS (min 4.5:1)
accent button labeltext4.94:1PASS (min 4.5:1)
destructive button labeltext5.58:1PASS (min 4.5:1)
popover texttext15.80:1PASS (min 4.5:1)
sidebar texttext16.46:1PASS (min 4.5:1)
sidebar active labeltext9.51:1PASS (min 4.5:1)
focus ring on pagenon-text9.81:1PASS (min 3:1)
focus ring on cardnon-text8.96:1PASS (min 3:1)
input border on pagenon-text3.91:1PASS (min 3:1)
card edge on pagenon-text3.91:1PASS (min 3:1)
primary button hover label (bg-primary/90)state7.83:1PASS (min 4.5:1)
secondary button hover label (bg-secondary/80)state14.32:1PASS (min 4.5:1)
ghost / outline hover label (bg-accent)state4.94:1PASS (min 4.5:1)
destructive hover label (bg-destructive/90)state6.41:1PASS (min 4.5:1)
disabled control label (muted on muted)state6.27:1PASS (min 4.5:1)
selected nav item label (data-status=active)state9.51:1PASS (min 4.5:1)
selected list row label (secondary surface)state13.45:1PASS (min 4.5:1)
input placeholder textstate7.82:1PASS (min 4.5:1)
link default (gold on page)state9.81:1PASS (min 4.5:1)
link active (neon on page)state7.42:1PASS (min 4.5:1)
dark state
WCAG contrast ratios for the dark state
PairTypeRatioResult
body text on pagetext17.30:1PASS (min 4.5:1)
body text on cardtext15.80:1PASS (min 4.5:1)
muted text on pagetext7.82:1PASS (min 4.5:1)
muted text on cardtext7.15:1PASS (min 4.5:1)
neon headline on pagetext7.42:1PASS (min 4.5:1)
neon headline on cardtext6.78:1PASS (min 4.5:1)
gold kicker on pagetext9.81:1PASS (min 4.5:1)
gold kicker on cardtext8.96:1PASS (min 4.5:1)
primary button labeltext9.51:1PASS (min 4.5:1)
secondary button labeltext13.45:1PASS (min 4.5:1)
accent button labeltext4.94:1PASS (min 4.5:1)
destructive button labeltext5.58:1PASS (min 4.5:1)
popover texttext15.80:1PASS (min 4.5:1)
sidebar texttext16.46:1PASS (min 4.5:1)
sidebar active labeltext9.51:1PASS (min 4.5:1)
focus ring on pagenon-text9.81:1PASS (min 3:1)
focus ring on cardnon-text8.96:1PASS (min 3:1)
input border on pagenon-text3.91:1PASS (min 3:1)
card edge on pagenon-text3.91:1PASS (min 3:1)
primary button hover label (bg-primary/90)state7.83:1PASS (min 4.5:1)
secondary button hover label (bg-secondary/80)state14.32:1PASS (min 4.5:1)
ghost / outline hover label (bg-accent)state4.94:1PASS (min 4.5:1)
destructive hover label (bg-destructive/90)state6.41:1PASS (min 4.5:1)
disabled control label (muted on muted)state6.27:1PASS (min 4.5:1)
selected nav item label (data-status=active)state9.51:1PASS (min 4.5:1)
selected list row label (secondary surface)state13.45:1PASS (min 4.5:1)
input placeholder textstate7.82:1PASS (min 4.5:1)
link default (gold on page)state9.81:1PASS (min 4.5:1)
link active (neon on page)state7.42:1PASS (min 4.5:1)

Light state

Tab through this panel to review keyboard focus indicators.

Headlines

Neon headline

Gold subhead

Body copy on the page surface.

Muted supporting copy.

Buttons — default / hover / disabled

Links & navigation states

Inline linkSelected nav

Form inputs

Surfaces & data display

Card surface
Attention Index

Card body copy and muted metadata.

Default
Secondary
Outline
Destructive
Selected tab uses a filled surface, not color alone.

Token swatches

  • backgroundAa text sample
  • cardAa text sample
  • primaryAa text sample
  • neonAa text sample
  • secondaryAa text sample
  • mutedAa text sample
  • accentAa text sample
  • destructiveAa text sample

Dark state

Tab through this panel to review keyboard focus indicators.

Headlines

Neon headline

Gold subhead

Body copy on the page surface.

Muted supporting copy.

Buttons — default / hover / disabled

Links & navigation states

Inline linkSelected nav

Form inputs

Surfaces & data display

Card surface
Attention Index

Card body copy and muted metadata.

Default
Secondary
Outline
Destructive
Selected tab uses a filled surface, not color alone.

Token swatches

  • backgroundAa text sample
  • cardAa text sample
  • primaryAa text sample
  • neonAa text sample
  • secondaryAa text sample
  • mutedAa text sample
  • accentAa text sample
  • destructiveAa text sample