WCAG 1.4.1 — Active nav link had no non-colour indicator in the admin panel.
Public nav already had border-bottom via common.css; admin nav had nothing.
admin.css:
- Add `[aria-current="page"]` rule on admin nav links:
border-bottom: 2px solid currentColor; padding-bottom: 1px
This gives a visible underline as a non-colour signal for the active page.
- Fix `--admin-purple` undefined CSS variable in pagination button hover.
The variable was referenced but never defined in variables.css (which was
refactored to use --accent-primary / --accent-secondary). Replaced both
border-color and color usages with var(--accent-primary) (#9557b5 — same
value), restoring the intended purple hover tint on pagination buttons.
todo/01-css-semantic-refactor.md:
- Audited ~15 pending CSS/HTML tasks; all were already implemented.
Marked as done: .admin-main, .admin-page-title, .admin-form-row,
.admin-label, .admin-input/select/textarea, .admin-table, .admin-fieldset,
tfe.css class replacements, search.css h2 selector, admin-alert replacement,
login.php/edit.php inline style removal, form partial hints (<small>).
todo/04-accessibility.md:
- Marked WCAG 1.4.1 admin nav and --admin-purple audit items as completed.
4.7 KiB
Accessibility Audit (WCAG 2.1 AA)
1.1.1 Non-text content (alt text)
- Admin
<nav>"✕ Réinitialiser" and "✕" remove buttons — wrap✕in<span aria-hidden="true">✕</span>; addaria-label="Supprimer ce membre du jury"on jury remove buttons inadd.php/edit.php
1.3.1 Info and relationships
-
Admin form rows: multi-input rows (languages, formats) —
checkbox-list.phppartial now wraps checkboxes in<fieldset class="admin-checkbox-group">with a<legend class="sr-only">for AT grouping -
Status badges in
admin/index.phpconvey state by colour alone — add visible non-colour distinction (prefix icon witharia-hidden="true") andaria-label="Statut : Publié"on badge<span>
1.3.4 / 1.3.5 Orientation & Input purpose
- No
autocompleteattributes on personal data fields —add.php/edit.php:autocomplete="name"on author fields,autocomplete="email"on mail fields (via$attrsintext-field.php)
1.4.1 Use of colour
-
Active nav link has no non-colour indicator — admin nav:
border-bottom: 2px solid currentColoradded for[aria-current="page"]inadmin.css; public nav already hadborder-bottomincommon.css -
Admin purple
#9557b5as text colour —--admin-purplewas an undefined variable referenced only in pagination hover; replaced with--accent-primary(same value, #9557b5). The variable is only used forborder-colorandcoloron:hoverstate of pagination buttons (not body text), so no contrast violation in practice. Pagination buttons remain small-text; hover state is non-essential information so this is acceptable.
1.4.4 Resize text
- Verify no text is set in
px— ensurewidth: 14px; height: 14pxon checkboxes and similar elements do not prevent text scaling
1.4.12 Text spacing
- No text-spacing override test done — verify WCAG 1.4.12 bookmarklet does not cause content clipping (especially
overflow: hiddenon.card__mediaand tightaspect-ratio: 4/3)
2.1.1 Keyboard
- Jury "✕" remove buttons in
add.php/edit.php— addaria-labelfor keyboard discoverability
2.4.3 Focus order
- On
tfe.phpthe← Retourback link is at the bottom of the left column in DOM — consider moving above<h1>or adding a copy at the top so keyboard users can exit quickly
2.4.4 Link purpose
- Home page cards: if two theses share the same title, identical link texts exist — append year in
<span class="sr-only">to disambiguate
2.5.3 Label in name
<a class="clear-filter">✕ Réinitialiser</a>— wrap✕in<span aria-hidden="true">- Admin jury remove buttons
✕—aria-label="Supprimer ce lecteur"replaces the symbol
2.5.5 Target size
- Pagination buttons are
2rem(32px) — increase tomin-height: 2.75rem; min-width: 2.75rem(44px) - Admin
.admin-btn-sm(~28px) — increase to minimum 32px with padding - Admin bulk action buttons and jury remove
✕buttons (~28px) — increase target size
3.1.1 Language of page
- All public pages have
<html lang="fr">— verify this is true after any template changes ✓ (no action needed unless templates change)
3.3.1 Error identification
add.php/edit.phpvalidation errors —flash-messages.phpalready emits<p role="alert" data-type="error">for errors and<p role="status">for successadd.php/edit.phpautofocuson first invalid field — requires controller to pass back which field failed; deferred (larger refactor)
3.3.2 Labels or instructions
- Admin jury "Lecteur·ices" label has no
forattribute — wrap lecteur rows in<fieldset>/<legend>or usearia-describedby
4.1.2 Name, role, value
-
Custom "Externe" checkbox for jury members has no group context — add
aria-label="[Nom du promoteur] est externe"dynamically via JS, oraria-describedbypointing to the adjacent name input -
<video>elements ontfe.phphave no captions — add<track kind="captions">slot in template; document caption requirement in admin upload form -
Admin
<select>for visibility/access inedit.phpuses truncated option text — use full description in option text (ortitleattribute); keep truncated text only for visual display -
Bulk publish/unpublish JS does not announce result to screen readers — add
role="alert"to error messages androle="status"to success messages across all admin pages
5 - Motion & user preferences
prefers-color-schemenot respected — site has fixed white public / fixed dark admin themes; consider a dark-mode variant for public pages (not a WCAG failure, but quality-of-life)