pageweave/resources

Accessibility Audit

Systematic accessibility audits: contrast, keyboard navigation, focus management, ARIA, screen reader semantics, and reduced motion.

· .md

Make accessibility a release requirement, not a post-launch patch. Every interface must be usable by everyone — keyboard users, screen reader users, low-vision users, and motor-impaired users.

The Non-Negotiable Rules

Contrast

The most common failure: muted gray body text on a tinted near-white. If contrast is even close, bump the body color toward the ink end of the ramp.

/* BAD: 3.8:1 — fails WCAG AA */
--text-muted: oklch(0.65 0.01 240);

/* GOOD: 5.2:1 — passes WCAG AA */
--text-muted: oklch(0.5 0.01 240);

Keyboard Navigation

Every interactive element must be reachable and operable via keyboard:

/* Focus ring that works on any background */
:focus-visible {
  outline: 2px solid var(--color-primary);
  outline-offset: 2px;
}

Semantic HTML

Use the right element for the job:

Use Not
<button> <div onclick>
<a href> <span onclick>
<nav> <div class="nav">
<main> <div id="main">
<h1><h6> <p class="heading">
<ul>/<ol> <div> with bullet characters
<table> CSS grid mimicking a table

Semantic HTML gives you keyboard behavior, ARIA roles, and screen reader announcements for free.

ARIA — Only When HTML Isn't Enough

ARIA supplements HTML, never replaces it. The first rule of ARIA: don't use ARIA if a native HTML element provides the semantics.

Essential ARIA patterns:

Never:

Component Accessibility Checklist

Buttons & Links

Forms

Modals & Dialogs

Images

Tables (Data)

Touch & Motor

Motion & Animation

Color & Visual

Audit Workflow

  1. Automated scan: run axe-core or Lighthouse. Fix all critical/serious violations.
  2. Keyboard walkthrough: Tab through every page. Every interactive element reachable? Focus visible? Order logical?
  3. Screen reader test: VoiceOver (Mac) or NVDA (Windows). Navigate by headings, links, form controls. Does the page make sense?
  4. Zoom test: 200% browser zoom. Content reflows? No horizontal scroll? No overlapping text?
  5. Contrast check: every text/background pair ≥ 4.5:1. Every UI element ≥ 3:1.
  6. Motion check: toggle prefers-reduced-motion. All animations degrade gracefully?

Severity Levels

Level Meaning Fix timeline
P0 Blocks task completion Before merge
P1 Degrades experience significantly Before release
P2 Minor issue, workaround exists Next sprint

Common Anti-Patterns