/* Teléfonos: medidas CSS, sin depender del nombre o generación del dispositivo. */
@media (max-width:700px){
 body:not(.playing) .topbar{display:grid;grid-template-columns:minmax(0,1fr) auto 44px 44px;gap:8px;padding:calc(10px + env(safe-area-inset-top)) max(12px,env(safe-area-inset-right)) 8px max(12px,env(safe-area-inset-left))}
 body:not(.playing) .topbar .brand{grid-column:1;grid-row:1;min-width:0;font-size:10px;gap:7px}
 body:not(.playing) .brand-mark{width:34px;height:34px;flex-shrink:0}
 body:not(.playing) .topbar :is(.account-button,.profile){grid-column:2;grid-row:1;margin:0;order:0;max-width:125px;min-height:44px;font-size:12px;padding:6px}
 body:not(.playing) .topbar .help-button{grid-column:3;grid-row:1;width:44px;height:44px;margin:0}
 body:not(.playing) .topbar .idea-button{grid-column:4;grid-row:1;margin:0;width:44px;height:44px;padding:0;order:0}
 body:not(.playing) .topbar nav{grid-column:1/-1;grid-row:2;width:100%;display:flex;gap:4px}
 .topbar .nav{min-height:44px;flex:1;text-align:center;padding:12px 8px;font-size:13px}
 #playerName{max-width:64px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
 body:not(.playing) main{padding:20px max(16px,env(safe-area-inset-right)) calc(20px + env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))}
 .daily-strip{padding:12px;gap:8px}.daily-strip-actions{flex-wrap:wrap}.daily-strip .text-button{min-height:44px}
 .game-cards{gap:20px}.game-info{padding:16px}.game-actions{flex-wrap:wrap;gap:8px}.game-actions button{min-height:48px}
 dialog{width:calc(100% - 24px);max-width:480px;max-height:calc(100dvh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom));padding:24px 18px;overscroll-behavior:contain;scroll-padding:16px}
 dialog :is(input,textarea,select){font-size:16px;min-height:44px;max-width:100%}
 dialog :is(.button,.text-button,.close),.auth-tabs button{min-height:44px}
 dialog .close{min-width:44px}
 dialog.tour{bottom:calc(12px + env(safe-area-inset-bottom));max-height:calc(100dvh - 32px - env(safe-area-inset-top) - env(safe-area-inset-bottom))}
 dialog.tour.tour-top{top:calc(12px + env(safe-area-inset-top))}
 dialog.tour.tour-modal{inset:0;margin:auto}
 .tour-actions button{min-height:44px}.tour-actions{gap:8px}
 .level-buttons{flex-wrap:wrap}.team-join{min-width:0}.team-join input{min-width:0}
 body.playing .topbar{display:none}
 body.playing main{padding-top:calc(10px + env(safe-area-inset-top));padding-bottom:calc(16px + env(safe-area-inset-bottom))}
 body.playing .game-heading{flex-wrap:wrap;gap:8px}
 body.playing .game-tools{width:100%;justify-content:space-between}
 body.playing .game-tools :is(.mini-button,.text-button){min-height:44px;min-width:44px;font-size:13px}
 body.playing .drawer-toggle{display:inline-flex;align-items:center;justify-content:center}
 body.playing .touch-controls{gap:10px}
 body.playing .interaction-bar .button{min-height:48px}
}
/* En vertical el panel es un cajón inferior; en horizontal permanece a la derecha. */
@media (max-width:700px) and (orientation:portrait){
 body.playing .order-panel:not([hidden]){position:fixed;z-index:20;inset:auto 0 0;max-height:65dvh;overflow:auto;overscroll-behavior:contain;padding:16px 16px calc(16px + env(safe-area-inset-bottom));border:1px solid #59465f;border-radius:18px 18px 0 0;background:#241f31;box-shadow:0 -12px 40px #0009;visibility:hidden;pointer-events:none;transform:translateY(105%)}
 body.playing.drawer-open .order-panel:not([hidden]){visibility:visible;pointer-events:auto;transform:none}
 body.playing .drawer-close{display:block;min-width:44px;min-height:44px;margin:0 0 8px auto}
 body.playing .drawer-tabs{display:flex;position:sticky;top:-16px;gap:4px;background:#241f31;z-index:1;padding:8px 0}
 body.playing .drawer-tabs button{flex:1;min-height:44px;padding:6px 4px;font-size:13px}
 body.playing .drawer-tabs button[aria-selected=true]{background:#2fe07a;color:#0b2e18}
 body.playing .drawer-tabs .drawer-close{flex:0 0 44px;margin:0}
 body.playing .escape-panel [data-pane]:not(.active){display:none}
 body.playing .dpad-option{display:flex;gap:10px;align-items:center;min-height:44px;font-size:14px}
}
@media (orientation:landscape) and (max-height:520px){
 body.playing #gameView,body.playing #gameView:fullscreen{grid-template-rows:calc(48px + env(safe-area-inset-top)) minmax(0,1fr)}
 body.playing .game-heading{padding-top:env(safe-area-inset-top);flex-wrap:nowrap}
 body.playing .game-tools{width:auto}
 body.playing .game-tools :is(.mini-button,.text-button){min-width:44px;min-height:44px}
 body.playing .order-panel:not([hidden]){top:calc(48px + env(safe-area-inset-top));padding-bottom:calc(16px + env(safe-area-inset-bottom));overscroll-behavior:contain}
 body.playing .drawer-tabs button,body.playing .drawer-close{min-height:44px}
 body.playing .interaction-bar,body.playing.show-dpad .touch-controls{bottom:max(14px,env(safe-area-inset-bottom))}
 body.playing .next-step{min-width:0}
 body.playing .mobile-hud{padding-top:env(safe-area-inset-top)}
 body.playing main{padding:0}
 .dpad-option{display:flex;gap:8px;align-items:center;min-height:44px}
}
@media(prefers-reduced-motion:reduce){.order-panel{transition:none!important}}
.dpad-option input[type=checkbox]{width:22px;height:22px;min-height:22px;flex:0 0 22px;margin:0;accent-color:var(--green)}
@media(max-width:700px){body:not(.playing) .topbar .idea-button{justify-content:center}}

body.playing.show-dpad .touch-controls .touch-help{display:none!important}
/* La misma elección de movimiento en escritorio y celular. */
.dpad-option{display:flex;gap:8px;align-items:center;min-height:44px;font-size:13px}
body.playing.show-dpad [data-map-help]{display:none}
/* Al girar o volver a escritorio, los avisos móviles no ocupan filas del juego. */
body.playing .play-tip{display:none}
@media (orientation:portrait) and (max-width:700px), (orientation:portrait) and (pointer:coarse){
 body.playing .play-tip:not([hidden]){display:flex}
}

/* ── Salir, turno abierto y palanca ── */
.button.danger{background:#3a1f2b;border:1px solid #ed657d;color:#ffd9df;box-shadow:3px 3px 0 #5b2233}
.button.danger:hover{background:#4d2636}
.mini-button.exit-button{border-color:#ed657d;color:#ffd9df;background:#3a1f2b;font-weight:700}
.resume-bar{display:flex;align-items:center;justify-content:space-between;gap:12px 20px;flex-wrap:wrap;margin:0 0 14px;padding:14px 16px;border:2px solid var(--green);border-radius:4px;background:#1d2a24}
.resume-bar[hidden]{display:none}
.resume-bar .eyebrow{color:var(--green);margin:0 0 4px}
.resume-bar strong{display:block;font-size:16px}
.resume-bar small{display:block;margin-top:3px;color:var(--muted);font-size:12px}
.resume-actions{display:flex;align-items:center;gap:6px 14px;flex-wrap:wrap}
.resume-actions .text-button{min-height:44px;color:#ffb3bf}
/* The stick: a ring and a knob that follows the thumb. Off by default; on, it floats over the bottom left of the stage. */
.stick{display:none;position:absolute;z-index:4;left:14px;bottom:88px;width:128px;height:128px;border-radius:50%;flex:none;
 background:radial-gradient(circle,#2b2638d9 0 38%,#16151cc7 39% 100%);border:2px solid #fff3bc8c;box-shadow:0 4px 0 #0007;touch-action:none;cursor:grab}
.stick-knob{position:absolute;left:50%;top:50%;width:54px;height:54px;margin:-27px 0 0 -27px;border-radius:50%;background:var(--green);
 border:2px solid #0b2e18;box-shadow:0 3px 0 #137a3f;pointer-events:none;transition:transform .09s ease-out}
.stick.held{cursor:grabbing}.stick.held .stick-knob{transition:none}
@media (orientation:landscape) and (min-height:521px), (min-width:701px) and (min-height:521px){body.playing .cabinet{position:relative}}
body.playing.show-dpad .stick{display:block}
@media(prefers-reduced-motion:reduce){.stick-knob{transition:none}}

/* ── Celular parado (iPhone 16/17/18 y similares, 375 a 440 px de ancho) ──
   Igual que acostado: el juego llena la pantalla, los controles flotan sobre el pulgar y nada se desplaza. Arriba:
   nombre y herramientas, marcador, nivel y «Ahora». El panel sigue siendo el cajón de abajo. */
html:has(body.playing){overscroll-behavior:none}
@media (orientation:portrait) and (max-width:700px){
 html:has(body.playing){overflow:hidden}
 body.playing{overflow:hidden;overscroll-behavior:none}
 body.playing main{padding:0;height:100dvh;min-height:0;max-width:none}
 body.playing #gameView,body.playing #gameView:fullscreen{display:flex;flex-direction:column;gap:6px;height:100dvh;margin:0;overflow:hidden;background:#16151c;
  padding:calc(6px + env(safe-area-inset-top)) 0 0}
 body.playing .play-tip,body.playing .cabinet-header,body.playing .touch-controls :is(.keyboard-help,.touch-help),body.playing #touchPadToggle{display:none!important}
 body.playing .game-heading{order:0;flex-wrap:nowrap;align-items:center;gap:8px;margin:0;padding:0 max(10px,env(safe-area-inset-right)) 0 max(10px,env(safe-area-inset-left))}
 body.playing .game-heading>div:first-child{min-width:0;flex:1}
 body.playing .game-heading h1{font-size:17px;line-height:1.1;margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
 body.playing .game-tools{width:auto;gap:5px;flex:none;justify-content:flex-end}
 body.playing .game-tools :is(.mini-button,.text-button){min-width:44px;min-height:44px;padding:6px 8px;font-size:13px}
 body.playing .mobile-hud:not([hidden]){order:1;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;margin:0 max(10px,env(safe-area-inset-right)) 0 max(10px,env(safe-area-inset-left))}
 body.playing .mobile-hud>span{display:flex;align-items:baseline;justify-content:space-between;gap:6px;padding:5px 9px;font:9px monospace;white-space:nowrap;overflow:hidden}
 body.playing .mobile-hud strong{display:inline;margin:0;font-size:16px}
 body.playing .level-strip:not([hidden]){order:2;flex-wrap:nowrap;gap:8px;font-size:10px;margin:0 max(10px,env(safe-area-inset-right)) 0 max(10px,env(safe-area-inset-left));white-space:nowrap;overflow:hidden}
 body.playing .level-strip progress{flex:1;min-width:30px;max-width:none;height:6px}
 body.playing .level-strip>span{overflow:hidden;text-overflow:ellipsis}
 body.playing #comboLabel,body.playing .strip-end{margin-left:0;font-size:10px}
 body.playing .next-step{order:3;margin:0 max(10px,env(safe-area-inset-right)) 0 max(10px,env(safe-area-inset-left));min-height:0;padding:7px 10px;font-size:13px;line-height:1.3}
 body.playing .pixel-layout{order:4;flex:1;min-height:0;display:block;position:relative;height:auto}
 body.playing .cabinet{position:absolute;inset:0;height:auto;display:block;border:0;border-top:2px solid #59465f;box-shadow:none;background:#16151c}
 body.playing .stage-viewport{position:absolute;inset:0;width:auto;height:auto;aspect-ratio:auto;background:#16151c}
 body.playing .interaction-bar{position:fixed;z-index:5;right:max(14px,env(safe-area-inset-right));bottom:calc(14px + env(safe-area-inset-bottom));
  display:flex;flex-direction:column;align-items:flex-end;gap:6px;min-height:0;padding:0;background:none;border:0;max-width:58vw;pointer-events:none}
 body.playing .interaction-bar>span{flex:none;font-size:12px;line-height:1.3;padding:4px 9px;background:#1b1a2ae0;border-radius:4px;text-align:right}
 body.playing .interaction-bar .button{pointer-events:auto;min-width:132px;min-height:58px;max-width:none;font-size:15px;border-radius:29px;box-shadow:0 3px 0 #0008}
 body.playing .touch-controls{display:none}
 body.playing.show-dpad .touch-controls{display:block;position:fixed;z-index:5;left:max(14px,env(safe-area-inset-left));bottom:calc(14px + env(safe-area-inset-bottom));min-height:0;padding:0;background:none;border:0}
 body.playing.show-dpad .stick{position:relative;left:auto;bottom:auto}
 body.playing.drawer-open .interaction-bar,body.playing.drawer-open .touch-controls{visibility:hidden;pointer-events:none}
 body.playing .order-panel:not([hidden]){max-height:72dvh;transition:transform .18s ease-out}
 body.playing .order-panel .score-heading{display:block}body.playing .order-panel .hud{display:grid;grid-template-columns:1fr 1fr}
 body.playing #toast{top:calc(58px + env(safe-area-inset-top));bottom:auto;left:12px;right:12px;width:auto;max-width:none;transform:none;text-align:center}
 .resume-bar{flex-direction:column;align-items:stretch}.resume-actions .button{flex:1;min-height:48px}
}
@media (orientation:landscape) and (max-height:520px){
 body.playing.show-dpad .stick{position:relative;left:auto;bottom:auto;width:116px;height:116px}
 body.playing .interaction-bar{pointer-events:none}body.playing .interaction-bar .button{pointer-events:auto}
 body.playing.drawer-open .touch-controls{visibility:hidden;pointer-events:none}
}
@media (orientation:landscape) and (max-height:520px){
 body.playing .mobile-hud>span{display:flex;align-items:baseline;gap:5px;white-space:nowrap}
 body.playing .mobile-hud strong{margin:0}
}
/* Con los controles flotando, el letrero de ayuda solo sale cuando hay algo que hacer: no tapa el mapa mientras caminas. */
@media (orientation:portrait) and (max-width:700px), (orientation:landscape) and (max-height:520px){
 body.playing .interaction-bar:has(.button:disabled)>span{display:none}
 body.playing .interaction-bar .button:disabled{opacity:.4}
}
/* iPhone con isla o muesca (y la app instalada en inicio, que dibuja debajo de la hora): la barra de arriba, los
   diálogos y el pie dejan libre el área segura en cualquier orientación. Sin muesca, env() vale 0 y nada cambia. */
body:not(.playing) .topbar{padding-top:calc(10px + env(safe-area-inset-top));padding-left:max(4.5%,env(safe-area-inset-left));padding-right:max(4.5%,env(safe-area-inset-right))}
body:not(.playing) main{padding-left:max(4.5%,env(safe-area-inset-left));padding-right:max(4.5%,env(safe-area-inset-right));padding-bottom:calc(20px + env(safe-area-inset-bottom))}
dialog{max-height:calc(100dvh - 24px - env(safe-area-inset-top) - env(safe-area-inset-bottom))}
#toast{margin-bottom:env(safe-area-inset-bottom)}

/* Resultado: este turno contra tu mejor y contra el primer lugar del día. */
.result-compare{margin:14px 0 4px;padding:12px;border:1px solid #59465f;border-radius:4px;background:#1b1924;text-align:left}
.result-compare[hidden]{display:none}
.result-compare strong{display:block;margin-bottom:10px;font-size:14px;color:#fff3bc;text-align:center}
.cmp{display:grid;grid-template-columns:minmax(0,9.5em) minmax(0,1fr) auto;align-items:center;gap:8px;margin:6px 0;font-size:12px;color:var(--muted)}
.cmp span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmp>div{height:8px;background:#2b2638;border-radius:4px;overflow:hidden}
.cmp i{display:block;height:100%;background:#8c84a8;border-radius:4px}
.cmp.now i{background:var(--green)}.cmp.top i{background:#f2d15c}
.cmp b{font:700 13px monospace;color:var(--text)}

/* Música y efectos, cada uno con su botón: apagado se ve tachado y tenue. */
.mini-button.off{opacity:.55;text-decoration:line-through;text-decoration-thickness:2px}
/* En el cel parado no cabe (ni sirve en iPhone) el botón de pantalla completa. */
@media (orientation:portrait) and (max-width:700px){body.playing #sizeButton{display:none}body.playing .game-tools :is(.mini-button,.text-button){padding:6px}}

/* ── Avisos: discretos. Una tarjetita oscura con su línea verde, arriba del juego, que no tapa ni estorba. ── */
#toast{left:50%;right:auto;top:auto;bottom:calc(22px + env(safe-area-inset-bottom));transform:translateX(-50%);width:max-content;max-width:min(420px,calc(100vw - 32px));margin:0;
 padding:10px 14px 10px 16px;background:#1f1d29f2;color:#f4efe6;border:1px solid #4b455c;border-left:3px solid var(--green);border-radius:8px;box-shadow:0 6px 18px #0007;
 font-size:13px;line-height:1.4;text-align:left;animation:toast-in .16s ease-out}
#toast[hidden]{display:none}
@keyframes toast-in{from{opacity:0;transform:translateX(-50%) translateY(6px)}to{opacity:1;transform:translateX(-50%)}}
body.playing #toast{top:calc(64px + env(safe-area-inset-top));bottom:auto;font-size:12.5px;padding:8px 12px 8px 14px}
@media (orientation:landscape) and (max-height:520px){body.playing #toast{top:calc(52px + env(safe-area-inset-top))}}
@media (orientation:portrait) and (max-width:700px){body.playing #toast{top:calc(150px + env(safe-area-inset-top));left:50%;right:auto;width:max-content;max-width:calc(100vw - 24px);transform:translateX(-50%);text-align:left}}
@media(prefers-reduced-motion:reduce){#toast{animation:none}}
/* Dentro del aviso: de qué es, el título, el texto y, si guardaste una hoja, la hoja. */
#toast small{display:block;margin-bottom:2px;font:700 9px monospace;letter-spacing:.1em;color:var(--green)}
#toast b{display:block;font-size:13.5px;margin-bottom:2px}
#toast span{display:block}
#toast em{display:block;margin-top:5px;font-style:normal;font-size:11.5px;color:#b9a8bf}
#toast article{margin-top:7px;padding:7px 9px;background:#fff4c8;color:#3a2c20;border-radius:4px;font-size:12.5px}
#toast article p{margin:3px 0 0}
/* Solo los que preguntan algo se quedan y se pueden tocar. */
#toast.sticky{pointer-events:auto;border-left-color:#c9a3ff}
#toast:not(.sticky){pointer-events:auto;cursor:pointer}
.toast-actions{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:9px}
.toast-actions .button{min-height:44px;padding:8px 14px;font-size:13px}
.toast-actions .text-button{min-height:44px;font-size:13px}

/* ── La reta de ping pong: una vista propia; en el cel ocupa toda la pantalla. ── */
dialog.pong{width:min(420px,calc(100vw - 24px));max-width:none;padding:14px;text-align:center;background:#16151c;border:1px solid #4b455c}
dialog.pong::backdrop{background:#000c}
.pong-score{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;margin:6px 0 10px;font:700 11px monospace;color:#c7b9ca}
.pong-score b{display:block;font-size:26px;line-height:1;color:var(--green)}
.pong-score span:first-child b{color:#c9a3ff}
#pongState{font-size:11px;color:#fff3bc}
#pongCanvas{display:block;width:100%;max-width:min(340px,calc((100dvh - 250px)*.75));height:auto;aspect-ratio:3/4;margin:0 auto;border:2px solid #59465f;border-radius:4px;touch-action:none;outline:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
dialog.pong .muted{font-size:12px;min-height:2.6em;margin:10px 0 0}
dialog.pong .result-actions{margin-top:8px;gap:6px}
@media (max-width:700px){dialog.pong{width:100vw;height:100dvh;max-height:none;margin:0;border:0;border-radius:0;padding:calc(12px + env(safe-area-inset-top)) 14px calc(12px + env(safe-area-inset-bottom));display:none;flex-direction:column;justify-content:center}
 dialog.pong[open]{display:flex}#pongCanvas{max-width:min(100%,calc((100dvh - 260px)*.75))}}
@media (orientation:landscape) and (max-height:520px){dialog.pong{width:100vw;height:100dvh;max-height:none;margin:0;border:0;padding:8px max(14px,env(safe-area-inset-right)) 8px max(14px,env(safe-area-inset-left))}
 dialog.pong[open]{display:grid;grid-template-columns:1fr auto 1fr;grid-template-rows:auto 1fr auto;align-items:center;column-gap:16px}
 dialog.pong .eyebrow{grid-column:1;grid-row:1}.pong-score{grid-column:1;grid-row:2;grid-template-columns:1fr;gap:14px}#pongCanvas{grid-column:2;grid-row:1/4;height:calc(100dvh - 20px);width:auto;max-width:none}
 dialog.pong .muted{grid-column:3;grid-row:2}dialog.pong .result-actions{grid-column:3;grid-row:3}}
/* Dentro del juego los avisos dejan pasar el toque al mapa, menos los que traen botones: esos sí se tocan. */
body.playing #toast:not(.sticky){pointer-events:none;cursor:default}
body.playing #toast.sticky,#toast.sticky{pointer-events:auto;z-index:200}
body.playing #toast.sticky .toast-actions button{touch-action:manipulation;pointer-events:auto}
/* Cel parado: los avisos salen abajo, encima del botón de acción, donde están los ojos y el pulgar. Un poco más
   grandes que acostado. Con la palanca fija prendida suben para no taparla. */
@media (orientation:portrait) and (max-width:700px){
 body.playing #toast{top:auto;bottom:calc(92px + env(safe-area-inset-bottom));font-size:14px;padding:11px 14px 11px 16px;max-width:calc(100vw - 28px);box-shadow:0 8px 24px #000a}
 body.playing.show-dpad #toast{bottom:calc(158px + env(safe-area-inset-bottom))}
 body:not(.playing) #toast{bottom:calc(28px + env(safe-area-inset-bottom));font-size:14px}
 @keyframes toast-in{from{opacity:0;transform:translateX(-50%) translateY(10px)}to{opacity:1;transform:translateX(-50%)}}
}

/* Volumen de la música, en el panel. */
.dpad-option.volume{justify-content:space-between;gap:12px}
.dpad-option.volume span{flex:none}
.dpad-option.volume input[type=range]{flex:1;min-width:90px;max-width:190px;height:28px;accent-color:var(--green);touch-action:pan-x}

/* La versión del juego, a la vista en la portada. */
.app-version{font:700 11px monospace;letter-spacing:.04em;color:var(--green);white-space:nowrap}

/* ── Dali dice: sus cuatro cosas en cuatro botones grandes. ── */
.says-pads{display:grid;grid-template-columns:1fr 1fr;gap:12px;width:min(100%,340px,calc(100dvh - 330px));margin:6px auto 4px;aspect-ratio:1}
.says-pads button{border:3px solid #0d0b1a;border-radius:18px;font-size:clamp(34px,11vw,56px);line-height:1;min-height:80px;opacity:.62;transition:transform .08s,opacity .08s,box-shadow .08s;touch-action:manipulation;-webkit-tap-highlight-color:transparent;box-shadow:0 5px 0 #0009}
.says-pads button:disabled{cursor:default;opacity:.5}
.says-pads button:not(:disabled){opacity:.82;cursor:pointer}
.says-pads .p0{background:#c8413e}.says-pads .p1{background:#d9a441}.says-pads .p2{background:#ec589a}.says-pads .p3{background:#6a1fd6}
.says-pads button.lit{opacity:1;transform:scale(1.05);box-shadow:0 0 0 4px #fff3bc,0 0 26px #fff3bc99}
.says-pads button:not(:disabled):active{transform:scale(.96)}
dialog.says #saysState{max-width:12em;line-height:1.3}
.pong-streak{margin:6px 0 0;font:700 11px monospace;color:var(--green);min-height:1.2em}
@media (orientation:landscape) and (max-height:520px){
 dialog.says[open]{grid-template-columns:1fr auto 1fr}
 .says-pads{grid-column:2;grid-row:1/4;width:auto;height:calc(100dvh - 24px);margin:0}
 dialog.says .muted{grid-column:3;grid-row:2}dialog.says .result-actions{grid-column:3;grid-row:3}
 .says-pads button{min-height:0}.pong-streak{grid-column:1;grid-row:3}
}
@media(prefers-reduced-motion:reduce){.says-pads button{transition:none}}
/* Marcadores de los minijuegos. */
dialog.board{width:min(440px,calc(100vw - 24px));text-align:left}
dialog.board .record-tabs{margin:10px 0}
dialog.board .record-tabs .button{flex:1;min-height:44px;padding:8px 10px;font-size:13px}
dialog.board #boardList{max-height:46dvh;overflow:auto}

/* ── Escape en llamas ── */
dialog.fly{background:#160a0e}
.fly-pick{display:grid;gap:8px;max-width:340px;margin:8px auto 0;text-align:left}
.fly-pick .button{min-height:54px;font-size:16px}
.fly-pick .fine{margin:0 0 8px;font-size:12px;line-height:1.45;color:#b9a8bf}
#flyStage[hidden],.fly-pick[hidden]{display:none}
#flyCanvas{display:block;width:100%;max-width:min(560px,calc((100dvh - 300px)*1.333));height:auto;aspect-ratio:4/3;/* the game sets both for the shape of its stage */margin:0 auto;border:2px solid #5b2a1a;border-radius:4px;touch-action:none;outline:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;cursor:pointer}
.fly-wings{display:block;width:74px;height:8px;border:1px solid #59465f;border-radius:4px;overflow:hidden;background:#1b1924}
.fly-wings i{display:block;height:100%;width:100%;background:#f4efe0}
.fly-voice{display:flex;align-items:center;gap:8px;max-width:340px;margin:8px auto 0;font-size:14px}
.fly-voice[hidden]{display:none}
.fly-voice div{flex:1;height:10px;border:1px solid #59465f;border-radius:5px;overflow:hidden;background:#1b1924}
.fly-voice i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--green),#f2d15c,#ff6a2a)}
dialog.fly .result-actions{flex-direction:row;flex-wrap:wrap;justify-content:center;gap:4px 14px}
dialog.fly .result-actions .text-button{min-height:44px}

@media (orientation:landscape) and (max-height:520px){
 dialog.fly[open]{grid-template-columns:auto minmax(0,1fr) auto}
 dialog.fly #flyStage,dialog.fly .fly-pick{grid-column:2;grid-row:1/4}
 #flyCanvas{height:calc(100dvh - 40px);width:auto;max-width:100%}
 dialog.fly .muted,dialog.fly #flyError{grid-column:3;grid-row:2;max-width:26vw}
 dialog.fly .result-actions{grid-column:3;grid-row:3;flex-direction:column}
}

.says-pads button canvas{width:clamp(44px,15vw,72px);height:clamp(44px,15vw,72px);image-rendering:pixelated;vertical-align:middle;pointer-events:none}
.says-pads .p0{background:#c8413e}.says-pads .p1{background:#e0892c}.says-pads .p2{background:#2f8a5f}.says-pads .p3{background:#6a1fd6}

/* Escape en llamas en el cel parado: menos relleno alrededor para que el escenario alto quepa completo. */
@media (orientation:portrait) and (max-width:700px){dialog.fly{justify-content:flex-start;padding-top:calc(8px + env(safe-area-inset-top))}dialog.fly .pong-score{margin:2px 0 6px}dialog.fly .muted{min-height:0;margin:6px 0 0;font-size:11.5px}dialog.fly .result-actions{margin-top:2px}dialog.fly .result-actions .text-button{min-height:40px}}

/* ── Admin · Actividad: lo que pasó, contado por día y por páginas. ── */
.activity-filter{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.activity-filter .mini-button{min-height:36px;padding:6px 12px;border-radius:18px}
.activity-filter .mini-button.on{background:var(--green);color:#0b2e18;border-color:var(--green);font-weight:700}
.activity-feed h3{margin:16px 0 6px;padding-bottom:5px;border-bottom:1px solid #3a3448;font:700 11px monospace;letter-spacing:.1em;text-transform:uppercase;color:#e9cfb0}
.activity-feed h3:first-child{margin-top:0}
.activity-feed p{display:grid;grid-template-columns:24px minmax(0,1fr) auto;gap:8px;align-items:baseline;margin:0;padding:8px 4px;border-bottom:1px solid #2b2638;font-size:14px;line-height:1.4}
.activity-feed p:last-child{border-bottom:0}
.activity-feed p>span:first-child{text-align:center}
.activity-feed time{font:12px monospace;color:var(--muted);white-space:nowrap}
.activity-feed .k-termino b{color:#8fe3a8}.activity-feed .k-sugerencia b{color:#f2d15c}
.pager{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:12px;font-size:13px;color:var(--muted)}
.pager[hidden]{display:none}
.pager .mini-button{min-height:40px;padding:8px 12px}
#activityCount{font-weight:400;letter-spacing:0;color:var(--muted);text-transform:none}

/* El resumen de 7 días tiene muchas columnas: en pantallas angostas se desliza de lado dentro de su tarjeta. */
.activity-summary{overflow-x:auto;-webkit-overflow-scrolling:touch;margin-bottom:16px}
.activity-summary table{min-width:520px}
.activity-summary td:first-child,.activity-summary th:first-child{white-space:nowrap;position:sticky;left:0;background:var(--panel)}

/* ── Tiro con arco ── */
body.playing #arcoCanvas{display:block;margin:0;flex:none;touch-action:none;cursor:crosshair;outline:none}
.arco-message{font-size:12px;padding:10px;margin:0 0 14px;background:#1f1c30;border-left:3px solid var(--green)}
#arcoArrows{accent-color:#f2d15c}
/* Tres juegos en la portada: tres columnas en pantallas anchas, dos en medianas, una en el cel. */
@media(min-width:1180px){.game-cards{grid-template-columns:repeat(3,minmax(0,1fr))}}

/* ── Atajos flotantes del escape: pasos y mochila, a un toque, sin tapar el mapa. ── */
.quick-tabs{position:absolute;z-index:6;left:8px;top:50%;transform:translateY(-50%);display:flex;flex-direction:column;gap:8px}
.quick-tabs[hidden]{display:none}
.quick-tabs button{display:grid;place-items:center;gap:0;width:46px;height:46px;padding:2px 0 0;border:1px solid #59465f;border-radius:12px;background:#1b1a2ad9;color:#f4efe6;font-size:18px;line-height:1;box-shadow:0 3px 0 #0007;touch-action:manipulation}
.quick-tabs button small{font:700 9px monospace;color:#c7b9ca;line-height:1.1}
.quick-tabs button:active{transform:translateY(2px);box-shadow:0 1px 0 #0007}
.quick-tabs #quickNotes{min-width:16px;padding:0 4px;border-radius:8px;background:#3a3448;color:#fff3bc}
.quick-tabs #quickNotes.new{background:var(--green);color:#0b2e18}
/* With the drawer open its own tabs do the job: the floating shortcuts step aside so they never cover what you read. */
body.playing.drawer-open .quick-tabs{display:none}
@media (orientation:landscape) and (max-height:520px){.quick-tabs{top:auto;bottom:calc(12px + env(safe-area-inset-bottom));transform:none;left:max(12px,env(safe-area-inset-left));flex-direction:row}body.playing.show-dpad .quick-tabs{left:calc(max(12px,env(safe-area-inset-left)) + 130px)}}
@media (orientation:portrait) and (max-width:700px){.quick-tabs{position:fixed;top:auto;bottom:calc(16px + env(safe-area-inset-bottom));transform:none;left:max(14px,env(safe-area-inset-left));flex-direction:row}body.playing.show-dpad .quick-tabs{bottom:calc(158px + env(safe-area-inset-bottom))}}
.escape-panel [data-pane].flash{animation:pane-flash .9s ease-out}
@keyframes pane-flash{from{background:#2fe07a33}to{background:transparent}}

/* ── Duelo contra Dali ── */
#dueloCanvas{display:block;width:100%;max-width:min(560px,calc((100dvh - 330px)*1.333));height:auto;aspect-ratio:4/3;margin:0 auto;border:2px solid #59465f;border-radius:4px;touch-action:none;outline:none;cursor:crosshair;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.duelo-pad{display:grid;grid-template-columns:150px minmax(0,1fr);gap:10px;align-items:center;max-width:560px;margin:10px auto 0;text-align:left}
.duelo-pad button{height:58px;border:2px solid #59465f;border-radius:14px;background:#2b2638;color:#f4efe6;font-size:22px;box-shadow:0 4px 0 #0008;touch-action:none;-webkit-user-select:none;user-select:none}
.duelo-pad button:active{transform:translateY(3px);box-shadow:0 1px 0 #0008;background:#3a3448}
.duelo-stick{position:relative;height:62px;border:2px solid #59465f;border-radius:31px;background:#1b1a2a;box-shadow:inset 0 3px 0 #0006;touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;cursor:grab}
.duelo-stick::before,.duelo-stick::after{position:absolute;top:50%;transform:translateY(-50%);color:#8e8499;font-size:13px}.duelo-stick::before{content:'◀';left:10px}.duelo-stick::after{content:'▶';right:10px}
.duelo-knob{position:absolute;z-index:1;left:50%;top:50%;width:48px;height:48px;margin:-24px 0 0 -24px;border-radius:50%;background:var(--green);border:2px solid #0b2e18;box-shadow:0 3px 0 #0008;transition:transform .12s}
.duelo-stick.held{cursor:grabbing}.duelo-stick.held .duelo-knob{transition:none}
.duelo-pad .muted{margin:0;min-height:0;font-size:12px;line-height:1.35}
dialog.duelo .pong-score b{font-size:20px;letter-spacing:2px;color:#ef82b2}
dialog.duelo .pong-score span:last-child b{color:#c9a3ff}
@media (orientation:landscape) and (max-height:520px){
 dialog.duelo[open]{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr)}
 #dueloCanvas{grid-column:2;grid-row:1/5;height:calc(100dvh - 20px);width:auto;max-width:none}
 .duelo-pad{grid-column:1;grid-row:3;grid-template-columns:150px;margin:0}.duelo-pad .muted{grid-column:1/-1}
 dialog.duelo .pong-streak{grid-column:3;grid-row:2}dialog.duelo .result-actions{grid-column:3;grid-row:3}
}

/* Los avisos que solo informan nunca pasan de unas líneas: dicen qué pasó y no tapan el juego. */
#toast:not(.sticky)>span{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:var(--lines,3);overflow:hidden}
#toast:not(.sticky){max-height:34dvh;overflow:hidden}
#toast.taps em{color:var(--green)}
body.playing #toast.taps{pointer-events:auto;cursor:pointer}
/* Tiro con arco: se tira jalando. Ni botón de acción ni palanca: estorbaban, y la cámara ya enseña el blanco sola. */
body[data-game=arco] #interactButton,body[data-game=arco] .touch-controls,body[data-game=arco] .stick,body[data-game=arco] #touchPadToggle{display:none!important}
/* Tiro con arco: qué flecha usar. Tres botones chicos a la orilla, que no tapan ni a Dali ni al blanco. */
.arrow-kinds{position:absolute;z-index:6;right:8px;bottom:64px;display:flex;flex-direction:column;gap:6px}
.arrow-kinds[hidden]{display:none}
.arrow-kinds button{display:grid;place-items:center;width:50px;height:44px;padding:2px 0 0;border:1px solid #59465f;border-radius:12px;background:#1b1a2ad9;color:#c7b9ca;font-size:15px;line-height:1;box-shadow:0 3px 0 #0007;touch-action:manipulation;-webkit-user-select:none;user-select:none}
.arrow-kinds button small{font:700 9px monospace;line-height:1.1}
.arrow-kinds button.active{border-color:#2fe07a;color:#0b2e18;background:#2fe07a}
.arrow-kinds button:active{transform:translateY(2px);box-shadow:0 1px 0 #0007}
body.playing.drawer-open .arrow-kinds{display:none}
@media (orientation:portrait) and (max-width:700px){.arrow-kinds{position:fixed;right:max(12px,env(safe-area-inset-right));bottom:calc(16px + env(safe-area-inset-bottom));flex-direction:row}}
/* Lying down: small and at the bottom in the middle, away from Dali on the left and the target on the right. */
@media (orientation:landscape) and (max-height:520px){.arrow-kinds{position:fixed;right:auto;left:50%;transform:translateX(-50%);bottom:calc(6px + env(safe-area-inset-bottom));flex-direction:row;gap:5px}.arrow-kinds button{width:46px;height:32px;font-size:12px;border-radius:9px;opacity:.92}.arrow-kinds button small{font-size:8px}}
