:root{
  --neon-yellow:#ffd23f; --neon-cyan:#3ddfff;
  --team-a:#4d9fff; --team-b:#ff8a1e;
  --bg-deep:#06090f; --bg-card:#161e2e; --border:#2a3146;
}
*{box-sizing:border-box}
html,body{
  margin:0;padding:0;background:var(--bg-deep);color:#fff;
  font-family:'IBM Plex Sans KR',-apple-system,sans-serif;
  overflow:hidden;height:100vh;user-select:none;-webkit-user-select:none;
}
#wrap{display:flex;justify-content:center;align-items:center;height:100vh}
#stage{
  position:relative;
  width:min(100vw, calc(100vh * 1.777));
  height:min(100vh, calc(100vw / 1.777));
  background:#000;overflow:hidden;box-shadow:0 0 0 1px var(--border),0 0 60px rgba(77,159,255,0.15);
}
canvas{display:block;width:100%;height:100%;cursor:crosshair}

/* HUD */
#hud{position:absolute;top:0;left:0;right:0;padding:10px 14px;display:flex;justify-content:space-between;align-items:flex-start;gap:10px;z-index:3;pointer-events:none}
.hud-box{background:rgba(8,12,22,0.85);backdrop-filter:blur(8px);padding:7px 12px;border-radius:8px;border:1px solid rgba(255,255,255,0.08);font-size:14px;font-weight:600}
.hud-box b{color:var(--neon-yellow)}
#assetBox .a b{color:var(--team-a)} #assetBox .b b{color:var(--team-b)}
#assetBox .sep{color:#555;margin:0 8px}
#netStatus{background:rgba(8,12,22,0.85);border:1px solid rgba(255,255,255,0.1);padding:7px 11px;border-radius:8px;font-size:12px;color:#ccc;backdrop-filter:blur(8px)}
#netStatus .dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#888;margin-right:6px;vertical-align:middle}
#netStatus.solo .dot{background:var(--neon-yellow);box-shadow:0 0 8px var(--neon-yellow)}
#netStatus.coop .dot{background:var(--neon-cyan);box-shadow:0 0 8px var(--neon-cyan)}

/* 빌드 팔레트 */
#palette{position:absolute;bottom:14px;left:50%;transform:translateX(-50%);display:flex;gap:8px;z-index:4}
.build{width:92px;height:76px;background:rgba(8,12,22,0.9);backdrop-filter:blur(8px);border:2px solid rgba(255,255,255,0.14);border-radius:10px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;cursor:grab;transition:transform .12s,border-color .12s;touch-action:none}
.build:hover{transform:translateY(-3px);border-color:var(--neon-yellow)}
.build:active{cursor:grabbing}
.build.disabled{opacity:0.4;filter:grayscale(1);cursor:not-allowed}
.build.active{border-color:var(--neon-cyan);box-shadow:0 0 14px rgba(61,223,255,0.6);background:rgba(20,40,55,0.95)}
.build .ico{font-size:22px;line-height:1}
.build .nm{font-size:13px;font-weight:700}
.build .cost{font-size:11px;color:var(--neon-yellow)}

/* 오버레이 */
#overlay{position:absolute;inset:0;background:radial-gradient(ellipse at center,rgba(15,20,40,0.96),rgba(0,0,0,0.99));display:flex;flex-direction:column;justify-content:center;align-items:center;text-align:center;padding:24px;overflow-y:auto;z-index:7}
#overlay.hidden{display:none}
.title{font-family:'Black Han Sans',sans-serif;font-size:60px;line-height:1;margin:0 0 6px;background:linear-gradient(180deg,#fff 30%,var(--neon-yellow) 70%);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.subtitle{font-family:'Press Start 2P',monospace;font-size:11px;letter-spacing:4px;color:var(--neon-cyan);margin:4px 0 16px}
.desc{color:#bbb;margin:6px 0;line-height:1.7;max-width:560px;font-size:14px}
.desc b{color:var(--neon-yellow)}
.btn{padding:12px 28px;background:var(--neon-yellow);color:#000;border:none;border-radius:6px;font-family:'Black Han Sans',sans-serif;font-size:18px;cursor:pointer;margin:6px;box-shadow:0 4px 0 #c89c0a}
.btn:hover{transform:translateY(-2px)}
.btn.alt{background:transparent;color:#fff;border:2px solid rgba(255,255,255,0.25);box-shadow:none}
.btn.alt.sel{border-color:var(--neon-cyan);color:var(--neon-cyan)}
