Accessibility Statement
The standard we build against, and the failures we know about.
Effective date: 4 September 2026 Last revised: 4 September 2026 Applies to: the website and web application at courselite.org, and the CourseLite browser extension.
What this statement is, and what it is not
This is not a conformance claim.
CourseLite does not claim to conform to WCAG 2.1 Level AA, to Level A, to Section 508, or to EN 301 549. It has not been audited by a third party, it has not been tested with a screen reader, and an internal audit found real failures that are not fixed yet. Publishing a badge on top of that would be worse than publishing nothing.
What this statement is: the target we build against, the failures we already know about, and how to tell us about one we missed.
We would rather you knew the honest state of it before you rely on it.
1. The target
CourseLite is built against WCAG 2.1 Level AA. That is the floor the product's own design system sets for itself, and it is the standard the remediation work below is measured against.
Aiming at a standard is not meeting it. Section 3 is the difference.
2. How we know
An internal audit was carried out on 3 September 2026 against the shipped stylesheet, in a real headless browser, at three viewport widths, across 37 screenshots and six preview harnesses. Colour contrast was computed — sRGB relative luminance per WCAG 2.1, composited against the real painted background — rather than judged by eye. The full report, with the measurements and the evidence images, is at docs/release/accessibility-audit.md.
What that audit did not cover, stated plainly so its coverage is not assumed:
- No real screen reader. No VoiceOver, NVDA or JAWS session. Everything about announcement is inferred from the DOM and ARIA, which predicts but does not prove what somebody actually hears.
- No live API. No real course import, chat answer, generation, quota refusal or checkout was exercised.
- Not the real extension in a real Canvas page — only the demo recreation, which shares the panel component but not the injection.
- Not the dashboard or the course page, which need a signed-in account with real data. Those were read from source only.
- Not Windows High Contrast / forced-colors mode, which matters here because the focus indicator is drawn with
box-shadow, andbox-shadowis dropped in forced-colors. - Not zoom to 200% or 400% reflow.
3. Known failures
These are real, they were measured, and none of them is fixed at the time of writing.
| What fails | Which criterion | What it means for you |
|---|---|---|
| The primary button on every screen has no visible keyboard focus. A styling conflict means the focus ring is overwritten and never paints. | 2.4.7 Focus Visible (AA) | Navigating by keyboard, you cannot see where you are on the main action of most screens. In the onboarding tour — which is a modal overlay — this affects 5 of its 7 stops. |
| Where the focus ring does paint, its contrast is 1.52:1 against white, and 1.33:1 against the dark rail. The requirement is 3:1. | 1.4.11 Non-text Contrast (AA) | The indicator that does exist is too faint to be reliably visible. |
| The brand red on white text measures 3.98:1. The requirement for normal-size text is 4.5:1. | 1.4.3 Contrast (Minimum) (AA) | Text on primary buttons and badges is below the contrast floor. |
| One dialog family does not trap Tab and does not restore focus when it closes. | 2.4.3 Focus Order (A) | Keyboard focus can leave an open dialog and land behind it, and does not return to where you were. |
| A light grey is used as body text at 2.56:1. | 1.4.3 Contrast (Minimum) (AA) | Secondary text is hard to read, particularly in bright light or with reduced contrast sensitivity. |
| There is no skip link. | 2.4.1 Bypass Blocks (A) | Every page must be tabbed through from the top; there is no way to jump straight to the main content. |
| Some interactive targets are smaller than 44×44 px, including some at 14×14. | 2.5.5 Target Size (AAA), and the product's own 44px rule | Harder to hit accurately with a finger, a tremor, or an imprecise pointer. |
| Import progress is not announced. | 4.1.3 Status Messages (AA) | A screen-reader user is not told which stage an import has reached. |
| A decorative mock-up skips a heading level (h1 → h3). | 1.3.1 Info and Relationships (A) | The heading outline is misleading in one place. |
4. What already works
Said because a statement that lists only failures is as misleading as one that lists none.
- Real landmarks and semantic structure:
<main>, a labelled<nav>, real lists, one<h1>per page. - Form labelling. Every field sampled had a real accessible name — 28
for-bound labels, 88 ARIA labels, 27 visually-hidden labels. - Errors are announced. 23 alert roles, 14 status roles, 13 live regions.
- Dialogs carry the right roles and are labelled, and Escape closes them.
prefers-reduced-motionis honoured, verified by emulation. If your system asks for less motion, CourseLite gives you less motion.prefers-reduced-transparencyis honoured, verified the same way.- Nothing depends on colour alone to convey meaning, and nothing pointer-only lacks a keyboard route.
5. Things about CourseLite that are not accessibility failures but affect you
- Course material comes from your own course, and we do not control its accessibility. If your instructor posted a scanned PDF with no text layer, CourseLite transcribes what it can and may still miss things. A course document that is inaccessible in Canvas is not made accessible by importing it.
- Generated text is not checked for reading level or plain-language quality. See the AI Output Disclaimer.
- The browser extension runs inside your university's Canvas page. Anything inaccessible about that page is that page's, not ours; the CourseLite panel is ours.
6. Telling us about a problem
Email support@courselite.org. Useful things to include, none of them required: the page or address, what you were trying to do, your browser, and your assistive technology and its version. A description in your own words is enough.
What we commit to. We will read every report, reply to it, and tell you what we are going to do — including if the answer is that we cannot fix it soon. We are not going to publish a response-time guarantee we have never measured; what we will not do is leave you without an answer.
If you cannot use CourseLite because of one of the failures above and you need the same information another way, ask, and we will find a way to get it to you.
What this statement is. It is written to be honest about what works and what does not, rather than to satisfy any particular regulatory regime. Several laws — the EU Accessibility Act among them — impose specific obligations on consumer digital services, including a named enforcement contact and a formal complaints route with a deadline. This statement claims conformance with none of them, and section 7 says what it does claim instead.
7. Where this stands
| Standard we build against | WCAG 2.1 Level AA |
| Conformance claimed | None |
| Independent audit | None |
| Screen reader testing | None |
| Internal audit | 3 September 2026, accessibility-audit.md |
| Known failures outstanding | The 9 in Section 3 |
| Feedback | support@courselite.org |
This statement will be updated when the failures in Section 3 are fixed, and not before. Fixing the code and then editing the statement is the only order that keeps it true.