What we checked, what works, and what does not.

The plain version

We read this website’s own code and measured it against the accessibility standard the rest of the industry uses. Most of it passes. Some of it does not, and the parts that do not are listed further down with the numbers we got.

We are not claiming this site meets that standard. We have not established that, and a page that says so without having checked is the thing this page exists instead of.

If something here is unusable for you, write to frank@tembral.com and say what you were trying to do and what stopped you. We will fix it, or we will write back and tell you why we are not going to. You will get one or the other.

What that costs you: there is no help desk, no ticket number and nobody to escalate to. One person reads that mailbox and he is the same person who writes the code, so an answer takes days rather than minutes, and if he is away it takes longer.

What this statement covers, and what it does not

This covers tembral.com — the pages you can open in a browser, including this one. Nothing else.

The iPhone app is separate software and it has not been audited. No sentence on this page says anything about it, and you should not read one as though it did. When that audit is done it gets its own statement, written the same way as this one.

The Sunday circle runs on Zoom, which is somebody else’s service. We chose it, so the choice is ours to answer for, but we cannot audit software we do not build and we are not going to describe its accessibility for it.

Two pages on this site carry a live token in the address — the one that confirms an email and the one that removes it — and are only reachable from a link in an email. Their code was read like every other page’s. Nothing on this site was opened in a browser for this assessment, and section 5 says what that costs.

The standard we measured against, and the law we are not required to meet

Three things, one sentence each, and then the part most statements leave out.

WCAG 2.2, level AA.
The Web Content Accessibility Guidelines, second version, second revision. It is a list of testable success criteria — contrast ratios, keyboard reach, form labelling, target sizes — and level AA is the middle of its three levels. It is what everything below was measured against.
EN 301 549.
The European standard for accessible information and communication technology. For a website it does not invent its own tests; it points at the same WCAG success criteria. Naming it is how you say “the European version of the same measurement”.
The European Accessibility Act.
Directive (EU) 2019/882, applying since 28 June 2025 to a range of consumer products and services, e-commerce among them. It is the law that has made pages like this common in the last year.

That Act contains an exemption for microenterprises providing services.

The exemption is written for an enterprise employing fewer than ten people whose annual turnover or balance-sheet total does not exceed two million euro. One person runs Tembral, in Amsterdam, the Netherlands. On the face of it that is the shape the exemption describes, and whether it applies in a particular case is not something we get to declare on our own website.

So read this as a voluntary statement rather than a compliance declaration. We are probably not required to publish it. We are publishing it because the people this is built for include people who need it, and because a list of measurements is more useful to them than a badge.

What works, and the mechanism that makes it work

Each of these was verified in the code rather than assumed from the design.

Text against its background, on the written pages.
Body text on these pages runs at 17.03:1 against the page ground. The smaller secondary text runs at 14.28:1, and the dimmed text and the small tracked headings run at 8.46:1. AA asks for 4.5:1. On the dark bands — the panel on the sign-up page, the deep sections of the circles page — headings run at 10.51:1 and body text at 8.13:1. The one coloured control on the site carries its label at 6.65:1.
Text renders without waiting on another company.
All eight typeface files are served from this domain, and there is no font service and no third-party stylesheet. Nothing another company controls can hold up, or restyle, the words you are reading. One counter does load from elsewhere; it draws nothing and it is loaded in a way that cannot delay the page.
Motion stops when you have asked for less of it.
All three stylesheets carry a reduced-motion rule, and the code carries five more checks of its own. Under that setting the opening on the front page does not run, the scroll reveals render finished instead of arriving, the drifting background field holds still, the page-to-page cross-fade is switched off, the breathing hairline stops, and the film behind the front page is paused on its first frame. One gap in this is named in section 4.
Reveals fail open, not closed.
Content that arrives on scroll is written so that the finished state is the default. If the browser does not support the mechanism, or the script never runs, the words are simply there. A reveal that can hide a sentence is worth less than the sentence.
A visible focus outline, on everything.
Two pixels of the site’s one accent colour, three pixels clear of the element, on every link, button, text field, select and disclosure — written once as a rule about element types rather than as a list of components, so a new control cannot be added without it. It sits at 5.33:1 against the page ground, where AA asks for 3:1.
A skip link on the pages that have something to skip.
The nine pages that carry the site navigation each carry one, and the front page carries its own. The legal pages, including this one, carry no site navigation at all — a wordmark and then the text — so there is nothing to skip past and no skip link. That is a decision, not an omission.
Headings and landmarks.
Every page has one first-level heading and a main region. On the three pages checked line by line — this system’s privacy notice, the sign-up page and the front page — the heading levels descend without skipping a level. The document declares English.
The sign-up form on /waitlist.
Both fields carry a real label tied to the field. Errors are attached to the field they belong to, and a short count of them is announced to screen-reader software. The consent tick is its own label with its own sentence, and it loads unticked. The spam trap is hidden from sight, hidden from assistive technology and taken out of the tab order, so it is not a field you can land in by accident. When you submit with something missing, focus moves to the first field that needs an answer.
Images and the film.
Every image on the site carries alternative text; the decorative ones carry an empty one so they are passed over rather than announced. The film behind the front page has no sound track at all, carries no words on screen and is hidden from assistive technology, so there is nothing in it to caption or transcribe. No recorded speech is published on this site today.
Zoom, and target sizes.
Nothing on this site blocks pinch-zoom or caps how far you can magnify it. The smallest link target on the site is 38 pixels tall — in the index at the top of a legal page — and most are 40 or 44. The AA criterion asks for 24 by 24.

What does not work yet

Thirteen findings. Each one names what it affects and what we intend to do about it. The first six are contrast, and five of those six are on the front page or in a form.

Small text on the front page is too pale. 3.06:1 and 3.45:1.
The field labels, the grey prompt text inside the boxes and the small print in the sign-up panel run at 3.06:1 against the white card. The field labels and the error sentences in the form at the foot of the front page run at 3.45:1, as does the four-item index part-way down. AA asks for 4.5:1 at these sizes. This is the worst finding on the list, because the sign-up panel is the one thing on this site a person is asked to fill in. The colour is one token used in several places and it will be darkened until it clears 4.5:1.
Text on the front page’s pale panel is too pale. 3.97:1.
On the one light section of the front page, the small tracked chips and the paragraphs inside the cards run at 3.97:1. The same token clears 4.5:1 on the dark sections, which is why it survived — it was checked on one ground and not on the other. Same fix.
The large closing sentence on the front page is nearly invisible. 1.61:1.
The oversized line near the foot of the front page is set at 1.61:1 on purpose, as a divider rather than a headline. It is a real sentence and it is correctly left in the accessibility tree, so screen-reader software reads it; it is sighted readers who cannot see it. AA asks for 3:1 even at that size. Either the contrast comes up or the sentence goes, and that is a decision about the design rather than a bug to fix quietly.
Text boxes have no visible edge. Between 1.11:1 and 1.58:1.
The two fields in the front page’s sign-up panel have no border and a fill that differs from the card behind them by 1.11:1. The field at the foot of the front page differs from its card by 1.15:1. The fields on the sign-up page have a border at 1.58:1 and a fill at 1.24:1. The criterion for the boundary of a control is 3:1, and the practical effect is that you may not be able to see where the box is until you have clicked into it. All of these need a real edge.
The tick boxes are fainter than the code intends. 1.33:1.
A darker border colour was written for the tick boxes and the round marks specifically to clear 3:1, with a comment saying so. Three lines further down the same rule sets the border again in shorthand, and the shorthand wins, so they render at 1.33:1 instead of the 6.39:1 that was intended. This is two lines swapped in a stylesheet and it is the cheapest fix on this list.
Two more pale details. 3.90:1 and 4.12:1.
The prompt text inside the fields on the sign-up page runs at 3.90:1 against its panel. One deliberately dimmed line near the foot of the circles page runs at 4.12:1 against the page ground. Both are under 4.5:1 and both come up with the same token pass.
The opening on the front page cannot be skipped.
On the first visit in a browser tab, the front page holds itself hidden behind a curtain for about five seconds while an opening plays. There is no control to skip it, pause it or stop it. It does not run at all if you have asked for reduced motion, and it does not run again in the same tab, but a person who has not set that preference and simply wants the page has to wait. It needs a way out, and until it has one it is the longest anything on this site makes you wait for content that is already loaded.
The film is stopped by script, not by the page itself.
The film behind the front page is set to play and loop in the markup, and the code pauses it when you have asked for reduced motion. That works whenever the code runs. If scripting is unavailable, the markup stands and a looping film plays for someone who has asked for less motion. It should be the markup that decides, not the script.
The close button on the sign-up panel cannot be reached with Tab.
The panel keeps focus inside itself, which is correct, but the close control sits just outside the region that is being kept, so tabbing never lands on it. The Escape key closes the panel, so this is not a trap you cannot get out of; it is a visible button that the keyboard cannot press. The control belongs inside the region.
After a successful sign-up, focus is dropped.
When the sign-up panel switches to its confirmation, the button you just pressed stops existing and focus falls back to the top of the document. If you are working by keyboard you have to travel back to where you were, and if you are listening you may not be told the message changed. The new heading should take focus.
Text sizes are fixed in pixels while the columns are not.
The seven type sizes on this site are fixed pixel values, but the widths of the columns are set relative to the browser’s own font size. So if you have made text larger in your browser settings rather than by zooming, the column gets wider and the words do not get bigger, which is the opposite of what you asked for. Browser zoom works normally and is unaffected. This is a deliberate design decision from before anyone measured it, and it is worth revisiting.
The front page has no banner or footer region.
It has a main region and a navigation region, and its sections carry no names, so software that offers to jump between the parts of a page has less to offer there than on the rest of the site. It is a thinner map, not a barrier.
Sideways overflow is hidden rather than prevented.
The page is told never to scroll sideways. That keeps the layout tidy, and it also means that if something ever is too wide — at a narrow width, or at high magnification — it is cut off rather than reachable by scrolling to it. We have not found a case where this happens, and we have not tested at the widths where it would.

What has not been tested

Everything above was established by reading this site’s source code. That puts a hard limit on what can be claimed, and here is where the limit falls.

  • No screen reader has been run against this site. Not VoiceOver, not NVDA, not JAWS, not TalkBack. The labelling and the announcements described in section 3 are correct in the code. Whether they are announced usefully, in the right order, without repetition, is unknown.
  • Nobody who uses assistive technology has tested this. No user testing of any kind has been carried out with anyone.
  • Nothing was opened in a browser for this assessment. So the layout at 320 pixels wide, the layout at 200% and 400% magnification, what happens when you override the line and letter spacing, and how the site behaves in a high-contrast mode are all unmeasured.
  • Voice control was not tested, so whether every control can be reached by speaking its visible name is unknown.
  • The iPhone app is untested and uncovered. Nothing on this page applies to it.
  • Zoom is not ours to test. The Sunday circle runs there and its accessibility is described by the company that makes it, not by us.

We would rather write this list than let a silence imply we had covered it. Nearly every item here is a thing we intend to do; none of them is a thing we have done.

How to tell us, and what happens then

One address, and it is read by the person who writes the code.

Write to frank@tembral.com. You do not have to be polite about it and you do not have to know the technical name for what went wrong. “I could not get past the box that asks for my name” is a complete report.

Four things help, if you have them:

  • The address of the page you were on.
  • What you were trying to do.
  • What stopped you, in whatever words you would use out loud.
  • What you were using — the browser and the device, and the name of any assistive software, if you use some.

What happens next:

We aim to write back within five working days. If it is something on the list in section 4, we will say so and tell you where it is in the queue. If it is something we did not know about, it goes on the list and this page changes. If we are not going to fix it, we will say that and say why, rather than leaving the message unanswered and letting you conclude it.

The cost of one person: five working days is a target and not a guarantee, there is nobody else to chase, and if he is unwell or away it will be longer. If a week passes with no reply, send the message again. It was not ignored on purpose.

When this was assessed, how, and when it is next due

Assessed on 6 September 2026. It was a self-assessment, done by reading the source code, and nobody outside has checked it.

That distinction is worth spelling out. An independent audit is somebody with no stake in the answer, using real assistive technology, in a real browser, reporting what they find. This was none of those. It was the person who wrote the site reading his own stylesheets, converting each colour to a contrast ratio by hand, and writing down what the code does. It is more than most sites of this size have done and it is less than an audit, and both halves of that are true.

Every ratio on this page was computed rather than estimated: each colour converted from its source form to sRGB, any transparency composited against what is actually behind it, then the standard relative-luminance ratio. The method is recorded in the source of this page along with the full table, so it can be re-run rather than believed.

The next assessment is due within twelve months of the date at the foot of this page, and sooner if the site changes in a way that touches something named here. When the front page changes, this page is re-checked in the same pass — it is the page most of section 4 is about.

Last updated

This page was last changed on 6 September 2026.

When a finding in section 4 is fixed, it moves to section 3 with the new number beside it. Nothing is deleted quietly.

One version, one date, no archive.