/* ============ HOUSE OF FARTS! — 8-bit arcade chrome ============ */
:root{
  --navy:#0d0b2a; --ink:#060518;
  --pink:#ff2e88; --cyan:#00e5ff; --yellow:#ffd400; --purple:#7c4dff;
  --white:#f4f1ff; --green:#39ff6a; --red:#ff3b3b;
  --px:'Press Start 2P',monospace; --vt:'VT323',monospace;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-user-select:none;user-select:none}
html,body{width:100%;height:100%;overflow:hidden;background:var(--ink)}
body{font-family:var(--px);color:var(--white)}
.hidden{display:none !important}

#game-canvas{position:fixed;inset:0;width:100%;height:100%;display:block}

/* CRT */
.scanlines{position:fixed;inset:0;pointer-events:none;z-index:60;
  background:repeating-linear-gradient(0deg,rgba(0,0,0,.20) 0 1px,transparent 1px 3px)}
.crt-vignette{position:fixed;inset:0;pointer-events:none;z-index:61;
  background:radial-gradient(ellipse at center,transparent 55%,rgba(2,0,20,.55) 100%)}
#dmg-vignette{position:fixed;inset:0;pointer-events:none;z-index:59;opacity:0;transition:opacity .12s;
  background:radial-gradient(ellipse at center,transparent 40%,rgba(255,20,40,.55) 100%)}

/* ============ screens ============ */
.screen{position:fixed;inset:0;z-index:70;display:none;align-items:center;justify-content:center;
  flex-direction:column;background:radial-gradient(ellipse at 50% 30%,#1b1650 0%,var(--navy) 55%,var(--ink) 100%)}
.screen.active{display:flex}
#screen-pause,#screen-lock{background:rgba(6,5,24,.82)}
#screen-countdown{background:transparent}

.title-wrap{text-align:center;animation:floaty 3s ease-in-out infinite}
@keyframes floaty{0%,100%{transform:translateY(0)}50%{transform:translateY(-8px)}}
.game-logo{font-size:clamp(28px,6.2vw,72px);color:var(--yellow);letter-spacing:4px;
  text-shadow:4px 4px 0 var(--pink),8px 8px 0 var(--purple),12px 12px 0 rgba(0,0,0,.45)}
.game-logo .bang{color:var(--pink);text-shadow:4px 4px 0 var(--yellow),8px 8px 0 var(--purple),12px 12px 0 rgba(0,0,0,.45)}
.tagline{margin-top:18px;font-size:clamp(9px,1.4vw,14px);color:var(--cyan);letter-spacing:6px}
.press-start{margin-top:56px;font-size:clamp(12px,2vw,20px);color:var(--white)}
.press-start.small{font-size:11px;margin-top:26px}
.blink{animation:blink 1s steps(2,start) infinite}
@keyframes blink{50%{opacity:0}}
.hi-score{margin-top:34px;font-size:11px;color:var(--green)}
.foot-note{position:fixed;bottom:22px;left:0;right:0;text-align:center;font-size:8px;color:#6d67b8;line-height:1.8}

/* panels & cards */
.panel{background:#14104a;border:4px solid var(--cyan);box-shadow:0 0 0 4px #04103a,10px 10px 0 rgba(0,0,0,.5);
  padding:34px 44px;text-align:center;max-width:92vw}
.panel.wide{max-width:min(1060px,94vw)}
.panel-title{font-size:clamp(13px,2vw,20px);color:var(--yellow);text-shadow:3px 3px 0 var(--pink);margin-bottom:26px;letter-spacing:2px}
.card-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;justify-items:center}
.card-grid.arenas{grid-template-columns:repeat(3,1fr)}
.card{background:#0c0a33;border:4px solid #3d3590;padding:12px 10px;cursor:pointer;width:190px;
  transition:transform .07s}
.card:hover{transform:translateY(-3px)}
.card.selected{border-color:var(--yellow);background:#1c1660;box-shadow:0 0 0 3px var(--pink),0 0 22px rgba(255,212,0,.45);
  transform:translateY(-4px)}
.card canvas{width:96px;height:96px;image-rendering:pixelated;display:block;margin:0 auto 10px;
  border:3px solid #000;background:#222}
.card-name{font-size:11px;color:var(--white);margin-bottom:8px;line-height:1.5}
.card-title{font-family:var(--vt);font-size:17px;color:#9f97e8;line-height:1.15;min-height:38px}
.hint{margin-top:24px;font-size:8px;color:#6d67b8;letter-spacing:1px;line-height:1.9}
.arena-preview{width:100%;height:96px;border:3px solid #000;margin-bottom:10px;image-rendering:pixelated;
  display:flex;align-items:center;justify-content:center;font-size:44px;color:var(--yellow)}
.prev-egg{background:linear-gradient(180deg,#e8dcc0 0 30%,#b09b6d 30% 34%,#25427e 34% 70%,#c8b184 70%)}
.prev-crimson{background:linear-gradient(180deg,#5e0f18 0 30%,#8c1a24 30% 34%,#3a0a10 34% 70%,#6e1420 70%)}
.prev-random{background:#0c0a33;text-shadow:3px 3px 0 var(--pink)}
.prev-wars{background:linear-gradient(90deg,#5e0f18 0 50%,#0c2a5e 50% 100%);text-shadow:3px 3px 0 #000}
.card-grid.modes{grid-template-columns:repeat(3,1fr)}

/* countdown */
.count-wrap{text-align:center}
#count-arena{font-size:clamp(18px,3.4vw,34px);color:var(--cyan);text-shadow:3px 3px 0 var(--purple);letter-spacing:3px}
#count-homeaway{margin-top:14px;font-size:12px;color:var(--yellow);letter-spacing:4px}
#count-num{margin-top:34px;font-size:clamp(60px,14vw,150px);color:var(--white);
  text-shadow:6px 6px 0 var(--pink),12px 12px 0 rgba(0,0,0,.4)}
#count-num.go{color:var(--green)}
#count-teams{display:flex;align-items:flex-start;justify-content:center;gap:26px;margin-top:22px}
.ct-side{min-width:220px;text-align:left}
.ct-side .ct-title{font-size:13px;margin-bottom:10px;letter-spacing:3px}
.ct-side.red .ct-title{color:#ff6b6b}
.ct-side.blue .ct-title{color:#6ba8ff}
.ct-side.red{border-top:4px solid #ff3b3b}
.ct-side.blue{border-top:4px solid #3b8bff}
.ct-side div.line{font-size:9px;line-height:2.1;color:var(--white);text-shadow:2px 2px 0 #000}
.ct-side div.line.me{color:var(--yellow)}
.ct-vs{font-size:18px;color:var(--pink);padding-top:18px}

/* pause */
.controls-list{font-family:var(--vt);font-size:22px;color:#c9c2ff;line-height:1.7;margin-bottom:26px}
.px-btn{font-family:var(--px);font-size:13px;background:var(--pink);color:var(--ink);border:0;
  padding:14px 26px;margin:6px;cursor:pointer;box-shadow:0 5px 0 #8a0f47}
.px-btn:active{transform:translateY(4px);box-shadow:0 1px 0 #8a0f47}
.px-btn.dim{background:#3d3590;color:var(--white);box-shadow:0 5px 0 #1c1660}
.lock-msg{font-size:clamp(12px,2vw,18px);color:var(--yellow)}

/* end screen */
#end-subtitle{font-family:var(--vt);font-size:22px;color:var(--cyan);margin:-14px 0 18px}
#end-versus{display:flex;align-items:center;justify-content:center;gap:26px;margin-bottom:20px}
.end-side canvas{width:96px;height:96px;image-rendering:pixelated;border:3px solid #000;background:#222}
.end-side div{font-size:9px;margin-top:8px;color:var(--white);max-width:120px;line-height:1.5}
.end-vs{font-size:20px;color:var(--pink)}
#end-rows{display:inline-block;text-align:left;font-size:11px;line-height:2.1;color:var(--white)}
#end-rows .pts{color:var(--yellow)}
#end-title{font-size:clamp(16px,3vw,28px)}

/* ============ HUD ============ */
#hud{position:fixed;inset:0;pointer-events:none;z-index:40}
#hud-top{position:absolute;top:14px;left:0;right:0;display:flex;justify-content:center;gap:40px;align-items:flex-start}
.hud-side{min-width:220px}
.hud-side.left{text-align:right}
.hud-name{font-size:10px;color:var(--cyan);margin-bottom:6px;text-shadow:2px 2px 0 #000}
.hud-name.foe{color:var(--pink)}
.hud-score{font-size:18px;color:var(--white);text-shadow:2px 2px 0 #000}
.hud-score .ko{font-size:9px;color:var(--yellow);margin:0 8px}
#timer{font-size:22px;color:var(--white);text-shadow:3px 3px 0 #000;background:rgba(6,5,24,.6);
  border:3px solid #3d3590;padding:8px 16px}
#timer.low{color:var(--red);border-color:var(--red);animation:blink .5s steps(2,start) infinite}

#leader-line{position:absolute;top:64px;left:0;right:0;text-align:center;font-size:9px;color:var(--yellow);
  text-shadow:2px 2px 0 #000;letter-spacing:1px}
#team-chips{position:absolute;top:64px;left:0;right:0;display:flex;justify-content:center;gap:14px}
.chip{font-size:11px;padding:6px 14px;border:3px solid #000;text-shadow:2px 2px 0 #000}
.chip.red{background:#5e0f18;color:#ffb3b3;border-color:#ff3b3b}
.chip.blue{background:#0c2a5e;color:#b3d4ff;border-color:#3b8bff}
#feed{position:absolute;top:96px;right:18px;text-align:right;font-size:9px;line-height:2}
#feed .feed-line{background:rgba(6,5,24,.65);padding:5px 9px;margin-bottom:5px;border-right:4px solid var(--purple);
  color:var(--white);transition:opacity .4s}
#feed .feed-line.you{border-right-color:var(--cyan)}
#feed .feed-line.foe{border-right-color:var(--pink)}

#crosshair{position:absolute;left:50%;top:50%;width:0;height:0}
#crosshair span{position:absolute;background:var(--white);box-shadow:1px 1px 0 #000}
#crosshair span:nth-child(1){left:-1px;top:-12px;width:2px;height:7px}
#crosshair span:nth-child(2){left:-1px;top:5px;width:2px;height:7px}
#crosshair span:nth-child(3){left:-12px;top:-1px;width:7px;height:2px}
#crosshair span:nth-child(4){left:5px;top:-1px;width:7px;height:2px}
#crosshair i{position:absolute;left:-1px;top:-1px;width:2px;height:2px;background:var(--yellow)}
#hitmark{position:absolute;left:50%;top:50%;width:0;height:0;opacity:0}
#hitmark::before,#hitmark::after{content:"";position:absolute;left:-10px;top:-1px;width:20px;height:3px;background:var(--yellow);box-shadow:1px 1px 0 #000}
#hitmark::before{transform:rotate(45deg)}
#hitmark::after{transform:rotate(-45deg)}
#hitmark.pop{animation:hitpop .18s steps(3)}
@keyframes hitpop{0%{opacity:1;transform:scale(1.5)}100%{opacity:0;transform:scale(.8)}}

#announce{position:absolute;left:0;right:0;top:33%;text-align:center;font-size:clamp(18px,3.4vw,34px);
  color:var(--yellow);text-shadow:4px 4px 0 var(--pink),7px 7px 0 rgba(0,0,0,.5);opacity:0;letter-spacing:3px}
#announce.show{animation:annin 1.4s steps(12) forwards}
@keyframes annin{0%{opacity:0;transform:scale(2.2)}12%{opacity:1;transform:scale(1)}80%{opacity:1}100%{opacity:0}}
#sub-announce{position:absolute;left:0;right:0;top:42%;text-align:center;font-family:var(--vt);font-size:24px;
  color:var(--cyan);opacity:0;text-shadow:2px 2px 0 #000}
#sub-announce.show{animation:annin 1.6s steps(12) forwards}

#hud-bottom{position:absolute;left:0;right:0;bottom:16px;display:flex;justify-content:space-between;
  align-items:flex-end;padding:0 22px}
#hud-player{display:flex;align-items:flex-end;gap:12px}
#portrait-you{width:64px;height:64px;image-rendering:pixelated;border:3px solid var(--cyan);background:#14104a}
#hp-bar{width:210px;height:20px;border:3px solid #000;background:#30102a;box-shadow:3px 3px 0 rgba(0,0,0,.5)}
#hp-fill{height:100%;width:100%;background:var(--green);transition:width .15s steps(8)}
#hp-fill.mid{background:var(--yellow)}
#hp-fill.low{background:var(--red)}
#hp-label{font-size:8px;color:#9f97e8;margin-top:5px}
#hud-ammo{text-align:right}
#blaster-name{font-size:8px;color:#9f97e8;margin-bottom:6px}
#ammo{font-size:15px;letter-spacing:3px;color:var(--yellow);text-shadow:2px 2px 0 #000}
#ammo .empty{color:#453e80}
#reload-hint{font-size:9px;color:var(--red);margin-top:6px;animation:blink .4s steps(2,start) infinite}

#float-layer{position:fixed;inset:0;pointer-events:none;z-index:45;overflow:hidden}
.float-score{position:absolute;font-family:var(--px);font-size:13px;color:var(--yellow);
  text-shadow:2px 2px 0 #000;transform:translate(-50%,-50%);white-space:nowrap}
.float-score.big{font-size:18px;color:var(--pink)}
.float-score span{color:var(--white);font-size:9px;display:block;text-align:center;margin-top:4px}

body.lowhp #hud-player #hp-bar{animation:blink .6s steps(2,start) infinite}

/* gun level pips */
#gun-pips{margin:6px 0 2px;display:flex;gap:3px;justify-content:flex-end}
.pip{width:12px;height:8px;background:#2a2560;border:1px solid #000}
.pip.on{background:var(--cyan)}
.pip.ten{border-color:var(--yellow)}
.pip.ten.on{background:var(--yellow);box-shadow:0 0 6px var(--yellow)}

/* scoreboard */
#scoreboard{position:fixed;inset:0;z-index:55;display:flex;align-items:center;justify-content:center;
  background:rgba(6,5,24,.7)}
.sb-panel{background:#14104a;border:4px solid var(--yellow);box-shadow:8px 8px 0 rgba(0,0,0,.5);
  padding:22px 30px;min-width:560px}
.sb-title{font-size:15px;color:var(--yellow);text-shadow:3px 3px 0 var(--pink);margin-bottom:16px;text-align:center}
.sb-row{display:grid;grid-template-columns:52px 1fr 74px 62px 80px;gap:10px;font-size:10px;
  padding:7px 8px;color:var(--white);line-height:1.2}
.sb-row:nth-child(odd){background:rgba(255,255,255,.04)}
.sb-row.me{background:rgba(0,229,255,.14);outline:2px solid var(--cyan)}
.sb-row.sb-team{margin-top:6px;border-left:4px solid}
.sb-row.sb-team.red{border-color:#ff3b3b;background:rgba(255,59,59,.10)}
.sb-row.sb-team.blue{border-color:#3b8bff;background:rgba(59,139,255,.10)}
.sb-row .sb-name{color:var(--cyan);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sb-row.me .sb-name{color:var(--white)}
.sb-row .sb-score{color:var(--yellow);text-align:right}

/* end screen standings */
#end-rows{display:inline-block;text-align:left;font-size:10px;line-height:1.9;color:var(--white);
  max-height:34vh;overflow:hidden}
#end-rows .er{display:grid;grid-template-columns:46px 1fr 60px 54px 74px;gap:10px;padding:2px 6px}
#end-rows .er.me{background:rgba(0,229,255,.14);outline:2px solid var(--cyan)}
#end-rows .er.team-head{margin-top:8px;border-left:4px solid;font-size:11px}
#end-rows .er.team-head.red{border-color:#ff3b3b;color:#ffb3b3;background:rgba(255,59,59,.10)}
#end-rows .er.team-head.blue{border-color:#3b8bff;color:#b3d4ff;background:rgba(59,139,255,.10)}
#end-rows .er .pts{color:var(--yellow);text-align:right}
.card-grid.modes{grid-template-columns:repeat(2,1fr)}
.bot-row{margin-top:14px;display:flex;align-items:center;justify-content:center;gap:10px}
.bot-note{color:#6d67b8;font-size:8px}
.px-btn.mini{padding:6px 10px;font-size:11px;box-shadow:0 3px 0 #8a0f47}
#invite-code{font-family:var(--px);font-size:11px;background:#0c0a33;color:var(--yellow);
  border:3px solid #3d3590;padding:8px 10px;width:190px;text-transform:uppercase;letter-spacing:2px}
#invite-code:focus{outline:none;border-color:var(--cyan)}
#invite-code::placeholder{color:#453e80;font-size:8px}

/* bots stepper (offline arena screen) */
.bot-stepper{margin-top:22px;display:flex;align-items:center;justify-content:center;gap:18px}
.bot-stepper span{font-size:13px;color:var(--yellow);text-shadow:2px 2px 0 #000;min-width:110px;text-align:center}
.px-btn.step{padding:10px 16px;font-size:12px;margin:0}

/* ============ touch controls (touch devices only) ============ */
#touch-layer{position:fixed;inset:0;z-index:65;pointer-events:none;display:none}
#touch-layer.visible{display:block}
#touch-layer>*{pointer-events:auto;-webkit-user-select:none;user-select:none;touch-action:none}
.t-stick{position:absolute;bottom:110px;width:120px;height:120px;border-radius:50%;
  background:rgba(20,16,74,.25);
  display:flex;align-items:center;justify-content:center;opacity:.55}
.t-stick-l{left:26px;border:3px solid rgba(0,229,255,.5)}
.t-stick-r{right:26px;border:3px solid rgba(255,46,136,.55)}
.t-stick-r .t-knob{background:rgba(255,46,136,.35);border:2px solid rgba(255,46,136,.65)}
.t-label{position:absolute;top:-22px;left:0;right:0;text-align:center;font-family:var(--px);
  font-size:8px;color:rgba(255,255,255,.75);letter-spacing:2px;pointer-events:none}
.t-knob{width:52px;height:52px;border-radius:50%;background:rgba(0,229,255,.35);
  border:2px solid rgba(0,229,255,.65);pointer-events:none}
.t-btn{position:absolute;font-family:var(--px);color:var(--white);cursor:pointer;
  border:3px solid rgba(255,46,136,.55);background:rgba(20,16,74,.35);opacity:.6;
  display:flex;align-items:center;justify-content:center}
.t-btn:active{background:rgba(255,46,136,.4)}
.t-jump{right:52px;bottom:252px;width:64px;height:64px;border-radius:50%;font-size:9px}
.t-reload{right:162px;bottom:120px;width:56px;height:56px;border-radius:50%;font-size:10px}
.t-pause{right:14px;top:64px;width:44px;height:44px;font-size:9px;border-radius:6px}

/* ============ room code + bot toggle ============ */
/* The code is the one thing a player has to read off the screen and retype
   somewhere else, so it gets the loudest treatment on the lobby panel. */
.room-code{margin-top:18px;font-size:13px;color:var(--green);letter-spacing:2px;
  text-shadow:2px 2px 0 #000;border:2px solid var(--green);padding:12px 16px;
  background:rgba(57,255,106,.08);animation:code-pulse 1.6s ease-in-out infinite}
@keyframes code-pulse{0%,100%{opacity:1}50%{opacity:.62}}
/* OFF reads as inert; ON keeps the default yellow. */
.is-off{color:#6d67b8 !important;text-shadow:none !important}
