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.
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.
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.
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.
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.
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.
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.
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.
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
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
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
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
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
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
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
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
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 white8.42:1 — this ink on the panel7.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.
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
Subjectnothing 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.
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.
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.
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.
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.
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.
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.
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.
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.
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.