/* Dead Drop and Last Call game window (GAME-FRAME.md): the whole game, every control included, inside one
   rectangle an operator can frame. HUD on top, the scene full width, the console (round caption + control bar)
   at the bottom, or as a right-edge rail on short landscape windows. Nothing scrolls; sheets open in the window. */
/* Type, buttons, the stake pattern and the 11px floor come from baize-ui.css (linked first); this file keeps the game's
   own colours and layout. */
:root{color-scheme:dark;--ink:#081622;--surface:#102330;--surface2:#172f3c;--line:#2c414e;--text:#ede6d9;--muted:#90a5b2;--accent:#f2b862;--accent-rgb:242,184,98;--on-accent:#1e1c1a;--violet:#bba2f4;--scene-bg:#06111a;--chrome:#07121bdd;--sans:var(--bz-sans);--serif:var(--bz-serif);--mono:var(--bz-mono);--bz-accent:#f2b862;--bz-accent-up:#f6c47a;--bz-on-accent:#1e1c1a;--bz-field:#0b1d2a;--bz-field-up:#173447;--bz-line:#ffffff2b;--hud-h:52px;--rail-w:272px;--safe-l:env(safe-area-inset-left,0px);--safe-r:env(safe-area-inset-right,0px);--safe-b:env(safe-area-inset-bottom,0px)}
*{box-sizing:border-box}
html,body{height:100%;margin:0;overflow:hidden;overscroll-behavior:none}
body{background:var(--scene-bg);color:var(--text);font-family:var(--sans);font-size:14px;-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer;border:0;background:none;padding:0;touch-action:manipulation;-webkit-tap-highlight-color:transparent}
button:disabled{cursor:default;opacity:.42}
button:focus-visible,input:focus-visible,select:focus-visible,[tabindex]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
[hidden]{display:none!important}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.noscript{position:fixed;inset:auto 16px 16px;margin:0;color:var(--text)}

/* ---------- Window: the scene fills it edge to edge; HUD, console and sheets are drawn on top ---------- */
/* --inset-* (set by collection.mjs from the HUD and console) mark the part of the scene no control covers; the 3D
   cameras, flat fallbacks, result card and bonus centre themselves in it. */
:root{--inset-t:var(--hud-h);--inset-r:0px;--inset-b:150px;--inset-l:0px}
.gw{position:fixed;inset:0;overflow:hidden;background:var(--scene-bg)}
.gw-stage{position:absolute;inset:0;overflow:hidden}
.gw-hud{position:absolute;z-index:6;top:0;left:0;right:0;height:var(--hud-h);display:flex;align-items:center;gap:6px;padding:0 calc(6px + var(--safe-r)) 0 calc(6px + var(--safe-l));background:linear-gradient(180deg,#000000a6,#00000059 70%,#0000)}
.gw-console{position:absolute;z-index:5;left:0;right:0;bottom:0;display:flex;flex-direction:column;gap:6px;min-width:0;padding:22px calc(10px + var(--safe-r)) calc(8px + var(--safe-b)) calc(10px + var(--safe-l));background:linear-gradient(0deg,color-mix(in srgb,var(--ink) 94%,transparent) 0,color-mix(in srgb,var(--ink) 86%,transparent) calc(100% - 22px),#0000)}
.round-copy{text-shadow:0 1px 6px #000c}
/* ---------- HUD ---------- */
.gw-icon{flex:none;min-width:44px;height:44px;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;gap:6px;color:var(--text);border:1.5px solid #ffffff2b;background:#0000006b;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);transition:background .15s,border-color .15s}
.gw-icon:hover:not(:disabled){background:#ffffff24;border-color:#ffffff4d}
.gw-icon svg{width:22px;height:22px}
.gw-home{border-color:transparent;background:transparent}
.gw-home img{width:30px;height:30px;display:block}
.gw-title{text-shadow:0 1px 8px #000;flex:1 1 auto;min-width:0;margin:0 0 0 2px;font:normal 19px/1.1 var(--serif);letter-spacing:-.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.gw-balance{text-shadow:0 1px 6px #000;flex:none;display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:1px;padding:0 6px;font-variant-numeric:tabular-nums;line-height:1}
.gw-balance span{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.gw-balance strong{font:500 16px/1.15 var(--mono)}
#sound-toggle .gw-sound-on{display:none}
#sound-toggle[aria-pressed=true]{color:var(--accent);border-color:color-mix(in srgb,var(--accent) 45%,transparent)}
#sound-toggle[aria-pressed=true] .gw-sound-on{display:inline}
#sound-toggle[aria-pressed=true] .gw-sound-off{display:none}

/* ---------- Scene ---------- */
.scene-wrap{position:absolute;inset:0;min-width:0}
.game-scene{position:absolute;inset:0;width:100%;height:100%;min-height:0;margin:0}
.dd-stage{container:dd-stage/size}
.scene-safe{position:absolute;z-index:4;top:var(--inset-t);right:var(--inset-r);bottom:var(--inset-b);left:var(--inset-l);pointer-events:none;container:lc-scene/size}
/* Flat fallbacks draw inside the uncovered part; their backdrop still fills the window. */
.game-scene[data-renderer=flat]{padding:var(--inset-t) var(--inset-r) var(--inset-b) var(--inset-l);background:#07121e}
.game-scene>svg{width:100%;height:100%;display:block}
.game-scene[data-renderer=flat]>svg.dd-map{height:100%}
.is-paused .gw-stage:after{content:'Paused';position:absolute;z-index:7;inset:0;display:grid;place-items:center;background:#000a;font:italic 28px var(--serif);color:var(--text)}
/* ---------- Round caption ---------- */
.round-stage{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;column-gap:14px;min-width:0}
.round-copy{min-width:0}
.round-copy>span{display:block;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.round-copy h2{margin:2px 0 1px;font:normal 20px/1.2 var(--serif);letter-spacing:-.3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.round-copy p{margin:0;font-size:12px;line-height:1.35;color:var(--muted);display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.round-stage[data-tone=win] .round-copy h2{color:var(--accent)}
.round-stage[data-tone=partial] #phase-kicker,.round-stage[data-tone=loss] #phase-kicker{color:#d7a99d}
.error-message{grid-column:1/-1;margin:2px 0 0;color:#f4a497;font-size:12px;line-height:1.35}
.error-message:empty{display:none}
.draw-timeline{display:flex;gap:6px}
.draw-slot{display:flex;align-items:center;gap:7px;min-width:0;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:#0b1d2a;transition:background .2s}
.draw-slot .draw-number{font:11px var(--mono);color:#69828f}
.draw-slot strong{font-size:12px;font-weight:500;white-space:nowrap}
.draw-slot.pending{color:#607e8e}
.draw-slot.revealed{border-color:#916b62;background:#342824;color:#efbda7;animation:reveal-in .45s ease-out}
.draw-slot.ingredient{padding:5px 8px;gap:6px}
.draw-slot.ingredient.revealed{color:var(--ingredient-color);border-color:color-mix(in srgb,var(--ingredient-color) 40%,var(--line));background:color-mix(in srgb,var(--ingredient-color) 8%,var(--ink))}
.ingredient-mark{width:19px;height:19px;border:1px solid currentColor;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-size:11px;font-weight:700;flex-shrink:0}
@keyframes reveal-in{from{transform:translateY(4px);opacity:.3}to{transform:none;opacity:1}}

/* ---------- Control bar ---------- */
/* Phones and narrow windows: options, then the stake, then Quick / Auto / Replay / Odds and the big button. */
.gw-bar{display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-areas:"opts opts" "stake stake" "sec play";gap:6px 8px;align-items:center;min-width:0}
.gw-options{grid-area:opts;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;min-width:0}
body[data-game=last-call] .gw-options{grid-template-columns:repeat(3,minmax(0,1fr))}
.gw-stake{grid-area:stake;position:relative;min-width:0}
.gw-secondary{grid-area:sec;display:flex;gap:6px}
.gw-sec span{display:none}
.primary-button{grid-area:play;min-width:0;min-height:52px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:4px 12px;border-radius:12px;box-shadow:0 2px 0 color-mix(in srgb,var(--accent) 55%,#000),0 6px 22px rgba(var(--accent-rgb),.16)}
.primary-button.bz-btn-primary:hover:not(:disabled){filter:brightness(1.07)}
.pb-label{font:600 17px/1.15 var(--serif);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}
.pb-detail{font:400 12px/1.2 var(--sans);opacity:.82;white-space:nowrap}
.pb-detail b{font:500 12px var(--mono)}
.pb-auto{display:none;font:500 12px/1.2 var(--mono);opacity:.85;white-space:nowrap}
.primary-button.is-auto{background:#2b3d47;color:var(--text);box-shadow:inset 0 0 0 1.5px var(--accent)}
.primary-button.is-auto .pb-detail{display:none}.primary-button.is-auto .pb-auto{display:block}
.is-busy .primary-button:not(.is-auto){filter:saturate(.6)}
/* Stake (baize-ui .bz-stake): Min, ½, the box with its caption, 2×, Max. */
.gw-stake.bz-stake{gap:5px}
.gw-stake button{height:48px;min-width:46px;font-size:15px;color:var(--text);background:#ffffff12}
.gw-stake button:hover:not(:disabled){background:#ffffff22}
.stake-mid{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;height:48px;border:1.5px solid #ffffff22;border-radius:10px;background:#00000038;cursor:text}
.stake-mid span{font:500 11px/1 var(--sans);letter-spacing:.04em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.bz-stake .stake-mid input{appearance:textfield;-moz-appearance:textfield;width:100%;min-width:0;height:auto;padding:0;background:transparent;border:0;border-radius:0;text-align:center;font:500 19px/1.15 var(--mono);font-variant-numeric:tabular-nums;outline:0}
.stake-mid input::-webkit-inner-spin-button,.stake-mid input::-webkit-outer-spin-button{appearance:none;margin:0}
.stake-mid:focus-within{background:#ffffff0c;box-shadow:inset 0 0 0 2px var(--accent)}
/* Quick play bolt and Auto: the baize-ui bolt, sized to the bar */
.gw-secondary .bz-turbo{min-width:52px;min-height:52px;background:#00000052;border:1.5px solid #ffffff22;color:#d5d9d2}
.gw-auto-toggle[aria-pressed=true],.gw-auto-toggle[aria-expanded=true]{color:var(--accent);box-shadow:inset 0 0 0 1.5px var(--accent)}
.gw-secondary .gw-icon{height:52px;min-width:46px}
/* Auto play settings: an in-window sheet over the scene */
.gw-auto{display:flex;flex-direction:column;gap:8px}
.gw-auto-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 10px}
.gw-auto-grid label{display:flex;flex-direction:column;gap:4px;font:500 12px/1.2 var(--sans);color:var(--muted)}
.gw-auto-grid select,.gw-auto-grid input{min-height:40px;min-width:0;width:100%;padding:0 8px;border-radius:9px;border:1.5px solid #ffffff22;background:#00000045;font:500 14px var(--sans);color:var(--text)}
.gw-auto-grid input{font-family:var(--mono)}
.gw-auto-adjust{display:flex;gap:4px}.gw-auto-adjust input{flex:0 0 64px;width:64px}
.gw-auto .gw-fine{margin:0}
.gw-auto-start{min-height:48px;font-size:16px}
.gw-auto-note{position:absolute;z-index:6;left:50%;bottom:calc(var(--inset-b) + 10px);transform:translateX(-50%);max-width:calc(100% - 24px);margin:0;padding:8px 14px;border-radius:999px;background:#0b1a24ee;border:1px solid var(--line);font:500 13px/1.3 var(--sans);color:var(--text);text-align:center}
.gw-auto-note:empty{display:none}
.auto-running .gw-auto-note{display:none}

/* Dead Drop: a route-length chip row per courier. Select a courier, then tap a district on the map. */
.courier-pick{display:flex;gap:4px;min-width:0;padding:3px;border-radius:12px;border:1.5px solid #ffffff14;background:#00000030}
.courier-pick.active{border-color:color-mix(in srgb,var(--courier-color) 60%,transparent);background:color-mix(in srgb,var(--courier-color) 8%,#0003)}
.courier-name{flex:1 1 auto;min-width:0;height:44px;display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto;column-gap:6px;align-content:center;text-align:left;padding:0 6px;border-radius:9px}
.courier-name .courier-dot{grid-row:1/3;align-self:center;width:9px;height:9px;border-radius:50%;background:var(--courier-color);box-shadow:0 0 10px color-mix(in srgb,var(--courier-color) 60%,transparent)}
.courier-name span{font:600 13px/1.15 var(--sans);color:var(--courier-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.courier-name small{font-size:11px;line-height:1.2;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.courier-pick.active .courier-name small{color:var(--text)}
.len-chips{display:flex;gap:3px;flex:none}
.len-chips button{width:46px;height:46px;border-radius:9px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;background:#ffffff0a;color:var(--muted);border:1px solid transparent}
.len-chips button b{font:500 15px/1 var(--mono)}
/* Every route chip keeps its return, phones included. */
.len-chips button small{display:block;font:500 11px/1 var(--mono);letter-spacing:-.02em;color:var(--muted)}
.len-chips button.selected small{color:var(--text)}
.len-chips button.selected{background:color-mix(in srgb,var(--courier-color) 20%,transparent);border-color:var(--courier-color);color:var(--text)}

/* Last Call: three glass chips mirror the glasses on the machine. */
.glass-chip{min-width:0;height:50px;display:flex;align-items:center;gap:7px;padding:0 8px;border-radius:12px;border:1.5px solid color-mix(in srgb,var(--drink-color) 40%,transparent);background:color-mix(in srgb,var(--drink-color) 7%,#0003);text-align:left}
.glass-chip:hover:not(:disabled){border-color:var(--drink-color)}
.glass-num{flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;font:normal 12px var(--serif);background:var(--drink-color);color:#16211d}
.glass-chip>span{min-width:0;display:flex;flex-direction:column;gap:2px}
.glass-chip strong{font:normal 14px/1.1 var(--serif);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.glass-chip small{font:400 11px/1.1 var(--mono);letter-spacing:-.02em;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.glass-chip .narrow{display:none}

/* ---------- Odds panel (in the window, over the scene) ---------- */
.gw-panel{position:absolute;z-index:7;right:calc(var(--inset-r) + 8px);bottom:calc(var(--inset-b) + 8px);width:min(400px,calc(100% - var(--inset-r) - 16px));max-height:calc(100% - var(--inset-t) - var(--inset-b) - 16px);overflow:auto;overscroll-behavior:contain;padding:12px 14px 14px;border-radius:14px;background:color-mix(in srgb,var(--surface) 96%,transparent);border:1px solid var(--line);box-shadow:0 18px 50px #000b}
.gw-panel-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}
.gw-panel-head h2{flex:1;margin:0;font:normal 20px/1.2 var(--serif)}
.gw-close{flex:none;width:44px;height:44px;border-radius:50%;font:300 28px/1 var(--sans);color:var(--muted)}
.gw-close:hover{background:#ffffff12;color:var(--text)}
.gw-panel h3{margin:12px 0 4px;font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.odds-row{display:grid;grid-template-columns:4px minmax(0,1fr) auto auto;gap:10px;align-items:center;padding:7px 0;border-bottom:1px solid #ffffff10}
.odds-row>i{align-self:stretch;border-radius:2px;background:var(--row-color)}
.odds-row strong{display:block;font:normal 15px/1.2 var(--serif)}
.odds-row small{display:block;font-size:11px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.odds-fig{text-align:right}
.odds-fig b{display:block;font:500 15px/1.2 var(--mono)}
.gw-fine{margin:12px 0 0;font-size:11px;line-height:1.5;color:var(--muted)}
/* Short windows: the live round cards stay in the caption and scene; landscape lays the panel out in two columns. */
@media(max-height:700px){.gw-panel .this-round,.gw-panel .live-readout{display:none}.gw-panel{padding:8px 12px 10px}.gw-panel h3{margin-top:8px}.odds-row{padding:5px 0}.distribution-row{margin:4px 0}.gw-panel .gw-fine{margin-top:6px}}
@media(max-height:500px){
  .gw-panel{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);column-gap:16px;align-content:start;width:min(640px,calc(100% - var(--inset-r) - 16px));padding:8px 12px 10px}
  .gw-panel-head,.gw-panel .gw-fine{grid-column:1/-1}
  #choice-odds{grid-column:1;grid-row:2/5}
  #choice-outcomes-label{grid-column:2;margin-top:4px}
  #choice-distribution{grid-column:2}
  .odds-row{padding:5px 0}
  .gw-panel .gw-fine{margin-top:6px}
}

/* ---------- Sheets: menu and recipe picker (modal, inside the window) ---------- */
dialog.gw-sheet{width:min(720px,calc(100vw - 16px));max-width:none;max-height:calc(100dvh - 16px);margin:auto;padding:0;border:1px solid var(--line);border-radius:16px;background:var(--ink);color:var(--text);box-shadow:0 30px 90px #000c;overflow:hidden}
dialog.gw-sheet[open]{display:flex;flex-direction:column}
dialog.gw-sheet::backdrop{background:#02070bc4;-webkit-backdrop-filter:blur(5px);backdrop-filter:blur(5px)}
dialog.gw-sheet>.gw-panel-head{flex:none;padding:8px 8px 8px 16px;margin:0;border-bottom:1px solid var(--line)}
.gw-tabs{flex:1;display:flex;gap:4px;min-width:0}
.gw-tabs button{min-height:44px;padding:0 12px;border-radius:999px;font:600 14px var(--sans);color:var(--muted)}
.gw-tabs button[aria-selected=true]{background:#ffffff12;color:var(--text)}
.gw-pane{flex:1 1 auto;min-height:0;overflow:auto;overscroll-behavior:contain;padding:14px 18px 18px}
.gw-pane h3{margin:2px 0 6px;font:normal 22px/1.2 var(--serif)}
.gw-pane h3+.gw-tagline{margin-top:0}
.gw-tagline{font:14px/1.5 var(--serif);color:#c7cfd0;margin:0 0 6px}
.gw-pane p,.gw-pane li{font-size:12.5px;line-height:1.7;color:var(--muted)}
.gw-pane ol{padding-left:20px}
.gw-pane li{margin-bottom:8px}
.gw-pane table{border-collapse:collapse;width:100%;font-size:12px;margin:12px 0}
.gw-pane td,.gw-pane th{padding:8px 6px;text-align:left;border-bottom:1px solid var(--line)}
.gw-pane th{font-weight:500}
.gw-pane td{color:var(--muted);font-variant-numeric:tabular-nums}
#rules-content h3{font:600 14px var(--sans);margin-top:18px}
.gw-summary{font:500 14px var(--mono)!important;color:var(--text)!important;margin:0 0 8px}
#runs{display:grid;gap:6px}
#runs>p{margin:0}
.history-round{display:grid;grid-template-columns:minmax(0,1fr) auto;column-gap:10px;padding:8px 10px;border-radius:9px;background:#ffffff08}
.history-round span{font-size:12px;color:var(--text)}
.history-round small{grid-row:2;font-size:11px;color:var(--muted)}
.history-round strong{grid-row:1/3;grid-column:2;align-self:center;font:500 15px var(--mono);color:#b7ccbd}
.history-round.loss strong{color:#d5aaa0}
.receipt-block{border-top:1px solid var(--line);margin-top:16px}
.receipt-block h3{font:600 13px var(--sans)!important;margin-top:14px!important}
.receipt-block pre{padding:12px;margin:0 0 8px;background:var(--surface);font-size:11px;line-height:1.55;max-height:220px;overflow:auto;border-radius:8px}
.gw-text-button{min-height:44px;padding:0 4px;color:var(--accent);font-size:13px;text-decoration:underline;text-underline-offset:3px}
#export-data{width:100%;min-height:160px;padding:10px;color:var(--text);background:#090e15;border:1px solid #6f76794d;border-radius:6px;resize:vertical;font:11px/1.6 var(--mono)}
.gw-settings{display:grid;gap:6px}
.gw-setting{min-height:52px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:6px 14px;border-radius:12px;background:#ffffff08;text-align:left;font-size:14px}
.gw-setting small{display:block;font-size:11px;color:var(--muted);margin-top:2px}
.gw-switch{flex:none;width:40px;height:24px;border-radius:999px;background:#0006;box-shadow:inset 0 0 0 1.5px #ffffff30;position:relative;transition:background .2s}
.gw-switch:after{content:'';position:absolute;top:4px;left:4px;width:16px;height:16px;border-radius:50%;background:var(--muted);transition:transform .2s}
.gw-setting[aria-pressed=true] .gw-switch{background:var(--accent)}
.gw-setting[aria-pressed=true] .gw-switch:after{transform:translateX(16px);background:var(--on-accent)}
.gw-danger{color:#f0b2a5;justify-content:flex-start}

/* ---------- Watch mode: a recording layout, larger captions, no option chips ---------- */
.broadcast .gw-options,.broadcast .gw-secondary{display:none}
.broadcast .gw-bar{grid-template-areas:"stake play play"}
.broadcast .round-copy h2{font-size:24px}
.broadcast .round-copy p{font-size:13px;-webkit-line-clamp:2}

/* ---------- Sizes ---------- */
/* Wide windows: one control row. Quick stakes and button captions appear inline as width allows. */
@media(min-width:1000px) and (min-height:501px){
  :root{--hud-h:56px}
  .gw-hud{padding-left:calc(12px + var(--safe-l));padding-right:calc(12px + var(--safe-r));gap:8px}
  .gw-title{font-size:21px}
  .gw-console{padding:8px 16px 12px;gap:8px}
  .gw-bar{display:flex;gap:10px}
  .gw-options{display:flex;flex:0 1 auto;min-width:0}
  body[data-game=last-call] .gw-options{display:grid;flex:1 1 auto;max-width:560px}
  .courier-pick{flex:0 0 auto}
  .courier-name{min-width:92px}
  .gw-stake.bz-stake{display:grid;grid-template-columns:auto auto 78px auto auto;margin-left:auto;flex:none}
  .gw-stake button{min-width:44px;height:52px;padding:0 6px}
  .stake-mid{height:52px}
  .primary-button{flex:0 0 clamp(180px,16vw,260px);min-height:56px}
  .pb-label{font-size:19px}
  .round-copy h2{font-size:22px}
  .round-copy p{font-size:12.5px}
  .gw-auto{right:16px;width:min(460px,calc(100% - 32px))}
  .broadcast .gw-bar{justify-content:center}
  .broadcast .gw-stake{margin-left:0}
  .broadcast .primary-button{flex-basis:320px}
  .broadcast .round-copy h2{font-size:28px}
}
/* Narrow desktop windows: the route chips drop to their numbers' width before the row runs out. */
@media(min-width:1000px) and (max-width:1279px) and (min-height:501px){
  .gw-bar{gap:8px}
  .len-chips button{width:40px}
  .courier-name{min-width:62px}
  .courier-name .courier-dot{display:none}
  .courier-name{grid-template-columns:minmax(0,1fr)}
  .glass-num{display:none}
  .glass-chip{padding:0 8px}
  .gw-stake button[data-stake=min],.gw-stake button[data-stake=max]{display:none}
  .gw-stake.bz-stake{grid-template-columns:auto 72px auto}
  .gw-secondary .bz-turbo{min-width:46px}
  .primary-button{flex-basis:150px}
  .pb-label{font-size:17px}
}
@media(min-width:1440px) and (min-height:501px){
  .gw-sec{padding:0 14px}
  .gw-sec span{display:inline;font-size:13px}
  .courier-name{min-width:104px}
  .len-chips button{width:50px}
}
@media(min-width:1500px) and (min-height:900px){
  .courier-name span{font-size:14px}
  .len-chips button{width:54px}
  .glass-chip{height:56px}
  .glass-chip strong{font-size:16px}
  .round-copy h2{font-size:25px}
  .round-copy p{font-size:13.5px}
  .draw-slot strong{font-size:13px}
}
/* Timeline chips only where the caption has room; the scene shows every lockdown and pour anyway. */
@media(max-width:999px),(max-height:500px){.draw-timeline{display:none}.round-stage{grid-template-columns:minmax(0,1fr)}}
@media(max-width:999px) and (min-height:501px){
  .round-copy p{-webkit-line-clamp:2}
  .gw-auto{left:8px;right:8px;width:auto}
}
@media(max-width:420px){
  :root{--hud-h:50px}
  .gw-hud{gap:4px}
  .gw-title{font-size:17px}
  .gw-balance strong{font-size:15px}
  .gw-console{padding-left:calc(8px + var(--safe-l));padding-right:calc(8px + var(--safe-r));gap:5px}
  .round-copy h2{font-size:18px}
  .round-copy p{font-size:12px}
  .gw-options{gap:5px}
  .courier-pick{gap:3px;padding:2px}
  .courier-name{padding:0 3px 0 4px;column-gap:5px}
  .courier-name .courier-dot{display:none}
  .courier-name{grid-template-columns:minmax(0,1fr)}
  .len-chips{gap:2px}
  .len-chips button{width:39px;height:44px}
  .len-chips button b{font-size:14px}
  /* Glass chips: no number badge (the order is the number), so the full recipe name and return fit. */
  .glass-chip{height:48px;padding:0 6px;gap:0}
  .glass-num{display:none}
  .glass-chip strong{font-size:13px}
  .glass-chip .wide{display:none}.glass-chip .narrow{display:inline}
  .gw-stake button{height:44px;min-width:46px}
  .stake-mid{height:44px}
  .gw-secondary{gap:4px}
  .gw-secondary .bz-turbo{min-width:48px;min-height:48px;font-size:11px;gap:2px}
  .gw-secondary .bz-turbo svg{width:19px;height:19px}
  .gw-secondary .gw-icon{height:48px;min-width:42px}
  .primary-button{min-height:48px;padding:4px 6px}
  .pb-label{font-size:16px}
  .gw-auto-grid{grid-template-columns:minmax(0,1fr)}
  /* Phone legibility: no visible caption below 11px. The body[data-game] selectors outrank playability.css, which loads later. */
  .gw-balance span,.round-copy>span,.courier-name small,.glass-chip small,.gw-panel h3{font-size:11px}
  .stake-mid span{font-size:11px;letter-spacing:0}
  body[data-game] .live-card small,body[data-game] .live-ingredients span,body[data-game] .menu-drink-info small{font-size:11px}
  body[data-game] .menu-drink-info small{letter-spacing:.6px}
}
@media(max-width:380px){.pb-label{font-size:15px;line-height:1.05;white-space:normal;text-align:center}.pb-detail,.pb-detail b{font-size:11px}.len-chips button{width:36px}.gw-secondary .gw-icon{min-width:40px}}
@media(max-width:340px){
  .gw-balance span{display:none}
  .len-chips button{width:34px}
  .glass-chip small{display:none}
}
/* Short landscape (phones on their side): the console is a rail drawn over the right edge of the scene. */
@media(max-height:500px) and (min-aspect-ratio:4/3){
  :root{--hud-h:46px}
  .gw-console{top:0;left:auto;width:min(var(--rail-w),42vw);padding:calc(var(--hud-h) + 4px) calc(8px + var(--safe-r)) calc(6px + var(--safe-b)) 26px;gap:6px;justify-content:flex-end;background:linear-gradient(270deg,color-mix(in srgb,var(--ink) 94%,transparent) 0,color-mix(in srgb,var(--ink) 86%,transparent) calc(100% - 22px),#0000)}
  .gw-icon{height:40px;min-width:40px}
  .round-stage{margin-bottom:auto}
  .round-copy h2{font-size:17px;white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
  .round-copy p{font-size:11px;-webkit-line-clamp:2}
  .gw-bar{grid-template-columns:minmax(0,1fr);grid-template-areas:"opts" "stake" "sec" "play";gap:5px}
  .gw-secondary{justify-content:space-between}
  .gw-options{grid-template-columns:minmax(0,1fr)!important;gap:4px}
  .courier-pick{padding:2px}
  .courier-name,.len-chips button{height:38px}
  .len-chips button{width:40px}
  .glass-chip{height:36px}
  .glass-chip small{display:none}
  .glass-num{width:20px;height:20px}
  .gw-stake button{height:40px;min-width:36px;padding:0 4px;font-size:13px}
  .gw-stake button[data-stake=min],.gw-stake button[data-stake=max]{display:none}
  .gw-stake.bz-stake{grid-template-columns:auto minmax(0,1fr) auto}
  .stake-mid{height:40px}
  .stake-mid span{display:none}
  .gw-secondary .bz-turbo{min-width:40px;min-height:40px;padding:2px}
  .gw-secondary .bz-turbo span{display:none}
  .gw-secondary .gw-icon{height:40px;min-width:40px}
  .primary-button{min-height:46px}
  .pb-label{font-size:16px}
  .gw-auto{top:8px;bottom:8px;right:calc(var(--inset-r) + 8px);max-height:none}
}
@media(max-height:500px) and (min-aspect-ratio:4/3) and (max-height:360px){
  .round-copy p{display:none}
}
/* Dead Drop: before a deciding lockdown the window's edge pulses with the heartbeat. */
.dd-tension .scene-wrap:after{content:'';position:absolute;inset:0;pointer-events:none;z-index:2;box-shadow:inset 0 0 120px 10px #c0302a55;animation:dd-heart .85s ease-out infinite}
@keyframes dd-heart{0%{opacity:.25}12%{opacity:1}30%{opacity:.45}42%{opacity:.85}100%{opacity:.2}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
