Aller au contenu principal

Accessibilité — couverture RGAA et checklist de tests manuels

Ce document complète la stratégie d'accessibilité (docs/adr/0016-accessibility-strategy.md, ADR 0016) : il dit ce que les outils vérifient, ce qu'ils ne voient pas, et comment tester le reste à la main, gratuitement. Ce n'est pas une déclaration de conformité : le site n'y est pas soumis et ne publie aucun niveau (voir l'ADR). « Aucune violation détectée par axe » ne veut pas dire « conforme ».

Référentiel : WCAG 2.2 AA, avec le RGAA 4.1.2 (aligné WCAG 2.1) comme grille de lecture. Les nouveautés de WCAG 2.2 que le RGAA 4.1.2 ne couvre pas (focus non masqué, taille des cibles…) sont suivies à part, dans la checklist de CLAUDE.md.

Ce qui est automatisé

CoucheQuandCe qu'elle voitCe qu'elle ne voit pas
Lint jsx-a11y (preset strict)pré-commit, vrp lint, CI (bloquant)attributs et rôles ARIA invalides, alt manquant, gestionnaires sans clavier, liens vides, tabindex positifle rendu réel : contraste, ordre de focus, landmarks calculés
axe-core sur le site servi (vrp a11y, job CI a11y, non bloquant)CI sur chaque PR ; en local après build + startnoms accessibles, landmarks, ordre des titres, lang, cibles, zones défilantes sans clavier, contraste du texte HTMLle texte et les tracés des schémas SVG, le focus réel, le lecteur d'écran, la pertinence des textes

Pages couvertes par axe : accueil à 1280 px et à 320 px (menu fermé puis ouvert), liste du blog, un article, l'index de /docs et toutes les pages de /docs, la 404. Le menu mobile ouvert est testé ; de l'administration, seules /admin/login et /admin/error le sont (la liste et l'éditeur demandent une session LinkedIn).

Couverture RGAA 4.1.2 par thème

ThèmeAutomatiqueLecture du codeTest manuelSur ce site
1. Imagesalt-text (lint), axe image-altportrait informatif avec alt, avatars décoratifs en alt="", icônes aria-hidden, schémas en role="img" + aria-labelpertinence des alternatives (1.3), description des schémas lue au lecteur d'écranapplicable
2. Cadres—aucun iframe—non applicable (à revoir si un embed apparaît)
3. Couleursaxe color-contrast (sauf SVG)tokens de app/globals.css calculés3.1 (information par la couleur seule), contrastes au survol et au focus, texte des schémasapplicable
4. Multimédia—aucun audio ni vidéo—non applicable
5. Tableauxaxe (en-têtes de cellules)un tableau Markdown dans la documentation, rendu avec <th> par components/markdown.tsxen-têtes de colonnes annoncés au lecteur d'écranapplicable (/docs seulement)
6. Liensanchor-is-valid (lint), axe link-nameintitulés explicites, liens à icône seule nommésintitulés compris hors contexte (liste des liens du lecteur d'écran) ; liens target="_blank" des profils LinkedIn sans mention de la nouvelle fenêtre : à arbitrerapplicable
7. Scriptsrègles de gestionnaires (lint), axe aria-*menu mobile (aria-expanded, Échap, focus rendu au bouton), bouton d'impression, zones défilantes focalisablesmenu et schémas au clavier et au lecteur d'écranapplicable (peu de JavaScript)
8. Éléments obligatoiresaxe html-has-lang, document-title, valid-langlang="fr", un titre par routepertinence des titres (8.6), validité HTML (8.2, validateur du W3C) ; changements de langue (8.7) : quelques intitulés de poste en anglais, sans lang="en" : à arbitrerapplicable
9. Structurationaxe heading-order, landmark-*, listplan des titres, repères banner / main / contentinfo, listes réelles (tags, parcours, stack)plan des titres et repères navigués au lecteur d'écranapplicable
10. Présentationaxe target-sizefocus global visible, prefers-reduced-motion, cibles ≥ 24 pxzoom 200 % texte seul (10.4), reflow à 320 px (10.11), espacement du texte (10.12), focus visible partout (10.7)applicable
11. Formulairesaxe labelaucun formulaire public (le contact est un lien mailto:)l'éditeur d'administration (labels, erreurs annoncées, focus)public : non applicable ; administration : applicable, corrigée sur un banc d'essai, jamais auditée connectée
12. Navigationaxe bypass, skip-link, landmark-uniquelien d'évitement, navigations nomméesordre de tabulation (12.8), pièges au clavier (12.9) ; deux systèmes de navigation (12.1) : à arbitrerapplicable
13. Consultation—aucune ouverture de fenêtre sans action, aucun contenu en mouvement, aucun geste complexeorientation de l'écran (13.9)applicable ; le CV passe par l'impression du navigateur, pas de fichier à télécharger

Les mentions « à arbitrer » ne sont pas des défauts confirmés : ce sont des points où la lecture du RGAA laisse une marge, à trancher en connaissance de cause (par exemple en testant au lecteur d'écran la prononciation des intitulés en anglais).

Checklist de tests manuels

À faire au fil des évolutions, à son rythme, sans date limite — surtout après un changement de structure, de navigation ou de composant interactif. Environ deux heures pour tout passer une fois.

Outils gratuits utilisés : NVDA (lecteur d'écran, Windows), Firefox et Chrome avec leurs outils de développement, Colour Contrast Analyser (ou le sélecteur de couleur des DevTools), le validateur HTML du W3C.

1. Clavier seul (souris débranchée)

Parcourir la page avec Tab, Maj+Tab, Entrée, Espace, Échap et les flèches.

2. Zoom 200 % et 400 %, reflow

3. Lecteur d'écran (NVDA, avec Firefox ou Chrome)

4. Contraste

À mesurer, car axe ne le voit pas partout :

5. Impression du CV

Ctrl+P, ou DevTools → Rendering → « Emulate CSS media type: print ».

6. Mouvement réduit

DevTools → Rendering → « Emulate CSS media feature prefers-reduced-motion » → reduce. Un clic sur un lien d'ancre doit sauter à la destination, sans défilement animé.

7. HTML

Passer le HTML rendu d'une page (« Afficher le code source ») dans le validateur du W3C (RGAA 8.2).

Ce que les outils ne voient pas

Écarts ouverts

Tenir ce document à jour