← home

Accessibility · an instrument of kkrwhofrags.xyz

Accessibility

What has actually been done, how it was measured, and what is still outstanding. This is a register rather than a promise: every row carries a verdict, and 2 of them do not say met.

in force 2026-10-02revision bf8b5efsupersedes all earlier versions

1Position

1.1

The target is WCAG 2.2 level AA. Of the 13 items examined, 11 are met, 1 is partially met and 1 is outstanding. The partial and outstanding rows are named below rather than summarised away.

1.2

No formal conformance claim is made. Every figure in the register was measured by the author in a real browser, and each row names the measurement so it can be repeated by anyone who doubts it.

2The register

  1. 2.1Bypass blockA skip link is the first focusable element on every page and jumps to the main landmark.met
  2. 2.2Landmarks and headingsEvery route renders one main landmark, a banner and a contentinfo, with a single h1 and a heading order that does not skip a level.met
  3. 2.3Keyboard operationEvery control is reachable and operable by keyboard. The mobile menu declares itself a modal dialog and now behaves as one: Escape closes it, Tab is trapped across its seven focusable items, and focus returns to the control that opened it. Before this revision it did none of those things.met
  4. 2.4Visible focusEvery skin defines its own :focus-visible outline against its own palette, rather than relying on a browser default that would vanish on the darker grounds.met
  5. 2.5Reduced motionUnder prefers-reduced-motion the end state is identical and reached instantly, and the animation code is not merely skipped but never fetched. Measured: /work/ and /about/ each load 0 animation chunks under the preference.met
  6. 2.6ContrastEvery text colour on every route now clears AA against the ground it is set on. Measured rather than asserted: a walk of every rendered text node across ten routes reports zero failures, at 4.5:1 for body sizes and 3:1 for large. The faint tiers inside the individual skins were what failed, and each was described in its own stylesheet as chrome while the pages used it for content: the section and lane headings on /about/ at 3.15:1, the spine labels on /brother-eye/ at 3.40:1, the field notes on the contact drawing at 2.63:1. Two more were colours that are correct as a graphic and were being read as text: the scale separator on /work/ at 1.44:1, the lowest figure ever recorded here, and the composition key on /brother-eye/, whose labels took the colour of the band they named and so printed "blank" at 1.09:1 against its own ground. Each was moved along its own linear channels to the smallest change that clears the line, so every tier is the same colour carrying more or less light, and the quiet tier is still visibly quieter than the one above it.met
  7. 2.7Reflow at 320pxNo page scrolls horizontally at 320 CSS pixels. Measured across the home page, /work/, /about/, /contact/, /brother-eye/, a case study and these documents.met
  8. 2.8Form labels and input sizeEvery field on both contact forms has a real label, and every field computes to at least 16px on a phone so iOS does not zoom the page in on focus and strand the reader at 1.3x.met
  9. 2.9Text alternativesNo image ships without alt text. Decorative marks (the 404 numeral, the depth marks, the drawing) are marked aria-hidden and the meaning they carry is also available as text.met
  10. 2.10Target sizeControls that carry their state on an underline are given an invisible expanded hit area rather than padding, which would push the underline off the word: the scale and sort buttons on /work/ measure 22px as drawn and 40px to the thumb. Stacked lists take real height instead, since overlays on rows 29px apart would take each other's taps. Re-measured at 390px across seven routes, every control clears 24px except the links written inside a sentence, which the criterion exempts for the reason it exempts them: a word in a line of prose cannot be enlarged without breaking the line it is part of.met
  11. 2.11Plain-language alternativeEvery one of the 28 project entries is published in two registers: the technical write-up and a full plain-English translation of it, swapped by a toggle that remembers the choice across entries. The translation is a translation rather than a summary, and the build refuses to publish if the two disagree about how many claims a section holds. This covers the project entries only; the rest of the site is written in one register, and reading level is a AAA criterion rather than an AA one, so nothing is claimed beyond what is on those pages.met
  12. 2.12The terminal viewTerminal mode is a simulated shell, and a simulated shell is hard to narrate: output arrives in regions a screen reader has to be told about, and the command line expects sighted, keyboard-fluent use. Every word of its content is also published in the editorial view, which is the default, is what the server renders, and is fully navigable. The terminal is an alternative, never the only route to anything.partial
  13. 2.13Independent auditEverything above was measured by the author against WCAG 2.2 AA. None of it has been audited by a third party or tested with a screen reader by somebody who uses one daily, so no formal conformance claim is made here.outstanding

3Reporting a barrier

3.1

If something here is unusable for you, write to cyrus@kkrwhofrags.xyz and say what you were trying to do and what happened. A specific report is more useful than a polite one, and a reply comes from a person.

3.2

If a page defeats you entirely, the same content is reachable another way: everything in the terminal view is published in the editorial view, and the résumé carries the substance of the site as a single document.