|
| 1 | +# Charte UX & Accessibilité — Liens Morts Detector (interface admin) |
| 2 | + |
| 3 | +Cette charte décrit les conventions graphiques et d’interaction appliquées aux composants d’administration du plugin. Elle sert de référence pour la conception, l’implémentation et la revue des interfaces, y compris pour les audits d’accessibilité automatisés. |
| 4 | + |
| 5 | +## Typographies |
| 6 | + |
| 7 | +- **Famille principale** : `Inter`, avec repli sur `"Segoe UI"`, `Roboto`, puis `sans-serif` (déclaré via `--blc-admin-font-family`). |
| 8 | +- **Hiérarchie** : |
| 9 | + - Titres de sections (`h1`–`h2`) : 1.35 rem par défaut, 1.25 rem en affichage réduit (`max-width: 782px`). |
| 10 | + - Libellés secondaires et sous-titres : 0.95 rem avec couleur atténuée (`--blc-admin-text-subtle`). |
| 11 | + - Labels utilitaires (ex. métriques) : 0.85 rem, uppercase, espacement de 0.08 em. |
| 12 | + - Valeurs clés : 1.85 rem, graisse 700, ligne à 1.1. |
| 13 | +- **Accessibilité** : |
| 14 | + - Les textes doivent rester lisibles à 200 % de zoom. Les lignes sont compactes (1.3 – 1.5 selon le contexte) et l’espacement vertical est assuré par les gaps des conteneurs. |
| 15 | + - La classe `blc-accessibility--large-font` (préférences utilisateur) doit conserver une base 16 px et respecter ces proportions. |
| 16 | + |
| 17 | +## Palette de couleurs |
| 18 | + |
| 19 | +Les couleurs sont définies via des variables CSS (cf. `:root` dans `liens-morts-detector-jlg/assets/css/blc-admin-styles.css`). Les combinaisons suivantes assurent un contraste ≥ 4.5:1 pour le texte principal. |
| 20 | + |
| 21 | +| Usage | Variable(s) | Couleur | Couleur de texte associée | Ratio de contraste | |
| 22 | +| --- | --- | --- | --- | --- | |
| 23 | +| Surface principale | `--blc-admin-surface` | `#fcfcfd` | `--blc-admin-text` (`#11181c`) | 15.3:1 | |
| 24 | +| Surface secondaire | `--blc-admin-surface-subtle` | `#f5f6f8` | `--blc-admin-text` | 13.0:1 | |
| 25 | +| Texte atténué | `--blc-admin-text-subtle` | `#687076` | — | — | |
| 26 | +| Accent | `--blc-admin-accent` | dépend du thème WP | texte inversé ou bordures, jamais seul | |
| 27 | +| Statut succès | `--blc-admin-success-bg` (`#e5fbeb`) | `--blc-admin-success-text` (`#31694a`) | 5.95:1 | |
| 28 | +| Statut info | `--blc-admin-info-bg` (`#e4ecff`) | `--blc-admin-info-text` (`#3c4ae0`) | 5.46:1 | |
| 29 | +| Statut avertissement | `--blc-admin-warning-bg` (`#fff1d0`) | `--blc-admin-warning-text` (`#8a4600`) | 6.34:1 | |
| 30 | +| Statut critique | `--blc-admin-danger-bg` (`#ffe5e0`) | `--blc-admin-danger-text` (`#b02a1c`) | 5.49:1 | |
| 31 | +| Mode neutre | `--blc-admin-surface-subtle` | `--blc-admin-text` / `--blc-admin-text-subtle` | ≥ 4.6:1 | |
| 32 | + |
| 33 | +> 📝 **Note** : Les thèmes WP peuvent écraser l’accent (`--wp-admin-theme-color`). Veiller à vérifier les contrastes lorsque la charte est intégrée à un thème personnalisé. |
| 34 | +
|
| 35 | +## États d’interaction |
| 36 | + |
| 37 | +- **Repos** : cartes et résumés ont une bordure 1 px (ou 6 px à gauche pour `--accent`), une ombre légère et un fond conforme aux surfaces définies. |
| 38 | +- **Survol (`:hover`)** : translation verticale maximum de 2 px, ombre amplifiée. Ne pas modifier la couleur de fond pour éviter de dégrader le contraste. |
| 39 | +- **Focus clavier (`:focus-visible`)** : |
| 40 | + - Utiliser un contour de 2 px `outline` ou `box-shadow` basé sur `--blc-admin-accent` (ou `--blc-admin-border` en mode contraste élevé), avec rayon cohérent (`--blc-admin-radius-md`). |
| 41 | + - Le focus doit être implémenté sur les éléments interactifs (`a`, `button`, `[role="tab"]`, contrôles de formulaire). Les éléments purement informatifs ne deviennent pas focusables. |
| 42 | +- **État actif** : conserver la variation de couleur ou d’ombre existante, en veillant à ne jamais supprimer l’indicateur de focus. |
| 43 | + |
| 44 | +## Mouvements et animations |
| 45 | + |
| 46 | +- Transition standard : `var(--blc-admin-transition)` (180 ms, courbe `cubic-bezier(0.22, 1, 0.36, 1)`). |
| 47 | +- Réduction de mouvement : la classe `blc-accessibility--reduce-motion` doit désactiver transitions et animations (`transition-duration: 0.001ms`, etc.). Tout nouvel effet doit respecter cette mécanique. |
| 48 | +- Les animations doivent être discrètes (translation < 4 px, opacité) et ne pas introduire de flashs. |
| 49 | + |
| 50 | +## Composants admin clés |
| 51 | + |
| 52 | +### Résumé du tableau de bord (`.blc-dashboard-summary`) |
| 53 | + |
| 54 | +- Bloc `section` avec `aria-labelledby` pointant sur le titre `h2`. |
| 55 | +- Ajouter `aria-describedby` vers le sous-titre pour inclure le contexte dans le focus SR. |
| 56 | +- Liste non ordonnée (`ul`) avec items (`li`) affichant label, valeur et description. |
| 57 | +- Variantes (`--success`, `--info`, `--warning`, `--danger`, `--neutral`) utilisent les couleurs du tableau ci-dessus et conservent les contrastes à 4.5:1 minimum. |
| 58 | + |
| 59 | +### Cartes statistiques (`.blc-stat`) |
| 60 | + |
| 61 | +- Bouton simulé `<a>` avec `aria-label` dynamique et badge visuel `Actif` + équivalent SR. |
| 62 | +- Focus visible via halo accentué, hover avec légère translation uniquement. |
| 63 | + |
| 64 | +## Audit accessibilité axe-core |
| 65 | + |
| 66 | +1. Exporter les variables `WP_E2E_BASE_URL`, `WP_E2E_USERNAME`, `WP_E2E_PASSWORD` et (le cas échéant) `WP_E2E_STORAGE_STATE`. |
| 67 | +2. Lancer `npm run test:e2e -- --grep @a11y` pour exécuter les audits axe-core (réglages + synthèse dashboard). |
| 68 | +3. Examiner le rapport HTML généré dans `playwright-report/` en cas d’échec. |
| 69 | +4. Corriger les violations sérieuses ou critiques avant de valider la PR. |
| 70 | + |
| 71 | +## Revue de code |
| 72 | + |
| 73 | +- Vérifier la cohérence avec la présente charte (typographies, palette, focus/hover, réduction des animations). |
| 74 | +- Refuser toute régression de contraste ou suppression d’indicateur de focus. |
| 75 | +- S’assurer qu’un audit axe-core (Playwright) a été exécuté et archivé dans la PR. |
| 76 | + |
0 commit comments