EnovariLOCAL-FIRST
Log in Download →
Accessibility

Built to be usable by everyone.

The statement

Accessibility at Enovari.

Enovari is a memory system for AI assistants. This site is where you read about it, buy it and get help with it. Every page of it has been walked with the keyboard, and where a keyboard alone is not yet enough, the limitations below say so.

Below is the standard we hold this site to, what we have not done, how to reach us, and the limitations we know about.

  1. We name a standard. We do not claim a grade. This site is built to WCAG 2.1 Level AA practices. It is not described anywhere as compliant, conforming or certified, because nobody independent has checked it, and those are words that mean somebody did. Assessed by self-evaluation. On 2026-09-07 none of those three words appeared about our own work on any page of this site.
  2. No independent audit has been done. Not a firm, not a certification body, not a paid tester. What we have is keyboard-only testing, automated checks in the build, and the live readings further down this page. None of those is an audit and we will not let one be described as one.
  3. If something here is in your way, tell us. Call (843) 809‑9884, or use the support form. Tell us the page, what you were trying to do, and what happened instead. A barrier report is the one we most want to get. The phone number is the route with a person on the end of it. We do not publish a reply time for the form, and the last section of this page says plainly why not.
What we’ve built in

Accessibility is engineering, not a statement.

This site is built to WCAG 2.1 AA practices as engineering, and we state only what we have actually done:

  • Semantic landmarks and a skip-to-content link on every page
  • A logical heading order, one h1 per page
  • Keyboard operability for every control, including the header menu, which closes on Escape
  • Visible keyboard focus outlines on every control — never switched off, and never invisible
  • Labelled form fields, with the label tied to its input
  • AA colour contrast, computed against the ground each element actually sits on
  • Alt text on every image
  • Reduced-motion support that stops every animation, canvas and transition when your system asks for it
  • No third-party script, and no font or asset fetched from another domain

What we have not done: a paid third-party audit. We test with keyboard-only navigation and automated checks on every change, and the section below measures this page live — but none of that is an independent audit, and we will not describe it as one until there is one.

If anything on this site is hard for you to use, that's a bug to us. We do not promise a fix we have not made — section six of this page traces exactly what happens to what you send, and names a phone number as well as our support form. Last updated 2026-09-07.

Known limitations

Four things this site does not do yet.

Each one is named with what to do instead, where there is something to do instead. Where there is nothing, it says so rather than offering a route nobody has walked.

  1. OpenLargest gap

    The gap

    No assistive technology has ever been run against this site.

    What to do instead

    If a screen reader, magnifier, switch device or voice control reads this site wrongly, the phone number above reaches a person, and that is the report we most want. Everything measured on this page is arithmetic about pixels and a record of which keys did what; none of it is a statement about what a screen reader announces.

    Stated 2026-09-07. No screen reader, magnifier, switch device or voice-control setup has been used in any test of this site, by us or by anyone else.

  2. OpenNo audit

    The gap

    Nobody outside this company has checked our work.

    What to do instead

    Check it yourself. Every number in the sections below this statement is computed in your own browser when the page loads, from this page, and the script that computes it is served unminified from this domain. It is arithmetic; read it.

    Stated 2026-09-07. The readings print whatever they find, including the readings that do not flatter us.

  3. OpenKeyboard

    The gap

    Closing the header menu with Escape returns focus to the page body rather than to the button that opened it, so a keyboard reader loses their place.

    What to do instead

    Nothing, and we are not going to invent a workaround we have not walked. The next Tab resumes below the header. The fix is to send focus back to the button that opened the menu, and it is not made yet.

    Read from the shared header script, 2026-09-07: Escape closes the menu and nothing moves focus afterwards.

  4. OpenFocus ring

    The gap

    On the privacy page and the terms page, the button in the closing band takes a focus ring that fades in over a quarter of a second. The band on those pages is white, so for that moment the ring is white on white — 1.000:1 — before it settles at 3.276:1.

    What to do instead

    Wait a beat: the ring is there after that quarter second, and every other keyboard stop on those two pages shows its ring immediately. The same button on this page no longer fades — its ring is drawn at 4.735:1 on the first frame it exists — and the same one-line correction is owed to the other two.

    Cause read from the inherited stylesheet and measured in a driven browser, 2026-09-07: that button carries a transition with a duration and no property list, so outline-color animates from the element’s own text colour, which is white. Naming the one property that should transition is the whole of the fix.

Four limitations, listed 2026-09-07. When one is fixed it comes off this list, and this statement is reviewed whenever the site changes.

Below this line

The measurements behind this page.

The statement above is the whole of what we are asking you to take on trust, and it is short on purpose. Everything below it is the working: what performs each claim, what was measured, when, and where the measurement stops. Nobody has to read it. It is here because a claim whose working cannot be inspected is a claim you have no way to check.

Every number below is taken in front of you, or it names its door. The readings in the third part are computed in your own browser when this page loads, from this page, and they print whatever they find. The script that computes them is served unminified from this domain: it is arithmetic, and you can read it.

What is built in — taken apart

Nine claims. Nine mechanisms. Not the same kind of true.

The list above is nine assertions, and an assertion is worth exactly what its mechanism is worth. So each one is opened here: what actually performs it, what measurement was taken, when it was taken, and where it stops. Two of the nine are not described only — they are put in your hand.

The door for everything below. Every count is a parse of the built site — each .html the build produces whose name does not begin with an underscore, twenty-four of them, which is every page this site publishes and the ones it has not published yet — with comments stripped first: HTML comments out of the pages and CSS comments out of the stylesheets, because a landmark named in a comment is not a landmark and a rule quoted in one is not a rule. Re-taken 2026-09-07. Every ratio is the WCAG 2.1 relative-luminance formula over the exact composite, computed on two bases — the float composite and the same composite rounded to 8-bit — and reported only where the two agree. The arithmetic was checked first against three values that cannot move: black on white must come out at 21.000, white on white at 1.000, and #767676 on white at 4.54. It did.

Two of the nine can be settled by your own hand, here. This counter is the one thing on the page that needs JavaScript; both specimens work without it.

  1. i

    Semantic landmarks, and a skip-to-content link, on every page.

    Mechanism. The landmark elements are part of every page's frame — emitted by the builder on the pages we compose, inherited on the pages adopted from the old host. The skip link is the first focusable thing in the document and is invisible until it takes focus, which is why you have probably never seen it. Press Tab once on any page here and it appears.

    Measured. Exactly one <main> and at least one <header>, <nav> and <footer> on 24 of 24 built pages. A skip link on 24 of 24 as well: the builder emits one on the pages it composes, and on the pages adopted from the old site it leaves the inherited one alone rather than adding a second on top of it. Re-counted 2026-09-07.

    A skip link is the cheapest thing on this list to get right and the easiest to leave out, because nobody using a mouse ever sees whether it is there. It is the one item here you can check on any page of this site in one keystroke.

    Holds

  2. ii

    A logical heading order, one h1 per page.

    Mechanism. One of the build's static checks counts <h1> on every page it is given and refuses to ship a page carrying more or fewer than one. Order has no mechanism at all: nothing in the build checks whether the outline descends without skipping a level. The live reading further down this page does, for the page you are on.

    Measured. Exactly one <h1> on 24 of 24 pages. Heading order: 23 of 24 descend without skipping a level. The one that does not is a page the build produces and the deploy list leaves behind, so no visitor can reach it; every page this site publishes descends without a skip. That check was run against a control that must fail — the same expression on a made-up outline of h1, h3 reports the skip — because a check that cannot come out badly proves nothing.

    Heading order is what lets a screen-reader user skim a page instead of reading it start to finish. It is also the thing on this list most likely to drift, because nothing breaks visibly when it does.

    Holds

  3. iii

    Keyboard operability for every control, including the header menu, which closes on Escape.

    Mechanism. The site's header script listens for the Escape key and shuts the menu. It is served from this origin unminified, so you can read it.

    Measured. Driven at a true 390 pixel viewport with real key presses: the menu button is the second tab stop on the page, Enter opens it, its expanded state goes to true, Escape closes it, and the expanded state goes back to false. With the menu shut its links are out of the tab order, so a keyboard reader never lands inside a menu that is not open.

    One thing Escape does not do is give you your place back. That is the third entry in the known-limitations list at the top of this page, and the walk through the whole route is further down.

    Holds

  4. iv

    Visible keyboard focus outlines on every control — never switched off, and never invisible.

    Mechanism. Two of them, and both count. On the eleven pages adopted from the old site a rule of ours or the old host’s draws the ring. On the thirteen this project composes there is no such rule, so the browser draws its own, and a browser ring is a visible indicator. The claim is that no keyboard stop on this site is left without an indicator — not that every indicator is one we drew.

    Measured. Every focusable stop on all twenty-four built pages was focused in a driven browser and its computed outline read, 2026-09-07: not one stop anywhere had no indicator. Where a rule draws it, the tightest reading on the whole site is 3.075:1 against a 3:1 floor. Two stops read below that floor for a quarter of a second while a ring fades in — the closing-band button on the privacy page and the terms page — and that is the fourth known limitation at the top of this page.

    Five declarations in the shipped stylesheets switch an outline off, and none of them costs a reader an indicator. Four are inherited from the old site and select controls that appear on no page those sheets are loaded by. The fifth is on this page, on purpose: it is the failing specimen in the keyboard section’s dial, and it is the only way to see what a missing ring looks like without breaking a real control. Counted over the shipped stylesheets with CSS comments stripped, 2026-09-07, because a rule quoted in a comment is not a rule.

    Holds

  5. v

    Labelled form fields, with the label tied to its input.

    Mechanism. A label is not a word placed above a box. It is a binding — a for that names an id, or an aria-label on the control itself. Bound, the words belong to the field: the relationship is written into the document, where any tool that needs it can find it, and a pointer on the words puts the cursor in the box. Unbound, they are decoration that happens to sit nearby. We have measured the binding. What any particular screen reader then makes of it we have not tested, and the first of the known limitations at the top of this page says so.

    Measured. 35 of 35 form controls across the 24 built pages carry a binding — a matching <label for>, an aria-label or an aria-labelledby. Every text field, every radio, every menu. Hidden fields are excluded; the two honeypots that catch spam are counted and bound. Re-counted 2026-09-07 with HTML comments stripped, because a label written in a comment is not a label.

    This one you can settle yourself. Specimen A is below, and it works whether or not this page's scripts ran.

    Holds — yours to settle

  6. vi

    AA colour contrast, computed against the ground each element actually sits on.

    Mechanism. The load-bearing words are actually sits on. Most elements on this site declare no background of their own, so asking one what it is painted on returns fully transparent — and a ratio computed against transparency is not a small error, it is a number with no referent. The measurement therefore walks up the tree from the text until it reaches the first ancestor that is genuinely opaque, and uses that.

    Measured. The same ink, unchanged, on the three grounds this site actually uses: 8.97:1 on white, 8.42:1 on the raised panel, 7.78:1 on the band. One colour, three readings, a spread of 1.19. That spread is the whole reason the phrase is in the claim.

    Specimen B is below. Move the text between the three grounds and watch the reading change while the colour does not.

    Holds — yours to settle

  7. vii

    Alt text on every image.

    Mechanism. None is needed.

    Measured. There are zero <img> elements on any of the 24 built pages. Not one. The graphics in the built markup are inline <svg> drawings — five on the privacy page, every one marked aria-hidden with its value written out in the text beside it, which is the correct handling for a drawing that repeats what the words already say — and the social-card image, which is a line of metadata for other people's link previews and is never painted on the page. A couple more small <svg> icons are drawn by script after the page loads, and the live reading below counts what the page is actually holding rather than what the file said. The expression that counted the images was first run against a string containing two and found two.

    Read it as a rule for what comes next rather than as a boast about what is here: any image added to this site carries alt text, and today there are none to carry it. The reading in the bench below counts <img> elements live, so the day one lands the count stops being zero in front of you.

    Holds — and is empty today

  8. viii

    When your system asks for reduced motion, every animation, canvas and transition on this site stops.

    Mechanism — and there are two of them, of unequal strength. Every built page loads at least one of the two shared stylesheets that carry a blanket rule: when your system asks for reduced motion, every animation and every transition on the page is switched off at once, whatever anyone adds later. On top of that, each section of this page also honours the setting in its own script, so a section arrives finished rather than animating into place. The canvas on the front page is a third case: it is not CSS at all, so its own script reads the setting and stops advancing the field.

    Measured. A blanket reduced-motion rule on 24 of 24 built pages — eleven of them load one of those two sheets and thirteen load the other, and there is no page that loads neither. Read from the shipped stylesheets with CSS comments stripped, 2026-09-07. The bench below also reads your own setting and then counts how many elements on this page are still carrying motion; with the setting on, it passes only at zero.

    The blanket rule is the one that cannot be got wrong. The per-section handling is the one that makes a page arrive whole instead of blank. Turn reduced motion on in your system and reload: everything here is already in place.

    Holds, two ways

  9. ix

    No third-party script, and no font or asset fetched from another domain.

    Mechanism. The build refuses any page that names a known third-party host, and it is one of the few checks that reads every page rather than a chosen list. The type is the reason it exists: this site once served its fonts from a font CDN, which handed every visitor's address to two other companies before they reached the sentence promising it did not. It is served from here now, and this check is what stops it drifting back.

    Measured. Zero off-origin sub-resource requests across all 24 built pages — no script, stylesheet, font or image fetched from anywhere but here. That is a statement about what your browser is made to REQUEST, which is the part that concerns your privacy. It is not a claim that no link ever points outward; a link you choose to follow is your decision, and counting it here would only blur the measurement that matters.

    Holds, and is gated

Specimen A — claim v

A label is a binding, not a word above a box.

Two boxes. Over the first is a real label, bound by name to the field beneath it. Over the second is an ordinary run of text, styled to look exactly like one. Point at the words above each box and click them. One puts the cursor in the box. The other does nothing whatever, and that nothing is the demonstration.

Not tried yet.

Loose — not a label at all

Not tried yet.

Nothing typed here goes anywhere. These two boxes are not inside a form, have no submit and are wired to nothing; they exist to be clicked at. The unbound one still carries a spoken label of its own, because a demonstration of a defect must not be a defect — what is missing is the visible binding, which is what your pointer just tested.

Specimen B — claim vi

The same ink is a different reading on every ground.

One sentence, one colour, three grounds. Move it. The words do not change; only what is behind them does — and the reading moves by 1.19, which is more than a quarter of the whole distance from the tightest of the three down to the 4.5 floor. This is why a contrast figure quoted without its ground is not a measurement.

Nothing about this sentence changes when you move it. Its colour is the same on all three grounds.

8.97:1 — this ink on white 8.42:1 — this ink on the panel 7.78:1 — this ink on the band

The three chips above are themselves bound labels, of the kind specimen A just tested — that is why clicking the words, not the small circle, works. The readings are not computed while you watch; they were taken by the formula named at the top of this section, against those three declared grounds, on 2026-09-06. The section below this one is the one that computes in front of you.

What one page cannot show you.

Seven of the nine claims say every or never. No single page can settle a sentence like that, so the counts above were taken by reading all twenty-four built pages at once, and the door for that parse is written out at the top of this section. It is a parse of files, not an opinion about them: run again over the same pages it will either agree with the numbers above or catch the mistake.

Taken in your browser, not ours

The instrument is checked first. Then this page is.

Everything above was measured by the people who wrote it, on a named date, and you are taking it on trust. This is the part you do not have to. The readings below are computed after you opened the page, from the document in front of you, by a script served from here that you can read. They can come out badly, and further down there are four buttons that make them come out badly on purpose.

What this instrument reads, and what it cannot. It reads this document as it now stands in your browser — after our stylesheets applied and our scripts ran, which is the page you are actually using and not the file we shipped. It cannot see the other twenty-three pages, so nothing here is evidence about them. It cannot see what any screen reader announces, because nothing here runs one. And it was written by the same hands as the page it is grading, which is the thing a self-audit can never get out from under — the most it can do is show its own working, hand you a control that must fail, and let you fire it. That is what the next panel is.

The instrument is calibrated before it is believed.

A check that cannot fail proves nothing. So before it reads a single thing about this page, each probe is handed a small fragment built to fail — two <main> elements, a heading outline that skips a level, an image with no alt, grey text under the contrast floor, an address on a domain that is not ours, an element carrying a transition — and has to say so. If a control comes back uncaught, the reading it gates is refused rather than printed. The specimens are built and destroyed in memory and never touch the page you are reading.

The controls have not run. Without JavaScript this section measures nothing and says nothing — which is why every reading below still reads as an em-dash rather than as a number somebody typed in.

This page, read in front of you.

  • Landmark elements

    Passes if there is exactly one <main> and at least one <header>, <nav> and <footer>.

    not read yet

    Counted in this document, including anything carrying the matching ARIA role. What an assistive technology then does with them is not measured here and is not claimed anywhere on this page.

  • Heading order

    Passes if there is exactly one h1 and no level is skipped on the way down.

    not read yet

    The build counts h1 elements and refuses a page carrying more or fewer than one. It does not check the order of the levels below it; this reading does, and it does it for the page you are on.

  • Images with no alt text

    Passes if every image the page loaded carries an alt attribute.

    not read yet

    There are no images in what we ship, so this reading is empty: zero out of zero is not an achievement, it is a promise that has never once been tested. The first button below plants a real one and this cell starts counting for something.

  • Tightest text contrast

    Passes at 4.5:1. Measured against the ground each element actually sits on, among the elements held to that floor.

    not read yet

    The worst single element on this page, not an average and not a sample. Large text has a 3:1 floor of its own under WCAG 1.4.3 and is held to that in the cell beside this one, because a display numeral passing at 3.4 would otherwise print here as though the page were failing.

  • The whole sweep

    Passes if no element with visible text is under its own floor — 4.5:1, or 3:1 where the text is large or large and bold.

    not read yet

    Every element in the page body holding its own text, one at a time, each against the first genuinely opaque thing painted behind it. An element that declares no background is not white; it is whatever is underneath, and asking it directly returns transparency and a ratio with no referent.

  • Motion, against your setting

    If your system asks for reduced motion, this passes only at zero: nothing on the page may still be carrying a transition or an animation.

    not read yet

    Read from your own setting, and then checked against the computed styles of every element in the body — the effect, not the rule that is supposed to cause it. It counts what is carrying motion at the moment you look, so taking the readings again after you have scrolled the page will report a larger number: the sections above arm themselves as you reach them and genuinely add transitions when they do. The reading that decides anything is the one taken with your setting on, and that one is a floor of zero. The fourth button below plants a moving element so you can test the reading rather than believe it.

  • Tab-reachable controls

    Reports a count. There is no floor here, because a count cannot establish one.

    not read yet

    Links, buttons and fields on this page that the Tab key can reach. This number does not show that nothing here is mouse-only: a division wired to a click with no keyboard handling is invisible to the very selector that produced it, so the count would look identical. Working the site by keyboard is the section after next, and it is the only place that can answer it.

  • Assets fetched from elsewhere

    Passes at zero. Anything above zero means your browser was made to contact somebody else to render this page.

    not read yet

    Every script, stylesheet, font, image, frame and media source this document points at, resolved against this origin, and corroborated where the browser will say so against what it actually went and fetched. Links you might choose to follow are deliberately not counted: a link is your decision, and folding it in here would blur the one measurement that concerns your privacy.

  • What the readings cost

    Reports the time. No floor: this is the instrument describing itself.

    not read yet

    The clock time these probes spent computing, summed from a high-resolution timer in your browser and excluding the pauses between them. It is a fact about this instrument on this load, in the browser you are using. It is not a page-speed figure.

The heading outline of this page, as it stands right now:

not read yet

The scope of a reading is part of the reading.

The contrast cell above does not sample one convenient paragraph. It sweeps every element on this page that paints its own text, composites each one against the first genuinely opaque thing behind it, and holds it to 4.5:1, or to 3:1 where the type is large enough for WCAG to allow it. A true number under a caption wider than itself is still a false claim, so the caption and the sweep are the same size.

Not measured in this browser — the readings above need JavaScript, and nothing here is prepared to guess at them.

Now break it.

A control you cannot fire is a control you are being asked to believe in. These four buttons put a real defect into this real page — not into a mock-up, not into a fragment — and the bench re-reads and reports it against you. Nothing is sent anywhere, nothing is saved, and reloading the page undoes all of it. Everything planted appears in the tray underneath, in the open.

Nothing is planted. The page is as it was served.

The tray

Anything you plant is put here, so that a demonstration of a defect is never a defect hidden somewhere you cannot see it.

These buttons need JavaScript, and they are the only part of this section that changes the page rather than reading it. If scripting is off you get every rule, every caption and an empty tray, and no reading claims to have been taken.

Four chips — press Tab

These four carry a focus ring that is drawn on purpose rather than left to the browser, and the readout follows it. It is a demonstration of four controls, and that is the whole of what it shows: it is not a statement about every control on this site, and the section above prints the count of places where an outline is switched off. Getting through the site without a mouse is the next section but one.

First stop A link out

Focus is on nothing yet

What this bench cannot do.

  • It grades one page. Every number above is about the document you have open. Any sentence on this site beginning every page is settled by the parse doored in the section above, not by this.
  • It grades the rendered page, not the shipped file. That is the right thing to grade, because it is what you are using.
  • It has never heard a screen reader, and it was written by the same people as the page. The calibration above is the honest answer to that and it is not a complete one. It is not an audit.

Section four · how we test

How this site is tested, and where each test stops.

W3C asks an accessibility statement to say what measures the organisation takes and what environments the content has been tested in. This is ours. Six kinds of check run against this site: five of them run automatically every time anything changes, and one is a person with a keyboard. Each is written below with the thing it cannot see, because a list of checks without their limits is a list of reassurances.

The rule all six are built to

A check that cannot fail proves nothing.

Every check here is given something it must reject before it is allowed to report on the real thing — an element deliberately below the contrast floor, a page with its scripts taken away, an arithmetic value that cannot move. A sweep with a broken filter returns an empty list, and an empty list reads exactly like a pass. That is the failure this rule exists to catch, and it is the only reason a green result here is worth anything.

The six.

Assessed by self-evaluation. None of the six is an independent audit, and none of them runs an assistive technology.

01

Colour contrast, in a real browser, on every page the build produces.

Every element carrying its own visible text is measured against the ground it actually sits on, with every translucent layer between it and the page composited down first. The floor is 4.5:1, or 3:1 where the text is large or large and bold, as WCAG 1.4.3 sets it. It runs over every page the build produces, not a chosen list, so a page cannot be missed by accident of which list it landed in.

The controls it must pass first
Fixed arithmetic that cannot move — black on white must come out at 21.00, white on white at 1.00, #767676 on white at 4.54 — and an element that is below the floor, injected into a real page, which must be caught. A failure of either aborts the run rather than reporting a pass.
Where it stops
One state per page: loaded and settled, at one width, with nothing hovered, focused or open. Text painted over an image or a gradient is measured against the element’s own background colour, which for gradient-backed text is not what is behind it, so that case is excluded rather than guessed at.

02

The page with its scripts taken away.

Sections of this site reveal themselves as you reach them. Done carelessly, that is how a reader without JavaScript gets an empty page. So every animated section is required to arrive — and then the same assertion is run again on the page with its scripts stripped out, where it has to fail. A check that passes both ways is not measuring the script; it is measuring nothing.

What it establishes
That the arrival is real, and that the finished state is what the markup gives you when no script runs at all.
Where it stops
It proves a section arrives. It does not prove the section is legible, correctly ordered, or worth reading.

03

Controls that are driven, not read.

A browser is opened, focus is put on a real control, and the page has to react: the readout has to change, the values on this page’s bench have to be numbers rather than placeholders, and the focus ring on the control has to be a genuine outline at least one pixel wide rather than an outline switched off.

What it establishes
That named controls work when operated, rather than existing in the markup.
Where it stops
A handful of controls on a handful of pages, not every control on every page. The rest of the keyboard route is check 06.

04

A phone width that is actually a phone width.

A headless browser asked for a 390-pixel window on Windows quietly gives you 518 and reports 390, which leaves every phone breakpoint below that width untested while looking tested. The viewport is set through the browser’s own protocol instead, so 390 means 390. It checks that the page does not scroll sideways and that the header still offers a way to reach the navigation.

Where it stops
One width and one browser engine. It is not a test of every phone, and it says nothing about text scaled up by the reader.

05

Nothing fetched from anybody else.

This site once served its type from a font network, which handed every visitor’s address to two other companies before they reached the sentence promising it did not. The type is served from here now. Every page the build produces is refused if it names a known third-party host, and the reading on this page goes further: it resolves every script, stylesheet, font, image, frame and media source in the document against this origin and counts anything that is not ours.

Where it stops
The build check matches a list of known hosts, so it is a net with a known mesh rather than a proof. The live reading on this page is the stronger of the two, and it only ever reads this page.

06

A person with a keyboard and no mouse.

The route through the page is walked with the Tab key, forwards and then backwards, and every stop is looked at: is there a ring, what colour is it, and does the order make sense. The walk through this page, with its measurements, is the next section.

Where it stops
It is run by somebody who can see the screen. Every question it answers is about what an outline looks like, and not one of them is about whether a reader who cannot see the layout can tell what the thing under that outline does. That question needs an assistive technology and a person using one, and it is the first entry in the known limitations at the top of this page.

Which claim rests on which.

The nine claims at the top of this page, against the three ways a claim here can be established. Move the pointer over the map, or put the keyboard into it and use the arrow keys, and the line underneath names the cell you are on. Read 2026-09-07.

A machine that watches every change is a different kind of assurance from a person who looked once. This says which one you are being handed.
Claim Checked automatically, every change Computed in your browser, here Measured by hand, on a date
i · Landmarks and a skip link no automatic check landmarks counted live all 24 pages parsed
ii · Heading order, one h1 one h1 enforced on the pages we compose; order is not checked in the build order read live all 24 pages parsed
iii · Keyboard operability a few named controls driven not computable here route walked, both ways
iv · Visible focus outlines one ring on this page must be real stops counted, not rings every stop, with ratios
v · Labelled form fields no automatic check not computed here all 24 pages parsed
vi · AA colour contrast every page, every change whole-page sweep specimen B, three grounds
vii · Alt text on every image no automatic check counted live, and plantable all 24 pages parsed
viii · Reduced motion no automatic check read against your setting both shared sheets read
ix · No off-domain asset every page, every change every sub-resource resolved not needed

Nothing selected. Move the pointer over the map, or put the keyboard into it and use the arrow keys, and this line names the cell you are on.

Four of the nine have no automatic check at all. They hold because somebody measured them by hand, on a date printed beside them. That is a weaker guarantee than the rows with a machine on them, and the difference is worth knowing before you take any of it on trust.

Section five

Using this site without a mouse

A keyboard reader does not take in a page. They have the one element the browser has decided is focused, and they get to it by pressing a key thirty times. So the only questions that matter are whether that element is visibly marked, whether the route goes where it says, and whether it comes back. This section answers all three, for this page and for every page a signed-out reader can reach.

Door for everything in this section. A keyboard walk with real key presses through the built pages, at 1440×900 and at a true 390×780, on 2026-09-07. Ratios are the WCAG 2.1 relative-luminance formula over the composited pixels, from a calculator checked against black-on-white 21.000, white-on-white 1.000 and #767676-on-white 4.542 before any reading here was kept.

01

The route through this page, walked with the Tab key and then walked backwards

Every stop on this page was reached with the Tab key, in order, and then reached again backwards with Shift and Tab. The route is complete — it never stalls, forks, or leaves you somewhere you cannot get out of — it is reversible, compared stop by stop rather than counted, and not one stop lacked a visible focus indicator at the moment the keyboard reached it. The same walk was made at 1440 pixels and at a true 390.

No total is printed here on purpose. The number of stops on a page changes the moment anybody edits it, including by writing about it, so a figure typed into this paragraph would be stale before it was read. The bench above counts the reachable controls on this page live, in your browser, while you are looking at it. That count is the honest one.

A walk is a stronger statement than a count of focusable elements, and it is a different one. A count comes from a selector, and a selector cannot see a handler that swallows the key. This was driven.

The three controls that make this checkable, and what each one had to catch

A check that cannot fail is worse than no check, so each of these was run a second time against a page with a defect planted in it, and had to fail there.

A trap
A button that cancels the Tab key, planted at the top of the content. The walk stops dead on it and names it. Without the plant: no trap anywhere on the page.
A one-way door
A control that throws focus somewhere else when it is reached on the way back. The forward route and the reversed backward route stop matching and the comparison reports not reversible. Without the plant: reversible.
A ring that is not there
An element with its outline switched off, measured alongside one with a black outline and one with a white outline on white. The instrument has to report all three differently before any reading is kept. Against this page: no stop without a ring.

02

An instrument with nothing to report until you press a key

A focus ring does not exist while a page is sitting still, which is why an automated check that looks at a page at rest can never see one. Put the keyboard on either control below — Tab to it, or Shift and Tab back to it — and the gauge reads the indicator that actually appeared: what drew it, how wide, in what colour, against the ground it was drawn on, and whether it clears the 3:1 that WCAG 2.1 SC 1.4.11 Non-text Contrast (Level AA) asks of it.

The dial restyles the field. Three of its four settings are real: two are copied declaration-for-declaration out of stylesheets this site ships, and the third is what the browser draws when no rule of ours selects the field at all. The fourth is a deliberately broken specimen with its outline switched off, the only one anywhere on this site, and it is here so that the instrument can be caught. Turn the dial to it and the gauge should report that there is nothing to measure. If it reports a number there instead, the instrument is wrong, and the readings in this section should not be believed until it is fixed. That is what a control is for, and it is the only reason a failing setting is on the dial at all.

A button with no rule of ours at all — on this page the inherited sheet still catches it, and on the thirteen pages we compose it would not

Subject nothing yet

Drawn by

Ring

Ground

Against 3:1

This gauge has taken no reading. It cannot take one on its own — nothing here runs on load, on scroll or on a timer. Move the keyboard onto the field or the button beside it.

There is one thing the gauge will not put a number on: a ring the browser drew itself. Chromium's default is painted in two tones so that it stays visible on any ground, and one of those two colours is not a measurement of it. An instrument that answers every question is not more useful than one that says which question it cannot answer.

03

A focus ring has to survive a high-contrast theme

When a reader turns on a high-contrast mode, the system repaints the page: border colours are forced to its own palette and box-shadows are dropped entirely. A focus treatment built out of a border colour and a soft halo is therefore not weakened in that mode — it is discarded. An outline is the one focus property a forced palette keeps and recolours instead of throwing away.

That was not argued here, it was photographed. A field was captured unfocused and then focused by a real Tab press, in normal colours and again in forced colours, and the two images compared pixel by pixel. In forced colours, a focus rule built from a border and a shadow produced byte-for-byte the same pixels as a rule that did nothing at all: everything it drew was gone, and outside the field’s own border box zero pixels changed when the keyboard arrived.

Every focus indicator on the sign-in, sign-up and password pages is drawn with an outline now, at 5.403:1 against the ground it sits on, against a 3:1 floor. It is not transitioned, so it is at full contrast on the first frame it exists — measured on arrival and after settling, 5.403 both times. Re-walked on pages built from the corrected sources: no stop on any page a signed-out reader can reach was left without a ring.

Door: real key presses in a driven browser, 2026-09-07, with the text caret and the field’s own transitions suppressed first — both of them had made the first run of this comparison report a difference in every cell, including the one built to show none. Forced colours here is the browser’s own emulation with its default palette, not a real reader’s theme, so what it establishes is the shape of the failure and not the exact appearance for any particular person.

04

Two different things draw the rings on this site, and both of them are visible

On the eleven pages adopted from the old site, a general rule in the inherited stylesheet draws a 2 pixel outline on links, buttons, inputs, selects and text areas — 3.276:1 against the ground it is drawn on, against a 3:1 floor. On the thirteen pages this project composes there is no equivalent general rule, so Chromium’s own focus ring stands. That ring is deliberate, two-tone and visible, and it is the reason the claim at the top of this page says never switched off, and never invisible rather than promising that every ring is one we drew.

Re-taken 2026-09-07 by focusing every focusable stop on every one of the twenty-four built pages in a driven browser and reading the outline the browser actually computed: 314 stops on 13 pages take the browser’s own ring, and every one of the thirteen pages that draws its own has at least one. Not one stop anywhere had no indicator at all. The tightest ring drawn by a rule, once it has settled, is 3.075:1 against a 3:1 floor, on the support page.

The discriminator is the computed outline-style: the browser’s own ring computes auto and a ring drawn by a rule computes solid. Two pages of the twenty-four send a signed-out reader to the log-in page, so what was measured on them is the log-in page; a third keeps its form hidden until it has a token, so its two fields are correctly out of the route. A report of nothing wrong is only worth something once you know something looked, which is why the walk is written down here rather than summarised as a pass.

05

A ring that is invisible for a quarter of a second, and the one line that fixes it

The inherited stylesheet gives the button in the closing band a transition with a duration and no property list, which means every animatable property — and outline-color is animatable. Its starting value is the element’s own text colour, and the text on that button is white. On the pages where the band is dark that costs nothing. On the three where the band is repainted to the page’s own white, the focus ring fades in from invisible: 1.000:1 for 250ms, settling to 3.276:1.

On this page it is fixed. Naming the one property that should transition stops the outline animating, and the button now takes a 4.735:1 ring on the first frame it exists — measured on arrival and once settled, the same number both times. Tab to the button at the bottom of this page and it is there instantly. The privacy page and the terms page still fade, they are styled by files this page does not own, and they are the fourth entry in the known limitations at the top.

A focus indicator is a thing that happens in time, and most measurement treats a page as a photograph. The gauge above takes both readings for that reason — on arrival and once settled — and publishes both, because either one alone would be a true number under a caption wider than itself.

06

The menu does close on Escape, and it drops your focus on the floor

Driven at a true 390 pixel viewport with real key presses: the menu button is the second tab stop on the page, Enter opens it, its expanded state goes to true, Escape closes it, and the expanded state goes back to false. That much holds.

Where it leaves you is the problem. Press Escape while focus is inside the open menu and the menu becomes hidden underneath it, so the browser has nowhere to put focus and hands it to the document body. The next Tab does not return to the button you opened — it resumes below the header, with no ring anywhere in between to explain what happened. For a reader who cannot see the layout, an Escape that works and then abandons you is worse than one that does nothing. The remedy is to send focus back to the button that opened the menu. It is the third entry in the known limitations at the top of this page and it is not fixed.

One thing that is right, and it is the half that usually goes wrong: with the menu shut, its links are out of the tab order, because it is hidden with visibility rather than moved off screen. A keyboard reader at phone width never lands inside a menu that is not open.

07

What a keyboard tells you, and what it cannot

  • A keyboard test run by somebody who can see the screen is not the test that matters most. Every check here asked whether an outline existed and what colour it was. Not one asked whether a reader could tell, from that outline, what the thing under it does. That question needs an assistive technology and a person using one, and it is the first entry in the known limitations at the top of this page.
  • The forced-colours readings are an emulation — the browser’s own mode with its default palette, not a real high-contrast theme with a real reader’s colours.
  • Two pages were not walked. The account page and the downloads page send a signed-out reader to the log-in page, so the keyboard never reaches their fields.
  • Focus is one state a page can be in. Hover is another, active is another, an error message appearing is another, and each has its own contrast and its own moment. This section measured the one it is named after.

Section six

Telling us it is broken, and what happens then

Everything above this was found by the people who build this site. That is the weakness of any self-assessment, and the only repair for it is a report from somebody who is not us. This section is about making that as easy as we can: the routes back, a report you can take with you already filled in, and a plain account of what happens to what you send — including the three places where it can still go wrong.

First: the routes back

There are two, and the second one is the one to use if the first is the thing that is broken for you.

Route one

The support form

Three fields and a button. Tell us the page, what you were trying to do, and what happened instead. It needs JavaScript to send: with scripting switched off it cannot reach us, and station 03 below says so plainly rather than leaving you to find out.

Open the support form

Route two

A telephone number

It reaches a person. If the form is closed to you for any reason at all — including because it is the defect you are reporting — this is the route that works.

(843) 809‑9884

Not yet

No email address yet

There is no email address, issue tracker, chat or postal address on this site, and no accessibility contact separate from the general one. An address is the obvious thing missing, and until there is one the telephone number is the route that works without a form.

Second: something to take with you

The most common reason a defect goes unfixed is not malice and not indifference. It is that the report says this page does not work for me and there is no way back from that to a line of code. So this is the one thing on this site that hands you something to keep: a report, already written, with the questions we would otherwise have to come back and ask you filled in.

Nothing here is sent anywhere. There is no form element in this section, no submit button, no request, and no storage. The facts below are read out of your own browser at the moment you look at them, put in a box for you to read, and forgotten when you close the tab. If you copy it, you decide where it goes. That claim was measured the same way the bench above measures this page: the network log for this page, after using every control here, shows zero requests to any origin but this one.

What kind of problem is it?

Picking one changes the first line of the report and adds the two or three questions that particular kind of defect always needs answered. Picking none is fine; the box is already filled in when you get here. Once you type anything into the box the page stops rewriting it — your words win, and it says so rather than eating them.

Not copied yet. The button uses your browser’s clipboard; if it cannot, it will select the text instead and say so.

Then send it by whichever route is open to you: the support form, or (843) 809‑9884. If the form is the one that is broken for you, use the number — and say that it was. A report about the reporting route is the most useful one we can get.

Third: what happens to what you send

Seven stations, written short. The rail runs from the first to the sixth and then stops, and the gap at the bottom is not a design flourish — it is station 07, and it is the part we cannot yet promise.

  1. Station 01

    You fill in three fields

    Your name, an address we can reply to, and what happened. Every field on that form carries a real label bound to it, and the panel beside it shows you the record your words are about to become before you send them. The optional telephone box is not stored, and the support page says so.

  2. Station 02

    The page checks it, and announces what it finds

    If something is missing you are told in words, in a paragraph marked as a live region, so the message is announced when it arrives rather than sitting silently on the screen. That is the correct pattern for an error a reader cannot see.

  3. Station 03

    With JavaScript switched off, the form cannot send

    A live defect, stated rather than hidden. The form is submitted by script. With scripting off, the browser posts the page to itself, reaches no service, comes back with the fields empty and shows no error of any kind. Nothing tells you the report did not go.

    Until that is fixed, the telephone number above is the route that works without scripting. Read from the built pages and from the script that handles the form, 2026-09-07.

  4. Station 04

    It crosses the wire to this domain and no other

    Your name, your address and your message, posted to an endpoint on this site. Nothing is sent to a third party, which is the same claim the ninth item at the top of this page makes about every asset on it, and the bench above measures it live.

  5. Station 05

    It becomes one row in one table

    Your name, your address, your message, and the moment it arrived. There is no ticket number, no reference and no status, and the support page says that too. What you typed is escaped on the way in, which is the right thing to do to text that will later be shown on a screen.

  6. Station 06

    If that write fails, the confirmation you see is the same one

    A second live defect, and the same rule applies: better said than hidden. A message that was stored and a message that was lost look identical from where you are standing. That is a defensible choice for a contact form, because it keeps our database problem from becoming your problem. It is not a defensible one for a bug report, where the whole value is that somebody receives it.

    Read from the handler that receives the message, 2026-09-07. If your report matters, the telephone number is the route with a person on the end of it.

  7. Station 07

    And this is where the rail stops: nothing reads that table on a schedule

    The third live defect, and the reason there is no reply time on this page. The row is written and then nothing in our software goes and gets it. There is no inbox, no queue, no alert and no screen that shows it; it is read by somebody opening the database by hand, or it is not read. So we will not print a service level, a target, or a named person, because none of those would be true yet.

    Until that is fixed, the telephone number is the route with a person on the end of it. Read from the source of the service that receives the message, 2026-09-07: the table is created and written to, and nothing anywhere reads it back. Writing that down here is not a substitute for fixing it, and it is not meant to be one.

Last: what this section cannot promise

  • No assistive technology was used anywhere on this page. Not a screen reader, not a switch, not voice control, not a magnifier. Everything above is arithmetic about pixels, a record of which keys did what, and a reading of source code. None of it is a statement about a person, and it is the first entry in the known limitations at the top of this page.
  • Stations 03 to 07 are read from source, not driven against the running service. Reading a handler is not the same as watching it run. Where the running service differs from what we read, those stations are wrong, and a report telling us so would be welcome.
  • This site still has no independent audit, and nothing in this section is one.

One page can measure itself in front of you, and that is what this one does. What it cannot do is tell us whether any of it helped. That takes one message, by either route above, and it is the report we would rather have than any number printed here.

Questions

Ask us anything about your data.

A person reads it, not a queue.

Contact us