Accessibility statement
This page states what was measured, not what we hope. Where a thing was not measured, it says so. Nothing here is a certification, and accessibility is a property of your finished site rather than of a theme: the content you write, the images you upload and the plugins you add all decide the outcome.
What is checked, and how
Every release is put through the same gates before it is packaged, on a clean WordPress with the demo imported. A release that fails one is not shipped.
| Check | Where it runs |
|---|---|
| axe, WCAG 2.2 level A and AA | Every template and every page of the demo, in both light and dark. |
| Contrast, computed from the encoded token values | Every colour pair the theme sets, in every one of the four style variations, in both modes: 324 pairs across nine schemes in this release, none failing. |
| Keyboard | Every interactive element on every page: reachable, operable, with a visible focus ring. |
| HTML validation | Every page of the demo. |
| The design's own numbers | Every route at six widths in both schemes: type sizes, measures, overflow, overlap. |
| Reduced motion | Every reveal already in place, nothing drifting or zooming, every transition at its destination. |
What the build commits to
- Type is text. Prices, times, stamps and dietary marks are letters, not images and not icons. They scale, they translate, they are selectable and a screen reader reads them.
- Never colour alone. A struck row carries a 2px strike, a stamped mark and a word. The open status dot is beside a sentence, never instead of one.
- Focus is always visible. The focus ring's colour is deliberately left out of every transition, so it can never fade up: it is either there or it is not.
- A 44px press target on the mobile navigation trigger.
- No hover-only affordance anywhere. Everything reachable with a mouse is reachable without one.
- The dietary filter never removes a row from the page. Rows are hidden in place, so the document does not reflow under a finger and a reader who wants the whole card gets it back instantly.
- Landmarks are real. One header, one main, one footer per page; the current route carries
aria-current. - Disclosures are native.
<details>/<summary>, not a scripted accordion. - The address control never lies. It says selected when the browser has no clipboard and copied when it does, and its accessible name does not change when the state does.
Motion
Photographs rise into place as they enter the viewport, the full-bleed ones drift a few per cent against the scroll, and a photograph zooms slowly inside its own frame under the pointer. The open dot pulses a soft ring every 2.8 seconds. That is all of it: there is no slider, no carousel, no video, no page-transition loader, and the mobile panel has no entrance.
What that means for a reader:
prefers-reduced-motion: reduceis honoured everywhere. Every reveal is already in place, nothing drifts, nothing zooms, the dot holds still, and each transition resolves to its destination state rather than being switched off: the slip is already on the card, the disclosure still opens and arrives whole, the service panel still swaps.- Nothing depends on the motion. A reveal states only where an element comes from, so with no support for it, or with motion reduced, the page is simply finished. No content waits at zero opacity for a script, because no script is involved.
- The one loop carries no information. The open dot keeps its colour and the sentence beside it says the same thing in words (SC 1.4.1); the ring is decoration over a stated fact, and it stops under reduced motion.
- Nothing flashes.
See Motion and reduced motion for how it is built.
The words over a photograph
The heroes and the title banners set their words on the dark side of a photograph, with an ink ground laid under them: a soft plate behind the words, never a flat wash over the whole picture. On a phone the words leave the picture and stand on the page's own ground under it.
This is the one thing that does not survive you replacing the image. WordPress has no check for it. After you set a new hero or banner photograph, or move its focal point, look at the page at 390 and at 1440, in light and in dark, before you publish. It is said again on the four editing tasks.
A documented deviation from the design source
Table and Type follows a design drawn on a canvas, and two values were changed on the way to meet a contrast requirement. They are named here because somebody who compares the two will see them.
The filled button runs a shade deeper. A button's label is 14px at weight 600: normal-size
text, which owes 4.5:1 (WCAG 2.2 SC 1.4.3). White on the design's brighter clay measures
3.96:1. The theme fills its buttons with #c2451f in light and #c94a21 in dark, where the white
label passes, and keeps the brighter clays for the roles that owe 3:1: the focus ring, a link's
hover, the selection's border.
A field's outline is a token of its own. --field-border, the outline of a form field, is a
control boundary, and SC 1.4.11 Non-text Contrast requires 3:1 against the colour beside
it. A hairline that is fine between two rows of a card is not enough around an input, so the
outline is separate from the ordinary border and is measured in every variation and both modes:
| Pair, as shipped (Base) | Ratio |
|---|---|
#7a6f62 on the field #f2ece3 (light) |
4.18 : 1 |
#7a6f62 on the card (light) |
4.63 : 1 |
#79706a on the field #17130f (dark) |
3.82 : 1 |
#79706a on the card (dark) |
3.69 : 1 |
The lowest reading for a field outline anywhere in the shipped theme, across all four variations and both modes, is 3.38 : 1 (dark, against the muted ground). So your form outlines are darker than a hairline, on purpose.
What is not claimed
- No conformance claim. We do not say the theme "is WCAG 2.2 AA compliant" or carries any certification. We say which checks ran and what they returned.
- No claim about your finished site. Your copy, your images, your alternative text, your colour choices and any plugin you add can all break something this theme got right. A theme cannot promise what it cannot see.
- No claim about assistive technology behaviour beyond what the checks above measure. Manual screen-reader testing was not part of this release.
- No accessibility overlay, and none will be added.
If you find a barrier, tell us — see Support. A reported barrier is a bug.