@font-face{font-family:Fallback;src:local('Arial')}*{box-sizing:border-box}html,body{margin:0;height:100%;width:100%;overflow:hidden;overscroll-behavior:none;background:#0c0806;color:#fff1d5;font-family:Arial,Helvetica,sans-serif}button{font:inherit;cursor:pointer;color:inherit;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:manipulation}button:focus-visible{outline:2px solid #ffdf8c;outline-offset:-4px}button:disabled{opacity:.45;cursor:wait}[hidden]{display:none!important}#app{--gold:#f3cf79;--rim:#b98533;--halo:#d9a642;--environment:url('assets/reference-v2/vault-exact.webp');height:100dvh;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top);background:#0c0806}#app[data-theme=redline]{--rim:#ba3b40;--halo:#ff304f;--environment:url('assets/redline.webp')}#app[data-theme=afterhours]{--rim:#9e6557;--halo:#a0486b;--environment:url('assets/after-hours.webp')}.hud{position:relative;z-index:3;display:flex;align-items:center;gap:clamp(10px,2.4vw,28px);flex-shrink:0;padding:14px 24px 18px;border:1px solid #aa77313d;border-bottom:2px solid var(--rim);background:linear-gradient(120deg,#20150ad9,#090707 64%,#21150c);box-shadow:0 2px 14px #0009}.hud:after{content:'';position:absolute;bottom:6px;right:0;width:67%;height:1px;background:linear-gradient(90deg,#f7d487,#87591f44);transform:skew(-40deg)}.brand{font-weight:950;letter-spacing:-3px;font-size:42px;line-height:.9;margin-right:auto;white-space:nowrap;color:white}.brand>span{color:#d33e51}.brand small{font:9px monospace;letter-spacing:2px;display:block;margin-top:10px;color:#dfbd80}.brand>b{display:block;width:max-content;font:700 10px monospace;letter-spacing:2px;background:linear-gradient(105deg,#ad722e,#ffe3a0,#be8945);color:#28160b;border:1px solid #ffe0a1;border-radius:2px;margin-top:7px;padding:3px 18px}.score{border-left:1px solid #8a61234f;padding-left:16px}.hud small{display:block;font:9px monospace;letter-spacing:1.7px;color:#ab9b87;margin-bottom:5px}.score strong{font:700 35px monospace;color:#f7d584;text-shadow:0 0 16px #efbf4d3b;letter-spacing:1px}.metric strong{font:28px monospace;color:#fff8e5}.next{width:68px;height:75px;border:1px solid #ba8e4e99;border-radius:4px;background:#070606;display:grid;grid-template-rows:12px 1fr;padding:5px;flex-shrink:0}.next small{text-align:center;font-size:7px;color:#e3c487}.next canvas{width:100%;height:100%;object-fit:contain}.utility{height:61px;min-width:54px;background:linear-gradient(130deg,#281b16,#110a09);border:1px solid #795735;border-radius:9px;font-size:16px;box-shadow:inset 0 1px 2px #fff1}.utility[aria-pressed=true]{color:#f3cf79;box-shadow:0 0 12px #f3cf7922}#stage{flex:1;min-height:0;position:relative;display:grid;place-items:center;overflow:hidden;background:radial-gradient(ellipse at center,#4d2a0f 0,#160d08 60%,#060505 100%)}#stage:before{content:'';position:absolute;inset:0;background-image:var(--environment);background-position:center;background-size:cover;opacity:.35;filter:brightness(.6)}#chamber{position:relative;width:280px;height:560px;isolation:isolate}#chamber:before{content:'';position:absolute;z-index:-2;top:0;left:-21%;width:142%;height:108.8%;background-image:var(--environment);background-size:100% 100%;background-position:top;pointer-events:none}#chamber:after{content:'';position:absolute;inset:-2px;border:2px solid var(--rim);box-shadow:0 0 2px #ffe4a2,inset 0 0 9px #e3b65a33,0 0 20px #0008;pointer-events:none}#board{width:100%;height:100%;display:block;touch-action:none;outline:none;background:#060606}#scene-notice{position:absolute;inset:0;background:#080609dc;display:flex;flex-direction:column;justify-content:center;text-align:center;z-index:2;pointer-events:none}#scene-notice small{font:10px monospace;letter-spacing:4px;color:#bda788}#scene-notice strong{font-size:clamp(22px,4vw,36px);margin:14px 0;color:#ffe1a0;text-shadow:0 0 30px var(--halo)}#scene-notice span{font:8px monospace;letter-spacing:2px}#combo{position:absolute;top:65%;left:0;right:0;font:bold 20px monospace;text-shadow:0 0 16px #e8a82c;color:#ffdf85;text-align:center;pointer-events:none}.controls{position:relative;z-index:3;display:flex;justify-content:center;gap:12px;padding:12px max(14px,calc((100vw - 840px)/2)) max(14px,env(safe-area-inset-bottom));border-top:1px solid #d1a05299;border-bottom:1px solid #6d471b;background:linear-gradient(#28180ed9,#100909 80%);box-shadow:0 -2px 15px #0009}.controls button{flex:1;min-width:0;height:74px;border:1px solid #aa7b44;border-radius:10px;background:linear-gradient(130deg,#352020,#110b0d 75%);box-shadow:inset 0 1px 3px #fff2;font-size:38px;color:#f6d67e;touch-action:none}.controls small{display:block;font:8px monospace;letter-spacing:2px;margin-top:1px}.controls .drop{background:linear-gradient(115deg,#ffecae,#ecc15e 55%,#ffdd86);border-color:#ffedb1;color:#170d06;font-size:23px;font-weight:900;white-space:nowrap;box-shadow:inset 0 1px 8px #fff7,0 0 22px #eab84922;flex:1.12}.controls button:active,.controls button.pressed{filter:brightness(1.35);transform:translateY(1px)}.overlay{position:absolute;inset:0;z-index:4;display:grid;place-items:center;background:#080507c7;backdrop-filter:blur(3px);overflow:auto;padding:16px}.menu-card{width:min(520px,100%);text-align:center;margin:auto}.eyebrow{font:9px monospace;letter-spacing:4px;color:#dfba7b}h1{font-size:clamp(48px,8vh,83px);font-weight:950;line-height:.86;letter-spacing:-4px;margin:18px 0 15px;color:#ffe6ac;text-shadow:0 3px #71461c,0 10px 40px #000}h1 span{color:#e5b765}h2{font-size:18px;letter-spacing:1.8px;margin:17px 0 8px}.menu-card p{font-size:12px;line-height:1.8;color:#bdafa0;margin:0}#collection{display:flex;align-items:center;justify-content:center;gap:8px;height:104px;margin:18px 0 6px}#collection canvas{width:calc((100% - 48px)/7);height:100%;object-fit:contain;filter:drop-shadow(0 3px 6px #000)}.scene-picker{display:flex;gap:7px;justify-content:center;margin:19px 0}.scene-picker button{font:8px monospace;letter-spacing:1px;padding:9px 12px;color:#ad9881;border:1px solid #6a4c2d;background:#160e0a;border-radius:3px}.scene-picker button[aria-pressed=true]{color:#ffdfa1;border-color:#e8b958;background:#382316}.primary{display:block;margin:0 auto;width:min(275px,100%);padding:17px 20px;font-size:19px;font-weight:900;color:#1e1207;background:linear-gradient(125deg,#ffe8a7,#e4b559,#ffe49a);border:1px solid #ffeab1;border-radius:8px;box-shadow:inset 0 2px 8px #fff3,0 8px 40px #db9c3122}.text-button{display:block;margin:16px auto 0;background:transparent;border:0;text-decoration:underline;font:10px monospace;color:#c3a775;padding:8px}#load-status{font:9px monospace;color:#c9a166;min-height:12px;margin:9px 0}.best{font:9px monospace;letter-spacing:2px;color:#998675;margin:15px 0}.best b{color:#f1c769;margin-left:9px}.menu-card .howto{font-size:10px;margin-top:17px;color:#d9c5a6}.howto span{font-size:9px;color:#8f7d6f}#asset-warning{position:absolute;left:10px;right:10px;bottom:4px;z-index:6;font:10px monospace;text-align:center;padding:6px;background:#201209ed;color:#efd699}#asset-warning button{background:none;border:0;color:#ffe3a0;text-decoration:underline}#app[data-state=paused] .eyebrow,#app[data-state=gameover] .eyebrow{margin-bottom:20px}#app[data-state=paused] h1,#app[data-state=paused] #collection,#app[data-state=gameover] h1,#app[data-state=gameover] #collection{display:none}
@media(max-width:600px){.hud{gap:7px;padding:12px 10px 14px}.brand{font-size:29px;letter-spacing:-2px;min-width:88px}.brand small{font-size:5.7px;letter-spacing:.9px;margin-top:8px}.brand>b{font-size:7px;letter-spacing:1px;padding:3px 9px;margin-top:6px}.hud small{font-size:7px;letter-spacing:1px;margin-bottom:4px}.score{padding-left:8px}.score strong{font-size:23px;letter-spacing:0}.metric strong{font-size:20px}.next{width:40px;height:50px;padding:3px;grid-template-rows:8px 1fr}.next small{font-size:6px;letter-spacing:1px}.utility{height:43px;min-width:30px;padding:4px;font-size:11px}.controls{gap:8px;padding:10px 10px max(12px,env(safe-area-inset-bottom))}.controls button{height:65px;font-size:32px;border-radius:9px}.controls .drop{font-size:17px}.controls small{font-size:7px;letter-spacing:1.3px}.overlay{padding:14px}h1{font-size:65px}#collection{height:95px;gap:5px;margin:17px 0 5px}#collection canvas{width:calc((100% - 30px)/7)}h2{font-size:16px}.menu-card p{font-size:11px}.scene-picker button{padding:9px 7px;font-size:7px}.primary{padding:17px}.eyebrow{font-size:8px;letter-spacing:3px}}
@media(max-width:370px){.hud{gap:5px;padding-left:6px;padding-right:6px}.brand{min-width:80px;font-size:26px}.score{padding-left:5px}.score strong{font-size:20px}.metric strong{font-size:17px}.next{width:35px}.utility{min-width:27px}.controls .drop{font-size:14px}}
@media(max-height:560px){.hud{padding:6px 16px 8px}.brand{font-size:28px}.brand small{font-size:6px;margin-top:5px}.brand>b{display:none}.score strong{font-size:26px}.metric strong{font-size:22px}.next{height:45px;width:55px}.utility{height:40px}.controls{padding-top:6px;padding-bottom:6px}.controls button{height:45px;font-size:29px}.controls .drop{font-size:18px}.controls small{font-size:6px}.overlay{padding:10px}.menu-card{width:490px}h1{font-size:38px;margin:9px 0}h1 br{display:none}h2{margin:9px 0 5px;font-size:13px}#collection{height:55px;margin:8px 0}.scene-picker{margin:10px 0}.scene-picker button{padding:6px 10px}.primary{padding:11px;font-size:16px}.best{margin:7px 0}.menu-card .howto{margin-top:7px;font-size:9px}.eyebrow{font-size:7px}#load-status{margin:4px 0}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto}}
@media(max-height:450px){.menu-card h1,.menu-card .best,.menu-card .howto{display:none}#collection{height:43px;margin:5px 0}h2{margin:7px 0 4px}.scene-picker{margin:8px 0}.menu-card .eyebrow{font-size:7px;letter-spacing:2px}.menu-card p{font-size:10px}.primary{padding:10px}#load-status{font-size:8px}#app[data-state=paused] .menu-card,#app[data-state=gameover] .menu-card{padding:15px}}
/* Clip the stage without creating a scroll container: focus/menu navigation
   must never scroll the first board row underneath the HUD. */
#stage{overflow:clip}
/* Eleven pieces, two readable rows, including narrow phone viewports. */
#collection{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));gap:7px;height:150px;margin:12px 0}#collection canvas{width:100%;height:100%;min-width:0;min-height:0}
@media(max-width:600px){#collection{height:132px;gap:5px}.menu-card h1{font-size:53px;margin:13px 0}.menu-card .howto{margin-top:10px}}
@media(max-height:560px){#collection{height:64px;gap:5px;margin:6px 0}.menu-card h1{font-size:34px}}
@media(max-height:450px){#collection{height:54px}}

/* Canvas intrinsic dimensions must not stretch the preview's grid row. */
.next{grid-template-rows:auto minmax(0,1fr);overflow:hidden}
.next canvas{min-width:0;min-height:0;max-width:100%;max-height:100%}

/* Brush-letter row-clear celebration; pointer events pass through to play. */
#mobb-callout{position:absolute;inset:0;z-index:1;display:grid;place-items:center;pointer-events:none;will-change:opacity,transform}
#mobb-callout img{display:block;width:98%;height:auto;filter:drop-shadow(0 3px 3px #000) drop-shadow(0 0 12px #b2002266)}
#combo{z-index:1;top:64%;font-size:clamp(10px,2.8vw,17px);letter-spacing:1px;color:#fff0cc;text-shadow:0 2px 5px #000;pointer-events:none}

@media(prefers-reduced-motion:reduce){#mobb-callout{transform:none!important}}
/* Illustrated cabinet world: cel-shaded architecture, inked rails, enamel deck. */
#app{--environment:url('assets/illustrated/vault.svg')}
#app[data-theme=redline]{--environment:url('assets/illustrated/redline.svg')}
#app[data-theme=afterhours]{--environment:url('assets/illustrated/afterhours.svg')}
#stage{background:#11201d}
#stage:before{opacity:.65;filter:none;background-size:cover}
#chamber:before{top:-1.2%;left:-21%;height:119%;background-size:100% 100%;filter:drop-shadow(0 5px 0 #090c0b)}
#chamber:after{border:3px solid #e7bd68;border-radius:3px;box-shadow:0 0 0 3px #17120d,0 0 0 6px var(--rim),inset 0 0 0 2px #090e0c}
.hud{border:3px solid #21160e;border-bottom:4px solid #b2823e;background:linear-gradient(120deg,#f6e6bd,#e9c98c 55%,#b68945);color:#24180e;box-shadow:inset 0 2px #fff6d6,0 4px #120e0b}
.hud small{color:#655037}.hud .brand{color:#1c1a15;text-shadow:0 2px #fff3ce}.hud .score strong{color:#3a2613;text-shadow:0 2px #fff2bb}.hud .metric strong{color:#2d251c}.hud .next{border:2px solid #574123;border-radius:6px;background:#14241e;box-shadow:inset 0 2px 4px #0008}.hud .next small{color:#f5d79a}
.utility{border:2px solid #291d14;background:linear-gradient(#762333,#421723);color:#ffdf9b;box-shadow:inset 0 2px #d56570,0 3px #1d1410}
.controls{background:linear-gradient(#f5e5bc,#d3b175);border-top:4px solid #281d13;border-bottom:3px solid #805b2c;box-shadow:inset 0 2px #fff1ce}
.controls button{border:2px solid #211913;background:linear-gradient(#3c2828,#1c191b);box-shadow:inset 0 2px #81514d,0 4px #68482b;color:#ffe4a1}
.controls .drop{border:2px solid #5c3918;background:linear-gradient(130deg,#fff0b1,#e7b95b);box-shadow:inset 0 3px #fff9cf,0 4px #80552b;color:#231709}
/* The playable grid occupies the entire viewport between HUD and controls. */
#app:not([data-state=menu]) #stage{display:block}
#app:not([data-state=menu]) #chamber{width:100%!important;height:100%!important}
#app:not([data-state=menu]) #chamber:before,#app:not([data-state=menu]) #chamber:after{display:none}
#app:not([data-state=menu]) #stage:before{display:none}
#app:not([data-state=menu]) #board{width:100%;height:100%}
/* Five approved cartoon worlds; live UI takes its color from the active map. */
#app:not([data-state=menu]) .hud{background:linear-gradient(120deg,#fff0c7,#e7c181);border-bottom-color:var(--scene-accent)}
#app:not([data-state=menu]) .utility,#app:not([data-state=menu]) .controls button:not(.drop){background:linear-gradient(135deg,var(--scene-tone),#141322);box-shadow:inset 0 2px var(--scene-accent),0 3px #271a14}
#app:not([data-state=menu]) .next{background:var(--scene-tone);border-color:var(--scene-accent)}
#app[data-state=menu] .scene-picker{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:5px}
#app[data-state=menu] .scene-picker button{min-width:0;padding:3px;font-size:6px;letter-spacing:.3px;line-height:1.3}
#app[data-state=menu] .scene-map{display:block;width:100%;height:43px;background-size:cover;background-position:center 30%;border-radius:2px;margin-bottom:5px}
#pieces-dialog{width:min(760px,94vw);max-height:90dvh;overflow:auto}
#pieces-dialog #collection{height:auto;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:none;grid-auto-rows:135px;gap:12px}
@media(max-width:600px){#pieces-dialog #collection{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:125px}}
