WCAG-AA, enforced — not aspired to
Accessibility is a build gate, not a review step. Contrast is computed from the tokens on every CI run (audit:contrast); a failing pairing fails the build.
The accent pairings the system guarantees in both themes. The last row is the guardrail — why a separate fill token exists.
--color-accent-default (blue-500) is only 3.73:1 — it fails AA. Solid text-bearing fills must use --color-accent-fill (blue-600). A call-site lint catches violations before they ship.Keyboard
Every interactive element is reachable and operable by keyboard. Focus order follows reading order; nothing is a trap.
Focus
Visible focus ring on every control — --color-accent-focus-ring, never removed without a replacement.
Reduced motion
All Motion wraps useReducedMotion(). Indian low-end devices often run battery-saver, which sets this — animation degrades to instant, never to broken.
Targets
Touch targets meet the minimum hit area; spacing tokens keep adjacent controls separable.
Say what it does
“Book a call”, not “Submit”. “Download the audit”, not “Click here”.
No ableist metaphors
Avoid “sanity check”, “blind spot” as filler. Name the actual thing.
Plain over clever
A screen reader reads literally — clarity beats wordplay in UI labels.