@font-face{font-family:'Silkscreen';src:url('/fonts/silkscreen.woff2') format('woff2');font-display:swap;}
@font-face{font-family:'VT323';src:url('/fonts/vt323.woff2') format('woff2');font-display:swap;}
:root{
  --bg:#0b0f0c; --panel:#11170f; --panel2:#0e1710; --ink:#c8ffd0; --dim:#5e7a63;
  --danger:#ff4d4d; --accent:#7CFC00; --warn:#ffb347; --infest:#ff2e6e; --blue:#39a0ff;
  --gold:#ffcf5d; --line:#1d3a22;
  --font-display:'Silkscreen',ui-monospace,monospace;
  --font-body:'VT323','Courier New',ui-monospace,monospace;
  /* spacing + depth tokens */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --rad:6px; --rad-lg:10px;
  --sh-1:0 1px 3px #000a; --sh-2:0 4px 14px #000c; --glow-accent:0 0 12px #7CFC0033;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent;}
html,body{margin:0;height:100%;background:#000;color:var(--ink);
  font-family:var(--font-body);font-size:17px;overscroll-behavior:none;user-select:none;}
.screen h2,#namemodal h1,#death h1,#who,#cName,.nav span{font-family:var(--font-display);}
.screen h2{font-size:14px;} #who{font-size:13px;}
#app{position:fixed;inset:0;max-width:480px;margin:0 auto;overflow:hidden;background:var(--bg);}

/* map */
#map{position:absolute;inset:0;z-index:0;background:#12211a;}
.leaflet-container{background:#12211a!important;}
/* brighten the dark CARTO tiles so roads + ground read clearly */
.leaflet-tile{filter:brightness(1.85) contrast(1.18) saturate(1.2);}
.crt{position:absolute;inset:0;pointer-events:none;z-index:1;
  background:repeating-linear-gradient(rgba(0,0,0,0) 0 2px,rgba(0,0,0,.07) 2px 3px);mix-blend-mode:multiply;}
.vig{position:absolute;inset:0;pointer-events:none;z-index:1;box-shadow:inset 0 0 90px 8px rgba(0,0,0,.4);}
/* Night atmosphere: a blue vignette over the basemap (sits below the marker pane, z-index 600,
   so zombies/forts stay crisp). Opacity is driven by the local light level in map.js. */
#nightOverlay{position:absolute;inset:0;pointer-events:none;z-index:450;opacity:0;
  transition:opacity 2.5s linear;
  background:radial-gradient(ellipse at center,rgba(8,14,40,.12) 28%,rgba(4,8,26,.92) 100%);}
#phaseChip{font-size:13px;line-height:1;padding:3px 7px;border-radius:10px;
  background:rgba(0,0,0,.35);border:1px solid rgba(255,255,255,.12);text-transform:capitalize;
  letter-spacing:.5px;white-space:nowrap;}

/* markers */
.mk{display:flex;flex-direction:column;align-items:center;font-size:10px;text-shadow:0 1px 2px #000;}
.mk .ic{font-size:24px;line-height:1;filter:drop-shadow(0 2px 2px #000);}
.mk .lbl{font-size:8px;color:var(--dim);letter-spacing:.5px;margin-top:1px;}
.you-dot{width:18px;height:18px;border-radius:50%;background:var(--accent);
  border:2px solid #061;box-shadow:0 0 12px var(--accent);}
.blip{display:flex;flex-direction:column;align-items:center;}
.blip .d{width:11px;height:11px;border-radius:50%;background:var(--blue);
  border:1px solid #0a2540;box-shadow:0 0 8px var(--blue);}
.blip .n{font-size:8px;color:#6fb6ff;}

/* top bar */
#topbar{position:absolute;top:0;left:0;right:0;z-index:5;display:flex;justify-content:space-between;
  align-items:flex-start;padding:10px 12px;background:linear-gradient(#000c,transparent);}
#who{font-weight:bold;letter-spacing:1px;text-shadow:0 0 6px #0f0a;}
#who small{display:block;color:var(--dim);font-weight:normal;letter-spacing:0;font-size:10px;}
#safety{text-align:right;font-size:10px;color:var(--dim);}
#safety b{color:var(--accent);}
.qbtn{position:relative;font-size:20px;cursor:pointer;filter:drop-shadow(0 0 4px #0008);}
#qBadge{display:none;position:absolute;top:-4px;right:-6px;background:var(--danger);color:#fff;
  font-size:9px;font-weight:bold;min-width:14px;height:14px;line-height:14px;text-align:center;
  border-radius:7px;padding:0 3px;box-shadow:0 0 6px #ff4d4d88;}

/* infestation alert */
#alert{position:absolute;top:60px;left:12px;right:12px;z-index:5;display:none;
  border:1px solid var(--infest);background:#1a0a12dd;padding:7px 10px;font-size:11px;
  justify-content:space-between;align-items:center;box-shadow:0 0 14px #ff2e6e44;}
#alert.show{display:flex;animation:flick 3s infinite;}
@keyframes flick{0%,100%{opacity:1}50%{opacity:.72}}
#alert .go{border:1px solid var(--infest);color:var(--infest);padding:3px 8px;font-size:10px;}

/* HUD */
#hud{position:absolute;left:0;right:0;bottom:0;z-index:5;
  background:linear-gradient(transparent,#000 30%);padding:26px 12px 12px;}
.stats{display:flex;gap:10px;align-items:center;}
.radar{width:58px;height:58px;border-radius:50%;border:2px solid var(--line);position:relative;flex:0 0 auto;
  background:radial-gradient(circle,#0d1c11,#060c08);overflow:hidden;}
.radar::after{content:"";position:absolute;left:50%;top:50%;width:50%;height:2px;background:var(--accent);
  transform-origin:left center;animation:sweep 3s linear infinite;box-shadow:0 0 6px var(--accent);}
@keyframes sweep{to{transform:rotate(360deg)}}
.bars{flex:1;display:flex;flex-direction:column;gap:5px;}
.row{display:flex;align-items:center;gap:8px;font-size:10px;letter-spacing:.5px;}
.row .k{width:52px;color:var(--dim);}
.meter{flex:1;height:11px;background:#0c130d;border:1px solid var(--line);overflow:hidden;}
.meter i{display:block;height:100%;transition:width .3s;}
.hp i{background:linear-gradient(90deg,#ff4d4d,#ff8a3d);box-shadow:0 0 8px #ff4d4d88;}
.xp i{background:linear-gradient(90deg,#7CFC00,#39ffa0);box-shadow:0 0 8px #7CFC0088;}
.row .v{min-width:44px;text-align:right;color:var(--ink);}
.hpbtn{background:#0e1710;border:1px solid #ff8a8a;color:#ff8a8a;font-family:inherit;font-size:11px;
  padding:2px 7px;margin-left:6px;cursor:pointer;display:flex;align-items:center;gap:2px;}
.hpbtn:active{transform:scale(.94);}
.hpbtn[disabled]{opacity:.35;border-color:var(--line);color:var(--dim);cursor:not-allowed;}
.craftbtn{background:#0e1710;border:1px solid var(--accent);color:var(--accent);font-family:inherit;
  font-size:11px;padding:8px 10px;cursor:pointer;white-space:nowrap;}
.craftbtn:active{transform:scale(.96);}
.craftbtn[disabled]{opacity:.35;border-color:var(--line);color:var(--dim);cursor:not-allowed;}
.supplies{display:flex;gap:10px;font-size:10px;margin-top:2px;}
.supplies span{color:var(--ink);} .supplies b{color:var(--accent);}

.actions{display:flex;gap:8px;margin-top:10px;}
.btn{flex:1;text-align:center;padding:11px 0;border:1px solid #2b4a30;border-radius:var(--rad);
  background:linear-gradient(#13200f,#0c1409);box-shadow:inset 0 1px 0 #ffffff12,var(--sh-1);
  color:var(--ink);font-size:12px;letter-spacing:1px;cursor:pointer;
  transition:transform .06s,box-shadow .12s,filter .12s;}
.btn .ic{display:block;font-size:17px;margin-bottom:2px;}
.btn.primary{border-color:var(--accent);background:linear-gradient(#16290f,#0e1c0a);
  box-shadow:var(--glow-accent),inset 0 1px 0 #7cfc0022;color:var(--accent);}
.btn:active{transform:translateY(1px) scale(.985);box-shadow:inset 0 2px 6px #000a;}
.btn[disabled]{opacity:.4;}

.nav{display:flex;justify-content:space-around;margin-top:10px;border-top:1px solid #16231a;padding-top:7px;}
.nav span{font-size:9px;color:var(--dim);text-align:center;cursor:pointer;}
.nav span.on{color:var(--accent);}
.nav span b{display:block;font-size:16px;}

/* screens / modals */
.screen{position:absolute;inset:0;z-index:10;background:#070b08ee;backdrop-filter:blur(2px);
  display:none;flex-direction:column;padding:14px;overflow-y:auto;}
.screen.show{display:flex;}
.screen h2{margin:6px 0 12px;letter-spacing:2px;color:var(--accent);font-size:16px;}
.screen .close{position:absolute;top:12px;right:14px;color:var(--dim);font-size:22px;cursor:pointer;}

/* combat */
#combat .enemy{display:flex;flex-direction:column;align-items:center;margin-top:6px;}
#combat .esprite{font-size:56px;filter:drop-shadow(0 3px 4px #000);height:96px;display:flex;align-items:center;justify-content:center;}
#combat .esprite img{height:96px;image-rendering:pixelated;filter:drop-shadow(0 3px 6px #000);}
.cell .s img{width:42px;height:42px;image-rendering:pixelated;}
#combat .tier{color:var(--warn);font-size:10px;letter-spacing:1px;}
/* hp bars */
.cbar{width:100%;max-width:340px;display:flex;align-items:center;gap:8px;font-size:10px;margin:5px 0;}
.cbar .lab{width:60px;color:var(--dim);letter-spacing:1px;}
.cbar .m{flex:1;height:13px;background:#0c130d;border:1px solid var(--line);overflow:hidden;}
.cbar .m i{display:block;height:100%;transition:width .35s;}
.cbar.enemy .m i{width:100%;background:linear-gradient(90deg,#ff2e6e,#ff8a3d);box-shadow:0 0 8px #ff2e6e66;}
.cbar.you .m i{width:100%;background:linear-gradient(90deg,#ff4d4d,#ff8a3d);}
/* enemy telegraph */
#combat .tell{font-size:13px;letter-spacing:1px;margin:6px 0;min-height:20px;padding:4px 12px;border:1px solid var(--line);}
#combat .tell.attack{color:var(--danger);border-color:var(--danger);box-shadow:0 0 12px #ff4d4d44;animation:pulsehit .8s infinite;}
#combat .tell.defend{color:var(--blue);border-color:var(--blue);}
@keyframes pulsehit{0%,100%{transform:scale(1)}50%{transform:scale(1.05)}}
#combat .log{font-size:11px;color:var(--ink);min-height:44px;margin:6px 0;white-space:pre-line;text-align:center;}
/* round timer */
#combat .rtimer{width:100%;max-width:340px;height:4px;background:#0c130d;border:1px solid var(--line);overflow:hidden;margin-top:2px;}
#combat .rtimer i{display:block;height:100%;width:100%;background:var(--accent);box-shadow:0 0 6px var(--accent);}
.cbtns{display:flex;gap:8px;margin-top:10px;} .cbtns .btn{font-size:13px;padding:13px 0;}

/* codex grid */
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;}
.cell{border:1px solid var(--line);background:var(--panel2);padding:8px 4px;text-align:center;border-radius:4px;}
.cell .s{font-size:34px;line-height:1;} .cell.locked .s{filter:grayscale(1) brightness(.25);}
.cell .nm{font-size:9px;color:var(--ink);margin-top:3px;} .cell.locked .nm{color:var(--dim);}
.cell .t{font-size:8px;color:var(--warn);}
.cell.insquad{border-color:var(--accent);box-shadow:0 0 8px #7CFC0044;}
.sqbtn{margin-top:5px;width:100%;background:#0e1710;border:1px solid #2b4a30;color:var(--dim);
  font-family:inherit;font-size:8px;padding:4px 2px;cursor:pointer;letter-spacing:.5px;}
.sqbtn.on{border-color:var(--accent);color:var(--accent);}
.sqbtn:active{transform:scale(.96);}

/* safehouse */
.modules{display:flex;flex-direction:column;gap:8px;}
.mod{display:flex;justify-content:space-between;align-items:center;border:1px solid var(--line);
  background:var(--panel2);padding:10px;border-radius:4px;}
.mod .lv{color:var(--accent);font-size:11px;}
.upbtn{background:#0e1710;border:1px solid var(--accent);color:var(--accent);
  font-family:inherit;font-size:11px;padding:8px 10px;white-space:nowrap;cursor:pointer;}
.upbtn:active{transform:scale(.96);}
.upbtn[disabled]{opacity:.35;border-color:var(--line);color:var(--dim);cursor:not-allowed;}

/* raid */
#raid .boss{font-size:64px;text-align:center;margin-top:4px;filter:drop-shadow(0 0 14px #ff2e6e88);}
#raid .boss img{display:inline-block;}
#raid .bosshp{height:18px;background:#1a0a12;border:1px solid var(--infest);margin:8px 0 2px;overflow:hidden;}
#raid .bosshp i{display:block;height:100%;background:linear-gradient(90deg,#ff2e6e,#ff8a3d);transition:width .25s;
  box-shadow:0 0 10px #ff2e6e66;}
#raid .parts{font-size:10px;color:var(--dim);}
#raid .parts .p{display:flex;justify-content:space-between;padding:3px 0;border-bottom:1px solid #161c18;}
#raid .parts .p.downed{opacity:.5;color:var(--danger);}
/* phase telegraph banner */
.rphase{text-align:center;font-size:14px;letter-spacing:1px;padding:8px;margin:8px 0;
  border:1px solid var(--line);color:var(--ink);min-height:20px;}
.rphase.danger{color:var(--danger);border-color:var(--danger);box-shadow:0 0 16px #ff4d4d44;
  animation:pulsehit .6s infinite;}
.rphase.strike{color:var(--accent);border-color:var(--accent);box-shadow:0 0 16px #7CFC0044;}
/* big context action */
.rbig{font-size:18px;padding:18px 0;}

/* name modal */
#namemodal{position:absolute;inset:0;z-index:20;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:14px;padding:24px;text-align:center;
  background:linear-gradient(#060a07cc,#060a07f2),url(/assets/title.png) center/cover no-repeat;}
#namemodal h1{color:var(--accent);letter-spacing:3px;margin:0;font-size:28px;text-shadow:0 0 12px #7CFC0066;}
#namemodal p{color:var(--dim);font-size:12px;margin:0;}
#namemodal input{background:#0c130d;border:1px solid var(--accent);color:var(--ink);padding:12px;
  font-family:inherit;font-size:16px;text-align:center;width:100%;max-width:260px;}
#namemodal .btn{max-width:260px;width:100%;}
.toast{position:absolute;left:50%;top:14%;transform:translateX(-50%);z-index:30;
  background:#0e1710ee;border:1px solid var(--accent);color:var(--ink);padding:8px 14px;font-size:12px;
  border-radius:4px;opacity:0;transition:opacity .3s;pointer-events:none;max-width:90%;text-align:center;}
.toast.show{opacity:1;}
/* death transition */
#death{position:absolute;inset:0;z-index:40;display:none;flex-direction:column;
  align-items:center;justify-content:center;gap:14px;padding:28px;text-align:center;
  background:linear-gradient(#1a0a0acc,#0a0606f4),url(/assets/title.png) center/cover no-repeat;
  animation:deathin 1.2s ease;}
#death.show{display:flex;}
@keyframes deathin{from{opacity:0;filter:grayscale(1) brightness(.3)}to{opacity:1}}
#death .skull{font-size:72px;filter:drop-shadow(0 0 16px #ff2e6e88);animation:lurch 2.4s infinite ease-in-out;}
@keyframes lurch{0%,100%{transform:rotate(-4deg)}50%{transform:rotate(4deg) translateY(-3px)}}
#death h1{margin:0;color:var(--infest);letter-spacing:4px;font-size:26px;
  text-shadow:0 0 14px #ff2e6e88;}
#death p{color:#caa;font-size:13px;line-height:1.6;max-width:320px;margin:0;}
#death #epitaph{color:var(--dim);font-size:11px;letter-spacing:1px;}
#death .btn{max-width:300px;width:100%;border-color:var(--infest);color:var(--infest);
  box-shadow:0 0 14px #ff2e6e33;margin-top:6px;}
/* rarity colors (loot system) */
.rar-common{border-color:#3a4a40;}
.rar-uncommon{border-color:#2c6b34;color:#7CFC00;}
.rar-rare{border-color:#1d4a78;color:#39a0ff;box-shadow:0 0 8px #39a0ff33;}
.rar-epic{border-color:#5a2c8a;color:#b15dff;box-shadow:0 0 10px #b15dff44;}
.rar-legendary{border-color:#8a5a1d;color:#ff9d2e;box-shadow:0 0 14px #ff9d2e55;animation:legpulse 1.8s ease-in-out infinite;}
@keyframes legpulse{50%{box-shadow:0 0 22px #ff9d2eaa;}}
.rar-rare b,.rar-epic b,.rar-legendary b,.rar-uncommon b{color:inherit;}
.eqbadge{font-size:9px;color:var(--accent);border:1px solid var(--accent);padding:4px 8px;white-space:nowrap;}
.gbtns{display:flex;gap:6px;align-items:center;}
.salvbtn{background:#1a120a;border:1px solid var(--warn);color:var(--warn);font-family:inherit;
  font-size:13px;padding:6px 9px;cursor:pointer;line-height:1;}
.salvbtn:active{transform:scale(.94);}
#gearEquipped .mod{border-style:dashed;}
/* loot drop banner */
#drop{position:absolute;left:50%;top:30%;transform:translateX(-50%) scale(.9);z-index:31;
  background:#0a0f0bf2;border:2px solid #fff;padding:12px 20px;text-align:center;border-radius:6px;
  opacity:0;transition:opacity .3s,transform .3s;pointer-events:none;min-width:220px;}
#drop.show{opacity:1;transform:translateX(-50%) scale(1);}
#drop .rar{font-size:11px;letter-spacing:2px;}
#drop .nm{font-size:15px;color:var(--ink);margin-top:4px;}
/* ---------- visual polish ---------- */
/* glossy recessed meters */
.meter,.cbar .m,.bosshp{border-radius:999px;background:#070d08;box-shadow:inset 0 1px 3px #000;}
.meter i,.cbar .m i,.bosshp i{border-radius:999px;position:relative;}
.meter i::after,.cbar .m i::after,.bosshp i::after{content:"";position:absolute;inset:0;
  border-radius:999px;background:linear-gradient(#ffffff2e,transparent 55%);}
/* screen entrance animation (display still toggles, animation plays on show) */
.screen.show{animation:screenin .2s ease;}
@keyframes screenin{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}
.screen{border-radius:var(--rad);box-shadow:var(--sh-2);}
.mod,.cell{border-radius:var(--rad);}
/* sprite map markers — framed as bright circular battle tokens so they read on the dark map */
.mk{display:flex;flex-direction:column;align-items:center;}
.mk .ic{position:relative;width:48px;height:48px;display:grid;place-items:center;border-radius:50%;
  background:radial-gradient(circle at 50% 38%,#4a5a44,#222e21 70%);
  box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #7e9a83,0 3px 6px #000d;overflow:hidden;}
.mk .ic img{width:46px;height:46px;image-rendering:pixelated;object-fit:cover;border-radius:50%;
  filter:brightness(1.35) contrast(1.12) saturate(1.18);}
.mk .lbl{font-size:8px;color:#9fc4a6;letter-spacing:.5px;margin-top:2px;
  text-shadow:0 1px 2px #000,0 0 4px #000;font-weight:bold;}
/* spawn: red threat ring */
.mk.spawn .ic{box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #ff5c7e,0 0 10px 1px #ff2e6e88,0 3px 6px #000d;}
.mk.spawn::after{content:"";position:absolute;left:50%;top:24px;width:48px;height:48px;
  margin:-24px 0 0 -24px;border-radius:50%;box-shadow:0 0 0 2px #ff2e6e66;
  animation:mkpulse 2.2s ease-out infinite;pointer-events:none;}
@keyframes mkpulse{0%{transform:scale(.5);opacity:.9}100%{transform:scale(1.3);opacity:0}}
/* cache: warm gold token */
.mk.cache .ic{box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #ffcf5d,0 0 12px 1px #ffcf5d88,0 3px 6px #000d;
  animation:bob 2.6s ease-in-out infinite;}
@keyframes bob{50%{transform:translateY(-3px)}}
.mk.cache .lbl{color:var(--gold);}
/* infestation: pink danger token */
.mk.infest .ic{width:56px;height:56px;box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #ff2e6e,0 0 16px 3px #ff2e6e99,0 3px 6px #000d;}
.mk.infest .ic img{width:54px;height:54px;}
.mk.infest .lbl{color:var(--infest);}
.mk{position:relative;}
/* claymation image markers (trees/rocks/caches/nests/forts) — circular w/ a per-kind ring */
.mk .ic.clay{width:46px;height:46px;display:grid;place-items:center;border-radius:50%;overflow:hidden;
  font-size:24px;background:#0b0f0c;box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #6b8f4e,0 3px 6px #000d;}
.mk .ic.clay img{width:46px;height:46px;object-fit:cover;border-radius:50%;image-rendering:auto;}
.mk.rock .ic.clay{box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #8a8f9a,0 3px 6px #000d;}
.mk.cache .ic.clay{box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #ffcf5d,0 0 10px 1px #ffcf5d66,0 3px 6px #000d;}
.mk.nest .ic.clay{box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #9d3bff,0 0 14px 2px #9d3bff88,0 3px 6px #000d;animation:nestpulse 1.6s ease-in-out infinite;}
.mk.base .ic.clay{width:48px;height:48px;box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px var(--ring,#5dd66a),0 0 12px 1px var(--ring,#5dd66a),0 3px 6px #000d;}
.mk.base .ic.clay img{width:48px;height:48px;}
/* terrain resource nodes: emoji marker with a soft amber/teal ring */
.mk .ic.res{width:42px;height:42px;font-size:22px;display:grid;place-items:center;border-radius:50%;
  background:radial-gradient(circle,#10180fee,#0b0f0cee);box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #6b8f4e,0 3px 6px #000d;}
.mk.rock .ic.res{box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #8a8f9a,0 3px 6px #000d;}
/* zombie nest (spawn source) — ominous pulsing purple */
.mk.nest .ic.nest{width:48px;height:48px;font-size:26px;display:grid;place-items:center;border-radius:50%;
  background:radial-gradient(circle,#1a0f22ee,#0b0f0cee);
  box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #9d3bff,0 0 16px 3px #9d3bff99,0 3px 6px #000d;
  animation:nestpulse 1.6s ease-in-out infinite;}
.mk.nest .lbl{color:#c79dff;font-weight:bold;text-shadow:0 0 6px #9d3bff,0 1px 2px #000;}
@keyframes nestpulse{0%,100%{filter:brightness(1)}50%{filter:brightness(1.6)}}
/* Downed survivor — pulsing SOS, tap to revive */
.mk.downed .ic.downed{width:44px;height:44px;font-size:24px;display:grid;place-items:center;border-radius:50%;
  background:radial-gradient(circle,#2a0d12,#120406);box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #ff2e6e,0 0 16px 3px #ff2e6eaa;
  animation:downedpulse 1s ease-in-out infinite;}
.mk.downed .lbl{color:#ff7a9c;}
@keyframes downedpulse{0%,100%{transform:scale(1);filter:brightness(1)}50%{transform:scale(1.12);filter:brightness(1.5)}}
/* Allies panel */
.allyrow{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:6px 8px;margin-bottom:5px;
  background:#0b140e;border:1px solid #1d2f22;border-radius:8px;font-size:12px;color:#cfe;}
.allyrow .abtn{background:#16271b;border:1px solid #2a4633;color:#9fe6b5;border-radius:7px;padding:4px 8px;
  font-size:11px;margin-left:5px;cursor:pointer;}
.allyrow .abtn.dim{background:transparent;border-color:#2a2f2a;color:var(--dim);}
/* Fort defense log */
.logrow{display:flex;justify-content:space-between;gap:8px;align-items:flex-start;padding:5px 7px;margin-bottom:4px;
  background:#0b140e;border:1px solid #16231a;border-left:2px solid #2a4633;border-radius:6px;font-size:11px;color:#bfe;line-height:1.4;}
.logrow.bad{border-left-color:#ff2e6e;color:#ffc2d2;}
.logrow .logt{color:var(--dim);font-size:9px;white-space:nowrap;flex-shrink:0;}
/* World boss — big pulsing marker with a shared HP bar */
.mk.boss .ic.boss{width:54px;height:54px;font-size:32px;display:grid;place-items:center;border-radius:50%;
  background:radial-gradient(circle,#3a0d12,#160406);box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #ff3b3b,0 0 22px 5px #ff3b3bcc;
  animation:bosspulse 1.3s ease-in-out infinite;}
.mk.boss .bosshp{width:62px;height:6px;margin:3px auto 0;background:#3a0e12;border:1px solid #000;border-radius:4px;overflow:hidden;}
.mk.boss .bosshp i{display:block;height:100%;background:linear-gradient(90deg,#ff2e2e,#ff7a3b);}
.mk.boss .lbl{color:#ff9a9a;font-weight:bold;}
@keyframes bosspulse{0%,100%{transform:scale(1);filter:brightness(1)}50%{transform:scale(1.08);filter:brightness(1.4)}}
/* dev nest locator ping — gold ring + bold distance label */
.mk.nestping .ic.nest{box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px #ffcf5d,0 0 16px 3px #ffcf5d99,0 3px 6px #000d;}
.mk.nestping .lbl{color:var(--gold);font-weight:bold;font-size:10px;text-shadow:0 0 6px #000,0 1px 2px #000;}
.mk.tree .lbl{color:#8fd06a;}
.mk.rock .lbl{color:#b9c0cc;}
.sup-em{font-size:13px;vertical-align:-2px;margin-right:2px;}
/* live map-placed wall nodes + blueprints */
.mk .ic.struct{width:30px;height:30px;font-size:16px;display:grid;place-items:center;border-radius:6px;
  background:#0b0f0cd0;box-shadow:0 0 0 2px #0b0f0c,0 0 0 2px #5a6b52,0 2px 4px #000c;opacity:.6;}
.mk.struct.mine .ic.struct{box-shadow:0 0 0 2px #0b0f0c,0 0 0 2px #5dd66a,0 0 8px #5dd66a88,0 2px 4px #000c;opacity:1;}
.mk.bp .ic.bp{width:32px;height:32px;font-size:16px;display:grid;place-items:center;border-radius:6px;
  background:#1a140688;box-shadow:0 0 0 2px #0b0f0c,0 0 0 2px #ffcf5d,0 0 8px #ffcf5d66;
  opacity:.85;animation:fleepulse 1.2s ease-in-out infinite;}
.mk.bp .lbl{color:var(--gold);font-size:8px;font-weight:bold;text-shadow:0 1px 2px #000;}
/* build palette bar */
#buildbar{position:absolute;left:50%;transform:translateX(-50%);bottom:188px;z-index:600;
  display:flex;align-items:center;gap:8px;padding:8px 12px;background:#0b0f0ce8;border:1px solid var(--gold);
  border-radius:10px;font-size:12px;color:var(--gold);box-shadow:0 4px 16px #000a;}
#buildbar .bbtitle{font-weight:bold;letter-spacing:1px;}
#buildbar .bmat{font-size:18px;padding:4px 8px;background:#16110488;border:1px solid #3a2f12;border-radius:6px;cursor:pointer;}
#buildbar .bmat.on{border-color:var(--gold);box-shadow:0 0 8px #ffcf5d66;background:#2a200a;}
#buildbar .bbhint{font-size:9px;color:var(--dim);}
#buildbar #buildExit{font-size:14px;background:none;border:none;color:var(--danger);cursor:pointer;}
/* tap-a-structure menu (build / move / destroy) */
#structmenu{position:absolute;left:50%;transform:translateX(-50%);bottom:188px;z-index:601;
  display:flex;align-items:center;gap:8px;padding:8px 12px;background:#0b0f0ce8;border:1px solid var(--accent);
  border-radius:10px;font-size:12px;color:var(--accent);box-shadow:0 4px 16px #000a;}
#structmenu .smtitle{font-weight:bold;letter-spacing:1px;}
#structmenu .smbtn{font-size:11px;padding:5px 8px;background:#0e1a10;border:1px solid #2a4030;border-radius:6px;color:#cfe;cursor:pointer;}
#structmenu #smDestroy{border-color:var(--danger);color:var(--danger);}
#structmenu #smClose{border:none;background:none;color:var(--dim);}
/* player base: fortress emoji with a wall-HP colored ring */
.mk.base .ic{width:46px;height:46px;font-size:26px;display:grid;place-items:center;border-radius:50%;
  background:radial-gradient(circle,#16231aee,#0b0f0cee);
  box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px var(--ring,#5dd66a),0 0 12px 1px var(--ring,#5dd66a)88,0 3px 6px #000d;}
.mk.base .lbl{color:var(--ring,#5dd66a);font-weight:bold;text-shadow:0 1px 2px #000;}
/* base defenses panel */
.wallbar{display:flex;align-items:center;gap:6px;font-size:10px;margin-bottom:8px;}
.wallbar .meter{flex:1;height:10px;background:#0b0f0c;border:1px solid #16231a;border-radius:5px;overflow:hidden;}
.wallbar .meter i{display:block;height:100%;transition:width .3s;}
.wallbar .v{color:var(--dim);min-width:54px;text-align:right;}
.basenote{font-size:10px;color:var(--dim);line-height:1.5;margin-bottom:10px;}
.wallpick{display:flex;gap:6px;margin-bottom:8px;}
.wallpick .wallmat{flex:1;text-align:center;padding:8px 4px;font-size:11px;line-height:1.3;}
.wallpick .wallmat small{color:var(--dim);font-size:9px;}
.btn.dim,.upbtn:disabled{opacity:.45;}
/* elite spawns: colored ring + pulsing aura + bright label */
.mk.elite .ic{box-shadow:0 0 0 2px #0b0f0c,0 0 0 3px var(--elite,#ff5e5e),0 0 14px 3px var(--elite,#ff5e5e),0 3px 6px #000d;animation:elitepulse 1.4s ease-in-out infinite;}
.mk.elite .lbl{color:var(--elite,#ff5e5e);font-weight:bold;text-shadow:0 0 6px var(--elite,#ff5e5e),0 1px 2px #000;}
@keyframes elitepulse{0%,100%{filter:brightness(1)}50%{filter:brightness(1.5)}}
#cEsprite.elite{animation:elitebob 1.2s ease-in-out infinite;filter:drop-shadow(0 0 10px var(--elite,#ff5e5e)) drop-shadow(0 3px 4px #000);}
@keyframes elitebob{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
/* combat hit feedback */
#combat.hit{animation:dmgflash .3s;}
@keyframes dmgflash{0%{box-shadow:none}30%{box-shadow:inset 0 0 80px 12px #ff000055}100%{box-shadow:none}}
/* soft auto-engage FLEE window */
.cflee{display:flex;align-items:center;justify-content:center;gap:8px;margin:8px 0;padding:10px;
  border:1px solid var(--gold);border-radius:8px;color:var(--gold);background:#1a1406cc;
  font-size:13px;letter-spacing:1px;cursor:pointer;animation:fleepulse .9s ease-in-out infinite;}
.cflee .ic{font-size:16px;}
.cflee b{font-size:16px;color:#fff;}
@keyframes fleepulse{0%,100%{box-shadow:0 0 0 0 #ffcf5d00}50%{box-shadow:0 0 12px 2px #ffcf5d66}}
#cEsprite.shake{animation:shake .25s;}
@keyframes shake{25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
/* HUD supply sprites + nav active glow */
.sup-ic{width:15px;height:15px;image-rendering:pixelated;vertical-align:-3px;margin-right:2px;}
.nav span.on b{filter:drop-shadow(0 0 6px var(--accent));}
.hidden{display:none!important;}
