/* Glacier console. Approved 18/10/2026. Shared by the map and spelling screens. */
html.console body { margin:0; padding:0; overflow:hidden; }
html.console .app { width:100%; max-width:none; }
html.console .scene-root { min-height:100dvh; }
.handheld {
  --plastic:#92b9cb; --plastic-bottom:#729cad; --plastic-ink:#253e50;
  --key:#f1eee4; --key-ink:#334750; --bezel:#263841;
  position:relative; isolation:isolate; width:100%; height:100dvh; min-height:0; max-width:none; margin:0; text-align:left;
  padding:max(22px,env(safe-area-inset-top)) max(24px,env(safe-area-inset-right)) max(18px,env(safe-area-inset-bottom)) max(24px,env(safe-area-inset-left));
  grid-template-columns:clamp(144px,16vw,200px) minmax(0,1fr) clamp(144px,16vw,200px);
  grid-template-rows:minmax(0,1fr) 48px; grid-template-areas:'move lcd hear' 'utility signature utility-right';
  gap:10px 20px; border-radius:0;
  background:radial-gradient(ellipse at 40% 0, #c7e2e975, transparent 60%),linear-gradient(165deg,var(--plastic),var(--plastic-bottom));
  box-shadow:inset 0 2px 1px #ffffff80,inset 0 -5px 0 #29495835;
  color:var(--plastic-ink);
}
.handheld::before { content:''; position:absolute; inset:9px; border:1px solid #ffffff29; border-bottom-color:#28445133; border-radius:18px; pointer-events:none; z-index:-1; }
.handheld .panel { display:contents; }
.handheld .lcd {
  grid-area:lcd; min-width:0; min-height:0; display:grid;
  grid-template-rows:30px auto minmax(0,1fr) 62px;
  background:var(--bezel); padding:14px; border-radius:25px 25px 35px 25px;
  border:2px solid #1c2d35; box-shadow:0 2px 0 #f1f7f899,0 7px 0 #45647155,inset 0 2px 3px #ffffff24,0 12px 25px #28495625;
  overflow:hidden;
}
.screen-top { display:flex; justify-content:space-between; align-items:center; gap:8px; color:#c1d5de; padding:0 4px 8px; font-size:12px; font-weight:650; }
.word-deck { display:flex; align-items:center; justify-content:space-between; gap:12px; background:var(--guide-bg); padding:12px; border-radius:9px 9px 0 0; color:var(--ink); }
.collect-label { font-size:12px; max-width:65px; line-height:1.3; font-weight:650; }
.handheld .wordbox-wrap { min-width:0; display:flex; gap:8px; padding:0; background:none; box-shadow:none; border-radius:0; }
.handheld .wordbox { display:flex; gap:4px; flex-wrap:wrap; justify-content:center; }
.handheld .slot { flex-shrink:0; width:32px; height:36px; border-radius:6px; background:#f5f2e8; border-bottom:2px solid #9fb6c2; color:#2a475b; font-size:23px; }
.handheld .slot.on { background:#ffda87; color:#2a475b; }
.handheld .viewfinder { position:relative; min-height:0; overflow:clip; background:var(--snow); }
.handheld .map-wrap { display:block; position:absolute; inset:0; width:100%; height:100%; padding:0; margin:0; background:var(--snow); box-shadow:none; border-radius:0; overflow:clip; }
.handheld .map-wrap::after { display:none; }
.handheld .map.grid { position:absolute; left:0; top:0; max-width:none; margin:0; border-radius:0; align-content:start; transition:transform 160ms var(--ease); }
.handheld .tile.letter .glyph { font-size:var(--map-letter); }
.handheld .guide { position:static; width:100%; padding:6px 10px; margin:0; transform:none; opacity:1; transition:none; border-radius:0 0 9px 9px; background:var(--guide-bg); box-shadow:none; display:grid; grid-template-columns:42px 1fr; gap:8px; align-items:center; }
.handheld .guide.show { transform:none; }
.handheld .guide .owl { width:40px; height:46px; margin:0; }
.handheld .guide .bubble { font-size:15px; line-height:1.3; color:var(--ink); font-weight:600; }
.handheld .bubble::after { display:none; }
.handheld .move-cluster { grid-area:move; align-self:center; display:grid; grid-template-columns:1fr; grid-template-rows:auto auto; justify-items:center; gap:22px; margin-top:100px; color:var(--plastic-ink); }
.handheld .dpad { position:relative; grid-area:auto; width:156px; max-width:none; height:156px; margin:0; grid-template-columns:repeat(3,1fr); grid-template-rows:repeat(3,1fr); align-self:auto; justify-self:auto; filter:drop-shadow(0 5px 0 #4c626b) drop-shadow(0 7px 4px #30455155); }
.handheld .dpad::before { content:''; position:absolute; width:54px; height:54px; left:51px; top:51px; border-radius:50%; background:radial-gradient(circle,#c1cac8 0 25%,#e0e1d8 28% 54%,#c6ceca 58% 60%,transparent 63%); z-index:2; pointer-events:none; }
.handheld .dpad::after { background:var(--key); }
.handheld .dpad-btn { min-width:0; min-height:0; font-size:17px; color:var(--key-ink); background:var(--key); box-shadow:inset 0 2px 0 #fff8; }
.handheld .dpad-up { border-radius:10px 10px 0 0; }.handheld .dpad-down { border-radius:0 0 10px 10px; }.handheld .dpad-left { border-radius:10px 0 0 10px; }.handheld .dpad-right { border-radius:0 10px 10px 0; }
.handheld .dpad-btn:active { background:#c9d3d2; box-shadow:inset 0 3px 5px #52697933; }
.key-caption { font-size:11px; font-weight:750; letter-spacing:2px; }
.handheld .hear-cluster { grid-area:hear; display:flex; position:relative; flex-direction:column; align-items:center; justify-content:center; align-self:center; gap:26px; padding:0; margin-top:100px; }
.handheld .btn-speak { width:90px; height:90px; min-width:0; min-height:0; padding:11px 0 7px; align-content:center; gap:0; border:1px solid #ffffff60; background:linear-gradient(145deg,#fbf6e9,#dedfd3); color:var(--key-ink); box-shadow:0 5px 0 #4c626b,0 7px 8px #30455155,inset 0 2px 0 #ffffffe0; justify-self:center; }
.handheld .btn-speak svg { width:32px; height:32px; }
.handheld .btn-speak .speak-label { font-size:13px; line-height:1.6; margin:0; }
.overview-button { color:var(--plastic-ink); background:#ffffff21; border:1px solid #314c5b55; box-shadow:inset 0 1px 0 #ffffff45,0 2px 0 #30455144; border-radius:50%; width:64px; height:64px; display:grid; align-content:center; justify-items:center; gap:1px; padding:5px; font:inherit; font-size:12px; font-weight:650; line-height:1.2; }
.overview-button svg { width:23px; height:23px; fill:none; stroke:currentColor; stroke-width:1.6; stroke-linecap:round; }
.overview-button[aria-pressed=true] { background:var(--key); }
.console-signature { grid-area:signature; display:flex; align-items:center; justify-content:center; gap:8px; color:var(--plastic-ink); user-select:none; }
.console-signature b { font-size:25px; font-weight:850; letter-spacing:-.3px; }
.brand-snow { font-size:28px; }.edition { display:none; }
.console-utility { grid-area:utility; display:flex; justify-content:center; align-items:center; gap:14px; }
.handheld .btn-menu { color:var(--plastic-ink); background:#ffffff20; border:1px solid #36556550; border-radius:20px; box-shadow:0 2px 0 #30455133,inset 0 1px 0 #ffffff50; min-height:48px; padding:0 18px; font-size:11px; }
.speaker-grille { display:flex; gap:5px; transform:rotate(-25deg); }.speaker-grille i { display:block; width:4px; height:25px; background:#29495866; border-radius:8px; box-shadow:1px 1px 0 #ffffff55; }
.handheld .sheet { grid-area:auto; }.handheld .sheet-card { color:#214a73; }
.handheld button:focus-visible { outline:3px solid #283949; outline-offset:4px; }
.handheld .sheet button:focus-visible { outline-color:#214a73; }
.handheld .clue { font-size:30px; }
.handheld.overview .viewfinder { pointer-events:none; }

/* Portrait is a tall handheld: large screen above a completely separate thumb deck. */
@media (orientation:portrait) {
  .handheld { padding:max(18px,env(safe-area-inset-top)) max(18px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(18px,env(safe-area-inset-left)); grid-template-columns:1fr 1fr; grid-template-rows:minmax(0,1fr) 52px 210px 48px; grid-template-areas:'lcd lcd' 'signature signature' 'move hear' 'utility utility'; column-gap:20px; row-gap:0; }
  .handheld .lcd { padding:14px; grid-template-rows:30px auto minmax(0,1fr) 66px; }
  .handheld .move-cluster { margin:0; justify-self:start; padding-left:16px; gap:18px; }
  .handheld .hear-cluster { margin:0; flex-direction:row; gap:20px; justify-self:end; padding-right:16px; }
  .handheld .btn-speak { order:2; transform:translateY(-24px); }
  .overview-button { transform:translateY(30px); }
  .console-utility { position:relative; width:100%; }
  .speaker-grille { position:absolute; right:26px; bottom:5px; }
  .edition { display:inline; font-size:8px; letter-spacing:1.4px; max-width:100px; line-height:1.5; margin-left:8px; }
  .handheld .word-deck { justify-content:center; }.collect-label { max-width:none; }
}
@media (orientation:portrait) and (max-width:600px) {
  .handheld { padding:max(12px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(12px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left)); grid-template-rows:minmax(0,1fr) 48px 184px 48px; column-gap:10px; }
  .handheld .lcd { padding:10px; border-radius:18px 18px 28px 18px; grid-template-rows:26px auto minmax(0,1fr) 62px; }
  .handheld .word-deck { padding:8px; gap:6px; }.handheld .collect-label { display:none; }
  .handheld .slot { flex-shrink:0; width:32px; height:35px; }
  .handheld .move-cluster { padding-left:3px; gap:18px; }
  .handheld .dpad { width:144px; height:144px; }
  .handheld .dpad::before { width:48px; height:48px; left:48px; top:48px; }
  .handheld .hear-cluster { padding-right:3px; gap:14px; }
  .handheld .btn-speak { width:76px; height:76px; }
  .overview-button { width:54px; height:54px; }
  .handheld .guide .bubble { font-size:14px; }.screen-top { font-size:11px; }
  .console-signature b { font-size:23px; }.edition { font-size:7px; letter-spacing:1px; }
}
/* Phone landscape keeps real thumb rails; the camera supplies the missing world height. */
@media (orientation:landscape) and (max-height:600px) {
  .handheld { padding:max(8px,env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) max(8px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left)); grid-template-columns:144px minmax(0,1fr) 130px; grid-template-rows:minmax(0,1fr) 48px; column-gap:14px; row-gap:4px; }
  .handheld .lcd { padding:7px; border-radius:16px 16px 22px 16px; grid-template-rows:23px auto minmax(0,1fr) 48px; }
  .handheld .word-deck { padding:5px 8px; }.handheld .slot { width:29px; height:32px; font-size:21px; }
  .handheld .dpad { width:144px; height:144px; }.handheld .dpad::before { width:48px; height:48px; left:48px; top:48px; }
  .handheld .move-cluster { margin-top:10px; gap:15px; }
  .handheld .hear-cluster { margin-top:10px; gap:18px; flex-direction:row; flex-wrap:wrap; }
  .handheld .btn-speak { width:72px; height:72px; margin-left:30px; }.overview-button { width:52px; height:52px; margin-right:42px; }
  .handheld .guide { grid-template-columns:30px 1fr; padding:3px 8px; gap:7px; }.handheld .guide .owl { width:30px; height:36px; }.handheld .guide .bubble { font-size:14px; }
  .console-signature b { font-size:20px; }.brand-snow { font-size:22px; }.speaker-grille { display:none; }.handheld .btn-menu { min-height:48px; }
}
.handheld.lenny { grid-template-columns:220px minmax(0,1fr) 180px; grid-template-rows:minmax(0,1fr) 72px; }
.handheld.lenny .dpad { width:216px; height:216px; }
.handheld.lenny .dpad::before { width:72px; height:72px; left:72px; top:72px; }
.handheld.lenny .slot { width:44px; height:46px; font-size:30px; }
.handheld.lenny .btn-speak { width:84px; height:84px; }
.handheld.lenny .overview-button { width:72px; height:72px; }
.handheld.lenny .btn-menu { min-height:72px; min-width:80px; }
.handheld.lenny .word-deck { min-height:58px; }
@media(orientation:portrait) {
  .handheld.lenny { grid-template-columns:216px minmax(0,1fr); grid-template-rows:minmax(0,1fr) 48px 246px 72px; }
  .handheld.lenny .move-cluster { padding:0; }
  .handheld.lenny .hear-cluster { flex-direction:column; gap:16px; padding-right:5px; }
  .handheld.lenny .btn-speak { order:0; transform:none; }.handheld.lenny .overview-button { transform:none; }
}
@media(orientation:landscape) and (max-height:600px) {
  .handheld.lenny { grid-template-columns:216px minmax(0,1fr) 112px; }
  .handheld.lenny .move-cluster { margin-top:0; gap:12px; }
  .handheld.lenny .hear-cluster { gap:14px; }.handheld.lenny .btn-speak,.handheld.lenny .overview-button { margin:0; }
  .handheld.lenny .lcd { grid-template-rows:23px 58px minmax(0,1fr) 44px; }
}
@media(prefers-reduced-motion:reduce) { .handheld .map.grid { transition:none; } }

html.console .scenery, html.console > body > .snowfield { display:none; }
.handheld .lcd { position:relative; }
.handheld .map-wrap .horizon { display:none; }
.handheld .dpad { gap:0; }
.handheld .dpad::after { content:''; grid-area:2 / 2; }
.handheld .btn-speak { border-radius:50%; display:grid; place-items:center; }
.handheld .btn-speak .speak-label { display:block; }
.handheld .btn-menu { text-transform:uppercase; letter-spacing:1px; }
.handheld .guide .owl { order:-1; }
.handheld .guide .bubble { padding:0; text-align:left; background:transparent; box-shadow:none; margin:0; }
.handheld .word-deck { min-width:0; }
.handheld .guide { overflow:auto; }
.handheld .map { touch-action:manipulation; }
.handheld.overview .map { pointer-events:none; }
.handheld .dpad-btn, .handheld .btn-speak, .handheld .overview-button { touch-action:none; -webkit-touch-callout:none; }
.handheld .btn-speak:active { translate:0 3px; box-shadow:0 2px 0 #4c626b,inset 0 2px 0 #fff8; }
.handheld .screen-top .carry { display:flex; align-items:center; }
.handheld .screen-top .carry svg { width:20px; height:20px; }
.handheld .screen-top .carry:not(:empty) { gap:4px; font-size:12px; }
.handheld .sheet-card { max-height:90dvh; }
.handheld .sheet .trip { color:#214a73; }
.handheld .sheet .legend { display:flex; }
.handheld .sheet .hint { display:flex; justify-content:center; gap:4px; }
.handheld .sheet .sign-actions { display:grid; }
.handheld .sheet .mnemonic { display:block; }
.handheld .sheet-open { pointer-events:auto; }
.handheld .slot.on { animation:pop .35s var(--ease); }

/* Spelling uses the same casing. The keyboard replaces movement controls. */
.test.handheld {
  grid-template-columns:100px minmax(0,1fr) 100px;
  grid-template-rows:minmax(0,1fr) auto 38px;
  grid-template-areas:'back lcd hear' 'keys keys keys' '. signature .';
  gap:16px 18px;
  overflow:hidden;
}
.test.handheld .test-lcd { grid-template-rows:32px minmax(0,1fr) 62px; }
.test.handheld .test-top { grid-area:auto; padding:0 5px 9px; color:#dcecf7; gap:10px; }
.test.handheld .test-top .eyebrow { margin:0; color:inherit; font-size:14px; letter-spacing:0; text-transform:none; }
.test.handheld .stops { gap:5px; flex-wrap:wrap; justify-content:end; }
.test.handheld .stops .stop { width:11px; height:11px; border:2px solid #a9c2ce; }
.test.handheld .stops .stop.done { background:#ffda87; border-color:#ffda87; }
.test.handheld .test-display { position:relative; min-height:0; overflow:auto; overscroll-behavior:contain; border-radius:9px 9px 0 0; background:var(--snow); }
.test.handheld .test-display .scene { position:absolute; inset:0; min-height:100%; }
.test.handheld .board { position:relative; z-index:1; width:100%; max-width:none; padding:20px 14px 82px; border-radius:0; background:transparent; box-shadow:none; color:var(--ink); gap:12px; }
.test.handheld .board-title { text-align:center; font-size:22px; line-height:1.25; }
.test.handheld .answer { min-height:46px; width:100%; gap:5px; align-content:start; }
.test.handheld .cell { width:46px; height:54px; font-size:32px; flex-shrink:0; border-radius:7px; border-width:2px; border-color:#849fab; color:var(--ink); }
.test.handheld .cell.on { background:#f5f2e8; color:#214a73; }
.test.handheld .cell.shown { color:#214a73; }
.test.handheld .cell.cell-ending-er { border-color:var(--ending-er); background:var(--ending-er-bg); color:var(--ending-er); }
.test.handheld .cell.cell-ending-est { border-color:var(--ending-est); background:var(--ending-est-bg); color:var(--ending-est); }
.test.handheld .cell.fix { border-color:var(--next-ink); box-shadow:0 0 0 2px var(--next-ink) inset; }
.test.handheld .cell.ghost { color:var(--ink-muted); opacity:.7; }
.test.handheld .cell.won { background:#ffda87; color:#214a73; }
.test.handheld .cell.gone { width:auto; }
.test.handheld .board-note { min-height:0; letter-spacing:0; }
.test.handheld .board-note:empty { display:none; }
.test.handheld .btn-try { min-height:48px; font-size:18px; padding:0 22px; }
.test.handheld .raft-float { width:100px; bottom:5%; animation:none; }
.test.handheld .scene .river { bottom:4%; height:16%; }
.test.handheld .test-guide { grid-area:auto; grid-template-columns:42px 1fr; width:100%; min-width:0; min-height:0; align-items:center; align-content:center; justify-self:stretch; padding:6px 10px; gap:8px; background:var(--guide-bg); border-radius:0 0 9px 9px; overflow:auto; }
.test.handheld .test-guide .owl { order:-1; width:40px; height:46px; }
.test.handheld .test-guide .bubble { background:none; border-radius:0; box-shadow:none; padding:0; text-align:left; font-size:16px; line-height:1.3; font-weight:600; }
.test.handheld .test-guide .bubble::after { display:none; }
.test.handheld .test-input { grid-area:keys; width:100%; max-width:820px; justify-self:center; min-height:0; }
.test.handheld .keys { --key-gap:6px; --key:clamp(44px,calc((100cqw - 9 * var(--key-gap)) / 10),68px); gap:8px; max-width:none; align-self:auto; }
.test.handheld .key { height:clamp(48px,6dvh,64px); border-radius:10px; background:linear-gradient(155deg,#f8f4e9,#e4e4d9); color:#2c4552; box-shadow:0 4px 0 #536e77,0 5px 5px #3045512b,inset 0 1px 0 #fff9; }
.test.handheld .key-go { background:#294956; color:#f7f3e7; }
.test.handheld .key:active { box-shadow:0 1px 0 #536e77; }
.test.handheld .keys-alphabet { display:grid; grid-template-columns:repeat(6,minmax(0,1fr)); gap:6px; container-type:normal; }
.test.handheld .keys-alphabet .key { width:100%; min-width:0; height:48px; font-size:24px; }
.test.handheld .keys-alphabet .key-back,.test.handheld .keys-alphabet .key-go { grid-column:span 2; font-size:20px; }
.test.handheld .flakes { gap:28px; min-height:160px; align-items:center; }
.test.handheld .flake { width:140px; min-height:140px; color:#294956; }
.test.handheld .flake svg { width:80px; height:80px; }
.test.handheld .test-speak { position:static; grid-area:hear; align-self:center; justify-self:center; margin:0; }
.test.handheld .test-back { grid-area:back; justify-self:center; align-self:center; min-height:48px; padding:8px 12px; font-size:14px; border:1px solid #36556550; background:#ffffff21; color:var(--plastic-ink); box-shadow:0 2px 0 #30455133; border-radius:18px; }
.test.handheld .console-signature { grid-area:signature; }
@media(orientation:portrait) {
  .test.handheld { grid-template-columns:1fr 1fr; grid-template-rows:minmax(0,1fr) 40px auto 64px; grid-template-areas:'lcd lcd' 'signature signature' 'keys keys' 'back hear'; gap:10px 16px; }
  .test.handheld .test-lcd { grid-template-rows:32px minmax(0,1fr) 64px; }
  .test.handheld .test-speak { transform:none; width:64px; height:64px; min-height:64px; justify-self:end; margin-right:12px; padding:5px; }
  .test.handheld .test-speak svg { width:28px; height:28px; }
  .test.handheld .test-back { justify-self:start; margin-left:12px; }
}
@media(orientation:portrait) and (max-width:600px) {
  .test.handheld { grid-template-rows:minmax(0,1fr) 30px auto 56px; gap:8px 12px; }
  .test.handheld .test-lcd { grid-template-rows:26px minmax(0,1fr) 56px; }
  .test.handheld .board { padding:14px 8px 58px; gap:9px; }
  .test.handheld .board-title { font-size:18px; }
  .test.handheld .cell { width:28px; height:38px; font-size:23px; }
  .test.handheld .test-guide { grid-template-columns:36px 1fr; padding:5px 7px; gap:7px; }
  .test.handheld .test-guide .owl { width:34px; height:40px; }
  .test.handheld .test-guide .bubble { font-size:14px; }
  .test.handheld .test-speak { width:56px; height:56px; min-height:56px; padding:3px; }
  .test.handheld .test-speak svg { width:24px; height:24px; }
  .test.handheld .raft-float { width:76px; }
  .test.handheld .many-stops { display:none; }
  .test.handheld .console-signature b { font-size:20px; }
  .test.handheld .edition { display:none; }
}
@media(orientation:landscape) and (max-height:600px) {
  .test.handheld { grid-template-columns:84px minmax(0,1fr) 84px; grid-template-rows:minmax(0,1fr) auto; grid-template-areas:'back lcd hear' 'keys keys keys'; gap:8px 12px; }
  .test.handheld .test-lcd { grid-template-rows:22px minmax(0,1fr) 40px; padding:7px; }
  .test.handheld .test-display { min-height:0; }
  .test.handheld .board { padding:8px 6px; gap:6px; min-height:100%; align-content:start; background:color-mix(in srgb,var(--snow),transparent 15%); }
  .test.handheld .board-title { font-size:17px; }
  .test.handheld .answer { min-height:36px; }
  .test.handheld .cell { width:28px; height:36px; font-size:23px; }
  .test.handheld .keys { gap:6px; max-width:740px; }
  .test.handheld .key { height:48px; font-size:24px; }
  .test.handheld .key-go { font-size:18px; }
  .test.handheld .test-guide { grid-template-columns:28px 1fr; padding:2px 7px; gap:6px; }
  .test.handheld .test-guide .owl { width:28px; height:34px; }
  .test.handheld .test-guide .bubble { font-size:14px; }
  .test.handheld .test-speak { width:72px; height:72px; }
  .test.handheld .test-back { padding:8px; font-size:12px; }
  .test.handheld .console-signature { display:none; }
  .test.handheld .flakes { min-height:144px; }
  .test.handheld .flake { min-height:130px; }
  .test.handheld .btn-try { min-height:48px; font-size:16px; }
}
@media(prefers-reduced-motion:reduce) { .handheld .slot.on,.test.handheld .cell.won,.test.handheld .cell.fix { animation:none; } }
@media(orientation:landscape) and (max-height:600px) {
  .test.handheld .board { min-height:0; background:transparent; }
  .test.handheld .raft-float { width:64px; bottom:0; }
}

/* Very long custom words scroll in their own strip, preserving the map viewport. */
.handheld.long-word .wordbox-wrap { max-width:100%; overflow-x:auto; }
.handheld.long-word .wordbox { flex-wrap:nowrap; justify-content:start; }
.handheld.long-word .collect-label { display:none; }

/* One compact footer leaves the map more room without shrinking touch targets. */
.handheld .move-cluster { grid-template-rows:auto; margin-top:0; }
.handheld .hear-cluster { margin-top:0; }
@media(orientation:portrait) {
  .play.handheld { grid-template-rows:minmax(0,1fr) 176px 48px; grid-template-areas:'lcd lcd' 'move hear' 'signature utility'; }
  .play.handheld .console-utility { justify-content:end; padding-right:8px; }
  .play.handheld .console-signature { justify-content:start; padding-left:8px; }
  .play.handheld .console-signature b { font-size:20px; }
  .play.handheld .console-signature .brand-snow { font-size:22px; }
  .play.handheld.lenny { grid-template-rows:minmax(0,1fr) 224px 72px; }
  .play.handheld.pad-hidden { grid-template-columns:1fr 1fr; grid-template-rows:minmax(0,1fr) 100px; grid-template-areas:'lcd lcd' 'utility hear'; }
  .play.handheld.pad-hidden .console-signature { display:none; }
  .play.handheld.pad-hidden .console-utility { justify-content:start; padding-left:10px; }
  .play.handheld.pad-hidden .hear-cluster { flex-direction:row; gap:14px; }
  .play.handheld.pad-hidden .btn-speak,.play.handheld.pad-hidden .overview-button { transform:none; }
}
@media(orientation:portrait) and (max-width:600px) {
  .play.handheld:not(.lenny):not(.pad-hidden) { grid-template-rows:minmax(0,1fr) 160px 48px; }
}
@media(orientation:landscape) {
  .play.handheld.pad-hidden { grid-template-columns:minmax(0,1fr) 150px; grid-template-areas:'lcd hear' 'signature utility'; }
  .play.handheld.pad-hidden .hear-cluster { flex-direction:column; gap:18px; }
  .play.handheld.pad-hidden .btn-speak,.play.handheld.pad-hidden .overview-button { margin:0; }
}
.test.handheld .test-exit { grid-area:back; flex-direction:column; gap:12px; }
.test.handheld .keyboard-toggle { font-size:14px; min-height:48px; padding:8px; border-radius:18px; background:#ffffff21; border:1px solid #36556550; color:var(--plastic-ink); }
.test.handheld .keyboard-tools { min-height:64px; color:var(--plastic-ink); }
.test.handheld .keyboard-done { min-height:48px; font-size:20px; }
@media(orientation:portrait) {
  .test.handheld .test-exit { display:contents; }
  .test.handheld .keyboard-toggle { position:absolute; bottom:max(20px,env(safe-area-inset-bottom)); left:50%; transform:translateX(-50%); }
  .test.handheld .keyboard-tools { flex-wrap:wrap; gap:12px; }
}
@media(orientation:landscape) and (max-height:600px) {
  .test.handheld .test-exit { gap:8px; }
  .test.handheld .keyboard-toggle { font-size:12px; }
  .test.handheld .keyboard-tools { min-height:48px; }
}

/* Reserve screen space for play. Branding shares the control rail, never a spare row. */
@media(orientation:landscape) {
  .play.handheld:not(.pad-hidden) {
    grid-template-columns:156px minmax(0,1fr) 108px;
    grid-template-rows:minmax(0,1fr) 48px;
    grid-template-areas:'move lcd hear' 'signature lcd utility';
    gap:10px 14px;
  }
  .play.handheld .console-signature b { font-size:18px; }
  .play.handheld .brand-snow { font-size:20px; }
  .play.handheld.lenny:not(.pad-hidden) { grid-template-columns:216px minmax(0,1fr) 96px; grid-template-rows:minmax(0,1fr) 72px; }
  .play.handheld .hear-cluster { flex-direction:column; gap:18px; }
  .play.handheld .btn-speak,.play.handheld .overview-button { margin:0; }
  .play.handheld .lcd { grid-template-rows:24px auto minmax(0,1fr) 52px; }
  .play.handheld .word-deck { padding:7px 10px; }
  .play.handheld.lenny .lcd { grid-template-rows:24px auto minmax(0,1fr) 52px; }
}
@media(orientation:landscape) and (max-height:600px) {
  .play.handheld:not(.pad-hidden) { grid-template-columns:144px minmax(0,1fr) 80px; gap:8px 10px; }
  .play.handheld.lenny:not(.pad-hidden) { grid-template-columns:216px minmax(0,1fr) 84px; }
  .play.handheld .lcd,.play.handheld.lenny .lcd { grid-template-rows:20px auto minmax(0,1fr) 44px; }
  .play.handheld .word-deck { padding:5px 8px; }
  .play.handheld .console-signature b { font-size:16px; }
  .play.handheld .brand-snow { font-size:18px; }
}
/* A spelling screen needs the answer and the next action together. */
.test.handheld .board { padding-bottom:20px; }
.test.handheld .board-note .btn-try { min-height:48px; }
@media(orientation:portrait) and (max-width:600px) {
  .test.handheld { grid-template-rows:minmax(0,1fr) auto 56px; grid-template-areas:'lcd lcd' 'keys keys' 'back hear'; }
  .test.handheld .console-signature { display:none; }
  .test.handheld .board { padding:12px 8px; }
}
@media(orientation:landscape) and (max-height:600px) {
  .test.handheld .board { padding:8px 6px; gap:6px; }
  .test.handheld .board-note { font-size:14px; }
  .test.handheld .board-note .btn-try { min-height:48px; font-size:16px; }
}
/* Keys cannot act during study or feedback, so give that room to the word.
   Ending choices remain visible: they live in this same input area. */
.test:not(.is-typing):not(.choosing-ending) .test-input { display:none; }
.test:not(.is-typing) .keyboard-toggle { visibility:hidden; }
.test.handheld:not(.is-typing) .test-display { display:grid; align-items:center; }
.test.handheld:not(.is-typing) .board { grid-area:auto; }
@media(orientation:portrait) and (max-width:600px) {
  .play.handheld.lenny:not(.pad-hidden) { grid-template-rows:minmax(0,1fr) 248px; grid-template-areas:'lcd lcd' 'move hear'; }
  .play.handheld.lenny:not(.pad-hidden) .console-signature { display:none; }
  .play.handheld.lenny:not(.pad-hidden) .console-utility { position:absolute; bottom:max(12px,env(safe-area-inset-bottom)); right:max(12px,env(safe-area-inset-right)); width:84px; padding:0; justify-content:center; }
  .play.handheld.lenny:not(.pad-hidden) .hear-cluster { align-self:start; justify-self:end; padding-right:0; gap:8px; }
  .play.handheld.lenny .lcd { grid-template-rows:22px auto minmax(0,1fr) 48px; }
  .play.handheld.lenny .guide { padding:4px 8px; }
}

/* Compact Glacier action pair: the same raised keys, in a diagonal thumb group.
   Keep the existing movement pad and map rails; peripheral controls fit around them. */
.play.handheld .hear-cluster {
  display:block; position:relative; width:100%; max-width:140px; height:140px;
  margin:0; padding:0; justify-self:center; align-self:center;
}
.play.handheld .hear-cluster .btn-speak,
.play.handheld .hear-cluster .overview-button {
  position:absolute; margin:0; transform:none; width:56px; height:56px; min-width:48px; min-height:48px;
  padding:5px; gap:0; border-radius:50%; border:1px solid #ffffff80;
  background:linear-gradient(145deg,#fbf6e9,#dedfd3); color:var(--key-ink);
  box-shadow:0 4px 0 #4c626b,0 6px 6px #30455140,inset 0 2px 0 #ffffffe0;
  transition:translate 90ms ease,box-shadow 90ms ease;
}
.play.handheld .hear-cluster .btn-speak { top:0; right:0; width:64px; height:64px; }
.play.handheld .hear-cluster .overview-button { bottom:0; left:0; }
.play.handheld .hear-cluster svg { width:24px; height:24px; }
.play.handheld .hear-cluster .speak-label,.play.handheld .overview-button span { font-size:11px; line-height:1.2; }
.play.handheld .hear-cluster button:active { translate:0 3px; box-shadow:0 1px 0 #4c626b,inset 0 2px 0 #ffffff80; }
.play.handheld .overview-button[aria-pressed=true] { background:#ffda87; box-shadow:0 2px 0 #4c626b,inset 0 0 0 2px #836a31; }
.play.handheld .btn-menu { padding:0 12px; min-width:64px; font-size:10px; border-radius:14px; }
.play.handheld.lenny .hear-cluster { height:160px; }
.play.handheld.lenny .hear-cluster .btn-speak,
.play.handheld.lenny .hear-cluster .overview-button { width:72px; height:72px; min-width:72px; min-height:72px; }
@media(orientation:portrait) {
  .play.handheld:not(.lenny):not(.pad-hidden) { grid-template-rows:minmax(0,1fr) 176px; grid-template-areas:'lcd lcd' 'move hear'; }
  .play.handheld:not(.pad-hidden) .console-signature { display:none; }
  .play.handheld:not(.lenny) .hear-cluster { height:104px; align-self:start; margin-top:10px; justify-self:end; }
  .play.handheld:not(.lenny):not(.pad-hidden) .console-utility { position:absolute; bottom:max(16px,env(safe-area-inset-bottom)); right:max(18px,env(safe-area-inset-right)); width:auto; padding:0; }
  .play.handheld.pad-hidden .hear-cluster { height:80px; width:132px; margin:0; align-self:center; }
}
@media(orientation:portrait) and (max-width:600px) {
  .play.handheld:not(.lenny):not(.pad-hidden) { grid-template-rows:minmax(0,1fr) 160px; }
  .play.handheld:not(.lenny):not(.pad-hidden) .console-utility { right:max(12px,env(safe-area-inset-right)); bottom:max(12px,env(safe-area-inset-bottom)); }
  .play.handheld.lenny:not(.pad-hidden) { grid-template-rows:minmax(0,1fr) 232px; }
  .play.handheld.lenny .hear-cluster { width:100%; max-width:100px; height:152px; }
}
@media(orientation:landscape) {
  .play.handheld:not(.lenny):not(.pad-hidden) { grid-template-columns:156px minmax(0,1fr) 88px; }
}
@media(orientation:landscape) and (max-height:600px) {
  .play.handheld:not(.lenny):not(.pad-hidden) { grid-template-columns:144px minmax(0,1fr) 80px; }
}

/* Treat the answer and explorer as one composition, rather than opposite edges
   of an expanding sky. The short river still shows progress between rounds. */
.test.handheld .test-display,
.test.handheld:not(.is-typing) .test-display {
  display:grid; grid-template-columns:minmax(0,1fr); grid-template-rows:auto auto;
  align-content:safe center; align-items:stretch;
  background:linear-gradient(180deg,var(--bg-1),var(--snow));
}
.test.handheld .test-display .board {
  grid-area:1 / 1; align-self:end; min-height:0; padding:12px 12px 4px; gap:10px;
}
.test.handheld .test-display .scene {
  grid-area:2 / 1; position:relative; inset:auto; min-height:0; height:clamp(90px,16dvh,170px);
  background:none; overflow:hidden;
}
.test.handheld .test-display .raft-float { width:100px; bottom:8%; }
.test.handheld .test-display .hill-far { height:42%; bottom:8%; }
.test.handheld .test-display .hill-near { height:30%; }
.test.handheld .test-display .river { bottom:6%; height:24%; }
.test.handheld .test-speak { width:56px; height:56px; min-height:48px; padding:4px; }
.test.handheld .test-speak svg { width:24px; height:24px; }
.test.handheld .test-speak .speak-label { font-size:11px; }
.test.handheld .test-back,.test.handheld .keyboard-toggle { font-size:12px; padding:6px 9px; }
@media(orientation:landscape) and (min-height:601px) {
  .test.handheld { grid-template-columns:76px minmax(0,1fr) 64px; column-gap:12px; }
}
@media(orientation:portrait) and (max-width:600px) {
  .test.handheld .test-display .board { padding:8px 8px 4px; gap:7px; }
  .test.handheld .test-display .scene { height:100px; }
  .test.handheld .test-display .raft-float { width:84px; }
}
@media(orientation:landscape) and (max-height:600px) {
  .test.handheld { grid-template-columns:72px minmax(0,1fr) 56px; column-gap:8px; }
  .test.handheld .test-display,
  .test.handheld:not(.is-typing) .test-display { grid-template-columns:minmax(0,1fr) 84px; grid-template-rows:auto; align-content:center; }
  .test.handheld .test-display .board { grid-area:1 / 1; padding:6px; align-self:center; gap:5px; }
  .test.handheld .test-display .scene { grid-area:1 / 2; height:90px; align-self:center; }
  .test.handheld .test-display .raft-float { width:64px; left:calc(4% + var(--progress) * 18%); bottom:8%; }
  .test.handheld .test-display .hill { display:none; }
}
@media(prefers-reduced-motion:reduce) {
  .play.handheld .hear-cluster button { transition:none; }
}
/* Delta-style lower grips: reserve space below the pair for Menu. */
@media(orientation:landscape) {
  .play.handheld:not(.pad-hidden) .move-cluster,
  .play.handheld:not(.pad-hidden) .hear-cluster { grid-row:1 / -1; align-self:end; margin-bottom:clamp(64px,10dvh,88px); }
}
@media(min-width:601px) and (min-height:601px) {
  .test.handheld .board-title { font-size:26px; }
  .test.handheld .cell { width:54px; height:64px; font-size:38px; }
  .test.handheld .test-display .scene { height:clamp(150px,22dvh,210px); }
  .test.handheld .test-display .raft-float { width:140px; }
}
/* Tablet spelling is a bounded activity screen, not an empty full-height sky. */
@media(orientation:portrait) and (min-width:601px) {
  .test.handheld { grid-template-rows:minmax(0,560px) auto 64px; grid-template-areas:'lcd lcd' 'keys keys' 'back hear'; align-content:center; }
  .test.handheld .console-signature { display:none; }
  .test.handheld .keyboard-toggle { position:static; grid-area:back; justify-self:end; margin-right:12px; transform:none; }
  .test.handheld .test-back { margin-left:0; }
}
@media(orientation:landscape) and (min-height:601px) {
  .test.handheld { grid-template-rows:minmax(0,420px) auto 30px; align-content:center; }
}
@media(orientation:landscape) {
  .play.handheld.lenny:not(.pad-hidden) .move-cluster,
  .play.handheld.lenny:not(.pad-hidden) .hear-cluster { margin-bottom:88px; }
}
