Accessibility

Honest contrast

Every figure here is computed from the token source by the same code that gates CI (contrast-pairs.mjs) — no hand-typed numbers. Brand pairs are held to AAA (≥ 7); status pairs target AA (≥ 4.5).

Light theme

Brand pairs — AAA required
Pair Ratio Grade
text.body on surface.base 17.5 AAA
text.heading on surface.base 17.5 AAA
accent(default/self) on surface.base 9.7 AAA
hero.text on hero.surface 9.7 AAA
action.primary.text on action.primary.bg 9.7 AAA
Status pairs — AA target
Pair Ratio Grade
link.default on surface.base 5.0 AA
feedback.success.fg on feedback.success.tint 6.8 AA
feedback.warning.fg on feedback.warning.tint 6.4 AA
feedback.error.fg on feedback.error.tint 6.8 AA
feedback.info.fg on feedback.info.tint 6.6 AA

Dark theme

Brand pairs — AAA required
Pair Ratio Grade
text.body on surface.base 13.9 AAA
text.heading on surface.base 16.7 AAA
accent(default/self) on surface.base 9.1 AAA
hero.text on hero.surface 9.7 AAA
action.primary.text on action.primary.bg 8.1 AAA
Status pairs — AA target
Pair Ratio Grade
link.default on surface.base 8.1 AAA
feedback.success.fg on feedback.success.tint 10.2 AAA
feedback.warning.fg on feedback.warning.tint 10.4 AAA
feedback.error.fg on feedback.error.tint 10.5 AAA
feedback.info.fg on feedback.info.tint 11.2 AAA