:root{--bg:#0f1419;--ink:#e8eef2;--ink-dim:#8a99a6;--panel:#1a2129;--panel-edge:#2c3a47;--accent:#4db8a0;--gain:#46d39a;--loss:#f0655a;--warn:#e8b84b;--font:ui-monospace, "SF Mono", "Cascadia Code", Menlo, monospace}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);height:100%;overflow:hidden}body{font-family:var(--font);color:var(--ink);touch-action:none;-webkit-user-select:none;user-select:none}#game-root{cursor:grab;position:absolute;inset:0}#game-root.dragging{cursor:grabbing}#ui{pointer-events:none;z-index:10;position:absolute;inset:0}.panel,.topbar,.btn,.popover,.modal{pointer-events:auto}.topbar{border-bottom:1px solid var(--panel-edge);background:linear-gradient(#1a2129 0%,#161c23 100%);align-items:center;gap:18px;height:52px;padding:0 18px;display:flex;position:absolute;top:0;left:0;right:0}.brand{letter-spacing:.5px;color:var(--accent);font-size:13px;font-weight:700}.brand small{color:var(--ink-dim);letter-spacing:0;font-weight:400}.stat{flex-direction:column;line-height:1.2;display:flex}.stat .k{color:var(--ink-dim);text-transform:uppercase;letter-spacing:1px;font-size:9px}.stat .v{font-size:15px;font-weight:600}.spacer{flex:1}.topbtns{gap:8px;display:flex}.btn{font-family:var(--font);color:var(--ink);background:var(--panel);border:1px solid var(--panel-edge);cursor:pointer;border-radius:4px;padding:7px 12px;font-size:11px;transition:border-color .15s,background .15s}.btn:hover{border-color:var(--accent)}.btn.active{background:var(--accent);color:#0c1116;border-color:var(--accent);font-weight:600}.toolbar{pointer-events:none;z-index:11;gap:8px;display:flex;position:absolute;top:60px;left:16px}.toolbar .btn{pointer-events:auto;box-shadow:0 4px 16px #0006}.panel{background:var(--panel);border:1px solid var(--panel-edge);border-radius:6px;font-size:12px;position:absolute;overflow:hidden;box-shadow:0 8px 32px #00000080}.panel-head{letter-spacing:1.5px;text-transform:uppercase;color:var(--ink-dim);border-bottom:1px solid var(--panel-edge);justify-content:space-between;align-items:center;padding:9px 12px;font-size:10px;display:flex}.panel-body{max-height:240px;padding:6px;overflow-y:auto}.row{border-radius:4px;justify-content:space-between;align-items:center;padding:7px 8px;display:flex}.row:hover{background:#ffffff0a}.row .name{color:var(--ink)}.tag{border-radius:3px;padding:2px 6px;font-size:10px}.tag.active{color:var(--gain);background:#46d39a1f}.tag.upgrading{color:var(--warn);background:#e8b84b1f}.tag.fault{color:var(--loss);background:#f0655a1f}#offices{width:230px;top:100px;left:16px}#fleet{width:440px;top:70px;right:16px}.branch-row{cursor:pointer}.tabbar{border-bottom:1px solid var(--panel-edge);display:flex}.tab{color:var(--ink-dim);font-family:var(--font);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;flex:1;padding:8px;font-size:11px}.tab:hover{color:var(--ink)}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.vehmodal{z-index:22;width:520px}.vehmodal-bar{border-bottom:1px solid var(--panel-edge);padding:6px 10px}.vehmodal-body{max-height:60vh}.sm-modal{width:240px}.sm-modal .btn.block{margin-top:6px}.fleet-sum{cursor:pointer;border-radius:4px;justify-content:space-between;align-items:center;gap:8px;padding:7px 8px;display:flex}.fleet-sum:hover{background:#ffffff0a}.fleet-sum-info{flex-direction:column;min-width:0;line-height:1.35;display:flex}.fleet-sum-info span{color:var(--ink-dim);font-size:10px}.fleet-detail-head{background:var(--panel);justify-content:space-between;gap:6px;padding:2px 2px 8px;display:flex;position:sticky;top:0}.fleet-empty{color:var(--ink-dim);padding:10px 4px;font-size:11px}.fleet-table{font-size:10px}.fleet-th,.fleet-tr{grid-template-columns:56px 92px 86px 1fr 130px;align-items:center;gap:5px;padding:4px 2px;display:grid}.fleet-th{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--panel-edge)}.fleet-tr{border-bottom:1px solid #2c3a4766}.fleet-tr:hover{background:#ffffff0a}.fleet-tr .loc{text-overflow:ellipsis;white-space:nowrap;color:var(--ink-dim);overflow:hidden}.fleet-tr .gain{color:var(--gain)}.fleet-tr .loss{color:var(--loss)}.fleet-act{align-items:center;gap:4px;display:flex}.mini-select{font-family:var(--font);color:var(--ink);background:var(--bg);border:1px solid var(--panel-edge);border-radius:3px;max-width:76px;padding:3px 2px;font-size:10px}.mini-select:focus{border-color:var(--accent);outline:none}.hint-line{color:var(--ink-dim);border-top:1px dashed var(--panel-edge);margin-top:2px;padding:4px 2px 2px;font-size:10px;line-height:1.45}.kv .dim{color:var(--ink-dim);font-size:10px;font-weight:400}.share-list{padding:2px 2px 6px 8px}.share-row{color:var(--ink-dim);align-items:center;gap:6px;padding:2px 0;font-size:11px;display:flex}.share-row .dot{border-radius:2px;flex-shrink:0;width:8px;height:8px}.share-row .nm{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.share-row b{color:var(--ink)}.share-row.me .nm,.share-row.me b{color:var(--accent)}.fin-loan{border-top:1px solid var(--panel-edge);margin-top:10px;padding-top:8px}.fin-loan-head{color:var(--ink);margin-bottom:6px;font-size:11px}.fin-loan-head b{color:var(--warn)}.fin-loan-head .dim{color:var(--ink-dim);font-weight:400}.fin-loan-ctl{gap:6px;display:flex}.fin-loan-ctl input{font-family:var(--font);color:var(--ink);background:var(--bg);border:1px solid var(--panel-edge);border-radius:4px;flex:1;padding:5px 8px;font-size:12px}.fin-loan-ctl input:focus{border-color:var(--accent);outline:none}.objmodal{z-index:22;width:380px}.objmodal-body{max-height:60vh}.obj-row{border-bottom:1px solid #2c3a4766;align-items:center;gap:9px;padding:7px 6px;display:flex}.obj-mark{color:var(--ink-dim);text-align:center;flex-shrink:0;width:16px;font-size:13px}.obj-row.done .obj-mark{color:var(--gain)}.obj-txt{flex-direction:column;flex:1;min-width:0;line-height:1.3;display:flex}.obj-txt b{font-size:12px}.obj-row.done .obj-txt b{color:var(--ink-dim);text-decoration:line-through}.obj-txt span{color:var(--ink-dim);font-size:10px}.obj-reward{color:var(--warn);flex-shrink:0;font-size:11px}.obj-row.win{background:#e8b84b14;border-radius:4px}.obj-row.win .obj-txt b{color:var(--warn)}.obj-row.win.done .obj-txt b{color:var(--gain)}.toast-wrap{pointer-events:none;z-index:28;flex-direction:column;align-items:center;gap:6px;display:flex;position:absolute;top:64px;left:50%;transform:translate(-50%)}.toast{border:1px solid var(--accent);color:var(--ink);background:#1a2129f5;border-radius:6px;padding:8px 14px;font-size:12px;animation:.25s ease-out toastIn,.4s ease-in 3.8s forwards toastOut;box-shadow:0 6px 20px #00000080}@keyframes toastIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}@keyframes toastOut{to{opacity:0;transform:translateY(-8px)}}.standmodal{z-index:22;width:400px}.standmodal-body{max-height:60vh}.stand-table{font-size:11px}.stand-th,.stand-tr{grid-template-columns:22px 1fr 64px 38px 40px 50px;align-items:center;gap:6px;padding:5px 4px;display:grid}.stand-th{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--panel-edge)}.stand-tr{border-bottom:1px solid #2c3a4766}.stand-tr.me{background:#4db8a01f;border-radius:4px}.stand-tr .rank{color:var(--ink-dim);text-align:center}.stand-tr .name{text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:6px;display:flex;overflow:hidden}.stand-tr .dot{border-radius:2px;flex-shrink:0;width:8px;height:8px}.stand-th .num,.stand-tr .num{text-align:right;color:var(--ink-dim)}.finmodal{z-index:22;width:372px}.finmodal-body{max-height:none;padding:8px}.fin-legend{color:var(--ink-dim);align-items:center;gap:6px;margin-bottom:6px;font-size:10px;display:flex}.fin-legend .dot{border-radius:1px;width:10px;height:2px;display:inline-block}.fin-legend .dot.nw{background:var(--gain)}.fin-legend .dot.cash{background:#e8eef280;margin-left:8px}.fin-chart{border:1px solid var(--panel-edge);background:#0000002e;border-radius:4px;width:100%;display:block}.fin-stats{grid-template-columns:1fr;gap:2px;margin-top:8px;display:grid}.fin-stat{color:var(--ink-dim);border-bottom:1px solid #2c3a4766;justify-content:space-between;align-items:baseline;padding:3px 2px;font-size:11px;display:flex}.fin-stat b{color:var(--ink);font-size:13px}.fin-stat b.gain{color:var(--gain)}.fin-stat b.loss{color:var(--loss)}.citymodal{z-index:22;width:420px}.citymodal-body{max-height:60vh}.city-table{font-size:10px}.city-th,.city-tr{grid-template-columns:1fr 56px 40px 44px 58px 64px;align-items:center;gap:6px;padding:5px 4px;display:grid}.city-th{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--panel-edge);background:var(--panel);position:sticky;top:0}.city-tr{cursor:pointer;border-bottom:1px solid #2c3a4766}.city-tr:hover{background:#ffffff0a}.city-tr .name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.city-tr .num,.city-th .num{text-align:right;color:var(--ink-dim)}.city-tr .num.gain{color:var(--gain)}.city-tr .num.loss{color:var(--loss)}.float-layer{pointer-events:none;z-index:-1;position:absolute;inset:0}.float{pointer-events:none;white-space:nowrap;border-radius:5px;padding:3px 9px;font-size:13px;font-weight:700;animation:2.4s ease-out forwards floatup;position:absolute;transform:translate(-50%,-50%);box-shadow:0 2px 8px #0006}.float.gain{color:#d6ffe9;background:#2e8c60eb}.float.loss{color:#ffe2de;background:#aa342ceb}@keyframes floatup{0%{opacity:0;transform:translate(-50%,-40%)scale(.85)}15%{opacity:1;transform:translate(-50%,-50%)scale(1)}80%{opacity:1}to{opacity:0;transform:translate(-50%,-150%)scale(1)}}.panel-head .x{cursor:pointer;color:var(--ink-dim);padding:0 4px}.panel-head .x:hover{color:var(--loss)}.popover{z-index:20;width:324px}.pop-body{max-height:420px;padding:10px}.kv{color:var(--ink-dim);justify-content:space-between;align-items:center;padding:4px 2px;font-size:11px;display:flex}.kv b{color:var(--ink);font-weight:600}.kv b.gain{color:var(--gain)}.kv b.loss{color:var(--loss)}.mkt-stepper{align-items:center;gap:5px;display:flex}.mkt-stepper .btn.sm{padding:2px 7px}.mkt-stepper .mkt-val{text-align:center;min-width:52px}.mkt-stepper .dim{color:var(--ink-dim);font-weight:400}.btn.block{width:100%;margin-top:8px;padding:9px}.btn.sm{padding:5px 8px;font-size:10px}.btn.disabled,.btn[disabled]{opacity:.4;cursor:not-allowed;border-color:var(--panel-edge)}.btn.disabled:hover,.btn[disabled]:hover{border-color:var(--panel-edge)}.btn.danger{color:var(--loss);border-color:#f0655a66}.btn.danger:hover{border-color:var(--loss)}.warn-note{color:var(--loss);text-align:center;margin-top:6px;font-size:10px}.veh-list{border-top:1px solid var(--panel-edge);margin-top:8px;padding-top:6px}.veh-row{justify-content:space-between;align-items:center;gap:8px;padding:6px 2px;display:flex}.veh-info{flex-direction:column;line-height:1.3;display:flex}.veh-info b{font-size:12px}.veh-info span{color:var(--ink-dim);font-size:10px}.veh-actions{flex-shrink:0;gap:4px;display:flex}.veh-row.col{flex-direction:column;align-items:stretch;gap:5px}.veh-info-line{font-size:11px}.veh-info-line b{font-size:12px}.veh-info-line span{color:var(--ink-dim)}.veh-row.col .veh-actions .btn{text-align:center;flex:1;padding:5px 2px}.pop-foot{border-top:1px solid var(--panel-edge);gap:6px;margin-top:10px;padding-top:8px;display:flex}.pop-foot .btn{flex:1}.modal-backdrop{z-index:9999;background:#080b0e99;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.modal{width:320px}.modal-field{flex-direction:column;gap:4px;padding:8px 10px;display:flex}.modal-field label{color:var(--ink-dim);text-transform:uppercase;letter-spacing:1px;font-size:10px}.modal-field input{font-family:var(--font);color:var(--ink);background:var(--bg);border:1px solid var(--panel-edge);border-radius:4px;padding:7px 9px;font-size:13px}.modal-field input:focus{border-color:var(--accent);outline:none}.tooltip{pointer-events:none;border:1px solid var(--panel-edge);white-space:nowrap;opacity:0;z-index:25;background:#141b22f5;border-radius:5px;padding:6px 9px;font-size:11px;line-height:1.5;transition:opacity .1s;position:absolute;transform:translate(-50%,-100%);box-shadow:0 4px 16px #00000080}.tooltip.show{opacity:1}.tooltip b{color:var(--accent);display:block}.tooltip span{color:var(--ink-dim);display:block}.tooltip span.gain{color:var(--gain)}.tooltip span.loss{color:var(--loss)}.tooltip span.dim{color:var(--ink-dim)}.minimap{border:1px solid var(--panel-edge);background:var(--panel);pointer-events:auto;cursor:pointer;touch-action:none;z-index:15;border-radius:6px;width:184px;height:184px;position:absolute;bottom:16px;right:16px;box-shadow:0 8px 32px #00000080}.hint{color:var(--ink-dim);pointer-events:none;background:#0f1419b3;border-radius:20px;padding:6px 14px;font-size:11px;position:absolute;bottom:14px;left:50%;transform:translate(-50%)}.resgrid{width:min(980px,95vw)}.resgrid .panel-head{gap:10px}.resgrid-tabs{flex-wrap:wrap;gap:4px;display:flex}.resgrid-tab{cursor:pointer;border:1px solid var(--panel-edge);color:var(--ink-dim);background:0 0;border-radius:4px;padding:1px 8px;font-size:11px}.resgrid-tab.active{color:#06202b;background:var(--accent);border-color:var(--accent)}.resgrid-range{color:var(--ink-dim);margin-left:auto;font-size:11px}.resgrid-body{height:64vh;display:flex}.inbox{border-right:1px solid var(--panel-edge);flex-direction:column;flex:0 0 214px;width:214px;min-height:0;display:flex}.inbox-head{color:var(--ink-dim);border-bottom:1px solid var(--panel-edge);padding:6px 8px;font-size:11px}.inbox-list{flex-direction:column;gap:6px;padding:6px;display:flex;overflow-y:auto}.inbox-empty{color:var(--ink-dim);text-align:center;padding:14px 8px;font-size:11px}.res-card{border:1px solid var(--panel-edge);cursor:grab;background:#141b22;border-radius:6px;padding:6px 8px;font-size:11px}.res-card:active{cursor:grabbing}.res-card.dragging{opacity:.45}.res-card .rc-top{justify-content:space-between;align-items:baseline;gap:6px;display:flex}.res-card .rc-cls{color:var(--ink);font-weight:600}.res-card .rc-price{color:var(--gain);white-space:nowrap}.res-card .rc-line{color:var(--ink-dim);margin-top:2px}.res-card .rc-act{gap:4px;margin-top:6px;display:flex}.res-card.oneway{border-left:3px solid var(--warn)}.gridwrap{flex-direction:column;flex:1;min-width:0;display:flex}.grid-empty{color:var(--ink-dim);text-align:center;margin:auto;padding:20px;font-size:12px}.grid-scroll{flex:1;position:relative;overflow:auto}.grid-content{position:relative}.ruler{z-index:8;background:var(--panel);border-bottom:1px solid var(--panel-edge);height:22px;display:flex;position:sticky;top:0}.veh-label,.ruler .corner{flex:0 0 100px;width:100px}.ruler .corner{z-index:9;background:var(--panel);border-right:1px solid var(--panel-edge);color:var(--ink-dim);padding:0 6px;font-size:9px;line-height:22px;position:sticky;left:0}.day-cell{width:48px;color:var(--ink-dim);text-align:center;border-left:1px solid #ffffff0a;flex:0 0 48px;font-size:9px;line-height:22px}.day-cell.month-start{border-left-color:var(--panel-edge);color:var(--ink)}.cal-row{border-bottom:1px solid #ffffff0a;height:26px;display:flex}.cal-row.valid{background:#46d39a1f}.cal-row.invalid{background:#f0655a1f}.veh-label{z-index:6;background:var(--panel);border-right:1px solid var(--panel-edge);align-items:center;gap:5px;padding:0 6px;font-size:10px;display:flex;position:sticky;left:0;overflow:hidden}.veh-label .vl-cls{color:var(--ink-dim)}.veh-track{flex:none;position:relative}.res-block{color:#06202b;white-space:nowrap;box-sizing:border-box;border-radius:3px;height:20px;padding:0 3px;font-size:9px;line-height:20px;position:absolute;top:3px;overflow:hidden}.res-block.assigned{background:var(--accent);cursor:grab}.res-block.active{background:var(--gain);cursor:default}.res-block.oneway{background:var(--warn)}.res-block.transfer{color:var(--ink);cursor:default;opacity:.85;background:#5a6b78}.res-block.today-line{background:0 0}.grid-today{background:var(--accent);opacity:.45;z-index:1;pointer-events:none;width:2px;position:absolute;top:0;bottom:0}.resgrid-branch{background:var(--panel);color:var(--ink);border:1px solid var(--panel-edge);border-radius:4px;padding:2px 6px;font-size:12px}.resgrid-count{color:var(--accent);font-size:11px}.res-card{touch-action:none}.res-card.flash{outline:2px solid var(--accent)}.res-block.assigned,.res-block.oneway{touch-action:none}.drag-ghost{z-index:9999;pointer-events:none;background:var(--accent);color:#06202b;border-radius:4px;padding:2px 7px;font-size:10px;font-weight:600;position:fixed;box-shadow:0 4px 12px #0006}.btn.sm.nextres{white-space:nowrap}.mkmodal{width:340px}.mk-sec{color:var(--accent);border-bottom:1px solid var(--panel-edge);margin:10px 0 4px;padding-bottom:3px;font-size:11px}.mk-sec:first-child{margin-top:0}.mk-dim{color:var(--ink-dim);font-size:10px;font-weight:400}.mk-row{justify-content:space-between;align-items:center;gap:8px;padding:3px 0;font-size:12px;display:flex}.mk-row label{cursor:pointer;align-items:center;gap:6px;display:flex}.mk-cost{color:var(--ink-dim);white-space:nowrap;font-size:11px}.mk-num{background:var(--panel);width:90px;color:var(--ink);border:1px solid var(--panel-edge);font-family:var(--font);border-radius:4px;padding:2px 6px}.toolbar.btngroup{gap:0;display:flex}.toolbar .btn.icon{border-right-width:0;border-radius:0;padding:7px 11px;font-size:18px;line-height:1;position:relative}.toolbar .btn.icon:first-child{border-radius:6px 0 0 6px}.toolbar .btn.icon:last-child{border-right-width:1px;border-radius:0 6px 6px 0}.toolbar .btn.icon[data-tip]:hover:after{content:attr(data-tip);background:var(--panel);border:1px solid var(--panel-edge);color:var(--ink);white-space:nowrap;z-index:50;pointer-events:none;border-radius:4px;margin-top:6px;padding:3px 8px;font-size:11px;position:absolute;top:100%;left:50%;transform:translate(-50%)}.toolbar .btn.icon .badge{background:var(--warn);color:#06202b;text-align:center;z-index:12;border-radius:8px;min-width:15px;height:15px;padding:0 3px;font-size:9px;font-weight:700;line-height:15px;position:absolute;top:-7px;left:50%;transform:translate(-50%)}.toolbar .btn.icon .badge:empty{display:none}.bd-table{font-size:10px}.bd-th,.bd-tr{grid-template-columns:1fr 38px 44px 38px 70px;align-items:center;gap:4px;padding:3px 2px;display:grid}.bd-th{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.4px;border-bottom:1px solid var(--panel-edge)}.bd-tr{border-bottom:1px solid #2c3a4766}.bd-tr .gain{color:var(--gain)}.bd-cls{font-weight:600}.bd-act{gap:3px;display:flex}.bd-act .btn.sm{padding:1px 7px}.fl-table{font-size:10px}.fl-th,.fl-tr{grid-template-columns:1fr 34px 38px 34px 54px 92px;align-items:center;gap:5px;padding:4px 2px;display:grid}.fl-th{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.4px;border-bottom:1px solid var(--panel-edge)}.fl-tr{cursor:pointer;border-bottom:1px solid #2c3a4766}.fl-tr:hover{background:#ffffff0a}.fl-tr .gain{color:var(--gain)}.fl-cls{font-weight:600}.vehmodal-bar{align-items:center;gap:6px;display:flex}.panel-head{font-size:12px}.panel-body,.pop-body{font-size:14px}.kv,.kv b{font-size:15px}.tab,.fleet-table,.bd-table,.fl-table,.fleet-empty,.grid-empty,.inbox-empty,.fin-stat{font-size:14px}.fin-stat b{font-size:16px}.fin-legend{font-size:13px}.res-card{font-size:14px}.res-card .rc-line{font-size:12px}.mk-row{font-size:14px}.mk-sec{font-size:13px}.mk-cost,.mk-dim{font-size:12px}.resgrid-branch{font-size:14px}.resgrid-count,.inbox-head,.btn.sm{font-size:13px}.fleet-sum-info b{font-size:15px}.warn-note,.hint-line{font-size:13px}.vehmodal-bar{font-size:14px}.fin-loan-head{font-size:15px}.res-card.unavailable{opacity:.5}.rc-warn{color:var(--loss);align-self:center;font-size:12px}.res-block.flash{outline:2px solid #fff;box-shadow:0 0 8px #ffffffe6}.inbox.candrop{outline:2px dashed var(--accent);outline-offset:-2px;background:#4db8a029}.res-card.event{border-left:3px solid #9b8ad8}.hover-line{background:var(--warn);z-index:5;pointer-events:none;width:2px;display:none;position:absolute;top:0;bottom:0;box-shadow:0 0 4px #e8b84bb3}.res-block.event{color:#160f2e;background:#9b8ad8}.brk-table{font-size:13px}.brk-th,.brk-tr{grid-template-columns:1fr 44px 44px 44px 36px;align-items:center;gap:6px;padding:4px 2px;display:grid}.brk-th{color:var(--ink-dim);text-transform:uppercase;letter-spacing:.4px;border-bottom:1px solid var(--panel-edge);font-size:11px}.brk-tr{border-bottom:1px solid #2c3a4766}.brk-name{font-weight:600}.veh-label.incoming{color:var(--ink-dim);font-style:italic}.veh-label.incoming .vl-cls{color:var(--ink-dim)}
