Accessibility

Fareband aims to meet WCAG 2.2 Level AA. This page states what that means here in concrete terms, what is checked automatically on every build, what is not done yet, and how to tell us when something is in your way.

Last reviewed 30 August 2026

What is in place

Each commitment, and how it is kept honest.
CommitmentHow it is enforced
Keyboard access to everything No control is mouse-only. The menu, the FAQ and the subscribe form all work from the keyboard alone, and the drawer traps and restores focus.
Visible focus, never removed A two-pixel focus ring in Signal Teal with an offset, defined once in the global stylesheet and never overridden per component.
Colour is never the only signal The amber used for a fare below the tenth percentile always sits next to a written figure and a text label. A build test fails if amber is used decoratively.
One h1, no skipped heading levels Checked on every page of the built site by scripts/check-meta.mjs, which fails the build rather than warning.
Charts are not the only copy of the data Every price band has a real HTML table underneath it with the same figures, selectable and readable by a screen reader. Nothing important lives only inside an SVG.
Data graphics carry a prose label Each band exposes a complete sentence as its accessible name, because a screen reader cannot narrate a shape.
Reduced motion is respected properly Under prefers-reduced-motion animations resolve to their explicit final state. Shortening a duration alone would freeze content mid-fade and leave it invisible.
Tables are navigable Every data table has a caption and scoped headers, and wide tables scroll inside their own container so the page itself never scrolls sideways.
Text scales to 200% Type is set in relative units against a fluid scale, and layouts reflow rather than clipping.
Touch targets are at least 44 by 44 pixels Applied to the menu control, form fields and every call to action.
Errors say what happened and what to do Form errors are announced in a live region and tied to the field with aria-describedby, never signalled by a red border alone.
The site works without JavaScript Prices, bands, tables, FAQs and navigation all render server-side. Script adds convenience, never content.

Contrast

Body text on the page background measures roughly 14.8:1, which clears AAA. Secondary text clears AAA as well. Signal Teal on the page background measures about 4.04:1, so it is used for large text, borders and focus indicators, and body links are set in the main text colour with an underline rather than relying on colour to mark them.

Beacon Amber does not meet the contrast threshold for text and is never used to carry text. It marks a fare below the tenth percentile, and that fare is always written out in the main text colour beside it.

What is not done yet

Telling us about a barrier

If something on this site stops you doing what you came to do, write to hello@fareband.com and say which page and what happened. We answer within five working days and will tell you either when it is fixed or why it is not straightforward.

If you need a figure from this site in another format, ask and we will send it. The data is ours, so there is nothing stopping us.