*{box-sizing:border-box}
:root{color-scheme:dark;--bg:#0d1117;--panel:#090e13;--title:#161b22;--border:#30363d;--soft:#242c35;--text:#e6edf3;--muted:#8b949e;--green:#3fb950;--green2:#56d364;--blue:#58a6ff;--yellow:#e3b341;--red:#f85149;--purple:#bc8cff;--cyan:#39c5cf}
html,body{min-height:100%;margin:0;background:radial-gradient(circle at 50% -10%,rgba(57,197,207,.06),transparent 34%),var(--bg);color:var(--text)}
body{min-height:100vh;font-family:"SFMono-Regular",Consolas,"Liberation Mono",Menlo,monospace}
button,input,textarea,select{font:inherit}
.bus-shell{width:min(1440px,calc(100% - 32px));margin:0 auto;padding:30px 0 24px}
.bus-window{overflow:hidden;background:var(--panel);border:1px solid var(--border);border-radius:14px;box-shadow:0 30px 90px rgba(0,0,0,.42)}
.bus-titlebar{height:48px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;padding:0 16px;background:var(--title);border-bottom:1px solid #252d36}
.window-buttons{display:flex;gap:8px}.window-dot{width:12px;height:12px;border-radius:50%;display:inline-block}.window-dot.red{background:#ff5f57}.window-dot.yellow{background:#febc2e}.window-dot.green{background:#28c840}a.window-dot{text-decoration:none}
.bus-title{color:#9aa4af;font-size:.78rem}.bus-status{justify-self:end;display:flex;align-items:center;gap:7px;color:var(--cyan);font-size:.67rem;font-weight:800}.status-dot{width:7px;height:7px;border-radius:50%;background:var(--cyan);box-shadow:0 0 11px rgba(57,197,207,.5)}
.bus-console{padding:18px;background:linear-gradient(rgba(5,9,13,.97),rgba(5,9,13,.97)),repeating-linear-gradient(0deg,transparent 0 25px,rgba(255,255,255,.012) 25px 26px)}
.console-command{margin-bottom:13px;color:#c9d1d9;font-size:.8rem}.prompt{color:var(--green)}
.bus-tabs{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:13px}.bus-tab{min-height:38px;padding:7px 10px;color:#89939d;background:#10161d;border:1px solid #2a323b;border-radius:7px;cursor:pointer;font-size:.65rem}.bus-tab.active{color:#e9feff;border-color:#2c7c82;background:rgba(57,197,207,.10)}
.bus-tool{display:none}.bus-tool.active{display:block}
.overview-grid{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(260px,.65fr);gap:12px}.topology-card,.traffic-card,.control-card,.terminal-card,.streams-card,.network-table-card,.message-list-card{min-width:0;background:#0d131a;border:1px solid var(--soft);border-radius:9px;overflow:hidden}
.panel-head{display:flex;justify-content:space-between;gap:10px;align-items:center;padding:10px 12px;color:#77818b;background:#10161d;border-bottom:1px solid #242c35;font-size:.66rem}
.toolbar-buttons{display:flex;gap:6px}.toolbar-buttons button,.panel-head button{min-height:30px;padding:4px 8px;color:#aeb8c2;background:#111820;border:1px solid #30363d;border-radius:6px;cursor:pointer;font-size:.62rem}
.topology{position:relative;min-height:520px;background:radial-gradient(circle at center,rgba(57,197,207,.04),transparent 55%),#020503;overflow:hidden}.node{position:absolute;z-index:3;width:145px;padding:12px;text-align:center;background:#0d171d;border:1px solid #2a3b43;border-radius:9px;box-shadow:0 8px 18px rgba(0,0,0,.22)}.node strong{display:block;color:#dfe9ee;font-size:.76rem}.node span{display:block;margin-top:4px;color:#6f838c;font-size:.58rem}
.sensor{left:5%;top:10%}.printer{left:5%;top:58%}.mqtt-broker{left:39%;top:27%;border-color:#2e7b81}.nats-broker{left:39%;top:64%;border-color:#61508c}.home-assistant{right:4%;top:8%}.grafana{right:4%;top:38%}.worker{right:12%;top:68%}.discord{right:2%;bottom:3%}
.topology-lines{position:absolute;inset:0;width:100%;height:100%;z-index:1}.topology-lines path{fill:none;stroke:#20434a;stroke-width:3;stroke-dasharray:8 8}.topology-lines #svg-packet-layer{pointer-events:none}.packet-mqtt{filter:drop-shadow(0 0 4px rgba(57,197,207,.95)) drop-shadow(0 0 8px rgba(57,197,207,.55))}.packet-nats{filter:drop-shadow(0 0 4px rgba(188,140,255,.95)) drop-shadow(0 0 8px rgba(188,140,255,.55))}
.traffic-log{height:520px;overflow:auto;padding:12px;background:#020503}.traffic-entry{padding:6px 0;border-bottom:1px solid #172028;color:#91a0a8;font-size:.64rem;line-height:1.4}.traffic-entry b{color:#d7e4e8}.traffic-entry .mqtt{color:var(--cyan)}.traffic-entry .nats{color:var(--purple)}
.two-panel,.streams-layout,.inspector-layout{display:grid;grid-template-columns:minmax(280px,.75fr) minmax(0,1.45fr);gap:12px}.control-card{padding:15px}.control-card h2{margin:0 0 14px;font-size:.92rem}.control-card label{display:grid;gap:6px;margin-top:11px;color:#8b949e;font-size:.69rem}
select,textarea,input{width:100%;color:#d8e0e7;background:#090e13;border:1px solid #2d3640;border-radius:6px;outline:none}select,input{min-height:40px;padding:7px 9px}textarea{padding:9px;line-height:1.5;resize:vertical}
.button-row{display:flex;gap:8px;flex-wrap:wrap;margin-top:13px}.button-row button,.danger-button{min-height:40px;padding:7px 11px;color:#aeb8c2;background:#111820;border:1px solid #30363d;border-radius:7px;cursor:pointer}.primary{color:#e9feff!important;border-color:#2c7c82!important;background:rgba(57,197,207,.10)!important}.danger-button{width:100%;margin-top:10px;color:#ff9e97;border-color:#683836}
.summary-box{margin-top:13px;padding:12px;color:#87949c;background:#0a1016;border:1px solid #222c35;border-radius:7px;font-size:.68rem;line-height:1.5}
.terminal-card{display:flex;flex-direction:column;min-height:470px}.terminal-output{flex:1 1 auto;min-height:420px;margin:0;overflow:auto;padding:14px;color:#cbd4dc;background:#020503;font-size:12px;line-height:1.5;white-space:pre-wrap}
.stream-table{width:100%;border-collapse:collapse;font-size:.7rem}.stream-table th,.stream-table td{padding:10px;border-bottom:1px solid #222b34;text-align:left}.stream-table th{color:#6d7781}.stream-table tbody tr{cursor:pointer}.stream-table tbody tr:hover{background:rgba(57,197,207,.05)}
.message-list{max-height:520px;overflow:auto;background:#020503}.message-item{width:100%;display:grid;grid-template-columns:80px 1fr 80px;gap:8px;padding:9px 11px;color:#9aa5ad;background:transparent;border:0;border-bottom:1px solid #172028;cursor:pointer;text-align:left;font-size:.64rem}.message-item:hover,.message-item.active{background:rgba(57,197,207,.07)}.message-item strong{color:#dce7eb;font-weight:600}.message-item span:last-child{text-align:right;color:#65737c}
.bus-status-line{margin-top:12px;color:#68727c;font-size:.68rem;text-align:center}.bus-note{margin:12px 0 0;color:#6e7681;font-size:.7rem;text-align:center}
@media(max-width:1000px){.overview-grid,.two-panel,.streams-layout,.inspector-layout{grid-template-columns:1fr}.traffic-log{height:300px}}
@media(max-width:700px){.bus-shell{width:min(100% - 18px,1440px);padding-top:12px}.bus-titlebar{padding:0 10px}.bus-console{padding:11px}.topology{min-height:700px}.node{width:122px}.sensor{left:4%;top:6%}.printer{left:4%;top:28%}.mqtt-broker{left:52%;top:14%}.nats-broker{left:52%;top:42%}.home-assistant{right:4%;top:62%}.grafana{left:4%;top:62%}.worker{left:4%;top:80%}.discord{right:4%;bottom:4%}.topology-lines{display:none}.message-item{grid-template-columns:70px 1fr}}


/* RunsLinux shared Labs workstation shell */
@media (min-width: 901px) {
  html, body { width: 100%; height: 100%; overflow: hidden; }
  body.rl-has-site-nav { background: #080d13; }
  .bus-shell {
    position: relative !important;
    width: 100vw !important;
    max-width: none !important;
    height: calc(100vh - 54px) !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
    background: url('/assets/terminal-workstation.webp') center top / cover no-repeat !important;
  }
  .bus-shell > .bus-window {
    position: absolute !important;
    left: 19.65% !important;
    top: 5.75% !important;
    width: 62.75% !important;
    height: 60.45% !important;
    min-height: 0 !important;
    max-height: none !important;
    margin: 0 !important;
    overflow: auto !important;
    border-radius: 10px !important;
    z-index: 3 !important;
    box-shadow: none !important;
  }
  .bus-shell > :not(.bus-window) { display: none !important; }
}
