/* COLONIE — neon dashboard. Grid is <canvas>; everything else is DOM. */
:root{
  --bg:#070a1c; --bg2:#0b1030; --panel:rgba(16,22,52,.72);
  --neon:#00e5ff; --neon2:#ff2bd6; --gold:#ffe600; --good:#7CFC72; --bad:#ff4d6d;
  --ink:#e8f0ff; --dim:rgba(232,240,255,.6); --line:rgba(120,180,255,.16);
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;background:var(--bg);color:var(--ink);overflow:hidden;
  font-family:"Trebuchet MS","Segoe UI",system-ui,Arial,sans-serif;-webkit-user-select:none;user-select:none}
button{font:inherit;cursor:pointer;color:inherit}

#app{position:fixed;inset:0;display:flex;flex-direction:column;
  background:radial-gradient(120% 100% at 50% -10%, #141b40 0%, #070a1c 55%, #03040e 100%)}

/* ---------- top bar ---------- */
#topbar{display:flex;align-items:center;gap:16px;padding:8px 14px;
  background:linear-gradient(180deg, rgba(10,14,38,.95), rgba(10,14,38,.6));
  border-bottom:1px solid var(--line);flex-wrap:wrap}
#brand{display:flex;flex-direction:column;line-height:1;gap:5px}
.logo{font-weight:900;font-size:22px;letter-spacing:.06em;color:#fff;
  text-shadow:0 0 12px var(--neon),0 0 26px var(--neon)}
#tier-name{display:inline-flex;align-items:center;gap:4px;align-self:flex-start;
  font-size:10px;letter-spacing:.16em;text-transform:uppercase;color:var(--gold);
  background:rgba(255,230,0,.1);border:1px solid rgba(255,230,0,.35);border-radius:20px;padding:2px 9px}
#tier-name::before{content:"✦";font-size:9px}

#resbar{display:flex;gap:8px;flex:1;flex-wrap:wrap;justify-content:center}
.res{display:flex;align-items:center;gap:6px;padding:6px 10px;border-radius:10px;
  background:rgba(0,0,0,.28);border:1px solid var(--line);min-width:96px}
.r-ic{font-size:16px}
.r-val{font-weight:800;font-size:15px}
.r-val.short{animation:flashbad .6s steps(2) infinite}
@keyframes flashbad{50%{color:var(--bad)!important}}
.r-rate{font-size:11px;color:var(--dim);min-width:40px}
.r-rate.up{color:var(--good)} .r-rate.down{color:var(--bad)}

#controls{display:flex;align-items:center;gap:8px}
#speeds{display:flex;gap:3px;background:rgba(0,0,0,.3);padding:3px;border-radius:10px;border:1px solid var(--line)}
.spd{width:34px;height:32px;border:none;background:transparent;border-radius:7px;font-size:15px;opacity:.6}
.spd:hover{opacity:1;background:rgba(255,255,255,.06)}
.spd.active{opacity:1;background:var(--neon);color:#04121a;box-shadow:0 0 14px var(--neon)}
.icon-btn{width:38px;height:34px;border-radius:9px;border:1px solid var(--line);background:rgba(0,0,0,.3);font-size:16px}
.icon-btn:hover{border-color:var(--neon);box-shadow:0 0 10px rgba(0,229,255,.4)}

/* ---------- main 3-column ---------- */
#main{flex:1;display:grid;grid-template-columns:260px 1fr 290px;gap:12px;padding:12px;min-height:0}
.panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:12px;
  display:flex;flex-direction:column;min-height:0;backdrop-filter:blur(4px)}
.panel h3{font-size:13px;letter-spacing:.14em;text-transform:uppercase;color:var(--neon);margin-bottom:6px}
.panel h3.logtitle{margin-top:12px}
.panel-hint{font-size:11px;color:var(--dim);margin-bottom:8px;line-height:1.4}

/* build menu */
#buildmenu{overflow-y:auto;display:flex;flex-direction:column;gap:8px;padding-right:4px}
.bcard{text-align:left;border:1px solid var(--line);background:rgba(0,0,0,.25);border-radius:11px;padding:9px 10px;
  display:flex;flex-direction:column;gap:4px;transition:.1s;position:relative}
.bcard:hover{border-color:var(--neon);transform:translateY(-1px);box-shadow:0 0 16px rgba(0,229,255,.18)}
.bcard.sel{border-color:var(--neon);background:rgba(0,229,255,.1);box-shadow:0 0 18px rgba(0,229,255,.35)}
.bcard.cant{opacity:.6}
.bcard.locked{opacity:.5;filter:grayscale(.5)}
.bc-top{display:flex;align-items:center;gap:8px}
.bc-ic{font-size:20px}
.bc-name{font-weight:800;font-size:14px}
.bc-cost{font-size:12px;color:var(--gold);font-weight:700}
.bc-cost .free{color:var(--dim);font-weight:400}
.bc-eff{display:flex;flex-wrap:wrap;gap:4px}
.ch{font-size:10px;padding:1px 5px;border-radius:6px;background:rgba(255,255,255,.06);white-space:nowrap}
.ch.up{color:var(--good)} .ch.down{color:#ff9a9a} .ch.pop{color:#c08bff}
.ch.store{color:#ffb86b} .ch.work{color:#9bd0ff}
.bc-desc{font-size:11px;color:var(--dim);line-height:1.35}
.bc-lock{font-size:11px;color:var(--bad);font-weight:700}
.bc-lock:empty{display:none}

/* center grid */
#center{display:flex;flex-direction:column;min-height:0;gap:8px}
#grid-wrap{flex:1;display:flex;align-items:center;justify-content:center;min-height:0;
  background:rgba(0,0,0,.25);border:1px solid var(--line);border-radius:14px;padding:10px;overflow:hidden}
#grid{max-width:100%;max-height:100%;width:auto;height:auto;border-radius:8px;
  box-shadow:0 0 40px rgba(0,229,255,.12)}
#gridhint{display:flex;align-items:center;justify-content:space-between;gap:10px;
  font-size:12px;color:var(--dim);padding:0 6px;min-height:24px}
#btn-cancel{border:1px solid var(--bad);color:var(--bad);background:rgba(255,77,109,.08);
  border-radius:8px;padding:4px 10px;font-size:12px}

/* stats + log */
#stats{display:flex;flex-direction:column;gap:5px}
.stat{display:flex;justify-content:space-between;align-items:center;font-size:13px;
  padding:5px 0;border-bottom:1px solid rgba(255,255,255,.05)}
.stat b{font-weight:800}
.stat.morale{gap:8px}
.mbar{flex:1;height:9px;border-radius:5px;background:rgba(0,0,0,.4);overflow:hidden;margin:0 4px}
.mbar>span{display:block;height:100%;border-radius:5px;transition:width .3s}
#log{overflow-y:auto;flex:1;display:flex;flex-direction:column;gap:4px;margin-top:4px}
.logline{display:flex;gap:8px;font-size:12px;color:var(--dim);line-height:1.35;
  padding:5px 7px;background:rgba(0,0,0,.2);border-radius:7px}
.logline .li{flex-shrink:0}
.logline.dim{opacity:.5}
.big-btn{width:100%;border:1px solid var(--neon);background:rgba(0,229,255,.08);border-radius:10px;
  padding:10px;font-weight:800;letter-spacing:.04em;margin-top:8px;transition:.1s}
.big-btn:hover{background:var(--neon);color:#04121a;box-shadow:0 0 18px var(--neon)}
.big-btn.danger{border-color:var(--bad);background:rgba(255,77,109,.08)}
.big-btn.danger:hover{background:var(--bad);color:#1a0007;box-shadow:0 0 18px var(--bad)}
.big-btn.disabled{opacity:.4;pointer-events:none}
.big-btn .mini{font-size:11px;opacity:.85;font-weight:600}

/* ---------- building popup ---------- */
.popup{position:fixed;z-index:40;width:248px;background:rgba(12,17,42,.97);border:1px solid var(--neon);
  border-radius:13px;padding:12px;box-shadow:0 0 30px rgba(0,229,255,.3);backdrop-filter:blur(6px)}
.popup-head{display:flex;align-items:center;gap:8px;font-weight:800;font-size:15px;margin-bottom:8px}
.popup-head .x,.modal-head .x{margin-left:auto;width:26px;height:26px;border:none;background:rgba(255,255,255,.08);
  border-radius:7px;font-size:13px}
.popup-head .x:hover,.modal-head .x:hover{background:var(--bad);color:#fff}
#binfo-body{display:flex;flex-direction:column;gap:3px;margin-bottom:10px}
.pb-row{display:flex;justify-content:space-between;font-size:12px;color:var(--ink);
  padding:3px 0;border-bottom:1px solid rgba(255,255,255,.05)}
.pb-row span:first-child{color:var(--dim)}
.pb-row.dim{opacity:.7}
#binfo-actions{display:flex;flex-direction:column;gap:6px}
#binfo-actions .big-btn{margin-top:0;font-size:13px;padding:8px}

/* ---------- modals ---------- */
.modal{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;
  background:rgba(3,5,16,.72);backdrop-filter:blur(3px);padding:20px}
.modal[hidden]{display:none}
.modal-box{background:var(--bg2);border:1px solid var(--neon);border-radius:16px;padding:18px;
  width:min(760px,94vw);max-height:88vh;overflow-y:auto;box-shadow:0 0 50px rgba(0,229,255,.25)}
.modal-box.small{width:min(380px,94vw)}
.modal-head{display:flex;align-items:center;margin-bottom:8px}
.modal-head h2{font-size:22px;text-shadow:0 0 14px var(--neon2)}
#tech-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px;margin-top:10px}
.tcard{border:1px solid var(--line);background:rgba(0,0,0,.25);border-radius:12px;padding:11px;display:flex;flex-direction:column;gap:6px}
.tcard.owned{border-color:var(--good);background:rgba(124,252,114,.08)}
.tcard.blocked{opacity:.5}
.t-top{display:flex;align-items:center;gap:8px;font-weight:800}
.t-ic{font-size:20px}
.t-desc{font-size:12px;color:var(--dim);line-height:1.4;flex:1}
.t-need{font-size:11px;color:var(--gold)}
.t-foot{display:flex;justify-content:flex-end}
.t-buy{border:1px solid var(--neon2);background:rgba(255,43,214,.1);border-radius:8px;padding:6px 12px;font-weight:800}
.t-buy:hover{background:var(--neon2);color:#fff;box-shadow:0 0 14px var(--neon2)}
.t-buy.disabled{opacity:.4;pointer-events:none}
.t-done{color:var(--good);font-weight:800}
.help-body{font-size:14px;line-height:1.6}
.help-body ul{margin:10px 0 10px 4px;list-style:none;display:flex;flex-direction:column;gap:7px}
.help-body li{padding-left:2px}

/* ---------- toasts ---------- */
#toasts{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);z-index:80;
  display:flex;flex-direction:column;gap:8px;align-items:center;pointer-events:none}
.toast{background:rgba(12,17,42,.96);border:1px solid var(--neon2);border-radius:12px;padding:10px 16px;
  box-shadow:0 0 24px rgba(255,43,214,.35);display:flex;flex-direction:column;gap:2px;max-width:80vw;
  animation:tin .3s ease}
.toast b{font-size:14px}
.toast span{font-size:12px;color:var(--dim)}
.toast.out{animation:tout .5s ease forwards}
@keyframes tin{from{opacity:0;transform:translateY(12px)}to{opacity:1}}
@keyframes tout{to{opacity:0;transform:translateY(-8px)}}

/* ====================== HUB / lobby (Brawl-Stars / Fortnite vibe) ====================== */
#hub{position:fixed;inset:0;z-index:40;display:flex;flex-direction:column;overflow:hidden;
  background:radial-gradient(125% 95% at 50% -12%, #2c1d76 0%, #140d40 46%, #07061c 100%)}
#hub[hidden]{display:none}
.hub-fx{position:absolute;inset:-30%;pointer-events:none;
  background:radial-gradient(circle at 28% 30%, rgba(255,43,214,.20), transparent 42%),
             radial-gradient(circle at 76% 64%, rgba(0,229,255,.20), transparent 42%);
  animation:hubdrift 16s ease-in-out infinite alternate}
@keyframes hubdrift{to{transform:translate(4%,3%) rotate(8deg)}}

/* top bar: profile + wallet */
#hub-top{position:relative;z-index:2;display:flex;align-items:center;justify-content:space-between;
  padding:16px 22px;gap:12px;flex-wrap:wrap}
.hub-profile{display:flex;align-items:center;gap:12px}
.hub-ava{width:54px;height:54px;border-radius:16px;display:flex;align-items:center;justify-content:center;
  font-size:28px;background:linear-gradient(180deg,#2a3570,#161d44);border:2px solid rgba(0,229,255,.5);
  box-shadow:0 4px 0 rgba(0,0,0,.4),0 0 18px rgba(0,229,255,.3)}
.hub-id{display:flex;flex-direction:column;gap:3px;line-height:1}
.hub-id b{font-size:16px;letter-spacing:.02em}
.hub-rank{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--gold);
  background:rgba(255,230,0,.12);border:1px solid rgba(255,230,0,.4);border-radius:20px;padding:2px 9px;align-self:flex-start}
.hub-wallet{display:flex;align-items:center;gap:10px}
.wchip{display:flex;align-items:center;gap:7px;font-weight:900;font-size:16px;
  background:linear-gradient(180deg,#1a2152,#10153a);border:1px solid rgba(120,180,255,.35);
  border-radius:22px;padding:8px 16px 8px 12px;box-shadow:0 4px 0 rgba(0,0,0,.35)}
.wchip i{font-style:normal;font-size:18px}
.hub-ic{width:46px;height:46px;border-radius:14px;border:1px solid rgba(120,180,255,.35);
  background:linear-gradient(180deg,#1a2152,#10153a);font-size:20px;box-shadow:0 4px 0 rgba(0,0,0,.35)}
.hub-ic:active{transform:translateY(3px);box-shadow:0 1px 0 rgba(0,0,0,.35)}

/* main: hero stage + side menu */
#hub-main{position:relative;z-index:2;flex:1;display:flex;align-items:center;
  justify-content:space-between;gap:30px;padding:0 5vw;min-height:0;flex-wrap:wrap}
.hub-stage{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;min-width:320px}
.hub-emblem{position:relative;width:210px;height:210px;display:flex;align-items:center;justify-content:center;margin-bottom:16px}
.hub-planet{width:188px;height:188px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle at 36% 30%, #8fe9ff, #2e6bff 52%, #15204e 86%);
  box-shadow:0 0 70px rgba(0,229,255,.45), inset -24px -24px 52px rgba(0,0,0,.55), inset 14px 14px 38px rgba(255,255,255,.18);
  animation:bob 4.2s ease-in-out infinite}
.hub-planet-ic{font-size:70px;filter:drop-shadow(0 4px 8px rgba(0,0,0,.5))}
@keyframes bob{50%{transform:translateY(-10px)}}
.hub-orbit{position:absolute;top:50%;left:50%;width:300px;height:300px;border:2px solid rgba(0,229,255,.30);
  border-radius:50%;animation:orbit 9s linear infinite}
.hub-orbit.two{width:386px;height:386px;border-color:rgba(255,43,214,.26);animation-duration:15s;animation-direction:reverse}
@keyframes orbit{from{transform:translate(-50%,-50%) rotateX(72deg) rotate(0)}
  to{transform:translate(-50%,-50%) rotateX(72deg) rotate(360deg)}}
.hub-orbit .moon{position:absolute;top:-7px;left:50%;width:13px;height:13px;margin-left:-6px;border-radius:50%;
  background:#7CFC72;box-shadow:0 0 14px #7CFC72}
.hub-orbit .moon.b{background:#ff2bd6;box-shadow:0 0 14px #ff2bd6}
.hub-logo{font-size:clamp(46px,7vw,82px);font-weight:900;letter-spacing:.04em;color:#fff;
  text-shadow:0 0 16px var(--neon),0 0 44px var(--neon),0 4px 0 rgba(0,0,0,.3)}
.hub-tag{color:var(--dim);letter-spacing:.16em;text-transform:uppercase;font-size:clamp(11px,1.5vw,14px)}
.hub-stats{display:flex;gap:18px;margin-top:8px;font-size:15px}
.hub-stats span{background:rgba(0,0,0,.3);border:1px solid var(--line);border-radius:12px;padding:7px 14px}
.hub-stats b{color:#fff}

.hub-side{display:flex;flex-direction:column;gap:14px;width:min(340px,90vw);padding:10px 0}
.hub-btn{position:relative;border:none;cursor:pointer;border-radius:18px;font-weight:900;letter-spacing:.02em;
  padding:15px 20px;font-size:18px;display:flex;align-items:center;gap:10px;justify-content:center;
  transition:transform .08s ease,box-shadow .08s ease;text-shadow:0 1px 0 rgba(255,255,255,.25)}
.hub-btn span{font-size:20px}
.hub-btn:active{transform:translateY(5px)!important}
.hub-btn.play{flex-direction:column;gap:2px;padding:20px;color:#06210f;
  background:linear-gradient(180deg,#8dfb83,#22c55e);box-shadow:0 8px 0 #15803d,0 16px 28px rgba(0,0,0,.45)}
.hub-btn.play:active{box-shadow:0 3px 0 #15803d,0 10px 18px rgba(0,0,0,.4)}
.hb-main{font-size:30px;font-weight:900}
.hb-sub{font-size:12px;font-weight:800;opacity:.82;letter-spacing:.05em}
.hub-btn.blue{color:#04142e;background:linear-gradient(180deg,#5cbcff,#2e6bff);box-shadow:0 6px 0 #1b49b3,0 12px 20px rgba(0,0,0,.4)}
.hub-btn.blue:active{box-shadow:0 2px 0 #1b49b3}
.hub-btn.teal{color:#042a26;background:linear-gradient(180deg,#62f2e2,#1fd6c0);box-shadow:0 6px 0 #0e9e8e,0 12px 20px rgba(0,0,0,.4)}
.hub-btn.teal:active{box-shadow:0 2px 0 #0e9e8e}
.hub-btn.grey{color:#0c1330;background:linear-gradient(180deg,#9aa6cc,#5a6488);
  box-shadow:0 6px 0 #3a4366,0 12px 20px rgba(0,0,0,.4)}
.hub-btn.grey:active{box-shadow:0 2px 0 #3a4366}

#hub-news{position:relative;z-index:2;display:flex;align-items:center;gap:12px;margin:0 auto 22px;
  max-width:760px;width:calc(100% - 40px);background:rgba(8,11,30,.7);border:1px solid var(--line);
  border-radius:14px;padding:11px 16px;backdrop-filter:blur(4px)}
.news-tag{flex-shrink:0;font-weight:900;font-size:11px;letter-spacing:.12em;color:#08210f;
  background:linear-gradient(180deg,#ffe14d,#ffb300);border-radius:8px;padding:4px 9px}
#hub-news-text{font-size:13px;color:var(--ink)}

@media (max-width:820px){
  #hub-main{flex-direction:column;justify-content:center;gap:18px;padding:10px 6vw;overflow-y:auto}
  .hub-side{width:min(420px,92vw)}
}

/* ---------- responsive ---------- */
@media (max-width:1000px){
  #main{grid-template-columns:1fr;grid-template-rows:auto 1fr auto;overflow-y:auto}
  #left,#right{max-height:none}
  #buildmenu{flex-direction:row;flex-wrap:nowrap;overflow-x:auto}
  .bcard{min-width:190px}
  #grid-wrap{min-height:50vh}
}
@media (max-width:560px){
  .logo{font-size:18px}.res{min-width:80px}
}
