*{box-sizing:border-box;margin:0;padding:0}
:root{--bg:#0f1720;--panel:#16212d;--panel2:#1d2b3a;--line:#26384b;--txt:#dbe6f0;--mut:#8aa0b5;--acc:#22c55e;--blue:#3b82f6;--warn:#f59e0b;--red:#ef4444}
html,body{height:100%}
body{font:13px/1.4 "Segoe UI",system-ui,Arial,sans-serif;color:var(--txt);background:var(--bg)}
[hidden]{display:none!important}
button{font:inherit;color:inherit;cursor:pointer}
input,select,textarea{font:inherit;color:var(--txt);background:#0b121a;border:1px solid var(--line);border-radius:7px;padding:7px 9px;width:100%}
input:focus,select:focus,textarea:focus{outline:2px solid #22c55e55;border-color:var(--acc)}
input[type=checkbox]{width:16px;height:16px;accent-color:var(--acc);flex:none}
label{display:block;color:var(--mut);font-size:12px}
label>input,label>select,label>textarea{margin-top:4px}
.mut{color:var(--mut)}
.erro{color:#fecaca;background:#7f1d1d;border-radius:7px;padding:7px 10px}

.logo{font-weight:700;font-size:17px;display:flex;align-items:center;gap:8px;white-space:nowrap}
.logo b{color:var(--acc)}
.logo i{width:26px;height:26px;border-radius:7px;background:linear-gradient(135deg,#22c55e,#3b82f6)}
.logo.grande{font-size:26px}.logo.grande i{width:36px;height:36px;border-radius:9px}

.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:7px 12px;border-radius:8px;background:var(--panel2);border:1px solid var(--line);font-weight:600;white-space:nowrap}
.btn:hover{border-color:#3b5470}
.btn.p{background:var(--acc);border-color:var(--acc);color:#06210f}
.btn.perigo{background:#7f1d1d;border-color:#991b1b;color:#fecaca}
.btn.largo{width:100%;padding:10px}
.btn.icone{padding:7px 10px}
.btn:disabled{opacity:.5;cursor:default}

/* Login */
.tela-login{min-height:100%;display:grid;place-items:center;padding:16px;background:radial-gradient(circle at 30% 20%,#1e3a5f,#0b121a 70%)}
.caixa-login{width:100%;max-width:360px;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:28px;display:flex;flex-direction:column;gap:14px}

/* Estrutura */
.tela-app{height:100%;display:flex;flex-direction:column}
.top{height:52px;flex:none;background:#0b121a;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px;padding:0 12px;position:relative;z-index:1001}
.sp{flex:1}
.usuario{display:flex;align-items:center;gap:8px;color:var(--mut)}
.av{width:30px;height:30px;border-radius:50%;background:#334155;display:grid;place-items:center;color:#fff;font-weight:600;flex:none}
.main{flex:1;display:flex;min-height:0;position:relative}
.side{width:280px;flex:none;background:var(--panel);border-right:1px solid var(--line);padding:12px;overflow:auto}
.det{width:360px;flex:none;background:var(--panel);border-left:1px solid var(--line);padding:16px;overflow:auto}
.mapa-wrap{flex:1;position:relative;min-width:0}
#mapa{position:absolute;inset:0;background:#1b2530}

/* Busca */
.busca{position:relative;flex:0 1 380px;min-width:0}
.busca input{height:34px;background:var(--panel2);padding-left:12px}
.busca-res{position:absolute;top:38px;left:0;right:0;background:#0b121a;border:1px solid var(--line);border-radius:9px;max-height:380px;overflow:auto;box-shadow:0 12px 30px #0008}
.busca-res button{display:flex;width:100%;text-align:left;gap:8px;background:none;border:0;padding:8px 12px;border-bottom:1px solid var(--line)}
.busca-res button:hover{background:var(--panel2)}
.busca-res .grupo{padding:6px 12px;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--mut)}

/* Lateral */
.sec-tit{display:flex;align-items:center;justify-content:space-between;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--mut);margin:16px 0 6px}
.sec-tit:first-child{margin-top:0}
.mini{background:none;border:1px solid transparent;border-radius:6px;width:24px;height:22px;line-height:1;color:var(--mut)}
.mini:hover{border-color:var(--line);color:var(--txt);background:var(--panel2)}
.dica{font-size:11px;color:var(--mut);margin-top:4px}
.lay{display:flex;align-items:center;gap:9px;padding:6px 8px;border-radius:7px;color:var(--txt);font-size:13px;cursor:pointer}
.lay:hover{background:var(--panel2)}
.lay .n{margin-left:auto;color:var(--mut);font-size:12px}
.lay .ic{width:18px;text-align:center;flex:none}
.arvore .no{display:flex;align-items:center;gap:6px;padding:4px 6px;border-radius:7px}
.arvore .no:hover{background:var(--panel2)}
.arvore .no.ativa{background:#14532d55;outline:1px solid #22c55e66}
.arvore .no .nome{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer}
.arvore .no .n{color:var(--mut);font-size:11px}
.arvore .no .acoes{display:none}
.arvore .no:hover .acoes{display:flex}
.arvore .seta{width:16px;color:var(--mut);background:none;border:0}
.arvore .filhos{margin-left:16px}
.seg{display:flex;gap:4px}
.seg button{flex:1;padding:7px 0;border-radius:8px;background:var(--panel2);border:1px solid var(--line);font-weight:600}
.seg button.on{background:var(--acc);border-color:var(--acc);color:#06210f}
.card{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:12px;margin-bottom:10px}
.resumo{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.resumo b{display:block;font-size:20px}.resumo span{color:var(--mut);font-size:11px}

/* Ferramentas sobre o mapa */
.ferramentas{position:absolute;left:12px;top:12px;z-index:1000;display:flex;flex-direction:column;gap:5px}
.ferramentas button{width:40px;height:40px;border-radius:9px;background:rgba(15,23,32,.94);border:1px solid var(--line);font-size:16px;display:grid;place-items:center;position:relative}
.ferramentas button.on{background:var(--acc);color:#06210f;border-color:var(--acc)}
.ferramentas button:hover::after{content:attr(data-nome);position:absolute;left:46px;white-space:nowrap;background:#0b121a;border:1px solid var(--line);padding:4px 8px;border-radius:6px;font-size:12px;color:var(--txt)}
.ferramentas hr{border:0;border-top:1px solid var(--line);margin:2px 4px}
.barra-acao{position:absolute;top:12px;left:50%;transform:translateX(-50%);z-index:1000;background:#0b121a;border:1px solid var(--acc);border-radius:10px;padding:8px 10px 8px 14px;display:flex;align-items:center;gap:10px;box-shadow:0 10px 30px #0008;max-width:calc(100% - 120px)}
.legenda{position:absolute;right:12px;bottom:22px;z-index:900;background:rgba(11,18,26,.92);border:1px solid var(--line);border-radius:10px;padding:7px 12px;display:flex;flex-wrap:wrap;gap:12px;font-size:11px}
.legenda i{display:inline-block;width:18px;height:4px;border-radius:2px;vertical-align:middle;margin-right:5px}
.legenda i.tracejado{background:repeating-linear-gradient(90deg,#f97316 0 5px,transparent 5px 8px)}

/* Marcadores */
.mk{display:grid;place-items:center;font-weight:800;color:#000;border:1.5px solid #000;box-shadow:0 0 0 1.5px #fff8}
.mk-cto{width:16px;height:16px;border-radius:3px;background:#22c55e}
.mk-ceo{width:18px;height:18px;background:#f59e0b;clip-path:polygon(25% 3%,75% 3%,100% 50%,75% 97%,25% 97%,0 50%);border:0;box-shadow:none}
.mk-estacao{width:30px;height:22px;border-radius:6px;background:#8b5cf6;color:#fff;font-size:9px;border-color:#fff}
.mk-rack{width:14px;height:18px;border-radius:2px;background:#e2e8f0;font-size:8px}
.mk-reserva{width:12px;height:12px;background:#fde047;transform:rotate(45deg)}
.mk-cliente{width:13px;height:13px;border-radius:50%;background:#f8fafc}
.mk.projeto{opacity:.75;outline:2px dashed #f97316;outline-offset:2px}
.mk.sel{box-shadow:0 0 0 3px #fff,0 0 0 6px #22c55e}
.leaflet-tooltip.rot{background:transparent;border:0;box-shadow:none;color:#fff;font-weight:700;font-size:11px;text-shadow:0 0 3px #000,0 0 3px #000,0 0 3px #000;padding:0}
.leaflet-tooltip.rot::before{display:none}
.leaflet-container{font:inherit}
.leaflet-control-attribution{background:rgba(11,18,26,.8)!important;color:var(--mut)!important}
.leaflet-control-attribution a{color:#93c5fd!important}
.leaflet-bar a{background:#0b121a;color:var(--txt);border-color:var(--line)!important}
.leaflet-bar a:hover{background:var(--panel2)}

/* Painel de detalhes */
.det h2{font-size:18px}
.det h4{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--mut);margin:16px 0 8px}
.det .topo{display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
.kv{display:grid;grid-template-columns:110px 1fr;gap:6px 8px}
.kv>span:nth-child(odd){color:var(--mut)}
.badge{display:inline-block;padding:2px 8px;border-radius:20px;font-size:11px;font-weight:600;white-space:nowrap}
.g{background:#14532d;color:#86efac}.y{background:#713f12;color:#fde68a}.r{background:#7f1d1d;color:#fecaca}.b{background:#1e3a8a;color:#bfdbfe}.c{background:#334155;color:#cbd5e1}
.linhas>div{display:flex;justify-content:space-between;gap:8px;padding:6px 0;border-bottom:1px solid var(--line)}
.linhas>div:last-child{border-bottom:0}
.linhas a{color:#93c5fd;cursor:pointer;text-decoration:none}
.fotos{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.fotos img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:8px;cursor:pointer;border:1px solid var(--line)}
.fotos label{aspect-ratio:1;border:1px dashed var(--line);border-radius:8px;display:grid;place-items:center;cursor:pointer;font-size:20px}
.botoes{display:flex;flex-wrap:wrap;gap:6px;margin-top:14px}
.hist{font-size:12px}.hist div{padding:5px 0;border-bottom:1px solid var(--line)}.hist small{color:var(--mut);display:block}
.cores-fibra{display:flex;flex-wrap:wrap;gap:3px}
.cores-fibra i{width:14px;height:14px;border-radius:50%;border:1px solid #0006}
.fechar{background:none;border:0;font-size:20px;color:var(--mut);line-height:1}

/* Modal */
.modal{position:fixed;inset:0;background:#000a;z-index:2000;display:grid;place-items:center;padding:16px}
.modal-caixa{width:100%;max-width:460px;max-height:90vh;overflow:auto;background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:20px}
.modal-caixa.larga{max-width:760px}
.modal-caixa h3{font-size:16px;margin-bottom:14px;display:flex;justify-content:space-between;align-items:center}
.form{display:grid;gap:12px}
.form .duas{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.form .rodape{display:flex;justify-content:flex-end;gap:8px;margin-top:6px}
table{width:100%;border-collapse:collapse}
th{text-align:left;color:var(--mut);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.05em;padding:7px;border-bottom:1px solid var(--line)}
td{padding:7px;border-bottom:1px solid var(--line)}
.lista-check{max-height:180px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:6px}
.lista-check label{display:flex;gap:8px;align-items:center;color:var(--txt);font-size:13px;padding:3px}

.avisos{position:fixed;bottom:16px;left:50%;transform:translateX(-50%);z-index:3000;display:flex;flex-direction:column;gap:6px;align-items:center}
.avisos div{background:#0b121a;border:1px solid var(--line);border-left:4px solid var(--acc);border-radius:9px;padding:9px 14px;box-shadow:0 10px 30px #0008}
.avisos div.erro-aviso{border-left-color:var(--red)}

.so-celular{display:none}
@media (max-width:900px){
  .so-celular{display:inline-flex}
  .some-celular{display:none}
  .side{position:absolute;inset:0 auto 0 0;z-index:1500;box-shadow:10px 0 30px #0008;transform:translateX(-100%);transition:transform .2s}
  .side.aberta{transform:none}
  .det{position:absolute;inset:auto 0 0 0;width:auto;max-height:60%;z-index:1400;border-left:0;border-top:1px solid var(--line);border-radius:14px 14px 0 0}
  .busca{flex:1}
  .legenda{display:none}
  .top{gap:6px;padding:0 8px}
  .top .logo{display:none}
}

/* Diagrama de fusões */
.diagrama{position:fixed;inset:0;z-index:1800;background:var(--bg);display:flex;flex-direction:column}
.dg-carregando{margin:auto;color:var(--mut);display:flex;gap:12px;align-items:center}
.dg-barra{height:52px;flex:none;display:flex;align-items:center;gap:8px;padding:0 12px;background:#0b121a;border-bottom:1px solid var(--line);overflow-x:auto}
.dg-titulo{font-size:16px}
.dg-corpo{flex:1;display:flex;min-height:0}
.dg-area{flex:1;position:relative;background:#0d141c;background-image:radial-gradient(#1c2a38 1px,transparent 1px);background-size:22px 22px}
#dg-svg{position:absolute;inset:0;width:100%;height:100%;touch-action:none;cursor:grab;user-select:none}
.dg-lado{width:320px;flex:none;background:var(--panel);border-left:1px solid var(--line);padding:14px;overflow:auto}
.dg-lado h4{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--mut);margin:14px 0 8px}
.dg-lado h4:first-child{margin-top:0}
.dg-bloco{fill:#16212d;stroke:#334155}
.dg-bloco.eq{fill:#172554;stroke:#3b82f6}
.dg-cab{cursor:move}
.dg-cab-fundo{fill:#1d2b3a}
.dg-cab-fundo.eq{fill:#1e3a8a}
.dg-tit{fill:#fff;font-size:12px;font-weight:700}
.dg-sub{fill:#8aa0b5;font-size:10px}
.dg-num{fill:#cbd5e1;font-size:10px;font-weight:600;pointer-events:none}
.dg-tubo{font-size:9px;font-weight:800;pointer-events:none}
.dg-anot{fill:#fde68a;font-size:9.5px;pointer-events:none;paint-order:stroke;stroke:#16212d;stroke-width:3px}
.dg-anot.fora{stroke:#0d141c}
.dg-spl{fill:#2563eb55;stroke:#60a5fa}
.dg-ponto{fill:#0d141c;stroke:#cbd5e1;stroke-width:2;cursor:pointer}
.dg-ponto:hover{stroke:#22c55e;stroke-width:3}
.dg-ponto.usado{fill:#cbd5e1}
.dg-ponto.sel{fill:#22c55e;stroke:#fff;stroke-width:3}
.dg-fio-fundo{fill:none;stroke:#000;opacity:.55}
.dg-fio{fill:none;stroke-width:2.5;opacity:.95;pointer-events:none}
.dg-fio.sel{stroke-width:4}
.dg-fio-alvo{fill:none;stroke:transparent;stroke-width:12;cursor:pointer}
.dg-emenda{fill:#0d141c;stroke:#cbd5e1;stroke-width:1.5;cursor:pointer}
.dg-emenda.sel{stroke:#22c55e;stroke-width:3}
@media (max-width:900px){.dg-lado{position:absolute;right:0;bottom:0;width:100%;max-height:40%;border-left:0;border-top:1px solid var(--line)}}
.dg-seta path{fill:#4ade80;stroke:#052e16;stroke-width:1}
.dg-luz{fill:none;stroke:#dcfce7;stroke-width:2.2;stroke-linecap:round;stroke-dasharray:2 14;pointer-events:none;animation:dg-luz 1s linear infinite;filter:drop-shadow(0 0 2px #4ade80)}
@keyframes dg-luz{to{stroke-dashoffset:-16}}
@media (prefers-reduced-motion:reduce){.dg-luz{animation:none}}
.dg-fio-temp{fill:none;stroke-width:3;stroke-dasharray:8 5;pointer-events:none;filter:drop-shadow(0 0 3px #000)}
#dg-svg.fundindo{cursor:crosshair}
#dg-svg.fundindo .dg-ponto.usado{opacity:.35}
.dg-ponto.alvo{stroke:#4ade80;animation:dg-alvo 1.1s ease-in-out infinite}
@keyframes dg-alvo{50%{stroke-width:4.5}}
.dg-dica-fusao{border-color:#22c55e;color:#bbf7d0;font-size:12px}
/* POP: vista de racks */
.dg-abas{margin-left:8px}
.dg-abas button{padding:6px 12px}
.dg-rack{fill:#0b0f14;stroke:#475569;stroke-width:2}
.dg-rack-tit{fill:#fff;font-size:14px;font-weight:700}
.dg-u-num{fill:#64748b;font-size:9px;pointer-events:none}
.dg-u{fill:transparent;stroke:#1e293b;stroke-dasharray:3 3}
.dg-u.livre{cursor:pointer}
.dg-u.livre:hover{fill:#22c55e22;stroke:#22c55e}
.dg-face{stroke:#000;stroke-width:1.5}
.dg-face.sel{stroke:#22c55e;stroke-width:3}
.dg-face-cab{cursor:pointer}
.dg-face-tit{fill:#fff;font-size:11px;font-weight:700;pointer-events:none}
.dg-face-g.arrastando{opacity:.8;filter:drop-shadow(0 8px 12px #000)}
.dg-porta{fill:#0b0f14;stroke:#94a3b8;stroke-width:1.5}
.dg-porta.usado{fill:#facc15;stroke:#000}
.dg-porta.aceso{stroke:#4ade80;stroke-width:2}
.dg-porta.sel{fill:#22c55e;stroke:#fff;stroke-width:2.5}
.dg-fio.cordao{stroke-width:3}
.dg-titulo,.dg-barra .mut{white-space:nowrap}
.dg-abas{flex:none}
.dg-abas button{white-space:nowrap;flex:none}
.dg-tab-portas{max-height:46vh;overflow:auto;border:1px solid var(--line);border-radius:10px}
.dg-tab-portas table{font-size:11.5px}
.dg-tab-portas th{position:sticky;top:0;background:var(--panel2);padding:6px;font-size:10px}
.dg-tab-portas td{padding:5px 6px;vertical-align:top}
.dg-tab-portas tr[data-ponta-linha]{cursor:pointer}
.dg-tab-portas tr[data-ponta-linha]:hover td{background:#22c55e14}
.dg-tab-portas tr.sel td{background:#22c55e22}
.dg-ponto.pisca{animation:dg-pisca .5s ease-in-out 5;stroke:#fff;stroke-width:3}
@keyframes dg-pisca{50%{opacity:.2}}
.dg-lado{width:380px}
/* Rastreio e OTDR */
.rs-topo{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-bottom:10px}
.rs-topo .card{margin:0}
.rs-topo b{display:block;margin-top:2px}
.rs-num{font-size:18px}
.rs-tabela{max-height:46vh;overflow:auto;border:1px solid var(--line);border-radius:10px}
.rs-tabela th{position:sticky;top:0;background:var(--panel2)}
.rs-tabela td{font-size:12px;vertical-align:top}
.rs-tabela .num{text-align:right;white-space:nowrap}
.rs-num-mapa{width:22px;height:22px;border-radius:50%;background:#4ade80;color:#052e16;font-weight:800;font-size:11px;display:grid;place-items:center;border:2px solid #052e16}
.rs-otdr-mapa{width:26px;height:26px;border-radius:50%;background:#ef4444;color:#fff;display:grid;place-items:center;font-size:15px;border:2px solid #fff;box-shadow:0 0 12px #ef4444}
.rs-caminho{filter:drop-shadow(0 0 6px #4ade80)}
.rs-alvo{animation:rs-pulso 1.2s ease-out infinite}
@keyframes rs-pulso{0%{stroke-opacity:1}100%{stroke-opacity:.1}}
svg.otdr{width:100%;height:auto;background:#0b121a;border:1px solid var(--line);border-radius:10px}
.otdr .og{stroke:#1e293b}
.otdr .ot{fill:#8aa0b5;font-size:10px}
.otdr .otr{fill:none;stroke:#facc15;stroke-width:1.8}
.otdr .oev{stroke:#475569;stroke-dasharray:3 3}
.otdr .oev.splitter{stroke:#60a5fa}
.otdr .oev.conector,.otdr .oev.fim{stroke:#f97316}
.otdr .oet{fill:#cbd5e1;font-size:9px}
.otdr .oe:hover .oev{stroke:#fff;stroke-dasharray:none}
.otdr .omarca{stroke:#ef4444;stroke-width:2}
.otdr .omt{fill:#ef4444;font-size:11px;font-weight:700}
@media (max-width:900px){.rs-topo{grid-template-columns:1fr 1fr}}
.leaflet-tooltip.rs-tip{white-space:normal;width:260px;background:#0b121a;color:#e2e8f0;border:1px solid #ef4444;border-radius:8px;font-size:12px;line-height:1.4}
.leaflet-tooltip.rs-tip::before{border-top-color:#ef4444}
.dg-onu{stroke:#000;stroke-width:1}
.dg-onu.online{fill:#4ade80}.dg-onu.offline{fill:#f87171}.dg-onu.sem{fill:#94a3b8}
.dg-anot.erp{fill:#e2e8f0}
.al{border-left:4px solid var(--red)}
.al-topo{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap}
details.aud{border:1px solid var(--line);border-radius:10px;padding:8px 12px;margin-bottom:8px;background:var(--panel2)}
details.aud summary{cursor:pointer;font-weight:600;display:flex;gap:8px;align-items:center}
.aud-lista{max-height:240px;overflow:auto;font-size:12.5px}
.aud-lista div{padding:4px 0;border-bottom:1px solid var(--line)}
.aud-lista a{color:#93c5fd;cursor:pointer}

/* Ícones SVG do mapa */
.mk-svg{display:grid;place-items:center;filter:drop-shadow(0 1px 1.5px #000c)}
.mk-svg svg{display:block}
.mk-svg.projeto{opacity:.75;outline:2px dashed #f97316;outline-offset:1px;border-radius:4px}
.mk-svg.sel svg{filter:drop-shadow(0 0 0 #fff) drop-shadow(0 0 4px #22c55e);transform:scale(1.35)}
.mk-svg.pequeno svg{transform:scale(.72)}
.legenda .quebra{flex-basis:100%;height:0}
.legenda em{display:inline-block;vertical-align:middle;margin-right:5px;background-repeat:no-repeat;background-size:contain}
.legenda small{color:var(--mut)}
.lg-cto{width:16px;height:13px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 22 18'%3E%3Crect x='1' y='1' width='20' height='16' rx='3.5' fill='%234ade80' stroke='%230b0f14' stroke-width='1.6'/%3E%3Cpath d='M4.5 9h4.5M9 9l7.5-4.6M9 9h7.5M9 9l7.5 4.6' stroke='%230b0f14' stroke-width='1.9' fill='none' stroke-linecap='round'/%3E%3C/svg%3E")}
.lg-ceo{width:12px;height:12px;background:#f59e0b;clip-path:polygon(25% 3%,75% 3%,100% 50%,75% 97%,25% 97%,0 50%)}
.lg-poste{width:6px;height:6px;border-radius:50%;background:#4b5563;box-shadow:0 0 0 1px #d1d5db}
.lg-casa{width:12px;height:12px}
.lg-casa.on{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 1.5 1.5 7.3h1.8V14.5h3.9v-4h1.6v4h3.9V7.3h1.8z' fill='%234ade80' stroke='%230b0f14' stroke-width='1.3'/%3E%3C/svg%3E")}
.lg-casa.off{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 1.5 1.5 7.3h1.8V14.5h3.9v-4h1.6v4h3.9V7.3h1.8z' fill='%23f87171' stroke='%230b0f14' stroke-width='1.3'/%3E%3C/svg%3E")}
.lg-casa.sem{background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M8 1.5 1.5 7.3h1.8V14.5h3.9v-4h1.6v4h3.9V7.3h1.8z' fill='%2394a3b8' stroke='%230b0f14' stroke-width='1.3'/%3E%3C/svg%3E")}

/* Ícones no padrão GeoGrid */
.lg-q{width:11px;height:11px;border:1.2px solid #1c1917}
.lg-q.cto{background:#f97316}.lg-q.ceo{background:#facc15}
.lg-q.poste{background:#d1d5db linear-gradient(45deg,transparent 45%,#111827 45% 55%,transparent 55%),linear-gradient(-45deg,transparent 45%,#111827 45% 55%,transparent 55%)}
.lg-q.poste{background-blend-mode:normal}
.lg-cli{width:12px;height:12px;border-radius:50%;background:#0b0f14;border:2px solid}
.lg-cli.on{border-color:#4ade80}.lg-cli.off{border-color:#f87171}.lg-cli.sem{border-color:#94a3b8}
.mk-svg.bloqueado svg circle:first-child{stroke:#f59e0b;stroke-dasharray:3 2}
.barra-prog{height:6px;background:#243445;border-radius:3px;margin-top:6px;overflow:hidden}
.barra-prog i{display:block;height:100%;background:var(--blue)}
.loc-arrastar{width:30px;height:30px;border-radius:50%;background:#0b0f14;border:3px solid #fbbf24;display:grid;place-items:center;font-size:15px;cursor:grab;box-shadow:0 0 10px #fbbf24}
/* Medidor */
.medicao{position:absolute;right:12px;top:12px;z-index:1000;width:280px;max-height:calc(100% - 90px);display:flex;flex-direction:column;background:rgba(11,18,26,.96);border:1px solid #fde047;border-radius:12px;padding:12px;box-shadow:0 10px 30px #0008}
.md-topo{display:flex;justify-content:space-between;align-items:center;font-weight:700}
.md-total-num{font-size:26px;font-weight:800;color:#fde047;margin:2px 0}
.md-lista{overflow:auto;margin:8px 0;border-top:1px solid var(--line)}
.md-lista>div{display:flex;align-items:center;gap:8px;padding:6px 0;border-bottom:1px solid var(--line);font-size:12.5px}
.md-n{width:20px;height:20px;border-radius:50%;background:#fde047;color:#000;font-weight:800;font-size:11px;display:grid;place-items:center;flex:none}
.md-nome{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.md-m{text-align:right;font-weight:700;white-space:nowrap}.md-m small{display:block;font-weight:400;color:var(--mut)}
.md-x{background:none;border:0;color:#f87171;font-size:13px;padding:2px 4px}
.md-botoes{display:flex;gap:6px;flex-wrap:wrap}.md-botoes .btn{flex:1;padding:7px 8px}
.md-ponto{width:18px;height:18px;border-radius:50%;background:#fde047;color:#000;font-weight:800;font-size:10px;display:grid;place-items:center;border:2px solid #000;cursor:grab}
.md-ponto.encaixado{background:#fff;border-color:#fde047}
.md-trecho{position:absolute;transform:translate(-50%,-50%);background:#0b0f14e6;color:#fde047;border:1px solid #fde047;border-radius:6px;padding:1px 6px;font-size:11px;font-weight:700;white-space:nowrap}
.leaflet-tooltip.md-total{background:#fde047;color:#000;border:0;font-weight:800}
.leaflet-tooltip.md-guia{background:#0b0f14;color:#fde047;border:1px solid #fde047;font-weight:700}
@media (max-width:900px){.medicao{left:12px;right:12px;width:auto;top:auto;bottom:12px;max-height:45%}}
.int-item{margin-bottom:8px}
.int-cab{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:2px}
/* Barra em grupos (submenus) */
.ferramentas button svg{display:block;pointer-events:none}
.fg{position:relative}
.fg>button{position:relative}
.fg-seta{position:absolute;right:3px;bottom:3px;width:0;height:0;border-left:4px solid transparent;border-top:4px solid transparent;border-right:4px solid #94a3b8;border-bottom:4px solid #94a3b8;transform:none}
.fg-menu{display:none;position:absolute;left:46px;top:0;z-index:1100;min-width:250px;background:rgba(15,23,32,.98);border:1px solid var(--line);border-radius:10px;padding:6px;box-shadow:0 12px 30px #000a}
.fg:hover .fg-menu,.fg.aberto .fg-menu{display:block}
.fg-menu::before{content:"";position:absolute;left:-10px;top:0;width:10px;height:100%}
.fg-tit{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--mut);padding:4px 8px 6px}
.ferramentas .fg-menu button{width:100%;height:auto;display:flex;align-items:center;gap:10px;padding:7px 10px;border:0;border-radius:7px;background:none;font-size:13px;text-align:left;justify-content:flex-start}
.ferramentas .fg-menu button:hover{background:var(--panel2)}
.ferramentas .fg-menu button.on{background:#14532d;color:#bbf7d0}
.ferramentas .fg-menu button::after{display:none}
.fg>button:hover::after{display:none}

/* Biblioteca de equipamentos */
.modal-caixa.extra{max-width:1180px}
.bib{display:grid;grid-template-columns:270px 1fr;gap:14px;min-height:60vh}
.bib-lado{display:flex;flex-direction:column;gap:8px;min-width:0}
.bib-cats{display:flex;flex-wrap:wrap;gap:4px}
.bib-cats button{background:var(--panel2);border:1px solid var(--line);border-radius:14px;padding:3px 9px;font-size:12px;color:var(--txt)}
.bib-cats button span{color:var(--mut);font-size:11px}
.bib-cats button.on{background:var(--acc);border-color:var(--acc);color:#06210f}
.bib-cats button.on span{color:#06210f}
.bib-lista{flex:1;overflow:auto;max-height:52vh;border:1px solid var(--line);border-radius:9px}
.bib-lista button{display:block;width:100%;text-align:left;background:none;border:0;border-bottom:1px solid var(--line);padding:7px 10px;color:var(--txt)}
.bib-lista button:hover{background:var(--panel2)}
.bib-lista button.on{background:#22c55e22;box-shadow:inset 3px 0 var(--acc)}
.bib-lista small{display:block;color:var(--mut);font-size:11px}
.bib-acoes{display:flex;gap:6px;flex-wrap:wrap}
.bib-editor{min-width:0}
.bib-prev{background:#0b121a;border:1px solid var(--line);border-radius:9px;padding:10px;margin-bottom:10px;overflow-x:auto}
.bib-prev svg.face{width:100%;min-width:420px;height:auto;max-height:150px;display:block}
.bib-tab{overflow-x:auto;margin:6px 0}
.bib-tab table{font-size:12px}
.bib-tab th{text-align:left;color:var(--mut);font-weight:600;padding:3px 4px}
.bib-tab td{padding:2px 3px}
.bib-tab input,.bib-tab select{padding:4px 6px}
.prontos{max-height:60vh;overflow:auto;margin-bottom:10px}
.prontos h4{margin:10px 0 4px;color:var(--mut);font-size:11px;text-transform:uppercase;letter-spacing:.06em}
.pronto{display:flex;gap:8px;align-items:flex-start;padding:6px 8px;border-radius:7px;color:var(--txt);font-size:13px;cursor:pointer}
.pronto:hover{background:var(--panel2)}
.pronto.existe{opacity:.55;cursor:default}
.esc-lista{display:grid;gap:6px;max-height:62vh;overflow:auto;margin-bottom:10px}
.esc-item{display:block;text-align:left;background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:8px 10px;color:var(--txt)}
.esc-item:hover{border-color:var(--acc)}
.esc-item svg.face{width:100%;height:auto;max-height:70px;margin-top:6px;display:block}
.esc-cab{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.esc-cab small{color:var(--mut)}
@media (max-width:900px){.bib{grid-template-columns:1fr}.bib-lista{max-height:30vh}}

/* Frente dos equipamentos (prévia e rack) */
.face-fundo{fill:#1f2937;stroke:#000;stroke-width:1}
.face-rot{fill:#0006}
.face-nome{fill:#fff;font-size:11px;font-weight:700}
.face-slot{fill:#111827;stroke:#4b5563;stroke-width:1}
.face-slot.vazio{fill:none;stroke-dasharray:4 3}
.face-slot.real{stroke:#5b6170;stroke-width:.7;stroke-dasharray:none}
.face-slot.real.vazio{filter:brightness(.88)}
.face-slot-t{fill:#9ca3af;font-size:8px;pointer-events:none}
.face-bloco{fill:#0003;stroke:#ffffff1a;stroke-width:1}
.face-chassi{stroke:#0b1020;stroke-width:1}
.face-marca{fill:#fff;font-weight:800;font-style:italic;pointer-events:none}
.face-modelo{fill:#e2e8f0;font-size:4.5px;pointer-events:none}
.face-alca{fill:#9aa3b2;stroke:#3b4252;stroke-width:.5}
.face-parafuso{fill:#d4d8de;stroke:#6b7280;stroke-width:.6}
.face-placa{fill:#1f2937;font-weight:700;pointer-events:none}
/* portas: --pf = cor do corpo, mantida quando a porta está ligada */
.pt-pon{--pf:#1b1f27;fill:var(--pf);stroke:#05070a;stroke-width:.8}
.pt-tampa{fill:#3b5bdb;stroke:none}
.pt-sfp{--pf:#2a2f38;fill:var(--pf);stroke:#a3a3a3;stroke-width:.9}
.pt-qsfp{--pf:#2a2f38;fill:var(--pf);stroke:#c084fc;stroke-width:.9}
.pt-boca{fill:#05070a;stroke:none}
.pt-rj45{--pf:#0b0f14;fill:var(--pf);stroke:#94a3b8;stroke-width:.9}
.pt-ger{--pf:#0b0f14;fill:var(--pf);stroke:#94a3b8;stroke-width:.9}
.pt-adapt{--pf:#15803d;fill:var(--pf);stroke:#052e16;stroke-width:1}
.pt-tomada{--pf:#111;fill:var(--pf);stroke:#f97316;stroke-width:1.2}
.pt-fusao{--pf:#334155;fill:var(--pf);stroke:#94a3b8;stroke-width:1}
.pt-furo{fill:#000;pointer-events:none}
.pt-led{fill:#4ade80;stroke:#14532d;stroke-width:.3}
.pt-led.alm{fill:#f87171}
.pt-chave{fill:#111;stroke:#000;stroke-width:.4}
.pt-tecla{fill:#e5e7eb}
.pt-ac{fill:#111;stroke:#000;stroke-width:.4}
.pt-dc{fill:#1f2937;stroke:#000;stroke-width:.4}
.pt-pino{fill:#d4a017}
.pt-borne{fill:#16a34a;stroke:#064e1b;stroke-width:.4}
.pt.dg-ponto{fill:var(--pf)}
.pt.dg-ponto:hover{stroke:#22c55e;stroke-width:1.6}
.pt.dg-ponto.usado{fill:var(--pf);stroke:#facc15;stroke-width:1.4}
.pt.dg-ponto.usado .pt-tampa{fill:#facc15}
.pt.dg-ponto.aceso{filter:drop-shadow(0 0 2px #4ade80)}
.pt.pon-ok .pt-tampa,.pt.dg-ponto.usado.pon-ok .pt-tampa{fill:#22c55e}
.pt.pon-atencao .pt-tampa,.pt.dg-ponto.usado.pon-atencao .pt-tampa{fill:#f59e0b}
.pt.pon-queda .pt-tampa,.pt.dg-ponto.usado.pon-queda .pt-tampa{fill:#ef4444}
.pt.dg-ponto.sel{fill:#22c55e;stroke:#fff;stroke-width:2}
.pt.dg-ponto.alvo{stroke:#4ade80;stroke-width:1.6}
.face-texto{pointer-events:none;font-family:"Segoe UI",Arial,sans-serif}
.face-moldura{fill:#b9bec5;stroke:#8d939b;stroke-width:.5;pointer-events:none}
.face-num{pointer-events:none;font-family:Arial,sans-serif}
.pt-grade{fill:none;stroke:#3f444b;stroke-width:1.1;stroke-linejoin:miter}
.pt-fenda{fill:#0b0d10;stroke:none}
.pt-tela{fill:#c9ced4;stroke:#8d939b;stroke-width:.6}
.pt-visor{fill:#8f9aa6;stroke:none}
.pt-botao{fill:#111;stroke:none}
.pt-usb{fill:#1f2328;stroke:#9ca3af;stroke-width:.4}
.pt-db9{--pf:#2a2f38;fill:var(--pf);stroke:#111;stroke-width:.5}
.bib-aviso{margin-bottom:10px;font-size:12px;display:flex;flex-wrap:wrap;gap:8px;align-items:center;border-color:#22c55e66}
.pt-espelho{fill:#c3c7cd;stroke:#7b8189;stroke-width:.4}
.pt-sextavado{fill:#9aa0a8;stroke:#5b616a;stroke-width:.3}
.pt-shell{fill:#2a2f38;stroke:#8d939b;stroke-width:.5}
.pt-shell-dc{fill:#111;stroke:#4b5058;stroke-width:.4}
.pt-pininho{fill:#c9a227;stroke:#1a1d22;stroke-width:.25}
.pt-db9{--pf:#c3c7cd}
.pt-dc{fill:#111}
.face-modulo{stroke:#3a3c40;stroke-width:.5}
.face-modulo.vazio{stroke:#2a2c30}
.face-parafuso.escuro{fill:#2b2d31;stroke:#55585e}
.pt-adapt.con-scapc{--pf:#16a34a;stroke:#0b3d1c}
.pt-adapt.con-scupc{--pf:#2563eb;stroke:#13306e}
.pt-adapt.con-lcapc{--pf:#16a34a}
.pt-adapt.con-lcupc{--pf:#2563eb}
.dg-fio.rede{stroke-width:3;stroke-dasharray:none}
.dg-fio.dac{stroke-width:3.6}
.dg-leg{display:inline-block;width:10px;height:4px;border-radius:2px;margin-right:6px;vertical-align:middle}
.pt.dg-ponto.usado.lig-rede{stroke:#3b82f6}
.pt.dg-ponto.usado.lig-dac{stroke:#94a3b8}
.leaflet-container.movendo, .leaflet-container.movendo .leaflet-interactive{cursor:move}

/* Cabos: lançamento, cadastro e tipos */
.lanc{position:absolute;top:12px;right:12px;bottom:12px;width:270px;z-index:1000;background:var(--panel);border:1px solid var(--line);border-radius:12px;
  display:flex;flex-direction:column;box-shadow:0 12px 30px #0008;overflow:hidden}
.lanc-cab{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;border-bottom:1px solid var(--line);background:#0b121a}
.lanc-med{display:grid;grid-template-columns:repeat(4,1fr);gap:4px;padding:8px 10px;border-bottom:1px solid var(--line)}
.lanc-med div{display:flex;flex-direction:column;align-items:center;font-size:11px;color:var(--mut)}
.lanc-med b{font-size:14px;color:var(--txt)}
.lanc-med div:first-child b{color:#4ade80}
.lanc-lista{flex:1;overflow:auto;padding:6px}
.lanc-it{display:grid;grid-template-columns:20px 1fr auto auto;gap:6px;align-items:center;padding:4px 6px;border-radius:6px;background:var(--panel2);margin-bottom:4px;font-size:12px;cursor:pointer}
.lanc-it:hover{outline:1px solid var(--acc)}
.lanc-it i{font-style:normal;text-align:center}
.lanc-it .btn.icone{padding:2px 6px}
.lanc-pe{border-top:1px solid var(--line);padding:8px 10px;display:grid;gap:6px}
.lanc-ad{font-size:12px;color:var(--mut);display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.lanc-ad label{display:flex;gap:4px;align-items:center;color:var(--txt);font-size:12px}
.lanc-ad input{width:auto}
.lanc-bt{display:flex;gap:6px}.lanc-bt .btn{flex:1}
.lanc-dica{font-size:11px;line-height:1.4}
.lanc-pt{background:#0b0f14;border:2px solid #22c55e;border-radius:50%;color:#fff;font:700 9px/14px sans-serif;text-align:center}
.lanc-pt.el{border-color:#fde047;background:#1c1917}
.lanc-pt b{display:block}
.leaflet-container.lancando{cursor:crosshair}
.rot.lanc-dist{background:#fde047;color:#111;border:0;font-weight:700}
@media (max-width:900px){.lanc{top:auto;left:8px;right:8px;width:auto;height:46%}}

.cb-barra{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}
.cb-barra select{width:auto}.cb-barra input{flex:1;min-width:160px}
.cb-lista{display:grid;gap:4px;max-height:62vh;overflow:auto}
.cb-item{display:flex;align-items:center;gap:10px;padding:7px 10px;border-radius:8px;background:var(--panel2);border:1px solid var(--line)}
.cb-item.inativo{opacity:.5}
.cb-nome{flex:1;min-width:0}
.cb-nome small{display:block}
.cb-amostra{flex:none}
.cb-amostra.grande{width:56px;height:30px}
.cb-tipo{display:grid;grid-template-columns:1fr 220px;gap:16px}
.cb-prev{background:#0b121a;border:1px solid var(--line);border-radius:10px;padding:12px;display:flex;flex-direction:column;align-items:center;gap:10px;align-self:start;position:sticky;top:0}
.cb-linha{display:flex;gap:6px;align-items:center}
.cb-linha input,.cb-linha select{flex:1}
.cb-check{display:flex;gap:8px;align-items:center;color:var(--txt);font-size:12px}
.cb-check input{width:auto}
.cb-padroes{display:grid;gap:6px;margin-top:4px}
.cb-padrao{display:block;padding:8px 10px;border:1px solid var(--line);border-radius:8px;cursor:pointer;color:var(--txt);font-size:12px}
.cb-padrao.on{border-color:var(--acc);background:#22c55e14}
.cb-padrao input{width:auto;margin-right:6px}
.cb-faixa{display:flex;gap:2px;margin-top:5px;flex-wrap:wrap}
.cb-faixa i{width:20px;height:16px;border-radius:3px;border:1px solid #0008;display:grid;place-items:center}
.cb-faixa b{font-size:8px;color:#000;opacity:.65;text-shadow:0 0 2px #fff}
.cb-estilo{display:grid;grid-template-columns:90px 1fr 1fr;gap:10px;align-items:end}
.cb-estilo input[type=color]{height:34px;padding:2px}
.cb-estilo-am{grid-column:1/-1;display:flex;justify-content:center;background:#0b121a;border-radius:8px;padding:6px}
.cb-cad-topo{display:flex;gap:12px;align-items:stretch}
.cb-cad-ic{width:64px;flex:none;border-radius:10px;background:#f8fafc;display:grid;place-items:center}
.cb-cad-campos{flex:1;display:grid;gap:10px}
.form .tres{display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px}
.cb-info{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px;font-size:12px}
.cb-info-g{display:flex;gap:12px;align-items:center}
.cb-info-g .kv{flex:1}
.cb-info-corte svg{width:90px;height:90px}
.cb-cont{display:grid;grid-template-columns:repeat(6,1fr);gap:6px}
.cb-cont div{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:6px;text-align:center;font-size:11px;color:var(--mut);display:flex;flex-direction:column}
.cb-cont b{font-size:16px;color:var(--txt)}
.cb-custo{font-size:12px}
.cc-cores{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:6px}
.cc-cor{display:grid;grid-template-columns:20px 44px 1fr auto;gap:6px;align-items:center}
.cc-cor input[type=color]{height:30px;padding:2px}
@media (max-width:900px){.cb-tipo{grid-template-columns:1fr}.cb-cont{grid-template-columns:repeat(3,1fr)}.form .tres{grid-template-columns:1fr 1fr}}
.cb-amostra{background:#e5e7eb;border-radius:4px}

/* Mapas base */
.mb-bases{display:grid;grid-template-columns:repeat(auto-fill,minmax(76px,1fr));gap:4px}
.mb-bases button{padding:7px 4px;border-radius:8px;background:var(--panel2);border:1px solid var(--line);font-weight:600;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mb-bases button.on{background:var(--acc);border-color:var(--acc);color:#06210f}
.mb-sobre{margin-top:6px}
.mb-gerir{margin-top:6px;width:100%;background:none;border:1px dashed var(--line);border-radius:8px;padding:5px;color:var(--mut);font-size:12px}
.mb-gerir:hover{color:var(--txt);border-color:var(--acc)}
.mb-lista{display:grid;gap:5px;max-height:58vh;overflow:auto}
.mb-item{display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid var(--line);border-radius:9px;background:var(--panel2)}
.mb-item.inativo{opacity:.55}
.mb-ordem{display:flex;flex-direction:column;gap:2px}.mb-ordem .btn{padding:0 5px;font-size:9px;line-height:14px}
.mb-mini{width:54px;height:54px;border-radius:6px;object-fit:cover;background:#0b121a;flex:none}
.mb-nome{flex:1;min-width:0}.mb-nome small{display:block}
.mb-liga input{width:auto}
.mb-catalogo h4{margin:12px 0 6px;color:var(--mut);font-size:11px;text-transform:uppercase;letter-spacing:.06em}
.mb-cat{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:8px}
.mb-card{text-align:left;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px;color:var(--txt);display:flex;flex-direction:column;gap:5px}
.mb-card:hover{border-color:var(--acc)}
.mb-card small{color:var(--mut);font-size:12px;line-height:1.35}
.mb-tags{display:flex;gap:4px;flex-wrap:wrap}
.mb-form{display:grid;grid-template-columns:1fr 330px;gap:16px}
.mb-dicas{background:#0b121a;border:1px solid var(--line);border-radius:10px;padding:12px;font-size:13px;line-height:1.45;align-self:start;position:sticky;top:0}
.mb-dicas h4{margin:0 0 6px}
.mb-dicas ol{padding-left:18px;margin:8px 0;display:grid;gap:6px}
.mb-links{display:grid;gap:4px;margin:8px 0}.mb-links a{color:#93c5fd;font-size:12px}
.mb-checks{display:grid;grid-template-columns:1fr 1fr;gap:6px}
.mb-avancado summary{cursor:pointer;color:var(--mut);font-size:12px;margin-bottom:6px}
.mb-teste{display:flex;gap:10px;align-items:center;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:8px;min-height:60px;font-size:12px}
.mb-teste img{width:128px;height:128px;border-radius:6px;flex:none;image-rendering:auto}
@media (max-width:900px){.mb-form{grid-template-columns:1fr}.mb-checks{grid-template-columns:1fr}}

/* seletor de mapa no canto do mapa */
.mb-ctrl{position:relative;font:13px "Segoe UI",system-ui,sans-serif}
.mb-ctrl-bt{background:var(--panel);color:var(--txt);border:1px solid var(--line);border-radius:9px;padding:8px 12px;font-weight:700;box-shadow:0 4px 14px #0007;
  display:flex;gap:6px;align-items:center;max-width:230px}
.mb-ctrl-bt span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mb-ctrl-painel{display:none;position:absolute;right:0;top:calc(100% + 6px);width:300px;max-height:70vh;overflow:auto;background:var(--panel);border:1px solid var(--line);
  border-radius:12px;padding:10px;box-shadow:0 12px 30px #0009;color:var(--txt)}
.mb-ctrl.aberto .mb-ctrl-painel{display:block}
.mb-ctrl-tit{font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--mut);margin:4px 2px 6px}
.mb-ctrl-grade{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-bottom:8px}
.mb-ctrl-grade button{background:var(--panel2);border:2px solid var(--line);border-radius:9px;padding:3px;color:var(--txt);display:flex;flex-direction:column;gap:3px;font-size:11px;font-weight:600}
.mb-ctrl-grade button.on{border-color:var(--acc)}
.mb-ctrl-grade img{width:100%;aspect-ratio:1;object-fit:cover;border-radius:6px;background:#0b121a}
.mb-ctrl-grade span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* cadastro de CTO/CEO/reserva */
.cx-topo{display:flex;gap:12px;align-items:stretch}
.cx-ic-wrap{position:relative;flex:none}
.cx-ic{width:76px;height:100%;min-height:90px;border-radius:10px;background:#f8fafc;display:flex;flex-direction:column;align-items:center;justify-content:center;border:2px solid transparent;cursor:pointer}
.cx-ic:hover{border-color:var(--acc)}
.cx-ic svg{width:52px;height:52px}
.cx-ic span{font-size:10px;color:#475569;font-weight:600}
.cx-paleta{position:absolute;top:calc(100% + 4px);left:0;z-index:5;width:200px;display:grid;grid-template-columns:repeat(5,1fr);gap:5px;padding:8px;
  background:var(--panel);border:1px solid var(--line);border-radius:10px;box-shadow:0 10px 24px #0009}
.cx-paleta [data-cor]{width:30px;height:30px;border-radius:7px;border:2px solid #0006;cursor:pointer}
.cx-paleta label{display:block}.cx-paleta input[type=color]{width:30px;height:30px;padding:0;border-radius:7px}
.cx-paleta .cx-pad{grid-column:span 2;width:auto;background:var(--panel2)!important;color:var(--txt);font-size:11px}
.cx-campos{flex:1;display:grid;gap:10px}
.cx-montagem{display:grid;gap:8px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px}
.cx-cabos{display:grid;gap:4px;margin-top:4px}

/* sangria: fibra que passa inteira */
.dg-sangria{fill:none;stroke-width:2.2;stroke-dasharray:6 5;opacity:.85;pointer-events:none}
.dg-sangria.sel{stroke-width:3.5;opacity:1}
.dg-tesoura{cursor:pointer}
.dg-tesoura circle{fill:#0b121a;stroke:#e5e7eb;stroke-width:1.2}
.dg-tesoura text{fill:#e5e7eb;font-size:8px;pointer-events:none}
.dg-tesoura.sel circle{fill:#facc15;stroke:#111}
.dg-tesoura.sel text{fill:#111;font-size:11px}
.dg-tesoura:hover circle{stroke:#22c55e;stroke-width:2}
.dg-fibra-tit{display:flex;gap:8px;align-items:center}
.dg-fibra-tit i{width:14px;height:14px;border-radius:50%;border:1px solid #0008}
.dg-deriv-ajuda{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:10px}
.dg-deriv-ajuda div{background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:8px;font-size:12px;display:grid;gap:4px}
.dg-deriv-ajuda span{color:var(--mut)}
.dg-deriv-bt{display:flex;gap:6px}
.cx-modo{display:grid;gap:4px;font-size:12px}
.cx-modo>span{color:var(--mut)}
.dg-ponto.bloqueada{fill:#7f1d1d;stroke:#f87171}
.dg-ponto.reservada{fill:#1e3a8a;stroke:#60a5fa}
.dg-x{stroke:#fecaca;stroke-width:1.6}

/* balão de viabilidade (poste/caixa) */
.viab-pop .leaflet-popup-content-wrapper{background:var(--panel);color:var(--txt);border:1px solid var(--line);border-radius:12px;box-shadow:0 12px 30px #0009;padding:0}
.viab-pop .leaflet-popup-content{margin:0;width:auto!important;min-width:260px}
.viab-pop .leaflet-popup-tip{background:var(--panel);border:1px solid var(--line)}
.viab{padding:10px 12px;font:13px "Segoe UI",system-ui,sans-serif}
.viab-tit{text-align:center;font-weight:800;font-size:16px;padding-bottom:6px;border-bottom:1px solid var(--line);margin-bottom:6px}
.viab-sub{text-align:center;color:var(--mut);font-size:12px;margin-bottom:6px}
.viab-grade{display:grid;grid-template-columns:1fr 1fr;gap:10px;background:var(--panel2);border-radius:9px;padding:8px 10px}
.viab-col h5{margin:0 0 4px;font-size:14px}
.viab-col div{display:flex;gap:4px;font-size:12.5px;line-height:1.55}
.viab-col .vl{color:#4ade80}.viab-col .vo{color:#f87171}.viab-col .vb{color:#fb923c}.viab-col .vr{color:#60a5fa}.viab-col .vc{color:#2dd4bf}
.viab-barra{height:5px;border-radius:3px;background:#22c55e33;margin:7px 2px 2px;overflow:hidden}.viab-barra i{display:block;height:100%;background:linear-gradient(90deg,#22c55e,#f59e0b,#ef4444)}
.viab-extra{display:flex;flex-direction:column;gap:2px;font-size:11.5px;color:var(--mut);margin-top:6px}
.viab-mais{display:block;width:100%;text-align:right;margin-top:8px;padding-top:7px;border:0;border-top:1px solid var(--line);background:none;color:var(--txt);font-weight:700;cursor:pointer}
.viab-mais:hover,.viab-voltar:hover{color:var(--acc)}
.viab-voltar{border:0;background:none;color:var(--txt);font-weight:700;cursor:pointer;padding:0 0 6px}
.viab-caixa{display:flex;flex-direction:column;align-items:center;margin:4px 0 6px;position:relative}
.viab-caixa b{font-size:15px}.viab-caixa span{font-size:11px}
.viab-caixa button{position:absolute;right:0;top:0;border:1px solid var(--line);background:var(--panel2);color:var(--txt);border-radius:6px;font-size:11px;padding:2px 6px;cursor:pointer}
.viab hr{border:0;border-top:1px dashed var(--line);margin:8px 0}
.viab-pop.abaixo .leaflet-popup-tip-container{display:none}
.viab-dist{font-size:11.5px;color:#a78bfa;margin-top:6px}
.viab-pop .leaflet-popup-close-button{color:var(--mut)!important;top:6px!important;right:6px!important}

/* Usuários, perfis e minha conta */
.usuario .conta{display:flex;align-items:center;gap:8px;background:none;border:1px solid transparent;border-radius:20px;padding:2px 8px 2px 2px;color:var(--mut)}
.usuario .conta:hover{border-color:var(--line);background:var(--panel2);color:var(--txt)}
.us-abas{margin:0 0 12px}
.us-tabela{overflow:auto}
.us-tabela td{vertical-align:top}
.us-inativo td{opacity:.55}
.us-senha{display:flex;gap:8px;align-items:center}
.us-senha code{flex:1;font:600 18px/1 Consolas,monospace;letter-spacing:.08em;background:#0b121a;border:1px dashed var(--acc);border-radius:8px;padding:12px;text-align:center;color:var(--txt);user-select:all}
.us-acoes{display:flex;flex-wrap:wrap;gap:6px}
.pf-lista{display:flex;flex-direction:column;gap:8px}
.pf-item{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px 12px}
.pf-cab{display:flex;justify-content:space-between;gap:10px;align-items:flex-start}
.pf-perms{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}
.pf-grupo{border:1px solid var(--line);border-radius:10px;padding:6px}
.pf-gtit{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--mut);padding:2px 8px 4px}
.pf-grupo .lay{align-items:flex-start}
/* telas médias: botões do topo só com ícone (o nome aparece ao passar o mouse) para sobrar espaço para a busca */
@media (max-width:1500px){.top .btn .some-celular,.top #nome-usuario{display:none}.usuario .conta{padding:2px}}
.nova-versao{position:fixed;left:50%;bottom:18px;transform:translateX(-50%);z-index:3000;background:#0b121a;border:1px solid var(--acc);border-radius:10px;padding:8px 10px 8px 14px;display:flex;gap:12px;align-items:center;box-shadow:0 10px 30px #0008}
.emp-nome{color:var(--mut);font-size:12px;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-left:1px solid var(--line);padding-left:10px}
@media (max-width:1100px){.emp-nome{display:none}}
.rv-resumo{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:10px}
.rv-resumo>div{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:8px 12px}
.rv-resumo b{display:block;font-size:20px}.rv-resumo span{color:var(--mut);font-size:11px}
