Accessibility
What this site aims at, how to tell me when it falls short, what was actually done about it, and what is not claimed.
The aim
This site aims at WCAG 2.1 Level AA — the middle of the three levels of the Web Content Accessibility Guidelines — and that is the standard I hold it to. It is not a certificate: nobody but me has audited this site, and the list below is what was actually done, not a claim that the whole of AA has been met.
Reporting a problem
If something here is hard to use, or does not work with whatever you use to read the web, please tell me — that is the fastest way for it to get fixed. My address is at the foot of this page, and at the top of the home page. What helps most: which page you were on, what you were using, and what happened.
What was done
What aiming at AA has meant in practice. Each of these is checked by an automated test that I run before I publish a change, so the list stays true:
- Nothing loads from anyone else. The fonts are served from this site, and no page asks any other host for anything — no analytics, no trackers, no embedded players, no hosted fonts — so the pages work on a slow or filtered connection, and reading them tells no one but the host, GitHub Pages, that you were here.
- Contrast is measured, not judged by eye. Every piece of text painted on every page is sampled in a real browser and checked against the WCAG contrast formula — 4.5 to 1 for ordinary text, 3 to 1 for large text — in both themes, whether the theme comes from your system setting or from the theme button.
- Everything you can use, you can reach from a keyboard, and you can see where you are: a “Skip to content” link is the first stop on every page, and every link and the theme button draws the same two-pixel ring when it takes focus.
- The controls are big enough to hit: every link in the navigation strip, in the row of profiles and in the footer is a target at least 24 by 24 pixels, on every screen down to 320 pixels wide. My name at the top of every page but the home page is the link home, and is held to the same size. A link set inside a sentence is left at the size of the words around it.
- Nothing moves on its own. The only motion is a short color fade and smooth scrolling, and both are switched off for a visitor whose system asks for reduced motion.
- The markup says what things are: one first-level heading per page, headings that never skip a level, lists marked up as lists, the navigation in a named landmark, with the page you are on marked whenever the strip shows it, and a language set on the document.
- Every picture that carries information has a text alternative: the paper’s figure is described in full for a reader who cannot see it. The portrait beside my name, and the small marks beside Email, GitHub and Bluesky, are hidden from screen readers, because the words beside them already say it.
- The site works with JavaScript switched off: the pages are plain HTML joined by ordinary links. Three things need it, and all three fail quietly — the theme button, which stays hidden until the script has run rather than sitting there doing nothing; the older news on the home page, which prints closed without it; and my email address, which is written as text and made into a link in your browser.
- Body text is set at 16 pixels or larger: the layout reflows into one column on a phone, and no page scrolls sideways at any width down to 320 pixels.
What is not claimed
The gaps I know about, so that the list above is not read for more than it says:
- This site has not been audited by anyone else, and it has not been tested with a screen reader, with voice control or with a magnifier. The checks above are automated ones and my own reading, and neither can tell you how a page actually sounds.
- The CV is a PDF, and it is the weakest thing here: it is built so that its text comes out in order and every address in it is real text, but it is not a tagged PDF.
- This is a personal site. I write it and keep it working, in the time I have, so a fix may not be quick.
