Aller au contenu
BDU Cauri, accueilv0.1.0
Démarrer

Accessibilité

Cauri est conçu pour respecter les contrastes du niveau AA et pour rester utilisable au clavier. Cette page dit ce qui est garanti, comment c’est contrôlé, et ce qui reste à votre charge.

Ce que Cauri garantit

  • Contrastes AA sur les couples de la charte. Texte courant, boutons, liens et fonds doux respectent le rapport minimal de 4,5:1 du WCAG 2.x pour le texte normal.
  • Composants navigables au clavier. Les boutons, liens, champs, menus déroulants, onglets, accordéons, modales et panneaux latéraux se parcourent avec Tab, les flèches, Entrée, Espace et Échap.
  • Focus visible. Les éléments interactifs affichent un indicateur de focus quand on les atteint au clavier.
  • Mouvement réduit. Les transitions sont coupées quand le système demande de réduire les animations.

Comment les contrastes sont contrôlés

Deux contrôles complémentaires, que vous pouvez relancer à chaque changement de charte.

Comment les contrastes sont contrôlés
ContrôleCe qu’il vérifieComment le lancer
Test automatiséSeize couples de couleurs (texte sur blanc, blanc sur bleu ou vert, aux états normal, survol et actif, liens, vert sur vert doux…). Les valeurs sont lues dans scss/_tokens.scss : modifier la charte relance le contrôle avec les nouvelles couleurs. Le seuil est de 4,5:1.npm test à la racine du paquet (affiche le rapport de chaque couple).
Audit sur le renduPour chaque texte visible d’une page, compare la couleur calculée au fond effectif. Seuil de 4,5:1, ou 3:1 pour le gros texte. Ignore les éléments désactivés.Coller test/contrast-audit.browser.js dans la console du navigateur sur une page de la documentation.

Une couleur à ne jamais utiliser pour du texte

Le vert de marque (#6CA942, variable --cauri-green-brand) n’atteint que 2,8:1 sur fond blanc. Il sert aux filets et aux accents décoratifs, comme le trait sous l’en-tête. Pour du texte, des boutons ou des coches, utilisez le vert accessible #387A1B (5,3:1 sur blanc). Voir la page Couleurs.

Si vous ajoutez une couleur au thème, contrôlez-la : les classes text-bg-* choisissent automatiquement un texte blanc ou noir lisible sur le fond, ce qui évite d’associer couleur et fond à la main.

Clavier et focus

Cauri s’appuie sur des éléments HTML natifs (button, a, input) : leur comportement au clavier vient du navigateur. Le JavaScript ajoute ce que HTML ne fait pas seul :

  • la modale et le panneau latéral gardent le focus à l’intérieur tant qu’ils sont ouverts, se ferment avec Échap et rendent le focus au bouton d’origine ;
  • les menus déroulants se parcourent avec les flèches haut et bas ;
  • les onglets et le carrousel répondent aux flèches gauche et droite ;
  • les infobulles s’ouvrent aussi au focus, à condition d’être posées sur un élément focalisable (bouton, lien, champ).

Si vous retirez un contour de focus, remplacez-le par un équivalent visible. L’aide Anneau de focus propose un style prêt à l’emploi.

Mouvement réduit

Quand l’utilisateur active « Réduire les animations » dans son système, la feuille de style désactive les transitions des composants (fondu de la modale, glissement du menu mobile, repli de l’accordéon…). Le défilement doux de la page n’est actif que si l’utilisateur n’a pas exprimé cette préférence. Les composants BDU suivent la même règle : la carte produit ne se soulève plus au survol.

Ce comportement dépend de l’option Sass $enable-reduced-motion, activée par défaut (voir Options Sass). Ne la désactivez pas.

Une limite : Cauri n’interrompt pas l’avance automatique d’un carrousel. Si vous en utilisez un avec data-bs-ride="carousel", prévoyez un bouton pause visible.

Rôles et attributs ARIA des composants JavaScript

Une partie des attributs ARIA est ajoutée par le script, l’autre est à écrire dans votre HTML. Les exemples de cette documentation montrent le balisage attendu.

Rôles et attributs ARIA des composants JavaScript
ComposantGéré par le scriptÀ écrire dans le HTML
Modalearia-hidden, aria-modal et role="dialog" à l’ouverture et à la fermeture ; piège à focusaria-labelledby pointant vers le titre ; tabindex="-1" sur .modal
Menu déroulantaria-expanded sur le bouton déclencheuraria-expanded="false" initial ; un vrai bouton ou lien comme déclencheur
Repli et accordéonaria-expanded sur le déclencheuraria-controls vers le panneau ; un button comme déclencheur
Ongletsaria-selected et tabindex des onglets ; flèches du clavierrole="tablist", role="tab", role="tabpanel", aria-controls, aria-labelledby
Infobulle et popoveraria-describedby vers l’infobulle ouverteUn déclencheur focalisable ; un libellé accessible si le déclencheur est une icône
Toast—role="alert" et aria-live="assertive" (ou role="status" pour un message non urgent) ; aria-atomic="true"
CarrouselBoutons de navigation et indicateurs actifsaria-label sur le carrousel, sur les indicateurs et sur chaque diapositive ; aria-current="true" sur l’indicateur actif
Bouton de fermeture—aria-label="Fermer" (le bouton n’a pas de texte visible)

Ce qui reste à votre charge

Un design system fournit des composants accessibles ; le contenu et l’assemblage dépendent de votre équipe.

Ce qui reste à votre charge
SujetÀ faire
Textes alternatifsUne image porteuse d’information a un alt qui dit ce qu’elle montre. Une image décorative a alt="". Un SVG en ligne informatif a role="img" et aria-label.
TitresUn seul h1 par page, puis une hiérarchie sans saut de niveau. Choisissez le niveau pour la structure, puis la classe h1…h6 ou fs-* pour l’aspect.
Libellés de formulaireChaque champ a un label visible et relié par for/id. Un placeholder ne remplace pas un libellé. Les messages d’erreur sont reliés au champ par aria-describedby.
Liens et boutonsUn intitulé qui se comprend hors contexte (« Voir les conditions du prêt » plutôt que « Cliquer ici »). Un lien navigue, un bouton agit.
Couleur seuleNe signalez jamais un état (erreur, succès) par la couleur seule : ajoutez un texte ou une icône avec alternative.
Languelang="fr" sur html, et lang sur les passages dans une autre langue.
Zoom et mobileVérifiez la page à 200 % de zoom et à 320 px de large, sans défilement horizontal.

Ce qui n'est pas encore vérifié

  • Pas de test avec des lecteurs d’écran. Le balisage suit les bonnes pratiques et les attributs ARIA sont en place, mais aucune vérification n’a été faite avec VoiceOver, NVDA, JAWS ou TalkBack. Testez vos parcours critiques avant la mise en production.
  • Contrastes du thème sombre. Onze couples sont contrôlés par le test automatisé, et toutes les pages de la documentation ont été auditées en thème sombre (aperçus compris). Les classes à couleur fixe (btn-outline-dark, bg-white…) ne s’y adaptent pas : voir la page Modes de couleur.
  • Pas d’audit WCAG complet. Les contrôles couvrent les contrastes des couples de la charte, pas l’ensemble des critères du WCAG. Les couleurs d’avertissement et de danger (valeurs d’origine) ne figurent pas dans le test automatisé.
  • Le contraste de l’indicateur de focus n’est pas mesuré par le test automatisé. Vérifiez-le sur vos propres fonds.
  • La charte est provisoire. Les couleurs seront confirmées par la charte officielle ; relancez npm test à ce moment-là.

Bonnes pratiques

À faire

  • Relancer npm test après tout changement de couleur de la charte.
  • Utiliser text-bg-* pour associer un fond et son texte.
  • Tester vos parcours principaux au clavier seul, sans souris.
  • Garder les libellés visibles sur les champs de formulaire.

À éviter

  • Utiliser le vert de marque #6CA942 pour du texte.
  • Supprimer le contour de focus sans le remplacer.
  • Déclencher un carrousel automatique sans bouton pause.
  • Indiquer une erreur par la couleur seule.

Accessibilité

  • Chaque bouton qui n’a pas de texte visible porte un aria-label.
  • Les infobulles ne contiennent que du texte complémentaire : l’information essentielle reste visible dans la page.
  • Les messages de toast sont annoncés avec role="alert" ou role="status".
Charte provisoire, déduite du site public de la BDU CI. Elle sera remplacée par la charte officielle.