:root{font-family:Segoe UI,system-ui,sans-serif;line-height:1.5;color:#e8eaed;background:#1a1d23}*{box-sizing:border-box}body{margin:0;min-height:100vh}#root{width:100%;max-width:none;margin:0;padding:.5rem 1rem .75rem}#root-inner{width:100%}#root-inner.portal-desktop{min-height:100vh;display:flex;flex-direction:column}.portal-desktop .mode-panel:not(.hidden){flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.app-header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:.5rem;margin-bottom:.5rem}.user-bar{display:flex;align-items:center;gap:.75rem}.login-page{display:flex;justify-content:center;padding:3rem 1rem}.login-card{width:min(400px,100%)}.login-form label{display:block;margin-bottom:.75rem}.login-form input{width:100%;margin-top:.25rem}.mode-bar{display:flex;gap:.5rem;flex-shrink:0}.mode-bar button{padding:.5rem 1rem;border:1px solid #3d4455;background:#252830;color:inherit;border-radius:6px;cursor:pointer}.mode-bar button.active{background:#3d5a80;border-color:#3d5a80;color:#fff}.mode-panel.hidden{display:none}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:.75rem}.card{background:#252830;border:1px solid #3d4455;border-radius:8px;padding:1rem;display:flex;flex-direction:column;gap:.25rem}.card-n{font-size:1.75rem;font-weight:600}.form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:.75rem;margin-top:1rem;padding:1rem;background:#252830;border-radius:8px}.form-grid label{display:flex;flex-direction:column;gap:.25rem;font-size:.8rem;color:#9aa0a6}.row{display:flex;gap:.5rem;align-items:center}.btn-secondary{background:#3d4455!important}.clickable{cursor:pointer}.clickable:hover{background:#2d3140}.mono{font-family:ui-monospace,monospace;font-size:.75rem}.checkbox{flex-direction:row!important;align-items:center;gap:.5rem}h1{font-size:1.35rem;font-weight:600;margin:0 0 .25rem}.sub{color:#9aa0a6;font-size:.8rem;margin:0 0 .5rem;line-height:1.35}.portal-desktop .page-compact{gap:.35rem}.compact-line{margin-bottom:.35rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.compact-error{margin:.15rem 0}.chat-sessions-bar{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;justify-content:space-between;margin-bottom:.75rem}.chat-sessions-tabs{display:flex;flex-wrap:wrap;gap:.35rem;flex:1;min-width:0;max-width:100%;overflow-x:auto;padding-bottom:.15rem}.chat-session-tab{display:inline-flex;align-items:center;gap:.35rem;max-width:200px;padding:.35rem .55rem;border:1px solid #3d4455;background:#252830;color:inherit;border-radius:6px;cursor:pointer;font-size:.8rem}.chat-session-tab.active{background:#3d5a80;border-color:#3d5a80}.chat-session-tab.busy{border-color:#6b8cae}.chat-session-tab-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-flex;align-items:center;gap:.25rem}.chat-session-synced-badge{flex-shrink:0;font-size:.65rem;font-weight:700;line-height:1;padding:.12rem .28rem;border-radius:3px;background:#fc3f1d;color:#fff}.chat-session-busy{width:6px;height:6px;border-radius:50%;background:#7cb342;flex-shrink:0;animation:chat-pulse 1s ease-in-out infinite}@keyframes chat-pulse{50%{opacity:.35}}.chat-session-close{flex-shrink:0;margin-left:.15rem;padding:0 .2rem;line-height:1;opacity:.65;font-size:1rem}.chat-session-close:hover{opacity:1}.chat-sessions-actions{display:flex;gap:.35rem;flex-shrink:0}.chat-workspace{display:flex;gap:1rem;align-items:flex-start}.chat-workspace-main{flex:1 1 auto;min-width:0}.chat-messages-row{display:flex;gap:.75rem;align-items:flex-start;margin-bottom:1rem}.chat-vllm-rail{flex:0 0 19rem;width:19rem;max-width:19rem;position:sticky;top:1rem;align-self:flex-start;z-index:5}.vllm-panel-wrap{display:flex;flex-direction:column;gap:0;width:100%}.vllm-panel-status{box-sizing:border-box;min-height:1.75rem;max-height:1.75rem;overflow:hidden;font-family:ui-monospace,monospace;font-size:.65rem;line-height:1.75rem;padding:0 .55rem;background:#2a2e38;border:1px solid #3d4455;border-radius:6px 6px 0 0;border-bottom:none;white-space:nowrap;text-overflow:ellipsis}.vllm-panel-status--loading{color:#9aa0a6}.vllm-panel-status--error{color:#ef9a9a}.vllm-panel-status--ok{color:transparent;-webkit-user-select:none;user-select:none}.vllm-panel-wrap .vllm-panel{border-top-left-radius:0;border-top-right-radius:0}.vllm-panel{box-sizing:border-box;padding:.45rem .55rem;font-family:ui-monospace,monospace;font-size:.72rem;line-height:1.35;background:#252830;border:1px solid #3d4455;border-radius:6px;overflow:hidden}.vllm-panel--dimmed{opacity:.72}.vllm-panel-muted,.vllm-panel-err{color:#9aa0a6;padding:.45rem .65rem}.vllm-panel-err{color:#ef9a9a}.vllm-row{display:grid;grid-template-columns:2.6rem minmax(0,1fr);gap:.25rem .45rem;align-items:center;padding:.12rem 0;border-bottom:1px solid #323845}.vllm-row:last-child{border-bottom:none}.vllm-row-host .m-lbl,.vllm-row-sys .m-lbl,.vllm-row-gpu .gpu-pill-id{color:#9aa0a6;font-weight:600}.vllm-row-body{display:flex;flex-wrap:wrap;align-items:baseline;gap:.35rem .55rem;min-width:0}.vllm-row-gpu .vllm-row-body{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));column-gap:.2rem;flex-wrap:unset;width:100%;min-width:0}.vllm-row-gpu .m-pair{display:flex;flex-direction:column;align-items:flex-start;gap:0;min-width:0;overflow:hidden}.vllm-row-gpu .m-lbl{font-size:.62rem;line-height:1.2}.vllm-row-gpu .m-val-slot{min-width:0;width:100%;max-width:100%;text-align:left;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vllm-row-gpu .m-val-slot--fan{min-width:0}.m-val-host{color:#c9cdd3;font-weight:600}.src-tag{font-size:.65rem;padding:.1rem .35rem;border-radius:3px;text-transform:uppercase;letter-spacing:.04em}.src-prom{background:#2d4a3e;color:#a5d6a7}.src-ssh{background:#4a4028;color:#ffcc80}.src-?{background:#3d4455;color:#9aa0a6}.gpu-pill-id{color:#9aa0a6;font-weight:600}@media (max-width: 900px){.chat-workspace,.chat-messages-row{flex-direction:column}.chat-vllm-rail{position:static;flex:0 0 auto;width:100%;max-width:100%;order:-1}}@media (max-width: 720px){.app-header{flex-direction:column;align-items:stretch}}.m-pair{display:inline-flex;align-items:baseline;gap:.2rem}.m-lbl{color:#6b7280;font-size:.68rem;text-transform:lowercase}.m-val{color:#c9cdd3;font-variant-numeric:tabular-nums;font-weight:600}.m-val-slot{display:inline-block;text-align:right;font-variant-numeric:tabular-nums;font-weight:600;color:#c9cdd3}.m-val-slot--pct{min-width:4.25ch}.m-val-slot--temp{min-width:5.25ch}.m-val-slot--fan{min-width:7.5ch}.m-val-slot--ctl{min-width:12ch;text-align:left;font-size:.68rem;font-weight:600;font-variant-numeric:tabular-nums}.vllm-row-fanctl-ok .m-val-slot--ctl{color:#81c784}.vllm-row-fanctl-hot .m-val-slot--ctl{color:#ffab40}.vllm-row-fanctl-pending .m-val-slot--ctl{color:#ffee58}.vllm-row-fanctl-err .m-val-slot--ctl{color:#ef9a9a}.util-ok{color:#66bb6a}.util-warn{color:#ffee58}.util-crit{color:#ef5350}.temp-ok{color:#66bb6a}.temp-warn{color:#ffee58}.temp-crit{color:#ef5350}.vram-ok{color:#66bb6a}.vram-high{color:#ffee58}.vram-low{color:#ef5350}.fan-ok{color:#66bb6a}.fan-warn{color:#ffee58}.fan-crit{color:#ef5350}.monitor-badge{font-size:.7rem;padding:.15rem .45rem;border-radius:4px;text-transform:uppercase;letter-spacing:.03em}.monitor-badge-ok{background:#2d4a3e;color:#a5d6a7}.monitor-badge-warn{background:#4a4028;color:#ffcc80}.monitor-badge-err{background:#4a2d2d;color:#ef9a9a}.monitor-warning{margin:0 0 .5rem;padding:.4rem .6rem;background:#4a4028;border-radius:4px;font-size:.8rem;color:#ffcc80}.monitor-err{color:#ef9a9a;font-size:.85rem}.vllm-monitor-hint{margin:.5rem 0 0}.gpu-services-panel{margin-top:.5rem;padding:.55rem;background:#252830;border:1px solid #3d4455;border-radius:6px;font-size:.75rem}.gpu-services-panel--compact{margin-top:.35rem;padding:.45rem}.gpu-services-title{margin:0 0 .45rem;font-size:.72rem;font-weight:600;color:#c4c8cc;text-transform:uppercase;letter-spacing:.04em}.gpu-services-row{display:grid;grid-template-columns:4.5rem 2.5rem 1fr;gap:.35rem;align-items:center;margin-bottom:.35rem}.gpu-services-row:last-of-type{margin-bottom:0}.gpu-svc-label{color:#9aa0a6;font-family:ui-monospace,monospace}.gpu-restart-btn{padding:.2rem .45rem;font-size:.68rem;justify-self:end}.gpu-services-msg{margin:.35rem 0 0;font-size:.7rem}.status-tab{display:flex;flex-direction:column;gap:1rem;max-width:48rem}.metric-row{display:grid;grid-template-columns:3.5rem 1fr auto;gap:.5rem;align-items:center;margin-bottom:.4rem;font-size:.85rem}.metric-label{color:#9aa0a6}.metric-bar{height:8px;background:#1a1d23;border-radius:4px;overflow:hidden}.metric-bar-fill{height:100%;background:#3d5a80;border-radius:4px;transition:width .3s ease}.metric-bar-warn{background:#b8860b}.metric-bar-crit{background:#c62828}.metric-bar-vram-ok{background:#43a047}.metric-bar-vram-high{background:#fbc02d}.metric-bar-vram-low{background:#c62828}.metric-value{font-size:.8rem;color:#c9cdd3;white-space:nowrap}.gpu-row{margin-top:.65rem;padding-top:.5rem;border-top:1px solid #3d4455}.gpu-row-title{font-size:.8rem;font-weight:600;margin-bottom:.35rem;color:#c9cdd3}.chat{display:flex;flex-direction:column;gap:.75rem;flex:1 1 auto;min-width:0;min-height:360px;max-height:min(55vh,calc(100vh - 14rem));overflow-y:auto;padding:1rem;background:#252830;border-radius:8px}.msg{padding:.65rem .85rem;border-radius:8px;max-width:92%;white-space:pre-wrap;word-break:break-word}.msg-head{margin:-.15rem 0 .35rem;line-height:1.2}.msg-time{font-size:.68rem;color:#7a8290;font-variant-numeric:tabular-nums;letter-spacing:.02em}.msg.user .msg-head{text-align:right}.msg.assistant .msg-head{text-align:left}.msg.user{align-self:flex-end;background:#3c4048}.msg.assistant{align-self:flex-start;background:#2d3140;border:1px solid #3d4455}.voice-draft{margin:.5rem 0;padding:.75rem;background:#2a2e38;border:1px solid #4a5568;border-radius:8px}.voice-draft-title{margin:0 0 .5rem;font-size:.85rem;color:#c9cdd3}.voice-draft-text{width:100%;box-sizing:border-box;resize:vertical;min-height:4.5rem;font:inherit;color:inherit;background:#1e2229;border:1px solid #3d4455;border-radius:4px;padding:.5rem}.voice-draft-actions{display:flex;gap:.5rem;margin-top:.5rem;justify-content:flex-end}.voice-recording{color:#f87171;animation:voice-pulse 1.2s ease-in-out infinite}@keyframes voice-pulse{50%{opacity:.65}}.voice-mic-active{color:#f87171;border-color:#f87171}.voice-transcribing{color:#9aa0a6}.transcript-block{margin-top:.5rem;font-size:.85rem}.transcript-block pre{white-space:pre-wrap;margin:.35rem 0 0;padding:.5rem;background:var(--bg-muted, #1a1a1a);border-radius:4px;max-height:12rem;overflow:auto}.meta{font-size:.7rem;color:#9aa0a6;margin-top:.35rem}.msg.assistant.streaming{border-left:2px solid #5c9fd4;padding-left:.65rem}.meta.stream-status{font-style:italic;color:#7eb8e8}.chat-action-bar{display:flex;gap:.35rem;flex-wrap:wrap;margin-bottom:.35rem}.chat-action-btn{padding:.45rem .75rem;border:1px solid #4a6278;background:#2a3544;color:#e8eef4;border-radius:6px;cursor:pointer;font-size:.875rem;font-weight:500;white-space:nowrap}.chat-action-btn:hover:not(:disabled){background:#354656;border-color:#6b8cae}.chat-action-btn:disabled{opacity:.45;cursor:not-allowed}.chat-action-btn--stop{border-color:#a63d3d;background:#5c2323;color:#ffe8e8}.chat-action-btn--stop:hover:not(:disabled){background:#7a2e2e;border-color:#c85555}.chat-action-btn--clear{border-color:#6b7a4a;background:#3a4228;color:#eef4e0}.chat-action-btn--clear:hover:not(:disabled){background:#4a5532;border-color:#8cae6b}.chat-send-row{display:flex;gap:.5rem;align-items:center;flex-wrap:wrap}.chat-send-row button{flex:1}.btn-stop{padding:.5rem 1rem;border:1px solid #a63d3d;background:#5c2323;color:#ffe8e8;border-radius:6px;cursor:pointer;font-weight:600}.btn-stop:hover{background:#7a2e2e}.chat-form{flex-direction:column;align-items:stretch}.chat-form>input,.chat-form>button:last-child{width:100%}.attach-actions{display:flex;flex-wrap:wrap;gap:.5rem}.attach-bar{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.75rem}.attach-item{position:relative;display:flex;align-items:center}.attach-thumb,.msg-thumb{max-height:72px;max-width:120px;border-radius:6px;object-fit:cover}.attach-chip{font-size:.75rem;padding:.25rem .5rem;background:#3d4455;border-radius:4px}.attach-remove{margin-left:.25rem;padding:0 .4rem;border:none;background:#5c4040;color:#fff;border-radius:4px;cursor:pointer;line-height:1.4}.msg-attachments{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.5rem}.hint{font-size:.8rem;color:#81c995;margin:0 0 .5rem}.form{display:flex;gap:.5rem}.form input{flex:1;padding:.65rem .85rem;border:1px solid #3d4455;border-radius:6px;background:#252830;color:inherit}.form button{padding:.65rem 1.1rem;border:none;border-radius:6px;background:#5c7cfa;color:#fff;cursor:pointer;font-weight:500}.form button:disabled{opacity:.5;cursor:not-allowed}.error{color:#f28b82;font-size:.85rem;margin-top:.5rem}.settings{display:flex;gap:.75rem;margin-bottom:1rem;flex-wrap:wrap}.settings label{font-size:.8rem;color:#9aa0a6;display:flex;flex-direction:column;gap:.25rem}.settings input,.settings select{padding:.4rem .5rem;border-radius:4px;border:1px solid #3d4455;background:#252830;color:inherit}.tabs{display:flex;gap:.35rem;margin-bottom:1rem;flex-wrap:wrap}.tabs button{padding:.4rem .75rem;border:1px solid #3d4455;background:#252830;color:inherit;border-radius:6px;cursor:pointer}.admin-layout{display:grid;grid-template-columns:minmax(200px,240px) 1fr;gap:1.25rem;align-items:start}@media (max-width: 900px){.admin-layout{grid-template-columns:1fr}}.admin-sidebar{position:sticky;top:.5rem;border:1px solid #3d4455;border-radius:8px;background:#1a1d26;padding:.75rem 0;max-height:calc(100vh - 8rem);overflow-y:auto}.admin-nav-group{margin-bottom:.75rem}.admin-nav-group-title{font-size:.7rem;text-transform:uppercase;letter-spacing:.06em;color:#9aa0a6;padding:.25rem 1rem .35rem}.admin-nav-list{list-style:none;margin:0;padding:0}.admin-nav-list button{display:flex;flex-direction:column;align-items:flex-start;width:100%;text-align:left;padding:.45rem 1rem;border:none;background:transparent;color:#e8eaed;cursor:pointer;font-size:.9rem}.admin-nav-list button:hover{background:#252830}.admin-nav-list button.active{background:#2a3550;border-left:3px solid #7aa2f7;padding-left:calc(1rem - 3px)}.admin-nav-hint{font-size:.65rem;color:#9aa0a6;margin-top:1px}.admin-content{min-width:0}.admin-header{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap;margin-bottom:1rem}.tag-edit-chips{display:flex;flex-wrap:wrap;gap:.5rem 1rem;margin:.75rem 0}.tag-edit-chips label.checkbox{display:flex;align-items:center;gap:.35rem;font-size:.85rem}.tabs button.active{background:#5c7cfa;border-color:#5c7cfa;color:#fff}.panel{display:flex;flex-direction:column;gap:.75rem}.portal-desktop .panel{gap:.45rem}.panel label{display:flex;flex-direction:column;gap:.25rem;font-size:.85rem;color:#9aa0a6}.textarea,.panel input,.panel select{padding:.5rem;border:1px solid #3d4455;border-radius:6px;background:#252830;color:inherit}.textarea{font-family:ui-monospace,monospace;font-size:.8rem}.pre{background:#252830;padding:.75rem;border-radius:6px;overflow:auto;font-size:.75rem;max-height:40vh}.hint{color:#9aa0a6;font-size:.85rem;margin:0}.table{width:100%;border-collapse:collapse;font-size:.8rem}.table th,.table td{border:1px solid #3d4455;padding:.35rem .5rem;text-align:left}.network-map{height:min(72vh,720px);border:1px solid #3d4455;border-radius:8px;margin:1rem 0;background:#12141a}.network-view-toolbar{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center;margin-bottom:.5rem}.network-view-toolbar button{padding:.25rem .65rem;border-radius:6px;border:1px solid #3d4455;background:#1a1d26;color:#e8eaed;cursor:pointer;font-size:.85rem}.network-view-toolbar button.active{border-color:#7aa2f7;background:#2a3550}.cluster-chips{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.75rem}.cluster-chip{font-size:.78rem;padding:.2rem .5rem;border-radius:999px;background:#2a3550;border:1px solid #4a5f8a;color:#c8d4f0}.graph-cluster-node{display:flex;flex-direction:column;gap:3px;align-items:flex-start;min-width:170px;padding:10px 12px;border-radius:10px;border:2px solid #7aa2f7;background:#2a3550;color:#e8eaed;cursor:pointer;text-align:left;font-size:12px}.graph-cluster-node.expanded{border-color:#a8c4ff;box-shadow:0 0 0 2px #7aa2f740}.graph-cluster-count{font-weight:600;color:#a8c4ff}.graph-cluster-hint{font-size:.65rem;opacity:.7;text-transform:uppercase}.graph-handle{opacity:0;width:6px;height:6px}.network-map-3d-wrap{margin:0;flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.map-3d-hint-bar{font-size:11px;color:#89a;margin-bottom:.2rem;line-height:1.3}.map-3d-hint-bar kbd{background:#1a1d26;border:1px solid #3d4455;border-radius:4px;padding:1px 5px;font-size:11px}.network-map-3d{height:min(72vh,720px);border:1px solid #3d4455;border-radius:8px;background:#0c1018;outline:none}.portal-desktop .network-map-3d{flex:1 1 auto;height:calc(100vh - 8.5rem);min-height:420px;max-height:none}.portal-desktop .network-map-3d canvas{display:block;width:100%!important;height:100%!important}.portal-desktop .network-explorer{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow:hidden}.portal-desktop .network-map-panel{flex:1 1 auto;min-height:0;display:flex;flex-direction:column}.network-map-3d:focus{border-color:#5a7a9a}.map-3d-label.host-compact{font-size:8px;padding:1px 4px;max-width:180px;line-height:1.15}.map-3d-label.host-compact strong{font-size:9px;color:#d8e0ec}.map-3d-label.host-compact span{font-size:7px;display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.map-3d-label{background:#12141aeb;border:1px solid #3d4455;border-radius:6px;padding:4px 8px;font-size:11px;color:#e8eaed;white-space:nowrap;text-align:center}.map-3d-label.cluster{max-width:160px;padding:3px 7px;font-size:10px;line-height:1.25;white-space:normal}.map-3d-label.cluster strong{display:block;color:#b8d8ff;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.map-3d-label.cluster span{font-size:9px;color:#9aa8b8}.map-3d-label.cluster-empty{opacity:.72;border-style:dashed}.map-3d-label.cluster .cluster-path{display:block;font-size:9px;color:#8ab4d8;margin:2px 0;white-space:normal}.map-3d-label.phys-hub{border-color:#5a7a98;background:#283a4eeb}.map-3d-label.phys-hub strong{color:#9ec8e8;font-size:11px}.map-3d-label.phys-hub span{font-size:10px;color:#7a9ab8}.map-3d-label.phys-hub.tunnel-hub{border-color:#7a68a8;background:#302844eb}.map-3d-label.phys-hub.tunnel-hub strong{color:#c8b0f0}.map-3d-label.meta-hub{border-color:#a88848;background:#3a301ceb}.map-3d-label.meta-hub strong{color:#f0d890;font-size:11px}.map-dialog-cluster-summary{margin:0 0 12px;padding:10px 12px;border-radius:6px;background:#1e2a3a99;font-size:13px;line-height:1.45}.map-dialog-cluster-summary strong{color:#b8d8ff}.map-dialog-cluster-path{color:#8ab4d8;font-size:12px}.map-3d-label.cluster-expanded{cursor:pointer;border-color:#5a7ab0}.map-3d-label.cluster-expanded:hover{background:#1e2a3ef5}.map-3d-label.cluster-filtered span{color:#ffcc80}.map-3d-label.cluster-filtered-out{opacity:.55;border-style:dashed}.map-3d-label.cluster-filtered-out span{color:#9aa0a6}.tag-filter-status{font-size:11px;color:#ffcc80;font-weight:600;padding:.15rem .4rem;border:1px solid #6a5030;border-radius:4px;white-space:nowrap}.map-3d-label.agent-infra strong,.map-3d-label.host-agent-infra strong{color:#5cb85c}.map-3d-label.host-agent-infra{border-color:#3d6b45;background:#122016f0;font-size:10px;padding:2px 6px;max-width:140px}.map-3d-label.host-agent-infra strong{font-size:11px}.map-3d-label .agent-infra-role{font-size:8px;display:block;color:#5cb85c;opacity:.9}.map-3d-label.host{font-size:10px;padding:2px 6px;max-width:150px;overflow:hidden;text-overflow:ellipsis}.map-3d-label.host strong{display:block;color:#c8d0e0}.map-3d-label.host span{color:#89a;font-size:9px}.map-3d-label .host-offline{display:block;color:#c07070;font-size:9px;text-transform:uppercase}.host-offline-cell{color:#c07070}.net-health-online{color:#8ab88a}.net-health-offline{color:#c83}.net-health-stale{color:#c55}.tag-filters button.tag-on{border-color:#5cb85c}.tag-filters button.tag-off{opacity:.45;text-decoration:line-through}.tag-filters button.tag-filter-bulk{font-size:11px;padding:.2rem .45rem;border-color:#4a5568;color:#a8b4c4;font-weight:600}.tag-filters button.tag-filter-bulk:disabled{opacity:.35;cursor:default}.tag-filters button.tag-filter-bulk:not(:disabled):hover{border-color:#6a8ab8;color:#e8eaed}.tag-edit-chips{display:flex;flex-wrap:wrap;gap:.35rem .75rem;margin:.75rem 0;max-height:220px;overflow:auto}.tag-edit-chips .tag-chip{background:#1a1d26;border:1px solid #3d4455;border-radius:6px;padding:.25rem .5rem;font-size:12px}.tag-edit-chips .tag-src{margin-left:.35rem;opacity:.5;font-size:10px}.host-tag-dialog{max-width:520px}button.danger{color:#e88}.infra-by-tags .infra-tag-groups{margin-top:1rem;display:flex;flex-direction:column;gap:.5rem}.infra-tag-group{border:1px solid #3d4455;border-radius:8px;overflow:hidden;background:#12141a}.infra-tag-group-header{width:100%;display:flex;align-items:center;gap:.5rem;padding:.6rem .85rem;background:#1a1d26;border:none;color:#e8eaed;cursor:pointer;text-align:left;font:inherit}.infra-tag-group-header:hover{background:#222630}.infra-tag-group-header strong{color:#a8c4ff;flex:1}.infra-tag-chevron{opacity:.7;width:1rem}.infra-tag-group .table{margin:0;border-top:1px solid #3d4455}.section-title-compact{font-size:.95rem;margin:.5rem 0 .25rem;font-weight:600}.infra-tag-group-header.static{display:flex;align-items:center;gap:.5rem;padding:.35rem .5rem;background:#1a1d26;border:1px solid #3d4455;border-radius:6px 6px 0 0}.badge.agent-infra{margin-left:.4rem;font-size:10px;padding:1px 5px;border-radius:4px;background:#2a3550;color:#a8c4ff}.row-actions{white-space:nowrap}.row-actions button{margin-right:.35rem}.map-context-menu-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:10000;background:transparent}.map-context-menu{position:fixed;z-index:10001;background:#1a1d26;border:1px solid #3d4455;border-radius:8px;padding:.35rem;display:flex;flex-direction:column;gap:.25rem;min-width:180px;box-shadow:0 8px 28px #0000008c;pointer-events:auto}.map-context-menu button{text-align:left;padding:.4rem .6rem;border:none;background:transparent;color:#e8eaed;cursor:pointer;border-radius:4px}.map-context-menu button:hover{background:#2a3550}.map-dialog-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;z-index:1100;display:flex;align-items:center;justify-content:center}.map-dialog{background:#1a1d26;border:1px solid #3d4455;border-radius:10px;padding:1rem 1.25rem;max-width:480px;width:90%;max-height:80vh;overflow:auto}.map-dialog-hosts{list-style:none;padding:0;margin:.5rem 0;max-height:200px;overflow:auto}.map-dialog-task textarea{width:100%;margin-top:.35rem;background:#12141a;border:1px solid #3d4455;color:#e8eaed;border-radius:6px;padding:.5rem}.map-dialog-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:.75rem}.map-dialog-field{display:block;margin:.5rem 0;font-size:.9rem}.map-dialog-field input{display:block;width:100%;margin-top:.35rem;background:#12141a;border:1px solid #3d4455;color:#e8eaed;border-radius:6px;padding:.45rem .5rem}.map-dialog-secondary{opacity:.92}.map-link-results{list-style:none;padding:0;margin:.35rem 0 .5rem;max-height:160px;overflow:auto}.map-link-results button{width:100%;text-align:left;background:transparent;border:none;color:#c8d0e0;padding:.35rem .25rem;cursor:pointer}.map-link-results button:hover{background:#2a3550}.map-link-picked{margin:.35rem 0;font-size:.9rem}.map-links-list{list-style:none;padding:0;margin:.5rem 0;max-height:280px;overflow:auto}.map-links-list li{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .5rem;padding:.45rem 0;border-bottom:1px solid #2a3040}.map-links-label-badge{font-size:.8rem;padding:.1rem .45rem;border-radius:4px;background:#3a2e18;color:#f0c060}.map-links-delete{margin-left:auto;font-size:.85rem}.map-3d-label.map-custom-link-label{background:#282010eb;border:1px solid #c89030;color:#f0c060;font-size:.72rem;padding:.15rem .4rem;white-space:nowrap}.row-dim{opacity:.45}.graph-node-inner{display:flex;flex-direction:column;gap:2px}.graph-node-type{font-size:.65rem;text-transform:uppercase;opacity:.75}.graph-node-sub{font-size:.7rem;opacity:.85;font-family:ui-monospace,monospace}.scan-options{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center;margin-bottom:.75rem}.portal-desktop .scan-options,.portal-desktop .network-toolbar{gap:.4rem;margin-bottom:.25rem}.portal-desktop .scan-options input{min-width:12rem;flex:1 1 12rem;max-width:22rem;padding:.3rem .45rem;font-size:.85rem}.portal-desktop .scan-options button{padding:.3rem .55rem;font-size:.85rem}.scan-options label.checkbox{display:flex;align-items:center;gap:.35rem}.network-scan-banner{display:flex;align-items:center;gap:.5rem;margin:0 0 .5rem;padding:.45rem .65rem;border-radius:6px;font-size:.85rem;background:#9b7ede1f;border:1px solid rgba(155,126,222,.35);color:#e8e0ff}.network-scan-banner-pulse{width:8px;height:8px;border-radius:50%;background:#9b7ede;flex-shrink:0;animation:network-scan-pulse 1.4s ease-in-out infinite}@keyframes network-scan-pulse{0%,to{opacity:.35;transform:scale(.9)}50%{opacity:1;transform:scale(1.1)}}.router-status-strip{display:flex;flex-wrap:wrap;gap:.75rem;margin-bottom:.75rem;font-size:.85rem}.network-meta-row{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .75rem;margin-bottom:.2rem}.portal-desktop .network-meta-row .router-status-strip{margin-bottom:0;gap:.5rem;font-size:.78rem}.portal-desktop .network-meta-row .network-view-toolbar{margin-bottom:0;gap:.3rem}.portal-desktop .network-meta-row .network-view-toolbar button{padding:.15rem .45rem;font-size:.75rem}.router-status-strip .router-ok{color:var(--ok, #5cb85c)}.router-status-strip .router-fail{color:var(--err, #d9534f)}.map-3d-label.host-hyperv strong{color:#d4b8ff}.network-explorer{padding:1rem;max-width:100%}.portal-desktop .network-explorer{padding:0}.toolbar-row{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:.75rem}
