The stance

A target, not a claim

This site was built against WCAG 2.2 AA as a target: keyboard operation, visible focus, semantic landmarks, labelled controls, contrast measured on composited pixels in both themes, and a motion switch that genuinely stops the animation. It has NOT been audited by a third party, so no conformance is claimed. If something here blocks you, the omission is a bug and we want to hear about it.

The Web Content Accessibility Guidelines 2.2 at Level AA were the specification this site was written against. Building against a standard and conforming to it are different statements: the second one needs somebody other than the author to test it, with assistive technology, against every success criterion. That has not happened here, so it is not claimed here. What follows is the list of things that were actually done.

A theme in three states, applied before the first paint

Light, system and dark. System is the default and follows your operating system. The choice is read and written onto the root element by an inline script in the document head, before the stylesheet paints, so a shared link never flashes the wrong theme at somebody who set dark for a reason.

Four colour schemes, contrast-checked in both themes

The palette tab at the bottom left offers four schemes and nothing else — no free colour pickers, no font menu, nothing that lets a visitor build an unreadable page by accident. Each scheme was measured against the ground it sits on, in light and in dark, on the composited pixel rather than on the nominal token.

Text size on three steps, and a high-contrast ground

Normal, large and largest. The steps scale a single multiplier that every type size on the site is expressed against, so headings, body, labels and the calculator readouts all move together instead of one heading escaping its box. High contrast redefines the ground and ink tokens rather than dropping a filter over the page, so colour meaning survives it.

Links you can underline everywhere

One switch turns on a permanent underline for every link in running text, for readers who cannot rely on colour alone to tell a link from a word. It is off by default because the design distinguishes links another way; it is available because that judgement is not everybody’s to make.

Keyboard operation, with focus trapped in the dialogs

Every control is reachable and operable from the keyboard, focus is visible wherever it lands, and a skip link jumps past the header to the main content. The mobile menu, the palette tab, the accessibility knob and the storage notice keep focus inside themselves while they are open, close on Escape, and return focus to whatever opened them.

Landmarks, headings and labels that mean something

One banner, one navigation, one main, one contentinfo. One h1 per page and a heading order that does not skip. Every input has a real label rather than a placeholder standing in for one, every icon that carries meaning has a text equivalent, and every icon that carries none is hidden from assistive technology instead of being read out as a shape.

The four widgets are deliberately spread around the frame rather than stacked in one corner: the theme control sits in the header, the palette tab at the bottom left, the accessibility knob at the bottom right, and the storage notice as a sheet along the bottom. Nothing covers the content, and nothing has to be dismissed before the page can be read.

The motion switch

Reduce motion actually stops things

This site has a lot of movement in it: a canvas particle field that follows the pointer, cards that tilt in three dimensions, floor slabs that draw themselves as you scroll, entrances that stagger, and a lift car that descends a rail beside the content. On a page like this, a reduce-motion setting that only softens a couple of transitions is worse than none, because it tells you it has helped when it has not.

Here the switch does three separate things:

  • It stops the particle field outright. The canvas renders a single still frame and then the animation loop is cancelled — it is not merely slowed, hidden or run at low opacity behind the text, and it does not restart when the pointer moves.
  • It disables every scroll-driven animation. The slab draws, the light sweeps, the lift fill and the entrance risers are all suppressed at the root, so elements are simply present rather than arriving. Scroll-linked movement is the kind most likely to provoke nausea, and it is the kind that is switched off first.
  • It sets the motion multiplier to zero. Every hover lift, tilt and nudge on the site is expressed as a distance multiplied by that one value, so they all collapse to nothing at once instead of being chased down one rule at a time.

It defaults to your operating system. If you have asked your system to reduce motion, the site starts reduced without you finding a control, and the inline script in the head applies that before the first frame is drawn — so there is no burst of animation before the preference takes effect. The switch in the accessibility knob then lets you override the system setting in either direction, and only that override is stored.

Smooth scrolling is turned off under the same setting, so jumping to a section from the lift rail moves there instantly rather than gliding.

What is untested

Where the work stops

Naming the gaps is part of the statement. These are the ones known at the time of writing.

  1. No independent audit

    Nobody outside the build has tested this site against the success criteria, and no accessibility consultancy has reviewed it. Every claim on this page is the author’s own account of the author’s own work, which is exactly the sort of claim that most needs checking.

  2. Limited assistive-technology testing

    The site was exercised with the keyboard throughout and with a screen reader during development, but not systematically across the combinations that matter — several readers, several browsers, several operating systems, plus magnification and voice control. A pattern that reads correctly in one reader can read badly in another.

  3. The charts are the hardest part

    The calculator charts carry a text description and the same figures appear in a table beneath them, so nothing is available only as a picture. Whether the descriptions convey the shape of a curve as well as seeing it does is a judgement that needs users, not authors.

  4. The calculators need JavaScript

    With scripts disabled, the pages, their explanations and their cited rules all still read, but the arithmetic does not run and the fields do nothing. That is a real limitation and it is stated rather than papered over.

  5. Cognitive load has not been user-tested

    A page can meet every measurable criterion and still be hard to follow. The writing here was aimed at plain language and short sentences, and that aim has not been tested with anybody it is meant to help.

Reporting a barrier

If something here blocks you

Treat it as a defect, not as a special request. The useful report says which page you were on, what you were trying to do, what happened instead, and what you were using — browser, operating system, and any assistive technology or setting involved. A single sentence of that is worth more than a general complaint, because it can be reproduced.

Write to [email protected], or call (414) 555-0137.

Both need a caveat, and here it is plainly: Storey Home Lending is a fictional company built to demonstrate a website. That email address ends in .example, a suffix reserved so that it can never belong to anyone, and that telephone number is inside the 555-01xx block reserved for fiction. Neither will reach anybody. On a live deployment this is the paragraph that would carry a monitored inbox, a staffed line and a commitment to respond — and stating that here, instead of printing a contact route that silently goes nowhere, is the honest version of the same paragraph.

The rest of the small print: privacy policy, terms and conditions, licensing and disclosures.