Design system v4.1, licht: de kleine letter en de prijsregel halen WCAG AA, geen donkere modus - #380
Merged
Merged
Conversation
Apolloccrypt
force-pushed
the
feat/droom-systeem
branch
2 times, most recently
from
September 3, 2026 01:11
8611016 to
5f4ab4a
Compare
Apolloccrypt
force-pushed
the
feat/droom-systeem
branch
from
September 3, 2026 01:52
5f4ab4a to
13416d6
Compare
Apolloccrypt
force-pushed
the
feat/droom-systeem
branch
3 times, most recently
from
September 3, 2026 02:12
f6078a8 to
dbc5657
Compare
Een contrastmeting over 4448 tekstparen op zestien pagina's, op 390 en 1440, wees een token aan. --ink-dim stond op rgba(11,58,106,.65) en landt daarmee op 4.09:1 tegen het papier, 3.96:1 tegen de voet en 4.18:1 op een witte kaart. Drie keer net onder de 4.5 die AA vraagt, en drie keer onder de tekst die de prijs, de limiet en de kleine letter draagt. Niet te zien met het blote oog, wel het verschil tussen voldoen en niet voldoen. --ink-dim, --lime-dim en --black-dim wijzen nu naar --ink-2 (#40505F, 7.95:1 op het papier). Dat is de enige wijziging aan het ontwerpsysteem; elke andere waarde staat zoals hij stond, en design-system.css groeit van 85374 naar 86270 bytes, waarvan het grootste deel commentaar met de gemeten getallen. Gemeten, licht, uniek onder AA, tegen main op 39179f5: hele site 82 -> 5 / 4 -> 1 (de rest zit in het style-blok van #382) /pricing 8 -> 0 /parasign 7 -> 0 /security 8 -> 1 (het lime vinkje, 1.16:1, bullet en geen tekst) /dashboard 0 -> 0 (#381 heeft die pagina al schoongemaakt) De vijf die overblijven staan met naam en reden in KNOWN_LIGHT in tests/theme-contrast.test.mjs. Geen van de vijf komt uit het ontwerpsysteem: alle vijf staan als letterlijke kleur in het style-blok van een pagina en alle vijf staan al op main. De test faalt op elke nieuwe. De statusregel van /parashare stond er ook op en is door #381 opgelost, dus hij is van de lijst af: korter mag, langer niet. Geen donkere modus. Een eerdere stand van deze tak droeg een volledige donkere tokenset achter [data-theme], zonder schakelaar in de nav, onleesbaar op /security, /pricing en het dashboard, en 31 KB zwaarder op alle 58 pagina's. Die laag is er in zijn geheel uit; wat blijft is de gemeten lichte winst. tests/theme-contrast.test.mjs meet elk tekstpaar op elke pagina op 390 en 1440, vlakt de tekstkleur af tegen de eerste ondoorzichtige achtergrond erboven en rekent WCAG 2.1. 4448 paren, vijf bekende gevallen, nul nieuwe. tests/motion-safety.test.mjs vergelijkt elke pagina met en zonder prefers-reduced-motion en faalt zodra een element verdwijnt, vervaagt of inklapt in plaats van alleen stil te staan. De review meldde dat /parashare een element verloor, 272 tegen 271. Het meetpunt deugde niet. Hij laadde elke pagina twee keer, een keer met en een keer zonder reduce, en legde de twee lijsten naast elkaar. Dat vergelijkt twee paginaladingen en niet twee instellingen. /parashare start 400ms na het laden een WebGL-globe waarvan het aantal knopen op een vast meetmoment in de ene lading wel en in de andere nog niet staat: acht keer op rij 272 tegen 267, en op de CI-runner kwam dat binnen twintig seconden nooit tot stilstand. Elke pagina wordt nu een keer geladen. Na de binnenkomst: opname A, dan page.emulateMedia reduce en opname B, dan terug en opname C. Dezelfde DOM, dezelfde scripts, een variabele. C is de controle: wat de pagina zelf tussen twee metingen weghaalt is in C ook weg en telt niet als schade van reduce. Vergeleken wordt op wat een layoutbox heeft, op een DOM-pad in plaats van op een volgnummer in een platte lijst. Dat is een scherpere claim en geen zwakkere. Gesaboteerd om te zien dat hij bijt: display:none, opacity 0 en visibility:hidden onder reduce geven alle drie rood, met pad en maat. tests/apply-nav-idempotent.test.mjs is nieuw. frontend/apply-nav.py stempelt de nav, de voet en de vier cache-bust-verwijzingen in 58 pagina's, en zijn DS_LINK liep achter op wat die pagina's dragen. Een onschuldige draai zou 58 pagina's hebben teruggezet naar een stylesheet-url die niet meer bestaat. De test draait de generator op een kopie van frontend/ en eist een lege diff. Alles in functiescope, zodat tests/*.mjs er geen naam bij krijgt. .gitignore vangt node_modules nu ook zonder slash. Een regel met slash matcht alleen een map, en een symlink is voor git een bestand: zo belandde er in een eerdere stand van deze tak een 120000-blob in de commit. Pixeldiff van index.html tegen main, dezelfde chromium, animaties en transities uit: op 390x844 en 1440x900 nul verschillende pixels. Over de hele pagina 3705 pixels op 46 regels, en die 46 regels zijn de twee voetregels die op --ink-dim staan. Dat is precies de wijziging en niets anders.
Apolloccrypt
force-pushed
the
feat/droom-systeem
branch
from
September 3, 2026 02:21
dbc5657 to
56c7cec
Compare
Apolloccrypt
pushed a commit
that referenced
this pull request
Sep 3, 2026
…jurybesluit Het oude document beschreef een richting die op drie punten is teruggedraaid en op een vierde nooit is uitgevoerd. Het wees naar een tokenbestand dat door niets geladen wordt en naar elf screenshots van prototypepagina's die niet bestaan. Elke regel is nu getraceerd naar de PR die hem heeft besloten. De richting leeft in vier lagen en niet in een. design-system.css v4.1 op alle 58 paginas, licht only; nav.css; app-2026.css op elf app-schermen, met donker als keuze op /account onder paramant.theme.v1; en een eigen --hp-palet in de kritieke CSS van de homepage. Het document zei dat er een globale tokenlaag zou komen. Die is er niet en het bestand dat hem zou dragen is hier weg. Drie dingen zijn verworpen en staan nu met hun reden in het document. De STIL-balk in mono hoofdletters (#392: de stem van een terminal boven een pagina in papier, inkt en zinnen, en Help stond daardoor op 9px). Lime als primaire knop (#392: lime is de leestekenkleur van dit merk en las naast de kobalt-heroknop als een tweede aanbod). En donker op marketing (#380: onbereikbaar achter [data-theme] zonder schakelaar, onleesbaar wit op lime op 1.07:1, en 31 KB op elke pagina zonder gzip). frontend/design-tokens-2026.css is weg. Geen pagina, build, test of nginx-conf laadde hem, en hij was in tegenspraak met wat wel draait: hij schreef donker als :root:not([data-theme="light"]), precies de sprong van creme naar zwart die #381 heeft weggehaald en die docs/site-claims.md rij 28 en tests/app-theme.test.mjs bewaken. Zijn aliaslaag verschoof --space-8/9/10 en liet --space-10 en --space-11 ongedefinieerd, en --navy: var(--ink) zou elke navy op 58 paginas in een keer verzetten. De levende bron is app-2026.css. De elf prototypebeelden zijn vervangen door twee van de echte homepage, met scripts/brand-shots-direction.mjs. Dat script volgt de regel uit #393: een tempmap standaard, docs/brand/assets alleen met PARAMANT_WRITE_BRAND_SHOTS=1, en het hergebruikt de vlag en de docs-check uit scripts/brand-shots-dir.mjs in plaats van er een tweede kopie van te houden. Twee merkbesluiten staan open in sectie 8. Een gevuld accent per scherm, want /pricing draagt sinds de balkwissel zeven btn-primary plus de knop in de balk, en op het eerste scherm staan er twee naast elkaar. En de koele naad: de balk op rgb(248,250,252) tegen homepagepapier #FAF8F3, nu verborgen achter een gradient over de eerste 160px, met de balkkleur gepind door tests/navigation-shell.test.mjs. Poorten groen: tests/static-sanity.sh (twaalf checks), scripts/check-test-declarations.sh (134 suites), node --test tests/links.test.mjs, npx eslint@9 . (exit 0). Extra: tests/brand-shots-optin.test.mjs 10/10, scripts/check-cache-bust.sh 363 links, tests/frontend-loading-contract.test.mjs 7/7.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Herstel na review. De donkere laag is er in zijn geheel uit. Wat overblijft is de gemeten lichte winst, en verder niets: geen nieuwe tokenset, geen componentlaag, geen letterlijke-kleur-sweep over de gedeelde stylesheets. Eén token in
frontend/design-system.cssverandert van waarde.Waarom de donkere laag eruit ging
De directie las de vorige stand en trok drie dingen aan:
[data-theme]zonder schakelaar in de nav, dus geen bezoeker kon hem bereiken/security,/pricingen het dashboard: wit op lime, 1.07:1deploy/zet gzip aanfrontend/design-system.cssging in de vorige stand van 85374 naar 116364 bytes. Nu staat hij op 86270, en die 896 bytes zijn vrijwel volledig het commentaarblok met de gemeten getallen.nav.css,parapear.cssenrelay-pulse.cssstaan weer letterlijk opmain.De winst
--ink-dimstond oprgba(11,58,106,.65):#F8FAFC)#EEF2F6)Drie keer net eronder, en drie keer onder de tekst die de prijs, de limiet en de kleine letter draagt.
--ink-dim,--lime-dimen--black-dimwijzen nu naar--ink-2,#40505F, 7.95:1 op het papier.Gemeten met de WCAG 2.1 relatieve-luminantieformule, elke tekstkleur afgevlakt tegen de eerste ondoorzichtige achtergrond erboven, op 390 en 1440, in licht:
//pricing/parasign/security/dashboardGemeten tegen
mainop39179f50. Het dashboard staat er als nul tegen nul: #381 heeft die pagina zelf al schoongemaakt terwijl dit liep.De vijf die overblijven staan met naam en reden in
KNOWN_LIGHTintests/theme-contrast.test.mjs. Geen van de vijf komt uit het ontwerpsysteem: alle vijf staan als letterlijke kleur in het style-blok van een pagina, en alle vijf staan al opmain. De statusregel van/parasharestond er ook op en is door #381 opgelost, dus die is van de lijst af: korter mag, langer niet. De twee op de pagina's hierboven:/p.hp-kickerop 4.31:1.index.htmlkreeg met Homepage, the trust round: a letter from the founder, the receipt that stays, and four facts you can check yourself #382 een eigen palet in zijn kritieke CSS, met--hp-ink-3op#66727F. Op het tweede papier (#F3F0E8) haalt dat 4.31:1, en daar staat de mono-kicker boven elke sectie. Eén hex lost het op,#5F6B78geeft 4.71:1, maar dat is een wijziging aan de homepage van Homepage, the trust round: a letter from the founder, the receipt that stays, and four facts you can check yourself #382 en hoort in die tak./securityspan.checkop 1.16:1. Het lime vinkje is hier bullet en geen inhoud: de zin ernaast draagt de betekenis volledig. Lime vervangen is een merkbesluit en geen herstel, dus het staat met naam op de lijst in plaats van dat het stil wordt weggepoetst.Pixeldiff van de homepage
index.htmltegenmain, dezelfde chromium, animaties en transities uit:Die 46 regels zijn de twee voetregels die op
--ink-dimstaan. Boven de vouw verandert er geen pixel, ook niet in de nav.De drie testbestanden
tests/theme-contrast.test.mjsmeet elk tekstpaar op zestien pagina's op 390 en 1440: 4448 paren, vijf bekende gevallen, nul nieuwe. De lijst mag korter worden en nooit langer.tests/motion-safety.test.mjsfaalt zodra een element verdwijnt, vervaagt of inklapt onderprefers-reduced-motionin plaats van alleen stil te staan. De review meldde dat/parashareer een element bij verloor, 272 tegen 271. Het meetpunt deugde niet.Hij laadde elke pagina twee keer, een keer met en een keer zonder
reduce, en legde de twee lijsten naast elkaar. Dat vergelijkt twee paginaladingen en niet twee instellingen./parasharestart 400ms na het laden een WebGL-globe waarvan het aantal knopen op een vast meetmoment in de ene lading wel en in de andere nog niet staat: gemeten acht keer op rij 272 tegen 267, en op de CI-runner kwam dat binnen twintig seconden nooit tot stilstand.Elke pagina wordt nu een keer geladen. Na de binnenkomst opname A, dan
page.emulateMedia({ reducedMotion: 'reduce' })en opname B, dan terug en opname C. Dezelfde DOM, dezelfde scripts, dezelfde toestand, en het enige dat tussen A en B verandert is de media query. C is de controle: wat de pagina zelf tussen twee metingen weghaalt is in C ook weg en telt dus niet als schade vanreduce. Vergeleken wordt op wat een layoutbox heeft, en op een DOM-pad in plaats van op een volgnummer in een platte lijst.Dat is een scherpere claim en geen zwakkere: een element dat in A en C een box heeft en in B niet, is nu rood, en was dat eerder alleen als het totaalaantal toevallig meeveranderde. Gesaboteerd met
display:none,opacity:0envisibility:hiddenonderreduce, alle drie rood:tests/apply-nav-idempotent.test.mjsis nieuw en dicht de tweede reviewbevinding.frontend/apply-nav.pystempelt de nav, de mobiele la, de voet en de vier cache-bust-verwijzingen in 58 pagina's, en zijnDS_LINKliep achter op wat die pagina's dragen: pagina's op?v=24, generator op?v=23. Een onschuldigepython3 frontend/apply-nav.pyzou 58 pagina's stil hebben teruggezet naar een stylesheet-url die niet meer bestaat, en de nginx-conf serveert CSS alsimmutable, max-age=1y. De test draait de generator op een kopie vanfrontend/en eist een lege diff.Gesaboteerd om te zien dat hij bijt:
DS_LINKterug op?v=23geeft rood en noemt bestand, regelnummer en beide waarden.Alles in dat bestand staat in functiescope.
tests/*.mjsis één gedeelde top-level naamruimte waar elke openstaande pull request in schrijft;scripts/check-test-declarations.shbewaakt dat en dit bestand voegt er geen naam aan toe.node_modules
De vorige stand droeg een
node_modules-symlink als120000-blob..gitignorehadnode_modules/en**/node_modules/, en een regel met slash matcht alleen een map: een symlink is voor git een bestand en glipte er langs. De blob is weg en.gitignorevangt hem nu ook zonder slash.Cache-bust
design-system.cssnaar?v=24over 58 pagina's, plusfrontend/apply-nav.pyen de verwijzing intests/access-log-visitors.test.mjs.nav.cssblijft op?v=19, want dat bestand is nu byte voor byte gelijk aanmainen een bump die niets verandert is 20 KB die elke bezoeker opnieuw ophaalt.Poorten
Alles op
39179f50, de main van dit moment.Gerebased
Op
mainvan vandaag, drie keer, want er landden tijdens deze ronde vier andere PR's. De botsingen zaten allemaal in de stylesheet-lijst van de<head>, en zijn allemaal op dezelfde regel opgelost: de lijst vanmainblijft staan, alleen de cache-bust van deze tak gaat mee. De enige regel die deze tak in die 58 pagina's aanraakt is daarmee de cache-bust vandesign-system.css. Te controleren met:Dat geeft 0.