.radio-chat{margin-top:8px;border:2px solid currentColor;border-radius:var(--radius);background:var(--bg);color:var(--fg)}
.radio-chat-alterna{display:flex;gap:8px;align-items:center;width:100%;min-height:44px;padding:6px 10px;border:0;background:none;color:inherit;font:inherit;text-align:left}
.radio-chat-ultimo{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.radio-chat.plegado :is(.radio-chat-tabs,.radio-chat-lista,.radio-chat-no-data){display:none}
.radio-chat-tabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px;padding:0 8px}
.radio-chat-tab{min-height:44px;border:2px solid currentColor;border-radius:var(--radius);background:var(--bg);color:var(--fg);font:inherit;font-weight:700}
.radio-chat-tab[aria-selected="true"]{text-decoration:underline;border-width:3px}
.radio-chat-lista{margin:0;padding:6px 10px 10px;list-style:none;display:grid;gap:6px;max-height:40vh;overflow-y:auto}
.radio-chat-lista[hidden],.radio-chat-no-data[hidden]{display:none}
.radio-chat-no-data{margin:6px 10px;padding:8px;border:2px dashed currentColor}
html,body{width:100%;height:100%;min-height:0}
html{overflow:clip}
body{position:fixed;inset:0;display:flex;flex-direction:column;min-height:0;overflow:hidden}
main.map-panel-mask{flex:1;display:grid;grid-template-rows:minmax(280px,52dvh) minmax(0,1fr);grid-template-columns:minmax(0,1fr);width:100%;max-width:none;height:100vh;height:100dvh;padding:0;min-height:0;overflow:hidden}
#map,#chat{padding:12px 16px;min-width:0;box-sizing:border-box;overflow:hidden}
#map{position:relative;border-bottom:2px solid var(--line);display:flex;flex-direction:column;gap:8px;min-height:0}
#map h1{font-size:.75rem;font-weight:400;line-height:1.4;margin:0;color:var(--soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
#map .surface{display:block;width:100%;height:0;min-height:0;min-width:0;flex:1 1 0;transition:opacity 300ms ease}
@media (prefers-reduced-motion: reduce){#map .surface{transition:none}}
#map .press{display:flex;flex-wrap:wrap;gap:8px}
#map .press button{min-height:44px;padding:8px 14px;border:2px solid currentColor;border-radius:var(--radius);background:var(--bg);color:var(--fg);font:inherit;cursor:pointer}
#map .press button[aria-pressed="true"]{outline:3px solid currentColor;outline-offset:2px}
#map .state{margin:0;color:var(--soft);font-size:.92rem}
#chat{display:flex;flex-direction:column;gap:8px;min-height:0;overflow-y:auto;overscroll-behavior:contain}
#chat h2{font-size:1.1rem;margin:0}
#chat .log{order:2;flex:1;min-height:0;overflow:auto;margin:0;padding:0;list-style:none;color:var(--soft)}
#chat form{display:flex;gap:8px}
#entry{order:3;flex:0 0 auto;position:sticky;bottom:0;z-index:3;background:var(--bg);padding-block:6px env(safe-area-inset-bottom)}
#chat input{flex:1;min-height:44px;padding:8px 10px;border:2px solid var(--line);border-radius:var(--radius);background:var(--bg);color:var(--fg);font:inherit}
#chat button{min-height:44px;padding:8px 14px;border:2px solid currentColor;border-radius:var(--radius);background:var(--bg);color:var(--fg);font:inherit}
#chat button:disabled,#chat input:disabled{opacity:.55}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.topbar{display:flex;justify-content:flex-start;align-items:center;gap:4px 12px}
.topbar > a{display:inline-flex;align-items:center;min-width:44px;min-height:44px}
.stage{position:relative;display:flex;flex-direction:column;min-height:0;flex:1}
/* Terminal icon language (the app's tab row): 44px target, transparent, 1px transparent border, soft ink, 20px glyph; selected = ink border + soft fill. No web violet variable exists, so the accent is --fg. */
.view-joy{position:absolute;bottom:4px;z-index:3}
.view-joy.left{left:4px}.view-joy.right{right:4px}
.view-stick,.cats button{display:grid;place-items:center;padding:0;font:inherit;font-size:20px;line-height:1;color:var(--soft);background:transparent;border:1px solid transparent;border-radius:var(--radius);cursor:pointer}
.view-stick{width:64px;height:64px;min-width:44px;min-height:44px;border-color:var(--line);border-radius:50%;touch-action:none;cursor:grab}
.view-stick span{pointer-events:none}
.view-stick[data-on],.view-stick:focus-visible,.cats button[aria-pressed="true"]{color:var(--fg);border-color:var(--fg);background:color-mix(in srgb,var(--fg) 10%,transparent)}
.voices{list-style:none;margin:0;padding:0;display:grid;gap:6px}
#voices.map-voices{display:grid;position:absolute;z-index:4;inset:8px 160px 8px 8px;overflow:auto;align-content:start;padding:8px;background:var(--bg);border:2px solid var(--line);border-radius:var(--radius)}
#voices.map-voices[hidden]{display:none}
#voices>[data-speaker=Welcome]{order:0}
#voices>[data-speaker]:not([data-speaker=Welcome]){order:1}
#voices.visitor>[data-depth=tech]:not(:has(button)){display:none}
#voices>.depth{order:2;border-style:dashed}
.cats{display:flex;justify-content:center;gap:4px;overflow-x:auto;flex:0 0 auto}
.cats button{flex:0 0 44px;min-width:44px;min-height:44px}
#map-actions{position:absolute;z-index:5;top:36px;left:8px;right:8px;justify-content:flex-end;pointer-events:none}
#map-actions>*{pointer-events:auto}
#map-brain,#radio-chat{order:6}
#chat-note,.tech{order:7}
.voice{border:2px solid var(--line);border-radius:var(--radius);padding:6px 10px;display:grid;gap:6px;color:var(--fg)}
.voice > .who{margin:0;font-weight:700;font-size:.9rem;text-decoration:underline}
.voice p{margin:0}
.voice .state{color:var(--fg);font-size:.95rem}
.voice button,.voice select{min-height:44px;min-width:44px;padding:8px 14px;border:2px solid currentColor;border-radius:var(--radius);background:var(--bg);color:var(--fg);font:inherit;cursor:pointer}
.voice .acts,.voice #joy [role="group"],#visitor-play > div{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.voice #joy{display:grid;gap:6px}
.voice #joy label{display:inline-flex;align-items:center;gap:6px;min-height:44px}
#visitor-play h2{font-size:1rem;margin:0}
.next p{font-size:1.05rem}
.next button{border-width:3px;font-weight:700}
.next button[hidden]{display:none}
#more summary{min-height:44px;display:flex;align-items:center;cursor:pointer}
.welcome{display:grid;gap:6px}
.welcome[hidden]{display:none}
.voice:has(> .welcome[hidden]){display:none}
.welcome h3{font-size:1.05rem;margin:0}
.voice .welcome-play{min-height:56px;font-size:1.1rem;font-weight:700;border-width:3px}
#log li.who-before::before{content:attr(data-speaker) " · ";font-weight:700}
#map :is(button,a):focus-visible,#chat :is(button,a,select,summary,input):focus-visible{outline:3px solid currentColor;outline-offset:2px}
#map-proxies .map-proxy{position:absolute;width:44px;height:44px;min-width:44px;min-height:44px;padding:0;margin:0;border:0;background:transparent;color:inherit;cursor:pointer;z-index:1}
#map-proxies .map-proxy:focus-visible{outline:3px solid currentColor;outline-offset:2px}
.voice :is([aria-live],[role=status])::before{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.voice[data-speaker="Tutorial"] :is([aria-live],[role=status])::before{content:"Tutorial: "}
.voice[data-speaker="Welcome"] :is([aria-live],[role=status])::before{content:"Welcome: "}
.voice[data-speaker="Guide"] :is([aria-live],[role=status])::before{content:"Guide: "}
.voice[data-speaker="Map"] :is([aria-live],[role=status])::before{content:"Map: "}
.voice[data-speaker="Floor"] :is([aria-live],[role=status])::before{content:"Floor: "}
.voice[data-speaker="Walkers"] :is([aria-live],[role=status])::before{content:"Walkers: "}
.voice[data-speaker="Zoom"] :is([aria-live],[role=status])::before{content:"Zoom: "}
.voice[data-speaker="House"] :is([aria-live],[role=status])::before{content:"House: "}
.voice[data-speaker="Army"] :is([aria-live],[role=status])::before{content:"Army: "}
.voice[data-speaker="Radio"] :is([aria-live],[role=status])::before{content:"Radio: "}
@media (forced-colors: active){
body,main,#map,#chat,.voice,.radio-chat{background:Canvas;color:CanvasText}
.voice,.radio-chat,#map,#chat input{border-color:CanvasText}
#map .state,#chat .log,.voice .state{color:CanvasText}
.voice > .who{color:CanvasText}
a{color:LinkText}
button,select,summary,.voice button,#chat button,#map .press button,.radio-chat-tab{background:ButtonFace;color:ButtonText;border-color:ButtonText;forced-color-adjust:none}
button.view-stick{border-color:ButtonText}
.hitl-mark{border-color:ButtonText!important}
:focus-visible,#map-proxies .map-proxy:focus-visible{outline:3px solid Highlight!important;outline-offset:2px}
#surface{border:2px solid CanvasText;forced-color-adjust:none}
.welcome,.radio-chat-no-data{border:2px solid CanvasText}
}
@media (prefers-contrast: more){
.voice,#map .press button,.voice button,#chat button,#chat input,.view-stick{border-width:3px}
#map .state,#chat .log,.voice .state{color:var(--fg)}
:focus-visible{outline-width:4px}
}
@media (width<900px){main.map-panel-mask{grid-template-rows:minmax(180px,46dvh) minmax(0,1fr)}#map .surface{width:100%;margin:0}#map{padding:6px 8px}#chat{padding:6px 8px 0;gap:4px}}
@media (min-width:900px){main.map-panel-mask{grid-template-rows:minmax(0,1fr);grid-template-columns:minmax(0,3fr) minmax(0,2fr)}#map{border-bottom:0;border-right:2px solid var(--line)}}

/* The communication player opens on the map; it owns the existing chat. */
main.map-panel-mask.with-showcase-player{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr)}
.with-showcase-player #map{border:0;min-height:0}
#chat[hidden]{display:none}
#voices.map-voices:not([data-active-category="Communication"]){inset:20% 8px 8px}
#voices.map-voices[data-active-category="Communication"]{inset:auto clamp(96px,16vw,150px) 8px;max-height:min(58%,30rem);overflow:auto;align-content:start}
#voices[data-active-category="Communication"] > [data-speaker="Radio"]{min-width:0;padding:4px;gap:4px}
#voices[data-active-category="Communication"] .radio-chat{margin:0}
#voices[data-active-category="Communication"] .radio-chat-tabs{gap:2px;padding:0 2px}
#voices[data-active-category="Communication"] .radio-chat-tab{min-width:0;padding:4px 2px;font-size:.8rem}
#voices[data-active-category="Communication"] #chat-h{font-size:.9rem;margin:4px}
#voices[data-active-category="Communication"] #log{list-style:none;margin:0;padding:4px;max-height:20vh;overflow:auto;overflow-wrap:anywhere}
#voices[data-active-category="Communication"] #entry{display:flex;gap:3px;position:sticky;bottom:0;order:initial;padding:4px;background:var(--bg)}
#voices[data-active-category="Communication"] #entry[hidden],#voices[data-active-category="Communication"] #log[hidden],#voices[data-active-category="Communication"] #chat-h[hidden]{display:none}
#voices[data-active-category="Communication"] #question{width:0;flex:1;min-width:0;min-height:44px;font:inherit;color:var(--fg);background:var(--bg);border:2px solid currentColor}
#voices[data-active-category="Communication"] #entry button{min-width:44px;padding:4px}
@media (max-width:600px){
#voices.map-voices:not([data-active-category="Communication"]){inset:0;padding-bottom:148px}
}
@media (forced-colors:active){#voices[data-active-category="Communication"] #entry,#voices[data-active-category="Communication"] #question{background:Canvas;color:CanvasText}}
/* Native sheets, mini-first (Sovereign, 2026-11-07): on a narrow viewport (the app's World gap is 420x437,
   an Android phone is about the same) an open panel is one full-width sheet over the map, the map controls
   step aside while it is open, and type follows the app's 80% scale. One rule for app, phone and PC: it
   reads the viewport, never whether the page sits in a frame. */
@media (max-width:600px){
html{font-size:80%}
body{font-size:1rem}
#voices.map-voices,#voices.map-voices[data-active-category="Communication"]{inset:0;max-height:none;padding:8px;border-radius:0}
#map:has(#voices.map-voices:not([hidden])) #map-actions{display:none}
/* the joysticks step aside (and out of focus) while a sheet is open */
#map:has(#voices.map-voices:not([hidden])) .view-joy{opacity:.35;pointer-events:none}
}
/* Gamepad (Sovereign, 2026-11-07): one status line on top, the map, and one Acho gamepad at the bottom (gamepad.js).
   Left stick pans the map; right stick is off until the character exists; the account buttons sit between them. */
#gamepad{display:flex;align-items:center;justify-content:space-between;gap:6px;flex:0 0 auto;min-width:0}
#gamepad .view-joy{position:static}
#gamepad .gp-mid{display:flex;align-items:center;justify-content:center;gap:4px;flex:1 1 auto;min-width:0}
#gamepad .cats{overflow:visible;gap:4px}
#gamepad :is(.gp-b,.cats button){flex:0 0 44px;width:44px;height:44px;min-width:44px;min-height:44px;padding:0 0 6px;font-size:18px;color:var(--fg);border:1px solid color-mix(in srgb,var(--gp,var(--fg)) 60%,transparent);border-radius:calc(var(--radius) + 6px);background:color-mix(in srgb,var(--gp,var(--fg)) 16%,transparent) var(--gp-svg,none) center bottom 3px/32px 10px no-repeat;cursor:pointer}
#gamepad .gp-b[hidden],#gamepad .cats button[hidden]{display:none}
#gamepad .view-stick.gp-acho{border-color:var(--gp);background:color-mix(in srgb,var(--gp) 12%,transparent) var(--gp-svg) center bottom 10px/32px 10px no-repeat}
#gamepad .gp-off{position:relative;flex:0 0 64px;width:64px;height:64px;display:grid;place-items:center;font-size:20px;color:var(--soft);border:1px dashed color-mix(in srgb,var(--gp) 50%,transparent);border-radius:50%;background:var(--gp-svg) center bottom 10px/32px 10px no-repeat;opacity:.5}
#gamepad .cats button[aria-pressed="true"]{outline:2px solid var(--fg);outline-offset:1px}
@media (forced-colors: active){#gamepad :is(.gp-b,.cats button,.gp-off){background-image:none;border-color:ButtonText}}
#gamepad .view-stick.gp-acho[data-on],#gamepad .view-stick.gp-acho:focus-visible{border-color:var(--fg)}
.bs-sheet{flex:0 0 auto;margin:0;padding:8px;max-height:46vh;overflow:auto;border:1px solid color-mix(in srgb,var(--fg) 30%,transparent);border-radius:calc(var(--radius) + 6px);background:var(--bg)}
.bs-sheet[hidden]{display:none}
.bs-sheet .bs-bar{display:flex;align-items:center;gap:6px}
.bs-sheet h2{flex:1 1 auto;margin:0;font-size:15px;min-width:0}
.bs-sheet .bs-list{list-style:none;margin:6px 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:6px}
.bs-sheet :is(.bs-card,.bs-tool){min-height:44px;min-width:44px;width:100%;padding:6px 8px 16px;text-align:left;font:inherit;font-size:14px;color:var(--fg);border:1px solid color-mix(in srgb,var(--gp,var(--fg)) 60%,transparent);border-radius:calc(var(--radius) + 4px);background:color-mix(in srgb,var(--gp,var(--fg)) 14%,transparent) var(--gp-svg,none) left 8px bottom 4px/32px 10px no-repeat;cursor:pointer}
.bs-sheet .bs-tool{width:auto;padding:6px 10px}
.bs-sheet .bs-tool[hidden]{display:none}
.bs-sheet .bs-seal{display:block;font-size:11px;opacity:.8}
.bs-sheet .bs-card[data-seal=NO_DATA]{border-style:dashed}
.bs-sheet .bs-line{margin:0;font-size:13px;min-height:1.3em}
@media (forced-colors: active){.bs-sheet :is(.bs-card,.bs-tool){background-image:none;border-color:ButtonText}}
/* I7 The right letters (type_scale.js): the reading panels scale by the visitor's step; the map and gamepad do not. */
#chat,#voices,.bs-sheet{zoom:var(--letters,1)}
/* Terminals are always dark (Sovereign, 2026-11-08): every panel where the visitor reads or types is a terminal.
   The house colours are system colours (Canvas, CanvasText), so one color-scheme makes the whole subtree dark in
   either theme; the map keeps the visitor's theme. Forced colours still win: the system palette replaces both. */
#chat,#voices,.bs-sheet,.radio-chat{color-scheme:dark;background-color:Canvas;color:CanvasText}
/* Acho skin for the panel (2026-11-08, kid test): the panel is the sea, each voice is a bright tile of its own colour —
   sunshine, leaf, sky, coral, lilac — with an ink outline and the extruded edge of a hex. The voice re-scopes --fg/--bg/
   --soft/--line so every child follows the tile; the heading is a hex chip. The visitor does not see the live-count line
   (builders do). Forced colors fall back to the system. */
#voices.map-voices{background:var(--a04334a) linear-gradient(160deg,var(--a0b6e8f),var(--a04334a));border:3px solid var(--a1d1b26);border-radius:calc(var(--radius) + 10px);gap:14px;padding:14px}
.voice{--fg:var(--a1d1b26);--bg:var(--afffdf6);--soft:var(--a3d3950);--line:var(--a1d1b26);--tile:var(--affe58a);--edge:var(--ad49a1c);--chip:var(--ab8401a);
  background:var(--tile);color:var(--fg);border:3px solid var(--line);border-radius:calc(var(--radius) + 8px);padding:12px 14px 14px;box-shadow:0 6px 0 var(--edge)}
.voice[data-speaker=Tutorial]{--tile:var(--ab8f0a8);--edge:var(--a3f9a3a);--chip:var(--a1f7a32)}
.voice[data-speaker=Guide]{--tile:var(--aa8e3ff);--edge:var(--a2a8fc4);--chip:var(--a0b5d9a)}
.voice[data-speaker=House]{--tile:var(--affc2b3);--edge:var(--ad0573d);--chip:var(--ab8331c)}
.voice[data-speaker=Radio]{--tile:var(--adcc8ff);--edge:var(--a7a52c7);--chip:var(--a5b2fb0)}
.voice[data-speaker=Army]{--tile:var(--affd0e6);--edge:var(--ac44d8a);--chip:var(--aa3266a)}
.voice[data-depth=tech],.voice.depth,.voice[data-speaker=Models]{--tile:var(--ae6e8ef);--edge:var(--a7c8296);--chip:var(--a3d4252)}
.voice > .who{justify-self:start;text-decoration:none;color:var(--afffdf6);background:var(--chip);padding:4px 18px;font-size:.95rem;letter-spacing:.02em;
  clip-path:polygon(10px 0,calc(100% - 10px) 0,100% 50%,calc(100% - 10px) 100%,10px 100%,0 50%)}
.voice button,.voice select{background:var(--bg);color:var(--fg);border:3px solid var(--fg);box-shadow:0 4px 0 var(--fg);border-radius:calc(var(--radius) + 6px);font-weight:600}
.voice button:active{transform:translateY(3px);box-shadow:0 1px 0 var(--fg)}
.voice .welcome-play{background:var(--a157a45);color:var(--afffdf6);font-size:1.2rem}
.voice h3{font-size:1.25rem}
.voice details.tech summary{color:var(--soft)}
#voices.visitor #welcome-live{display:none}
.voice a{color:var(--fg);font-weight:600}
.voice[data-speaker=App]{--tile:var(--ab8f0a8);--edge:var(--a3f9a3a);--chip:var(--a1f7a32)}
.voice #app-install{background:var(--a157a45);color:var(--afffdf6);font-size:1.1rem}
#voices>.depth{border-style:dashed;box-shadow:none}
@media (prefers-reduced-motion:reduce){.voice button:active{transform:none}}
@media (forced-colors:active){#voices.map-voices,.voice,.voice button,.voice > .who{background:Canvas;color:CanvasText;border-color:CanvasText;box-shadow:none;clip-path:none}}
/* The console controller (Sovereign, 2026-11-08): sticks and buttons are ONE piece, a sand shell with an ink outline and
   the extruded edge of a hex tile. Sticks grow with the window (68–88 px); the buttons sit between them as face buttons,
   three per row. Sized from the mini app window (420 px) down to a 360 px phone with no overflow; every target ≥ 44 px. */
#gamepad{--fg:var(--a1d1b26);--soft:var(--a4a4558);--line:var(--a1d1b26);color:var(--a1d1b26);background:linear-gradient(var(--af4ecda),var(--ae6dbc3));border:3px solid var(--a1d1b26);
  border-radius:calc(var(--radius) + 22px) calc(var(--radius) + 22px) calc(var(--radius) + 36px) calc(var(--radius) + 36px);box-shadow:0 6px 0 var(--a8a7a63),inset 0 2px 0 var(--afffaf0);padding:8px 12px 10px;margin:2px 6px 8px;gap:8px}
#gamepad :is(.view-stick.gp-acho,.gp-off){flex:0 0 clamp(68px,19vw,88px);width:clamp(68px,19vw,88px);height:clamp(68px,19vw,88px);border:3px solid var(--a1d1b26);
  font-size:22px;color:var(--a1d1b26);box-shadow:inset 0 -6px 0 var(--ab9ab90),0 3px 0 var(--a1d1b26);
  background:var(--gp-svg,none) center bottom 12px/32px 10px no-repeat,radial-gradient(circle at 50% 42%,var(--afffaf0) 0 34%,var(--addd2ba) 35% 64%,var(--ac8b99c) 65%)}
#gamepad .gp-off{opacity:.65;border-style:dashed}
#gamepad .gp-mid{flex:1 1 auto;justify-content:center}
#gamepad .gp-mid,#gamepad .cats{flex-wrap:wrap;gap:6px;max-width:150px}
#gamepad :is(.gp-b,.cats button){border:2px solid var(--a1d1b26);border-radius:50%;color:var(--a1d1b26);box-shadow:0 3px 0 var(--a1d1b26);
  background:color-mix(in srgb,var(--gp,var(--ad8be78)) 30%,var(--afffaf0)) var(--gp-svg,none) center bottom 3px/30px 9px no-repeat}
#gamepad :is(.gp-b,.cats button):active{transform:translateY(2px);box-shadow:0 1px 0 var(--a1d1b26)}
#gamepad .cats button[aria-pressed="true"]{outline:3px solid var(--a1d1b26);outline-offset:2px}
@media (prefers-reduced-motion:reduce){#gamepad :is(.gp-b,.cats button):active{transform:none}}
@media (forced-colors:active){#gamepad,#gamepad :is(.view-stick.gp-acho,.gp-off,.gp-b,.cats button){background:Canvas;color:CanvasText;border-color:CanvasText;box-shadow:none}}
.voice .army{display:inline-flex;align-items:center;min-height:44px}
/* The House as a game board (visitor_board.js, 2026-11-08): purse chips, tier eggs, the squad as Fourier figures with their
   stats, six hex places (locked until a troop exists), and the duel dialog as a dark sea over the live map. */
#visitor-play.board .chips{display:flex;flex-wrap:wrap;gap:6px;list-style:none;margin:6px 0;padding:0}
#visitor-play.board .chips li{background:var(--bg);border:2px solid var(--fg);border-radius:999px;padding:2px 10px;font-size:.9rem}
#visitor-play.board .purse li{font-size:1.05rem;background:var(--affe58a)}
#visitor-play.board .egg{border-radius:50%;min-width:120px;min-height:64px;font-weight:700}
#visitor-play.board .egg.t1{background:var(--ab8f0a8)}#visitor-play.board .egg.t2{background:var(--aa8e3ff)}
#visitor-play.board .egg.t3{background:var(--adcc8ff)}#visitor-play.board .egg.t4{background:var(--affc2b3)}
#visitor-play.board .egg:disabled{opacity:.55;box-shadow:none}
#visitor-play.board .nest{background:var(--affe58a)}
#visitor-play.board .squad{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;list-style:none;padding:0;margin:8px 0}
#visitor-play.board .troop{background:var(--a04334a);color:var(--afffdf6);border:3px solid var(--a1d1b26);border-radius:calc(var(--radius) + 6px);padding:6px}
#visitor-play.board .troop svg{display:block;width:100%;height:auto;max-height:96px}
#visitor-play.board .troop path{fill:none;stroke:currentColor;stroke-width:2.2}
#visitor-play.board .troop.r-normal{color:var(--ab8f0a8)}#visitor-play.board .troop.r-magico{color:var(--aa8e3ff)}
#visitor-play.board .troop.r-raro{color:var(--adcc8ff)}#visitor-play.board .troop.r-unico{color:var(--affe58a)}
#visitor-play.board .troop .chips li{background:var(--afffdf6);color:var(--a1d1b26);font-size:.8rem}
#visitor-play.board .places{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin:8px 0}
#visitor-play.board .place{min-height:64px;clip-path:polygon(25% 0,75% 0,100% 50%,75% 100%,25% 100%,0 50%);border:0;box-shadow:none;background:var(--a157a45);color:var(--afffdf6)}
#visitor-play.board .place.locked{background:var(--a7c8296)}
#visitor-play dialog{background:var(--a04334a);color:var(--afffdf6);border:3px solid var(--a1d1b26);border-radius:calc(var(--radius) + 10px);padding:12px}
#visitor-play dialog::backdrop{background:transparent}
#visitor-play dialog button{background:var(--afffdf6);color:var(--a1d1b26);border:3px solid var(--a1d1b26);border-radius:calc(var(--radius) + 6px);font-weight:600}
@media (forced-colors:active){#visitor-play.board .place,#visitor-play.board .egg,#visitor-play.board .troop,#visitor-play dialog{background:Canvas;color:CanvasText;border:2px solid CanvasText;clip-path:none}}
/* The quest board (the player's soul, 2026-11-08): first in the House, rounded letters, one bright card per quest, a real
   <progress> bar, the reward as chips and one Claim button. Event and ranking are NO_DATA until they exist. */
#visitor-play.board{font-family:ui-rounded,"SF Pro Rounded",system-ui,sans-serif}
#visitor-play.board .quests h3{font-size:1.3rem;margin:4px 0}
#visitor-play.board .quests ol{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px;list-style:none;padding:0;margin:6px 0}
#visitor-play.board .quest{display:grid;gap:6px;background:var(--afffdf6);border:3px solid var(--a1d1b26);border-radius:calc(var(--radius) + 8px);padding:10px;box-shadow:0 5px 0 var(--a7c8296)}
#visitor-play.board .quest.ready{background:var(--affe58a);box-shadow:0 5px 0 var(--ad49a1c)}
#visitor-play.board .quest.taken{background:var(--ab8f0a8);box-shadow:0 5px 0 var(--a3f9a3a)}
#visitor-play.board .quest progress{width:100%;height:12px;accent-color:var(--a157a45)}
#visitor-play.board .quest button{min-height:44px}
#visitor-play.board .quest.ready button{background:var(--a157a45);color:var(--afffdf6)}
#visitor-play.board .season li{background:var(--adcc8ff)}
@media (forced-colors:active){#visitor-play.board .quest{background:Canvas;color:CanvasText;border-color:CanvasText;box-shadow:none}}
/* Acho skin, old terminals (2026-11-08, decision mia, unsigned): sea frame, ink tiles. */
#chat,.bs-sheet,.radio-chat{background:var(--a04334a) linear-gradient(160deg,var(--a0b6e8f),var(--a04334a));border:3px solid var(--a1d1b26);color:var(--afffdf6)}
#chat,.bs-sheet{border-radius:calc(var(--radius) + 10px)}
#chat > h2{align-self:flex-start;background:var(--affe58a);color:var(--a1d1b26);border-radius:999px;padding:4px 16px}
#chat .log > li,#chat > form :is(input,button),#chat #map-brain :is(button,select),#chat > .tech summary,.radio-msg{background:var(--afffdf6);color:var(--a1d1b26);border:3px solid var(--a1d1b26);border-radius:calc(var(--radius) + 6px);box-shadow:0 4px 0 var(--a1d1b26)}
#chat .log > li{padding:8px 12px;margin:0 0 10px}
#chat .log > li[data-voice=you]{background:var(--affe58a)}
#chat .log > li[data-voice=chunk]{background:var(--ab8f0a8)}
#chat .log > li[data-voice=hexelion]{background:var(--aa8e3ff)}
#chat .log > li[data-voice=script]{background:var(--affc2b3)}
#chat .log > li[data-voice=rack],#chat .log > li[data-voice=jewels]{background:var(--adcc8ff)}
#chat .log > li[data-voice=claude],#chat .log > li[data-voice=codex],#chat .log > li[data-voice=mistral],#chat .log > li[data-voice=glm]{background:var(--affd0e6)}
#chat .log > li.nodata{border-style:dashed;background:var(--ae6dbc3)}
#chat > form :is(input,button),#chat #map-brain :is(button,select),#chat > .tech summary{min-height:44px;min-width:44px}
#chat > form button,#chat #map-brain button,#chat > .tech summary{font-weight:700}
.bs-sheet :is(.bs-card,.bs-tool){background:var(--gp-svg,none) left 8px bottom 4px/32px 10px no-repeat var(--afffdf6);color:var(--a1d1b26);border:3px solid var(--a1d1b26);box-shadow:0 5px 0 var(--a1d1b26)}
.bs-sheet .bs-card[data-seal=LIVE]{background:var(--gp-svg,none) left 8px bottom 4px/32px 10px no-repeat var(--affe58a)}
.bs-sheet .bs-seal{display:inline-block;width:max-content;opacity:1;background:var(--a1d1b26);color:var(--afffdf6);border-radius:999px;padding:0 8px}
.radio-chat{border-radius:calc(var(--radius) + 10px);padding:6px}
.radio-chat-alterna,.radio-chat-tab{background:var(--afffdf6);color:var(--a1d1b26);border:3px solid var(--a1d1b26);border-radius:calc(var(--radius) + 6px);box-shadow:0 4px 0 var(--a1d1b26)}
.radio-chat-tab[aria-selected="true"]{background:var(--affe58a)}
.radio-msg-cab > span[title]{display:inline-block;padding:0 8px;border-radius:999px;background:var(--a1d1b26);color:var(--afffdf6)}
.radio-chat-no-data{border:3px dashed var(--afffdf6);border-radius:calc(var(--radius) + 6px)}
#chat > form :is(input,button):active,#chat #map-brain :is(button,select):active,#chat > .tech summary:active,.bs-sheet :is(.bs-card,.bs-tool):active,.radio-chat-alterna:active,.radio-chat-tab:active{transform:translateY(3px);box-shadow:0 1px 0 var(--a1d1b26)}
@media (prefers-reduced-motion:reduce){#chat > form :is(input,button):active,#chat #map-brain :is(button,select):active,#chat > .tech summary:active,.bs-sheet :is(.bs-card,.bs-tool):active,.radio-chat-alterna:active,.radio-chat-tab:active{transform:none}}
@media (forced-colors:active){#chat,.bs-sheet,.radio-chat,#chat > h2,#chat .log > li,#chat > form :is(input,button),#chat #map-brain :is(button,select),#chat > .tech summary,.bs-sheet :is(.bs-card,.bs-tool,.bs-seal),.radio-chat-alterna,.radio-chat-tab,.radio-msg,.radio-msg-cab > span[title],.radio-chat-no-data{background:Canvas;color:CanvasText;border-color:CanvasText;box-shadow:none}}
/* The controller as a plastic shell with two raised wings (Sovereign, 2026-11-08): the V is the two outer peaks, the
   bigger sticks, that climb over the map; the middle panel sits lower between them (two buttons above, three below). */
#gamepad{position:relative;z-index:2;padding-left:8px;padding-right:8px;column-gap:4px}
#gamepad :is(.view-stick.gp-acho,.gp-off){flex:0 0 clamp(74px,calc((100vw - 212px) / 2),124px);width:clamp(74px,calc((100vw - 212px) / 2),124px);height:clamp(74px,calc((100vw - 212px) / 2),124px)}
#gamepad .gp-mid{max-width:none;gap:4px 6px;align-items:flex-start;padding-top:10px}
#gamepad .cats{display:flex;flex-wrap:nowrap;gap:6px;max-width:none;order:2}
#gamepad :is(.gp-b,.cats button){width:44px;height:44px;flex:0 0 44px}
/* The rows of the middle buttons and their glyphs live in /game/talk.css (two above, three below). */
/* The wings: each stick sits in a raised disc of the shell that climbs over the bottom of the map (a ring of shell
   colour and an ink rim, drawn as box-shadow so it takes no layout room); the middle panel stays lower between them. */
#gamepad > .view-joy{position:relative;z-index:3;transform:translateY(-26px)}
#gamepad > .view-joy > .view-stick.gp-acho{box-shadow:0 0 0 6px var(--af4ecda),0 0 0 9px var(--a1d1b26),0 5px 0 9px var(--a1d1b26)}
@media (forced-colors:active){#gamepad > .view-joy > .view-stick.gp-acho{border:3px solid CanvasText}}
/* Y10 */
#voices [data-speaker="Radio"] > .who { display: none; }
/* Y7 */
#next.folded{opacity:.6;pointer-events:none;padding-block:2px}
#next.folded p{font-size:.8rem}
#next.folded .acts{display:none}
.bs-live{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.bs-live p{margin:0;flex-basis:100%;font-size:13px}.bs-live button{min-height:44px;min-width:44px}
