The commitment
I target conformance with WCAG 2.2 Level AA — the minimum most public-sector sites in the US, UK, and EU are legally required to meet.
What's done
Colour & contrast
- Every body-text pair has a contrast ratio of at least 4.5:1. Most are above 6:1; the main text/background pair sits at 16:1.
- The palette was audited mathematically in both light and dark modes, full numbers in the commit history.
- Decorative ornaments never carry meaning that isn't also available in text.
Keyboard & focus
- Every interactive element is reachable with the Tab key.
- Visible focus rings on every focusable element.
- A Skip to main content link is the first focusable item on every page.
- Press / anywhere to jump to the search box.
- Press Esc to close the slide-in navigation panel, the share & export modal, the citation dialog, the search popup, the volume mega-menus, the gallery lightbox, and any other layer that's open.
- The share & export modal and the citation generator are built on the native HTML
<dialog>element — escape, click-outside, and focus-trap behavior comes from the browser, not from custom JavaScript.
Screen readers & semantics
- Proper HTML landmarks:
<header>,<nav>,<main>,<footer>. - Single
<h1>per page; heading order is never skipped. - Every form input has a real
<label>. - Dynamic content (search results, filter counts, form status) is announced via
aria-live. - Decorative icons carry
aria-hidden="true"; meaningful icons havearia-label. - The active page in the navigation is marked with
aria-current="page".
Motion & animation
- All animations respect
prefers-reduced-motion, if your OS is set to reduce motion, this site delivers instant transitions. - Nothing auto-plays. No flashing content.
Typography & readability
- Body text is set in EB Garamond, the open-source revival of Claude Garamont's sixteenth-century type, at 18 px. That sits inside the 16–20 px range every major accessibility guideline (WAI, MDN, GOV.UK, BBC GEL) recommends for long-form reading.
- The smallest text on the site is 14 px (image captions, fine print). Nothing renders smaller than that.
- Anything 24 px or larger qualifies as "large text" under WCAG 1.4.3, so the relaxed 3:1 contrast ratio applies. Body text is held to the stricter 4.5:1 (in practice, 16:1).
- UI chrome (buttons, form fields, nav) is set in Inter at 16 px or larger to prevent iOS zoom-on-focus.
- The reader-settings panel (gear icon in the toolbar) lets you tune font, size, line-height, word-spacing, and theme; preferences persist locally in
localStorage. - Line length is capped around 68 characters on article pages, inside the 50–75-character band published research identifies as easiest to read.
- Text reflows at 400 % zoom without loss of content or horizontal scrolling.
Touch targets
- Every interactive element is at least 44×44 CSS pixels, the WCAG 2.2 AAA target-size recommendation. The size is enforced as a token (
--tap-target) so component CSS can't shrink below the floor without an explicit opt-out.
Forms
- Real labels, required fields clearly marked, autocomplete hints on every common field.
- Form validation messages use
aria-liveso screen readers announce them. - The contact form uses no CAPTCHA. Spam is caught by a hidden honeypot field and Web3Forms' server-side filtering, so screen-reader and motor-impaired users never have to solve a puzzle to send a message.
Dark mode
- Honors your system preference automatically (
prefers-color-scheme). - A manual toggle is available in the site header.
- No flash of the wrong theme on page load, the preference is applied before first paint.
Internationalisation
- The page
<html lang>attribute is always set. - Direction (
dir) is declared where needed.
Known limitations
- Imagery and alt text: the site currently uses decorative initials-based placeholders rather than real portraits. As I add public-domain photographs, every one will ship with descriptive alt text.
- Long archival texts: Paine's 19th-century prose uses vocabulary and sentence structures that a modern reader may find dense. I preserve the original text verbatim (see the editorial standards) and do not simplify it.
Voice & assistant support
Pages that contain a primary text excerpt — works, the quotes page, the FAQ — emit a JSON-LD speakable hint pointing voice assistants at the actual prose, not the surrounding chrome. Reader-page transcripts download cleanly as plain text from the share & export modal so a screen reader can re-read a work offline.
Testing
I test with WAVE by WebAIM, the Lighthouse accessibility audit, and NVDA + VoiceOver screen readers. A custom Playwright rig (npm run audit:health) crawls 26 representative pages on every change and flags structural a11y regressions.
Automated tools catch about a third of accessibility issues. The other two-thirds come from readers telling me what's broken. If anything is harder for you than it should be, tell me.
Reporting an accessibility issue
Write to me via the contact form and choose "Accessibility issue" as the topic. Include:
- The URL where you hit the problem.
- What you were trying to do.
- What happened, and what you expected instead.
- Your browser and assistive technology, if you're comfortable sharing.
I aim to respond within five business days and to fix confirmed issues in the next deployment.
Legal basis
This is a non-commercial, volunteer-run public-domain archive. I'm not legally required to conform to ADA, Section 508, EN 301 549, or the European Accessibility Act — I aim to anyway. Accessibility is a feature, not an afterthought.