Conformance
Accessibility.
This statement describes how this site is built, what it was tested against, and what we know is still unresolved.
The standard we target
This site aims to meet WCAG 2.2 Level AA. That is the level referenced by most accessibility legislation, including the Americans with Disabilities Act as it is applied to websites in practice.
How it was tested
Every page on this site is checked with an automated accessibility audit at three viewport widths. We use a real browser because headless browsers force overlay scrollbars, hiding reflow and focus defects that only appear at narrow widths.
Automated testing is the floor, not the finish. It catches roughly a third of WCAG failures. The remainder is manual: keyboard-only navigation, focus order, the visible focus indicator, reflow at 320 pixels, and whether the page still makes sense with motion and scripting unavailable. That manual pass was last worked through on 13 October 2026. Keyboard and focus results on this site are taken in WebKit rather than Chromium, because Chromium silently compensates for a missing tabindex on the main landmark and so reports a working skip link where there is none.
What this site does deliberately
- Every page can be operated entirely by keyboard, and the first thing the keyboard reaches is a skip link to the main content.
- Animation respects the operating system's reduce-motion setting, and a Reduce motion button in the footer sets the same preference for readers whose system does not. With it on, transitions and scroll effects are disabled rather than reduced, and what the motion would have revealed is shown in its resting state, not withheld.
- The site renders and reads correctly with JavaScript unavailable. Script adds the menu and the scroll sequence on the home page; it is not required to read anything.
- Text contrast meets the AA threshold against the surfaces it sits on, at every size used. Where text crosses a photograph the figure is measured against the photograph itself, pixel by pixel behind the lettering, rather than estimated from the design.
- Images that carry meaning have text alternatives. Images that are decorative are marked so, rather than given invented descriptions.
Known limitations
The home page carries a scroll-driven sequence. With reduce-motion enabled it is static and the page reads normally, but on the home page specifically the sequence is the primary visual device, and a reader using reduce-motion sees a simpler page than one who does not.
This statement covers the pages listed in the site's sitemap. An earlier prototype of the home page remains on the server at /v2/; it is linked from nowhere and listed in no sitemap, it is not part of this site, and it has not been audited.
Telling us about a problem
If any part of this site is unusable for you, tell us and we will fix it. Reply to any message from us and it reaches a person. We treat an accessibility report as a defect report, not feedback.
Conformance against WCAG 2.2 Level AA
Every Level A and AA success criterion, with the status claimed for this site and the reason. “Not applicable” means the site has no content of that kind, not that the criterion was skipped.
| SC | Name | Level | Status | How this site meets it |
|---|---|---|---|---|
| 1.1.1 | Non-text Content | A | Supports | Photographs that carry meaning have descriptive alt text; the decorative hero film carries aria-hidden and the still beneath it carries a description, so assistive technology skips them rather than reading filenames. |
| 1.2.1 | Audio-only and Video-only (Prerecorded) | A | Supports | The home page film is video-only, silent and decorative. It conveys nothing that the surrounding text does not say, and a still poster is shown before it plays. With reduce-motion on, the film never plays. The film is hidden and the still photograph beneath it is shown in its place, and the section lift is not built at all, so the page is laid out in ordinary flow with nothing in motion. |
| 1.2.2 | Captions (Prerecorded) | A | Not applicable | No audio is presented anywhere on this site. The only video element is muted and there is no audio element, so there is no speech or sound to caption. |
| 1.2.3 | Audio Description or Media Alternative | A | Not applicable | As above: the only moving image is silent and decorative, and its content is described by the text beside it. |
| 1.2.4 | Captions (Live) | AA | Not applicable | No live media. |
| 1.2.5 | Audio Description (Prerecorded) | AA | Not applicable | No synchronised media. The one video has no audio track. |
| 1.3.1 | Info and Relationships | A | Supports | Headings nest without skipping levels, navigation is in nav landmarks with accessible names, page content is inside main, and the conformance data below is a real table with scoped header cells. |
| 1.3.2 | Meaningful Sequence | A | Supports | Reading order follows the DOM. Where the design reorders a block visually, the DOM was reordered to match rather than the order being faked with CSS. |
| 1.3.3 | Sensory Characteristics | A | Supports | No instruction depends on shape, colour or position alone. |
| 1.3.4 | Orientation | AA | Supports | No orientation is locked; every page works in portrait and landscape. |
| 1.3.5 | Identify Input Purpose | AA | Not applicable | This site has no form fields. |
| 1.4.1 | Use of Colour | A | Supports | Colour is never the only indicator. Links in prose are underlined on hover and focus and carry a visible focus ring; the current page in the navigation is marked with aria-current as well as a rule. |
| 1.4.2 | Audio Control | A | Not applicable | Nothing plays audio, so there is nothing to pause or mute. |
| 1.4.3 | Contrast (Minimum) | AA | Supports | Body ink #232323 and secondary text #69635f are used on the two section grounds, field #f8f2ef and shelf #d1c3b9. Body ink measures 14.17:1 on field and 9.14:1 on shelf; the weakest flat pairing on the site is secondary text #554e4a on shelf at 4.74:1, which clears the 4.5:1 minimum for body text. Text over photography is measured rather than assumed: the page is re-rendered with the glyphs transparent and the pixels behind each glyph are sampled and compared in linearised sRGB. Across 29 such text runs the weakest worst-pixel readings are the hero wordmark at 10.7:1, the hero headline at 4.1:1 against its 3:1 large-text floor, and the statement over the workshop footage at 3.8:1; the 10px hero eyebrow reads 6.6:1. |
| 1.4.4 | Resize Text | AA | Supports | Type is set in relative units and clamps; the page is usable at 200% zoom with no loss of content. |
| 1.4.5 | Images of Text | AA | Supports | All text is live text. No wordmark or heading is an image. |
| 1.4.10 | Reflow | AA | Supports | Verified at 320 CSS pixels wide in a headed browser. No horizontal scrolling is required; the grids collapse to a single column and the navigation becomes a menu. |
| 1.4.11 | Non-text Contrast | AA | Supports | Rules and borders are drawn from the ink and line tokens and meet 3:1 against their surfaces. The focus indicator is drawn twice where it crosses photography, an ink ring with a white halo outside it, because no single colour clears 3:1 against art that runs from bright sky to shadow. |
| 1.4.12 | Text Spacing | AA | Supports | No declaration prevents a reader overriding line height, letter spacing or word spacing; nothing is sized to a fixed height that would clip at increased spacing. |
| 1.4.13 | Content on Hover or Focus | AA | Supports | Nothing appears on hover that must be dismissed or hovered over to read. |
| 2.1.1 | Keyboard | A | Supports | Every control is reachable and operable by keyboard, including the menu, the accordion on the home page, and the navigation dropdowns. The dropdowns are disclosure buttons rather than hover targets: Enter or Space opens one, Tab walks into it, and it never opens on focus, which would make Enter a close rather than an open. |
| 2.1.2 | No Keyboard Trap | A | Supports | Focus can always leave any component. The menu and the navigation dropdowns both close on Escape and return focus to the control that opened them, and tabbing out of an open dropdown closes it rather than trapping the caret inside. |
| 2.1.4 | Character Key Shortcuts | A | Not applicable | No single-character shortcuts and no accesskey attributes are defined. |
| 2.2.1 | Timing Adjustable | A | Not applicable | Nothing on this site is time-limited. |
| 2.2.2 | Pause, Stop, Hide | A | Supports | The only motion is driven by the reader scrolling, so it stops when they stop. Reduce-motion can be set either in the operating system or from the Reduce motion button in the footer of every page, which persists across reloads and between pages; with it on, the scroll sequence and every transition are disabled. Nothing is hidden in exchange: the content that the motion would have revealed is shown in its resting state instead. |
| 2.3.1 | Three Flashes or Below | A | Supports | Nothing flashes. |
| 2.4.1 | Bypass Blocks | A | Supports | A skip link to the main content is the first focusable element on every page. |
| 2.4.2 | Page Titled | A | Supports | Every page has a unique title describing its subject. |
| 2.4.3 | Focus Order | A | Supports | Focus order follows reading order. The decorative hero mock is aria-hidden and its one button is removed from the tab order. A closed navigation dropdown and a collapsed menu group both carry the hidden attribute, so their links are absent from the tab order rather than merely invisible in it. |
| 2.4.4 | Link Purpose (In Context) | A | Supports | Link text describes its destination; no link reads "click here" or "read more" alone. |
| 2.4.5 | Multiple Ways | AA | Supports | Every page is reachable four ways: the primary navigation, the six-column footer, the category hub it belongs to, and the published sitemap.xml. The footer carries the whole tree, which is also the route that works with scripting unavailable. |
| 2.4.6 | Headings and Labels | AA | Supports | Headings describe the section they introduce; the footer column headings name their group and are also the accessible names of the nav landmarks. |
| 2.4.7 | Focus Visible | AA | Supports | A 2px ink outline with a 3px offset is drawn on every focusable element, replacing the browser default, which was close to invisible on these surfaces. Over photography, the header on the home page, the hero and the work tiles, a white halo is drawn outside that ring so the indicator survives both pale and dark art, and the skip link, which paints on ink, reverses its ring to white. |
| 2.4.11 | Focus Not Obscured (Minimum) | AA | Supports | The fixed header is 72px and pages carry matching scroll padding, so a focused element is never hidden behind it. |
| 2.5.1 | Pointer Gestures | A | Supports | No multi-point or path-based gesture is required. |
| 2.5.2 | Pointer Cancellation | A | Supports | Actions fire on pointer-up; nothing commits on pointer-down. |
| 2.5.3 | Label in Name | A | Supports | Visible text is contained in each control accessible name. |
| 2.5.4 | Motion Actuation | A | Not applicable | Nothing responds to device motion or orientation. |
| 2.5.7 | Dragging Movements | AA | Not applicable | No draggable control exists on this site. |
| 2.5.8 | Target Size (Minimum) | AA | Supports | Interactive targets meet the 24 by 24 CSS pixel minimum, with the menu button and the round controls set to 44 to 54 pixels. |
| 3.1.1 | Language of Page | A | Supports | Every page declares lang="en". |
| 3.1.2 | Language of Parts | AA | Not applicable | All content is in English. |
| 3.2.1 | On Focus | A | Supports | Focusing a control never changes context. |
| 3.2.2 | On Input | A | Not applicable | There are no inputs. |
| 3.2.3 | Consistent Navigation | AA | Supports | The header, the footer columns, the home-page directory and the category hubs are all generated from one category model, so the same links appear in the same order in all four places on every page by construction rather than by discipline. |
| 3.2.4 | Consistent Identification | AA | Supports | The same component is named the same way throughout. |
| 3.2.6 | Consistent Help | A | Supports | The route to a person, the contact page, is in the same place in the header and footer of every page. |
| 3.3.1 | Error Identification | A | Not applicable | No form, so no errors to identify. |
| 3.3.2 | Labels or Instructions | A | Not applicable | No form fields. |
| 3.3.3 | Error Suggestion | AA | Not applicable | No form. |
| 3.3.4 | Error Prevention (Legal, Financial, Data) | AA | Not applicable | This site takes no payment and creates no commitment; nothing can be submitted from it. |
| 3.3.7 | Redundant Entry | A | Not applicable | No multi-step process. |
| 3.3.8 | Accessible Authentication (Minimum) | AA | Not applicable | There is no login. |
| 4.1.2 | Name, Role, Value | A | Supports | Custom controls expose their state. The menu button, each navigation dropdown trigger and each mobile group expander carry aria-expanded and aria-controls. The closed menu is both inert and aria-hidden, so it cannot take focus while off-screen. The dropdowns are disclosure widgets and are not given a menu role, which would announce them as an application menu and stop their links being read as links. |
| 4.1.3 | Status Messages | AA | Not applicable | No status messages are produced. |