*{margin:0;padding:0;box-sizing:border-box}
body{overflow:hidden;font-family:system-ui,sans-serif;background:#0a0a0f;cursor:default}

/* ---------- Loader ---------- */
#loader{position:fixed;inset:0;z-index:9999;background:linear-gradient(135deg,#0a0a0f,#1a1a2e);display:flex;align-items:center;justify-content:center;transition:opacity .15s ease-out}
#loader.fade-out{opacity:0;pointer-events:none}
.loader-dots{display:flex;gap:10px}
.loader-dots span{width:12px;height:12px;border-radius:50%;background:#4a6cf7;animation:lp 1.2s infinite ease-in-out}
.loader-dots span:nth-child(2){animation-delay:.15s}
.loader-dots span:nth-child(3){animation-delay:.3s}
@keyframes lp{0%,80%,100%{transform:scale(.5);opacity:.3}40%{transform:scale(1);opacity:1}}

/* ---------- Canvas ---------- */
#canvas{display:block;width:100vw;height:100vh;position:fixed;inset:0}

/* ---------- Menu ---------- */
#menu{position:fixed;inset:0;z-index:100;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1rem;background:linear-gradient(135deg,#0a0a0f,#1a1a2e)}
#menu.hidden{display:none}
.menu-title{color:#fff;margin-bottom:.25rem;font-weight:400;font-size:1.75rem}
.btn{padding:1rem 2.5rem;font-size:1.1rem;border:none;border-radius:8px;cursor:pointer;transition:transform .15s,box-shadow .15s}
.btn:hover{transform:scale(1.05);box-shadow:0 4px 20px rgba(0,0,0,.3)}
.btn-primary{background:linear-gradient(135deg,#4a6cf7,#6b8cff);color:#fff}
.btn-secondary{background:#2a2a3e;color:#a0a0ff;border:1px solid #4a4a6e}
.menu-connect-row{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:0}
.btn:disabled,.menu-input:disabled{opacity:.5;cursor:not-allowed}
.btn:disabled:hover{transform:none;box-shadow:none}
.connect-spinner{width:20px;height:20px;border:2px solid rgba(74,108,247,.3);border-top-color:#4a6cf7;border-radius:50%;animation:spin .6s linear infinite;margin-left:12px;flex-shrink:0}
.connect-spinner.hidden{display:none}
@keyframes spin{to{transform:rotate(360deg)}}
.menu-input{padding:1rem 1.25rem;font-size:1.1rem;width:220px;border:1px solid #4a4a6e;border-right:none;border-radius:8px 0 0 8px;background:#1a1a2e;color:#fff}
.menu-input-full{width:min(360px,92vw);border-right:1px solid #4a4a6e;border-radius:8px}
.btn-connect{border-radius:0 8px 8px 0;flex-shrink:0}

/* ---------- Click overlay ---------- */
#clickOverlay{position:fixed;inset:0;z-index:90;display:flex;align-items:center;justify-content:center;cursor:pointer;background:rgba(0,0,0,0.25)}
#clickOverlay.hidden{display:none}
.click-prompt{color:rgba(255,255,255,.75);font-size:1.4rem;font-weight:300;letter-spacing:.04em;padding:1.2rem 2.4rem;border:1px solid rgba(255,255,255,.15);border-radius:10px;background:rgba(0,0,0,.35);backdrop-filter:blur(4px);transition:transform .15s}
#clickOverlay:hover .click-prompt{transform:scale(1.05)}

/* ---------- Crosshair ---------- */
#crosshair{position:fixed;top:50%;left:50%;z-index:40;pointer-events:none;transform:translate(-50%,-50%);--chSpread:0px}
#crosshair .crosshair-svg{position:absolute;left:0;top:0;transform:translate(-50%,-50%);overflow:visible;shape-rendering:crispEdges}
#crosshair .ch-mark,#crosshair .ch-dot{fill:rgba(220,255,220,.85)}
#crosshair .ch-up{transform:translateY(calc(-3px - var(--chSpread)))}
#crosshair .ch-down{transform:translateY(calc(3px + var(--chSpread)))}
#crosshair .ch-left{transform:translateX(calc(-3px - var(--chSpread)))}
#crosshair .ch-right{transform:translateX(calc(3px + var(--chSpread)))}

/* ---------- Killfeed ---------- */
#killfeed{position:fixed;top:128px;right:12px;z-index:55;display:flex;flex-direction:column;align-items:flex-end;gap:5px;pointer-events:none}
.kf-entry{display:flex;align-items:center;gap:8px;padding:8px 16px;border-radius:10px;font-family:'Segoe UI',system-ui,sans-serif;font-size:15px;color:#eee;background:rgba(10,10,30,.72);border:1px solid rgba(100,130,255,.22);box-shadow:0 0 12px rgba(74,108,247,.22),inset 0 0 8px rgba(74,108,247,.07);backdrop-filter:blur(6px);opacity:0;animation:kfIn .2s ease-out forwards,kfOut .4s ease-in 4s forwards;white-space:nowrap}
.kf-self{background:rgba(140,30,30,.55);border-color:rgba(255,70,70,.3);box-shadow:0 0 12px rgba(255,50,50,.25),inset 0 0 8px rgba(255,50,50,.08)}
.kf-killer{color:#fff;font-weight:600}
.kf-victim{color:#ddd}
.kf-icon{color:#c44;font-size:13px;margin:0 2px}
.kf-hs{width:22px;height:22px;vertical-align:middle;filter:invert(1) drop-shadow(0 0 4px rgba(255,200,0,.7))}
@keyframes kfIn{from{opacity:0;transform:translateX(20px)}to{opacity:1;transform:translateX(0)}}
@keyframes kfOut{from{opacity:1}to{opacity:0}}

/* ---------- Stats HUD ---------- */
#stats{position:fixed;top:12px;right:12px;font-size:12px;color:#9a9;font-family:monospace;background:rgba(0,0,0,.55);padding:8px 12px;border-radius:6px;z-index:50;line-height:1.5}
.stats-sep{height:1px;background:rgba(255,255,255,.08);margin:4px 0}

/* ---------- ESC overlay ---------- */
#escOverlay{position:fixed;inset:0;z-index:160;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5)}
#escOverlay.hidden{display:none}
#escPanels{display:flex;align-items:flex-start;gap:1rem}
#escPanel{background:rgba(18,18,32,.97);border:1px solid #3a3a5e;border-radius:14px;padding:1.8rem 2.2rem;text-align:center;display:flex;flex-direction:column;align-items:center;gap:.9rem;min-width:300px}
#botPanel{background:rgba(18,18,32,.97);border:1px solid #3a3a5e;border-radius:14px;padding:1.8rem 2.2rem;text-align:center;display:flex;flex-direction:column;align-items:center;gap:.9rem;min-width:280px}
#botPanel.hidden{display:none}
.esc-title{color:#ddd;font-size:1.1rem;font-weight:500;margin-bottom:.3rem}
.esc-btn{min-width:220px}

/* settings rows */
.esc-settings{width:100%;display:flex;flex-direction:column;gap:.5rem;margin-bottom:.4rem}
.setting-row{display:flex;align-items:center;gap:.5rem;color:#aaa;font-size:.82rem;font-family:monospace}
.setting-row span:first-child{width:80px;text-align:right;flex-shrink:0}
.setting-row input[type=range]{flex:1;accent-color:#4a6cf7;height:4px}
.setting-row input.setting-val{width:3.35rem;flex-shrink:0;padding:.22rem .35rem;text-align:right;border:1px solid rgba(255,255,255,.12);border-radius:6px;background:rgba(0,0,0,.22);color:#ddd;font:inherit;appearance:textfield;-moz-appearance:textfield}
.setting-row input.setting-val::-webkit-outer-spin-button,.setting-row input.setting-val::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.setting-row input.setting-val:focus{outline:none;border-color:rgba(74,108,247,.45)}

/* ---------- Weapon slot ---------- */
#weaponSlot{position:fixed;bottom:100px;right:24px;z-index:50;display:flex;align-items:center;gap:10px;transition:opacity .35s ease}
.ws-key{font-family:monospace;font-size:2.4rem;font-weight:700;color:#fff;text-shadow:0 0 6px rgba(255,255,255,.7),0 0 14px rgba(255,255,255,.35);transition:color .35s ease,text-shadow .35s ease,opacity .35s ease}
.ws-icon{height:60px;width:auto;filter:brightness(1.1) drop-shadow(0 0 4px rgba(255,255,255,.4));transition:filter .35s ease,opacity .35s ease}
#weaponSlot.ws-inactive .ws-key{color:rgba(255,255,255,.3);text-shadow:none}
#weaponSlot.ws-inactive .ws-icon{filter:brightness(.5);opacity:.3}

/* ---------- Shared HUD icon ---------- */
.hud-icon{height:36px;width:auto;filter:brightness(1.15) drop-shadow(0 0 5px rgba(255,255,255,.55)) drop-shadow(0 0 12px rgba(255,255,255,.2))}

/* ---------- Ammo HUD ---------- */
#ammoHud{position:fixed;bottom:24px;right:24px;z-index:50;font-family:monospace;display:flex;align-items:center;gap:10px;height:52px}
#ammoCount{font-size:2.2rem;font-weight:bold;color:#fff;text-shadow:0 0 8px rgba(255,255,255,.4)}
.ammo-sep{color:rgba(255,255,255,.25);margin:0 1px;font-size:1.4rem}
#magCount{color:rgba(255,255,255,.45);font-size:1.3rem}

/* ---------- HP HUD ---------- */
#hpHud{position:fixed;bottom:24px;left:24px;z-index:50;display:flex;align-items:center;gap:10px;font-family:monospace;color:#ddd;font-size:1.2rem;height:52px}
.hp-bar{width:160px;height:10px;background:rgba(255,255,255,.08);border-radius:5px;overflow:hidden}
#hpFill{height:100%;width:100%;background:#4a4;border-radius:5px;transition:width .2s,background .2s;box-shadow:0 0 8px rgba(68,170,68,.4)}
#hpText{color:#fff;font-weight:700;font-size:1.4rem;text-shadow:0 0 8px rgba(255,255,255,.3);min-width:2.2ch}

/* ---------- Spawn overlay ---------- */
#spawnOverlay{position:fixed;inset:0;z-index:95;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5)}
#spawnOverlay.hidden{display:none}
.spawn-box{text-align:center;display:flex;flex-direction:column;align-items:center;gap:1.2rem;background:rgba(18,18,32,.92);border:1px solid #3a3a5e;border-radius:14px;padding:2rem 3rem}
#spawnText{color:rgba(255,255,255,.8);font-size:1.3rem;font-weight:300}

/* ---------- Death timer ---------- */
#deathTimer{position:fixed;inset:0;z-index:95;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none}
.death-label{color:rgba(255,255,255,.65);font-size:1.5rem;font-weight:300;letter-spacing:.05em}
.death-countdown{color:#fff;font-size:4.5rem;font-weight:700;font-variant-numeric:tabular-nums;text-shadow:0 0 24px rgba(255,60,60,.45),0 0 60px rgba(255,40,40,.15);line-height:1;margin-top:.3rem}

/* ---------- Reconnect ---------- */
.reconnect-overlay{position:fixed;inset:0;z-index:200;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.5);opacity:0;transition:opacity .2s ease;pointer-events:none}
.reconnect-overlay.visible{opacity:1;pointer-events:auto}
.reconnect-popup{background:rgba(20,20,35,.97);border:1px solid #4a4a6e;border-radius:12px;padding:2rem 2.5rem;text-align:center;display:flex;flex-direction:column;align-items:center;gap:1.2rem}
.reconnect-btn{padding:.7rem 2rem;font-size:1rem;border-radius:8px;cursor:pointer;background:rgba(255,60,60,.2);color:#f88;border:1px solid rgba(255,60,60,.35);transition:background .15s,color .15s}
.reconnect-btn:hover{background:rgba(255,60,60,.35);color:#fff}
