:root{--bg:#05070b;--panel:#0c1119d1;--panel-solid:#0c1119;--panel-hi:#ffffff0b;--line:#94aac824;--line-hi:#94aac84d;--text:#dde5ee;--dim:#8b98ab;--faint:#5d6a7d;--amber:#ffb45e;--amber-dim:#b8814a;--cyan:#6ec8ff;--good:#5fd98f;--bad:#ff7a6b;--info:#7cc7ff;--r:10px;--ui-scale:1;--serif-num:"Cascadia Mono", "JetBrains Mono", "Consolas", monospace}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);height:100%;color:var(--text);-webkit-user-select:none;user-select:none;font-family:Inter,Segoe UI,system-ui,-apple-system,sans-serif;overflow:hidden}#app{font-size:calc(14px * var(--ui-scale));position:fixed;inset:0}#app.hc{--panel:#06090ef2;--line:#bed2eb59;--dim:#b3bfce;--text:#f2f6fa}canvas.gl{touch-action:none;cursor:crosshair;width:100%;height:100%;display:block;position:absolute;inset:0}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);-webkit-backdrop-filter:blur(14px)saturate(1.15);box-shadow:0 8px 32px #00000073, inset 0 1px 0 var(--panel-hi)}.panel-title{letter-spacing:.18em;text-transform:uppercase;color:var(--dim);align-items:center;gap:8px;padding:10px 14px 6px;font-size:.72em;font-weight:600;display:flex}.panel-title:before{content:"";background:var(--amber);width:6px;height:6px;box-shadow:0 0 8px var(--amber);border-radius:50%}button{color:inherit;cursor:pointer;background:0 0;border:none;font-family:inherit}.btn{border:1px solid var(--line);background:#141c28b3;border-radius:8px;align-items:center;gap:8px;padding:8px 14px;font-size:.92em;font-weight:500;transition:all .15s;display:inline-flex}.btn:hover{border-color:var(--line-hi);background:#222e40cc}.btn:active{transform:scale(.97)}.btn.primary{border-color:var(--amber-dim);color:var(--amber);background:#ffb45e14}.btn.primary:hover{background:#ffb45e29;box-shadow:0 0 18px #ffb45e2e}.btn.big{letter-spacing:.06em;padding:12px 26px;font-size:1.15em}.btn:disabled{opacity:.35;cursor:default}.btn:disabled:hover{border-color:var(--line);background:#141c28b3}.icon-btn{width:34px;height:34px;color:var(--dim);border:1px solid #0000;border-radius:8px;justify-content:center;align-items:center;font-size:1.05em;transition:all .15s;display:inline-flex}.icon-btn:hover{color:var(--text);border-color:var(--line);background:var(--panel)}.icon-btn.active{color:var(--amber);border-color:var(--amber-dim)}.hud{pointer-events:none;grid-template-rows:auto 1fr auto;grid-template-columns:minmax(230px,280px) 1fr minmax(220px,264px);gap:10px;padding:12px;display:grid;position:absolute;inset:0}.hud>*{pointer-events:auto}.topbar{grid-area:1/1/auto/4;align-items:center;gap:14px;padding:8px 14px;display:flex}.planet-id{flex-direction:column;gap:2px;min-width:130px;display:flex}.planet-name{letter-spacing:.08em;font-size:1.12em;font-weight:700}.planet-sub{color:var(--dim);letter-spacing:.12em;text-transform:uppercase;font-size:.7em}.topbar .sep{background:var(--line);width:1px;height:30px}.cycle-chip{flex-direction:column;align-items:center;padding:2px 14px;line-height:1.1;display:flex}.cycle-chip .n{font-family:var(--serif-num);color:var(--amber);font-size:1.35em;font-weight:700}.cycle-chip .l{letter-spacing:.22em;text-transform:uppercase;color:var(--dim);font-size:.62em}.stab-wrap{flex-direction:column;gap:4px;width:170px;display:flex}.stab-wrap .lab{color:var(--dim);letter-spacing:.1em;text-transform:uppercase;justify-content:space-between;font-size:.68em;display:flex}.stab-wrap .val{font-family:var(--serif-num);color:var(--text)}.gauge{background:#ffffff0f;border-radius:3px;height:6px;overflow:hidden}.gauge>div{border-radius:3px;height:100%;transition:width .6s cubic-bezier(.2,.8,.2,1),background .6s}.phase-pill{border:1px solid var(--line-hi);letter-spacing:.14em;text-transform:uppercase;color:var(--cyan);background:#6ec8ff0f;border-radius:999px;padding:5px 12px;font-size:.72em}.topbar .grow{flex:1}.left{flex-direction:column;grid-area:2/1;gap:10px;min-height:0;max-height:100%;display:flex}.inspector{max-height:100%;overflow-y:auto}.insp-head{align-items:center;gap:10px;padding:4px 14px 10px;display:flex}.insp-head .hexicon{width:42px;height:42px}.insp-head .names{flex-direction:column;gap:2px;display:flex}.insp-head .bname{letter-spacing:.03em;font-size:1.05em;font-weight:700}.insp-head .sname{color:var(--amber);letter-spacing:.05em;font-size:.78em}.insp-desc{color:var(--dim);padding:0 14px 10px;font-size:.82em;line-height:1.45}.bars{flex-direction:column;gap:7px;padding:2px 14px 10px;display:flex}.barrow{color:var(--dim);grid-template-columns:86px 1fr 44px;align-items:center;gap:8px;font-size:.76em;display:grid}.barrow .gauge{height:5px}.barrow .num{font-family:var(--serif-num);color:var(--text);text-align:right;font-size:.95em}.yields-row{flex-wrap:wrap;gap:6px;padding:2px 14px 10px;display:flex}.chip{font-size:.8em;font-family:var(--serif-num);border:1px solid var(--line);white-space:nowrap;background:#ffffff0d;border-radius:7px;padding:4px 10px}.chip.pos{color:var(--good);border-color:#5fd98f4d}.chip.neg{color:var(--bad);border-color:#ff7a6b4d}.chip.neutral{color:var(--dim)}.chip.combo{color:var(--amber);border-color:var(--amber-dim);background:#ffb45e12}.sect-gap{background:var(--line);height:1px;margin:6px 14px}.insp-list{color:var(--dim);flex-direction:column;gap:4px;padding:4px 14px 12px;font-size:.8em;display:flex}.insp-list .row{justify-content:space-between;gap:8px;display:flex}.insp-list .row b{color:var(--text);font-weight:600}.hexicon{color:#0a0d12;clip-path:polygon(50% 0%,93% 25%,93% 75%,50% 100%,7% 75%,7% 25%);text-shadow:0 1px #ffffff40;background:#888;justify-content:center;align-items:center;width:34px;height:34px;font-size:1.1em;font-weight:700;display:inline-flex}.right{flex-direction:column;grid-area:2/3;gap:10px;max-height:100%;display:flex;overflow-y:auto}.pvars{flex-direction:column;gap:9px;padding:2px 14px 14px;display:flex}.pvar{cursor:default;flex-direction:column;gap:3px;display:flex}.pvar .top{justify-content:space-between;align-items:baseline;font-size:.78em;display:flex}.pvar .top .nm{color:var(--dim);align-items:center;gap:6px;display:flex}.pvar .top .vl{font-family:var(--serif-num);font-weight:600}.pvar .top .dl{font-size:.8em;font-family:var(--serif-num);margin-left:4px}.dl.pos{color:var(--good)}.dl.neg{color:var(--bad)}.obj{flex-direction:column;gap:9px;padding:2px 14px 12px;display:flex}.objrow{flex-direction:column;gap:3px;font-size:.8em;display:flex}.objrow .lab{color:var(--dim);justify-content:space-between;display:flex}.objrow .lab b{color:var(--text);font-weight:600}.objrow.done .lab b{color:var(--good)}.objrow .bar{background:#ffffff0f;border-radius:2px;height:4px;overflow:hidden}.objrow .bar>div{background:linear-gradient(90deg, var(--cyan), var(--good));border-radius:2px;height:100%;transition:width .5s}.bottom{grid-area:3/1/auto/4;align-items:flex-end;gap:10px;display:flex}.tray{flex:1;min-width:0}.tray-items{scrollbar-width:thin;gap:8px;padding:4px 14px 14px;display:flex;overflow-x:auto}.tray-item{border:1px solid var(--line);background:#121924b3;border-radius:9px;flex-direction:column;flex:none;align-items:center;gap:5px;width:86px;padding:8px 6px;transition:all .15s;display:flex;position:relative}.tray-item:hover{border-color:var(--line-hi);transform:translateY(-2px)}.tray-item.sel{border-color:var(--amber);background:#ffb45e14;box-shadow:0 0 16px #ffb45e40}.tray-item.locked{opacity:.42}.tray-item.unaffordable .cost{color:var(--bad)}.tray-item .nm{text-align:center;min-height:1.9em;color:var(--text);font-size:.68em;line-height:1.15}.tray-item .cost{font-size:.66em;font-family:var(--serif-num);color:var(--dim);white-space:nowrap}.tray-item .kb{color:var(--faint);font-size:.6em;font-family:var(--serif-num);position:absolute;top:3px;right:5px}.resbar{flex-direction:column;gap:6px;min-width:150px;padding:12px 16px;display:flex}.resrow{align-items:center;gap:8px;font-size:.86em;display:flex}.resrow .ic{text-align:center;width:20px}.resrow .amt{font-family:var(--serif-num);min-width:42px;font-weight:600}.resrow .net{font-family:var(--serif-num);color:var(--dim);font-size:.8em}.resrow .net.pos{color:var(--good)}.resrow .net.neg{color:var(--bad)}.resrow .tip{color:var(--faint);margin-left:auto;font-size:.68em}.hint-line{color:var(--dim);background:var(--panel);border:1px solid var(--line);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);white-space:nowrap;border-radius:999px;grid-area:3/2;place-self:end center;margin-bottom:12px;padding:6px 14px;font-size:.74em}.toasts{pointer-events:none;z-index:40;flex-direction:column;align-items:center;gap:8px;display:flex;position:absolute;bottom:120px;left:50%;transform:translate(-50%)}.toast{background:var(--panel);border:1px solid var(--line-hi);color:var(--text);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-radius:999px;align-items:center;gap:8px;max-width:70vw;padding:9px 18px;font-size:.9em;animation:.35s cubic-bezier(.2,.9,.3,1.2) toastin;display:flex;box-shadow:0 6px 24px #00000080}.toast.good{border-color:#5fd98f80}.toast.bad{border-color:#ff7a6b8c}@keyframes toastin{0%{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}.toast.out{opacity:0;transition:opacity .4s,transform .4s;transform:translateY(-8px)}#floats{pointer-events:none;z-index:35;position:absolute;inset:0;overflow:hidden}.float-num{font-family:var(--serif-num);text-shadow:0 2px 6px #000c;white-space:nowrap;font-size:.95em;font-weight:700;animation:1.6s ease-out forwards floatup;position:absolute;transform:translate(-50%,-50%)}.float-num.good{color:var(--good)}.float-num.bad{color:var(--bad)}.float-num.info{color:var(--cyan)}@keyframes floatup{0%{opacity:0;margin-top:8px}12%{opacity:1}75%{opacity:1}to{opacity:0;margin-top:-46px}}.log{grid-area:2/1;align-self:flex-end;max-width:280px}.log-items{flex-direction:column-reverse;gap:6px;max-height:170px;padding:0 12px 10px;display:flex;overflow-y:auto}.log-item{color:var(--dim);border-left:2px solid var(--line);padding-left:8px;font-size:.78em;line-height:1.3}.log-item .c{color:var(--faint);font-family:var(--serif-num);font-size:.9em}.log-item.good{border-color:#5fd98f80}.log-item.bad{border-color:#ff7a6b80}.overlay{z-index:60;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#0305089e;justify-content:center;align-items:center;animation:.25s fadein;display:flex;position:absolute;inset:0}@keyframes fadein{0%{opacity:0}to{opacity:1}}.modal{width:min(860px,94vw);max-height:88vh;padding:0;overflow-y:auto}.modal-head{background:linear-gradient(var(--panel-solid), var(--panel-solid) 70%, transparent);z-index:2;align-items:center;gap:12px;padding:16px 22px 10px;display:flex;position:sticky;top:0}.modal-head h2{letter-spacing:.14em;text-transform:uppercase;font-size:1.15em;font-weight:700}.modal-head .grow{flex:1}.modal-body{padding:8px 22px 24px}.event-card{text-align:center;max-width:620px;margin:0 auto}.event-card .big-icon{margin:10px 0 4px;font-size:3em}.event-card h2{letter-spacing:.1em;color:var(--amber);margin-bottom:10px;font-size:1.5em}.event-card .txt{color:var(--dim);margin-bottom:24px;font-size:1.02em;line-height:1.55}.event-opts{flex-direction:column;gap:12px;display:flex}.event-opt{text-align:left;border:1px solid var(--line);background:#141c2899;border-radius:10px;width:100%;padding:13px 18px;transition:all .15s}.event-opt:hover{border-color:var(--amber-dim);background:#ffb45e0f;transform:translate(4px)}.event-opt .t{color:var(--amber);margin-bottom:3px;font-weight:600}.event-opt .d{color:var(--dim);font-size:.85em}.tech-grid{grid-template-columns:repeat(6,1fr);gap:10px;display:grid}.tech-col h3{text-transform:uppercase;letter-spacing:.14em;color:var(--cyan);text-align:center;padding:4px 2px 10px;font-size:.72em}.tech-node{border:1px solid var(--line);cursor:default;background:#10162099;border-radius:9px;margin-bottom:8px;padding:9px 10px;font-size:.8em;position:relative}.tech-node .tn{align-items:center;gap:6px;font-size:1.02em;font-weight:600;display:flex}.tech-node .tc{color:var(--dim);margin-top:4px;font-size:.88em;line-height:1.3}.tech-node .cost{font-family:var(--serif-num);color:var(--dim);font-size:.9em;position:absolute;top:8px;right:10px}.tech-node.available{border-color:var(--line-hi);cursor:pointer}.tech-node.available:hover{border-color:var(--amber);background:#ffb45e0d}.tech-node.done{background:#5fd98f0f;border-color:#5fd98f66}.tech-node.done .tn{color:var(--good)}.tech-node.current{border-color:var(--amber);box-shadow:0 0 14px #ffb45e33}.tech-node.locked{opacity:.45}.tech-node .prog{background:var(--amber);border-radius:0 0 9px 9px;height:3px;position:absolute;bottom:0;left:0}.tech-researching{border:1px solid var(--amber-dim);background:#ffb45e0f;border-radius:10px;align-items:center;gap:12px;margin-bottom:14px;padding:10px 16px;font-size:.9em;display:flex}.set-grid{grid-template-columns:1fr 1fr;gap:14px 26px;display:grid}.set-row{border-bottom:1px dashed #94aac814;justify-content:space-between;align-items:center;gap:12px;padding:7px 0;font-size:.92em;display:flex}.seg{border:1px solid var(--line);border-radius:8px;display:inline-flex;overflow:hidden}.seg button{color:var(--dim);padding:6px 12px;font-size:.85em}.seg button.on{color:var(--amber);background:#ffb45e24}input[type=range]{accent-color:var(--amber);width:130px}input[type=text]{border:1px solid var(--line);color:var(--text);font-family:var(--serif-num);background:#00000059;border-radius:8px;width:100%;padding:8px 10px}input[type=checkbox]{accent-color:var(--amber);cursor:pointer;width:17px;height:17px}.menu-wrap{z-index:70;background:radial-gradient(120% 90% at 50% 40%,#0000 40%,#020407d1 100%);flex-direction:column;justify-content:center;align-items:center;gap:18px;display:flex;position:absolute;inset:0}.menu-logo{text-align:center}.menu-logo .l1{letter-spacing:.34em;text-indent:.34em;background:linear-gradient(#f4f7fb,#9fb4cc 65%,#66809e);color:#0000;filter:drop-shadow(0 0 26px #82b4e640);-webkit-background-clip:text;background-clip:text;font-size:4.6em;font-weight:800}.menu-logo .l2{letter-spacing:.3em;text-transform:uppercase;color:var(--dim);margin-top:6px;font-size:.95em}.menu-cards{flex-wrap:wrap;justify-content:center;gap:12px;max-width:900px;display:flex}.mode-card{border:1px solid var(--line);background:var(--panel);text-align:center;border-radius:12px;width:148px;padding:14px 12px;transition:all .18s}.mode-card:hover{border-color:var(--line-hi);transform:translateY(-3px)}.mode-card.on{border-color:var(--amber);box-shadow:0 0 20px #ffb45e2e}.mode-card .mi{margin-bottom:6px;font-size:1.6em}.mode-card .mn{margin-bottom:4px;font-size:.92em;font-weight:600}.mode-card .md{color:var(--dim);font-size:.72em;line-height:1.35}.menu-seed{align-items:center;gap:10px;width:380px;display:flex}.menu-actions{gap:14px;margin-top:8px;display:flex}.menu-foot{color:var(--faint);text-align:center;max-width:620px;font-size:.72em;line-height:1.5}.menu-best{color:var(--dim);letter-spacing:.06em;font-size:.85em}.menu-best b{color:var(--amber);font-family:var(--serif-num)}.report{z-index:75;overflow-y:auto}.report-inner{text-align:center;width:min(980px,96vw);margin:auto;padding:30px 0 60px}.report h1{letter-spacing:.24em;text-indent:.24em;margin-bottom:6px;font-size:3em;font-weight:800}.report.win h1{color:var(--good);text-shadow:0 0 40px #5fd98f66}.report.lose h1{color:var(--bad);text-shadow:0 0 40px #ff7a6b59}.report .sub{color:var(--dim);margin-bottom:26px;font-size:1.05em}.report .score-line{justify-content:center;align-items:baseline;gap:18px;margin-bottom:6px;display:flex}.report .score{font-family:var(--serif-num);color:var(--amber);font-size:3.4em;font-weight:800}.report .grade{color:var(--text);border:2px solid var(--line-hi);border-radius:12px;padding:2px 18px;font-size:1.8em;font-weight:800}.report .replay-bar{max-width:620px;margin:18px auto 26px}.report .replay-bar .lab{color:var(--dim);justify-content:space-between;margin-top:4px;font-size:.78em;display:flex}.report .vitals{grid-template-columns:repeat(3,1fr);gap:10px 20px;max-width:640px;margin:0 auto 26px;display:grid}.vital{flex-direction:column;gap:4px;display:flex}.replay-slider{width:100%;accent-color:var(--amber)}.report-parts{text-align:left;grid-template-columns:repeat(3,1fr);gap:6px 20px;max-width:640px;margin:10px auto 26px;font-size:.85em;display:grid}.report-parts .row{color:var(--dim);border-bottom:1px dashed #94aac81a;justify-content:space-between;padding:3px 0;display:flex}.report-parts .row b{font-family:var(--serif-num);color:var(--text);font-weight:600}.report-stats{color:var(--dim);justify-content:center;gap:26px;margin:10px 0 20px;font-size:.85em;display:flex}.report-stats b{font-family:var(--serif-num);color:var(--text);font-size:1.3em;display:block}.screen-flash{z-index:30;pointer-events:none;opacity:0;position:absolute;inset:0}.screen-flash.good{background:radial-gradient(80% 60% at 50% 60%,#5fd98f29,#0000 70%)}.screen-flash.bad{background:radial-gradient(80% 60%,#ff7a6b29,#0000 70%)}.screen-flash.info{background:radial-gradient(80% 60% at 50% 40%,#7cc7ff21,#0000 70%)}.screen-flash.go{animation:1s ease-out flash}@keyframes flash{0%{opacity:0}18%{opacity:1}to{opacity:0}}.debug{z-index:45;width:250px;font-family:var(--serif-num);color:var(--dim);padding:10px 12px;font-size:.7em;line-height:1.6;position:absolute;bottom:120px;left:12px}.debug b{color:var(--amber)}.debug .btns{flex-wrap:wrap;gap:5px;margin-top:6px;display:flex}.debug .btn{padding:3px 7px;font-size:.95em}.tip-pop{z-index:90;background:var(--panel-solid);border:1px solid var(--line-hi);max-width:300px;color:var(--dim);pointer-events:none;border-radius:9px;padding:9px 12px;font-size:.8em;line-height:1.45;position:fixed;box-shadow:0 10px 30px #0009}.tip-pop b{color:var(--text)}@media (max-width:1100px){.hud{grid-template-columns:1fr}.left{grid-row:2;max-height:26vh}.right{grid-area:2/1;max-height:30vh}.bottom{flex-direction:column;grid-row:3;align-items:stretch}.tech-grid{grid-template-columns:repeat(3,1fr)}}@media (max-width:720px){.hud{gap:6px;padding:6px}.topbar{flex-wrap:wrap;gap:6px}.tech-grid{grid-template-columns:repeat(2,1fr)}.report .vitals,.report-parts{grid-template-columns:1fr 1fr}}.cb .chip.pos:before{content:"▲ ";font-size:.8em}.cb .chip.neg:before{content:"▼ ";font-size:.8em}.cb .resrow .net.pos:before{content:"↑ "}.cb .resrow .net.neg:before{content:"↓ "}.cb .toast.good:before{content:"✓ "}.cb .toast.bad:before{content:"✗ "}button:focus-visible,.tray-item:focus-visible,input:focus-visible{outline:2px solid var(--cyan);outline-offset:2px}
