Skip to main content

Accessibility

Built to WCAG 2.2 Level AA. Not audited against it.

That is the standard this site is built to, not a level it has been certified against.

There is no conformance claim on this page

No independent audit has been carried out and no testing has been done with people who use assistive technology daily. Until both have happened, a conformance claim would be an assertion about a result nobody has measured.

What follows is what has actually been verified, and by what mechanism — which is the part somebody can use.

What is in place

Six things, each held true by something that fails a build.

A statement listing good intentions is a statement that was true on the day it was written. These are the ones with a mechanism behind them, which is the only kind worth publishing.

  • Everything works from a keyboard

    Every interactive element is reachable and operable without a pointer, focus is visible on all of them, and no component traps focus. The skip link is the first thing in the tab order on every page.

    How it stays true: A behavioural suite drives the site with a keyboard alone and fails on an unreachable control or a lost focus ring.

  • Reduced motion is honoured everywhere

    Every animation resolves instantly to its final state under prefers-reduced-motion, parallax is not attached at all, and there is an in-page control for somebody whose operating system setting does not reflect what they want here.

    How it stays true: Motion is centralised in primitives that read one preference; a component animating outside them is a review failure rather than a possibility.

  • Every page is audited on every build

    axe-core runs against twenty-five pages — one of every distinct layout on the site — in both the light and the dark theme, against the WCAG 2.2 A and AA rule sets. Alongside it, the document structure is read directly: one h1 per page, no skipped heading levels, one main and one banner and one contentinfo, every repeated navigation landmark named, every list item inside a list, every table header carrying a scope.

    How it stays true: `yarn a11y` fails on a single violation, and the structural half catches what a rule engine cannot decide — a page that passes every automated rule and still cannot be navigated by heading.

  • Contrast is measured rather than eyeballed

    Every semantic colour pairing on the site is computed against the WCAG contrast formula, with its ratio and verdict shown.

    How it stays true: The colour gallery in the internal preview computes every pairing live, so a token change that breaks a ratio is visible immediately.

  • Forms are labelled and announced

    Every control has a real label with a real association — no placeholder standing in for one. Errors are elements referenced by aria-describedby and announced, not a red border. A failed submission says how many answers need attention and moves focus to the first.

    How it stays true: A form suite audits every control on the site for a label, an absent placeholder-as-label, and an error reachable through aria-describedby.

  • One heading structure per page

    Exactly one level-one heading per page, headings in order, landmarks on every region, and lists marked up as lists so their length is announced.

    How it stays true: Every page suite asserts a single h1; the structure is checked on each page it covers.

  • Text is set to be read

    A capped reading measure, text that reflows to 320 pixels without horizontal scrolling, and no meaning carried by colour alone — every status that uses a tint also carries a word.

    How it stays true: Horizontal overflow at 390 pixels is checked on every page with a suite, and the legal documents have their line length measured directly.

Known limitations

4 things that are not good enough.

Each one says what you can do about it today rather than what we intend to do about it later. Naming a problem without that is a disclosure rather than help.

  • The whole site

    No independent audit and no testing with assistive technology users. Everything below the line is checked by us, with automated tools and by hand, which finds the failures we thought to look for.

    What helps today: If something does not work, the address below reaches a person and a report is treated as a defect rather than as feedback.

  • Tables inside guides and insights

    A table written in a guide has header cells with a scope, but no caption. Markdown has no syntax for one, so the table is introduced by the sentence above it rather than by a name of its own. Somebody moving between tables with a screen reader hears "table" and has to read into it to find out which one they have landed on.

    What helps today: Every such table sits directly beneath the heading and paragraph that introduce it, so reading in order gives the context. Tables outside prose — the comparison, the pricing grid, the coverage matrix — all carry a caption.

  • The coverage matrix

    It is a wide table of 84 rows. It scrolls inside its own container rather than the page, which is correct, but navigating a table that size by screen reader is slow regardless of markup.

    What helps today: The filters above it narrow the table before you enter it, and each country's row is also readable from its own summary.

  • Diagrams

    The diagrams carry text alternatives, but a diagram's meaning is partly its shape, and a description is a translation rather than an equivalent.

    What helps today: Every diagram on this site restates its content in prose or a list nearby. If one does not, that is a defect worth reporting.

If something does not work

That is a bug in this site, not feedback about it.

A reply within one working day, and a report is logged as a defect rather than as feedback. If something here stops you doing what you came to do, that is a bug in this site.

It helps to know the page, what you were using, and what happened instead — but a message that says only that a page does not work is still worth sending.