{
  "schemaVersion": 1,
  "date": "2026-10-26",
  "status": "Évaluation technique partielle — conformité complète non déterminée",
  "scope": "Vitrine publique et démonstration fictive dans le navigateur uniquement",
  "notAConformanceCertification": true,
  "target": "WCAG 2.2 niveaux A et AA",
  "reference": "https://www.w3.org/TR/WCAG22/",
  "methodology": {
    "automated": "axe-core 4.13.0 : toutes sévérités A/AA ; Playwright, quatre moteurs ou profils",
    "keyboard": "Actions clavier réelles pilotées par Playwright ; pas une séance de lecture vocale",
    "reflow": "320 pixels CSS, tailles de texte calculées réellement doublées ; six parcours avec espacements WCAG 1.4.12",
    "inspection": "Code, captures et géométrie des formulaires, menus et photos ; corrections canoniques de design",
    "video": "Métadonnées sans piste audio ; revue visuelle de 30 images espacées de cinq secondes et comparaison aux neuf séquences textuelles, sans prétendre une écoute humaine exhaustive.",
    "languageAuthoring": "Langue déclarée par l’auteur, sans détection automatique. Les passages enrichis conservent lang, les liens et les styles dans le modèle, le rendu et le brouillon enregistré. Contrôle de saisie, héritage explicite et historique de modification testés."
  },
  "scopeCounts": {
    "publicPages": 26,
    "demoViews": 22,
    "roles": [
      "famille",
      "enseignant",
      "direction"
    ],
    "axeAnalyses": 280
  },
  "browsers": {
    "Chromium": "156.0.8078.4",
    "Firefox": "157.0",
    "WebKit": "27.2",
    "mobile": "Profil Pixel 7 avec Chromium 156.0.8078.4, pas un téléphone physique"
  },
  "results": {
    "node": {
      "tests": 104,
      "failed": 0
    },
    "browser": {
      "scenarios": 756,
      "initialPassed": 724,
      "initialFailed": 8,
      "targetedRerunPassed": 8,
      "remainingFailures": 0,
      "flaky": 0,
      "explanation": "Deux attentes de test corrigées, quatre projets chacune : exclusion des labels volontairement masqués du clipping visible (noms accessibles vérifiés), et reprise d’un brouillon par la liste après annulation immédiate. Les assertions de contenu restent exactes.",
      "finalAccessibilityRerun": {
        "tests": 268,
        "initialPassed": 264,
        "initialFailed": 4,
        "targetedCorrectionPassed": 4,
        "remainingFailures": 0,
        "flaky": 0,
        "reason": "Reprise complète après ajout du référentiel au pied de page et description vidéo visible. Le lien de la page Accessibilité elle-même portait aria-current et avait échappé à l’ajout du libellé : HTML corrigé, puis les quatre projets passent sans modification des assertions."
      },
      "initialSuiteScenarios": 732,
      "additionalVideoDescriptionTests": {
        "tests": 8,
        "failed": 0,
        "scope": "Deux pages, quatre projets : ouverture au clavier, texte visible et réellement doublé à 320 px, défilement jusqu’à la dernière séquence, fermeture et retour du focus.",
        "finalRun": "Huit cas vidéo et quatre reprises de la page accessibilité après ajout des référentiels : 12 réussites, aucun échec."
      },
      "languageAuthoring": {
        "newTests": 16,
        "existingComposerTests": 16,
        "failed": 0,
        "flaky": 0,
        "keyboardActionsRerun": 4,
        "scope": "Quatre projets : langue explicite de sélection ou paragraphe ; noms français et code BCP47 avancé ; styles/liens/espaces conservés ; annuler/rétablir ; enregistrement et réouverture ; héritage et langue non déterminée ; refus des codes malformés ; dialogue 320 px/texte 200 %, Tab jusqu’aux actions et retour du focus."
      },
      "finalAccessibilityPageEditorialRerun": {
        "tests": 4,
        "failures": 0,
        "scope": "Page dédiée après les précisions sur la méthode web, les langues des champs simples et la structure PDF ; quatre projets, clavier, liens, 320 px et texte 200 %."
      },
      "consolidation": "756 scénarios uniques, identifiés par fichier, titre et projet navigateur. Les résultats initiaux sont complétés uniquement par les reprises du même scénario et les nouveaux cas ; tous ont un dernier résultat réussi. Ce bilan ne représente pas une nouvelle exécution intégrale après chaque correction."
    },
    "axe": {
      "analyses": 280,
      "violations": 0,
      "incompleteRuleOccurrences": {
        "aria-valid-attr-value": 132,
        "color-contrast": 157,
        "video-caption": 12
      },
      "reviewedIncompleteTargets": 69,
      "reviewedContrastTargets": 66,
      "review": "Les 66 cibles de contraste passent après calcul des couches réellement affichées, dont les huit cibles de description vidéo. Les 132 signalements ARIA concernent deux popups dont les cibles uniques, ouverture/fermeture et clavier sont vérifiés. Les anciens signalements aria-prohibited-attr sont corrigés. Les 12 signalements video-caption concernent le même MP4 sans piste audio.",
      "remainingUnreviewedTargets": 0,
      "contrastMethod": "Couleurs calculées, fond opaque effectif ou bornes des stops du dégradé ; quadrillage inclus jusqu’au croisement des deux couches blanches à 4 %, voile photo composé sur image blanche au pire cas. Les SVG décoratifs du closing utilisent le même violet que leur fond. La visibilité et le réagencement sont vérifiés séparément.",
      "reviewedMatrixAnalyses": 280,
      "includedVideoDescriptionAnalyses": 8,
      "languageDialogSupplement": {
        "analyses": 12,
        "violations": 0,
        "incompleteOccurrences": 12,
        "uniqueReviewedTargets": 3,
        "unreviewedTargets": 0,
        "review": "Le select focalisé présente un trait inférieur de 2 px, tandis que son texte reste #262236 sur blanc (contraste 15.39:1). À 200 % et après défilement vers les actions, le titre et l’aide sortent normalement de la zone visible ; ils sont entièrement visibles en haut, sans alerte sur les quatre projets. Les commandes finales restent accessibles au clavier et visibles."
      }
    }
  },
  "design": {
    "version": "0.1.24",
    "commit": "088208340675f2965f08f2c1c4ea81504658dadf",
    "scopeNote": "Le lot général utilisait 0.1.20 ; 0.1.21 ajoute des variables sombres natives sans effet web, puis 0.1.22 rend la description vidéo visible et défilante. Avec 0.1.22, 104 tests Node passent et 268 scénarios d’accessibilité sont validés (264 au premier passage, quatre reprises après correction du libellé du pied de page Accessibilité). Le pin 0.1.23 modifie uniquement la navigation Symfony : les styles consommés par la vitrine et la démonstration sont identiques à 0.1.22 ; l’intégration est contrôlée séparément. Le pin final 0.1.24 corrige uniquement le compteur de commentaires Symfony et les métadonnées de version ; les ressources exécutées par la vitrine et la démonstration sont identiques à 0.1.23.",
    "integrationCheck": {
      "nodeTests": 104,
      "failed": 0
    }
  },
  "fixes": [
    "Lien de saut focalisable sur toutes les pages publiques",
    "Conversation défilante accessible au clavier",
    "Préférence persistée par profil : 10, 30, 60 ou 120 secondes avant envoi",
    "Réagencement des cartes, aperçus, éditeurs et fenêtres à 320 px avec texte à 200 %",
    "Contrastes des métadonnées et des champs corrigés dans le design canonique",
    "Page dédiée et lien accessibilité dans tous les pieds de page",
    "Rôles accessibles ajoutés aux exemples de réaction et de rédaction",
    "Description textuelle de la vidéo visible dans un volet accessible au clavier, défilant avec texte agrandi",
    "Pieds de page : statut d’évaluation partielle et objectif WCAG 2.2 AA séparés, lisibles à 320 px avec texte doublé",
    "Choix de langue explicite pour les passages riches, conservé à l’enregistrement, à la réouverture et lors des changements de mise en forme"
  ],
  "evidenceDigests": {
    "browser-final.json": "4e925eb00382817b34d3f9ca18105b30d11a16555481bb28db26e4e49df674dc",
    "browser-test-corrections.json": "9ee19f1ce331bc5474dde7dffb7cc4b5757046623e37cef71b2a8bf0afad6588",
    "check-design21.log": "9c743ab0341d0648aabb0508c3b9cb509d0df1953a71029e41d6ae9da82d9251",
    "audit-final.json": "40082edd8346e46b73904addbcb714cac3b5ad84c2aad4eb4336a66e15f638c0",
    "incomplete-review-final.json": "c59fa5d9f2c43862dff554b0ec79ca2de232c2dcf3f4fe802fbe0793fa88dd39",
    "video-tracks.json": "a6667dbe4233fae236289b44e7f24aa1f6e588db188e8799fd2f7df818f03a92",
    "check-final-report.log": "e6002c6043ce342d950f71a45087591dd371392c8b1fb8d7148bf468587fefe7",
    "check-design22.log": "230288a09958d2c26a04a78630f9d32bfe498dccf8724fb4a70d2479d35330db",
    "video-description-final.json": "6ef214a80be720b49b6cd577d7d75f721786a0ca1a7a1287c4a76bbc503de46c",
    "video-transcript-review.json": "5a6f6916ef91ae3e0a2ae3d4990b77d186f5ff744f4854dc5ec249c8443c913a",
    "video-description-review.json": "d5e34f2124e6745259016f97985b4e84c8f90d6abae6160d59c7bff30f497f26",
    "video-incomplete-review.json": "81e87942946957973dada51dc383abcd6ff1becaa23cdaa42d6439e4f6ce5a7f",
    "build-final-public-copy.log": "683f9b9cbd3c1a625d11ab300ae3bc0a97a64039dca2579e84ff573997ff21d0",
    "audit-footer-final.json": "b0b885f7faff9b2e7528f1611c11ff2a41813e4cccda49d8e2ac69ddb79a119b",
    "audit-footer-correction.json": "f778c1cf998a208f68bd95e3783338fea74a22cfb46516dece67393f2be49add",
    "audit-footer-consolidated.json": "a0241a5e3f14a113458434c07858ec4d80510c5eba38c16581d2a6dbc85d2e02",
    "incomplete-footer-final.json": "8f6f3f93aa7bc592efcd4dcd2d6001451b613dd226592c58806b3132296404ea",
    "check-footer-final.log": "4235d0d312d6dfc70b5b947008a1db335cb9d67811a0272ef3887752a95e8304",
    "footer-capture-metrics.json": "a4070f9dcc6959da8165fc467cac55c5c2ea672476403662e8e3a6a51c535ac3",
    "check-design23.log": "424f852e4981510805dec9663e7353e32cffc6b05cf18a923cb029860552eb3e",
    "language-check.log": "0d98b0df75074d07ca7d4837e06be75231ea806f289e456e38a66651adff688b",
    "language-final.json": "f0922f0027c99395b599a241fc67946917ce347df907536f482df20abaedd639",
    "language-keyboard-final.json": "48238d69c2b0659c9d2d52b12e47a7cb5ea080a1d95aae0fa113f8a2a90baeef",
    "language-dialog-incomplete-review.json": "5200a7205368d3584ca00eb2537ac7c246dbc2e783e66c3487b0f5213c261376",
    "language-dialog-incomplete.json": "4f0357955e9876469da6b7766b5eb561c8ebe4408795a978327342647d07ab65",
    "check-design24.log": "e2417f658bca211ee2053af8baedd202696f6113d44c24e2fb52d246349e7881",
    "page-final.json": "40c8d323b52d95ce1b5092fe0c6980d28fccffa8a9ff009618f0231e4cf00e80",
    "browser-consolidated-final.json": "2153604a4ae5c60c62f292ec74a20fb7a1e78a75ea9c7f1a5967781a673a3d99"
  },
  "statusLegend": {
    "verified_in_scope": "Les vérifications décrites passent dans le périmètre observé, sans attestation globale.",
    "partial": "Une partie du critère est contrôlée ; les limites sont explicites.",
    "not_applicable_observed": "La situation concernée n’est pas présente dans le périmètre observé.",
    "not_evaluated": "Aucune preuve suffisante pour conclure."
  },
  "criteria": [
    {
      "criterion": "1.1.1",
      "level": "A",
      "status": "partial",
      "evidence": "Axe, alternatives des photos et noms des boutons contrôlés dans les états examinés.",
      "limits": "La pertinence de chaque future photo/document ne peut être déduite des fixtures."
    },
    {
      "criterion": "1.2.1",
      "level": "A",
      "status": "partial",
      "evidence": "Vidéo silencieuse accompagnée de neuf séquences textuelles visibles. Trente images espacées de cinq secondes ont été examinées : les fonctions essentielles observées sont couvertes. Huit parcours vérifient le volet au clavier, à 320 px avec texte doublé, sur quatre projets.",
      "limits": "Revue par échantillonnage visuel ; chaque image de la vidéo n’a pas été comparée à la description."
    },
    {
      "criterion": "1.2.2",
      "level": "A",
      "status": "not_applicable_observed",
      "evidence": "Le fichier MP4 actuel comporte uniquement une piste vidéo, aucune piste audio ; vérification de ses métadonnées ISO BMFF. Le signalement axe video-caption est donc non applicable au contenu sonore absent.",
      "limits": "Tout futur média sonore doit être évalué séparément."
    },
    {
      "criterion": "1.2.3",
      "level": "A",
      "status": "not_applicable_observed",
      "evidence": "La vidéo de présentation ne comporte aucune piste audio et ne constitue donc pas un média synchronisé. Son alternative vidéo seule est examinée au titre de 1.2.1.",
      "limits": "Tout futur média combinant son et image devra être évalué séparément."
    },
    {
      "criterion": "1.2.4",
      "level": "AA",
      "status": "not_applicable_observed",
      "evidence": "Aucun contenu audiovisuel diffusé en direct dans le périmètre observé.",
      "limits": "Cette observation ne couvre pas de futurs médias."
    },
    {
      "criterion": "1.2.5",
      "level": "AA",
      "status": "not_applicable_observed",
      "evidence": "Aucun média synchronisé avec piste sonore dans le périmètre public examiné.",
      "limits": "La vidéo silencieuse relève de l’alternative vidéo seule ; futurs médias à vérifier."
    },
    {
      "criterion": "1.3.1",
      "level": "A",
      "status": "partial",
      "evidence": "280 analyses axe, titres, groupes, noms et relations. Rôles de deux exemples visuels corrigés ; toutes les cibles aria-controls des fenêtres existent une seule fois.",
      "limits": "La restitution du sens et de la structure avec les lecteurs d’écran réels n’est pas intégralement vérifiée."
    },
    {
      "criterion": "1.3.2",
      "level": "A",
      "status": "partial",
      "evidence": "Ordre clavier titre → texte → mise en forme ; navigation dans les menus et fenêtres vérifiée.",
      "limits": "L’ordre de lecture de tout contenu arbitraire n’a pas été vérifié avec lecteur d’écran."
    },
    {
      "criterion": "1.3.3",
      "level": "A",
      "status": "partial",
      "evidence": "Actions des formulaires examinés indiquées par des libellés textuels et erreurs associées.",
      "limits": "Pas d’audit éditorial exhaustif de toutes les instructions et médias."
    },
    {
      "criterion": "1.3.4",
      "level": "AA",
      "status": "verified_in_scope",
      "evidence": "Visionneuse testée en 390×844 et 844×390 ; aucune orientation verrouillée dans le code web.",
      "limits": "Pas d’essai sur tous les appareils physiques."
    },
    {
      "criterion": "1.3.5",
      "level": "AA",
      "status": "verified_in_scope",
      "evidence": "Contact : autocomplete name, email, organization et tel ; labels et saisie clavier testés.",
      "limits": "Les champs de démonstration fictifs ne constituent pas un parcours d’inscription réel."
    },
    {
      "criterion": "1.4.1",
      "level": "A",
      "status": "partial",
      "evidence": "Sélections des onglets et boutons exposées avec texte et état ARIA ; erreurs textuelles.",
      "limits": "Aucune simulation exhaustive de tous les troubles de perception des couleurs."
    },
    {
      "criterion": "1.4.2",
      "level": "A",
      "status": "not_applicable_observed",
      "evidence": "Aucun son automatique dans les pages examinées ; vidéo silencieuse lancée explicitement.",
      "limits": "Médias futurs exclus."
    },
    {
      "criterion": "1.4.3",
      "level": "AA",
      "status": "verified_in_scope",
      "evidence": "280 analyses axe et 66 cibles dédupliquées de contraste examinées sur les quatre moteurs ou profils. Les couleurs calculées et couches réelles respectent les seuils ; dégradés, quadrillage et voiles photo inclus.",
      "limits": "Les contenus futurs ou téléversés ne sont pas couverts ; aucune conformité globale n’est déduite de ce résultat."
    },
    {
      "criterion": "1.4.4",
      "level": "AA",
      "status": "verified_in_scope",
      "evidence": "Texte réellement doublé via tailles calculées sur 26 pages, 22 vues et fenêtres ; contrôles présents et utilisables.",
      "limits": "Ce test ne simule pas tous les réglages de zoom natifs des systèmes."
    },
    {
      "criterion": "1.4.5",
      "level": "AA",
      "status": "partial",
      "evidence": "Titres, formulaires, navigation et actions utilisent du texte HTML ; logos sont des marques.",
      "limits": "Pas d’inventaire visuel exhaustif du texte contenu dans toutes les images et vidéos."
    },
    {
      "criterion": "1.4.10",
      "level": "AA",
      "status": "verified_in_scope",
      "evidence": "Largeur 320 pixels, texte doublé, six états ouverts ; aucun débordement horizontal du document ni des fenêtres.",
      "limits": "Les futures données longues et fichiers ajoutés par les écoles sont exclus."
    },
    {
      "criterion": "1.4.11",
      "level": "AA",
      "status": "partial",
      "evidence": "Focus et contrôles des composants examinés contrôlés par tests et design canonique.",
      "limits": "Pas de mesure manuelle exhaustive de chaque combinaison de bordure, icône et arrière-plan."
    },
    {
      "criterion": "1.4.12",
      "level": "AA",
      "status": "verified_in_scope",
      "evidence": "Espacements ligne 1,5, mots 0,16em, lettres 0,12em, paragraphes 2em sur six parcours publics/édition ; aucun texte visible rogné.",
      "limits": "Les labels volontairement masqués restent associés aux noms accessibles et ne sont pas traités comme texte visible."
    },
    {
      "criterion": "1.4.13",
      "level": "AA",
      "status": "verified_in_scope",
      "evidence": "Infobulles des tarifs utilisables au clavier ; fermeture Échap ; maintien pendant interaction testé.",
      "limits": "Périmètre limité aux infobulles actuellement présentes."
    },
    {
      "criterion": "2.1.1",
      "level": "A",
      "status": "partial",
      "evidence": "Menus, onglets, fenêtres, photos, conversation, commentaires, formulaires et réglage du délai parcourus au clavier.",
      "limits": "Pas de parcours exhaustif de chaque combinaison d’action avec une technologie d’assistance réelle."
    },
    {
      "criterion": "2.1.2",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Échap et retour du focus testés dans menus, fenêtre de réinitialisation, vidéo, photos et demandes.",
      "limits": "Le chrome natif du navigateur peut recevoir le focus aux limites de ses fenêtres."
    },
    {
      "criterion": "2.1.4",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Navigation photo par flèches uniquement dans la fenêtre ; onglets par flèches/Début/Fin ciblés.",
      "limits": "Pas de raccourci global à caractère simple identifié dans les états examinés."
    },
    {
      "criterion": "2.2.1",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Préférence 10/30/60/120 secondes avant action ; annulation encore possible après 11 secondes avec choix 120 ; échéance acceptée immuable.",
      "limits": "Démonstration sans authentification ; les délais du site privé sont évalués dans son rapport distinct."
    },
    {
      "criterion": "2.2.2",
      "level": "A",
      "status": "partial",
      "evidence": "Vidéo démarrée explicitement avec commandes ; animations de menu brèves et préférence de mouvement réduit testées.",
      "limits": "Pas d’audit temporel spécialisé de tous les contenus visuels futurs."
    },
    {
      "criterion": "2.3.1",
      "level": "A",
      "status": "partial",
      "evidence": "Aucun effet clignotant intentionnel identifié dans les interfaces examinées.",
      "limits": "Aucune analyse instrumentée des seuils de flash de tous les médias."
    },
    {
      "criterion": "2.4.1",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Lien Aller au contenu focalise réellement main sur les 26 pages ; cible tabindex=-1 corrigée.",
      "limits": "Le contenu futur doit conserver ces points d’entrée."
    },
    {
      "criterion": "2.4.2",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Pages publiques avec titre document et h1 ; tests SEO et navigation applicables passés.",
      "limits": "Les titres de données créées ultérieurement sont hors périmètre."
    },
    {
      "criterion": "2.4.3",
      "level": "A",
      "status": "partial",
      "evidence": "Ordre d’édition et retour aux déclencheurs contrôlés ; conversation défilante maintenant focalisable.",
      "limits": "Toute combinaison de contenu dynamique n’a pas été parcourue manuellement."
    },
    {
      "criterion": "2.4.4",
      "level": "A",
      "status": "partial",
      "evidence": "Noms accessibles et liens de contact/footer vérifiés ; absence de violation axe dans les états contrôlés.",
      "limits": "L’intelligibilité de chaque lien éditorial n’est pas évaluée exhaustivement."
    },
    {
      "criterion": "2.4.5",
      "level": "AA",
      "status": "verified_in_scope",
      "evidence": "Navigation principale et pied de page proposent plusieurs accès aux pages publiques ; sitemap généré testé.",
      "limits": "Les étapes internes d’un formulaire ne constituent pas des pages indépendantes."
    },
    {
      "criterion": "2.4.6",
      "level": "AA",
      "status": "partial",
      "evidence": "Un h1 public par page ; champs requis, instructions, type, date et heure nommés ; erreurs associées.",
      "limits": "Pas d’audit rédactionnel exhaustif de tous les titres fournis par des utilisateurs."
    },
    {
      "criterion": "2.4.7",
      "level": "AA",
      "status": "partial",
      "evidence": "Focus visible des actions principales mesuré et inspecté dans les captures ; retour focus testé.",
      "limits": "Mode contraste forcé et focus de tous les contrôles système non couverts intégralement."
    },
    {
      "criterion": "2.4.11",
      "level": "AA",
      "status": "partial",
      "evidence": "Champs restaurés après annulation entièrement dans le viewport ; commandes photo visibles à 320 px ; menus et fenêtres contrôlés.",
      "limits": "Pas de validation exhaustive de chaque focus à tous les niveaux de zoom natif."
    },
    {
      "criterion": "2.5.1",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Navigation des photos et actions possibles avec boutons simples, sans geste multipoint obligatoire.",
      "limits": "Les gestes système ne sont pas évalués."
    },
    {
      "criterion": "2.5.2",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Visionneuse : glisser ne ferme pas ; boutons conservés ; clics de marge distingués de l’image.",
      "limits": "La couverture ne remplace pas un audit manuel de chaque pointeur sur appareils physiques."
    },
    {
      "criterion": "2.5.3",
      "level": "A",
      "status": "partial",
      "evidence": "Noms accessibles des actions/champs comparés aux libellés dans tests et axe.",
      "limits": "Commande vocale réelle non testée."
    },
    {
      "criterion": "2.5.4",
      "level": "A",
      "status": "not_applicable_observed",
      "evidence": "Aucune action ne dépend d’un mouvement de l’appareil dans le périmètre observé.",
      "limits": "Les gestes du système d’exploitation sont exclus."
    },
    {
      "criterion": "2.5.7",
      "level": "AA",
      "status": "verified_in_scope",
      "evidence": "Photos accessibles par boutons précédent/suivant et fichier choisi avec contrôle natif ; pas de glisser obligatoire identifié.",
      "limits": "Autres interfaces ajoutées ultérieurement à examiner."
    },
    {
      "criterion": "2.5.8",
      "level": "AA",
      "status": "partial",
      "evidence": "Commandes photo et annulation mesurées à 44 px ; réagencement et noms contrôlés.",
      "limits": "Pas de mesure géométrique exhaustive de chaque cible et de chaque exception de lien en ligne."
    },
    {
      "criterion": "3.1.1",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Attribut lang=fr vérifié pour les 26 pages et par axe.",
      "limits": "Contenu scolaire ultérieur exclu."
    },
    {
      "criterion": "3.1.2",
      "level": "AA",
      "status": "partial",
      "evidence": "Interface française ; langue de sélection/paragraphe déclarable dans l’éditeur riche, rendue en lang et conservée avec styles/liens, undo et réouverture. Seize nouveaux cas passent sur quatre projets.",
      "limits": "L’auteur doit déclarer les passages dans une autre langue. Pas de détection arbitraire ni d’inventaire complet des langues des contenus historiques, PDF et champs libres."
    },
    {
      "criterion": "3.2.1",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Focus clavier des menus, onglets, champs et photos sans envoi ni changement de contexte automatique.",
      "limits": "Périmètre des interactions automatisées listées."
    },
    {
      "criterion": "3.2.2",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Changer type/date/audience ne publie pas ; réglage du délai informe de son effet sur les prochains envois.",
      "limits": "La démonstration ne réalise aucune opération sur une école réelle."
    },
    {
      "criterion": "3.2.3",
      "level": "AA",
      "status": "verified_in_scope",
      "evidence": "En-tête, navigation et footer identiques sur les 26 pages, liens vérifiés.",
      "limits": "Les applications natives ont leur propre navigation évaluée séparément."
    },
    {
      "criterion": "3.2.4",
      "level": "AA",
      "status": "partial",
      "evidence": "Contrôles réutilisés et libellés cohérents dans les états examinés.",
      "limits": "Pas de revue humaine exhaustive de toute la terminologie."
    },
    {
      "criterion": "3.2.6",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Liens aide/contact/accessibilité présents au pied de chaque page et dans la démonstration.",
      "limits": "Les pages privées sont couvertes par leur rapport distinct."
    },
    {
      "criterion": "3.3.1",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Contact : erreurs serveur associées en texte ; publication invalide conservée ; demande sans réponse annoncée.",
      "limits": "Aucune soumission réelle de contact dans l’audit navigateur."
    },
    {
      "criterion": "3.3.2",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Labels, champs requis/facultatifs, délais, dates et instructions contrôlés sur les formulaires examinés.",
      "limits": "Les futurs formulaires doivent être évalués séparément."
    },
    {
      "criterion": "3.3.3",
      "level": "AA",
      "status": "partial",
      "evidence": "Erreurs de champs, de réseau et de dates indiquées ; saisie conservée pour correction.",
      "limits": "La pertinence de toutes les suggestions possibles côté service réel n’a pas été auditée."
    },
    {
      "criterion": "3.3.4",
      "level": "AA",
      "status": "partial",
      "evidence": "Annulation des envois fictifs, confirmation de réinitialisation, conservation des brouillons testées.",
      "limits": "Pas d’opération juridique ou financière réelle ; tous les scénarios de suppression ne sont pas attestés conformes."
    },
    {
      "criterion": "3.3.7",
      "level": "A",
      "status": "verified_in_scope",
      "evidence": "Saisie préservée après erreur et rechargement ; retour d’annulation conserve les brouillons concurrents.",
      "limits": "Périmètre des formulaires publics et de la démonstration ; authentification privée distincte."
    },
    {
      "criterion": "3.3.8",
      "level": "AA",
      "status": "not_applicable_observed",
      "evidence": "La vitrine et la démonstration n’authentifient pas l’utilisateur ; les rôles sont des fixtures.",
      "limits": "Aucune conclusion sur la connexion réelle : voir rapport de l’application privée."
    },
    {
      "criterion": "4.1.2",
      "level": "A",
      "status": "partial",
      "evidence": "280 analyses axe sans violation ; deux rôles corrigés, cibles des fenêtres validées, contrôles nommés et conversation focalisable. Aucune alerte ARIA incomplete n’est laissée sans revue.",
      "limits": "La restitution et les annonces avec les lecteurs d’écran réels restent à valider intégralement."
    },
    {
      "criterion": "4.1.3",
      "level": "AA",
      "status": "partial",
      "evidence": "Erreurs, envois et préférence de délai exposent status/alert ; succès contact seulement après réponse réelle simulée.",
      "limits": "La prononciation et l’ordre d’annonce par tous les lecteurs d’écran ne sont pas vérifiés."
    }
  ],
  "limits": [
    "Pas de taux RGAA ni d’ACR/VPAT complet ; les 55 critères ne sont pas tous attestés conformes.",
    "Lecteurs d’écran vocaux réels, commande vocale et toutes les variantes de zoom/contraste natifs non intégralement évalués.",
    "Données fictives uniquement ; aucune session d’école réelle ou publication personnelle consultée.",
    "Application privée et Android ont des rapports distincts.",
    "Contenus téléversés par des utilisateurs, documents, photos et futurs médias à vérifier individuellement."
  ],
  "contact": {
    "email": "support@courderecre.com",
    "url": "/contact/?intent=question",
    "phone": "+33186042876"
  },
  "reviewedComponentContrasts": [
    {
      "component": "Boutons de dégradé",
      "minimumRatio": 4.78,
      "threshold": 4.5
    },
    {
      "component": "Encart inclus, texte blanc avec quadrillage",
      "minimumRatio": 5.61,
      "threshold": 4.5
    },
    {
      "component": "Encart inclus, grands titres menthe avec quadrillage",
      "minimumRatio": 4.42,
      "threshold": 3
    },
    {
      "component": "Métadonnées sur blanc",
      "minimumRatio": 5.64,
      "threshold": 4.5
    },
    {
      "component": "Actions corail, texte blanc",
      "minimumRatio": 4.74,
      "threshold": 4.5
    },
    {
      "component": "Compteur de photo sur voile à 80 %, cas blanc maximal",
      "minimumRatio": 9.95,
      "threshold": 4.5
    },
    {
      "component": "Numéros des miniatures, cas blanc maximal",
      "minimumRatio": 6.44,
      "threshold": 4.5
    },
    {
      "component": "Description textuelle visible de la vidéo",
      "minimumRatio": 14.384,
      "threshold": 4.5
    }
  ],
  "videoReview": {
    "visualSamples": 30,
    "intervalSeconds": 5,
    "transcriptSequences": 9,
    "conclusion": "Les fonctions essentielles des trente images examinées sont couvertes par la description textuelle.",
    "limits": "Échantillonnage visuel, pas une écoute humaine ni une vérification image par image de toute la vidéo."
  }
}
