{
  "@context": {
    "reporter": "http://github.com/w3c/wai-wcag-em-report-tool/",
    "wcagem": "http://www.w3.org/TR/WCAG-EM/#",
    "Evaluation": "wcagem:procedure",
    "defineScope": "wcagem:step1",
    "scope": "wcagem:step1a",
    "step1b": {
      "@id": "wcagem:step1b",
      "@type": "@id"
    },
    "conformanceTarget": "step1b",
    "accessibilitySupportBaseline": "wcagem:step1c",
    "additionalEvaluationRequirements": "wcagem:step1d",
    "exploreTarget": "wcagem:step2",
    "essentialFunctionality": "wcagem:step2b",
    "pageTypeVariety": "wcagem:step2c",
    "technologiesReliedUpon": "wcagem:step2d",
    "selectSample": "wcagem:step3",
    "structuredSample": "wcagem:step3a",
    "randomSample": "wcagem:step3b",
    "Website": "wcagem:website",
    "Webpage": "wcagem:webpage",
    "auditSample": "wcagem:step4",
    "reportFindings": "wcagem:step5",
    "documentSteps": "wcagem:step5a",
    "commissioner": "wcagem:commissioner",
    "evaluator": "wcagem:evaluator",
    "evaluationSpecifics": "wcagem:step5b",
    "WCAG": "http://www.w3.org/TR/WCAG/#",
    "WCAG20": "http://www.w3.org/TR/WCAG20/#",
    "WCAG21": "http://www.w3.org/TR/WCAG21/#",
    "WAI": "http://www.w3.org/WAI/",
    "A": "WAI:WCAG2A-Conformance",
    "AA": "WAI:WCAG2AA-Conformance",
    "AAA": "WAI:WCAG2AAA-Conformance",
    "wcagVersion": "WAI:standards-guidelines/wcag/#versions",
    "reportToolVersion": "wcagem:reportToolVersion",
    "earl": "http://www.w3.org/ns/earl#",
    "Assertion": "earl:Assertion",
    "TestMode": "earl:TestMode",
    "TestCriterion": "earl:TestCriterion",
    "TestCase": "earl:TestCase",
    "TestRequirement": "earl:TestRequirement",
    "TestSubject": "earl:TestSubject",
    "TestResult": "earl:TestResult",
    "OutcomeValue": "earl:OutcomeValue",
    "Pass": "earl:Pass",
    "Fail": "earl:Fail",
    "CannotTell": "earl:CannotTell",
    "NotApplicable": "earl:NotApplicable",
    "NotTested": "earl:NotTested",
    "assertedBy": "earl:assertedBy",
    "mode": "earl:mode",
    "result": "earl:result",
    "subject": "earl:subject",
    "test": "earl:test",
    "outcome": "earl:outcome",
    "dcterms": "http://purl.org/dc/terms/",
    "title": "dcterms:title",
    "description": "dcterms:description",
    "summary": "dcterms:summary",
    "date": "dcterms:date",
    "hasPart": "dcterms:hasPart",
    "isPartOf": "dcterms:isPartOf",
    "id": "@id",
    "type": "@type",
    "language": "@language"
  },
  "language": "nl",
  "type": "Evaluation",
  "reportToolVersion": "4.1.0",
  "defineScope": {
    "id": "_:defineScope",
    "scope": {
      "id": "_:subject_1",
      "type": [
        "TestSubject",
        "Website"
      ],
      "title": "maakeencv (app.maakeencv.nl)",
      "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
    },
    "conformanceTarget": "AA",
    "wcagVersion": "2.1",
    "accessibilitySupportBaseline": "Doel: laatste twee versies van Chrome, Edge, Firefox en Safari op Windows 11, macOS, iOS en Android, met NVDA, VoiceOver en TalkBack. Getest: Chrome 155 (headless) op Windows 11.",
    "additionalEvaluationRequirements": "Ook getoetst in het Arabisch (rtl), Frans, Engels, Tigrinya, Russisch, in vier kleurthema's en op 320 CSS-px. Zie het rapport."
  },
  "exploreTarget": {
    "id": "_:exploreTarget",
    "technologiesReliedUpon": [
      "HTML",
      "CSS",
      "WAI-ARIA",
      "JavaScript",
      "SVG"
    ],
    "essentialFunctionality": "Inloggen; cv maken en downloaden; lessen met oefeningen en eindvragen; MAP (thema's, opdrachten, praktijkuren, eindgesprek); begeleiden; rapportage voor de gemeente; beheer.",
    "pageTypeVariety": "Formulieren, lijsten en tabellen, tabbladen, dialogen en lades, menu's, keuzelijsten, schuifregelaars, teksteditor, slepen, lesspeler, audio en video, grafieken, afdrukweergave, tweede inlogstap. React 18 en Vite; componenten op Radix UI."
  },
  "selectSample": {
    "id": "_:selectSample",
    "structuredSample": [],
    "randomSample": []
  },
  "auditSample": [
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:non-text-content",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Alle 70 beeldblokken in de 28 lesmodules hebben een alt-tekst (code); steekproefsgewijs naast het beeld gelegd (beroepskansen l1/l4, werknemersvaardigheden l1/l4, werkervaring-2 l1/l2): de tekst beschrijft wat er te zien is en wat ertoe doet (personen, handeling, voorwerpen). Portretten in scenario's `alt=\"\"` met de naam in de tekst ernaast (decoratief, juist). Geen naamloze knoppen, links of velden in de toegankelijkheidsboom (0 in de 114 metingen met toegankelijkheidsboom: Nederlands, Arabisch, willekeurig). Grafieken in Beheer → Statistieken hebben nu een tabel met de cijfers (\"Gegevens als tabel\", `caption` en `th`). Turnstile: het iframe heeft een titel van Cloudflare; op productie bestaan andere inlogwegen (Google, Microsoft, LinkedIn). Kanttekening (B-23, geen fout): decoratieve lucide-iconen zonder `aria-hidden` staan nog als naamloze \"image\" in de boom.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:audio-only-and-video-only-prerecorded",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "De enige louter-geluid-media zijn de voorgelezen lessen (\"Luister naar deze les\", met AI-label): een media-alternatief voor tekst die op het scherm staat, als zodanig gelabeld. Geen louter-video.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:captions-prerecorded",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Na de eindmeting vernieuwd: de uitlegvideo (werkervaring-2, les 2, \"De vier delen\", nu 85 s) heeft geen ingebrande ondertitels meer, alleen ondertitels via <track kind=\"captions\"> in elf talen, opnieuw gemaakt uit de uitgeschreven tekst en de tijdlijn van de nieuwe stem. Gecontroleerd: elke zin met spraakherkenning teruggezet naar tekst (16 van 16 woord voor woord gelijk), de tijdvakken van de ondertitels bevatten precies hun eigen zin, en in de speler staat op elk gecontroleerd moment de juiste ondertitel; geen muziek of andere relevante geluiden. Eindmeting op de vorige versie: Eén video in het product (werkervaring-2, les 2, \"De vier delen\", 64 s; S42). Ingebrande ondertitels én `<track kind=\"captions\">` in 11 talen. Tijdcodes van de VTT vergeleken met de stiltes in het geluid (ffmpeg `silencedetect`): synchroon; de tekst is gelijk aan wat er gezegd wordt; geen muziek of andere relevante geluiden. Beoordeeld met de bestanden uit de projectmap (lokaal staat de video niet in de opslag, §9).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:audio-description-or-media-alternative-prerecorded",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Na de eindmeting hersteld (R-01): de uitlegvideo \"De vier delen\" is opnieuw ingesproken; de stem zegt nu ook wat er in beeld staat (het voorbeeld van Samir: bedrijf, plaats, jaren, de twee zinnen over zijn werk, en de vergelijking \"minder goed\" en \"goed\"). De uitgeschreven tekst en de ondertitels in elf talen zijn bijgewerkt. Daarmee zit alle beeldinformatie in het geluid en is aparte audiodescriptie niet nodig. Bij de eindmeting nog niet: de video toont het uitgewerkte voorbeeld van Samir (\"Bakkerij Al-Noor · Aleppo (Syrië)\", \"2014 – 2020\", \"Bakte elke dag 300 broden.\", \"Werkte samen met twee collega's.\", \"Minder goed\"/\"Goed\"); dat staat niet in het geluid en niet in de uitgeschreven tekst onder de video (die is gelijk aan de gesproken tekst). Geen audiodescriptie.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:captions-live",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Geen live-media.",
        "outcome": {
          "id": "earl:inapplicable",
          "type": [
            "OutcomeValue",
            "NotApplicable"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:audio-description-prerecorded",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Na de eindmeting hersteld (R-01): de uitlegvideo \"De vier delen\" is opnieuw ingesproken; de stem zegt nu ook wat er in beeld staat (het voorbeeld van Samir: bedrijf, plaats, jaren, de twee zinnen over zijn werk, en de vergelijking \"minder goed\" en \"goed\"). De uitgeschreven tekst en de ondertitels in elf talen zijn bijgewerkt. Daarmee zit alle beeldinformatie in het geluid en is aparte audiodescriptie niet nodig. Bij de eindmeting nog niet: Zelfde video: geen audiodescriptie, en niet alle beeldinformatie zit in het geluid.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:info-and-relationships",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Opgelost uit B-14 en B-13: tweede stap met `h1` en `main`; één `main` in de lesspeler, editor en juridische pagina's; `dl`'s goed opgebouwd; verplichte velden met \"(verplicht)\" én `aria-required`; keuzes in \"Praktijk toevoegen\" in een `fieldset` met `legend`; grafiektabellen met `th`. axe (`list`, `definition-list`, `dlitem`, `aria-required-*`, `label`): 0 in alle rondes. Het cv-voorbeeld behoudt de naam als `h1`, binnen een benoemd gebied (\"Voorvertoning van je cv\"); de 23 miniaturen op Ontwerp zijn `aria-hidden`. Over: best-practice `heading-order` op S52/S53/S70 (een niveau overgeslagen; geen fout). Zonder schermlezer beoordeeld (boom en code).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:meaningful-sequence",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "DOM-volgorde = visuele volgorde in het Nederlands (Tab-rondes, 3.520 stappen) en in het Arabisch: de zijbalk staat nu rechts naast de inhoud, niets ligt eronder (20 schermen + W02; ). De lesspeler maakt de achtergrond `inert` (B-02). Dialogen en vellen staan aan het eind van de DOM maar de achtergrond is dan voor hulptechnologie verborgen. Zonder schermlezer beoordeeld.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:sensory-characteristics",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Alle Nederlandse teksten en alle lesteksten doorzocht op plaats, kleur, vorm en geluid (\"rechts\", \"links\", \"groene\", \"rode\", \"hiernaast\", \"het rondje\", \"de pijl\" …). Gevonden: \"hieronder/hierboven\" (volgt de leesvolgorde), \"in het voorbeeld hiernaast/ernaast\" (het voorbeeld heeft een naam), en in les 4 van Beroepskansen \"De pijl is doorgaan. Het trapje is …\" (beschrijft kaarten die ook in de tekst staan). Geen instructie die alleen op een zintuiglijke eigenschap steunt.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:orientation",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Geen `orientation`-mediaqueries; Vandaag, Deelnemers en Kaart op 640×360 liggend zonder overloop.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:identify-input-purpose",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Opgelost (B-10): naam `name`, e-mail `email`, telefoon `tel`, woonplaats `address-level2`, geboortedatum `bday`, website `url` in editor en masterprofiel; Contact `name`/`email`; inloggen `email`/`current-password`; tweede stap `one-time-code`. Geboorteplaats heeft geen woord in de HTML-lijst en valt dus niet onder 1.3.5.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:use-of-color",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Statussen staan ook als tekst (\"account actief\", \"uitgenodigd\", stap op Vandaag); afgeronde MAP-thema's verschillen ook in lichtheid (gevuld groen tegen wit, 3,77:1) en hebben een schermlezertekst (\"gedaan\"/\"nog niet\"); gekozen antwoorden in oefeningen zijn gevuld donker (niet alleen een andere tint); fouten staan in tekst met icoon; verplichte velden met \"(verplicht)\"; grafieken hebben een legenda met tekst en een tabel. axe `link-in-text-block`: 0.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:audio-control",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Geen `autoplay`; video en audio `preload=\"none\"`; voorlezen pas na een klik.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:contrast-minimum",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Na de eindmeting hersteld (R-02): de letters van afgeronde thema's en stappen staan nu wit op emerald-700 (5,5:1, was 3,8:1); in de grafieken van Beheer → Statistieken donkere as- en waardelabels (#64748b en #334155, ≥ 4,7:1). Opnieuw gemeten op S46, S59, S64 en S77s: axe 0. Eerder al: opgelost (B-08): axe `color-contrast` 0 in alle 155 metingen (drie thema's, Arabisch, 320 px). Tekst op het gekleurde verloop van inloggen/registreren in alle 13 thema's minstens 5,0:1.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:resize-text",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "200% (venster 640×450 zonder herladen): op geen enkel scherm horizontale overloop of afgekapte tekst. \"Alleen tekst 200%\" (benadering, wortel op 200%) geeft nog afkapping in inklapvakken; in Chrome bestaat die zoom niet, dus niet als fout geteld (zoals in de eerste meting).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:images-of-text",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Lestekeningen bekeken: geen ingebakken tekst (kaarten met pictogrammen, een landkaart zonder namen). Sjabloonvoorbeelden zijn HTML. Het logo is uitgezonderd. De tekst in de uitlegvideo valt onder 1.2.x.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:reflow",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Opgelost (B-12): het cv-voorbeeld in het Arabisch is op 320 px 320 px breed. Geen overloop op 320 px in de 114 metingen met de 320-px-controle (venster én telefoon; Nederlands, Arabisch, willekeurig) en in de 13 metingen van de telefoonronde, ook niet op Vandaag met de actiebalk (320/320).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:non-text-contrast",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Na de eindmeting hersteld (R-03): alle gewone keuzelijsten hebben nu dezelfde rand als de andere velden (#808080, 3,95:1). Opnieuw gemeten op S66 en S80: geen rand onder 3:1. Eerder al: opgelost: randen van tekstvelden, tekstvakken, keuzelijsten (shadcn), schakelaars, keuzerondjes en sleepgrepen ≥ 3:1 (3,78–7,58:1); focusindicator minstens **3,39:1** in alle 68 focusweergaven (standaard 3,39, februari 3,97, maart 3,49).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:text-spacing",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Na de eindmeting hersteld (R-04): vacaturetitels en namen in Beheer → Organisaties breken af in plaats van af te kappen. Opnieuw gemeten op W01 en S78 met de tekstafstand van de bookmarklet: niets meer afgekapt. Eerder al: opgelost (B-16): accountknop, werkplekkiezer, MAP-kaart, Mijn cv's.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:content-on-hover-or-focus",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Tooltips (samenvatting, omschrijving/prestaties, ATS-uitleg in de galerij) openen bij hover én focus, blijven staan als de muis erop gaat en sluiten met Esc zonder dat de focus verspringt (`losse-checks2`).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:keyboard",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Opgelost (B-18): uitleg bij samenvatting, omschrijving en prestaties is een knop; \"Upgrade naar Pro\" is een link; \"Upload foto\" is een knop; de ATS-uitleg in de galerij opent bij toetsenbordfocus. Geen klikbare elementen zonder rol (`nepknoppen`: 0). Alle processen P1–P7 met alleen het toetsenbord doorlopen; vier oefenvormen met spatie/Enter en \"Controleer\". Volgorde wijzigen zonder slepen: knoppen omhoog/omlaag. De knoppen in het woordhulp-vel zijn bereikbaar, maar pas na 43 Tab-stappen (zie 2.4.3, R-07).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:no-keyboard-trap",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "In geen enkele Tab-ronde blijft de focus hangen (datumvelden: 4 stops per veld, daarna verder); Turnstile op /login (4 stops) en /signup heen en terug met Shift+Tab; dialogen houden de focus vast en sluiten met Esc.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:character-key-shortcuts",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Alleen sneltoetsen met Ctrl/Cmd (editor, zoekpalet).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:timing-adjustable",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Geen tijdslimieten in de app; meldingen pauzeren bij hover/focus; `supabase/config.toml` zet geen `timebox`/`inactivity_timeout`. Na een verlopen sessie meldt de app \"Je bent uitgelogd … wat al was opgeslagen, staat er nog\" en de editor slaat automatisch op. De instelling op productie is niet bekeken (beperking).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:pause-stop-hide",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Opgelost (B-20): \"Hallo stilzetten\" op de eerste start (S10, Tab-stop vóór \"Begin\"). Tips op het inlogscherm wisselen elke 8 s en staan stil met \"Tips stilzetten\" (gemeten: na 9,5 s gepauzeerd dezelfde tip).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:three-flashes-or-below-threshold",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Geen flitsende inhoud; de uitlegvideo bestaat uit rustige overgangen tussen dia's (beelden om de 4 s bekeken).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:bypass-blocks",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Landmarks op elk scherm (`nav` met naam, `main`, `header`), nu ook in editor, juridische pagina's, Helpcentrum en Contact; koppen. Geen skiplink (niet vereist).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:page-titled",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Opgelost (B-03): elk scherm een eigen titel (\"Cv bewerken · maakeencv.nl\", \"Kaart van een deelnemer · …\", \"Statistieken – Beheer · …\", in de lesspeler de naam van de les), ook in ar, fr, en, ti, ru (\"تسجيل الدخول · maakeencv.nl\", \"Offres d'emploi · …\"). Tabbladen binnen één pagina (Deelnemers, Organisatie, Overzicht) delen de paginatitel; Beheer zet de tab in de titel.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:focus-order",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Na de eindmeting hersteld (R-07): het woordhulp-vel zet bij openen de focus in het vel, Tab blijft in het vel, en na Esc staat de focus weer op het woord. Opnieuw gemeten in de cv-editor (S13). Eerder al: opgelost (B-02, B-09): 0 Tab-stappen buiten de lesspeler (S24–S43, S35v–S41v); bij elk lesvenster focus op de kop; na \"Controleer\" focus op \"Opnieuw proberen\"/de volgende knop; 19 van de 20 met het toetsenbord geopende dialogen/menu's/keuzelijsten houden de focus vast en geven hem bij Esc terug aan hun opener (ook Praktijk toevoegen, Bewijsstuk, Werkervaring, Uitnodigen, Afmelden, Afspraak, Nieuwe groep); na opslaan in P5/P6 focus op de opener.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:link-purpose-in-context",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Inventaris van alle links op 88 schermen (alle S-schermen behalve S09, plus S35v–S41v en S77s; ): geen vage linknamen (\"hier\", \"lees meer\", \"bekijk\") zonder context; herhaalde links met hetzelfde woord en een ander doel (\"Eindoverzicht\" op S59/S72) staan in een rij met de naam van de deelnemer; \"Bekijken : CV Elektricien\" op Start draagt de naam van het cv; externe links tonen hun domein (bv. \"www.autoriteitpersoonsgegevens.nl\"). Grensgeval: op Mijn cv's (S12) heten de links \"Bekijken\" en \"Bewerken\" zonder de naam van het cv, en de naam staat ná de links (geen programmatisch bepaalde context); in de geteste toestand met één cv is het doel eenduidig, met meer cv's niet. Advies A-8.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:multiple-ways",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Menu, overzicht op Start/Vandaag, zoekpalet (Ctrl+K) voor begeleiders en beheer; juridische pagina's vanaf registreren en uit elkaar.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:headings-and-labels",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Alle koppen en veldlabels nagelopen (inventaris per scherm): ze beschrijven het onderwerp (\"Wat ik wil\", \"De acht thema's …\", \"Voorbereiding op het eerste gesprek\", \"Stel eerst tweestapsverificatie in\"); geen lege koppen of labels; de lesspeler koppelt \"Stap 4 van 11\" (positie) aan de naam van de les in de dialoognaam en titel, met per blok een `h2` over het onderwerp. Grensgeval: het formulier \"Wachtwoord vergeten\" staat onder de kop \"Inloggen\" (de kop van de pagina), met direct eronder \"Vul je e-mailadres in; we sturen je een link om een nieuw wachtwoord in te stellen.\" en de knop \"Stuur resetlink\"; als voldoet beoordeeld, met advies A-1.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:focus-visible",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Opgelost (B-04, B-01, B-02, B-06): elke Tab-stap heeft een zichtbare indicator; contrast minstens 3,39:1 (standaard), 3,97:1 (februari), 3,49:1 (maart) over 2.537 Tab-stappen ná de overgang; witte ring op het gekleurde inlogvlak 5,9–8,5:1; sjabloonkaarten met ring om de kaart; datumvelden met ring en gemarkeerd segment, kalenderknop met de omlijning van de browser.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:pointer-gestures",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Geen veeg- of padgebaren nodig.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:pointer-cancellation",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Knoppen reageren op `click`; menu's openen bij `pointerdown` en zijn met Esc te sluiten.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:label-in-name",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Opgelost (B-07): axe `label-content-name-mismatch` 0 in alle 155 metingen; taalknop \"NL, taal kiezen\", taalhulp \"AR – Laat zien in العربية\", opmaakbalk \"Utrecht, Sjabloon\", stopknop \"Stoppen. Terug naar overzicht\".",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:motion-actuation",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Geen `devicemotion`/`deviceorientation`.",
        "outcome": {
          "id": "earl:inapplicable",
          "type": [
            "OutcomeValue",
            "NotApplicable"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:language-of-page",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "`<html lang>` en `dir` volgen de schermtaal (nl, ar/rtl, fr, en, ti, ru gemeten). Pagina's die alleen in het Nederlands bestaan (W05 Praktijk bevestigen, W02 Kopersdossier, juridische teksten) zetten de inhoud in een element met `lang=\"nl\"` (bv. `<main lang=\"nl\">`); daarmee is de taal van alle inhoud bepaalbaar. Alleen de tabtitel valt onder de taal van `<html>`; advies A-4.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:language-of-parts",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Na de eindmeting hersteld (R-05): het blok \"Nieuws en acties\" in Instellingen, de namen van vaardigheden uit de landelijke lijst en de vacaturegegevens hebben lang=\"nl\". Opnieuw gemeten in het Arabisch op S50 en S51: alleen de naam van de organisatie (een eigennaam) en een vaardigheid die de deelnemer zelf intypte staan nog zonder taal; de taal van eigen invoer is de app niet bekend. Eerder al: opgelost (B-19): Privacy, Voorwaarden, Cookies, intake-samenvatting; taalmenu met `lang` per taal en `aria-current`; hulptaal in lessen en eindvragen met eigen `lang`.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:on-focus",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "In alle Tab-rondes geen contextwissel door focus; de ATS-uitleg die bij focus verschijnt is een tooltip (geen contextwissel).",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:on-input",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Taalkeuze via een menu; keuzelijsten veranderen inhoud, geen context; geen formulier verstuurt zichzelf.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:consistent-navigation",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Menu per werkplek op elk scherm in dezelfde volgorde (deelnemer, begeleider, beheer), ook in het Arabisch.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:consistent-identification",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Knopnamen per icoon en per werkwoord vergeleken over alle schermen: zelfde functie, zelfde naam (\"Opslaan\", \"Sluiten\", \"Uitnodigen\", \"Afdrukken of opslaan als pdf\", \"NL, taal kiezen\", \"Tips stilzetten\", \"Stoppen. …\"); het icoon met het streepje heeft per functie een eigen naam (\"… afmelden\" voor deelnemers, \"… loskoppelen\" in Beheer, \"… verwijderen\" in Team): andere functies, geen strijdigheid.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:error-identification",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Lege en foute invoer in P1, P2, P4, P5, P6, P6b: melding in tekst bij het veld, `aria-invalid`, `aria-describedby`, focus naar het eerste foute veld (\"Kies wat het was.\", \"Geef de groep een naam …\", \"Plak of typ minstens één e-mailadres …\", \"Dit lijkt geen goed e-mailadres …\"). Inloggen/registreren gebruiken de browsermelding. (Buiten de geteste toestand: N-02.)",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:labels-or-instructions",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Opgelost (B-13): verplichte velden tonen \"(verplicht)\" en hebben `aria-required`; de opslaanknop blijft bedienbaar en zegt wat er ontbreekt; geen veld zonder zichtbaar label.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:error-suggestion",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Meldingen met een suggestie of voorbeeld: \"Schrijf hoeveel uur het was, bijvoorbeeld 8 of 2,5.\", \"… bijvoorbeeld \"Voorjaar Tilburg\".\", \"… bijvoorbeeld jan.dekker@voorbeeld.nl\", \"Een e-mailadres ziet er zo uit: naam@voorbeeld.nl\", \"Kies een wachtwoord van minstens 8 tekens.\"; bij een fout wachtwoord bewust geen suggestie (\"Onjuist e-mailadres of wachtwoord.\", veiligheid). De browsermeldingen geven ook een suggestie (\"@ ontbreekt\").",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:error-prevention-legal-financial-data",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Account verwijderen pas na het typen van \"VERWIJDER\"; deelnemer afmelden met bevestiging; eindvragen opnieuw te maken. Betalen (Stripe) valt buiten de steekproef.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:parsing",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Volgens de noot in WCAG 2.1 altijd voldaan voor HTML; gevolgen van foute code staan bij 1.3.1 en 4.1.2.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:name-role-value",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "Na de eindmeting hersteld (R-06): de taartgrafieken in Beheer → Statistieken zijn niet meer focusbaar (rootTabIndex -1, en inert op het verborgen grafiekvak). Opnieuw gemeten op S77s: axe 0, ook geen aria-hidden-focus. Het woordhulp-vel (R-07) is hersteld, zie 2.4.3. Eerder al: opgelost (B-11, B-02): geen naamloze knoppen, keuzelijsten, schuifregelaars of voortgangsbalken (axe en boom: 0); schuifregelaars met naam en waardetekst (\"32 pt\"); voortgangsbalken met waarde; de lesspeler is nu echt modaal .",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    },
    {
      "type": "Assertion",
      "mode": {
        "type": "TestMode",
        "@value": "earl:manual"
      },
      "subject": {
        "id": "_:subject_1",
        "type": [
          "TestSubject",
          "Website"
        ],
        "title": "maakeencv (app.maakeencv.nl)",
        "description": "Web-app maakeencv, commit bc14c97; alle rollen (publiek, deelnemer, begeleider, beheer), zie het rapport §2."
      },
      "test": {
        "id": "WCAG21:status-messages",
        "type": [
          "TestCriterion",
          "TestRequirement"
        ]
      },
      "result": {
        "type": "TestResult",
        "description": "\"Opgeslagen\", \"Groep aangemaakt\", \"0 uitnodigingen verstuurd …\", \"Verplaatst. Nu op plek 2 van 3.\", autosave (\"Niet opgeslagen\" → \"Opslaan…\" → \"Opgeslagen om 21:37\"), feedback bij oefeningen en de uitslag van de eindvragen via `role=status`/`aria-live`; foutmeldingen bij invoer via `role=alert` of gekoppeld aan het veld. Vaste mededelingen hebben geen `role=alert` meer (B-22). Zonder schermlezer beoordeeld.",
        "outcome": {
          "id": "earl:passed",
          "type": [
            "OutcomeValue",
            "Pass"
          ]
        }
      }
    }
  ],
  "reportFindings": {
    "title": "Toegankelijkheidsonderzoek maakeencv, oktober 2026 (WCAG 2.1)",
    "summary": "WCAG 2.1: 50/50; WCAG 2.2: 55/55. Eigen onderzoek van de leverancier. Zie het rapport voor steekproef, processen, browsers en versies.",
    "commissioner": "SMITO B.V.",
    "evaluator": "SMITO B.V. (eigen onderzoek van de leverancier, met AI-ondersteuning)",
    "date": {
      "type": "http://www.w3.org/TR/NOTE-datetime",
      "@value": "2026-10-07"
    },
    "evaluationSpecifics": "Chrome 155.0.8059.39 headless op Windows 11 (ARM64); axe-core 4.14.0; gescripte metingen via het Chrome DevTools-protocol; willekeurige steekproef met seed 20261007. Geen schermlezertest. Zie het rapport.",
    "documentSteps": [
      {
        "id": "_:about"
      },
      {
        "id": "_:defineScope"
      },
      {
        "id": "_:exploreTarget"
      },
      {
        "id": "_:selectSample"
      }
    ]
  }
}