:root{--bg: #0f1216;--panel: #171b21;--panel-2: #1d222a;--line: #272d37;--text: #e6e9ef;--muted: #8b94a3;--accent: #4c9aff;--ok: #3fb950;--busy: #d29922;--bad: #f85149;--radius: 10px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--text);font:14px/1.45 -apple-system,Segoe UI,Roboto,Arial,sans-serif}.mono{font-family:Cascadia Mono,Consolas,SF Mono,ui-monospace,monospace}.muted{color:var(--muted)}.small{font-size:12px}.hint{color:var(--muted);font-size:13px}.pad{padding:0 16px 14px}.grow{flex:1 1 160px;min-width:120px}.narrow{width:72px}.row{display:flex;gap:8px;align-items:center}.row.end{justify-content:flex-end}.app{min-height:100vh;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:20px;padding:10px 18px;background:var(--panel);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}.brand{font-weight:600;letter-spacing:.3px}.tabs{display:flex;gap:4px}.topbar-right{margin-left:auto;display:flex;align-items:center;gap:10px}.layout{display:grid;grid-template-columns:340px minmax(0,1fr);gap:14px;padding:14px;align-items:start}.layout.single{grid-template-columns:minmax(0,1fr)}@media(max-width:900px){.layout{grid-template-columns:minmax(0,1fr)}}.detail{display:flex;flex-direction:column;gap:14px;min-width:0}.panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.panel.empty{padding:40px;text-align:center;color:var(--muted)}.panel-head{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line)}.panel-head h2{margin:0;font-size:15px;font-weight:600;display:flex;align-items:center;gap:8px}.panel-head>:last-child:not(h2){margin-left:auto}.counter{color:var(--muted);font-size:12px}button{background:var(--panel-2);color:var(--text);border:1px solid var(--line);border-radius:7px;padding:7px 12px;font-size:13px;cursor:pointer}button:hover:not(:disabled){border-color:#3a4452;background:#232935}button:disabled{opacity:.45;cursor:not-allowed}button.primary{background:var(--accent);border-color:var(--accent);color:#08111f;font-weight:600}button.danger{border-color:#6d2b28;color:#ff9b93}button.ghost{background:transparent}button.small{padding:4px 9px;font-size:12px}button.tab{background:transparent;border-color:transparent;color:var(--muted)}button.tab.active{background:var(--panel-2);border-color:var(--line);color:var(--text)}input,select{background:#12161c;color:var(--text);border:1px solid var(--line);border-radius:7px;padding:7px 10px;font-size:13px;font-family:inherit}input:focus,select:focus{outline:none;border-color:var(--accent)}input.cell{width:100%;padding:4px 8px}.checkbox{display:flex;align-items:center;gap:6px;cursor:pointer}.banner{padding:9px 16px;font-size:13px;border-top:1px solid var(--line)}.banner.error{background:#2a1618;color:#ffb4ae}.banner.ok{background:#14251a;color:#96e0a4}.stations{list-style:none;margin:0;padding:0}.stations li+li{border-top:1px solid var(--line)}.station{width:100%;display:flex;align-items:center;gap:10px;padding:11px 16px;background:transparent;border:none;border-radius:0;text-align:left}.station.selected{background:var(--panel-2);box-shadow:inset 3px 0 0 var(--accent)}.station-main{display:flex;flex-direction:column;min-width:0;flex:1}.station-name{font-weight:500}.dot{width:9px;height:9px;border-radius:50%;flex:none}.dot.online{background:var(--ok);box-shadow:0 0 0 3px #3fb95026}.dot.offline{background:#4a525f}.connectors{display:flex;gap:4px}.chip{min-width:22px;height:22px;border-radius:6px;display:grid;place-items:center;font-size:11px;font-weight:600;background:#2a313c;color:var(--muted)}.chip.ok{background:#3fb9502e;color:#7ee08c}.chip.busy{background:#d2992233;color:#e7c26b}.chip.bad{background:#f8514933;color:#ff9b93}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:10px 18px;margin:0;padding:14px 16px}.facts div{min-width:0}.facts dt{color:var(--muted);font-size:12px}.facts dd{margin:2px 0 0;overflow-wrap:anywhere}.connector-card{display:flex;flex-direction:column;gap:2px;padding:8px 12px;border-radius:8px;background:#2a313c;border:1px solid var(--line);font-size:12px}.connector-card.ok{border-color:#3fb95066}.connector-card.busy{border-color:#d2992273}.connector-card.bad{border-color:#f8514973}.connector-card .err{color:#ff9b93}.commands{padding:12px 16px 14px;display:flex;flex-direction:column;gap:10px}.commands .banner{margin:2px -16px -14px;border-radius:0}.cmd-row{display:flex;gap:8px;align-items:center;padding:0 16px}.commands .cmd-row,.panel>.cmd-row:last-child{padding:0}.panel>.cmd-row{padding:12px 16px}.cmd-row.wrap{flex-wrap:wrap}.badge{display:inline-block;padding:2px 8px;border-radius:999px;font-size:11px;background:#2a313c;color:var(--muted)}.badge.active{background:#d2992233;color:#e7c26b}.badge.finished{background:#3fb95029;color:#7ee08c}.badge.blocked,.badge.offline{background:#f851492e;color:#ff9b93}.grid{width:100%;border-collapse:collapse;font-size:13px}.grid th{text-align:left;font-weight:500;color:var(--muted);font-size:12px;padding:8px 16px;border-bottom:1px solid var(--line);white-space:nowrap}.grid td{padding:7px 16px;border-bottom:1px solid #1f242c;vertical-align:middle}.grid tr:last-child td{border-bottom:none}.scroll{max-height:420px;overflow:auto}.log{max-height:460px;font-size:12px}.log-row{display:grid;grid-template-columns:130px 16px 190px minmax(0,1fr);gap:8px;align-items:baseline;padding:4px 16px;border-bottom:1px solid #1f242c;cursor:pointer}.log-row:hover{background:var(--panel-2)}.log-ts{color:var(--muted)}.log-dir.in{color:var(--accent)}.log-dir.out{color:var(--busy)}.log-action{color:#cfd6e2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-msg{color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-msg.full{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--text)}.modal-backdrop{position:fixed;inset:0;background:#040609b8;display:grid;place-items:center;z-index:20}.modal{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:20px;width:min(480px,calc(100vw - 32px));display:flex;flex-direction:column;gap:14px}.modal h2{margin:0;font-size:16px}.modal label{display:flex;flex-direction:column;gap:5px;font-size:12px;color:var(--muted)}
