Accessibility

What we tested, and what still fails.

Not a conformance badge. This is the result of an audit, including the parts of it that did not pass, and the address to write to if you hit something this page does not mention.

The shortest version: the target is WCAG 2.2 level AA. As of 26 August 2026 every page of this site passes an automated audit with no violations at any severity, and the whole site — including the contact form — is operable by keyboard alone. Two things do not conform: the executive brief PDF has no text layer, and nothing here has been tested by a disabled person or an external auditor.

What was tested, and how

All 20 published pages, in a real browser, under four conditions each: the dark marketing surface and the light reading surface, at a 1280px desktop viewport and a 390px phone viewport. Each page was scrolled end to end while the audit ran, because two of the failures found were only visible mid-page — a translucent sticky navigation bar over a light band, and a label whose contrast depended on the section behind it. The audit is a script in the repository, so the next person can run exactly what was run here rather than something like it.

Automatedaxe-core 4.10, every WCAG 2.0/2.1/2.2 A and AA rule plus axe's best-practice set. This is the same rule engine a Lighthouse accessibility score is computed from; running it directly is what allows the scrolled and interacted states above to be covered, which a single page load is not.
Interactive statesThe cookie notice while it is showing, the install tabs after switching, the search dial while it is running, the industry filters after filtering, and the contact form after a rejected submission.
KeyboardEvery page driven with no pointer: the first Tab reaches the bypass link and it moves focus rather than only the viewport, every control that can be reached shows a visible focus indicator, the install tabs move on the arrow keys, and both forms are completable end to end.
ContrastComputed from the palette for every text colour on every surface it is used on, in both themes, rather than sampled by eye.
MotionBoth animated elements re-checked under prefers-reduced-motion: reduce, by counting the frames each one asks for: the globe paints a single static frame and the dial jumps to its final state, and neither is still driving an animation.
ReflowAt 390px no page scrolls sideways. What overflows — a wide table, a long install command — scrolls inside its own box and can be scrolled from the keyboard.

What that found, and what changed

The audit was not a formality. Everything below was a real failure on this site before 26 August 2026, and all of it is fixed:

No way past the navNo page had a bypass link, so reaching the content by keyboard meant tabbing through eight navigation links and a call to action, on every page. There is one now, and it is the first thing in the tab order.
Text too faint to readThe dimmest grey in the palette scored 2.7:1 against the surface it is used on — well under the 4.5:1 the small labels it sets need. It, the cold blue used for numbers in tables, and four colours on the light product band were all raised.
Pages that scrolled sideways on a phoneAn install command and a wide table pushed the whole page wider than a 390px screen, which is a reflow failure — and on the Docker guide the end of a quoted command was clipped off the side rather than merely pushed, so it could not be read at all. The blocks that overflow now scroll on their own and can be scrolled from the keyboard, and quoted code wraps.
Demoted rows nobody could readThe search dial greys out the candidates it has given up on. It did that by fading the whole row, which took the candidate's name to 2.3:1 and its label to 1.6:1 — on the rows whose entire job is to say what the search rejected and why.
Content outside any landmarkThe home page and the jAIn page had no <main> at all, so "skip to the main content" had nothing to skip to.
Controls that lied about their stateThe dial's play button kept saying "Run the search" while the search was running, and the install tabs claimed a tab list without behaving like one. Both were corrected, arrow keys included.
A focus ring removedThe form fields replaced the focus outline with a border colour change — a cue nobody using a high-contrast mode ever sees. The outline is back.

The structural half of that is checked by the build from now on rather than remembered: scripts/build.sh fails on a page with no bypass link, a page with no <main>, a heading level that skips, an image with no alt, a scrollable block a keyboard cannot reach, a stylesheet that removes a focus outline, and a palette colour edited back below its contrast floor. The half that needs a browser is a script beside it, run by hand before a release that changes layout or interaction — this page carries the date it last passed.

What does not conform

The executive brief PDFAn outright failure. The 2026 AI Mandate is published as a scanned image with no text layer, so a screen reader cannot read a word of it. There is no HTML equivalent yet. Ask us and we will send you the contents in a readable format while that is true — that is a worse answer than fixing it, and it is the honest one today.
No audit by anyone elseNo VPAT, no third-party assessment, and no testing with assistive technology by the people who use it. What is above is our own testing, and our own testing has the blind spots you would expect. If your procurement needs a VPAT, ask and we will tell you where we actually are rather than fill one in optimistically.
The two animated illustrationsThe globe on the home page and the search dial on the jAIn page each carry a text alternative describing what they show, and both stop moving under prefers-reduced-motion. Neither is a replacement for seeing them: they are illustrations of an idea, and every fact either one implies is also written in the prose around it. If you find one that is not, that is a bug and we want to hear about it.
The technical brief PDFHas a text layer and is readable, but has not been checked against PDF/UA — its tagging, reading order and figure alternatives are unaudited. The HTML version of its argument is the accessible route through the same material.

Being straight about maturity

This page describes testing, not certification, in the same way the security page describes engineering rather than a questionnaire. A conformance badge would be one sentence and would tell you less than the table above. We are a small company: the fastest way to find what we have missed is for someone who is blocked to tell us, and for us to fix it in the week rather than the quarter.

Reporting a barrier

Email support@veox.ai with "accessibility" in the subject, and say which page and what happened. We will acknowledge it, we will tell you whether it is a fix or a known gap, and we will not ask you to prove it first. If something on this site stops you reaching the product, we will also get you what you needed by another route while it is being fixed.