fix(a11y): maak de contrastaudit af — chrome volgt het thema, de dia niet (#606) #715
No reviewers
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck!715
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/contrast-audit-606"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Sluit #606. De volledige audit, met beeldcontrole in beide thema's.
De regel die eruit kwam
Niet licht-tegen-donker, maar chrome tegen inhoud. Tekst die je in de app leest volgt de app. Inkt die op een dia landt doet dat niet — dat kan niet, want een dia moet identiek renderen in de preview en in een headless export-isolate zonder appearance-instelling. Elk van de ~200 gebruiken is als het een of het ander gelezen.
Wat er veranderde
37 chrome-plekken —
accent,navy,teal, plus het rood en groen van de ernst- en statuspaletten — schilderden tekst en iconen in dialogen, editors, panelen en de schil, waar navy op donker zo goed als verdwijnt. Ze gebruiken nuaccentFg,brandFg,tealFg,dangerFg,successFg.43 plekken in
previews/gaan door nieuwe vaste dia-inkt. Dit was de grootste vondst en hij kwam uit de beeldkeuring: de previews schilderden hun grijzen met de mode-afhankelijke slate-schaal, op een canvas dat wit blijft. In donkere modus werdslate700daarmee 1,3:1 — de tekst van een checklist, scope-matrix en bevindingenoverzicht verdween zo goed als helemaal. En het week af van de export: de HTML-export draait zonder thema en schrijft altijd de lichte waarden, terwijl het exportdialoog belooft dat de export exact de weergave uit de editor gebruikt.Alle 33 goldens zijn byte-identiek, want de nieuwe vaste waarden zijn precies wat er in lichte modus al stond.
De meting klopte niet, en dat was van mij
De eerste ronde legde élk vast token naast
AppTheme.paper— het interface-oppervlak — en noteerde zeventien tekortkomingen in donkere modus. Maar een ernstkleur wordt op een dia gelezen, en die is wit. Tegen de juiste achtergrond en met de lat die werkelijk geldt: veertien tokens zijn diatekst en halen 4,5:1 op wit; twee zijn nooit tekst (een 6%-tint, een randstreep, en de vulling van een badge met wit vet label van ~30px) en halen als grafisch object en grote tekst hun 3:1.Er staat dus geen basislijn meer open — niet afgeschreven, maar grotendeels een categoriefout die ik zelf had gemaakt. Een basislijn die schuld opschrijft die er niet is, maakt de regels die er wél toe doen ongeloofwaardig.
Drie kleinere uit de keuring, twee door mij veroorzaakt
successFg(9,6:1 donker), faaltak nog een vaste rode (3,1:1). "Geëxporteerd naar…" schreeuwde en "De export is mislukt" fluisterde — precies andersom;dangerFgwas in licht blékér dan wat hij verving. Op de scorecard-chip, die zijn achtergrond met 12% van zichzelf vult, zakte hij naar 4,2:1 — onder AA, voor de kleur die alarm betekent.Ik heb de getallen van de keuring zelf nagerekend voordat ik ze aannam; één ervan klopte niet, de bevindingen wel.
Wat dit vastzet
Vier rekentoetsen en twee bronwachten: geen vaste merk- of ernstkleur als tekst buiten de dia-renderende code, en geen mode-afhankelijk grijs binnen
previews/. Beide lezen de bron, dus de volgendeAppTheme.navyin een dialoog — ofslate600op een dia — faalt de bouw. Beide eerst rood gemaakt met een geplante overtreding.Los hiervan gemeld
De keuring stuitte op een gebroken PDF-export (
Invalid argument(s): 1, reproduceerbaar, niet de video). Staat als #714.Poort
make checkgroen (niet doortailgepijpt),make test-goldengroen (33 onveranderd).De beeldkeuring in beide thema's vond vier dingen. Eén ervan was groter dan alles wat de audit tot dan toe had aangeraakt. **De dia-previews schilderden met de mode-afhankelijke slate-schaal, op een canvas dat wit blijft.** In donkere modus werd `slate700` daarmee 1,3:1 en `slate500` 2,1:1: de tekst van een checklist, een scope-matrix en een bevindingenoverzicht verdween zo goed als helemaal. Dat is de platste vorm van wat dit issue aanwijst — de app die op het eigen werk van de gebruiker zakt door de lat die ze hém oplegt. En erger dan onleesbaar: het wéék af van de export. De HTML-export draait zonder thema en schrijft altijd de lichte waarden, terwijl het exportdialoog belooft dat de export exact de weergave uit de editor gebruikt. In donkere modus was dat onwaar. 43 plekken in `previews/` gaan nu door vaste dia-inkt — dezelfde waarden, alleen niet meer bewegend. Alle 33 goldens onveranderd, want die waarden zijn precies wat er in lichte modus al stond. **Drie kleinere, waarvan twee door mij veroorzaakt:** - het exportdialoog was half omgezet: de succes-tak kreeg `successFg`, de faaltak bleef op een vaste rode staan. In donker schreeuwde "Geëxporteerd naar…" op 9,6:1 terwijl "De export is mislukt" op 3,1:1 stond — precies andersom dan je wilt. Ook de twee geblokkeerd-meldingen; - de gebruikersnotities-kop bleef een vaste blauwe terwijl icoon en knop ernaast mode-afhankelijk werden. Op het donkere paneel haalde de kop 2,4:1 en zijn eigen ondertitel eronder 6,2 — omgekeerde hiërarchie, in zijn eigen blok. Kop én tekst volgen nu het thema, net als de amber-tegenhanger al deed; - `dangerFg` was in lichte modus bleker dan de kleur die hij verving. Op de scorecard-chip, die zijn achtergrond met 12% van zichzelf vult, zakte hij daardoor naar 4,2:1 — onder AA, voor de kleur die alarm betekent. De lichte kant is nu de diepe rode; donker blijft. Twee bronwachten erbij: geen mode-afhankelijk grijs in `previews/`, en de dia-inkt moet in beide modi dezelfde waarde hebben. De keuring meldde ook een gebroken PDF-export ("Invalid argument(s): 1"). Dat heeft niets met kleur te maken en staat als #714. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>