- Updated 6 admin templates: add.php, edit.php, login.php, account.php,
import.php, pages-edit.php — replaced <div class="admin-submit-wrap">
with <div class="admin-form-footer">
- Updated 8 CSS selectors in admin.css:
- .admin-form-footer { margin-top/padding-top } (was .admin-submit-wrap)
- .admin-form > div:not(.admin-form-footer) grid exclusion guard (×3)
- .admin-login-box .admin-form > div:not(.admin-form-footer) overrides (×2)
- .admin-login-box .admin-form-footer compact spacing override
- No visual change; purely a semantic rename to a descriptive class name
- Also marked status-badge.php partial and WCAG 1.3.1 badge tasks as
already-done in todo/02-php-components.md and todo/04-accessibility.md
(partial + CSS were fully implemented but todo had not been updated)
4.8 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 —status-badge.phppartial emits<span aria-label="Statut : Publié"><span aria-hidden="true">● </span>Publié</span>(circle symbol is non-colour indicator); both publish and access badges implemented
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)