Accessibility
What works today, measured rather than asserted (keyboard operability, focus, contrast, motion, structure, captions and read-aloud), and the formal claims we have deliberately not made.
Updated July 2026
We want Aiora Labs to be usable by everyone, and this page says what is true today rather than what we would like to be true. Almost everything below is measured against the running product, and the figures are quoted so you can hold us to them. Where a sentence would be a formal claim we have not earned, we say that plainly instead of implying it.
How to read this page
Two different kinds of statement appear below and we keep them apart on purpose. The first kind describes behaviour that can be measured: whether a control can be reached without a mouse, what the focus ring actually looks like, what a text colour measures against the exact background painted behind it. Those are facts about the product, and where there is a number we give it.
The second kind is a formal conformance claim: a standard, a level, an audit, a date, an auditor. Those are not measurements, they are assertions about process, and we have not earned any of them. They are listed in the next section as not claimed, and they stay listed until they are true.
What we have not claimed
It is easy to put a standard’s name on a page and let the reader assume the rest. We would rather be visibly short of a claim than quietly imply one. Every row below is a formal statement Aiora Labs has not made, and will not make on the strength of our own testing alone.
Each of these needs a decision and a signature from Aiora Labs rather than an engineering change, which is exactly why it is listed here rather than filled in. Our own measurements appear further down and we stand behind them. They are not a substitute for any of the following and we do not offer them as one.
| Formal claim | Status | Why it is not on this page |
|---|---|---|
| Conformance level (A / AA / AAA) | Not claimed | A level asserts that an entire product meets every applicable success criterion. We have measured parts of that ourselves, which is not the same thing, and self-assessment is not a level. |
| Independent audit | Not commissioned | No external accessibility audit has been carried out. There is therefore no audit date and no auditor, and we will not name one. |
| Accessibility Conformance Report (VPAT) | Not produced | A conformance report is written against a completed audit. Without the audit there is nothing honest to put in it. |
| Assistive-technology certification | Not claimed | We test with keyboard, focus and structure tooling. We have not run a formal test programme with screen-reader users, so we do not claim one. |
| Which accessibility law applies to us | Not stated | That depends on where Aiora Labs is established and where it trades, and it is being settled alongside the rest of our governing terms. We will not guess at it. |
| A dated conformance statement | Pending | It belongs here, with its date, once there is an audit behind it. Until then this page is a description of a product, not a certificate. |
Keyboard operability
Every interactive control on the public site is a real button, link, input or summary element, so it is reachable and operable from the keyboard without us having to reimplement focus behaviour. We check this by driving the site with the keyboard rather than by reading the code: tabbing through each public page in turn and recording what receives focus and what it looks like when it does.
The mobile menu behaves as a disclosure should. The button that opens it reports whether it is open and names the panel it controls, Escape closes the panel, and closing it returns focus to the button you opened it with, so opening the menu is never a one-way trip.
Skipping the header
The header is a logo link, six navigation links, the primary action and the menu button. Reaching a page’s content past all of that is tedious with a mouse and genuinely obstructive without one, so the first thing in the tab order is a “Skip to content” link that jumps straight to the main region. We verified it is the first focusable element on all forty-five public routes.
It is hidden until it is focused and then it is plainly visible, not hidden in a way that would take it out of the tab order, which would defeat the point of having it.
Visible focus
Focus is shown as a two-pixel champagne outline offset two pixels from the control, which reads clearly against both the dark ground and the lighter card surfaces. It is drawn for keyboard focus specifically, so clicking a button with a pointer does not leave a ring behind on something you were not navigating.
Where a control is a borderless input sitting inside a bordered field (the search boxes on support, documents and each policy, and the message box on the contact form), the ring is drawn on the field rather than the input, because that is the shape you can actually see. Those five controls previously signalled focus only by shifting a one-pixel border to a translucent gold, which was not a visible focus indicator by any reasonable reading; they now carry the same ring as everything else.
Colour and contrast
We measure contrast against the colour actually painted behind the text, compositing every translucent layer down to the page ground first, because a text colour carrying transparency is not the colour anybody sees. Measuring it the lazy way flatters the result, sometimes by several multiples.
We measured 2,321 pieces of visible text across seventeen public pages this way. None of them falls below 4.5:1, the standard threshold for normal-size text. The lowest reading anywhere on the site is 5.19:1, the ordinary floor is 5.32:1, and body copy and headings sit well above both. The primary action, dark ink on champagne, measures between 5.19:1 and 9.46:1 across its gradient.
That floor only clears the threshold because we fixed it. The colour used for the smallest supporting text composited to 3.07:1, below the threshold, and because it is the colour behind the footer, every small capitalised label, the contents list on each policy and most status captions, it was the single cause of every contrast failure on the public site: 507 of the 2,193 pieces of text we first measured, all of them tracing back to one value. It is corrected, and the count is now zero.
Motion
The public site honours the reduced-motion setting your operating system or browser already exposes. There is no separate motion switch buried in our own settings for the public pages, and we would rather respect the preference you have set once than ask you to set it again.
Reducing motion shows the finished state rather than removing the information. Content that would fade and rise into place is simply already in place; a diagram that would animate to explain a sequence renders at its end state with the sequence intact; a scroll-driven progression resolves to complete instead of subscribing to the scroll at all. Nothing that carried meaning while moving becomes unavailable when it stops.
Page structure
Each public page has one main region, one banner header, one footer, and a named navigation region for each distinct set of links, so a screen reader or keyboard user can move between the regions of a page instead of reading it end to end. We checked all forty-five public routes: every one has exactly one main region, exactly one first-level heading, and no unnamed navigation region.
Heading levels descend without skipping. We checked every visible heading on all forty-five routes and found no jumps. Where a section needs a heading for the structure but not on the screen, the heading is in the page and visually hidden rather than removed, because being in the accessibility tree is the one thing it exists for.
Images, icons and diagrams
Every image on the public site carries an alternative-text attribute. We checked all forty-five routes and found none without one. Product screenshots describe what the screenshot actually shows, which is a discipline rather than a feature: a caption that oversells its own screenshot is a false claim, we have made exactly that mistake before, and correcting it is ongoing work rather than a box we have ticked. Purely decorative images carry an empty alternative so they are skipped instead of announced as noise.
Interface icons are marked decorative, because the text beside them already says what the control does and announcing both is a stutter. Across those forty-five routes one unmarked decorative graphic remains, inside the third-party sign-in component we do not author. Everything we do author is marked.
Diagrams and interactive visualisations carry a real text equivalent in the page: a list or a table with proper row and column headers, not a caption describing the picture. Where a diagram animates, the same information is also available as a plain readout that updates as the diagram does.
The background layer
The atmospheric background (the glow, the vignette, the fine grain and the slow drift) is decoration and nothing else. It is hidden from assistive technology, it cannot receive a click or intercept one, and it carries no information that is not also in the page.
With reduced motion the drift stops and the static depth stays, which is the right trade: the movement was the part that could bother someone, not the gradient. One thing we will not overstate: the layer does not itself stop working when its tab is in the background. Browsers throttle that kind of animation on their own, but we do not currently do it deliberately, and saying otherwise would be a claim about code that is not there.
Forms and errors
Every form control on the public site has a label: either a real label element wrapping or pointing at it, or an accessible name where the design carries no visible one. We checked every input, select and text area on all forty-five public routes and found none without a name.
Sign-in errors are announced as they appear and are also attached to the field they are about, so the message reaches you whether you are reading the page or listening to it. The contact form’s send button keeps its link and stays reachable even before you have written anything (it previously dropped out of the keyboard order entirely while the message was empty, which is a strange way to treat the only action on the page), and pressing it early now takes you to the field you still have to fill.
Text size and zoom
Type on the public site scales fluidly with the width of the window, and full browser zoom works normally. We do not restrict scaling, so pinch-zoom and page zoom both behave as your browser intends. Line lengths are set in character widths rather than fixed pixels, so text reflows into a readable measure instead of stretching as things get wider.
An honest limit: that fluid scale is not expressed in a unit that follows your browser’s own default-font-size preference. If you have made text larger in your browser settings, page zoom will still enlarge this site, but that specific preference will not move our type on its own. We would rather write that down than let you discover it.
Captions on Academy video
Academy course video is captioned. Each film ships a real caption track in the player, in English, authored from the same cue list the film itself is built from, so the captions cannot drift out of step with what is on screen. Of the eighteen published courses, seventeen carry genuine captions today; the last one needs its film re-rendered before its captions can be trusted, and we would rather say that than ship a track we do not believe.
Captions are offered rather than switched on by default, from the captions control in the player. That is deliberate for one specific reason: the orientation films carry their narration as on-screen text rather than speech, and defaulting a caption box on painted it over the film’s own titles. Where a film does have spoken narration the track is there waiting for one press.
Courses are inside the product, so this applies once you are signed in; the public course pages are descriptions and carry no video player.
Listening to a lesson
Every Academy lesson can be read aloud. It is a first-class control on the lesson itself rather than something bolted onto an assistant, it uses your browser’s own speech engine so it starts immediately and keeps working offline, and it offers play, pause, resume, stop, replay and six speeds from four-fifths to double.
It reads one sentence at a time and highlights the sentence it is on, so following along by eye and by ear cannot drift apart, and it only scrolls when the sentence it has reached is genuinely off-screen. A reader keeping their own place is never yanked somewhere else. It remembers where you stopped, so a refresh does not send you back to the beginning. Nothing plays until you press something: the first sound of a lesson is always a deliberate act.
A written transcript sits alongside the audio, so the lesson is fully readable whether or not the speech engine is available.
Announcements
Where part of a page changes without a reload, the change is announced politely rather than silently or urgently. Filtering the support answers announces the new result set; the credit estimator announces the figure it has worked out and is attached to the slider that produces it; a surface with no data yet says so out loud instead of appearing empty.
Loading states say “loading” once for the whole surface rather than leaving a screen reader to enumerate a dozen grey placeholder rectangles. Only genuine errors interrupt.
Where we still fall short
The dense creation surfaces are the weakest part of the product for anyone not using a mouse. Timeline editing, the node canvas and the production stages involve dragging, precise positioning and spatial arrangement, and they do not yet have keyboard equivalents that we would call adequate. We are not going to describe them as accessible because they are not, and a shallow pass over them would be worse than saying so.
Three smaller things we know about and have not finished. The type scale does not follow your browser’s default-font-size preference, as described above. The decorative background does not deliberately stop animating in a background tab. And while a page is still loading its content, the loading placeholder briefly announces itself as the main region of the page, so for a moment there are two: harmless in practice, wrong in principle, and it sits in code outside this part of the site.
We treat all of these as defects rather than enhancements. That is the only commitment on this page we can make entirely on our own.
Telling us about a barrier
If something here stopped you, please tell us. The contact form has an Accessibility topic that routes it straight to the right place, or you can write to support@aioralabs.com directly. Telling us which page it was, what you were trying to do and what you use to browse is the fastest way to get it fixed, but a one-line report is far better than no report, so do not let the detail put you off.
Reports from people who rely on assistive technology carry the most weight, because they find the things our own testing cannot. If you tell us something on this page is not true of your experience, we will treat that as the defect it is.