← Docs hub

Accessibility (WCAG 2.1 AA)

llmwiki targets WCAG 2.1 Level AA for all generated HTML pages.

Automated audit

We run axe-core via axe-playwright-python against four representative page types:

Page type Route
Home index.html
Projects index projects/index.html
Sessions index sessions/index.html
Session detail sessions/<project>/<slug>.html

Run the audit locally:

PYTHONPATH=. python3 scripts/a11y_audit.py

Current status: 0 axe-core violations across all four page types.

What we cover

Color contrast

All text meets the WCAG AA minimum contrast ratio:

Token Light mode Dark mode Min ratio
--text (body) #0f172a on #ffffff #e2e8f0 on #0c0a1d 4.5:1
--text-secondary #475569 on #ffffff #94a3b8 on #0c0a1d 4.5:1
--text-muted #6b7280 on #ffffff (4.84:1) #8b9bb5 on #0c0a1d (6.97:1) 4.5:1
--accent (links) #7C3AED on #ffffff #7C3AED on #0c0a1d 4.5:1
hljs keywords #c23a40 on #f1f5f9 (4.82:1) theme default 4.5:1

Keyboard navigation

Semantic HTML

Links within running text (footer, breadcrumbs) have underlines so they are distinguishable without relying solely on color, per WCAG 1.4.1.

Reduced motion

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  * { animation-duration: 0.01ms !important; transition-duration: 0.01ms !important; }
}

Fixes applied (v0.9)

Issue Fix
--text-muted contrast 2.56:1 (light) / 4.09:1 (dark) Darkened to #6b7280 (light, 4.84:1) / #8b9bb5 (dark, 6.97:1)
hljs .hljs-keyword 4.17:1 on --bg-code Override to #c23a40 (4.82:1) in light mode
Footer/breadcrumb links indistinguishable from text Added underlines (dotted for breadcrumbs, solid for footer)
No skip-to-content link Added .skip-link hidden except on :focus
<main> lacked id for skip target Added id="main-content"

Out of scope