*{margin:0;padding:0;box-sizing:border-box}:root{--ink: rgba(235, 235, 235, .92);--ink-dim: rgba(235, 235, 235, .45);--yellow: #ffd23f;--red: #ff4f42;--field: #0a0a0c;--panel: rgb(12, 12, 16);--line: rgba(235, 235, 235, .22)}html,body{height:100%;background:var(--field);color:var(--ink);font-family:ui-monospace,JetBrains Mono,Cascadia Mono,monospace;overflow:hidden;user-select:none}#map{position:fixed;inset:0;width:100vw;height:100vh;cursor:grab}#map:active{cursor:grabbing}#ui{position:fixed;inset:0;pointer-events:none}#ui>*{pointer-events:auto}#ui .hud{pointer-events:none}#ui .hud>*{pointer-events:auto}.picker{position:fixed;inset:0;background:var(--field);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:18px}.logo{font-size:54px;letter-spacing:.35em;font-weight:700;border:1px solid var(--ink);padding:12px 28px 12px 38px}.tagline{color:var(--ink-dim);font-size:13px;letter-spacing:.08em}.scenario-cards{display:flex;gap:14px;margin-top:18px;flex-wrap:wrap;justify-content:center}.scenario-card{width:240px;min-height:210px;text-align:left;background:transparent;border:1px solid var(--line);color:var(--ink);font-family:inherit;padding:16px;cursor:pointer;transition:border-color .15s}.scenario-card:hover{border-color:var(--yellow)}.scenario-card.sandbox{border-style:dashed}.sc-name{font-size:16px;letter-spacing:.15em;margin-bottom:8px}.sc-tagline{color:var(--ink-dim);font-size:11px;margin-bottom:10px;min-height:28px}.sc-teaches{color:var(--yellow);font-size:10px;margin-bottom:10px}.sc-goals{list-style:none;font-size:10px;color:var(--ink-dim)}.sc-goals li:before{content:"□ "}.topbar{position:fixed;top:0;left:0;right:0;display:flex;align-items:center;gap:12px;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--line);font-size:11px;z-index:46}.ticker{border:1px solid var(--ink);padding:5px 10px;letter-spacing:.12em;font-size:12px;white-space:nowrap}.build-id{margin-left:8px;padding-left:8px;border-left:1px solid var(--line);color:var(--ink-dim);font-size:9px;letter-spacing:.04em}.ticker-alarm{border-color:var(--red);color:var(--red);animation:blink 1s steps(2) infinite}@keyframes blink{50%{opacity:.45}}.needle{width:130px;height:64px}.statusbars{display:flex;flex-direction:column;gap:3px;min-width:190px}.bar{display:flex;align-items:center;gap:6px}.bar-label{width:56px;font-size:9px;color:var(--ink-dim);letter-spacing:.1em}.bar-track{position:relative;flex:1;height:13px;border:1px solid var(--line)}.bar-fill{height:100%;background:#ebebeb59;transition:width .4s}.bar-fill.warn{background:#ffd23f8c}.bar-fill.crit{background:#ff4f42a6}.bar-text{position:absolute;inset:0;display:flex;align-items:center;justify-content:flex-end;padding-right:4px;font-size:9px;color:var(--ink)}.clock,.weather,.cash,.approval{white-space:nowrap;color:var(--ink-dim)}.cash{color:var(--yellow)}.speed-controls{display:flex;gap:2px}.speed-btn{background:transparent;border:1px solid var(--line);color:var(--ink-dim);font-family:inherit;font-size:10px;padding:4px 8px;cursor:pointer}.speed-btn.active{border-color:var(--yellow);color:var(--yellow)}.panel{position:fixed;background:var(--panel);border:1px solid var(--line);padding:10px;font-size:11px;backdrop-filter:blur(3px)}.panel-title{font-size:10px;letter-spacing:.18em;color:var(--ink-dim);border-bottom:1px solid var(--line);padding-bottom:6px;margin-bottom:8px}.build-menu{left:10px;top:96px;width:210px;max-height:calc(100vh - 300px);overflow-y:auto}.build-btn{display:flex;justify-content:space-between;width:100%;background:transparent;border:1px solid transparent;color:var(--ink);font-family:inherit;font-size:11px;padding:5px 6px;cursor:pointer;text-align:left}.build-btn:hover{border-color:var(--line)}.build-btn.active{border-color:var(--yellow);color:var(--yellow)}.build-btn .cost{color:var(--ink-dim)}.hint{color:var(--ink-dim);font-size:10px;margin-top:6px}.inspector{right:10px;top:96px;width:250px}.kv{display:flex;justify-content:space-between;padding:3px 0}.kv span:first-child{color:var(--ink-dim)}.warn-text,.warn-text span{color:var(--yellow)!important}.row{display:flex;gap:6px;align-items:center;margin:4px 0}.act{background:transparent;border:1px solid var(--line);color:var(--ink);font-family:inherit;font-size:10px;padding:5px 8px;cursor:pointer;margin-top:6px;display:block;width:100%}.row .act{width:auto;margin-top:0}.topbar .act{width:auto;margin:0}.act:hover{border-color:var(--ink)}.act:disabled{opacity:.35;cursor:default}.warn-btn{border-color:var(--red);color:var(--red)}.goals.won{border-color:var(--yellow)}.goals.lost{border-color:var(--red)}.goal{padding:3px 0;color:var(--ink-dim)}.goal.done{color:var(--yellow)}.charts-dock{position:fixed;bottom:0;left:0;right:0;display:flex;gap:8px;height:170px;background:var(--panel);border-top:1px solid var(--line);padding:10px}.chart{flex:1;height:100%;background:var(--panel)}.chart.tall{height:190px}.incident-console{position:fixed;bottom:10px;left:10px;right:10px;background:#140606eb;border:1px solid var(--red);padding:10px;display:flex;flex-direction:column;gap:8px;max-height:46vh}.incident-head{display:flex;align-items:center;gap:12px;font-size:12px}.alarm-chip{background:var(--red);color:#0a0a0c;padding:2px 8px;font-weight:700;letter-spacing:.15em;font-size:10px}.incident-cause{flex:1}.incident-t{color:var(--ink-dim)}.incident-charts{display:flex;gap:8px;height:190px}.incident-verbs{display:flex;gap:8px}.incident-verbs .act{width:auto;margin:0}.incident-log,.report-log{overflow-y:auto;font-size:10px;line-height:1.5;max-height:120px}.report-log{max-height:180px}.log-line{color:var(--ink-dim)}.log-t{color:#ebebeb4d;display:inline-block;width:64px}.log-trip{color:var(--red)}.log-shed{color:var(--yellow)}.log-alarm{color:var(--red);font-weight:700}.log-protection{color:#ff9d5c}.log-recovery{color:#8cffaa}.modal-back{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:70}.modal{width:min(860px,92vw);max-height:86vh;overflow-y:auto;background:var(--panel);border:1px solid var(--ink);padding:16px;font-size:11px}.ticker-warn{border-color:var(--yellow);color:var(--yellow)}.debt{color:var(--red);white-space:nowrap}.toast{position:fixed;top:84px;left:50%;transform:translate(-50%);background:var(--panel);border:1px solid var(--yellow);color:var(--yellow);padding:8px 16px;font-size:11px;z-index:60}.terminal-banner{position:fixed;top:38%;left:50%;transform:translate(-50%,-50%);background:#0a0a0ef5;padding:26px 44px;text-align:center;z-index:55}.won-banner{border:1px solid var(--yellow)}.lost-banner{border:1px solid var(--red)}.tb-title{font-size:26px;letter-spacing:.3em;margin-bottom:10px}.won-banner .tb-title{color:var(--yellow)}.lost-banner .tb-title{color:var(--red)}.tb-sub{color:var(--ink);font-size:12px;margin-bottom:8px}.tb-hint{color:var(--ink-dim);font-size:10px}.speed-btn.active,.build-btn.active{border-color:var(--ink);color:var(--ink)}.cash,.goal.done{color:var(--ink)}.goals.won{border-color:var(--ink)}.advisor{position:static;width:100%;border-color:var(--ink);flex:0 0 auto}.advisor .panel-title{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}.tut-skip{background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:11px;padding:0 2px}.tut-skip:hover{color:var(--ink)}.tut-body{font-size:11px;line-height:1.55;color:var(--ink);margin-bottom:8px}.tut-task{font-size:11px;color:var(--yellow);letter-spacing:.03em}.tut-flash{border-color:var(--yellow);box-shadow:0 0 18px #ffd23f59}.tut-glow{outline:1px solid var(--yellow);box-shadow:0 0 12px #ffd23f8c;animation:tutpulse 1.2s ease-in-out infinite}@keyframes tutpulse{0%,to{box-shadow:0 0 6px #ffd23f4d}50%{box-shadow:0 0 16px #ffd23fb3}}.pnl{white-space:nowrap;font-size:11px}.pnl-up{color:#8cffaa}.pnl-down{color:var(--red)}.chart-ranges{position:absolute;top:-22px;left:0;right:0;display:flex;gap:2px;align-items:center}.chart-pages{margin-left:auto;display:flex;gap:2px}.page-btn{background:var(--panel);border:1px solid var(--line);color:var(--ink-dim);font-size:9px;padding:2px 10px;cursor:pointer;letter-spacing:.1em}.page-btn.active{border-color:var(--yellow);color:var(--yellow)}.charts-dock{flex-wrap:nowrap}.range-btn{background:var(--panel);border:1px solid var(--line);color:var(--ink-dim);font-size:9px;padding:2px 8px;cursor:pointer;letter-spacing:.08em}.range-btn.active{border-color:var(--ink);color:var(--ink)}.daynight{color:var(--yellow);font-size:12px}.left-rail{position:fixed;left:10px;top:90px;bottom:182px;width:316px;display:flex;flex-direction:column;gap:10px;pointer-events:none;overflow-y:auto;overflow-x:hidden}.left-rail .panel{position:static;width:100%;flex:0 0 auto}.build-menu{max-height:32vh;overflow-y:auto}.daylight{width:84px;height:30px;flex:0 0 84px;border:1px solid var(--line)}.cell-menu{width:230px;z-index:45;max-height:60vh;overflow-y:auto;border-color:var(--yellow);box-shadow:0 6px 26px #000000b3}.cell-menu .panel-title{display:flex;justify-content:space-between;align-items:center;gap:8px}.build-btn.cant{opacity:.4}.tech-modal{width:min(680px,92vw)}.tech-grid{display:flex;flex-direction:column;gap:2px}.tech-row{display:flex;justify-content:space-between;gap:10px;width:100%;background:transparent;border:1px solid transparent;color:var(--ink);font-family:inherit;font-size:11px;padding:6px;text-align:left}.tech-row.ready{border-color:var(--line);cursor:pointer}.tech-row.ready:hover{border-color:var(--yellow);color:var(--yellow)}.tech-row.done{color:var(--ink-dim)}.tech-row.locked{color:#ebebeb47}.tech-row .cost{color:var(--ink-dim);white-space:nowrap}.blurb{color:var(--ink-dim);font-size:10px;line-height:1.5;border-left:2px solid var(--line);padding-left:8px;margin-bottom:8px}.field-label{text-decoration:underline dotted rgba(235,235,235,.35);text-underline-offset:3px;cursor:help}.chart-legend-hint{color:var(--ink-dim);font-size:9px;margin-left:10px}.chart{cursor:crosshair}.end-back{backdrop-filter:blur(2px);background:#000000c7}.end-screen{width:min(680px,94vw);padding:22px 26px;text-align:left}.end-won{border-color:var(--yellow)}.end-lost{border-color:var(--red)}.end-title{font-size:30px;letter-spacing:.28em;margin-bottom:6px}.end-won .end-title{color:var(--yellow)}.end-lost .end-title{color:var(--red)}.end-reason{color:var(--ink);font-size:12px;margin-bottom:16px}.end-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-bottom:14px}.end-stats div{border:1px solid var(--line);padding:8px;text-align:center}.end-stats b{display:block;font-size:17px;color:var(--ink)}.end-stats span{font-size:9px;color:var(--ink-dim);letter-spacing:.06em}.end-log{max-height:130px;margin-bottom:14px}.end-actions{display:flex;gap:8px;flex-wrap:wrap}.end-actions .act{width:auto;margin:0;padding:8px 14px;font-size:11px}.blackstart-prompt{position:fixed;left:50%;top:46%;transform:translate(-50%,-50%);width:min(440px,90vw);background:#100606f5;border:1px solid var(--red);padding:20px 24px;text-align:center;z-index:46}.bs-title{color:var(--red);font-size:20px;letter-spacing:.3em;margin-bottom:10px}.bs-body{color:var(--ink-dim);font-size:11px;line-height:1.6;margin-bottom:14px}.blackstart-prompt .act{width:auto;margin:0 auto;padding:10px 18px;font-size:12px}.topbar{flex-wrap:wrap;row-gap:6px}.topbar{flex-wrap:nowrap}.clock,.weather,.cash,.approval,.pnl,.debt{font-variant-numeric:tabular-nums;display:inline-block;text-align:right}.clock{min-width:108px}.weather{min-width:72px;text-align:left}.cash{min-width:62px}.pnl{min-width:76px}.approval{min-width:92px}.debt{min-width:78px}.bar-text{font-variant-numeric:tabular-nums}.topbar .act{white-space:nowrap}.topbar{gap:8px;padding:6px 10px;font-size:10px}.needle{width:104px;height:56px}.statusbars{min-width:158px}.bar-label{width:46px;font-size:8px}.bar-track{height:11px}.speed-btn{padding:4px 6px}.topbar .act{padding:5px 7px;font-size:10px}.daylight{width:72px;height:26px;flex:0 0 72px}.ticker{width:252px;display:inline-block;text-align:left}.topbar .act{width:64px;text-align:center;overflow:hidden;padding:5px 2px;text-overflow:ellipsis;white-space:nowrap}.ticker{width:236px}.approval{min-width:74px}.clock{min-width:100px}.econ-modal{width:min(1020px,96vw);max-height:88vh;overflow-y:auto}.econ-deal{color:var(--ink-dim);font-size:11px;line-height:1.55;border-left:2px solid var(--yellow);padding:6px 0 6px 10px;margin:8px 0 12px}.econ-deal b{color:var(--ink)}.econ-heads{display:flex;gap:10px;margin-bottom:12px}.econ-heads>div{flex:1;background:var(--panel);border:1px solid var(--line);padding:8px 10px;display:flex;flex-direction:column;gap:2px}.econ-heads b{font-size:19px;letter-spacing:.04em}.econ-heads span{font-size:9px;color:var(--ink-dim);letter-spacing:.08em}.econ-heads .good b{color:#78eba0}.econ-heads .bad b{color:var(--red)}.econ-cols{display:flex;gap:12px;align-items:flex-start}.econ-col{flex:1;min-width:0}.econ-block{display:flex;align-items:baseline;gap:8px;font-size:10px;padding:4px 6px;border-bottom:1px solid var(--line)}.econ-block .n{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.econ-block .mw{color:var(--ink-dim);font-variant-numeric:tabular-nums}.econ-block .wtp{color:var(--ink-dim);min-width:74px;text-align:right}.econ-block .wtp.good{color:#78eba0}.econ-block .wtp.bad{color:var(--red)}.econ-block .tag{font-size:8px;letter-spacing:.1em;border:1px solid var(--line);padding:0 4px;color:var(--ink-dim)}.econ-block .tag.bad{color:var(--red);border-color:var(--red)}.econ-block.pricedout .n,.econ-block.idle .n{color:var(--ink-dim);opacity:.6}.econ-block.dark{background:#ff4f4217}.econ-block.prospect .n{color:var(--yellow)}.econ-block.rival{border:1px solid rgba(200,110,140,.55);margin-top:6px}.econ-block.rival.full{border-color:var(--yellow)}.econ-why{font-size:10px;color:var(--ink-dim);line-height:1.55;margin-top:8px;padding:6px 8px;background:var(--panel);border-left:2px solid rgba(200,110,140,.55)}.econ-share{font-size:10px;margin-top:8px;color:var(--ink-dim)}.econ-share b{color:var(--ink);font-size:13px}.econ-ledger{font-size:11px}.econ-ledger .kv{padding:3px 6px}.econ-ledger .good{color:#78eba0}.econ-ledger .bad{color:var(--red)}.econ-net{border-top:1px solid var(--line);margin-top:3px;padding-top:5px!important;font-weight:700}.econ-debt{margin-top:10px;font-size:10px;color:var(--ink-dim);line-height:1.6;border-left:2px solid var(--red);padding:6px 0 6px 10px}.econ-debt b{color:var(--ink)}.gear-wrap{position:relative}.gear{font-size:13px;line-height:1;padding:3px 8px}.gear-scrim{position:fixed;inset:0;z-index:1}.gear-menu{position:absolute;top:calc(100% + 6px);right:0;z-index:2;width:216px;background:var(--panel);border:1px solid var(--line);padding:8px;display:flex;flex-direction:column;gap:4px}.gear-menu .act{display:flex;justify-content:space-between;width:100%}.gear-menu .hint{margin-top:4px}.riva-count{margin-left:auto;color:var(--ink-dim);letter-spacing:.08em}.riva-row{display:flex;gap:10px;align-items:flex-start}.riva-face{width:40px;height:40px;flex:0 0 40px;color:var(--yellow);border:1px solid var(--line);padding:2px;background:var(--field)}.riva-speech{flex:1;min-width:0}.riva-topic{font-size:10px;letter-spacing:.16em;color:var(--yellow);margin-bottom:5px}.tut-task.is-done{color:#78eba0}.riva-nav{display:flex;gap:6px;margin-top:9px}.riva-nav .act{flex:1;margin-top:0;text-align:center}.riva-nav .act.primary{border-color:var(--yellow);color:var(--yellow)}.riva-recall{align-self:flex-start;background:var(--panel);border:1px solid var(--line);color:var(--yellow);cursor:pointer;padding:3px;line-height:0}.riva-recall:hover{border-color:var(--yellow)}.left-rail>*{pointer-events:auto}.econ-lost{color:#c86e8ce6}.riva-urgent{margin-top:9px;padding:7px 9px;font-size:11px;line-height:1.5;border-left:2px solid var(--red);background:#ff4f421a;color:var(--ink)}.riva-urgent b{color:var(--red);letter-spacing:.06em}.retire-danger{margin-top:6px;padding:6px 8px;font-size:10px;line-height:1.5;border:1px solid var(--red);color:var(--ink);background:#ff4f421f}.modal-close{position:absolute;top:8px;right:10px;z-index:2;background:none;border:none;color:var(--ink-dim);cursor:pointer;font-size:13px;padding:2px 4px;line-height:1}.modal-close:hover{color:var(--ink)}.econ-modal{position:relative}.src-dot{width:7px;height:7px;flex:0 0 7px;display:inline-block;border-radius:1px}.econ-ranges{display:flex;gap:2px;margin-bottom:6px}.econ-charts{display:flex;gap:8px;height:148px}.econ-charts .chart{flex:1;height:100%}
