html{box-sizing:border-box;padding-top:env(safe-area-inset-top,0px);padding-bottom:env(safe-area-inset-bottom,0px)}*,*::before,*::after{box-sizing:inherit}
/* Layout: full-bleed arena canvas; HUD pinned to the safe-area corners; menus anchored bottom-left like a stenciled warehouse sign. One committed dark world. */
:root{
  --void:#0a0b09;
  --panel:rgba(14,15,12,.8);
  --line:rgba(236,228,207,.16);
  --bone:#ece4cf;
  --dim:#a39d8b;
  --amber:#ffb22e;
  --on-amber:#1a1206;
  --blood:#e0303f;
  --blood-deep:#5e0c14;
  --toxic:#9bd651;
  --display:'Bungee','Impact','Arial Black',sans-serif;
  --ui:'Chakra Petch',ui-sans-serif,system-ui,-apple-system,'Segoe UI',sans-serif;
  color-scheme:dark;
}
html,body{height:100%}
body{margin:0;background:var(--void);color:var(--bone);font-family:var(--ui);overflow:hidden;overscroll-behavior:none;-webkit-user-select:none;user-select:none;-webkit-tap-highlight-color:transparent;touch-action:none}
#app{position:relative;width:100%;height:100%;overflow:hidden;background:var(--void)}
#game{position:absolute;inset:0;width:100%;height:100%;display:block;touch-action:none;outline:none}
button{font-family:var(--ui)}
button:focus-visible{outline:2px solid var(--amber);outline-offset:2px}

/* HUD */
#hud{position:absolute;inset:0;pointer-events:none;z-index:10}
.hud-tl{position:absolute;top:12px;left:max(14px,env(safe-area-inset-left,0px));display:grid;gap:6px}
.hp{width:clamp(120px,30vw,220px);height:12px;border-radius:3px;background:rgba(0,0,0,.55);border:1px solid var(--line);overflow:hidden;position:relative}
.hp::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(90deg,transparent 0 calc(10% - 1px),rgba(0,0,0,.55) calc(10% - 1px) 10%)}
.hp-fill{height:100%;width:100%;background:var(--bone);transition:width .15s ease-out}
.hp.mid .hp-fill{background:var(--amber)}
.hp.low .hp-fill{background:var(--blood);animation:pulse .5s infinite alternate}
.score{font:700 26px/1 var(--ui);font-variant-numeric:tabular-nums;color:var(--bone);text-shadow:0 2px 0 rgba(0,0,0,.7)}
.next{font:500 12px/1.2 var(--ui);color:var(--dim);text-shadow:0 1px 2px #000}
.hud-tc{position:absolute;top:12px;left:50%;transform:translateX(-50%);display:grid;justify-items:center;gap:4px;text-align:center}
.wave{font:400 15px/1 var(--display);color:var(--amber);letter-spacing:.04em;text-shadow:2px 2px 0 rgba(0,0,0,.6)}
.left{font:500 12px/1 var(--ui);color:var(--dim);text-shadow:0 1px 2px #000;white-space:nowrap}
.combo{display:grid;justify-items:center;gap:3px;margin-top:6px}
.combo b{font:400 32px/1 var(--display);color:var(--amber);text-shadow:3px 3px 0 var(--blood-deep);display:block}
.combo span{font:600 10px/1 var(--ui);letter-spacing:.24em;color:var(--bone)}
.combo .bar{display:block;width:64px;height:3px;background:rgba(255,255,255,.14);border-radius:2px;overflow:hidden}
.combo .bar i{display:block;height:100%;width:100%;background:var(--amber)}
.combo.pop b{animation:pop .3s ease-out}
.hud-tr{position:absolute;top:10px;right:max(12px,env(safe-area-inset-right,0px));display:flex;gap:8px;pointer-events:auto}
.icon-btn{width:40px;height:40px;border-radius:10px;border:1px solid var(--line);background:var(--panel);color:var(--bone);display:grid;place-items:center;cursor:pointer;padding:0}
.icon-btn svg{width:18px;height:18px;display:block}
.wbar{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);display:grid;justify-items:center;gap:6px;pointer-events:none}
.wlabel{display:flex;align-items:baseline;gap:10px;font:700 13px/1 var(--ui);letter-spacing:.06em;text-transform:uppercase;color:var(--bone);text-shadow:0 1px 3px #000;white-space:nowrap}
.wammo{font:700 15px/1 var(--ui);font-variant-numeric:tabular-nums;color:var(--amber)}
.wammo.empty{color:var(--blood)}
.slots{display:flex;gap:6px;pointer-events:auto;padding:6px;border-radius:12px;background:var(--panel);border:1px solid var(--line)}
.slot{position:relative;width:46px;height:42px;padding:0;border-radius:8px;border:1px solid transparent;background:rgba(255,255,255,.04);color:var(--bone);cursor:pointer;display:grid;place-items:center}
.slot img{width:36px;height:18px;display:block;pointer-events:none}
.slot .k{position:absolute;top:3px;left:4px;font:700 10px/1 var(--ui);color:var(--dim)}
.slot .a{position:absolute;bottom:2px;right:4px;font:600 9px/1 var(--ui);font-variant-numeric:tabular-nums;color:var(--dim)}
.slot .lock{display:none;position:absolute;inset:0;place-items:center;color:var(--dim)}
.slot:hover:not(.locked){border-color:var(--line)}
.slot.cur{border-color:var(--amber);background:rgba(255,178,46,.15)}
.slot.cur .k,.slot.cur .a{color:var(--amber)}
.slot.empty .a{color:var(--blood)}
.slot.locked{cursor:not-allowed}
.slot.locked img{opacity:.16}
.slot.locked .lock{display:grid}
.slot.locked .a{display:none}
.slot.fresh{animation:fresh .7s ease-in-out 5}
@keyframes fresh{0%,100%{box-shadow:0 0 0 0 rgba(255,178,46,0)}50%{box-shadow:0 0 0 4px rgba(255,178,46,.6)}}
@media (pointer:coarse){.slot .k{display:none}.slot{width:40px;height:40px}.slots{gap:4px;padding:5px}}
.next-btn{display:none;position:absolute;right:max(24px,calc(env(safe-area-inset-right,0px) + 12px));bottom:190px;width:68px;height:68px;border-radius:50%;border:2px solid var(--amber);background:var(--panel);color:var(--amber);pointer-events:auto;touch-action:none;padding:0;cursor:pointer;flex-direction:column;align-items:center;justify-content:center;gap:3px}
.next-btn canvas{width:40px;height:18px;display:block}
.next-btn span{font:700 9px/1 var(--ui);letter-spacing:.1em;text-transform:uppercase}
.next-btn:active{background:rgba(255,178,46,.25)}
.next-btn.dim{opacity:.35}
body.touch .next-btn{display:flex}
.hint{position:absolute;left:50%;bottom:100px;transform:translateX(-50%);font:500 13px/1.35 var(--ui);color:var(--bone);opacity:0;transition:opacity .5s;text-align:center;width:max-content;max-width:calc(100% - 32px);text-shadow:0 1px 3px #000}
.hint.show{opacity:.9}

/* Banner */
.banner{position:absolute;left:0;right:0;top:24%;display:grid;justify-items:center;gap:8px;pointer-events:none;z-index:15;opacity:0;padding-inline:16px;text-align:center}
.banner .b1{font:400 clamp(30px,7vw,58px)/1 var(--display);color:var(--amber);text-shadow:4px 4px 0 var(--blood-deep)}
.banner .b2{font:600 15px/1.3 var(--ui);color:var(--bone);letter-spacing:.06em;text-shadow:0 1px 3px #000}
.banner.unlock .b1{color:var(--bone);text-shadow:4px 4px 0 var(--amber)}
.banner.clear .b1{color:var(--toxic);text-shadow:4px 4px 0 #1d2b0e}
.banner.show{animation:bannerIn .38s cubic-bezier(.2,1.6,.4,1) both}
.banner.out{animation:bannerOut .4s ease-in both}

/* Screens */
[hidden]{display:none!important}
.screen{position:absolute;inset:0;z-index:20;display:flex;flex-direction:column;align-items:flex-start;overflow-y:auto;padding-block:28px;padding-left:max(20px,env(safe-area-inset-left,0px));padding-right:max(20px,env(safe-area-inset-right,0px));background:linear-gradient(180deg,rgba(10,11,9,.05) 0%,rgba(10,11,9,.55) 42%,rgba(10,11,9,.95) 100%)}
.card{width:100%;max-width:540px;display:grid;gap:18px;margin-top:auto}
@media (min-width:900px){.screen{padding-block:48px;padding-left:max(64px,env(safe-area-inset-left,0px));background:linear-gradient(90deg,rgba(10,11,9,.94) 0%,rgba(10,11,9,.72) 40%,rgba(10,11,9,.08) 72%)}.card{margin-block:auto}}
.eyebrow{display:flex;align-items:center;gap:10px;font:600 12px/1 var(--ui);letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.tape{flex:none;width:46px;height:10px;border-radius:2px;background:repeating-linear-gradient(-45deg,var(--amber) 0 7px,var(--void) 7px 14px)}
.tape.red{background:repeating-linear-gradient(-45deg,var(--blood) 0 7px,var(--void) 7px 14px)}
.title{margin:0;font-family:var(--display);font-weight:400;font-size:clamp(46px,12vw,96px);line-height:.88;color:var(--amber);text-transform:uppercase;text-shadow:5px 5px 0 var(--blood-deep);display:grid;text-wrap:balance}
.title span:last-child{color:var(--bone)}
.title.sm{font-size:clamp(32px,7vw,52px)}
.title.dead{color:var(--blood);text-shadow:5px 5px 0 #000}
.lede{margin:0;max-width:46ch;font-size:16px;line-height:1.5;color:var(--bone);opacity:.88}
.modes{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}
.btn{font:700 15px/1.1 var(--ui);letter-spacing:.05em;text-transform:uppercase;padding:14px 18px;border-radius:10px;border:1px solid var(--line);background:var(--panel);color:var(--bone);cursor:pointer;display:flex;align-items:center;justify-content:space-between;gap:12px;text-align:left}
.btn:hover:not(:disabled){border-color:var(--amber)}
.btn.primary{background:var(--amber);color:var(--on-amber);border-color:transparent}
.btn.primary:hover{filter:brightness(1.08)}
.btn:disabled{opacity:.6;cursor:not-allowed}
.btn-sub{font:600 11px/1 var(--ui);letter-spacing:.08em;opacity:.75}
.chip{font:700 10px/1 var(--ui);letter-spacing:.12em;padding:4px 7px;border-radius:999px;border:1px solid var(--line);color:var(--amber)}
.controls{display:grid;gap:4px 18px;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));border-top:1px solid var(--line);padding-top:6px}
.ctl h2{margin:10px 0 8px;font:600 11px/1 var(--ui);letter-spacing:.16em;text-transform:uppercase;color:var(--amber)}
.ctl ul{margin:0;padding:0;list-style:none;display:grid;gap:7px;font-size:14px;line-height:1.3;color:var(--bone);opacity:.88}
kbd{font:600 12px/1 var(--ui);padding:3px 6px;border-radius:4px;border:1px solid var(--line);border-bottom-width:2px;background:rgba(255,255,255,.04);color:var(--bone)}
@media (pointer:coarse){.ctl-keys{display:none}}
@media (pointer:fine){.ctl-touch{display:none}}
.best{margin:0;font-size:13px;color:var(--dim);font-variant-numeric:tabular-nums}
.logo{margin:0;display:flex;align-items:center;gap:14px}
.logo-head{width:clamp(64px,13vw,104px);height:auto;flex:none;filter:drop-shadow(0 4px 0 rgba(0,0,0,.5))}
.logo-word{width:clamp(170px,40vw,300px);height:auto}
.env-chip{font:700 10px/1 var(--ui);letter-spacing:.14em;padding:4px 7px;border-radius:4px;background:var(--toxic);color:#0d1406;text-transform:uppercase}
.rotate{display:none;position:absolute;inset:0;z-index:40;background:var(--void);place-items:center;text-align:center;padding:24px}
body.need-landscape .rotate{display:grid}
.rotate-box{display:grid;justify-items:center;gap:14px}
.rotate svg{width:96px;height:96px;color:var(--amber);animation:turn 2.4s ease-in-out infinite}
.rotate-t{margin:0;font:400 26px/1.1 var(--display);color:var(--bone)}
.rotate-s{margin:0;font-size:15px;color:var(--dim);max-width:30ch}
@keyframes turn{0%,20%{transform:rotate(0)}50%,80%{transform:rotate(-90deg)}100%{transform:rotate(0)}}
.stats{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 18px;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding-block:14px}
.stats div{display:grid;gap:5px}
.stats span{font:600 11px/1 var(--ui);letter-spacing:.14em;text-transform:uppercase;color:var(--dim)}
.stats b{font:700 30px/1 var(--ui);font-variant-numeric:tabular-nums;color:var(--bone)}
.newbest{justify-self:start;font:700 11px/1 var(--ui);letter-spacing:.14em;text-transform:uppercase;color:var(--on-amber);background:var(--amber);padding:5px 8px;border-radius:4px}
.ladder{margin:0;padding:0;list-style:none;display:grid;border-top:1px solid var(--line)}
.ladder li{display:grid;grid-template-columns:1fr auto 74px;gap:12px;align-items:center;padding:9px 0;border-bottom:1px solid var(--line);font-size:14px;color:var(--dim);font-variant-numeric:tabular-nums}
.ladder li.on{color:var(--bone)}
.ladder li b{font-weight:600;text-transform:uppercase;letter-spacing:.05em}
.ladder li em{font-style:normal;font-size:11px;letter-spacing:.12em;text-transform:uppercase;text-align:right}
.ladder li.on em{color:var(--toxic)}
.screen{touch-action:pan-y}
.screen#feedback{background:rgba(10,11,9,.93)}
a.btn{text-decoration:none}
.btn.accent{border-color:var(--amber);color:var(--amber)}
.linkbtn{background:none;border:0;padding:6px 0;color:var(--dim);font:600 12px/1 var(--ui);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;text-decoration:underline;text-underline-offset:3px;justify-self:start}
.linkbtn:hover{color:var(--bone)}
.fb-note{margin:0;font-size:13px;line-height:1.4;color:var(--dim)}
.fb-stats{margin:0;font-size:15px;line-height:1.5;color:var(--bone);font-variant-numeric:tabular-nums}
.fb{display:grid;gap:16px}
.fb-q{display:grid;gap:8px;min-width:0}
.fb-q > .lbl{font:600 11px/1.2 var(--ui);letter-spacing:.14em;text-transform:uppercase;color:var(--amber)}
.fb-q > .lbl em{font-style:normal;color:var(--dim);letter-spacing:.06em;text-transform:none}
.seg{display:flex;gap:6px}
.seg button{flex:1 1 0;min-width:0;min-height:44px;font:700 15px/1 var(--ui);border-radius:8px;border:1px solid var(--line);background:rgba(255,255,255,.04);color:var(--bone);cursor:pointer}
.seg button:hover{border-color:var(--amber)}
.seg button[aria-pressed="true"]{background:var(--amber);color:var(--on-amber);border-color:transparent}
.seg-hint{display:flex;justify-content:space-between;font-size:12px;color:var(--dim)}
.fb textarea,.fb input,.fb-text{width:100%;box-sizing:border-box;font:500 16px/1.4 var(--ui);color:var(--bone);background:rgba(255,255,255,.05);border:1px solid var(--line);border-radius:8px;padding:10px 12px;resize:vertical;-webkit-user-select:text;user-select:text}
.fb textarea:focus,.fb input:focus{outline:none;border-color:var(--amber)}
.fb-text{font-size:12px;line-height:1.45;color:var(--dim);resize:none;background:rgba(0,0,0,.25)}
@media (max-height:540px){.title{font-size:40px}.lede{display:none}.screen{padding-block:16px}.card{gap:12px}.btn{padding:11px 14px}.stats b{font-size:24px}}

@keyframes bannerIn{from{opacity:0;transform:scale(1.35)}to{opacity:1;transform:scale(1)}}
@keyframes bannerOut{from{opacity:1}to{opacity:0;transform:translateY(-14px)}}
@keyframes pop{0%{transform:scale(1.7)}100%{transform:scale(1)}}
@keyframes pulse{from{opacity:1}to{opacity:.5}}
@media (max-height:540px){.logo-head{width:60px}.logo-word{width:190px}}
@media (prefers-reduced-motion:reduce){.banner.show,.banner.out,.combo.pop b,.hp.low .hp-fill,.slot.fresh,.rotate svg{animation:none}.banner.show{opacity:1}}
/* Add to home screen box: over the menu screens (20), under the rotate overlay (40); [hidden] already hides it */
.install{position:absolute;inset:0;z-index:30;display:grid;place-items:center;padding:16px max(16px,env(safe-area-inset-right,0px)) 16px max(16px,env(safe-area-inset-left,0px));background:rgba(10,11,9,.72)}
.install-card{position:relative;width:min(100%,460px);display:grid;grid-template-columns:auto 1fr;gap:16px;align-items:start;padding:20px 52px 20px 20px;border:1px solid var(--line);border-radius:14px;background:#12130f;box-shadow:0 18px 50px rgba(0,0,0,.55);animation:install-in .28s ease-out both}
.install-icon{width:64px;height:64px;display:block}
.install-body{display:grid;gap:8px;justify-items:start;min-width:0}
.install-t{margin:0;font:400 22px/1.1 var(--display);color:var(--bone)}
.install-s{margin:0;font-size:15px;line-height:1.35;color:var(--dim)}
.install-ios{margin:4px 0 0;font:600 15px/1.45 var(--ui);color:var(--bone)}
.install-ios svg{width:18px;height:18px;vertical-align:-3px;color:var(--amber)}
.install-ios b{color:var(--amber);font-weight:700}
.install-add{margin-top:6px}
.install-x{position:absolute;top:4px;right:4px;width:44px;height:44px;border:0;border-radius:10px;background:none;color:var(--dim);display:grid;place-items:center;cursor:pointer;padding:0}
.install-x svg{width:20px;height:20px}
@keyframes install-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@media (max-height:420px){.install-card{padding:14px 48px 14px 14px;gap:12px}.install-icon{width:48px;height:48px}.install-t{font-size:19px}}
@media (prefers-reduced-motion:reduce){.install-card{animation:none}}
/* Feedback invitation on game over: one amber line and a short glow on the button, 3 pulses each time the screen shows */
.fb-invite{margin:-4px 0 0;font:600 14px/1.4 var(--ui);color:var(--amber)}
.btn.invite{animation:invite-pulse 1.4s ease-in-out 3}
@keyframes invite-pulse{0%,100%{box-shadow:0 0 0 0 rgba(255,178,46,0)}50%{box-shadow:0 0 0 7px rgba(255,178,46,.32)}}
.fb-back{justify-self:start}
@media (prefers-reduced-motion:reduce){.btn.invite{animation:none}}
/* Required feedback answers (0.2.3): an unanswered question is marked after a send attempt */
.fb-q.missing .seg,.fb-q.missing textarea,.fb-q.missing input{outline:2px solid var(--amber);outline-offset:2px;border-radius:10px}
/* Money (0.3.0): balance under the score, a bump on every pickup, a grey line while coins vanish */
.money{display:flex;align-items:center;gap:6px;font:700 18px/1 var(--ui);font-variant-numeric:tabular-nums;color:var(--amber);text-shadow:0 2px 0 rgba(0,0,0,.7)}
.coin{display:inline-block;flex:none;width:14px;height:14px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#fff3b0 0 18%,#ffd34a 19% 62%,#a8700f 63%);box-shadow:0 1px 0 rgba(0,0,0,.6)}
.money b{display:inline-block}
.money.bump b{animation:pop .22s ease-out}
.money .lost{font:600 12px/1 var(--ui);color:var(--dim);text-shadow:0 1px 2px #000}
@media (prefers-reduced-motion:reduce){.money.bump b{animation:none}}
/* Combo show (0.3.0): the tier sets colour (--cc) and size (--cs); a word on tier up, a warning before it runs out, a summary after */
.combo-zone{--cc:var(--amber);--cs:32px;display:grid;justify-items:center;gap:2px}
.combo-zone[data-tier="1"]{--cc:#ff9a2e;--cs:36px}
.combo-zone[data-tier="2"]{--cc:#ff6a2a;--cs:40px}
.combo-zone[data-tier="3"]{--cc:#ff3b30;--cs:44px}
.combo-zone[data-tier="4"]{--cc:#ff3d9a;--cs:48px}
.combo-zone[data-tier="5"],.combo-zone[data-tier="6"]{--cc:#fff1c4;--cs:52px}
.combo-zone .combo b{color:var(--cc);font-size:var(--cs)}
body.touch .combo-zone .combo b{font-size:calc(var(--cs) * .8 + 2px)}
.combo-zone[data-tier="5"] .combo b,.combo-zone[data-tier="6"] .combo b{text-shadow:3px 3px 0 var(--blood-deep),0 0 18px rgba(255,178,46,.85)}
.combo-zone[data-tier="6"] .combo b{animation:hot .5s ease-in-out infinite alternate}
.combo-zone .combo .bar i{background:var(--cc)}
.combo.warn .bar i{background:var(--blood);animation:blink .14s steps(2) infinite}
.combo.warn b{animation:tremble .09s linear infinite}
.combo-word{font:400 20px/1 var(--display);color:var(--cc);letter-spacing:.02em;text-shadow:2px 2px 0 var(--blood-deep);transform:rotate(-4deg);white-space:nowrap}
body.touch .combo-word{font-size:17px}
.combo-word.show{animation:wordIn .32s cubic-bezier(.2,1.6,.4,1) both}
.combo-word.out{animation:wordOut .3s ease-in both}
.combo-end{font:700 13px/1 var(--ui);letter-spacing:.1em;color:var(--amber);text-shadow:0 1px 3px #000;white-space:nowrap}
.combo-end.out{animation:fadeUp .4s ease-in both}
@keyframes wordIn{from{opacity:0;transform:rotate(-4deg) scale(1.9)}to{opacity:1;transform:rotate(-4deg) scale(1)}}
@keyframes wordOut{to{opacity:0;transform:rotate(-4deg) translateY(-8px)}}
@keyframes fadeUp{to{opacity:0;transform:translateY(-8px)}}
@keyframes tremble{25%{transform:translate(1px,-1px)}50%{transform:translate(-1px,1px)}75%{transform:translate(1px,1px)}}
@keyframes blink{to{opacity:.25}}
@keyframes hot{to{filter:brightness(1.35)}}
@media (prefers-reduced-motion:reduce){.combo-word{transform:none}.combo-word.show,.combo-word.out,.combo-end.out,.combo.warn b,.combo.warn .bar i,.combo-zone[data-tier="6"] .combo b{animation:none}.combo-word.out,.combo-end.out{opacity:0}}
/* Shop (0.3.0): a gold button in the wave break; its own screen over the frozen game, one row of cards that scrolls sideways if needed */
.shop-btn{pointer-events:auto;display:flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;margin-top:4px;border:0;border-radius:10px;background:var(--amber);color:var(--on-amber);font:700 14px/1 var(--ui);letter-spacing:.08em;text-transform:uppercase;cursor:pointer;box-shadow:0 3px 0 #8a5a10,0 6px 18px rgba(0,0,0,.45)}
.shop-btn svg{width:18px;height:18px}
.shop-btn.pulse{animation:shopIn .5s cubic-bezier(.2,1.6,.4,1)}
@keyframes shopIn{from{opacity:0;transform:scale(.6)}to{opacity:1;transform:scale(1)}}
.screen#shop{align-items:center;justify-content:center;padding-block:14px;background:rgba(10,11,9,.9)}
.shop-wrap{width:100%;max-width:1000px;display:grid;gap:10px;margin-block:auto}
.shop-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:4px 12px}
.shop-head .title{font-size:clamp(30px,5vw,44px)}
.shop-bal{display:flex;align-items:center;gap:8px;font:700 30px/1 var(--ui);font-variant-numeric:tabular-nums;color:var(--amber)}
.shop-bal .coin{width:22px;height:22px}
.shop-note{margin:0;width:100%;font-size:12px;color:var(--dim)}
.shop-cards{display:flex;gap:10px;overflow-x:auto;scroll-snap-type:x mandatory;padding-bottom:4px;touch-action:pan-x}
.shop-card{flex:0 0 150px;scroll-snap-align:start;display:grid;grid-template-rows:auto auto 1fr auto auto auto;gap:5px;padding:10px;border:1px solid var(--line);border-radius:12px;background:#12130f}
.shop-card img{width:88px;height:44px;justify-self:center;pointer-events:none}
.sc-name{font:400 14px/1.1 var(--display);color:var(--bone)}
.sc-fx,.sc-have{font:500 12px/1.3 var(--ui);color:var(--dim)}
.sc-price{font:700 18px/1 var(--ui);font-variant-numeric:tabular-nums;color:var(--amber)}
.sc-buy{min-height:44px;justify-content:center;padding:8px 10px;font-size:13px}
.shop-card.off .sc-buy{background:rgba(255,255,255,.06);color:var(--dim);border-color:var(--line)}
.shop-card.off .sc-price{color:var(--dim)}
.shop-close{justify-self:center;min-width:220px;min-height:44px;justify-content:center}
@media (min-width:900px){.shop-card{flex-basis:180px}}
@media (prefers-reduced-motion:reduce){.shop-btn.pulse{animation:none}}

/* Menu notice (0.3.0): breaking news strip with the Zomio head, hazard-tape top border, live dot and tilt-fall close */
.notice{position:relative;margin-left:8px;padding:11px 46px 9px 38px;border:1px solid var(--line);border-radius:10px;background:var(--panel);box-shadow:0 10px 24px rgba(0,0,0,.45)}
.notice::before{content:"";position:absolute;top:-1px;left:-1px;right:-1px;height:4px;border-radius:10px 10px 0 0;background:repeating-linear-gradient(-45deg,var(--amber) 0 7px,var(--void) 7px 14px)}
.notice-head{position:absolute;left:-12px;top:50%;margin-top:-20px;width:40px;height:40px;transform:rotate(-8deg);filter:drop-shadow(0 3px 0 rgba(0,0,0,.5));pointer-events:none}
.notice-body{display:grid;gap:4px;min-width:0}
.notice-tag{display:flex;align-items:center;gap:6px}
.notice-dot{width:8px;height:8px;border-radius:50%;background:var(--blood);box-shadow:0 0 6px var(--blood);flex:none;animation:noticeBlink 1s ease-in-out infinite}
.notice-badge{font:400 11px/1 var(--display);letter-spacing:.06em;text-transform:uppercase;color:var(--bone);background:var(--blood);padding:3px 7px;border-radius:4px}
.notice-text{margin:0;font:600 13px/1.32 var(--ui);color:var(--bone)}
.notice-x{position:absolute;top:4px;right:2px;width:44px;height:44px;border:0;border-radius:10px;background:none;color:var(--dim);display:grid;place-items:center;cursor:pointer;padding:0}
.notice-x:hover{color:var(--bone)}
.notice-x svg{width:18px;height:18px}
.notice.in{animation:noticeIn .5s cubic-bezier(.22,1.4,.36,1) both}
.notice.in .notice-head{animation:noticeNod .35s ease-in-out .15s 2,noticePeek 4s ease-in-out 1.2s infinite}
.notice.out{animation:noticeOut .35s ease-in forwards;pointer-events:none}
@keyframes noticeIn{0%{opacity:0;transform:translateY(-24px) scale(.96)}65%{opacity:1;transform:translateY(4px) scale(1.01)}100%{opacity:1;transform:none}}
@keyframes noticeNod{0%,100%{transform:rotate(-8deg)}50%{transform:rotate(8deg)}}
@keyframes noticePeek{0%,84%,100%{transform:rotate(-8deg)}92%{transform:rotate(4deg) translateY(-2px)}}
@keyframes noticeOut{to{opacity:0;transform:translateY(40px) rotate(6deg)}}
@keyframes noticeBlink{0%,100%{opacity:1}50%{opacity:.2}}
@media (max-height:540px){.notice{padding:9px 44px 8px 36px}.notice-text{font-size:12.5px;line-height:1.28}}
@media (prefers-reduced-motion:reduce){.notice.in,.notice.out,.notice.in .notice-head,.notice-dot{animation:none}}
