/* PRJ-012 / PRJ-028 KW-1 Keuzewereld framework, kit 1.3.0 (/kit/1.3.0/wereld/, immutable). Built in staging by claude-code-pausito-r38-0926 /
   claude-opus-5-5 / 2026-09-27; promoted with KW-2 server-render classes by claude-code-pausito-0927 / claude-opus-5-5 / 2026-09-27. Style A grammar (D-164/D-169): 4 px outlines, irregular corners, sticker shadow; motion is finite
   (press 380 ms, breathe once <= 4.5 s, layer 320 ms) and becomes a fade under reduced motion or calm mode. Uses kit 1.1.0 fonts. */
@font-face{font-family:'Fredoka';font-style:normal;font-weight:500 600;font-display:swap;src:url(/kit/1.1.0/fredoka-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Inter';font-style:normal;font-weight:400 600;font-display:swap;src:url(/kit/1.1.0/inter-latin.woff2) format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
:root{--w-ink:#0C0B14;--w-cream:#FEEDBA;--w-mute:#A79F8C;--w-soft:#D9CFB4;--w-line:#3A3446;--w-paper:#FAF4E9;--w-paper-ink:#1A1422;--w-font:Fredoka,Inter,system-ui,sans-serif;color-scheme:dark}
*{box-sizing:border-box}
body.wereld{margin:0;min-height:100dvh;background:var(--w-ink);color:var(--w-cream);font:400 16px/1.45 Inter,system-ui,sans-serif;display:flex;flex-direction:column;padding:max(14px,env(safe-area-inset-top)) 18px max(12px,env(safe-area-inset-bottom))}
.wereld main{flex:1;display:flex;flex-direction:column;justify-content:center;width:min(100%,520px);margin:0 auto}
.wKopRaam{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center}
.wLogo{width:44px;height:44px}.wLogo .bar{fill:var(--w-cream)}.wLogo .smile{fill:none;stroke:#F2CB81;stroke-width:9;stroke-linecap:round}
.wGroteTitel{margin:0;font:600 clamp(28px,8vw,34px)/1.05 var(--w-font);color:#F2CB81}
.wSubtitel,.wUitleg{margin:0;color:var(--w-mute);font-size:15px;text-align:center}
.wKop{margin:0 0 6px;font:600 24px/1.15 var(--w-font);text-align:center}
.wKies{display:flex;flex-direction:column;gap:12px}
/* 1-3 choices: big floating buttons */
.wKnoppen{display:flex;flex-direction:column;gap:clamp(16px,3vh,24px);margin:8px 0}
.wKnop,.wTegel{--c:#FEEDBA;--s:#8C7F5E;position:relative;display:flex;align-items:center;gap:16px;border:4px solid var(--c);border-radius:var(--r);box-shadow:0 7px 0 var(--s);background:transparent;color:var(--w-cream);font:inherit;text-align:left;text-decoration:none;cursor:pointer;-webkit-tap-highlight-color:transparent}
/* KW-2 (kit 1.3.0, claude-code-pausito-0927): colour and corners from classes too, so server-rendered choices match the JS ones without style attributes */
.wKnop[data-kleur=gold],.wTegel[data-kleur=gold]{--c:#F2CB81;--s:#7A4E00}.wKnop[data-kleur=teal],.wTegel[data-kleur=teal]{--c:#4FD1C5;--s:#00695F}.wKnop[data-kleur=cream],.wTegel[data-kleur=cream]{--c:#FEEDBA;--s:#8C7F5E}
.wKnop[data-kleur=grijs],.wTegel[data-kleur=grijs]{--c:#A79F8C;--s:#000}
/* Evaluator R1 (27/9) against W1: 64 px icon circle with a 4 px ring, filled play glyph, layer title in the layer colour, 14 px rhythm above the hint */
.wKnop>.wRond{width:64px;height:64px}.wKnop .wIcoon{width:34px;height:34px}.wIcoon.wVol{fill:currentColor;stroke:none}
.wLaagTitel{color:var(--c)}.wTerug .wIcoon{stroke-width:2.8}
body.wereld{gap:14px}.wUitleg{text-wrap:balance}
.wKnoppen>.wKnop:nth-child(3n+1){--r:40px 52px 44px 56px/48px 40px 54px 42px}.wKnoppen>.wKnop:nth-child(3n+2){--r:54px 40px 50px 44px/42px 52px 40px 50px}.wKnoppen>.wKnop:nth-child(3n){--r:46px 56px 42px 50px/52px 44px 48px 40px}
.wRaster>.wTegel:nth-child(3n+1){--r:22px 28px 20px 30px/26px 20px 30px 22px}.wRaster>.wTegel:nth-child(3n+2){--r:28px 20px 26px 22px/20px 28px 22px 26px}.wRaster>.wTegel:nth-child(3n){--r:24px 30px 22px 26px/30px 22px 26px 20px}
.wKnop{min-height:clamp(88px,14vh,118px);padding:14px 20px;animation:wAdem 3.4s ease-in-out 1 both}
.wKnoppen .wKnop:nth-child(2){animation-delay:.35s}.wKnoppen .wKnop:nth-child(3){animation-delay:.7s}
.wTegel{flex-direction:column;align-items:flex-start;justify-content:space-between;gap:8px;min-height:112px;padding:14px;border-width:3px;background:#15121F;box-shadow:0 5px 0 #000}
.wTegel.breed{grid-column:span 2}
.wRond{flex:none;display:grid;place-items:center;width:56px;height:56px;border-radius:50%;border:4px solid var(--c,#3A3446);color:var(--c,var(--w-cream));background:transparent}
.wTegel .wRond{width:auto;height:auto;border:0}
.wIcoon{width:58%;height:58%;fill:none;stroke:currentColor;stroke-width:2.3;stroke-linecap:round;stroke-linejoin:round}.wTegel .wIcoon{width:30px;height:30px}
.wTekst{display:flex;flex-direction:column;gap:3px;min-width:0}
.wTitel{font:600 clamp(22px,6.5vw,27px)/1.05 var(--w-font);color:var(--w-cream);overflow-wrap:anywhere}.wTegel .wTitel{font-size:20px;line-height:1.1}
.wSub{font-size:15px;color:var(--w-soft)}.wTegel .wSub{font-size:13px;color:#B9AF98}
.wKnop:focus-visible,.wTegel:focus-visible,.wRond:focus-visible,.wZoek input:focus-visible{outline:3px dashed var(--w-cream);outline-offset:5px}
.wKnop:active,.wTegel:active{transform:scale(.95,.92)}
/* 4-6 tiles, 7+ groups, 12+ search */
.wRaster{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.wGroepen{display:flex;flex-direction:column;gap:14px}.wGroepKop{margin:4px 0 8px;font:600 15px/1.2 var(--w-font);color:var(--w-mute);letter-spacing:.04em}
.wZoek input{width:100%;min-height:48px;border-radius:24px;border:3px solid var(--w-line);background:#15121F;color:var(--w-cream);padding:0 16px;font:inherit}
/* frame: bottom bar with at most two helper buttons */
.wOnder{display:flex;align-items:center;justify-content:space-between;padding-top:8px;border-top:2px solid #231F2E;width:min(100%,520px);margin:0 auto}
.wOnder .wRond{width:52px;height:52px;border:3px solid var(--w-line)}
.wMerk{font:500 14px/1 var(--w-font);letter-spacing:.12em;color:#6E6680}
.wVerborgen{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
/* layer: dialog sliding in from the right over a dimmed background (no blur) */
.wLaag{--c:#4FD1C5;position:fixed;inset:0 0 0 auto;margin:0;width:min(92vw,520px);max-width:none;height:100dvh;max-height:none;padding:20px 18px 24px;border:0;border-left:4px solid var(--c);border-radius:34px 0 0 34px;background:var(--w-ink);color:var(--w-cream);overflow:auto;animation:wIn 320ms cubic-bezier(.2,.9,.3,1.05) both}
.wLaag::backdrop{background:rgba(12,11,20,.74);animation:wDim 240ms ease-out both}
.wLaag.wWeg{animation:wUit 220ms ease-in both}
.wLaagKop{display:flex;align-items:center;gap:12px;margin-bottom:12px}.wLaagKop .wRond{width:52px;height:52px;border:3px solid var(--w-line)}
.wLaagTitel{margin:0;font:600 26px/1.1 var(--w-font)}
.wLaagInhoud .wUitleg{text-align:left}
/* paper: calm content */
.wPapier{background:var(--w-paper);color:var(--w-paper-ink);border-radius:20px 24px 18px 26px;padding:16px 18px;font-size:17px;line-height:1.6;max-width:65ch;margin:12px auto;animation:none!important}
.wPapier h2,.wPapier h3{font-family:var(--w-font);font-weight:600;color:var(--w-paper-ink)}.wPapier a{color:#6B3F00}
.wPop{animation:wPop 380ms cubic-bezier(.3,1.6,.5,1) 1}
@keyframes wAdem{0%,100%{transform:translateY(0) scale(1)}50%{transform:translateY(-4px) scale(1.02)}}
@keyframes wPop{0%{transform:scale(1)}30%{transform:scale(.93,.9)}70%{transform:scale(1.05)}100%{transform:scale(1)}}
@keyframes wIn{from{transform:translateX(100%)}to{transform:none}}
@keyframes wUit{from{transform:none}to{transform:translateX(100%)}}
@keyframes wDim{from{opacity:0}to{opacity:1}}
@keyframes wFade{from{opacity:0}to{opacity:1}}
@keyframes wFadeUit{from{opacity:1}to{opacity:0}}
/* calm mode (explicit choice) or reduced motion (default when no choice): fade only */
:root[data-rustig=true] .wKnop,:root[data-rustig=true] .wPop{animation:none}
:root[data-rustig=true] .wKnop:active,:root[data-rustig=true] .wTegel:active{transform:none}
:root[data-rustig=true] .wLaag{animation:wFade 200ms ease-out both}:root[data-rustig=true] .wLaag.wWeg{animation:wFadeUit 150ms ease-in both}
@media (prefers-reduced-motion:reduce){:root:not([data-rustig=false]) .wKnop,:root:not([data-rustig=false]) .wPop{animation:none}:root:not([data-rustig=false]) .wLaag{animation:wFade 200ms ease-out both}}
/* Cross-document @view-transition stays off until the product pages load this kit too (KW-3..5): an opt-in on the hub alone makes every
   hub -> product navigation abort its transition with a console error (measured 27/9, claude-code-pausito-0927). Re-enable here then:
   @view-transition{navigation:auto} @media (prefers-reduced-motion:reduce){@view-transition{navigation:none}} */
/* KW-3 (kit 1.3.1, claude-code-pausito-0927): product screens. .wScherm = the first screen (world); paper content follows below the fold. */
.wScherm{min-height:calc(100dvh - 28px);display:flex;flex-direction:column;gap:14px}
.wKlein{display:flex;flex-wrap:wrap;gap:10px;justify-content:center;margin:16px 0}
.wKleinKnop{min-height:44px;padding:0 18px;border-radius:22px;border:2px solid var(--w-line);background:transparent;color:var(--w-cream);font:500 15px/1 var(--w-font);cursor:pointer}
.wKleinKnop[aria-pressed=true]{border-color:#4FD1C5;color:#4FD1C5}.wKleinKnop:focus-visible{outline:3px dashed var(--w-cream);outline-offset:4px}
.wWaarom{margin:8px 0;color:var(--w-mute)}.wWaarom summary{display:inline-grid;place-items:center;width:44px;height:44px;border-radius:50%;border:2px solid var(--w-line);cursor:pointer;list-style:none}.wWaarom p{font-size:15px}
.wLeeg{margin-top:10px}
.wPapier img,.wFoto{max-width:100%;height:auto;border-radius:14px}
.wPapier .wLatijn{font-style:italic;margin-top:-6px}.wPapier .wGroepLabel{font-weight:600}.wPapier .wRedenen li{margin:6px 0}
.wPapier .wBronnen{font-size:14px;overflow-wrap:anywhere}.wPapier .wKleinDruk{font-size:14px;color:#5A4E3A}
.wPapier .wPapierLink{display:inline-block;margin-top:10px;font-weight:600}
.wPapierZone{width:min(100%,760px);margin:32px auto 24px}.wPapier{overflow-wrap:anywhere}.wPapierZone .wPapier{max-width:none}
.wPapierZone details{margin:10px 0}.wPapierZone article.bird{border-top:1px solid #d9cfb4;padding-top:12px;margin-top:12px}
.wTegel .wTitel{overflow-wrap:break-word;hyphens:auto}
/* KW-3b: long paper pages keep the bottom bar in view. */
.wPapierPagina .wOnder{position:sticky;bottom:0;background:var(--w-ink);padding-bottom:max(8px,env(safe-area-inset-bottom));z-index:1}
.wPapier h1{font:600 clamp(28px,7vw,36px)/1.15 var(--w-font);color:var(--w-paper-ink);margin:8px 0 12px}
/* KW-3 evaluator R1 (claude-code-pausito-0927): current answer ring, question status pill, bottom-anchored helpers in layers, back button in the B-head */
.wKnop[data-gekozen=true],.wTegel[data-gekozen=true]{box-shadow:0 0 0 4px var(--w-ink),0 0 0 8px var(--c)}
.wStatus{align-self:flex-start;display:inline-block;padding:5px 14px;border-radius:16px 12px 15px 13px;background:var(--c,#4FD1C5);color:var(--w-ink);font:600 14px/1.2 var(--w-font);box-shadow:0 3px 0 rgba(0,0,0,.45)}
.wLaagInhoud{display:flex;flex-direction:column;gap:12px;min-height:calc(100% - 76px)}.wLaagInhoud>.wKlein{margin-top:auto}
.wKopRaam{position:relative}.wKopTerug{position:absolute;left:0;top:0;width:52px;height:52px;border:3px solid var(--w-line);color:var(--w-cream)}
.wTegel[data-kleur=grijs] .wTitel{color:#A79F8C}
/* KW-4: long single-word names (Koningsoesterzwam) break inside the tile instead of running out of it */
.wTegel .wTekst{align-self:stretch;width:100%}.wTegel .wTitel{font-size:clamp(17px,4.9vw,20px)}
/* KW-4 evaluator R1: readable search placeholder (7.4:1), product panels inside paper without a white box */
.wZoek input::placeholder{color:#A79F8C;opacity:1}.wPapier .ps-panel{background:transparent;box-shadow:none;border:0;padding:0}
.wKnop.langWoord .wTitel{font-size:clamp(15px,4.4vw,19px)}
/* GSM one-handed back (ticket PAUSITO_GSM_EENHANDIG_TERUG_20260927, N1-N6; fabriek-cloud-golf4 / claude-opus-5-5 / implementator / 2026-09-29).
   N1: the dimmed strip next to the layer (8vw, 29-34 px on a phone; a wider strip breaks species names in the tiles) closes it. N2:
   horizontal swipes belong to the layer (vertical scrolling stays with the browser). N4: a big back pill bottom right in every layer (the side it slides in from),
   sticky while the layer scrolls; on pages a back button in the bottom bar and a floating one once that bar has scrolled away. */
.wLaag{touch-action:pan-y}
.wLaagInhoud{min-height:calc(100% - 160px)}
.wLaagDuim{position:sticky;bottom:0;z-index:1;display:flex;justify-content:flex-end;margin:14px -18px -24px;padding:18px 18px max(18px,env(safe-area-inset-bottom));background:linear-gradient(rgba(12,11,20,0),var(--w-ink) 42%);pointer-events:none}
.wDuimTerug{pointer-events:auto;display:inline-flex;align-items:center;gap:8px;min-width:56px;min-height:56px;padding:0 22px 0 12px;border:3px solid var(--c,#4FD1C5);border-radius:30px 26px 28px 24px;background:var(--w-ink);color:var(--w-cream);font:600 19px/1 var(--w-font);box-shadow:0 5px 0 #000;cursor:pointer;-webkit-tap-highlight-color:transparent}
.wDuimTerug .wIcoon{width:28px;height:28px;stroke-width:2.8}
.wDuimTerug:focus-visible,.wOnderTerug:focus-visible,.wZweefTerug:focus-visible{outline:3px dashed var(--w-cream);outline-offset:4px}
.wDuimTerug:active{transform:scale(.95)}
.wOnder.metTerug{display:grid;grid-template-columns:auto auto 1fr auto;gap:10px}.wOnder.metTerug .wMerk{text-align:center}
.wOnderTerug{color:var(--w-cream)}
.wZweefTerug{position:fixed;left:max(16px,env(safe-area-inset-left));bottom:max(16px,env(safe-area-inset-bottom));z-index:5;width:56px;height:56px;border:3px solid var(--w-line);background:var(--w-ink);color:var(--w-cream);box-shadow:0 5px 0 #000}
.wZweefTerug[hidden]{display:none}
:root[data-rustig=true] .wDuimTerug:active{transform:none}
/* 1.3.3 (release57, claude-code-server01w-impl-0930 / claude-opus-5-5 / implementator / 2026-09-30): the search field hides misses with the
   hidden attribute, but the flex display of a tile won over it, so every tile stayed visible (live since release48; measured on the
   30 parrot species: 27 hidden attributes, 30 tiles visible). */
.wTegel[hidden],.wKnop[hidden],.wGroep[hidden]{display:none}
/* 1.3.4 (release59, claude-code-server01w-impl-0930 / claude-opus-5-5 / implementator / 2026-09-30).
   B13 (visitor round 30/9; patch by codex-bezoeker-review-0930 / GPT-6): the floating back pill lay over the last lines of a layer (the
   species card, the compare button). The back row is now its own row at the bottom of the layer; only the content scrolls, inside its
   own box, so nothing can end up behind the pill. */
.wLaag[open]{display:flex;flex-direction:column;overflow:hidden}
.wLaag>.wLaagKop{flex:none;margin-bottom:10px}
/* the scrolling box spans the full width of the layer (the scrollbar sits at the edge) and keeps room around its content, so a focus
   ring or a tile shadow is not cut off by the box */
.wLaag>.wLaagInhoud{flex:1;min-height:0;overflow-y:auto;overscroll-behavior-y:contain;margin:0 -18px;padding:8px 18px 12px}
.wLaag>.wLaagDuim{position:static;flex:none;margin-top:0;padding-top:10px;background:var(--w-ink);border-top:2px solid #231F2E}
/* B15: the brand word in the bottom bar was 3.61:1 on the page colour; now 5.0:1. */
.wMerk{color:#857D98}
