/* VoiceUNLTD / Project PULSE — Interactive Service Topology v2.5
   An additive telecom-operations workspace, using original navy/cyan/gold.
   No changes to original pages, PBX/FreeSWITCH or carrier interfaces.
*/
.topo-shell{--topo-navy:#082844;--topo-blue:#0d87ad;--topo-gold:#d3a84c;--topo-edge:#7291a9;display:block;color:#1b344c}
.topo-header{background:linear-gradient(115deg,#061b31 0%,#092d4c 55%,#0e5570 100%);color:#fff;padding:26px 30px;border-radius:17px;position:relative;overflow:hidden;display:flex;justify-content:space-between;align-items:center;gap:22px;box-shadow:0 12px 35px rgba(5,35,59,.15)}
.topo-header:before{content:"";position:absolute;right:-80px;top:-145px;width:370px;height:370px;border:1px solid rgba(112,219,247,.14);border-radius:50%;box-shadow:0 0 0 50px rgba(112,219,247,.035),0 0 0 110px rgba(112,219,247,.015);pointer-events:none}
.topo-header-main,.topo-header-ops{position:relative;z-index:1}
.topo-header-kicker{font-size:10px;letter-spacing:.19em;text-transform:uppercase;color:#9fd4e9;font-weight:850}
.topo-header h3{font-size:27px;font-weight:850;letter-spacing:-.025em;margin:10px 0 7px;color:#fff}
.topo-header p{font-size:12.5px;line-height:1.6;color:#c4d7e5;margin:0;max-width:700px}
.topo-header-ops{display:flex;gap:9px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.topo-header-ops button{border:1px solid rgba(255,255,255,.22);border-radius:9px;background:rgba(255,255,255,.10);color:#fff;padding:10px 13px;cursor:pointer;font-weight:760;font-size:11px}
.topo-header-ops button:first-child{background:#20abd3;border-color:#20abd3;color:#063146}
.topo-header-ops button:hover{filter:brightness(1.14)}
.topo-control-panel{display:flex;gap:15px;align-items:flex-end;flex-wrap:wrap;background:#fff;border:1px solid #dce8f1;border-radius:13px;padding:16px 18px;margin:14px 0;box-shadow:0 6px 20px rgba(5,40,66,.04)}
.topo-field{display:flex;flex-direction:column;gap:6px;min-width:165px;flex:1}
.topo-field.grow{flex:2;min-width:245px}
.topo-field label{color:#607589;font-size:10px;letter-spacing:.09em;text-transform:uppercase;font-weight:800}
.topo-field select,.topo-field input{height:39px;min-width:0;width:100%;background:#fcfeff;border:1px solid #d2e1eb;color:#203c56;border-radius:8px;padding:0 11px;font-size:12px}
.topo-control-actions{display:flex;align-items:center;gap:8px}
.topo-control-actions button{height:39px;border-radius:8px;padding:0 14px;font-size:11px;font-weight:800;cursor:pointer;border:1px solid #cce3ef;background:#f2f9fc;color:#176582}
.topo-control-actions button.primary{background:#0c91bd;border-color:#0c91bd;color:#fff}
.topo-metric-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:11px;margin-bottom:14px}
.topo-metric{background:#fff;border:1px solid #dfe9f1;border-radius:11px;padding:12px 16px;min-height:76px;display:flex;flex-direction:column;gap:5px}
.topo-metric .number{font-size:23px;color:#0b3554;font-weight:850;line-height:1}
.topo-metric .label{font-size:10px;color:#72879a;letter-spacing:.055em;text-transform:uppercase;font-weight:800}
.topo-metric .number.warn{color:#b36e22}
.topo-main-grid{display:grid;grid-template-columns:minmax(0,1fr) 355px;gap:14px;align-items:start}
.topo-board-wrap{min-width:0;border-radius:15px;border:1px solid #d8e6ef;background:#fff;box-shadow:0 7px 26px rgba(5,34,56,.06);overflow:hidden}
.topo-board-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;background:#f9fcfe;border-bottom:1px solid #e0ebf3}
.topo-board-toolbar h4{font-size:13px;color:#23425c;margin:0}
.topo-board-toolbar .small{color:#8195a7;font-size:10px;margin-top:3px}
.topo-zoom{display:flex;gap:5px;align-items:center;flex-wrap:wrap}
.topo-zoom button{background:#fff;border:1px solid #d9e6ee;border-radius:7px;padding:7px 9px;min-width:32px;font-size:11px;color:#284a63;font-weight:800;cursor:pointer}
.topo-zoom button:hover{background:#eef8fc}
.topo-zoom .topo-scale{color:#637a91;font-size:10px;min-width:40px;text-align:center;font-weight:750}
.topo-board{height:620px;min-height:430px;position:relative;background-color:#f8fbfe;background-image:radial-gradient(circle at 1px 1px,rgba(45,88,119,.14) 1px,transparent 0);background-size:21px 21px;overflow:hidden;touch-action:none;cursor:grab}
.topo-board.dragging{cursor:grabbing}
.topo-board svg{display:block;width:100%;height:100%;user-select:none}
.topo-connect{fill:none;stroke:#7e9aaf;stroke-width:2.2;opacity:.75}
.topo-connect.conditional{stroke:#d39b46;stroke-dasharray:9 5;opacity:.95}
.topo-connect.context{stroke:#a5b6c5;stroke-dasharray:4 7;opacity:.62}
.topo-connect.unverified{stroke:#b36d68;stroke-dasharray:3 6;opacity:.85}
.topo-node{cursor:pointer;outline:none}
.topo-node .body{fill:#fff;stroke:#cbdde8;stroke-width:1.6;filter:drop-shadow(0 4px 9px rgba(10,47,79,.09))}
.topo-node .edge-band{fill:#1687b1}
.topo-node[data-kind="did"] .edge-band{fill:#157fa7}
.topo-node[data-kind="domain"] .edge-band{fill:#0a3857}
.topo-node[data-kind="inbound"] .edge-band{fill:#20a0ce}
.topo-node[data-kind="plan"] .edge-band{fill:#5b6ca5}
.topo-node[data-kind="condition"] .edge-band{fill:#cd9140}
.topo-node[data-kind="ivr"] .edge-band,.topo-node[data-kind="ivr_option"] .edge-band{fill:#8463af}
.topo-node[data-kind="extension"] .edge-band,.topo-node[data-kind="device"] .edge-band{fill:#1e9a85}
.topo-node[data-kind="line"] .edge-band{fill:#4c84a2}
.topo-node[data-kind="gateway"] .edge-band{fill:#7964a1}
.topo-node[data-kind="unresolved"] .edge-band{fill:#d06363}
.topo-node.selected .body{stroke:#0b96c4;stroke-width:3.4;filter:drop-shadow(0 5px 15px rgba(4,131,185,.28))}
.topo-node:hover .body{stroke:#80c0dd;stroke-width:2.4}
.topo-node .topo-kind{font-size:9px;fill:#6d8598;font-weight:850;letter-spacing:1px}
.topo-node .topo-label{font-size:13px;fill:#183d58;font-weight:840}
.topo-node .topo-sub{font-size:10px;fill:#688297}
.topo-node .topo-state{font-size:9px;fill:#188665;font-weight:800}
.topo-node .topo-state.offline{fill:#bb6651}
.topo-node .topo-state.conditional{fill:#b57b25}
.topo-board-edge-label{font-size:10px;font-weight:760;fill:#365b76;stroke:#f8fbfe;stroke-width:3.5;paint-order:stroke}
.topo-board-footer{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:9px;padding:12px 15px;background:#fff;border-top:1px solid #e7eef5;color:#71869a;font-size:10.5px}
.topo-legend{display:flex;gap:12px;flex-wrap:wrap}
.topo-legend span{display:flex;gap:6px;align-items:center;white-space:nowrap}
.topo-legend i{width:17px;height:0;display:inline-block;border-top:2px solid #7e9aaf}
.topo-legend i.conditional{border-top-color:#d29e50;border-top-style:dashed}
.topo-legend i.context{border-top-color:#bbc8d1;border-top-style:dashed}
.topo-legend i.unverified{border-top-color:#ce7978;border-top-style:dashed}
.topo-inspector{background:#fff;border:1px solid #dce8f0;border-radius:15px;min-height:750px;box-shadow:0 6px 20px rgba(5,34,56,.05);overflow:hidden}
.topo-inspector-head{background:linear-gradient(120deg,#092d4a,#0c5071);padding:20px 20px 16px;color:#fff;min-height:112px}
.topo-inspector-head .eyebrow{color:#9addf0}
.topo-inspector-head h4{margin:8px 0 5px;color:#fff;font-size:17px;overflow-wrap:anywhere}
.topo-inspector-head small{font-size:11px;color:#bcd9e7;line-height:1.55}
.topo-inspector-nav{display:flex;gap:0;border-bottom:1px solid #e4eef4;background:#fcfdff;overflow-x:auto}
.topo-inspector-nav button{padding:13px 12px;background:transparent;border:0;border-bottom:3px solid transparent;color:#60798c;font-size:10.5px;font-weight:800;white-space:nowrap;cursor:pointer;flex:1}
.topo-inspector-nav button.active{color:#0c7aa4;border-color:#12a4d4}
.topo-inspector-body{padding:18px;min-height:400px;max-height:630px;overflow-y:auto}
.topo-inspector .meta{display:grid;grid-template-columns:110px minmax(0,1fr);gap:10px 12px;padding:11px 0;border-bottom:1px solid #edf2f6;align-items:start}
.topo-inspector .meta strong{font-size:10px;color:#60758a;font-weight:800;overflow-wrap:anywhere}
.topo-inspector .meta span{font-size:11px;color:#284762;overflow-wrap:anywhere;white-space:pre-wrap}
.topo-source-pill{display:inline-block;font-size:10px;color:#176f9d;background:#eaf6fc;border:1px solid #cfe9f4;padding:6px 9px;border-radius:7px;margin:0 0 10px}
.topo-inspector-actions{display:flex;gap:7px;flex-wrap:wrap;margin:15px 0 0}
.topo-inspector-actions button{padding:9px 11px;border:1px solid #d1e6ef;border-radius:8px;background:#eef7fb;color:#135777;font-weight:760;font-size:10px;cursor:pointer}
.topo-inspector-actions button.primary{color:#fff;background:#0d89b3;border-color:#0d89b3}
.topo-status-banner{background:#eff8fc;border:1px solid #d0e5f0;border-radius:10px;padding:11px 13px;margin-bottom:11px;color:#3f6780;font-size:11px;line-height:1.6}
.topo-status-banner.warn{background:#fff8ec;border-color:#f2dbb4;color:#805e28}
.topo-findings{display:flex;flex-direction:column;gap:10px}
.topo-finding{border:1px solid #dce7ee;background:#fff;border-radius:11px;padding:13px 14px}
.topo-finding.warning{border-left:3px solid #cb953d}
.topo-finding.critical{border-left:3px solid #c4545c}
.topo-finding.info{border-left:3px solid #46a8ce}
.topo-finding strong{font-size:11px;color:#254663}
.topo-finding p{font-size:11px;line-height:1.55;color:#587084;margin:6px 0 8px}
.topo-finding small{font-size:10.5px;color:#1a6d8b;line-height:1.5}
.topo-finding button{border:0;background:transparent;font-size:10px;color:#077fa8;font-weight:800;padding:5px 0;cursor:pointer}
.topo-work-item{padding:11px 12px;border:1px solid #e0e9f1;border-radius:10px;margin-bottom:9px}
.topo-work-item strong{font-size:11px;color:#284960;display:block;margin:5px 0}
.topo-work-item p{color:#627d8f;font-size:11px;margin:5px 0;overflow-wrap:anywhere}
.topo-work-item .row-meta{font-size:10px;color:#8896a6}
.topo-work-form{display:flex;flex-direction:column;gap:11px}
.topo-work-form label{display:flex;flex-direction:column;gap:5px;font-size:11px;color:#566e83;font-weight:750}
.topo-work-form input,.topo-work-form textarea,.topo-work-form select{padding:10px;border:1px solid #cfdce8;border-radius:8px;font-size:12px;color:#294960;background:#fff}
.topo-work-form textarea{min-height:90px;resize:vertical}
.topo-work-form button{font-size:11px;background:#0e8cb5;color:#fff;border:0;border-radius:8px;padding:11px;cursor:pointer;font-weight:800}
.topo-work-form button:disabled{opacity:.5}
.topo-ai-status{display:flex;gap:10px;align-items:flex-start;background:#edf7fb;padding:13px;border:1px solid #cfe6ef;border-radius:10px;margin:9px 0 16px}
.topo-ai-status strong{font-size:12px;color:#185b77}
.topo-ai-status p{font-size:11px;color:#567587;line-height:1.55;margin:5px 0 0}
.topo-ai-controls{display:flex;flex-direction:column;gap:9px}
.topo-ai-controls textarea{width:100%;border-radius:9px;border:1px solid #cedfeb;padding:11px;min-height:110px;font-size:12px;resize:vertical}
.topo-ai-controls button{background:#0d88b5;color:#fff;border:0;border-radius:9px;padding:11px;font-weight:800;cursor:pointer}
.topo-ai-result{margin-top:14px;white-space:pre-wrap;font-size:11.5px;line-height:1.7;color:#345269;background:#fafcfe;border:1px solid #e2eaf1;border-radius:10px;padding:12px;max-height:340px;overflow:auto}
.topo-trace-row{border-bottom:1px solid #e9f0f5;padding:11px 0}
.topo-trace-row strong{display:block;font-size:11px;color:#28475e;margin-bottom:4px}
.topo-trace-row span{font-size:10px;color:#6f8190;line-height:1.6}
.topo-empty{padding:24px 16px;text-align:center;color:#718497;font-size:12px;line-height:1.6}
.topo-footnote{padding:13px 2px 27px;color:#75899b;font-size:11px;line-height:1.7}
.topo-footnote strong{color:#345d73}
.topo-loading{display:flex;flex-direction:column;gap:14px;align-items:center;justify-content:center;height:100%;color:#68869b;font-size:13px}
.topo-spinner{border:3px solid #deebf3;border-top-color:#0d91b6;height:30px;width:30px;border-radius:50%;animation:topo-spin .85s linear infinite}
@keyframes topo-spin{to{transform:rotate(360deg)}}
.topo-big-btn{padding:9px 13px;border:1px solid #d3e3ed;border-radius:8px;background:#fff;font-weight:750;font-size:11px;color:#26516d;cursor:pointer}
.topo-hidden{display:none!important}
@media(max-width:1460px){.topo-main-grid{grid-template-columns:minmax(0,1fr) 310px}.topo-inspector-body{padding:14px}.topo-board{height:585px}}
@media(max-width:1160px){.topo-main-grid{grid-template-columns:1fr}.topo-inspector{min-height:unset}.topo-inspector-body{max-height:550px}.topo-metric-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:740px){.topo-header{padding:20px;display:block}.topo-header h3{font-size:24px}.topo-header-ops{justify-content:flex-start;margin-top:15px}.topo-field.grow,.topo-field{min-width:100%;flex:1}.topo-control-panel{padding:12px}.topo-control-actions{width:100%}.topo-control-actions button{flex:1}.topo-metric-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.topo-board{height:480px}.topo-board-toolbar{flex-direction:column;align-items:flex-start}.topo-zoom{width:100%}.topo-inspector-nav button{padding:12px 9px}.topo-metric{padding:11px}.topo-metric .number{font-size:20px}}

.pbxs-topology-link{display:inline-block;margin-top:6px;padding:5px 8px;color:#0c7caa;background:#eaf7fc;border:1px solid #cbe7f3;border-radius:6px;cursor:pointer;font-size:10px;font-weight:800;text-align:left}
.pbxs-topology-link:hover{background:#dbf1fa}
.topo-work-item select{max-width:160px;font-size:10px;padding:5px;border:1px solid #d4e5f0;border-radius:6px;background:#fff;color:#375e77}

.topo-quicklink{display:inline-block;margin-top:8px;border:1px solid #c9e7f1;background:#eff9fc;color:#0b7da5;padding:6px 9px;font-size:10px;font-weight:800;border-radius:7px;cursor:pointer}
.topo-quicklink:hover{background:#dff2f9}
#topo-board:fullscreen{width:100vw;height:100vh;background-size:25px 25px}
