@font-face{font-family:'Rubik';font-style:normal;font-weight:300 900;font-display:swap;src:url(data:font/woff2;base64,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) 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:'Rubik';font-style:normal;font-weight:300 900;font-display:swap;src:url(data:font/woff2;base64,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) format('woff2');unicode-range:U+0307-0308, U+0590-05FF, U+200C-2010, U+20AA, U+25CC, U+FB1D-FB4F}:root{
  --ink:#191622; --cream:#FFF4DF; --paper:#FFFBF2;
  --amber:#F5A524; --teal:#12A69B; --red:#E5453B; --violet:#7A5AF8;
  --sky-a:#FFC978; --sky-b:#2C93A8;
  --shadow:0 4px 0 var(--ink);
  --font:'Rubik',system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{height:100%;margin:0;overflow:hidden;overscroll-behavior:none}
body{font-family:var(--font);color:var(--ink);line-height:1.1;
  background:linear-gradient(163deg,var(--sky-a) 0%,var(--sky-b) 100%);
  -webkit-font-smoothing:antialiased;text-size-adjust:100%}

/* one screen, one job — dvh so mobile chrome cannot clip the buttons */
.app{height:100dvh;display:flex;flex-direction:column;gap:8px;
  padding:calc(8px + env(safe-area-inset-top)) 12px calc(10px + env(safe-area-inset-bottom));
  max-width:520px;margin:0 auto}

.top{display:flex;align-items:center;gap:10px;flex-shrink:0}
.dots{display:flex;gap:6px;flex:1}
.dot{width:100%;height:8px;max-width:44px;border-radius:99px;background:rgba(25,22,34,.22);
  border:2px solid var(--ink);transition:background .25s}
.dot.on{background:var(--amber)}
.dot.now{background:var(--cream)}
.seg{display:flex;border:2.5px solid var(--ink);border-radius:99px;overflow:hidden;
  background:var(--cream);box-shadow:0 3px 0 var(--ink);flex-shrink:0}
.seg button{font:800 10px/1.1 var(--font);border:0;background:none;color:var(--ink);
  padding:6px 8px;cursor:pointer;opacity:.45}
.seg button[aria-pressed="true"]{background:var(--ink);color:var(--cream);opacity:1}

.stage{flex:1;min-height:0;border:3.5px solid var(--ink);border-radius:20px;overflow:hidden;
  background:linear-gradient(168deg,#FFE0A8 0%,#7FD0D8 100%);box-shadow:0 5px 0 var(--ink)}
.stage svg{display:block;width:100%;height:100%;touch-action:none}
.grab{cursor:pointer}

.say{flex-shrink:0;background:var(--paper);border:3.5px solid var(--ink);border-radius:18px;
  padding:12px 14px 13px;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:7px}
.tag{align-self:flex-start;background:var(--teal);color:#fff;border:2.5px solid var(--ink);
  border-radius:8px;padding:4px 11px;font:800 12.5px/1.1 var(--font);
  transform:rotate(-2.5deg);box-shadow:0 3px 0 var(--ink)}
.tag.b{background:var(--red)} .tag.c{background:var(--violet)}
.line{font:600 14.5px/1.1 var(--font);margin:0;min-height:1.1em}
.line b{font-weight:800}
.line.k-warn{color:#B02F27}
.line.k-good{color:#0B7A63}

/* dir=ltr always: a minus must sit left of a plus in every language */
.ctl{flex-shrink:0;display:flex;align-items:stretch;gap:9px;direction:ltr}
.step{width:56px;flex-shrink:0;background:var(--cream);border:3.5px solid var(--ink);
  border-radius:15px;box-shadow:var(--shadow);cursor:pointer;display:flex;
  align-items:center;justify-content:center;padding:0}
.step[hidden]{display:none}
.step svg{width:22px;height:22px}
.read{flex:1;background:var(--cream);border:3.5px solid var(--ink);border-radius:15px;
  box-shadow:var(--shadow);display:flex;align-items:center;justify-content:center;min-width:0}
.read .n{font:800 27px/1.1 var(--font);font-variant-numeric:tabular-nums}
.go{width:100%;background:var(--amber);border:3.5px solid var(--ink);border-radius:16px;
  box-shadow:var(--shadow);cursor:pointer;font:800 16.5px/1.1 var(--font);color:var(--ink);padding:15px 10px}
.go.done{background:var(--teal);color:#fff}

.keypad{flex-shrink:0;display:grid;grid-template-columns:repeat(3,1fr);gap:8px;direction:ltr}
.keypad[hidden]{display:none}
.keypad button{background:var(--cream);border:3.5px solid var(--ink);border-radius:14px;
  box-shadow:var(--shadow);cursor:pointer;font:800 20px/1.1 var(--font);color:var(--ink);
  padding:11px 0;display:flex;align-items:center;justify-content:center}
.keypad button svg{width:28px;height:24px}

.step:active,.go:active,.keypad button:active{transform:translateY(3px);box-shadow:0 1px 0 var(--ink)}
.step:focus-visible,.go:focus-visible,.seg button:focus-visible,.keypad button:focus-visible{
  outline:3px solid #fff;outline-offset:2px}

.pulse{animation:pulse .34s ease}
@keyframes pulse{0%{transform:scale(1)}45%{transform:scale(1.045)}100%{transform:scale(1)}}
.shake{animation:shake .3s ease}
@keyframes shake{0%,100%{transform:translateX(0)}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
@media (prefers-reduced-motion:reduce){.pulse,.shake{animation:none}}

.iconbtn{border:2.5px solid var(--ink);background:var(--cream);color:var(--ink);border-radius:99px;
  width:34px;height:34px;display:flex;align-items:center;justify-content:center;padding:0;
  cursor:pointer;box-shadow:0 3px 0 var(--ink);flex-shrink:0}
.iconbtn svg{width:17px;height:17px}
.iconbtn:active{transform:translateY(2px);box-shadow:0 1px 0 var(--ink)}

.sheet{position:fixed;inset:0;z-index:40;display:flex;align-items:center;justify-content:center;
  padding:18px;background:color-mix(in srgb,var(--ink) 78%,transparent)}
.sheet[hidden]{display:none}
.sheet.solid{background:linear-gradient(163deg,var(--sky-a) 0%,var(--sky-b) 100%)}
.sheetin{width:100%;max-width:460px;max-height:100%;overflow:auto}
.sheetin.center{display:flex;flex-direction:column;align-items:center;gap:18px;text-align:center;overflow:visible}
.pickgrid{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.pickgrid button{background:var(--cream);border:3.5px solid var(--ink);border-radius:18px;
  box-shadow:var(--shadow);cursor:pointer;padding:16px 12px;font:800 14.5px/1.1 var(--font);
  color:var(--ink);min-height:82px;display:flex;flex-direction:column;justify-content:center;gap:6px}
.pickgrid button span{font:700 11px/1.1 var(--font);opacity:.55}
.pickgrid button:active{transform:translateY(3px);box-shadow:0 1px 0 var(--ink)}
.rotico{width:74px;height:74px;color:var(--ink);animation:tilt 2.4s ease-in-out infinite}
@keyframes tilt{0%,45%{transform:rotate(0)}60%,100%{transform:rotate(-90deg)}}
.rotmsg{font:800 18px/1.1 var(--font);color:var(--ink);margin:0;max-width:19ch}
@media (prefers-reduced-motion:reduce){.rotico{animation:none;transform:rotate(-90deg)}}

/* Landscape: the stage takes the width, the talking and the button move beside it.
   Otherwise a wide short phone gives the game a letterbox strip to play in. */
@media (orientation:landscape) and (max-height:560px){
  .app{flex-direction:row;gap:10px;max-width:none;align-items:stretch}
  .stage{flex:1 1 auto;order:1}
  .side{display:flex;flex-direction:column;gap:8px;width:238px;flex-shrink:0;order:2;justify-content:center}
  .top{position:absolute;top:6px;left:10px;right:10px;width:auto;z-index:5}
  .app{padding-top:44px}
  .say{padding:10px 12px}
  .line{font-size:calc(15px * var(--a11y-scale))}
  .go{padding:12px 8px;font-size:calc(15px * var(--a11y-scale))}
  .keypad button{padding:7px 0;font-size:calc(17px * var(--a11y-scale))}
  .read .n{font-size:calc(22px * var(--a11y-scale))}
}

/* ---- touch: stop the browser hijacking the gesture ----
   Dragging a slingshot was selecting text and double-tapping was zooming the
   page. iOS ignores user-scalable=no, so touch-action is the only real fix. */
*{ -webkit-user-select:none; user-select:none; -webkit-touch-callout:none; }
button, .seg button, .keypad button, .iconbtn{ touch-action:manipulation; }
.stage, .stage svg, .stage canvas{ touch-action:none; }
.app{ touch-action:manipulation; }

/* ---- keypad and controls: shadows were eating the gaps ---- */
.keypad{ gap:11px; }
.ctl{ gap:11px; }
.app{ gap:10px; }

/* ---- entrances: staggered, small, and quiet ---- */
@keyframes rise{ from{ opacity:0; transform:translateY(16px) } to{ opacity:1; transform:none } }
@keyframes popin{ from{ opacity:0; transform:scale(.94) } to{ opacity:1; transform:none } }
.app.enter .stage{ animation:popin .34s cubic-bezier(.2,.9,.3,1) both; }
.app.enter .say{ animation:rise .34s cubic-bezier(.2,.9,.3,1) both .06s; }
.app.enter .ctl{ animation:rise .34s cubic-bezier(.2,.9,.3,1) both .12s; }
.app.enter .keypad{ animation:rise .34s cubic-bezier(.2,.9,.3,1) both .16s; }

/* the tag lands a beat after the card it sits on */
@keyframes tagdrop{ from{ opacity:0; transform:rotate(-2.5deg) translateY(-8px) scale(.9) }
                    to{ opacity:1; transform:rotate(-2.5deg) } }
.app.enter .tag{ animation:tagdrop .3s cubic-bezier(.2,.9,.3,1) both .18s; }

/* pressing anything should feel like pressing something */
.step, .go, .keypad button, .iconbtn, .seg button{ transition:transform .07s ease, box-shadow .07s ease; }

@media (prefers-reduced-motion:reduce){
  .app.enter .stage, .app.enter .say, .app.enter .ctl,
  .app.enter .keypad, .app.enter .tag{ animation:none }
}

/* ---------- compact keypad ----------
   It was a third of the screen in portrait and squashed the game into a strip.
   Smaller keys, tighter gaps, and a hard ceiling on how much it may take. */
.keypad{ gap:7px; max-height:30dvh; }
.keypad button{ padding:6px 0; font-size:calc(16px * var(--a11y-scale)); border-width:3px; border-radius:11px;
  box-shadow:0 3px 0 var(--ink); min-height:0; }
.keypad button svg{ width:24px; height:20px }
.read .n{ font-size:calc(22px * var(--a11y-scale)) }
.read, .step{ border-width:3px; box-shadow:0 3px 0 var(--ink) }
.step{ width:46px }
.go{ padding:11px 10px; font-size:calc(15.5px * var(--a11y-scale)); border-width:3px; box-shadow:0 3px 0 var(--ink) }

/* ---------- landscape is the normal case now ---------- */
@media (orientation:landscape){
  .app{ flex-direction:row; gap:10px; max-width:none; align-items:stretch; padding-top:46px }
  .stage{ flex:1 1 auto; order:1 }
  .side{ display:flex; flex-direction:column; gap:7px; width:214px; flex-shrink:0;
         order:2; justify-content:center }
  .top{ position:absolute; top:6px; left:10px; right:10px; width:auto; z-index:5 }
  .say{ padding:9px 11px }
  .line{ font-size:calc(14.5px * var(--a11y-scale)) }
  .keypad{ max-height:none; gap:6px }
  .keypad button{ padding:4px 0; font-size:calc(15px * var(--a11y-scale)) }
  .go{ padding:10px 8px; font-size:calc(14.5px * var(--a11y-scale)) }
  .read .n{ font-size:calc(19px * var(--a11y-scale)) }
  .step{ width:40px }
}

/* ============================================================
   GAME PICKER — a 3D card deck you throw left and right.
   Built with CSS transforms and one rAF loop, no animation
   library: the whole behaviour is ~70 lines and GSAP would be
   70KB vendored for a single screen.
   ============================================================ */
#picker{ flex-direction:column; gap:0; padding:0;
  background:radial-gradient(120% 90% at 50% 0%, #1B2A44 0%, #0C1118 70%); }
.deckhead{ position:absolute; top:calc(14px + env(safe-area-inset-top)); left:0; right:0;
  display:flex; justify-content:center; pointer-events:none; z-index:3 }
.brand{ height:26px; opacity:.9 }

.deckwrap{ position:relative; flex:1; width:100%; display:flex; align-items:center;
  justify-content:center; perspective:1100px; overflow:hidden }
.deck{ position:relative; width:100%; height:100%; transform-style:preserve-3d;
  touch-action:pan-y; cursor:grab }
.deck:active{ cursor:grabbing }

.gcard{ position:absolute; top:50%; left:50%; width:min(60vw,238px); aspect-ratio:3/4;
  margin:0; border:0; padding:0; border-radius:26px; overflow:hidden; cursor:pointer;
  transform-origin:50% 50%; will-change:transform,opacity;
  box-shadow:0 26px 48px rgba(0,0,0,.5), 0 3px 0 rgba(0,0,0,.4);
  display:flex; flex-direction:column; align-items:center; justify-content:flex-end;
  font-family:var(--font); -webkit-tap-highlight-color:transparent }
.gcard::after{ content:""; position:absolute; inset:0; border-radius:26px;
  box-shadow:inset 0 0 0 3px rgba(0,0,0,.35), inset 0 40px 60px rgba(255,255,255,.14) }
.gcard .ico{ position:absolute; top:12%; left:50%; transform:translateX(-50%);
  width:46%; filter:drop-shadow(0 8px 12px rgba(0,0,0,.3)) }
.gcard .who{ position:relative; z-index:2; width:62%; margin-bottom:56px;
  filter:drop-shadow(0 10px 14px rgba(0,0,0,.35)) }
.gcard .cap{ position:absolute; left:0; right:0; bottom:0; z-index:3;
  padding:11px 12px 13px; font:800 14.5px/1.15 var(--font); color:#fff; text-align:center;
  background:linear-gradient(to top, rgba(0,0,0,.55), rgba(0,0,0,0)) }

.deckarrow{ position:absolute; top:50%; transform:translateY(-50%); z-index:5;
  width:40px; height:40px; border-radius:99px; border:0; cursor:pointer;
  background:rgba(255,255,255,.12); color:#fff; display:flex; align-items:center;
  justify-content:center; backdrop-filter:blur(6px) }
.deckarrow svg{ width:22px; height:22px }
.deckarrow.l{ left:10px } .deckarrow.r{ right:10px }
@media (max-width:520px){ .deckarrow{ display:none } }

.deckdots{ display:flex; gap:6px; justify-content:center; flex-wrap:wrap;
  padding:0 20px calc(18px + env(safe-area-inset-bottom)); z-index:3 }
.deckdots i{ width:6px; height:6px; border-radius:99px; background:rgba(255,255,255,.28) }
.deckdots i.on{ background:#fff; transform:scale(1.35) }

@media (orientation:landscape) and (max-height:560px){
  .gcard{ width:min(34vw,196px) }
  .brand{ height:20px }
  .deckdots{ padding-bottom:8px }
}

/* the speaker, present rather than merely named */
.say{ position:relative; padding-inline-start:74px }
.portrait{ position:absolute; inset-inline-start:6px; bottom:4px; width:66px;
  filter:drop-shadow(0 4px 6px rgba(0,0,0,.28)); pointer-events:none }
.portrait[hidden]{ display:none }
.say.noportrait{ padding-inline-start:14px }
@media (orientation:landscape) and (max-height:560px){
  .say{ padding-inline-start:58px } .portrait{ width:52px }
}

/* ---- rotate screen: solid orange, logo above the phone ---- */
.sheet.solid{ background:#F2820C }
#rotate .sheetin.center{ gap:22px }
.rotbrand{ height:26px; opacity:.95 }
.rotico{ color:#241503 }
.rotmsg{ color:#241503 }

/* ---- card art: never upscale past what the source can carry ----
   The official cutouts are 130-220px. Rendering them at 62% of a 238px card
   meant asking a 150px image to fill 300 device pixels, which is what made
   them soft. Smaller and crisp beats bigger and mushy. */
.gcard .who{ width:46%; max-width:118px; margin-bottom:52px; image-rendering:auto }
.gcard .ico{ width:40%; top:11% }

/* ══════════════════════════════════════════════════════════════
   MODERN CHROME PASS
   Replaces the heavy 3.5px outlines and hard offset shadows. The
   chunky look stays inside the play area, where it belongs; the
   controls around it get out of the way.
   ══════════════════════════════════════════════════════════════ */
:root{
  --surface:#FFFDF8;
  --surface-2:#F4EFE6;
  --line-soft:rgba(25,22,34,.10);
  --lift:0 1px 2px rgba(25,22,34,.06), 0 6px 16px rgba(25,22,34,.10);
  --lift-sm:0 1px 2px rgba(25,22,34,.05), 0 3px 8px rgba(25,22,34,.08);
}

.say{
  background:var(--surface); border:1px solid var(--line-soft);
  border-radius:20px; box-shadow:var(--lift); padding:13px 15px 14px;
}
.tag{
  border:0; border-radius:99px; padding:4px 12px; transform:none;
  box-shadow:none; font-weight:700; font-size:calc(14.5px * var(--a11y-scale)); letter-spacing:.01em;
}
.line{ font-weight:600; letter-spacing:.005em }

.keypad{ gap:9px }
.keypad button{
  background:var(--surface); border:1px solid var(--line-soft);
  border-radius:16px; box-shadow:var(--lift-sm);
  font-weight:600; font-size:calc(19px * var(--a11y-scale)); color:var(--ink); padding:11px 0;
}
.keypad button:active{ transform:scale(.96); box-shadow:none; background:var(--surface-2) }

.step, .read{
  background:var(--surface); border:1px solid var(--line-soft);
  border-radius:16px; box-shadow:var(--lift-sm);
}
.step{ width:52px }
.step:active{ transform:scale(.96); box-shadow:none; background:var(--surface-2) }
.read .n{ font-weight:700 }

.go{
  border:0; border-radius:16px; box-shadow:none;
  font-weight:700; letter-spacing:.01em; padding:14px 12px;
  background:linear-gradient(180deg,#FBB03B,#F2820C); color:#231402;
}
.go.done{ background:linear-gradient(180deg,#18C0B2,#0E9488); color:#fff }
.go:active{ transform:scale(.985); box-shadow:none }
/* NIC-1021: בדוק sits dimmed under the teach card until there is something to
   check — never a "Start" whose only job is to relabel itself. */
.go:disabled{ opacity:.45; cursor:default; filter:saturate(.35) }
.go:disabled:active{ transform:none }

.stage{ border:0; border-radius:22px; box-shadow:var(--lift) }

.iconbtn{ border:1px solid var(--line-soft); background:var(--surface);
  box-shadow:var(--lift-sm); width:36px; height:36px }
.iconbtn:active{ transform:scale(.94); box-shadow:none }
.seg{ border:1px solid var(--line-soft); background:var(--surface);
  box-shadow:var(--lift-sm); padding:3px }
.seg button{ font-weight:700; padding:6px 10px; border-radius:99px }
.seg button[aria-pressed="true"]{ background:var(--ink); color:var(--surface) }

.dot{ border:0; height:5px; background:rgba(25,22,34,.16) }
.dot.on{ background:var(--amber) }
.dot.now{ background:var(--ink); opacity:.55 }

/* the way back to the deck, on the rotate screen too */
.rotgrid{ background:rgba(255,255,255,.9); color:#241503; border:0 }

@media (orientation:landscape) and (max-height:560px){
  .keypad{ gap:7px }
  .keypad button{ padding:8px 0; font-size:calc(17px * var(--a11y-scale)); border-radius:13px }
  .step{ width:44px } .step, .read, .keypad button{ border-radius:13px }
  .go{ padding:11px 10px; border-radius:13px }
  .say{ padding:10px 12px; border-radius:16px }
}

/* ══════════════════════════════════════════════════════════════
   BREATHING ROOM
   Everything was touching everything: the speech card sat on the
   keypad, the keypad sat on the button, and the portrait was laid
   OVER the text instead of beside it.
   ══════════════════════════════════════════════════════════════ */
.app{ gap:14px }
.ctl{ gap:12px }
.keypad{ gap:11px; margin-top:2px }
.say{ margin-bottom:2px }

/* The portrait is a sibling of the text, never a layer on top of it.
   It gets its own column and the copy starts after it. */
/* Was overflow:hidden — it silently CLIPPED long questions (kids could not
   read the whole prompt, e.g. the g5 division "Parking Lot" stem). Scroll the
   overflow instead so no text is ever lost; short prompts show no scrollbar. */
.say{ position:relative; padding-inline-start:0; overflow-y:auto; overflow-x:hidden }
.say.hasportrait{ padding-inline-start:82px }
.portrait{
  position:absolute; inset-inline-start:8px; bottom:0; width:70px;
  max-height:100%; object-fit:contain; object-position:bottom;
  filter:drop-shadow(0 3px 5px rgba(0,0,0,.22)); pointer-events:none; z-index:0;
}
.say .tag, .say .line{ position:relative; z-index:1 }
.say.noportrait{ padding-inline-start:0 }

@media (orientation:landscape) and (max-height:560px){
  .app{ gap:10px }
  .keypad{ gap:8px }
  .say.hasportrait{ padding-inline-start:62px }
  .portrait{ width:54px; inset-inline-start:6px }
}

/* ══════════════════════════════════════════════════════════════
   THE CRUSH
   .side was only given flex rules in landscape. In portrait it was a
   default flex child, so .stage{flex:1} claimed 600px and squeezed
   .side to 162px while its contents needed ~400px — the speech card,
   keypad and button overflowed their own container and drew on top of
   each other. Every "everything is touching" report is this one bug.
   The controls are load-bearing: they size first, the stage takes the rest.
   ══════════════════════════════════════════════════════════════ */
.side{
  display:flex; flex-direction:column; gap:12px;
  flex:0 0 auto;              /* never shrink the controls */
  min-height:0;
}
.stage{ flex:1 1 0; min-height:140px }

/* Actions sit in one row with real separation from the keypad above. */
.ctl.actions{ gap:10px; margin-top:2px }
.ctl.actions .go{ flex:1 }
.aux{
  flex:0 0 auto; padding:0 16px; min-height:52px;
  background:var(--cream); border:2px solid rgba(25,22,34,.16); border-radius:16px;
  font:800 15px/1 var(--font); color:var(--ink); cursor:pointer;
  box-shadow:0 2px 6px rgba(25,22,34,.10);
}
.aux[hidden]{ display:none }
.aux:disabled{ opacity:.4; cursor:default }
.aux.retry{ background:var(--amber); border-color:rgba(25,22,34,.22) }

@media (orientation:landscape) and (max-height:560px){
  .side{ flex:0 0 238px; justify-content:center; gap:9px }
  .aux{ min-height:44px; padding:0 12px; font-size:calc(15px * var(--a11y-scale)) }
}

/* Red is reserved for "that is wrong". Coaching and stage directions are not
   wrong, and colouring them like errors taught children to read progress as
   failure. Wrong is a warm amber; next-step guidance is plain ink. */
.line.k-warn{ color:#B4531F }
.line.k-step{ color:var(--ink) }
.line.k-hint{ color:#0B6E86 }

/* In landscape the control column is centred. When its content is taller than
   the column, plain `center` overflows BOTH ends — pushing the speech card up
   under the top bar. `safe` centres only while there is room, then falls back
   to the start edge. */
@media (orientation:landscape){
  .side{ justify-content:safe center }
  .app{ padding-top:50px }
}

/* Landscape is 390px tall and the control column has to hold a speech card, a
   readout, a 4-row keypad and the action row. Measured: 356 needed against 340
   usable. Rather than let `safe center` push the overflow off the bottom, take
   the deficit out of padding and type, which nobody misses at this size. */
@media (orientation:landscape) and (max-height:480px){
  .app{ padding-top:46px }
  .side{ gap:6px }
  .say{ padding:7px 10px }
  .line{ font-size:calc(14.5px * var(--a11y-scale)) }
  .tag{ font-size:calc(14px * var(--a11y-scale)); padding:2px 8px }
  .keypad{ gap:5px }
  .keypad button{ padding:3px 0; font-size:calc(14.5px * var(--a11y-scale)); border-radius:10px }
  .read{ min-height:0 } .read .n{ font-size:calc(18px * var(--a11y-scale)) }
  .aux, .go{ min-height:38px; font-size:calc(15px * var(--a11y-scale)) }
  .ctl.actions{ gap:7px; margin-top:0 }
  .portrait{ width:48px }
  .say.hasportrait{ padding-inline-start:56px }
}

/* `.ctl{display:flex}` beats the [hidden] attribute's UA display:none, so the
   readout row kept rendering after the engine hid it. .keypad already carried
   this rule for the same reason. */
.ctl[hidden]{ display:none !important }

/* The portrait work set `padding-inline-start:0` on .say and relied on
   .hasportrait to put it back. Levels with no portrait therefore had text
   flush against the card edge — 1px in RTL. The card keeps its own padding;
   only the portrait variant widens it. */
/* `.say.noportrait{padding-inline-start:0}` further up is two classes and beats
   a bare `.say`, so it kept winning — and `noportrait` is set exactly when there
   is no portrait, which is the case that looked broken. Matched specificity. */
.say, .say.noportrait{ padding-inline-start:15px }
.say.hasportrait{ padding-inline-start:82px }
@media (orientation:landscape) and (max-height:480px){
  .say, .say.noportrait{ padding-inline-start:11px }
  .say.hasportrait{ padding-inline-start:56px }
}

/* ══════════════════════════════════════════════════════════════
   CLASS MODE SCREENS
   ══════════════════════════════════════════════════════════════ */
.modewrap{ gap:22px }
.modes{ display:flex; flex-direction:column; gap:14px; width:100%; max-width:340px }
.mode{
  display:flex; flex-direction:column; align-items:center; gap:5px;
  background:var(--paper); border:2px solid rgba(25,22,34,.14); border-radius:20px;
  padding:22px 18px; cursor:pointer; color:var(--ink);
  box-shadow:0 3px 12px rgba(25,22,34,.14);
}
.mode:active{ transform:translateY(2px) }
.modeico{ width:38px; height:38px; color:var(--teal) }
.modeh{ font:800 19px/1.1 var(--font) }
.modep{ font:500 13px/1.25 var(--font); opacity:.62; text-align:center }

.setwrap{ display:flex; flex-direction:column; gap:12px; width:100%; max-width:460px; padding:4px }
.sethead{ display:flex; align-items:center; gap:10px }
.seth{ font:800 20px/1.1 var(--font); color:#fff; margin:0 }
.setlist{ display:flex; flex-direction:column; gap:10px; overflow:auto; max-height:70dvh }
.setcard{
  display:flex; flex-direction:column; align-items:flex-start; gap:3px; width:100%;
  background:var(--paper); border:2px solid rgba(25,22,34,.12); border-radius:16px;
  padding:15px 16px; cursor:pointer; color:var(--ink); text-align:start;
  box-shadow:0 2px 8px rgba(25,22,34,.12);
}
.setcard:active{ transform:translateY(2px) }
.setname{ font:800 16px/1.2 var(--font) }
.setmeta{ font:500 12.5px/1.2 var(--font); opacity:.6 }
.setempty{ color:#fff; opacity:.85; font:500 14px/1.4 var(--font); text-align:center }

.donewrap{ gap:16px }
.donering{
  width:112px; height:112px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  background:var(--paper); border:5px solid var(--teal); color:var(--ink);
  font:800 27px/1 var(--font);
}
.doneh{ font:800 21px/1.15 var(--font); color:#fff; margin:0; text-align:center }
.donestats{ display:grid; grid-template-columns:1fr 1fr; gap:9px; width:100%; max-width:340px }
.dstat{
  background:var(--paper); border-radius:13px; padding:10px 12px; text-align:center;
  display:flex; flex-direction:column; gap:1px;
}
.dstat b{ font:800 17px/1 var(--font); color:var(--ink) }
.dstat span{ font:500 11.5px/1.15 var(--font); opacity:.6; color:var(--ink) }
.donebtns{ display:flex; gap:10px; width:100%; max-width:340px }
.donebtns .go{ flex:1 }

@media (orientation:landscape) and (max-height:480px){
  .modes{ flex-direction:row; max-width:none }
  .mode{ flex:1; padding:14px 12px }
  .modeico{ width:28px; height:28px }
  .modeh{ font-size:calc(16px * var(--a11y-scale)) } .modep{ font-size:calc(14px * var(--a11y-scale)) }
  .setlist{ max-height:58dvh }
  .donering{ width:78px; height:78px; font-size:calc(20px * var(--a11y-scale)); border-width:4px }
  .donestats{ grid-template-columns:repeat(4,1fr) }
}

/* The pedagogic subject, under the game name. Small and quiet — it is there so a
   parent or teacher can see what a card actually teaches without opening it. */
.gcard .sub{
  font:600 11.5px/1.2 var(--font); opacity:.78; margin-top:3px;
  padding:0 10px; text-align:center; max-width:100%;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden;
}
@media (orientation:landscape) and (max-height:480px){
  .gcard .sub{ font-size:calc(14px * var(--a11y-scale)); -webkit-line-clamp:2 }
}

/* ══════════════════════════════════════════════════════════════
   ACCESSIBILITY  (NIC-679)
   One token drives type everywhere, so all mechanics inherit the scale
   without fifteen separate implementations. Children's base is already
   larger than an adult app would use — 1.0 here is not 1.0 elsewhere.
   ══════════════════════════════════════════════════════════════ */
:root{ --a11y-scale:1; }
/* AT SCALE 1 THIS MUST BE PIXEL-FOR-PIXEL v1. The accessibility scale is opt-in:
   a child who never opens the menu sees exactly the layout that already worked.
   I originally raised the base sizes here and the result was unusable — the
   stage collapsed and the keypad ate the screen. Base values below are v1's. */
.line{ font-size:calc(14.5px * var(--a11y-scale)) }
.tag{ font-size:calc(11.5px * var(--a11y-scale)) }
.go, .aux{ font-size:calc(15.5px * var(--a11y-scale)) }
.keypad button{ font-size:calc(16px * var(--a11y-scale)) }
.read .n{ font-size:calc(22px * var(--a11y-scale)) }
.gcard .cap{ font-size:calc(14px * var(--a11y-scale)) }
.gcard .sub{ font-size:calc(11.5px * var(--a11y-scale)) }

/* Tighter than v1: the buttons carried dead space that bought nothing. Padding
   comes down, the keypad gets its rows back, and the stage keeps the height. */
.keypad{ gap:6px }
.keypad button{ padding:5px 0; border-radius:11px }
.go, .aux{ padding:9px 10px; min-height:0 }
.ctl.actions{ gap:8px; margin-top:0 }
.say{ padding-block:9px 10px }
.side{ gap:8px }

/* 2 — high contrast */
.a11y-contrast{ --ink:#000; --paper:#fff; --cream:#fff; }
.a11y-contrast body{ background:#fff }
.a11y-contrast .say, .a11y-contrast .read, .a11y-contrast .keypad button,
.a11y-contrast .aux, .a11y-contrast .setcard{ background:#fff; color:#000; border:2.5px solid #000 }
.a11y-contrast .go{ background:#000; color:#fff; border:2.5px solid #000 }
.a11y-contrast .line{ color:#000 !important }
.a11y-contrast .stage{ outline:3px solid #000 }

/* 3 — highlight every interactive target */
.a11y-highlight button, .a11y-highlight .gcard, .a11y-highlight .setcard, .a11y-highlight .mode{
  outline:3px solid #0B6E86; outline-offset:2px;
}

/* 4 — readable font */
.a11y-dyslexic, .a11y-dyslexic body, .a11y-dyslexic button, .a11y-dyslexic .line{
  font-family:"Atkinson Hyperlegible","Verdana","Tahoma",system-ui,sans-serif !important;
  letter-spacing:.02em;
}

/* 5 — stop animations. Mechanics whose TASK is motion opt out in code and are
       listed in the ticket reply rather than silently broken. */
.a11y-nomotion *{ animation:none !important; transition:none !important; scroll-behavior:auto !important }

/* 7 — text alignment */
.a11y-align-start .line, .a11y-align-start .setname{ text-align:start !important }

/* 9 — line and letter spacing */
.a11y-spacing .line{ line-height:1.9 !important; letter-spacing:.06em; word-spacing:.14em }

/* 8 — reading mask: a band that follows the pointer and dims everything else */
.a11y-mask::after{
  content:""; position:fixed; inset:0; pointer-events:none; z-index:60;
  background:linear-gradient(to bottom,
    rgba(0,0,0,.55) 0, rgba(0,0,0,.55) calc(var(--mask-y,50%) - 34px),
    transparent calc(var(--mask-y,50%) - 34px), transparent calc(var(--mask-y,50%) + 34px),
    rgba(0,0,0,.55) calc(var(--mask-y,50%) + 34px), rgba(0,0,0,.55) 100%);
}

/* 6 — keyboard navigation: a focus ring that is actually visible */
:focus-visible{ outline:4px solid #0B6E86 !important; outline-offset:3px !important; border-radius:6px }

/* the wheelchair button, on every screen */
/* It lives in the top bar, not floating. Floating bottom-right put it directly
   on top of the Hint button in RTL — an accessibility control that covers a
   game control is worse than no button. */
#a11ybtn svg{ width:17px; height:17px }
.a11y-contrast .iconbtn{ background:#fff; border-color:#000; color:#000 }

.a11ywrap{ display:flex; flex-direction:column; gap:12px; width:100%; max-width:440px; padding:4px }
.a11yh{ font:800 21px/1.1 var(--font); color:#fff; margin:0; text-align:center }
.a11yrows{ display:flex; flex-direction:column; gap:8px; max-height:62dvh; overflow:auto }
.a11yrow{ display:flex; align-items:center; justify-content:space-between; gap:10px;
  background:var(--paper); border-radius:13px; padding:11px 13px }
.a11ylab{ font:700 14.5px/1.2 var(--font); color:var(--ink) }
.a11ysw{ min-width:74px; border-radius:99px; border:2px solid rgba(25,22,34,.18);
  background:var(--cream); color:var(--ink); font:800 12.5px var(--font); padding:7px 12px; cursor:pointer }
.a11ysw[data-on="1"]{ background:var(--teal); color:#fff; border-color:var(--teal) }
.a11ysize{ display:flex; align-items:center; gap:8px }
.a11ysize button{ width:40px; height:36px; border-radius:10px; border:2px solid rgba(25,22,34,.18);
  background:var(--cream); font:800 14px var(--font); cursor:pointer }
.a11yval{ min-width:52px; text-align:center; font:800 13.5px var(--font) }
.a11yalways{ font:800 12.5px var(--font); color:var(--teal) }
.a11ybtns{ display:flex; gap:10px }
.a11ybtns .go{ flex:1 }

/* ══════════════════════════════════════════════════════════════
   SPLASH — what just happened, big enough to notice
   ══════════════════════════════════════════════════════════════ */
.splash{ position:fixed; inset:0; z-index:80; display:flex; align-items:center; justify-content:center;
  padding:22px; background:rgba(12,10,18,.62); backdrop-filter:blur(3px) }
.splash[hidden]{ display:none }
.splashin{ background:var(--paper); border-radius:26px; padding:28px 24px 22px; width:100%; max-width:400px;
  display:flex; flex-direction:column; align-items:center; gap:12px; text-align:center;
  box-shadow:0 16px 40px rgba(0,0,0,.3) }
.splashmark{ width:96px; height:96px; border-radius:50%; display:flex; align-items:center; justify-content:center }
.splashmark svg{ width:56px; height:56px }
.splash.good .splashmark{ background:rgba(18,166,155,.16); color:var(--teal) }
.splash.again .splashmark{ background:rgba(245,165,36,.18); color:#B4531F }
.splashh{ margin:0; font:800 calc(20px * var(--a11y-scale))/1.15 var(--font); color:var(--ink) }
.splashp{ margin:0; font:600 calc(14px * var(--a11y-scale))/1.35 var(--font); color:var(--ink); opacity:.78 }
.splashgo{ width:100%; margin-top:4px }
.a11y-nomotion .splashin{ animation:none !important }
.splash:not(.a11y-nomotion) .splashin{ animation:pop .26s cubic-bezier(.2,.9,.3,1.1) both }
@keyframes pop{ from{ transform:scale(.9); opacity:0 } to{ transform:scale(1); opacity:1 } }

/* At a large type scale the control column outgrows the screen and the Check
   button lands below the fold — measured 36px off at 200%. The stage is the
   only thing that can give, so it does; and past that the controls scroll, so
   nothing is ever unreachable. A button you cannot reach fails the requirement
   just as hard as text you cannot read. */
.app{ --stage-min:140px }
.stage{ min-height:var(--stage-min) }
@supports (min-height: calc(1px * 1)) {
  .app{ --stage-min: max(84px, calc(200px - (var(--a11y-scale) - 1) * 260px)) }
}
.side{ max-height:100%; overflow-y:auto; overscroll-behavior:contain }
.side::-webkit-scrollbar{ width:6px }
.side::-webkit-scrollbar-thumb{ background:rgba(25,22,34,.25); border-radius:99px }
/* the action row must stay visible while the rest scrolls under it */
.ctl.actions{ position:sticky; bottom:0; background:inherit; padding-top:4px }

/* ══════════════════════════════════════════════════════════════
   GAME GRID — all 33 visible and scrollable, replacing the carousel.
   The carousel looked good and hid 30 of the games behind a swipe.
   ══════════════════════════════════════════════════════════════ */
.grid{
  display:grid; gap:11px; width:100%; max-width:1100px; margin:0 auto;
  grid-template-columns:repeat(2,1fr);
  overflow-y:auto; overscroll-behavior:contain;
  max-height:calc(100dvh - 118px); padding:2px 2px 18px;
  align-content:start;
}
@media (min-width:560px){ .grid{ grid-template-columns:repeat(3,1fr) } }
@media (min-width:820px){ .grid{ grid-template-columns:repeat(4,1fr) } }
@media (min-width:1100px){ .grid{ grid-template-columns:repeat(5,1fr) } }

/* the tile: icon, character, name, and the pedagogic subject under it */
.grid .gcard{
  position:static; transform:none !important; opacity:1 !important;
  width:auto; height:auto; min-height:0;
  display:flex; flex-direction:column; align-items:center; justify-content:flex-start;
  gap:3px; padding:12px 9px 11px; border-radius:17px;
  border:2.5px solid rgba(0,0,0,.16); box-shadow:0 3px 9px rgba(0,0,0,.2);
  cursor:pointer; overflow:hidden;
}
.grid .gcard .ico{ width:34px; height:34px; margin:0 }
.grid .gcard .who{ width:44px; height:52px; object-fit:contain; object-position:bottom; margin:0 }
.grid .gcard .cap{ font-weight:800; line-height:1.15; text-align:center; color:#fff;
  text-shadow:0 1px 2px rgba(0,0,0,.35) }
.grid .gcard .sub{
  font-weight:600; line-height:1.2; text-align:center; color:#fff; opacity:.9;
  display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden;
  padding:0; margin-top:1px;
}
.grid .gcard:active{ transform:translateY(2px) !important }
@media (orientation:landscape) and (max-height:480px){
  .grid{ max-height:calc(100dvh - 84px); grid-template-columns:repeat(4,1fr); gap:8px }
  .grid .gcard{ padding:8px 6px 9px }
  .grid .gcard .who{ width:34px; height:38px }
  .grid .gcard .ico{ width:24px; height:24px }
}

/* The carousel positioned .gcard AND its children absolutely, with a 3/4
   aspect ratio and a gloss ::after. Overriding only the card left the icon and
   caption still absolute, so tiles rendered as overlapping colour bars with the
   text off-card. Reset the whole subtree, not just the parent. */
.grid .gcard{ position:static !important; top:auto !important; left:auto !important;
  aspect-ratio:auto !important; width:auto !important; max-width:none !important }
.grid .gcard::after{ display:none !important }
.grid .gcard .ico{ position:static !important; transform:none !important;
  top:auto !important; left:auto !important; width:32px !important; height:32px !important;
  margin:0 !important; flex:0 0 auto }
.grid .gcard .who{ position:static !important; transform:none !important;
  width:46px !important; max-width:none !important; height:50px !important;
  margin:0 !important; z-index:auto !important; flex:0 0 auto }
.grid .gcard .cap{ position:static !important; left:auto !important; right:auto !important;
  bottom:auto !important; padding:0 !important; background:none !important;
  z-index:auto !important; width:100% }
.grid .gcard .sub{ position:static !important; width:100% }

/* #picker inherits .sheet, which is a ROW flex with align-items:center — built
   for one centred carousel. The grid became a centred row item and collapsed to
   31px while its children needed 98. Make the picker a column that stacks the
   header above a grid allowed to take the remaining height and scroll. */
#picker{ flex-direction:column; align-items:stretch; justify-content:flex-start;
  gap:10px; padding:14px 12px 10px }
#picker .deckhead{ flex:0 0 auto; display:flex; justify-content:center }
#picker .grid{ flex:1 1 auto; min-height:0; max-height:none; align-self:stretch;
  /* the floating exit pill is fixed over the corner; the grid scrolls its
     last row clear of it instead of ending underneath */
  padding-bottom:64px }
.grid{ grid-auto-rows:min-content }
.grid .gcard{ min-height:118px }
@media (orientation:landscape) and (max-height:480px){
  #picker{ padding:8px 10px 6px; gap:6px }
  .grid .gcard{ min-height:92px }
}

/* .deckhead was absolutely positioned so the carousel could sit under it. In a
   column layout that made the logo float over the first row of tiles. */
#picker .deckhead{ position:static; top:auto; left:auto; right:auto; padding:0 0 2px }

/* ── the homework board ───────────────────────────────────────────
   Numbered tiles, the whole assignment visible at once. Modelled on the level
   map every child already understands from the games they play at home: a
   number, stars you earned, and a padlock on what is not open yet.

   Only three states exist and each is unmistakable at arm's length — an open
   tile is bright and raised, a finished tile carries its stars, a locked tile
   is flat and grey. A six-year-old should not have to read anything to know
   which is which. */
#sets .setwrap{ display:flex; flex-direction:column; align-items:stretch;
  gap:10px; padding:12px 12px 14px; height:100%; min-height:0 }
.sethead{ display:flex; align-items:center; gap:8px; flex:0 0 auto }
.seth{ flex:1 1 auto; margin:0; font-size:calc(17px * var(--a11y-scale)); font-weight:800 }
.starcount{ display:inline-flex; align-items:center; gap:3px;
  background:rgba(255,255,255,.14); border-radius:999px; padding:3px 9px 3px 7px;
  font-size:calc(13px * var(--a11y-scale)); font-weight:800 }
.starcount i{ display:block; width:13px; height:13px }
.starcount svg{ width:100%; height:100%; fill:#F5C518 }
.starcount span{ opacity:.6; font-weight:700 }

.map{ flex:1 1 auto; min-height:0; overflow-y:auto; display:flex;
  flex-direction:column; gap:14px; padding:2px 2px 6px }
.cohort{ display:flex; flex-direction:column; gap:7px }
.cohorth{ display:flex; align-items:baseline; gap:8px }
.cohortn{ margin:0; font-size:calc(13.5px * var(--a11y-scale)); font-weight:800;
  flex:1 1 auto; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.cohortp{ font-size:calc(12px * var(--a11y-scale)); font-weight:700; opacity:.62;
  font-variant-numeric:tabular-nums }

/* Five across on a phone, which is what the numbering in the brief implies and
   what keeps a tile big enough for a small finger. */
.tiles{ display:grid; grid-template-columns:repeat(5,1fr); gap:8px }
@media (min-width:520px){ .tiles{ grid-template-columns:repeat(7,1fr) } }
@media (min-width:900px){ .tiles{ grid-template-columns:repeat(9,1fr) } }

.tile{ position:relative; aspect-ratio:1/1; min-height:52px; border:0; cursor:pointer;
  border-radius:14px; padding:0; display:flex; flex-direction:column;
  align-items:center; justify-content:center; gap:2px;
  background:linear-gradient(#DCF07A,#BEDD4A); color:#2C3908;
  box-shadow:0 3px 0 #8FAE2A, 0 5px 10px rgba(0,0,0,.22);
  font-family:inherit; transition:transform .12s ease, box-shadow .12s ease }
.tile:active{ transform:translateY(2px); box-shadow:0 1px 0 #8FAE2A, 0 2px 5px rgba(0,0,0,.22) }
.tile .tnum{ font-size:calc(19px * var(--a11y-scale)); font-weight:900; line-height:1;
  font-variant-numeric:tabular-nums }
.tile .tstars{ display:flex; gap:1px; height:11px }
.tile .tstars i{ display:block; width:11px; height:11px }
.tile .tstars svg{ width:100%; height:100%; fill:rgba(44,57,8,.17) }
.tile .tstars i.on svg{ fill:#F5A524 }
.tile.done{ background:linear-gradient(#EEFAB0,#D6EC6E) }

/* Locked: visibly not-yet, never scolding. Flat, grey, no shadow to press. */
.tile.lock{ background:rgba(255,255,255,.13); color:rgba(255,255,255,.5);
  box-shadow:none; cursor:default }
.tile.lock:active{ transform:none }
.tile .tlock{ display:block; width:44%; max-width:22px }
.tile .tlock svg{ width:100%; height:100% }

.setempty{ text-align:center; opacity:.7; padding:26px 12px;
  font-size:calc(14px * var(--a11y-scale)) }

.a11y-nomotion .tile{ transition:none }
.a11y-highlight .tile{ outline:2px solid rgba(255,255,255,.55); outline-offset:1px }
.a11y-contrast .tile{ background:#fff; color:#000; box-shadow:0 3px 0 #000 }
.a11y-contrast .tile.lock{ background:#333; color:#bbb; box-shadow:none }

/* Stars and the running total are pictures of a quantity, not sentences: they
   fill left-to-right in every locale. In RTL they were rendering mirrored, so
   "9 of 90" came out as "90/ 9". */
.tile .tstars, .starcount{ direction:ltr }
.tile.next{ box-shadow:0 0 0 3px #fff, 0 3px 0 #8FAE2A, 0 6px 14px rgba(0,0,0,.3) }
.tile.next .tnum{ font-size:calc(21px * var(--a11y-scale)) }

/* ── books and units ──────────────────────────────────────────────
   The grade badge is not decoration. It is the promise that nothing on this
   screen belongs to another year. */
.gradebadge{ background:#fff; color:#E8620A; border-radius:999px; padding:3px 10px;
  font-size:calc(12.5px * var(--a11y-scale)); font-weight:900; white-space:nowrap }

.book{ display:flex; flex-direction:column; gap:8px }
.bookn{ margin:0 2px; font-size:calc(14.5px * var(--a11y-scale)); font-weight:900 }

.unit{ display:flex; flex-direction:column; gap:8px }
/* The cover is an SVG, so the button is a frame and nothing else. */
.unith{ display:block; width:100%; border:0; padding:0; background:none; cursor:pointer;
  border-radius:19px; -webkit-tap-highlight-color:transparent;
  transition:transform .12s ease }
.unith svg{ display:block; width:100%; height:auto }
.unith:active{ transform:translateY(2px) }
.unit.ulock .unith{ cursor:default }
.unit.ulock .unith:active{ transform:none }
.unit.fold .tiles{ display:none }
.a11y-nomotion .unith{ transition:none }
.a11y-highlight .unith{ outline:2px solid rgba(255,255,255,.55); outline-offset:2px }

/* Cohorts are six levels, so the row is six across. Five columns left a single
   orphan tile hanging on its own line under every unit. */
.tiles{ grid-template-columns:repeat(6,1fr); gap:7px }
@media (min-width:520px){ .tiles{ grid-template-columns:repeat(8,1fr) } }
@media (min-width:900px){ .tiles{ grid-template-columns:repeat(10,1fr) } }
.tile{ min-height:46px; border-radius:12px }
.tile .tnum{ font-size:calc(17px * var(--a11y-scale)) }
.book{ gap:9px }
.map{ gap:19px }

/* ============================================================
   DESKTOP — a real tier, not a phone lying down.
   ============================================================
   Until now the only wide-screen rule was `orientation:landscape`,
   which a 1440px monitor and a phone on its side both match. So the
   desktop inherited phone sizing: a 214px rail of 12.5px text floating
   in dead space on the left, and a stage that stretched to 1188px and
   drew apples 300px across. Two different scales on one screen.

   The fix is a composition, not a scale factor:
     · the sidebar is a real panel — wide, opaque, with big type
     · the CTA is the biggest thing in it
     · the stage is CAPPED and PADDED. It sits in the middle of its
       column like a board on a table, rather than filling the wall.
   ============================================================ */
@media (min-width:1024px) and (min-height:600px){
  .app{
    flex-direction:row; align-items:stretch; gap:26px;
    max-width:1560px; margin:0 auto; padding:64px 34px 30px;
  }

  /* ── the board ─────────────────────────────────────────────
     Capped both ways and centred. `aspect-ratio` keeps the scene
     the shape the mechanics were drawn for; without the cap a wide
     monitor stretched every game into a letterbox. */
  .stage{
    order:1; flex:1 1 auto; min-width:0;
    display:flex; align-items:center; justify-content:center;
    background:none; border:0; border-radius:0; box-shadow:none; overflow:visible;
    padding:0;
  }
  .stage svg{
    width:min(100%, 760px); height:auto;
    max-height:100%; aspect-ratio:4/3.4;
    border:4px solid var(--ink); border-radius:26px;
    background:var(--paper);
    box-shadow:0 22px 44px rgba(0,0,0,.28), 0 5px 0 rgba(0,0,0,.22);
  }

  /* ── the sidebar ───────────────────────────────────────────
     A panel a child can read across a classroom, not a caption. */
  .side{
    order:2; width:clamp(420px, 34vw, 560px); flex:0 0 auto;
    display:flex; flex-direction:column; gap:14px; justify-content:center;
  }
  .say{ padding:20px 22px; border-radius:24px; border-width:4px }
  .line{ font-size:calc(20px * var(--a11y-scale)); line-height:1.42 }
  .tag{ font-size:calc(13px * var(--a11y-scale)); padding:3px 12px }

  /* The phone reserves space for the portrait with an inline padding, because
     there the portrait is absolutely positioned. Desktop gives it a real grid
     column further down — so the padding here reserved the character a SECOND
     time and ate 112px of the sentence. 208px of a 308px card went to Arnold
     and the copy wrapped four words to a line. The grid column is the single
     source of the reservation; this tier must not add to it. */
  .say.hasportrait{ padding-inline-start:22px }

  /* ── the CTA ───────────────────────────────────────────────
     The one thing the eye should land on. */
  .actions{ gap:12px }
  .go{
    padding:20px 16px; font-size:calc(23px * var(--a11y-scale));
    border-radius:20px; border-width:4px;
    box-shadow:0 6px 0 rgba(0,0,0,.22);
  }
  .aux{
    padding:16px 14px; font-size:calc(17px * var(--a11y-scale));
    border-radius:18px; border-width:3.5px;
  }

  /* ── the inputs ────────────────────────────────────────────── */
  .keypad{ gap:10px }
  .keypad button{ padding:14px 0; font-size:calc(23px * var(--a11y-scale)); border-radius:16px }
  .read{ padding:10px 14px; border-radius:18px }
  .read .n{ font-size:calc(34px * var(--a11y-scale)) }
  .step{ width:62px; height:62px; border-radius:18px }
  .ctl{ gap:12px }

  .top{ position:absolute; top:16px; left:26px; right:26px; width:auto; z-index:5 }
  .dots{ gap:7px }
}

/* Very wide screens: stop growing the board, grow the margins instead. */
@media (min-width:1600px){
  .app{ gap:40px; padding:72px 48px 36px }
  .stage svg{ width:min(100%, 820px) }
}

/* ============================================================
   THE ROOM — brand surface instead of a grey-blue gradient.
   ============================================================
   Nickelodeon's own language: a hot orange field, soft blobs, a
   splat or two, high contrast ink. The old backdrop was a neutral
   gradient that could have belonged to any utility app; this is
   the thing that stops it reading as a calculator.

   Everything here is CSS — radial gradients and one repeating
   conic pattern. No image requests, so it costs nothing on a
   school connection and it scales to any screen without a raster.
   ============================================================ */
:root{
  --nick-orange:#ff650f; --nick-orange-hot:#ff4f12; --nick-orange-light:#ff8733;
  --nick-purple:#5b1788; --nick-slime:#22e500; --nick-pink:#f5369b;
  --nick-yellow:#ffd727; --nick-cyan:#20c9f4; --nick-ink:#0d0820;
}

body{
  background:
    /* soft brand blobs, biggest first */
    radial-gradient(38vmax 30vmax at 12% 18%, rgba(255,215,39,.55) 0%, rgba(255,215,39,0) 62%),
    radial-gradient(34vmax 28vmax at 88% 12%, rgba(32,201,244,.42) 0%, rgba(32,201,244,0) 60%),
    radial-gradient(40vmax 34vmax at 78% 88%, rgba(245,54,155,.34) 0%, rgba(245,54,155,0) 62%),
    radial-gradient(30vmax 26vmax at 8%  86%, rgba(34,229,0,.30)  0%, rgba(34,229,0,0)  62%),
    linear-gradient(168deg, var(--nick-orange-light) 0%, var(--nick-orange) 46%, var(--nick-orange-hot) 100%);
  background-attachment:fixed;
}

/* A faint dot grid over the field: texture without noise, and it
   gives the flat colour something to catch the light on. */
body::before{
  content:""; position:fixed; inset:0; pointer-events:none; z-index:0;
  background-image:radial-gradient(rgba(13,8,32,.13) 1.5px, transparent 1.6px);
  background-size:26px 26px;
  mask-image:linear-gradient(180deg, rgba(0,0,0,.85), rgba(0,0,0,.25));
}
/* Only the app needs a stacking context above the field. Naming .sheet here
   overrode its own position:fixed/z-index:40 and collapsed every overlay —
   the accessibility menu, the game picker, the cohort board and the splash —
   into the document flow at zero size. They must keep their own positioning. */
.app{ position:relative; z-index:1 }

@media (min-width:1024px) and (min-height:600px){
  /* The sidebar becomes an object on the field rather than text
     floating on it — same cream card language as the board. */
  .side{
    background:rgba(255,255,255,.16);
    border:4px solid var(--ink);
    border-radius:30px;
    padding:22px 20px;
    box-shadow:0 18px 40px rgba(0,0,0,.24), 0 5px 0 rgba(0,0,0,.2);
    backdrop-filter:blur(2px);
    justify-content:flex-start; gap:16px;
  }
  /* Speech sits at the top of the panel, controls pinned to the
     bottom, so the CTA is always in the same place game to game. */
  .side .say{ flex:0 0 auto }
  .side .ctl.actions{ margin-top:auto }
  .side .keypad, .side .ctl{ flex:0 0 auto }
}

@media (prefers-reduced-motion:reduce){ body{ background-attachment:scroll } }

@media (min-width:1024px) and (min-height:600px){
  /* A panel the height of the screen with its contents pinned to the
     two ends left a 700px hole down the middle. The panel should be
     the size of what is in it, and sit level with the board. */
  /* NIC-751: let the whole play area grow taller than the viewport and scroll
     as one, so a long question can take the room it needs without the control
     column clipping its own keypad. At common desktop heights nothing scrolls;
     only a short window (< ~760px) ever does. */
  .app{ overflow-y:auto }
  .side{
    align-self:start; height:auto; max-height:none;
    justify-content:flex-start; gap:18px;
    background:rgba(255,255,255,.22);
    overflow:visible;
  }
  .side .ctl.actions{ margin-top:4px }

  /* The character is the thing that makes this a Nickelodeon screen
     rather than a form. Where we have verified art, show it properly
     instead of as a 40px thumbnail in the corner of a bubble. */
  /* The portrait was absolutely positioned for the phone, so on desktop it
     sat ON TOP of the sentence. Give it its own column in the grid and let
     the text have the rest — and let the grid, not the character, decide
     which side each ends up on in RTL. */
  .say{ display:grid; grid-template-columns:96px 1fr; gap:16px;
        align-items:end; row-gap:6px;
        /* NIC-751: on desktop the card must grow to the FULL question, never clip.
           The global overflow-y:auto (portrait crop fix) gave it min-height:0 and
           let the flex column squeeze it to ~2 lines. overflow:visible restores
           min-height:auto so flex-shrink:0 holds; .side already scrolls
           (overflow:auto) if a very long question ever overflows the column. */
        overflow:visible; max-height:none }
  .say .portrait{ position:static; grid-column:1; grid-row:1 / span 2;
        width:96px; height:auto; align-self:end; margin:0; inset:auto }
  .say .tag{ grid-column:2; grid-row:1; justify-self:start; align-self:start; width:auto }
  .say .line{ grid-column:2; grid-row:2; margin:0 }
  html[dir="rtl"] .say .tag{ justify-self:end }
  /* No portrait: the text takes the whole bubble. */
  .say:not(:has(.portrait:not([hidden]))){ grid-template-columns:1fr }
  .say:not(:has(.portrait:not([hidden]))) .tag,
  .say:not(:has(.portrait:not([hidden]))) .line{ grid-column:1 }
}

@media (min-width:1024px) and (min-height:600px){
  /* On desktop the character name badge only ate a line of height above the
     question (Omri, 22 Aug) — drop it so the text starts at the top and the
     card stays short. The line then owns both grid rows. */
  .say .tag{ display:none }
  .say .line{ grid-row:1 / span 2 }
}

/* ── confetti ─────────────────────────────────────────────────── */
/* Fixed to the viewport and above the splash (z-80), so the celebration is
   actually seen. Mounted inside the stage it sat underneath the very screen
   that announces the win. */
.confetti{ position:fixed; inset:0; overflow:hidden; pointer-events:none; z-index:120 }
.confetti i{ position:absolute; top:46%; display:block; will-change:transform,opacity;
  animation:conf 1.15s cubic-bezier(.15,.6,.35,1) forwards; opacity:0 }
@keyframes conf{
  0%   { transform:translate3d(0,0,0) rotate(0deg) scale(.6); opacity:0 }
  12%  { opacity:1 }
  40%  { transform:translate3d(calc(var(--dx) * .55), var(--dy), 0) rotate(calc(var(--rot) * .5)) scale(1) }
  100% { transform:translate3d(var(--dx), 210px, 0) rotate(var(--rot)) scale(.9); opacity:0 }
}
@media (prefers-reduced-motion:reduce){ .confetti{ display:none } }

/* ── the button a child presses ───────────────────────────────────
   Green, not amber. On the orange field the amber CTA was the same
   family as the background it sat on, so the one thing a child has
   to find was the thing hardest to pick out. Green is the only hue
   on the screen that belongs to nothing else. */
.go{ background:var(--go-green,#18A957); color:#fff; }
.go:active{ transform:translateY(2px); box-shadow:0 2px 0 rgba(0,0,0,.28) }
.go.done{ background:var(--teal); color:#fff }
@media (min-width:1024px) and (min-height:600px){
  .go{ box-shadow:0 6px 0 #0E7A3E, 0 12px 22px rgba(0,0,0,.24) }
  .go:active{ box-shadow:0 2px 0 #0E7A3E, 0 6px 12px rgba(0,0,0,.24) }
}


/* ── progress dots ────────────────────────────────────────────────
   The track was dark ink at 22% on what used to be a pale gradient.
   On the orange field that reads as nothing. Light track, white for
   the step you are on. */
.dots .dot{ background:rgba(255,255,255,.42); box-shadow:0 1px 0 rgba(0,0,0,.12) }
.dots .dot.on{ background:#fff }
.dots .dot.now{ background:#fff; box-shadow:0 0 0 3px rgba(255,255,255,.35) }

/* ── the language door ────────────────────────────────────────── */
.gatewrap{ display:flex; flex-direction:column; align-items:center; gap:26px; padding:26px }
.gateh{ margin:0; font-size:clamp(calc(15px * var(--a11y-scale)), 2.4vw, calc(20px * var(--a11y-scale))); font-weight:800; color:#fff;
  text-align:center; opacity:.95; line-height:1.5 }
.gatebtns{ display:flex; flex-wrap:wrap; gap:16px; justify-content:center; width:100% }
.gatebtn{ flex:1 1 190px; max-width:260px; min-height:118px; cursor:pointer;
  display:flex; flex-direction:column; align-items:center; justify-content:center; gap:5px;
  background:var(--paper); border:4px solid var(--ink); border-radius:24px;
  box-shadow:0 8px 0 rgba(0,0,0,.28), 0 16px 30px rgba(0,0,0,.3);
  font-family:var(--font); transition:transform .12s ease }
.gatebtn b{ font-size:clamp(calc(22px * var(--a11y-scale)), 3.4vw, calc(30px * var(--a11y-scale))); font-weight:900; color:var(--ink) }
.gatebtn span{ font-size:calc(14.5px * var(--a11y-scale)); font-weight:700; color:#6B6577 }
.gatebtn:active{ transform:translateY(3px); box-shadow:0 3px 0 rgba(0,0,0,.28) }
.gatebtn:focus-visible{ outline:4px solid var(--amber); outline-offset:3px }
@media (prefers-reduced-motion:reduce){ .gatebtn{ transition:none } }

/* ============================================================
   DESKTOP — the screens that are not the game.
   ============================================================
   The board and the picker were still phone layouts centred in a
   1440px window: a 330px column of 46px tiles with a third of a
   metre of orange either side. Same fault as the game screens had,
   just found later because the first desktop audit only covered
   in-game views.
   ============================================================ */
@media (min-width:1024px){

  /* ── the cohort board ─────────────────────────────────────── */
  #sets .setwrap{ max-width:1280px; margin:0 auto; padding:26px 30px 30px; gap:16px }
  .sethead{ gap:12px }
  .seth{ font-size:calc(24px * var(--a11y-scale)) }
  .gradebadge{ font-size:calc(15px * var(--a11y-scale)); padding:5px 14px }
  .starcount{ font-size:calc(16px * var(--a11y-scale)); padding:5px 13px 5px 10px }
  .starcount i{ width:17px; height:17px }

  /* Books side by side — a teacher's set of 10 cohorts should be
     readable without scrolling a single file of cards. */
  .map{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr));
        gap:22px 26px; align-content:start }
  .book{ gap:11px }
  .unit{ gap:10px }

  /* The cover is a 360-wide drawing; let it fill its column. */
  .unith svg{ width:100%; height:auto }

  /* Tiles a finger — or a mouse — can actually aim at. */
  .tiles{ grid-template-columns:repeat(6,1fr); gap:10px }
  .tile{ min-height:60px; border-radius:15px }
  .tile .tnum{ font-size:calc(21px * var(--a11y-scale)) }
  .tile.next .tnum{ font-size:calc(23px * var(--a11y-scale)) }
  .tile .tstars i{ width:13px; height:13px }
  .tile .tlock{ max-width:26px }
}
@media (min-width:1500px){
  .map{ grid-template-columns:repeat(3,minmax(0,1fr)) }
  #sets .setwrap{ max-width:1600px }
}

/* ── the game picker ──────────────────────────────────────────
   It kept a dark radial backdrop from the days when it was a 3D
   card deck on a night sky. Everything else is the brand field
   now, so the menu was the one screen that looked like a
   different product. */
/* The picker is a full-screen sheet OVER the game. Making it transparent to
   pick up the field showed the game through it — the sidebar and the Check
   button bleeding between the cards. It needs its own opaque copy of the
   field instead. */
#picker{
  background:
    radial-gradient(38vmax 30vmax at 12% 18%, rgba(255,215,39,.55) 0%, rgba(255,215,39,0) 62%),
    radial-gradient(34vmax 28vmax at 88% 12%, rgba(32,201,244,.42) 0%, rgba(32,201,244,0) 60%),
    radial-gradient(40vmax 34vmax at 78% 88%, rgba(245,54,155,.34) 0%, rgba(245,54,155,0) 62%),
    radial-gradient(30vmax 26vmax at 8%  86%, rgba(34,229,0,.30)  0%, rgba(34,229,0,0)  62%),
    linear-gradient(168deg, var(--nick-orange-light) 0%, var(--nick-orange) 46%, var(--nick-orange-hot) 100%);
}
@media (min-width:1024px){
  #picker{ padding:22px 30px 26px }
  #picker .grid{ max-width:1420px; margin:0 auto; gap:16px }
  .deckhead .brand{ height:34px }
  .grid .gcard{ min-height:150px }
}

/* ── back to Nick Academy ─────────────────────────────────────────
   Deliberately quiet, and deliberately NOT in the top bar. It sits at
   the foot of the menus a child is already looking at when they are
   between games. Two always-present controls side by side is how a
   child aiming for text size quits the game instead — so this is kept
   well away from the accessibility button. */
.exitbtn{
  display:flex; align-items:center; justify-content:center; gap:10px;
  margin:14px auto 2px; padding:11px 20px; cursor:pointer;
  background:rgba(255,255,255,.14); color:#fff;
  border:2.5px solid rgba(255,255,255,.5); border-radius:999px;
  font:800 14px/1 var(--font); flex:0 0 auto; align-self:center;
  transition:background .14s ease;
}
.exitbtn:hover{ background:rgba(255,255,255,.24) }
.exitbtn:active{ transform:translateY(1px) }
.exitbtn:focus-visible{ outline:4px solid var(--amber); outline-offset:3px }
.exitmark{ height:17px; width:auto; opacity:.95; flex:0 0 auto }
.exitlabel{ white-space:nowrap }
/* High contrast and 150–200% text must not clip it. */
.a11y-contrast .exitbtn{ background:#000; color:#fff; border-color:#fff }
.exitbtn{ font-size:calc(14px * var(--a11y-scale)); max-width:calc(100% - 24px) }
.exitlabel{ white-space:normal; text-align:center }
@media (prefers-reduced-motion:reduce){ .exitbtn{ transition:none } }

/* --- Accessibility button: on every page, not only inside a game -----------
   Israeli law requires the wheelchair button on every screen, and NIC-680 makes
   it a shipping gate. It used to live in the game's top bar inside .app, which
   is a stacking context at z-index:1 — so every full-screen sheet (z-index:40)
   painted over it. A child on the language door, the mode gate or the game
   picker could not reach it, and `isVisible()` reported true the whole time
   because the element was laid out and only covered.
   No child of .app can escape that stacking context, so the button sits at body
   level instead. `.topspacer` keeps the game's top-bar spacing unchanged. */
#a11ybtn{
  position:fixed; z-index:60;
  top:calc(env(safe-area-inset-top, 0px) + 10px);
  /* END, not start. It used to sit at the inline start — the same corner as
     the back arrow on the picker and the homework board — and being fixed at
     z-index 60 it swallowed both. `#setback` had been partly unclickable since
     the button moved to body level, and nothing caught it because the sheets
     were never re-tested afterwards.
     A back arrow points somewhere and belongs at the start. This one is a
     floating utility with no direction, so it is the one that moves. */
  /* Afik 14 Aug: two buttons each side, logo centred — accessibility (now
     blue) joins the back/games slot on the inline-start side, 70 leaves air
     past that 44px neighbour. */
  inset-inline-start:78px;
}
/* The games button takes the corner slot beside it — fixed like the rest of
   the chrome but UNDER the sheets (35 < 40), so on the deck and the homework
   board the back arrow owns that corner instead. */
#home{ position:fixed; z-index:35; top:calc(env(safe-area-inset-top, 0px) + 10px); inset-inline-start:14px }
/* the fixed right-hand pair (home + a11y) needs the .top row to keep clear */
.top{ padding-inline-start:130px }
/* The audio pair: same fixed layer and corner cluster as #a11ybtn, spaced so
   the three never overlap at any viewport. z-index 60 like the a11y button —
   reachable over the sheets (40), under a transient splash (80). */
.sndbtn{ position:fixed; z-index:60; top:calc(env(safe-area-inset-top, 0px) + 10px) }
#sndspeech{ inset-inline-end:14px }
#sndmusic{ inset-inline-end:60px }
[aria-pressed="false"].sndbtn{ background:var(--ink); color:var(--cream) }
/* Wide enough that the .top row's own content never runs under the fixed
   cluster of three (a11y + speech + music). */
/* Clears the fixed cluster: a11y 14+48, speech 66+48, music 118+48 = 166px
   plus breathing room. At 128px the home button slid under the music toggle
   when the buttons grew to 48px. */
.topspacer{ width:176px; height:36px; flex:0 0 auto }
/* Below the splash (80) on purpose: a transient overlay may cover it. */

/* ── The brand field ────────────────────────────────────────────────────────
   The orange was a flat fill. These are the Nick Academy 3D icons from Drive,
   blown up and dropped to a whisper so they read as texture rather than as
   content a child might try to tap.
   Rules that keep it decoration: fixed behind .app (z-index:1), never above a
   sheet, pointer-events:none, aria-hidden, and it is removed entirely when a
   child has asked for reduced motion or high contrast — a busy background is
   the first thing to go for anyone who needs the screen to be quiet. */
.field{
  position:fixed; inset:0; z-index:0; overflow:hidden; pointer-events:none;
  contain:strict;
}
.fs{
  position:absolute; opacity:.085;
  filter:brightness(0) invert(1);        /* white silhouettes, not cyan on orange */
  will-change:auto;
}
.fs1{ width:210px; top:-3%;  inset-inline-start:-4%;  transform:rotate(-14deg) }
.fs2{ width:260px; top:22%;  inset-inline-end:-6%;    transform:rotate(11deg) }
.fs3{ width:150px; bottom:16%; inset-inline-start:6%; transform:rotate(21deg) }
.fs4{ width:190px; bottom:-5%; inset-inline-end:12%;  transform:rotate(-8deg) }
.fs5{ width:120px; top:46%;  inset-inline-start:44%;  transform:rotate(-25deg); opacity:.05 }

@media (min-width:1024px){
  .fs1{ width:300px } .fs2{ width:360px } .fs3{ width:220px }
  .fs4{ width:280px } .fs5{ width:170px }
}
/* Quiet screen when asked for one. */
.a11y-contrast .field, .a11y-still .field{ display:none }
@media (prefers-reduced-motion:reduce){ .fs{ transition:none } }

/* ── Desktop: the sidebar is a panel, not a caption ─────────────────────────
   It was vertically centred at whatever height its contents happened to need
   — a small floating card beside a huge board, with 20px copy and a 23px
   button. On a classroom monitor that is unreadable from a desk.
   Now: the panel matches the board's height exactly, the copy is sized to be
   read across a room, and the CTA is parked on the floor of the panel where a
   child's eye lands last.
   `--board-w/--board-h` are one pair of numbers shared by the board and the
   panel, so the two cannot drift apart the way the portrait gutter did. */
@media (min-width:1024px) and (min-height:600px){
  .app{ --board-w:760px; --board-h:calc(var(--board-w) * 3.4 / 4) }
  .stage svg{ width:min(100%, var(--board-w)) }

  .side{
    align-self:center;
    height:min(100%, var(--board-h));
    justify-content:flex-start;
    gap:16px;
  }
  /* The CTA sits on the floor of the panel, whatever the copy above it does.
     Pushed from the CARD rather than pulled by the actions block: .ctl.actions
     is position:sticky further up this file, and an auto top margin on a sticky
     item resolved to 4px instead of absorbing the free space. A bottom auto
     margin on the card is immune to that and keeps working if a keypad or a
     readout appears between the two. */
  .side > .say{ margin-bottom:auto }
  .side .actions{ flex-shrink:0 }

  /* Read from a desk, not from 40cm away. */
  .line{ font-size:calc(26px * var(--a11y-scale)); line-height:1.45 }
  .tag{ font-size:calc(15px * var(--a11y-scale)); padding:5px 15px }
  .say{ padding:26px 26px }

  .go{
    padding:30px 22px; font-size:calc(32px * var(--a11y-scale));
    border-radius:22px; border-width:4px;
    box-shadow:0 7px 0 rgba(0,0,0,.22);
  }
  .aux{ padding:20px 16px; font-size:calc(20px * var(--a11y-scale)) }
}
@media (min-width:1600px){
  .app{ --board-w:820px }
}

/* ── The teach card: a titled panel that fills its column ───────────────────
   The card was a grid built around a portrait column. The portrait is gone, so
   the grid is now a one-column grid pretending to be a stack — and a grid with
   pinned rows makes adding a title a placement puzzle. A flex column is what
   this actually is: name tag, title, paragraph, top to bottom.
   Applies at every size; mobile keeps its own type scale below. */
.say{
  display:flex; flex-direction:column; align-items:stretch;
  gap:6px; text-align:start;
}
.sayh{
  margin:0; font-weight:900; line-height:1.18;
  font-size:calc(17px * var(--a11y-scale));
  color:var(--ink);
}
.say .tag{ align-self:start; width:auto }

@media (min-width:1024px) and (min-height:600px){
  /* Grow to fill the column instead of leaving a hole above the CTA. The card
     is the panel; short copy simply sits in a roomier box. */
  .side > .say{ flex:1 1 auto; margin-bottom:0; justify-content:flex-start }
  .side{ gap:14px }

  .sayh{ font-size:calc(34px * var(--a11y-scale)); line-height:1.15 }
  .line{ font-size:calc(28px * var(--a11y-scale)); line-height:1.5 }
  .say{ padding:30px 28px; gap:14px }
}

/* ── Back out of free play ──────────────────────────────────────────────────
   The picker's header is `pointer-events:none` so the brand mark never eats a
   tap meant for a game card. A button inside it therefore needs its own
   `pointer-events:auto` — without that this control renders perfectly and does
   nothing, which is the failure this whole evening has been about.
   Absolutely placed so the brand stays optically centred. */
#deckback{
  position:absolute; inset-inline-start:14px; top:50%; transform:translateY(-50%);
  pointer-events:auto; z-index:4;
}
#picker .deckhead{ position:relative; min-height:44px; align-items:center }
.deckhead .brand{ pointer-events:none }
@media (min-width:1024px){ #deckback{ inset-inline-start:22px } }

/* ══════════════════════════ THE FIGMA SKIN ══════════════════════════
   Afik's asset file (Figma "MathGame Assets"). These are the real drawn
   pieces, not recreations: the chunky orange icon buttons, the check/hint
   plates, the sunburst game field and the language-door flag bars. Anything
   not covered by an asset keeps the engine's own chunky style, tuned to sit
   beside the drawn pieces rather than fight them. */

/* the drawn field behind everything */
body{
  background:url("../assets/figma/bg-game.jpg") center / cover no-repeat fixed,
             linear-gradient(163deg,var(--sky-a) 0%,var(--sky-b) 100%);
}
/* a busy picture is the first thing to go for anyone who asked for quiet */
.a11y-contrast body, body.a11y-contrast{ background-image:none }

/* icon buttons whose face IS the asset: the PNG carries its own chunky
   button — plate, outline, shadow — so the engine button becomes a bare
   hit area around it */
.iconbtn.fig{ background:none; border:none; box-shadow:none; padding:0 }
.iconbtn.fig .figface{ width:44px; height:44px; object-fit:contain; display:block;
  filter:drop-shadow(0 2px 0 rgba(0,0,0,.25)) }
.iconbtn.fig:active .figface{ transform:translateY(2px) }
.a11y-contrast .iconbtn.fig{ background:#fff; border:2.5px solid #000; border-radius:12px }

/* the audio pair matches the drawn icon set: same chunky rounded square,
   green like the sound icon in the file, white glyph, ink outline */
.sndbtn{
  width:44px; height:44px; border-radius:13px;
  background:linear-gradient(180deg,#9CD34A 0%,#6FB52C 100%);
  border:3px solid #17301B; box-shadow:0 3px 0 #17301B; color:#fff;
}
.sndbtn svg{ width:22px; height:22px }
[aria-pressed="false"].sndbtn{
  background:linear-gradient(180deg,#5A6B4A 0%,#41522F 100%); color:#EDE7DA;
}

/* the back chevron from the door design — white with the navy outline.
   It points "back", which is a different physical side in RTL. */
.iconbtn .chev{ width:20px; height:26px }
html[dir="ltr"] .iconbtn .chev{ transform:scaleX(-1) }

/* the check / go plate */
.go{
  background:url("../assets/figma/btn-check.png") center / 100% 100% no-repeat;
  border:none; box-shadow:none; color:#fff; font-weight:900;
  text-shadow:0 2px 0 rgba(23,48,27,.55);
}
.go:active{ transform:translateY(2px); box-shadow:none }
.go.done{ background:url("../assets/figma/btn-check.png") center / 100% 100% no-repeat;
  filter:hue-rotate(115deg) saturate(.9) }
.a11y-contrast .go{ background:#0B7A3E; border:3px solid #000; text-shadow:none }

/* the hint plate — cream, ink text */
.aux#hint{
  background:url("../assets/figma/btn-hint.png") center / 100% 100% no-repeat;
  border:none; box-shadow:none; color:var(--ink); font-weight:800;
}
.a11y-contrast .aux#hint{ background:#fff; border:3px solid #000 }

/* ── the language door, per the mockup: full-width flag bars ── */
.sheet.solid.langgate{ background:url("../assets/figma/bg-language.jpg") center / cover no-repeat }
/* the door heading sits on the drawn sky — give it the ink outline the
   asset text carries so it belongs to the same set */
.gateh{ color:#fff; text-shadow:0 2px 0 rgba(13,36,78,.55) }
.gatebtns{ flex-direction:column; align-items:center; gap:14px }
.gatebtn{
  flex:0 0 auto; width:min(348px, 86vw); max-width:none; min-height:0;
  aspect-ratio:688/122; flex-direction:row; justify-content:center; gap:10px;
  border:none; background:var(--paper); border-radius:18px;
  box-shadow:0 6px 0 rgba(0,0,0,.28), 0 12px 24px rgba(0,0,0,.3);
  background-size:100% 100%; background-repeat:no-repeat;
}
.gatebtn[data-gl="he"]{ background-image:url("../assets/figma/plate-he.png") }
.gatebtn[data-gl="en"]{ background-image:url("../assets/figma/plate-en.png") }
.gatebtn[data-gl="pt"]{ background-image:url("../assets/figma/plate-pt.png") }
.gatebtn b{ color:#fff; text-shadow:0 2px 0 rgba(0,0,0,.4);
  font-size:clamp(calc(20px * var(--a11y-scale)), 3vw, calc(26px * var(--a11y-scale))) }
.gatebtn span{ color:rgba(255,255,255,.85); text-shadow:0 1px 0 rgba(0,0,0,.35) }
.a11y-contrast .gatebtn{ background-image:none; background:#fff; border:3px solid #000 }
.a11y-contrast .gatebtn b{ color:#000; text-shadow:none }

/* ── the sound card: one card, one OK (NIC-752 ruling) ── */
.soundcard{ position:fixed; inset:0; z-index:75; display:flex; align-items:center;
  justify-content:center; background:rgba(13,36,78,.45); padding:20px }
.soundcard[hidden]{ display:none }
.soundcardin{ background:var(--paper); border:4px solid var(--ink); border-radius:22px;
  box-shadow:0 10px 0 rgba(0,0,0,.25), 0 20px 40px rgba(0,0,0,.3);
  padding:26px 28px; display:flex; flex-direction:column; align-items:center; gap:18px;
  max-width:min(420px, 92vw); text-align:center }
.soundcardp{ margin:0; font-weight:800; color:var(--ink);
  font-size:calc(20px * var(--a11y-scale)); line-height:1.35 }
.soundok{ min-width:150px; font-size:calc(20px * var(--a11y-scale)) }

/* ── Afik's visual pass (13 Aug) ─────────────────────────────────────── */

/* 1px pale stripe under the plate buttons: the element's own background
   colour peeking past the image at sub-pixel rounding. Kill the colour and
   overscan the image a hair so its edge can never fall short of the box. */
.go, .aux#hint, .gatebtn{
  background-color:transparent;
  background-size:calc(100% + 4px) calc(100% + 4px);
  background-position:center;
}

/* the three chrome buttons sit on one line: same 48px visual box, same top */
.iconbtn.fig{ width:48px; height:48px; display:flex; align-items:center; justify-content:center }
/* display:flex silently defeats the hidden attribute — the class-mode
   games-button ban depends on this losing. */
.iconbtn.fig[hidden]{ display:none !important }
.iconbtn.fig .figface{ width:48px; height:48px }
.sndbtn{ width:48px; height:48px }
.sndbtn svg{ width:24px; height:24px }
#sndspeech{ inset-inline-end:14px }
#sndmusic{ inset-inline-end:66px }

/* game cards: the character is the card. Big, grounded at the bottom;
   the game-type icon becomes a badge pinned to the top-left, 20px in. */
.grid .gcard{ position:relative !important; min-height:172px; justify-content:flex-end; gap:2px }
/* Arnold sits IN the flow, above the caption — never behind it. The absolute
   96% version covered the game names (Afik: "no overlapping items"), so he is
   a flex child again: bigger than the original 50px, but the text below him
   is on its own rows and nothing can sit on top of it. */
.grid .gcard .who{ position:static !important; bottom:auto !important; left:auto !important;
  right:auto !important; top:auto !important; transform:none !important;
  height:88px !important; width:auto !important; max-width:82% !important;
  margin:0 !important; flex:0 0 auto;
  object-fit:contain; object-position:bottom; z-index:auto !important }
.grid .gcard .cap, .grid .gcard .sub{ position:relative; z-index:3 }
.grid .gcard .ico{ position:absolute !important; top:20px !important; left:20px !important;
  right:auto !important; transform:none !important;
  width:40px !important; height:40px !important; margin:0 !important; z-index:3 !important }
@media (orientation:landscape) and (max-height:480px){
  .grid .gcard .ico{ top:12px; left:12px; width:30px; height:30px }
  .grid .gcard .who{ height:66px !important }
}

/* Back to Nick Academy: a floating pill in the bottom-left corner with its
   own background — not a bar eating the bottom of the screen. */
.exitbtn{
  position:fixed; left:14px; bottom:calc(14px + env(safe-area-inset-bottom));
  z-index:62; margin:0; align-self:auto; max-width:min(46vw, 260px);
  background:rgba(13,36,78,.78); border-color:rgba(255,255,255,.65);
  box-shadow:0 4px 0 rgba(0,0,0,.3);
}
.exitbtn:hover{ background:rgba(13,36,78,.92) }

/* the back buttons dress like the accessibility button: same chunky orange
   square, white chevron — mirrored 180° from before. */
#deckback, #setback{
  width:48px; height:48px; border-radius:13px;
  background:linear-gradient(180deg,#FF9E2C 0%,#F2680C 100%);
  border:3px solid #3A1B06; box-shadow:0 3px 0 #3A1B06; color:#fff;
}
#deckback .chev, #setback .chev{ width:20px; height:26px }
html[dir="rtl"] .iconbtn .chev{ transform:scaleX(-1) }
html[dir="ltr"] .iconbtn .chev{ transform:none }
.a11y-contrast #deckback, .a11y-contrast #setback{ background:#fff; color:#000; border-color:#000 }


/* ══════════ THE FOUR CORNER BUTTONS — one geometry, no exceptions ══════════
   Afik, 14 Aug: "Two on the left side, two on the right side, and they look
   similar just with different color." They did not: the sound pair was 44px
   and the Figma pair 48px, the left gap was 4px and the right gap 16px,
   because each button had grown its own inset over time. Every position and
   size now comes from these two variables, so the set can never drift again.
   SLOT1/SLOT2 are measured from each edge; 48 + 10 = 58. */
:root{ --chrome-size:48px; --chrome-slot1:14px; --chrome-slot2:72px }

.sndbtn, .iconbtn.fig, #deckback, #setback{
  width:var(--chrome-size) !important; height:var(--chrome-size) !important;
  flex:0 0 auto;
}
.sndbtn, .iconbtn.fig{ border-radius:14px }

/* fixed layer, same top for all four */
.sndbtn, #a11ybtn, #home{
  position:fixed;
  top:calc(env(safe-area-inset-top, 0px) + 10px);
}
/* LEFT pair (inline-end in Hebrew): speech outermost, music beside it */
#sndspeech{ inset-inline-end:var(--chrome-slot1) !important; inset-inline-start:auto !important }
#sndmusic { inset-inline-end:var(--chrome-slot2) !important; inset-inline-start:auto !important }
/* RIGHT pair (inline-start): the context button outermost, accessibility beside it.
   The context button is the games grid in a level and the back arrow on a sheet;
   they share the slot and never appear together. */
#home, #deckback, #setback{ inset-inline-start:var(--chrome-slot1) !important; inset-inline-end:auto !important }
#a11ybtn{ inset-inline-start:var(--chrome-slot2) !important; inset-inline-end:auto !important }

/* The sheet arrows were absolutely placed inside their own header, which put
   them on a different grid from the fixed pair — the 4px collision. Same
   fixed layer as the rest, under the splash, over the sheet. */
#deckback, #setback{ position:fixed !important; top:calc(env(safe-area-inset-top, 0px) + 10px) !important;
  transform:none !important; z-index:45 }
#deckback .chev, #setback .chev{ width:20px; height:26px }

/* .top must clear the two fixed buttons on its side */
.top{ padding-inline-start:calc(var(--chrome-slot2) + var(--chrome-size) + 10px) }
.topspacer{ width:0; height:36px }

/* The in-level exit shares #home's corner slot (slot1) and never appears with
   it — #home in free play, the exit in a school set — so the "four corners"
   geometry is preserved: no fifth button is ever added. Same fixed layer, same
   size and top as the rest of the chrome. */
#exit-top{
  position:fixed; z-index:35;
  top:calc(env(safe-area-inset-top, 0px) + 10px);
  inset-inline-start:var(--chrome-slot1) !important; inset-inline-end:auto !important;
  width:var(--chrome-size) !important; height:var(--chrome-size) !important;
  flex:0 0 auto; border-radius:14px; padding:0;
  display:flex; align-items:center; justify-content:center;
}
#exit-top[hidden]{ display:none !important }
#exit-top svg{ width:26px; height:26px }


/* ── Full-bleed mechanics ───────────────────────────────────────────────────
   The arcade owns the stage. The talking column and the control row are not
   hidden by opacity — they are removed from the layout, so the SVG genuinely
   gets the whole width rather than a wide letterbox with an invisible panel
   holding a third of it. */
body.fullbleed .side{ display:none !important }
body.fullbleed .stage{ flex:1 1 auto; width:100%; max-width:none }
body.fullbleed .app{ gap:0 }
/* the start card carries a task, not a verdict — no tick, no cross */
.splash.bleedstart .mark, .splash.bleedstart #splashmark{ display:none }


/* ── Exit pill vs the game cards: OPEN, not silently changed ─────────────────
   On a phone the fixed bottom-left pill sits over the bottom-left game card —
   worst in Portuguese, where "Voltar ao Nick Academy" wraps to three lines.
   Measured on the live build in both languages and both orientations.

   NOT fixed here on purpose. Afik asked for exactly this floating pill; Omri
   ruled the opposite for Gravity Lab (NIC-683: "very destructive… especially
   not in mobile"). Three attempts to have both — padding the scroller, then
   shrinking the viewport, then returning the pill to the flow — each moved the
   overlap somewhere else rather than removing it, because the sheet's grid is
   `flex:1` and reclaims whatever space the pill gives up.

   The layout is back exactly as Afik approved it. The choice is his: keep the
   float and accept the overlap, or move the exit into the header beside the
   back arrow, where it cannot reach the cards at all. */


/* ── design lane: one spacing rhythm, and nothing under the corner buttons ───
   Omri, reviewing the 49 mechanics on a phone: in a level the fixed corner
   buttons touched the box below them, and on the homework board the head sat
   under those same buttons.

   Root cause, one thing: the chrome is `--chrome-size` (48px) but the top row
   only ever reserved 36px (`.topspacer`), so the buttons hung 12px past the row
   they belong to and ate the gap under them. The row now reserves the real
   chrome height, and ONE token sets every gap and the padding around, so the
   blocks in a level are evenly spaced from each other and from the edges.
   `--chrome-clear` is the bottom of the chrome: any screen whose own content
   starts at the top uses it so nothing is ever painted under a button. */
:root{
  --ui-gap:12px;
  --chrome-clear:calc(env(safe-area-inset-top, 0px) + 10px + var(--chrome-size));
}
/* short phones keep the tighter rhythm they had, from the same token */
@media (max-height:740px){ :root{ --ui-gap:9px } }

.app{
  gap:var(--ui-gap);
  padding:calc(env(safe-area-inset-top, 0px) + 10px) var(--ui-gap)
          calc(env(safe-area-inset-bottom, 0px) + var(--ui-gap));
}
/* the row is as tall as the buttons that sit on its line, so the gap below it
   is the same gap as everywhere else instead of 12px of overlap */
.top{ min-height:var(--chrome-size) }
.topspacer{ height:var(--chrome-size) }
/* and the progress dots stop before the sound pair, as they already do before
   the left pair — the row is symmetric now */
.top{ padding-inline-end:calc(var(--chrome-slot1) + var(--chrome-size) + 10px) }   /* one switch (speech) on this side since 4 Sep 2026 */

/* landscape keeps the compact geometry it was tuned with: there `.top` is
   absolutely positioned, so none of the above applies to it. */
@media (orientation:landscape) and (max-height:560px){
  .app{ padding-top:44px }
  .top{ min-height:0; padding-inline-end:0 }
}

/* ── the homework board: head clear of the chrome, list to the bottom ────────
   Omri's ruling, and it settles the HOMEWORD-BOARD half of the open question
   above: the exit pill is translucent and has its own background, so the list
   is meant to run the full height and scroll UNDER it rather than stop short.
   The scroller keeps its full height (nothing is given up for the pill, which
   is what made the earlier attempts move the overlap around); the room for the
   pill is scroll padding INSIDE the list, so the last card still scrolls clear.
   The picker-grid overlap in the note above stays open and untouched. */
#sets .setwrap{ padding-top:calc(var(--chrome-clear) + var(--ui-gap)); padding-bottom:0 }
#sets .map{ padding-bottom:calc(var(--chrome-size) + 30px + env(safe-area-inset-bottom)) }

/* "Back to Nick Academy" / "Voltar ao Nick Academy" broke to three lines at
   46vw. Slightly wider is two, at the same pill height. */
.exitbtn{ max-width:min(58vw, 300px) }

/* ── the talking card gives, the keypad never moves ─────────────────────────
   Omri, on measurement.units and on a phone: with more than a little teach
   text the keypad ran out of the panel, and the floating Hint / Check it row
   sat on top of the number keys.

   Two causes. `.say` and `.keypad` were both flex-shrink:0, so a long question
   could only push the column past its box; and `.ctl.actions` was
   `position:sticky` over `background:inherit`, which on the translucent desktop
   panel is transparent — so the keys showed straight through it.

   His ruling: keep everything inside the box and let long text scroll in its
   own bounds. So the speech card is now the ONLY thing that may give — it
   shrinks and scrolls inside itself — while the readout, the keypad and the
   action row keep their natural size and always fit. With nothing scrolling
   under it, the action row no longer needs to float. */
.side{ min-height:0 }
.side .say{ flex:0 1 auto; min-height:0; overflow-y:auto; overscroll-behavior:contain }
.side .ctl, .side .keypad{ flex:0 0 auto }
.side .ctl.actions{ position:static }
/* the panel stays inside the window instead of spilling past it (desktop had
   max-height:none, which is what let the keypad leave the box in the shot) */
@media (min-width:1024px) and (min-height:600px){
  .side{ max-height:100%; overflow:hidden }
}
/* a scrolling teach card must LOOK scrollable to a child — same slim thumb the
   side column already uses */
.side .say::-webkit-scrollbar{ width:6px }
.side .say::-webkit-scrollbar-thumb{ background:rgba(25,22,34,.25); border-radius:99px }
.side .say{ scrollbar-width:thin }

/* ── language door: the flag and the native name are the label ──────────────
   Omri: drop the small English gloss ("Hebrew", "English", "Portuguese") that
   ran into the flags. The native word in the child's own script is the name;
   the gloss added nothing and collided with the art. */
.gatebtn span{ display:none }

/* ---- design lane: Figma SecondStage layout ---- */
/* Omri's Figma "SecondStage" frame (Sep 2026): the board (speech, keypad,
   buttons) sits on the LEFT in the Kit #3 orange frame (Bg-Block 2) with a
   cream inner block, and the paint area on the right. Landscape only; the
   phone keeps its stack. Board left in BOTH reading directions: the frame is
   a physical layout, not a logical one. */
@media (orientation:landscape){
  html[dir="ltr"] .side{ order:1 }
  html[dir="ltr"] .stage{ order:2 }
  .side{
    --panel-pad:22px; --go-h:54px;
    position:relative; isolation:isolate;
    background:none; backdrop-filter:none; box-shadow:none;
    border:var(--panel-pad) solid transparent; border-radius:0;
    border-image:url("../assets/figma/panel-frame.png") 60 fill / 50px stretch;
    padding:24px 22px 0;
    filter:drop-shadow(0 10px 16px rgba(0,0,0,.28));
    justify-content:flex-start;
  }
  /* The chrome row (48px buttons at top 10px) is absolute in landscape; the
     app used to reserve 46px for it, which the spacing-rhythm padding above
     had flattened to 10px. Reserve the real chrome height plus one gap. */
  .app{ padding-top:calc(env(safe-area-inset-top, 0px) + 10px + var(--chrome-size) + var(--ui-gap)) }
  /* the cream inner block: everything but the buttons sits on it */
  .side::before{
    content:""; position:absolute; z-index:-1;
    inset:0 0 calc(var(--go-h) + 12px) 0;
    /* the kit's cream block (BG2-Block 1): a border-image, so its rounded
       corners and its soft bottom edge survive any panel size */
    border:20px solid transparent;
    border-image:url("../assets/figma/panel-inner.png") 40 fill stretch;
  }
  .side .say{ background:none; border:0; box-shadow:none; padding:6px 4px }
  /* the buttons: the wide green Check it, and the square Hint beside it.
     With no Hint (the StartGame state) the green bar takes the whole width. */
  .side .ctl.actions{ margin-top:auto; margin-inline:-22px; gap:10px; padding-top:0 }
  .side .ctl.actions .go{ flex:1 1 auto; min-height:var(--go-h); padding:0 10px }
  .side .ctl.actions .aux#hint{ flex:0 0 auto; width:calc(var(--go-h) * 300 / 324);
    height:var(--go-h); padding:0; font-size:calc(14px * var(--a11y-scale, 1)) }
  /* No Hint beside it: the bar is the kit's wider StartGame art, so the
     stretch stays true to the drawing. */
  .side .ctl.actions #hint[hidden] ~ .go{ background-image:url("../assets/figma/btn-start.png") }
  .a11y-contrast .side{ border-image:none; border-color:#000; background:#fff; filter:none }
  .a11y-contrast .side::before{ display:none }
}
/* The panel is exactly the board's height. The board svg is width-capped
   (760px, 820px on very wide screens) at a 4:3.4 aspect, so on a narrow
   desktop it is shorter than --board-h and the panel used to outgrow it. The
   same arithmetic the svg does, in CSS, so the two cannot drift. */
@media (min-width:1024px) and (min-height:600px){
  .app{ --side-w:clamp(420px, 34vw, 560px); --app-padx:34px; --app-gap:26px }
  .side{ width:var(--side-w);
         height:min(100%, var(--board-h),
                    calc((100vw - 2 * var(--app-padx) - var(--app-gap) - var(--side-w)) * 3.4 / 4)) }
  /* A keypad in the panel takes four rows; the copy beside it wraps to a
     smaller size so the whole sentence stays above the keys on any desktop. */
  .side:has(.keypad:not([hidden])) .line{ font-size:calc(22px * var(--a11y-scale)); line-height:1.38 }
  .side:has(.keypad:not([hidden])) .keypad{ gap:8px }
  .side:has(.keypad:not([hidden])) .keypad button{ padding:10px 0; font-size:calc(21px * var(--a11y-scale)); border-radius:14px }
  /* the copy on a short desktop: read from a desk, but leave the keypad room */
  @media (max-height:800px){
    .line{ font-size:calc(21px * var(--a11y-scale)); line-height:1.35 }
    /* a compact keypad on a short panel, so the sentence keeps its lines */
    .keypad{ gap:8px }
    .keypad button{ padding:8px 0; font-size:calc(19px * var(--a11y-scale)); border-radius:13px }
    .step{ width:52px; height:52px }
    .read .n{ font-size:calc(26px * var(--a11y-scale)) }
  }
}
@media (min-width:1600px){
  .app{ --board-w:820px; --app-padx:48px; --app-gap:40px }
}

/* ---- design lane: no speaker badge ---- */
/* The character's name badge above the sentence is redundant (Omri, 4 Sep
   2026): the portrait says who is talking. Desktop dropped it on 22 Aug; now
   every viewport does. */
.say .tag{ display:none }

/* ---- design lane: folded board (phone) ---- */
/* Option A of the phone redesign (Omri, 4 Sep 2026). Upright phones fold the
   desktop board under the stage: the Kit #3 orange frame with the cream
   block, the sentence and the answer field inside it, a two-row keypad, and
   Hint plus Check it on the frame floor. The board is only as tall as what
   is in it, capped at 58% of the screen (the sentence scrolls past that),
   and the stage takes every remaining pixel: 100dvh, no dead space. */
@media (orientation:portrait){
  .side{
    --go-h:48px; --panel-pad:20px;
    position:relative; isolation:isolate;
    display:flex; flex-direction:column; flex:0 0 auto; min-height:0; max-height:58%;
    border:var(--panel-pad) solid transparent; border-radius:0;
    border-image:url("../assets/figma/panel-frame.png") 60 fill / 46px stretch;
    padding:14px 14px 0; gap:8px;
    filter:drop-shadow(0 8px 12px rgba(0,0,0,.28));
    background:none; box-shadow:none;
  }
  .side::before{
    content:""; position:absolute; z-index:-1;
    inset:0 0 calc(var(--go-h) + 10px) 0;
    border:20px solid transparent;
    border-image:url("../assets/figma/panel-inner.png") 40 fill stretch;
  }
  /* Nothing touches the cream block's painted edge. The block's PNG paints a
     dark lip about 7px inside its own CSS box at the bottom, so the last
     thing above the buttons (the keypad, the stepper row, or the sentence
     when there is neither) ends 24px above the buttons' row: 12px clear of
     the lip after the keys' 3px shadow. Measured in pixels, not boxes
     (Omri, 4 Sep: "the digits are touching the frame"). The sentence
     carries its own padding on all sides, so the scroll edge of a capped
     board is never a hard cut through a line. */
  .side .say{ flex:0 1 auto; min-height:0; overflow-y:auto; overscroll-behavior:contain;
    background:none; border:0; box-shadow:none; border-radius:0; padding:6px 6px 14px; margin:0 0 8px }
  .side .say:has(+ #ctlread[hidden] + .keypad[hidden]){ margin-bottom:14px }
  /* When a capped board has to scroll its sentence, the scroll edge fades the
     last line out instead of cutting it through the glyphs; when nothing
     scrolls the fade lies inside the sentence's own bottom padding. */
  .side .say{ -webkit-mask-image:linear-gradient(#000 calc(100% - 12px), transparent); mask-image:linear-gradient(#000 calc(100% - 12px), transparent) }
  .side .say.hasportrait{ padding-inline-start:70px }
  .side .portrait{ inset-inline-start:0; bottom:0; width:60px }
  .sayh{ font-size:calc(16px * var(--a11y-scale)); line-height:1.2; margin:0 0 4px }
  .side .line{ font-size:calc(14.5px * var(--a11y-scale)); line-height:1.3 }
  /* the answer field, and the stepper's minus and plus beside it */
  .side .ctl{ flex:0 0 auto; gap:8px; margin:0 0 24px }
  .side #ctlread:has(+ .keypad:not([hidden])){ margin-bottom:10px }
  .side .read{ height:44px; border:3px solid var(--ink); border-radius:14px; background:#FFF4DF;
    box-shadow:0 3px 0 var(--ink) }
  .side .read .n{ font-size:calc(24px * var(--a11y-scale)); font-weight:900 }
  .side .step{ width:46px; border:3px solid var(--ink); border-radius:14px; background:#FFF4DF;
    box-shadow:0 3px 0 var(--ink) }
  /* two rows of six: 1 2 3 4 5 delete / 6 7 8 9 0 point */
  .side .keypad{ flex:0 0 auto; grid-template-columns:repeat(6,1fr); gap:6px; max-height:none; margin:0 0 24px }
  /* On a 360px-wide phone the cream block is 268px inside its padding, which
     leaves 40.7px keys in six columns; the keypad borrows 8px of padding on
     each side and closes its gaps to 4px, so every key is 44px wide. */
  @media (max-width:374px){ .side .keypad{ margin-inline:-8px; gap:4px } }
  /* A short phone (640px tall) with a keypad level: 44px keys, a 44px answer
     field, a 48px button and a 200px stage leave the sentence two lines. The
     picture is secondary while the child types, so the stage's floor drops to
     160px in that one case and the sentence gets its four lines back. */
  @media (max-height:700px){ .app:has(.keypad:not([hidden])){ --stage-min:160px } .side{ max-height:64% } }
  .side .keypad button{ height:44px; min-height:44px; padding:0; border:2.5px solid var(--ink); border-radius:12px;
    background:#FFF4DF; box-shadow:0 3px 0 var(--ink); font-size:calc(19px * var(--a11y-scale)); font-weight:900 }
  .side .keypad [data-k="1"]{ order:1 } .side .keypad [data-k="2"]{ order:2 } .side .keypad [data-k="3"]{ order:3 }
  .side .keypad [data-k="4"]{ order:4 } .side .keypad [data-k="5"]{ order:5 } .side .keypad [data-k="del"]{ order:6 }
  .side .keypad [data-k="6"]{ order:7 } .side .keypad [data-k="7"]{ order:8 } .side .keypad [data-k="8"]{ order:9 }
  .side .keypad [data-k="9"]{ order:10 } .side .keypad [data-k="0"]{ order:11 } .side .keypad [data-k="."]{ order:12 }
  .side .keypad [data-k="del"]{ background:var(--ink); color:#FFF4DF; --cream:#191622 }
  .side .keypad button svg{ width:26px; height:22px }
  /* the buttons on the frame floor */
  .side .ctl.actions{ position:static; margin:auto -12px 0; height:var(--go-h); gap:10px; padding:0; background:none }
  .side .ctl.actions .go{ flex:1 1 auto; min-height:var(--go-h); padding:0 10px; font-size:calc(19px * var(--a11y-scale));
    border-radius:0; background:url("../assets/figma/btn-check.png") center / 100% 100% no-repeat; color:#fff }
  .side .ctl.actions .aux#hint{ flex:0 0 auto; width:calc(var(--go-h) * 300 / 324); height:var(--go-h); padding:0;
    font-size:calc(13px * var(--a11y-scale)) }
  .side .ctl.actions #hint[hidden] ~ .go{ background-image:url("../assets/figma/btn-start.png") }
  .side .ctl.actions .aux.retry{ flex:0 0 auto; height:var(--go-h) }
  .a11y-contrast .side{ border-image:none; border-color:#000; background:#fff; filter:none }
  .a11y-contrast .side::before{ display:none }
}

/* ====================================================================
   NIC-1051: on a short screen the panel scrolls as one piece, so Hint and
   Check it scroll away with it. Measured on geo.solids.g6.019, whose
   instruction is one of the longest in the game: at 800x360, 740x360,
   640x360 and 568x320 the Check it button sat at y=372 with the viewport
   360 tall and the page unable to scroll, so a child had to discover an
   inner scroll to finish the level. Shorter instructions fit, which is why
   it looks resolution-dependent rather than level-dependent.
   The action row now sticks to the bottom of the panel while everything
   above it scrolls, the same shape NIC-1025 used to keep Start reachable.
   ==================================================================== */
@media (max-height:430px){
  .side .ctl.actions{
    position:sticky; bottom:0; z-index:6;
    background:var(--cream,#FFF4DF);
    padding-block:6px; margin-top:0;
    box-shadow:0 -6px 10px -6px rgba(0,0,0,.25);
  }
  /* Pinning the row kept it reachable but the panel still held more than it
     could show: at 360px of height it carried 295px of content in 240px, so the
     bottom row of the keypad sat behind the pinned buttons (Inbal, "still
     happens"). Reclaim the 55px from the panel's own padding and gaps rather
     than from the keys, which are already at their smallest. */
  .side{ padding-top:6px; gap:4px }
  .side .keypad{ gap:4px }
  .side .say{ margin:0 }
}
/* 360px of height is the shortest thing a child is handed — a landscape phone,
   and the dashboard's own play frame. The last 17px come off the pinned row's
   own padding and the readout above the keys; the keys themselves are not
   touched, so every target stays the size it was. */
@media (max-height:372px){
  .side .ctl.actions{ padding-block:2px }
  .side .ctl:not(.actions){ margin:0 }
  .side .keypad{ gap:3px }
  .side{ padding-top:2px; padding-bottom:0; gap:3px }
}

/* ====================================================================
   Keys press like buttons (design lane, Omri, 6 Sep 2026)
   ====================================================================
   Omri: the number keys should have the same click styling as Hint and
   Check it. Those two are kit plates with a hard lip baked into the PNG
   and a sink on press. The keys had been flattened to a 1px hairline and
   a scale(.96) tap (the "Afik pass" rule above), so a press read as a
   shrink, not a push. Same press model as the plates now: a cream face
   with the ink outline, a hard ink lip under it (the --shadow token this
   file already defines for that look), a light catch along the top edge,
   and on press the key sinks by the height of its lip so the lip
   disappears under it. The lip is a box-shadow, so it costs no layout
   height: the panel's fold-under maths and the 44px key floor are
   unchanged. Delete keeps its ink face and sinks the same way. */
.keypad button{
  background:var(--cream);
  border:3px solid var(--ink);
  border-radius:14px;
  box-shadow:0 4px 0 var(--ink), inset 0 2px 0 rgba(255,255,255,.55);
  font-weight:800;
  transition:transform .06s ease, box-shadow .06s ease;
}
.keypad button:active{
  transform:translateY(4px);
  box-shadow:0 0 0 var(--ink), inset 0 2px 0 rgba(255,255,255,.35);
  background:var(--cream);
}
.side .keypad [data-k="del"]{
  box-shadow:0 4px 0 #0B0912, inset 0 2px 0 rgba(255,255,255,.14);
}
.side .keypad [data-k="del"]:active{
  transform:translateY(4px);
  box-shadow:0 0 0 #0B0912, inset 0 2px 0 rgba(255,255,255,.1);
  background:var(--ink);
}
/* High contrast keeps its black-on-white face; only the lip and the sink
   are added. */
.a11y-contrast .keypad button{ box-shadow:0 4px 0 #000 }
.a11y-contrast .keypad button:active{ box-shadow:0 0 0 #000 }
/* A child who has asked for less motion still gets the pressed look,
   just without the travel. */
@media (prefers-reduced-motion: reduce){
  .keypad button, .side .keypad [data-k="del"]{ transition:none }
  .keypad button:active, .side .keypad [data-k="del"]:active{ transform:none }
}
/* The upright-phone fold (the ".side .keypad button" rules above) sets its own
   border, height and a 3px lip at a higher specificity than the rule just
   added, so on a phone the keys kept the old press. Same press model there,
   at that specificity: the 44px height and 2.5px border it fixes stay, the
   lip becomes the plate's 4px, and the key sinks by it. The lip is a shadow,
   so the fold-under height maths is untouched. */
.side .keypad button{
  box-shadow:0 4px 0 var(--ink), inset 0 2px 0 rgba(255,255,255,.55);
  transition:transform .06s ease, box-shadow .06s ease;
}
.side .keypad button:active{
  transform:translateY(4px);
  box-shadow:0 0 0 var(--ink), inset 0 2px 0 rgba(255,255,255,.35);
}
.side .keypad [data-k="del"]{ box-shadow:0 4px 0 #0B0912, inset 0 2px 0 rgba(255,255,255,.14) }
.side .keypad [data-k="del"]:active{ box-shadow:0 0 0 #0B0912, inset 0 2px 0 rgba(255,255,255,.1) }
.a11y-contrast .side .keypad button{ box-shadow:0 4px 0 #000 }
.a11y-contrast .side .keypad button:active{ box-shadow:0 0 0 #000 }
@media (prefers-reduced-motion: reduce){
  .side .keypad button, .side .keypad [data-k="del"]{ transition:none }
  .side .keypad button:active, .side .keypad [data-k="del"]:active{ transform:none }
}

/* ====================================================================
   The well done and try again cards (design lane, Omri, 6 Sep 2026)
   ====================================================================
   Omri: the two cards are not nice, and they can have a wobble entrance.
   They were a flat cream box with a drawn circle and a tick or an arrow in
   it. The card now wears the side board's own kit frame and cream inner
   block, the same border-image the board uses, so it belongs to the same
   family of objects as everything under it. The mark is real art: a gold
   star medal on a ribbon for well done, an amber badge with a circular
   arrow for try again, generated in the kit style and cut out. The
   engine still writes its inline svg into the mark; it is hidden here and
   the art sits behind it, so no engine change. Entrance: the card drops
   in with a wobble, overshoots, settles, and the medal swings once on its
   ribbon after it lands. Both stop under the a11y no-motion class and the
   OS reduced-motion setting, where the card simply appears. */
.splashin{
  background:none;
  border:22px solid transparent; border-radius:0;
  border-image:url("../assets/figma/panel-frame.png") 60 fill / 50px stretch;
  padding:18px 16px 16px;
  filter:drop-shadow(0 12px 18px rgba(0,0,0,.3));
  max-width:420px;
}
/* the cream block inside the frame, like the board's own */
.splashin::before{
  content:""; position:absolute; inset:0; z-index:-1;
  border:20px solid transparent;
  border-image:url("../assets/figma/panel-inner.png") 40 fill stretch;
  pointer-events:none;
}
.splashin{ position:relative; isolation:isolate }
.splashmark{
  width:128px; height:136px; border-radius:0; background:none !important;
  background-repeat:no-repeat !important; background-position:center !important;
  background-size:contain !important;
  margin:-4px auto 2px;
}
.splashmark svg{ display:none }
.splash.good .splashmark{ background-image:url("../assets/figma/badge-welldone.png") !important }
.splash.again .splashmark{ background-image:url("../assets/figma/badge-again.png") !important }
.splashh{ font-size:calc(24px * var(--a11y-scale)) }
.splashp{ opacity:.9 }
.splashgo{ margin-top:8px }

/* The wobble: a drop from above with a lean, an overshoot, and a settle.
   The medal then swings once on its ribbon, a beat after the card lands. */
@keyframes splashWobble{
  0%   { opacity:0; transform:translateY(-36px) scale(.72) rotate(-7deg) }
  55%  { opacity:1; transform:translateY(6px)  scale(1.05) rotate(3.5deg) }
  75%  {            transform:translateY(-3px) scale(.985) rotate(-1.8deg) }
  90%  {            transform:translateY(1px)  scale(1.005) rotate(.6deg) }
  100% {            transform:none }
}
@keyframes markSwing{
  0%,40% { transform:rotate(0) }
  55%    { transform:rotate(-9deg) }
  70%    { transform:rotate(6deg) }
  85%    { transform:rotate(-3deg) }
  100%   { transform:rotate(0) }
}
.splash:not(.a11y-nomotion) .splashin{ animation:splashWobble .62s cubic-bezier(.22,1,.36,1) both }
.splash:not(.a11y-nomotion) .splashmark{ transform-origin:50% 8%; animation:markSwing .9s ease-out both .18s }
.a11y-nomotion .splashin, .a11y-nomotion .splashmark{ animation:none !important }
@media (prefers-reduced-motion: reduce){
  .splashin, .splashmark{ animation:none !important }
}
/* high contrast keeps a plain readable card */
.a11y-contrast .splashin{ border-image:none; border:3px solid #000; background:#fff; filter:none; border-radius:16px }
.a11y-contrast .splashin::before{ display:none }
/* The card's button had no height floor of its own on a phone and measured
   35px; the plate's aspect gives it 54px at the card's width, the same --go-h
   the board's Check it uses. */
.splashgo{ min-height:54px; height:auto; padding:0 12px }

/* ====================================================================
   The picture's own entrance (design lane, Omri, 6 Sep 2026)
   ====================================================================
   Omri: what makes a game feel childish and fun is the elements inside the
   page having a subtle, staggered entrance with a little wobble, in an order
   that makes sense, like the clock showing up and then the rest. The panel
   already staggers in (stage, sentence, controls, keypad, above). This does
   the same inside the picture.

   A mechanic opts in by tagging its scene groups with data-enter="0", "1",
   "2"... in the order they should arrive: ground and furniture first, the
   main object, then the things on it. Untagged scenes get no entrance,
   which is the safe default for a mechanic that rebuilds every frame.

   The engine holds data-scene-enter on .app for one second after a level
   starts, or until the first touch on the stage, and the entrance only
   runs inside that window, so a rebuild during a drag never replays it.

   The move itself is small: each group rises 16 units from below while it
   fades in, overshoots to 103% with a 1.2 degree lean, and settles where it
   stands. 620 ms, 140 ms between groups (Omri, 6 Sep, on the first cut: a
   bit slower, more staggered, fade plus wobble plus a slight move, usually
   from the bottom up). The fade is its own animation with a plain ease-out:
   on the spring curve the opacity was at 90% after 140 ms, so there was no
   fade to see. SVG groups need transform-box:fill-box or the origin is the
   whole viewBox and the piece swings in from a corner instead of rising
   where it stands. The engine's window (1.6 s) outlasts the last slot
   (700 ms delay plus 620 ms), so no group is cut off. */
@keyframes sceneIn{
  0%   { transform:translateY(16px) scale(.88) rotate(-1.8deg) }
  58%  { transform:translateY(-3px) scale(1.03) rotate(1.2deg) }
  82%  { transform:translateY(1px)  scale(.995) rotate(-.5deg) }
  100% { transform:none }
}
@keyframes sceneFade{ from{ opacity:0 } to{ opacity:1 } }
/* --enter-step is the gap between slots. The engine reads it too: a scene
   rebuilt mid-entrance (a sprite landing) gets negative delays from it so
   the groups carry on instead of starting again (continueEntrance()). */
.app[data-scene-enter]{ --enter-step:140ms }
.app[data-scene-enter] .stage svg [data-enter]{
  transform-box:fill-box; transform-origin:50% 65%;
  animation:sceneIn .62s cubic-bezier(.3,1,.6,1) both, sceneFade .4s ease-out both;
}
.app[data-scene-enter] .stage svg [data-enter="1"]{ animation-delay:calc(var(--enter-step) * 1), calc(var(--enter-step) * 1) }
.app[data-scene-enter] .stage svg [data-enter="2"]{ animation-delay:calc(var(--enter-step) * 2), calc(var(--enter-step) * 2) }
.app[data-scene-enter] .stage svg [data-enter="3"]{ animation-delay:calc(var(--enter-step) * 3), calc(var(--enter-step) * 3) }
.app[data-scene-enter] .stage svg [data-enter="4"]{ animation-delay:calc(var(--enter-step) * 4), calc(var(--enter-step) * 4) }
.app[data-scene-enter] .stage svg [data-enter="5"]{ animation-delay:calc(var(--enter-step) * 5), calc(var(--enter-step) * 5) }
.a11y-nomotion .stage svg [data-enter]{ animation:none !important }
@media (prefers-reduced-motion: reduce){
  .app[data-scene-enter] .stage svg [data-enter]{ animation:none }
}

/* ====================================================================
   The keypad panel fills its own height (design lane, Omri, 6 Sep 2026)
   ====================================================================
   Omri, on the desktop keypad panel: why do we need this dead space? And
   check it with a lot of content. Measured before this section, on
   geo.solid.count.g5.006 ("How many vertices does the box have?"):

     1440x900   panel 490x646, keys 129x49, 142px of bare cream between the
                keypad and the buttons (172px in Hebrew, one line of text)
     1920x1080  223px of bare cream
     1024x640   panel 434px tall: the sentence squeezed to 12px (its
                padding), the last key row hidden under the Check button

   Two causes. The keypad and the readout are flex:0 0 auto and the sentence
   flex:0 1 auto with min-height:0 (the rule that made a long sentence
   scroll instead of pushing the keys out), so every spare pixel lands in
   the action row's auto top margin: the dead space. And the panel is
   exactly the board's height, so on a short or narrow desktop it is
   shorter than a sentence plus a keypad, and it hides the overflow.

   Now, for a panel that shows a keypad, on desktop:
     - the keys take three quarters of the free space and grow up to 96px
       tall, and under pressure give back at most 5px, to the 44px touch
       floor; the digits scale with the screen height so a tall key does
       not carry a small number;
     - the sentence takes the rest. When even a panel at full screen
       height cannot hold everything (200% text on a 640px-tall window),
       the sentence is the one thing that gives and scrolls inside itself,
       which is the ruling above; a fixed three-line floor was tried and
       pushed the Check button out of the frame in exactly that case;
     - the panel is the board's height when that is enough, and grows for
       its content up to the screen when it is not.
   Panels without a keypad are not touched: their sentence card already
   fills the column. Landscape phones keep their NIC-1051 compaction. */
@media (min-width:1024px) and (min-height:600px){
  .side:has(.keypad:not([hidden])){
    height:auto;
    min-height:min(100%, var(--board-h),
                   calc((100vw - 2 * var(--app-padx) - var(--app-gap) - var(--side-w)) * 3.4 / 4));
    max-height:100%;
  }
  .side:has(.keypad:not([hidden])) > .say{
    flex:1 1 auto; margin-bottom:0;
    min-height:0;
    overflow-y:auto; overscroll-behavior:contain;
    /* the same cue the phone gives: when the sentence has to scroll, its last
       visible line fades out instead of being cut through; when it does not,
       the fade lies inside the sentence's own bottom padding */
    padding-bottom:16px;
    -webkit-mask-image:linear-gradient(#000 calc(100% - 14px), transparent);
    mask-image:linear-gradient(#000 calc(100% - 14px), transparent);
  }
  .side:has(.keypad:not([hidden])) > .say::-webkit-scrollbar{ width:6px }
  .side:has(.keypad:not([hidden])) > .say::-webkit-scrollbar-thumb{ background:rgba(25,22,34,.25); border-radius:99px }
  .side:has(.keypad:not([hidden])) .keypad{
    flex:3 1 auto;
    min-height:calc(4 * 44px + 3 * 8px);
    max-height:calc(4 * 96px + 3 * 8px);
    grid-template-rows:repeat(4, minmax(0, 1fr));
  }
  .side:has(.keypad:not([hidden])) .keypad button{
    height:auto; min-height:44px;
    font-size:calc(clamp(21px, 2.6vh, 30px) * var(--a11y-scale));
  }
  .side:has(.keypad:not([hidden])) .ctl.actions{ margin-top:0; flex:0 0 auto }
}

/* ---- NIC-1344: the panel slot ---- */
/* A mechanic's clues, chips or running sum, drawn under the question on the
   landscape board (drawPanel() in engine.js). Never on an upright phone, where
   the board is a short strip and the content stays on the stage. */
.panelslot{ margin-top:14px; width:100% }
.panelslot svg{ display:block; width:100%; height:auto; overflow:visible }
@media (orientation:portrait){ .panelslot{ display:none !important } }

/* ---- NIC-1344: no hard borders ---- */
/* Omri, 17 Oct 2026, on every MiniMath game: "everything has a thick border,
   remove those" (Bible §5.5.15: separate things with space, tint, rounded
   corners and soft shadow; a solid outline only where it is a decided part of
   the design). One rule set instead of 800 stroke attributes in 58 files:
   CSS outranks an SVG presentation attribute, so every filled shape drawn
   with the ink outline loses it, while open paths (ticks, rails, hands,
   arrows, fraction bars) keep their ink because they ARE the drawing. The
   chrome keeps its border WIDTH, made transparent, so no layout moves, and
   gets a soft shadow instead. High contrast (a11y) keeps every border. */
html:not(.a11y-contrast) #scene :is(rect, circle, ellipse, polygon, path)[fill]:not([fill="none"]):not([fill="transparent"])[stroke="#191622"],
html:not(.a11y-contrast) #panelsvg :is(rect, circle, ellipse, polygon, path)[fill]:not([fill="none"]):not([fill="transparent"])[stroke="#191622"]{
  stroke:none;
}
html:not(.a11y-contrast) :is(.stage, .say, .tag, .step, .read, .keypad button, .pickgrid button, .seg, .soundcardin){
  border-color:transparent;
}
/* The board itself: its 4px ink rim goes too; the paper, the rounded corner
   and the drop shadow already set it off the field. The side card's rim is the
   Figma panel-frame art and stays. */
html:not(.a11y-contrast) :is(.stage svg, .gatebtn){
  border-color:transparent;
}
html:not(.a11y-contrast) :is(.step, .read, .keypad button, .pickgrid button){
  box-shadow:0 3px 8px rgba(25,22,34,.16), 0 1px 0 rgba(25,22,34,.10);
}

/* ---- NIC-1051: the keypad stays inside the cream block, landscape ---- */
/* Inbal, 21 Oct 2026: the last keypad row ran out of the cream block and
   crowded Hint / Check it, on a landscape phone in both languages. Measured on
   production, 640x360 (the common landscape phone): the panel's inner box is
   240px, but the readout, the 4-row keypad, the 58px action row and the gaps
   alone need 243px, so the question card had already collapsed to 12px and the
   keys still ended 20px past the cream block (55px at 568x320).
   Underneath that there is a geometry fault at EVERY landscape size: the cream
   block ends --go-h + 12px above the panel floor, but the action row is
   --go-h + 4px tall and the keypad sits one 3px gap above it, so whenever the
   panel is full the keys end 5px INSIDE the block's 7px painted lip, desktop
   included (measured: 2px above the block's CSS edge at 1366x768). The row's
   auto top margin only lifts the keys when there is slack, and a long question
   eats the slack first.
   Fix: the keypad carries a bottom margin that holds its last row 13px above
   the block's CSS edge (6px past the lip, 3px after the keys' shadow) at every
   landscape breakpoint, whatever fills the panel. On phones under 430px the
   room has to come from inside the panel, since the chrome row above it is
   fixed: a 44px action row with no padding of its own (still the 44px floor,
   rule 23), one gap less above and below the panel, the cream edge 4px above
   the row, and under 400px 30px keys (the size Omri accepted on 6 Sep), a
   16px readout and a slimmer card. After, at 640x360: keys 13px above the
   cream edge, one line of the question back on screen. 568x320 is still over
   (the question hides first, the keys and Check it last): that height is a
   layout change, not a tightening. */
@media (orientation:landscape){
  .side .keypad{ margin-bottom:12px }                     /* desktop: gap 14-18 -> 14px+ clear */
}
@media (orientation:landscape) and (max-height:560px){
  .side .keypad{ margin-bottom:18px }                     /* gap 3, row 58, edge at go-h+12 -> 13px clear */
}
@media (orientation:landscape) and (max-height:430px){
  .app{ padding-top:calc(env(safe-area-inset-top, 0px) + 10px + var(--chrome-size) + 4px);
        padding-bottom:calc(env(safe-area-inset-bottom, 0px) + 4px) }
  .side{ --go-h:44px; gap:3px }
  .side::before{ inset:0 0 calc(var(--go-h) + 4px) 0 }
  .side .ctl.actions{ gap:7px; padding:0 0 2px }
  .side .keypad{ margin-bottom:12px }                     /* gap 3, row 46, edge at go-h+4 -> 13px clear */
}
@media (orientation:landscape) and (max-height:400px){
  .side{ gap:2px }
  .side .say{ padding:3px 10px }
  .read{ padding:2px 10px; min-height:0 } .read .n{ font-size:calc(16px * var(--a11y-scale)) }
  .keypad{ gap:4px; margin-top:0 }
  .side .keypad{ margin-bottom:13px }                     /* gap 2 -> 13px clear */
  .keypad button{ padding:4px 0; font-size:calc(14.5px * var(--a11y-scale)); border-radius:10px }
  .keypad button svg{ width:20px; height:16px }
}
