:root{
  --bg:#0d0a1c; --panel:#141026; --text:#ffffff; --g1:#006341; --g2:#41b880; --blue:#2e67b1;
  --red:#ee4455; --lime:#c5e86c; --orange:#fab780; --amber:#ffad45; --violet:#3c3159;
  --u:2px;  /* one game art pixel in CSS px; set from the canvas scale */
  --notch:polygon(var(--u) 0,calc(100% - var(--u)) 0,calc(100% - var(--u)) var(--u),100% var(--u),100% calc(100% - var(--u)),calc(100% - var(--u)) calc(100% - var(--u)),calc(100% - var(--u)) 100%,var(--u) 100%,var(--u) calc(100% - var(--u)),0 calc(100% - var(--u)),0 var(--u),var(--u) var(--u));
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;background:var(--bg);color:var(--text);overflow:hidden;overscroll-behavior:none;
  touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent;
  font-family:system-ui,-apple-system,"Segoe UI",Arial,sans-serif}
body{background:radial-gradient(ellipse at 50% 30%,#2d2447 0,#0d0a1c 70%)}
canvas{image-rendering:pixelated;image-rendering:crisp-edges;display:block}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---------- Layout: the canvas at a whole-number scale ---------- */
#wrap{position:fixed;inset:0;display:flex;align-items:center;justify-content:center;
  padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}
#cab{position:relative;display:flex;flex-direction:column;align-items:center}
#frame{position:relative;overflow:hidden;width:calc(var(--u) * 224);height:calc(var(--u) * 328)}
#game{position:absolute;inset:0;width:100%;height:100%;touch-action:none}
#marquee{display:none}
/* Desktop: an arcade-cabinet bezel, all CSS, no images. */
.cabinet #cab{padding:14px 18px 22px;border-radius:14px;
  background:linear-gradient(#2d2447,#1a1530);
  box-shadow:0 0 0 2px #0b0816,0 0 0 5px #4e426e,0 18px 50px rgba(0,0,0,.6),inset 0 2px 0 #635287}
.cabinet #marquee{display:flex;justify-content:center;align-items:center;height:30px;margin-bottom:10px;width:100%;
  background:#1a0f08;box-shadow:inset 0 0 0 2px #9a4a22,0 0 16px rgba(255,173,69,.35)}
.cabinet #frame{box-shadow:0 0 0 3px #0b0816,0 0 0 6px #9a4a22,0 0 24px rgba(255,173,69,.25)}

/* ---------- Touch controls ---------- */
#pad{display:none}
.touch #pad{display:flex;width:100%;flex:1;min-height:170px;justify-content:space-between;align-items:center;position:relative;
  padding:0 calc(var(--u) * 6)}
.touch #cab{height:100%;width:100%;justify-content:flex-start}
.touch #wrap{align-items:stretch}
.zone{touch-action:none}
body:not(.playing) #pad .stickzone,body:not(.playing) #pad .btns{visibility:hidden}
.stickzone{position:absolute;left:0;top:0;bottom:0;width:58%}
#stick,#knob{position:absolute;border-radius:50%;pointer-events:none}
/* At rest the pad shows where to put a thumb; play-testing found an invisible pad went unnoticed. */
#stick{left:calc(var(--u) * 14);top:50%;margin-top:calc(var(--u) * -26);opacity:.75;animation:padpulse 2.4s ease-in-out infinite}
#knob{left:calc(var(--u) * 31);top:50%;margin-top:calc(var(--u) * -9);opacity:.8}
#stick.on,#stick.on + #knob{margin:0;opacity:1;animation:none}
@keyframes padpulse{50%{box-shadow:inset 0 0 0 calc(var(--u) * 2) #8f8ab8}}
.reduce #stick{animation:none}
#stick{width:calc(var(--u) * 52);height:calc(var(--u) * 52);background:rgba(76,74,102,.5);box-shadow:inset 0 0 0 calc(var(--u) * 2) #7a76a0}
#knob{width:calc(var(--u) * 18);height:calc(var(--u) * 18);background:#8f8ab8;box-shadow:inset 0 calc(var(--u) * -2) 0 #3a3852,0 0 0 var(--u) #0b0816}
.padhint{position:absolute;left:calc(var(--u) * 29);top:calc(50% + var(--u) * 30);pointer-events:none}
#stick.on ~ .padhint{visibility:hidden}
.btns{position:absolute;right:calc(var(--u) * 6);top:50%;transform:translateY(-50%);display:flex;gap:calc(var(--u) * 6);align-items:flex-end}
.pbtn{width:calc(var(--u) * 40);height:calc(var(--u) * 40);border-radius:50%;border:0;display:grid;place-items:center;touch-action:none;
  color:#fff;box-shadow:0 0 0 var(--u) #0b0816,inset 0 calc(var(--u) * -3) 0 rgba(0,0,0,.35)}
.pbtn.a{background:#e07a26;margin-bottom:calc(var(--u) * 18)}
.pbtn.b{background:#46598a}
.pbtn.down{transform:translateY(var(--u));box-shadow:0 0 0 var(--u) #0b0816}
/* Landscape phones: pad left, buttons right, game in the middle */
.land #cab{flex-direction:row;justify-content:center}
.land #pad{position:absolute;inset:0;pointer-events:none;background:none}
.land .stickzone{pointer-events:auto;width:calc((100% - var(--u) * 224) / 2)}
.land .btns{pointer-events:auto}
.land .pbtn{width:calc(var(--u) * 34);height:calc(var(--u) * 34)}

/* ---------- Pixel frames ---------- */
.panel{background:rgba(20,16,38,.95);clip-path:var(--notch);
  box-shadow:inset 0 0 0 var(--u) var(--amber),inset 0 0 0 calc(var(--u) * 2) #0b0816;
  padding:calc(var(--u) * 7) calc(var(--u) * 7);width:calc(var(--u) * 208);max-height:calc(var(--u) * 320);overflow:auto;
  display:flex;flex-direction:column;align-items:center;text-align:center}
.btn{color:#fff;cursor:pointer;border:0;clip-path:var(--notch);background:var(--g1);
  box-shadow:inset 0 0 0 var(--u) var(--g2),inset 0 calc(var(--u) * -2) 0 #00402a;
  padding:calc(var(--u) * 4) calc(var(--u) * 5) calc(var(--u) * 5);display:inline-flex;align-items:center;justify-content:center;
  text-decoration:none;min-height:calc(var(--u) * 18)}
.btn:hover{background:#0a7a52}
.btn:active{transform:translateY(var(--u));box-shadow:inset 0 0 0 var(--u) var(--g2)}
.btn:focus-visible{outline:none;box-shadow:inset 0 0 0 var(--u) var(--lime),inset 0 calc(var(--u) * -2) 0 #00402a}
.btn.alt{background:#2d2447;box-shadow:inset 0 0 0 var(--u) #635287,inset 0 calc(var(--u) * -2) 0 #141026}
.btn.alt:hover{background:#3c3159}
.btn.alt:focus-visible{box-shadow:inset 0 0 0 var(--u) var(--lime),inset 0 calc(var(--u) * -2) 0 #141026}
.btn.cta{background:#b8551f;box-shadow:inset 0 0 0 var(--u) var(--orange),inset 0 calc(var(--u) * -2) 0 #6e3212;
  width:100%;min-height:calc(var(--u) * 22);margin-top:calc(var(--u) * 5)}
.btn.cta:hover{background:#cf6428}
.btn-col{display:flex;flex-direction:column;gap:calc(var(--u) * 3);width:calc(var(--u) * 150);margin-top:calc(var(--u) * 5)}
.btn-row{display:flex;gap:calc(var(--u) * 3);flex-wrap:wrap;justify-content:center;margin-top:calc(var(--u) * 4)}
.btn-row.small .btn{min-height:calc(var(--u) * 15);padding:calc(var(--u) * 3) calc(var(--u) * 4)}
.center{text-align:center;align-self:center}
.level{display:flex;flex-direction:column;align-items:center;margin-top:calc(var(--u) * 4)}
.level .btn-row{margin-top:calc(var(--u) * 2)}
.btn.lvl[aria-pressed="true"]{background:var(--g1);box-shadow:inset 0 0 0 var(--u) var(--lime),inset 0 calc(var(--u) * -2) 0 #00402a}
/* A friend's challenge adds two lines to the title; tighten the spacing to keep it unscrolled. */
.has-challenge .gap2,.has-challenge .lines,.has-challenge .level{margin-top:calc(var(--u) * 2)}
.has-challenge .btn-col{margin-top:calc(var(--u) * 3)}
.has-challenge .shop-link{margin-top:calc(var(--u) * 3)}
.stack{display:flex;flex-direction:column;align-items:center;gap:calc(var(--u) * 3);margin-top:calc(var(--u) * 3)}
.lines{display:flex;flex-direction:column;align-items:center;gap:calc(var(--u) * 2);margin-top:calc(var(--u) * 4)}
.lines[hidden]{display:none}
.gap1{margin-top:calc(var(--u) * 2)}
.gap2{margin-top:calc(var(--u) * 4)}
.logo-chip{display:inline-flex;background:#fff;clip-path:var(--notch);padding:calc(var(--u) * 2) calc(var(--u) * 3)}
.logo-chip img{height:calc(var(--u) * 10);display:block}
canvas.sprite{margin-top:calc(var(--u) * 3)}
#end-grid{margin-top:calc(var(--u) * 4)}
#scr-end .panel{width:calc(var(--u) * 216);padding:calc(var(--u) * 5) calc(var(--u) * 4)}
#scr-end .btn.cta{margin-top:calc(var(--u) * 3)}
#scr-end .btn-row{margin-top:calc(var(--u) * 3)}
.shop-link{margin-top:calc(var(--u) * 5);text-decoration:none;padding:calc(var(--u) * 2)}
.shop-link:focus-visible{outline:var(--u) solid var(--lime)}

/* ---------- HUD buttons (over the canvas HUD, top right) ---------- */
#hudbtns{position:absolute;top:calc(var(--u) * 3);right:calc(var(--u) * 3);display:flex;gap:calc(var(--u) * 2);z-index:5}
.hbtn{width:calc(var(--u) * 15);height:calc(var(--u) * 15);display:grid;place-items:center;border:0;cursor:pointer;clip-path:var(--notch);
  background:rgba(20,16,38,.9);box-shadow:inset 0 0 0 var(--u) #635287}
.hbtn:hover,.hbtn:focus-visible{outline:none;box-shadow:inset 0 0 0 var(--u) var(--lime)}
.hbtn[hidden]{display:none}

/* ---------- Screens ---------- */
.screen{position:absolute;inset:0;display:none;align-items:center;justify-content:center;z-index:4}
.screen.show{display:flex}
.screen.dim{background:rgba(8,6,18,.6)}
.screen.show .panel{animation:pop .24s steps(4) both}
@keyframes pop{from{transform:translateY(calc(var(--u) * 6))}to{transform:none}}
@media (prefers-reduced-motion:reduce){.screen.show .panel{animation:none}}
.reduce .screen.show .panel{animation:none}
.dimtext{opacity:.85}
#toast{position:absolute;left:50%;bottom:calc(var(--u) * 58);transform:translate(-50%,var(--u));opacity:0;
  padding:calc(var(--u) * 3) calc(var(--u) * 4);background:var(--panel);clip-path:var(--notch);
  box-shadow:inset 0 0 0 var(--u) var(--lime);transition:opacity .2s,transform .2s;pointer-events:none;z-index:9;
  display:flex;flex-direction:column;align-items:center;gap:calc(var(--u) * 2)}
#toast.show{opacity:1;transform:translate(-50%,0)}
.noscript{padding:24px;color:#fff}
