diff --git a/TODO.md b/TODO.md index 9d4435a..09ab492 100644 --- a/TODO.md +++ b/TODO.md @@ -919,3 +919,416 @@ Once the above is applied, the following classes become deletable (element name | `.admin-account-status__row` | `div` inside `
` | | `.admin-account-status__label` | `dt` | | `.admin-danger-zone__description` | `p` | + +--- + +## Accessibility audit (2026-03-26) + +WCAG 2.1 AA is the baseline. Issues are grouped by criterion number for traceability. +Current state: **zero ARIA attributes, zero skip links, zero focus-visible styles, zero +`prefers-reduced-motion` guards** anywhere in the live codebase. + +--- + +### 1 — Perceivable + +#### 1.1.1 Non-text content (alt text) + +- [ ] **Home card images use the thesis title as `alt`** — `alt=""` is a + reasonable fallback, but the title alone provides no context about what the image depicts. + Prefer `"Couverture — [titre] par [auteurs]"` for cover images, or `""` (empty) for purely + decorative banners where the caption below already carries all the text information. + For gradient placeholder cards there is no `` at all — correct, no alt needed on a + CSS gradient div. + +- [ ] **TFE page file images use the raw filename as `alt`** — `alt=""`. + A filename like `a3f8bc12.jpg` is meaningless to a screen reader user. Use the thesis title + or a stored description field. If the `description` column in `thesis_files` is populated, + that should be the alt text; fall back to the thesis title. + +- [ ] **Search bar SVG icon has no `aria-hidden`** — the magnifying glass SVG in + `search-bar.php` is purely decorative (the `` carries all meaning). Add + `aria-hidden="true"` and `focusable="false"` to the SVG. + +- [ ] **Admin `