:root{ /* escuro (padrão) */
  --fundo:#0a0d14; --cartao:#0f1520; --borda:#1e2d45; --texto:#e2e8f0; --suave:#94a3b8;
  --destaque:#00d4ff; --destaque-texto:#0a0d14; --erro:#f87171; --ok:#4ade80;
  --campo:#0b111b; --brilho:rgba(107,63,160,.25); --foco:rgba(0,212,255,.18); --raio:10px; --cabo:#c084fc;
}
@media (prefers-color-scheme: light){
  :root:not([data-tema]){ --fundo:#f1f5f9; --cartao:#ffffff; --borda:#cbd5e1; --texto:#0f172a; --suave:#475569;
    --destaque:#0284c7; --destaque-texto:#ffffff; --campo:#f8fafc; --erro:#dc2626; --ok:#16a34a;
    --brilho:rgba(107,63,160,.18); --foco:rgba(2,132,199,.18); --cabo:#7e22ce; }
}
:root[data-tema=claro]{ --fundo:#f1f5f9; --cartao:#ffffff; --borda:#cbd5e1; --texto:#0f172a; --suave:#475569;
  --destaque:#0284c7; --destaque-texto:#ffffff; --campo:#f8fafc; --erro:#dc2626; --ok:#16a34a;
  --brilho:rgba(107,63,160,.18); --foco:rgba(2,132,199,.18); --cabo:#7e22ce; }
:root[data-tema=militar]{ --fundo:#191c14; --cartao:#232819; --borda:#434a32; --texto:#e8e4cc; --suave:#a9a685;
  --destaque:#c9a54a; --destaque-texto:#191c14; --campo:#1d2116; --erro:#e07a5f; --ok:#9bbf6a;
  --brilho:rgba(107,120,60,.35); --foco:rgba(201,165,74,.22); --cabo:#d97706; }
:root[data-tema=militar] .marca span, :root[data-tema=militar] h1{letter-spacing:.06em;text-transform:uppercase}
:root[data-tema=militar] .botao{text-transform:uppercase;letter-spacing:.08em}
*{box-sizing:border-box}
[hidden]{display:none !important} /* "hidden" sempre esconde, mesmo com display definido em outra regra */
html,body{margin:0;height:100%}
body{background:var(--fundo);color:var(--texto);font:16px/1.5 'Segoe UI',system-ui,Arial,sans-serif;-webkit-text-size-adjust:100%}
a{color:var(--destaque)}
h1{font-size:1.5rem;margin:.5rem 0 .25rem}
h2{font-size:1.1rem;margin:1.75rem 0 .5rem}
.sub,.dica{color:var(--suave);margin:0 0 1rem;font-size:.92rem}
.dica{margin:.35rem 0 0;font-size:.82rem}

/* Telas de login */
.tela-auth{display:flex;align-items:center;justify-content:center;min-height:100%;padding:24px 16px;
  background:radial-gradient(ellipse at top,var(--brilho),transparent 60%),var(--fundo)}
.cartao{width:100%;max-width:400px;background:var(--cartao);border:1px solid var(--borda);border-radius:14px;padding:28px 24px}
.cartao.largo{max-width:560px}
.marca{display:flex;align-items:center;gap:10px;font-weight:600;color:var(--destaque)}
.marca svg{width:28px;height:28px;fill:currentColor;color:var(--destaque)}
.marca span{color:var(--texto)}

form{display:flex;flex-direction:column}
label{font-size:.88rem;margin:14px 0 6px;color:var(--suave)}
input[type=email],input[type=password],input[type=text],input[type=search]{width:100%;padding:12px 14px;font-size:16px;color:var(--texto);
  background:var(--campo);border:1px solid var(--borda);border-radius:var(--raio);outline:none}
input:focus{border-color:var(--destaque);box-shadow:0 0 0 3px var(--foco)}
.campo-senha{position:relative}
.campo-senha input{padding-right:84px}
.ver-senha{position:absolute;right:6px;top:50%;transform:translateY(-50%);background:none;border:0;color:var(--destaque);
  font-size:.82rem;padding:8px;cursor:pointer}
.linha{margin-top:14px}
.check{display:flex;align-items:center;gap:8px;margin:0;color:var(--texto);font-size:.9rem;cursor:pointer}
.check input{width:18px;height:18px;accent-color:var(--destaque)}
.botao{display:block;width:100%;margin-top:20px;padding:13px;border:0;border-radius:var(--raio);font-size:1rem;font-weight:600;
  background:var(--destaque);color:var(--destaque-texto);cursor:pointer;text-align:center;text-decoration:none}
.botao:disabled{opacity:.6;cursor:wait}
.msg{margin:14px 0 0;padding:10px 12px;border-radius:8px;font-size:.9rem;border:1px solid}
.msg.erro{color:var(--erro);border-color:var(--erro);background:rgba(248,113,113,.08)}
.msg.ok{color:var(--ok);border-color:var(--ok);background:rgba(74,222,128,.08)}
.rodape-form{text-align:center;margin:18px 0 0;font-size:.92rem}
.forca{height:4px;background:var(--borda);border-radius:2px;margin-top:8px;overflow:hidden}
.forca span{display:block;height:100%;width:0;transition:width .2s,background .2s}

/* Páginas internas */
.topo{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 16px;background:var(--cartao);
  border-bottom:1px solid var(--borda);position:relative;z-index:1000}
.topo nav{display:flex;align-items:center;gap:16px;font-size:.92rem}
.topo nav a{text-decoration:none;color:var(--texto)}
.link{background:none;border:0;color:var(--destaque);font:inherit;cursor:pointer;padding:0}
.pagina{padding:24px 16px;display:flex;justify-content:center}
.dados{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;margin:16px 0 0}
.dados dt{color:var(--suave)}
.dados dd{margin:0;word-break:break-word}

.tela-mapa{display:flex;flex-direction:column;height:100%}
#mapa,#mapa3d{flex:1;min-height:0}
/* Visão 3D */
.rotulo-3d{font:600 11px/1.2 system-ui,sans-serif;color:#0f172a;background:rgba(255,255,255,.88);border-radius:4px;
  padding:1px 5px;white-space:nowrap;pointer-events:none;box-shadow:0 1px 2px rgba(0,0,0,.25)}
.legenda .linha-aerea{display:inline-block;width:18px;border-top:3px solid #0284c7}
.painel-3d .painel-cab a.botao{width:auto;text-decoration:none}
.painel-3d .dica{font-size:.78rem;color:var(--suave);margin:8px 0}
.maplibregl-popup-content{background:var(--cartao,#fff);color:var(--texto,#0f172a)}
@media (max-width:420px){ .topo .marca span{display:none} .topo nav{gap:14px} }
.botao-tema{background:none;border:1px solid var(--borda);color:var(--suave);border-radius:20px;padding:4px 12px;
  font:inherit;font-size:.82rem;cursor:pointer}
.tela-auth .botao-tema{display:block;margin:14px auto 0}

/* Mapa + painel do projeto */
.area-mapa{position:relative;flex:1;min-height:0;display:flex}
.painel{position:absolute;top:10px;right:10px;z-index:1010;width:300px;max-width:calc(100% - 64px);
  background:var(--cartao);border:1px solid var(--borda);border-radius:12px;box-shadow:0 4px 18px rgba(0,0,0,.25)}
.painel-cab{display:flex;gap:6px;align-items:center;padding:8px}
.painel-cab select{flex:1;min-width:0;padding:8px 10px;font:inherit;font-size:.92rem;color:var(--texto);
  background:var(--campo);border:1px solid var(--borda);border-radius:8px}
.icone{background:none;border:1px solid var(--borda);color:var(--texto);border-radius:8px;width:34px;height:34px;cursor:pointer}
.painel-corpo{padding:0 12px 12px}
.resumo{margin:0;font-size:.88rem;color:var(--suave)}
.painel-acoes{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;margin-top:10px}
.botao.pequeno{width:auto;margin:0;padding:8px 14px;font-size:.88rem}
.perigo{color:var(--erro)}
dialog.cartao{color:var(--texto);padding:24px;max-width:min(420px,calc(100% - 32px))}
dialog::backdrop{background:rgba(0,0,0,.55)}
dialog h2{margin-top:0}
input[type=file]{font:inherit;font-size:.9rem;color:var(--texto)}
.cancelar{display:block;margin:12px auto 0;text-align:center}
.leaflet-container{font:inherit}
.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:var(--cartao);color:var(--texto)}
.leaflet-popup-content{margin:12px 14px;font-size:.9rem;line-height:1.45}
.pop strong{display:block;margin-bottom:4px}
.pop p{margin:4px 0}
.pop-desc{white-space:pre-line;max-height:180px;overflow:auto;color:var(--suave);font-size:.85rem}
.pop-coord{font-family:ui-monospace,monospace;font-size:.82rem}
.leaflet-tooltip.rotulo{background:var(--cartao);color:var(--texto);border:1px solid var(--borda);box-shadow:none;
  font-size:.75rem;font-weight:600;padding:1px 5px}
.leaflet-tooltip.rotulo::before{display:none}

/* Gaveta de edição do ponto */
.gaveta{position:fixed;z-index:1100;top:0;right:0;bottom:0;width:380px;max-width:100%;background:var(--cartao);
  border-left:1px solid var(--borda);box-shadow:-6px 0 24px rgba(0,0,0,.3);display:flex;flex-direction:column}
.gaveta[hidden]{display:none}
.gaveta-cab{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;padding:14px 16px;border-bottom:1px solid var(--borda)}
.gaveta-cab h2{margin:2px 0 0;font-size:1.05rem}
.gaveta-cab small{margin:0}
.gaveta-corpo{overflow:auto;padding:4px 16px 24px;flex:1}
.gaveta h3{font-size:.95rem;margin:18px 0 4px;text-transform:uppercase;letter-spacing:.05em;color:var(--suave)}
.gaveta h4{font-size:.92rem;margin:16px 0 0}
.gaveta select,.gaveta textarea,.gaveta input[type=number],.gaveta input[type=text]{width:100%;padding:10px 12px;font:inherit;font-size:16px;color:var(--texto);
  background:var(--campo);border:1px solid var(--borda);border-radius:var(--raio)}
.gaveta textarea{resize:vertical}
.gaveta label{margin-top:10px}
.gaveta .botao.pequeno{margin-top:12px}
.dupla{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.dupla>div{display:flex;flex-direction:column;min-width:0}
.com-amostra{display:flex;align-items:center;gap:6px}
.amostra{display:inline-block;width:14px;height:14px;border-radius:50%;border:1px solid var(--borda);flex:none}
.lista-spl{list-style:none;padding:0;margin:8px 0 0;display:flex;flex-direction:column;gap:8px}
.lista-spl li{border:1px solid var(--borda);border-radius:10px;padding:10px 12px;display:flex;flex-direction:column;gap:2px}
.lista-spl li.vazio{color:var(--suave);font-size:.9rem;border-style:dashed}
.lista-spl small{color:var(--suave);font-size:.84rem}
.lista-spl .painel-acoes{margin-top:4px}
.spl-cab{display:flex;justify-content:space-between;gap:8px;align-items:center}
.fibra{display:inline-flex;align-items:center;gap:5px;font-size:.84rem;color:var(--suave)}
#cx-remover{display:block;margin-top:22px}
.pop-caixa{font-size:.86rem}
.pop-acoes{margin-top:8px}
.pop-acoes-link{display:flex;gap:16px;flex-wrap:wrap}
.pop-acoes .botao.pequeno{width:100%}
.leaflet-tooltip.rotulo.com-caixa{border-color:var(--destaque)}
@media (max-width:600px){
  .gaveta{top:auto;width:100%;height:72vh;border-left:0;border-top:1px solid var(--borda);border-radius:14px 14px 0 0}
}
.marcador-caixa{display:grid;place-items:center;width:24px;height:24px;border-radius:6px;border:2px solid #fff;
  font:700 12px/1 system-ui,sans-serif;color:#fff;box-shadow:0 1px 4px rgba(0,0,0,.45)}
.marcador-caixa.ceo{background:#9333ea}
.marcador-caixa.cto{background:#16a34a}
.marcador-caixa.projetada{border-style:dashed}
.marcador-caixa.ceo.projetada{background:rgba(147,51,234,.72)}
.marcador-caixa.cto.projetada{background:rgba(22,163,74,.72)}
.marcador-caixa.olt{background:#1d3a8a}
.marcador-caixa.olt.projetada{background:rgba(29,58,138,.72)}
/* Pontos sem caixa que não são poste: caixa de passagem (quadrado marrom), prédio/bloco (cinza) */
.marcador-local{display:grid;place-items:center;width:16px;height:16px;border-radius:3px;border:2px solid #fff;
  font:700 9px/1 system-ui,sans-serif;color:#fff;box-shadow:0 1px 3px rgba(0,0,0,.45)}
.marcador-local.passagem{background:#8b5c2f}
.marcador-local.predio{background:#64748b}
.legenda .marcador-local{width:14px;height:14px;font-size:8px;border-width:1.5px}
.legenda .linha-sub{display:inline-block;width:18px;border-top:3px dashed #8b5c2f}
.legenda{display:flex;flex-wrap:wrap;gap:6px 12px;margin-top:8px;font-size:.8rem;color:var(--suave)}
.legenda span{display:inline-flex;align-items:center;gap:5px}
.legenda .marcador-caixa{width:16px;height:16px;font-size:9px;border-width:1.5px;border-radius:4px}

/* Perdas e limites */
.grade-param{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:4px 14px}
.grade-param>div,.tab-param td>div{display:flex;flex-direction:column}
.grade-param input,.tab-param input{width:100%;padding:9px 10px;font-size:16px;color:var(--texto);background:var(--campo);
  border:1px solid var(--borda);border-radius:8px}
input.alterado{border-color:var(--destaque);box-shadow:0 0 0 2px var(--foco)}
.tabela-rolar{overflow-x:auto}
.tab-param{border-collapse:collapse;width:100%}
.tab-param th,.tab-param td{padding:4px 6px;text-align:left;vertical-align:bottom;font-size:.88rem}
.tab-param thead th{color:var(--suave);font-weight:500}
.tab-param td label{position:absolute;left:-9999px}
#g-cabo,#g-onu{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}

/* Sinal */
.dbm{font-variant-numeric:tabular-nums;font-weight:600}
.st-ok{color:var(--ok)} .st-alerta{color:#eab308} .st-fraco,.st-forte{color:var(--erro)} .st-sem_sinal,.st-sem_portas{color:var(--suave)}
.leaflet-tooltip.rotulo .dbm{margin-left:4px}
.lista-sinal{list-style:none;margin:8px 0 0;padding:0;max-height:34vh;overflow:auto;font-size:.86rem}
.lista-sinal li{display:flex;justify-content:space-between;gap:8px;padding:5px 0;border-top:1px solid var(--borda);cursor:pointer}
.lista-sinal li:first-child{border-top:0}
.sinal-spl{font-size:.84rem;color:var(--suave)}
.caixa-sinal{margin:10px 0 0;padding:10px 12px;border-radius:10px;border:1px solid var(--borda);font-size:.9rem}
.bloco-sinal{margin-top:10px;border-top:1px solid var(--borda);padding-top:8px}
.bloco-sinal summary{cursor:pointer;font-size:.9rem;font-weight:600}
.bloco-sinal summary .sub{font-weight:400;font-size:.82rem;margin:0}
.bloco-sinal .dica{margin-top:6px}
.leaflet-marker-icon.grupo-caixas{display:flex;gap:2px}
.abas-caixa{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 4px}
.aba{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:8px;border:1px solid var(--borda);
  background:var(--campo);color:var(--texto);font:inherit;font-size:.86rem;cursor:pointer}
.aba.ativa{border-color:var(--destaque);box-shadow:0 0 0 2px var(--foco)}
.aba.nova{color:var(--destaque)}
.marcador-caixa.mini{width:16px;height:16px;font-size:9px;border-width:1.5px;border-radius:4px;box-shadow:none}

/* Relatório de campo */
.relatorio .painel-acoes{margin:6px 0 4px}
.botao.secundario{background:transparent;color:var(--destaque);border:1px solid var(--destaque)}
.tab-mat{border-collapse:collapse;width:100%;font-size:.9rem}
.tab-mat th,.tab-mat td{border:1px solid var(--borda);padding:6px 8px;text-align:left;vertical-align:top}
.tab-mat th{font-weight:500;color:var(--suave);width:45%}
.rel-ponto{border-top:1px solid var(--borda);padding:10px 0 4px}
.rel-ponto h3{margin:0;font-size:1rem}
.rel-ponto h4{margin:10px 0 2px;font-size:.92rem}
.rel-ponto ul{margin:4px 0;padding-left:20px;font-size:.9rem}
.rel-ponto li{margin:2px 0}
.rel-ponto .dbm{margin:4px 0 0;font-size:.9rem}
#acoes-relatorio{font-size:.88rem}

/* Portas da CTO */
#sec-portas .dica{margin:0 0 6px}
.grade-bloco{margin:6px 0 10px}
.grade-tit{font-size:.84rem;color:var(--suave);margin-bottom:4px}
.grade-portas{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}
.porta{min-height:52px;border-radius:8px;border:1.5px solid var(--borda);background:var(--campo);color:var(--texto);
  font:inherit;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;padding:4px 2px}
.porta-n{font-weight:700;font-size:.95rem;line-height:1}
.porta-c{font-size:.7rem;color:var(--suave);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.porta.livre{border-color:#16a34a}
.porta.cliente{background:#16a34a;border-color:#16a34a;color:#fff}
.porta.cliente .porta-c{color:#eafff1}
.porta.splitter{border-style:dashed;opacity:.7}
.porta:focus-visible{outline:3px solid var(--foco);outline-offset:1px}
.legenda-portas{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px;font-size:.78rem;color:var(--suave)}
.pl{display:inline-block;width:12px;height:12px;border-radius:3px;border:1.5px solid var(--borda);margin-right:-6px;vertical-align:-1px}
.pl.livre{border-color:#16a34a}.pl.cliente{background:#16a34a;border-color:#16a34a}.pl.splitter{border-style:dashed}
.lista-busca{list-style:none;margin:8px 0 0;padding:0;max-height:38vh;overflow:auto;border:1px solid var(--borda);border-radius:8px}
.lista-busca li{padding:10px 12px;border-top:1px solid var(--borda);cursor:pointer;display:flex;flex-direction:column}
.lista-busca li:first-child{border-top:0}
.lista-busca li small{color:var(--suave)}
.lista-busca li.sel{background:var(--foco)}
.lista-busca li.vazio{cursor:default;color:var(--suave)}
dialog .abas-caixa{margin-top:0}
.livres{color:var(--suave);font-weight:400}

/* Página Clientes */
.cab-pagina{display:flex;justify-content:space-between;align-items:center;gap:12px}
.cab-pagina .botao.pequeno{margin:0}
.filtros{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;margin:4px 0}
.filtros input[type=search]{flex:1 1 220px;padding:10px 12px;font-size:16px;color:var(--texto);background:var(--campo);
  border:1px solid var(--borda);border-radius:var(--raio)}
.oculto{position:absolute;left:-9999px}
.lista-clientes{list-style:none;margin:6px 0 0;padding:0}
.lista-clientes li{border-top:1px solid var(--borda);padding:10px 0;display:flex;flex-direction:column;gap:2px}
.lista-clientes li small{color:var(--suave)}
.lista-clientes li .link{align-self:flex-start;margin-top:2px}
.lista-clientes li.vazio{color:var(--suave)}
.cli-cab{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap}
.local{font-size:.86rem}
.local.sem{color:var(--suave)}
.so-estreito{display:none}
@media (max-width:600px){ .so-largo{display:none} .so-estreito{display:inline} }

/* Viabilidade */
.viab-abrir{width:100%;margin:10px 0 0}
.viab{position:fixed;z-index:1050;top:60px;left:10px;width:360px;max-width:calc(100% - 20px);max-height:calc(100% - 72px);
  overflow:auto;background:var(--cartao);border:1px solid var(--borda);border-radius:12px;padding:12px 14px 14px;
  box-shadow:0 6px 24px rgba(0,0,0,.3)}
.viab-cab{display:flex;justify-content:space-between;align-items:center}
.viab-cab h2{margin:0;font-size:1.05rem}
.viab .sub{margin:6px 0 8px}
.viab-acoes{display:flex;gap:8px;flex-wrap:wrap}
.viab-busca{flex-direction:row;gap:8px;margin-top:8px}
.viab-busca input{flex:1;min-width:0}
.viab-busca .botao.pequeno{margin:0}
.viab .lista-busca{margin-top:6px}
.viab-cartao{border:1px solid var(--borda);border-radius:10px;padding:10px 12px;margin-top:8px;display:flex;flex-direction:column;gap:3px}
.viab-cartao.melhor{border-color:#22c55e;box-shadow:0 0 0 2px rgba(34,197,94,.25)}
.viab-cartao.inviavel{opacity:.75}
.viab-cartao small{color:var(--suave)}
.viab-info{display:flex;flex-wrap:wrap;gap:4px 12px;font-size:.88rem}
.viab-motivo{color:var(--erro) !important}
.viab-cartao .painel-acoes{margin-top:4px}
.viab-cartao .botao.pequeno{margin:0}
body.modo-viab #mapa{cursor:crosshair}
body.modo-viab .painel{display:none}
@media (max-width:600px){
  .viab{top:auto;bottom:0;left:0;width:100%;max-width:100%;max-height:45vh;border-radius:14px 14px 0 0}
}

/* Fotos (etapa 12) */
.pop-acoes{display:flex;flex-direction:column;gap:6px}
dialog.dlg-fotos{max-width:min(560px,calc(100% - 32px));max-height:calc(100dvh - 32px);overflow:auto}
.fotos-cab{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:12px}
.fotos-cab h2{margin:2px 0 0;font-size:1.1rem}
.fotos-cab small{margin:0}
.fotos-grade{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:8px}
.foto-mini{position:relative;padding:0;border:1px solid var(--borda);border-radius:8px;overflow:hidden;cursor:pointer;
  background:var(--campo);aspect-ratio:1}
.foto-mini img{display:block;width:100%;height:100%;object-fit:cover}
.foto-mini:focus-visible{outline:2px solid var(--destaque);outline-offset:2px}
.foto-tag{position:absolute;left:0;right:0;bottom:0;padding:2px 6px;font-size:.72rem;color:#fff;text-align:left;
  background:linear-gradient(transparent,rgba(0,0,0,.75));white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dlg-fotos h3{font-size:.95rem;margin:20px 0 0;text-transform:uppercase;letter-spacing:.05em;color:var(--suave)}
.dlg-fotos select,.visor-foto select{width:100%;padding:10px 12px;font:inherit;font-size:16px;color:var(--texto);
  background:var(--campo);border:1px solid var(--borda);border-radius:var(--raio)}
.fotos-botoes{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:16px}
.fotos-botoes .botao{display:flex;align-items:center;justify-content:center;margin:0;color:var(--destaque-texto);font-size:.95rem;padding:12px 8px;min-height:52px}
.fotos-botoes .botao.secundario{color:var(--destaque)}
.fotos-botoes.ocupado{opacity:.5;pointer-events:none}
.fotos-progresso{margin:10px 0 0}
.gaveta #gav-fotos{width:100%;margin-top:6px}
.visor-foto{width:min(960px,calc(100% - 16px));max-width:none;max-height:calc(100dvh - 16px);padding:12px;overflow:auto;
  background:var(--cartao);color:var(--texto);border:1px solid var(--borda);border-radius:14px}
.visor-foto::backdrop{background:rgba(0,0,0,.85)}
.visor-cab{display:flex;justify-content:space-between;align-items:center;gap:10px;position:sticky;top:-12px;z-index:2;
  margin:-12px -12px 8px;padding:10px 12px;background:var(--cartao);border-bottom:1px solid var(--borda)}
.visor-cab small{color:var(--suave)}
.visor-img{position:relative;display:flex;align-items:center;justify-content:center;background:#000;border-radius:8px}
.visor-img img{display:block;max-width:100%;max-height:calc(100dvh - 260px);width:auto;height:auto;object-fit:contain}
.visor-nav{position:absolute;top:50%;transform:translateY(-50%);z-index:1;width:40px;height:56px;font-size:1.6rem;
  background:rgba(0,0,0,.45);color:#fff;border-color:transparent}
#fv-ant{left:6px}
#fv-prox{right:6px}
.visor-nav:disabled{opacity:.25;cursor:default}
.visor-legenda{margin:10px 0 0;white-space:pre-line}
.visor-foto .dica{margin:6px 0 0}
.visor-foto input[type=text]{width:100%}
.visor-foto .painel-acoes{margin-top:12px;align-items:center}
.visor-foto .botao.pequeno{margin:0}

/* Diagrama de fusões (etapa 10.2) */
.dlg-fusoes{width:min(1000px,calc(100% - 16px));max-width:none;max-height:calc(100dvh - 16px);padding:12px;overflow:auto;
  background:var(--cartao);color:var(--texto);border:1px solid var(--borda);border-radius:14px}
.dlg-fusoes::backdrop{background:rgba(0,0,0,.6)}
.dlg-fusoes .dica{margin:6px 0}
.fus-barra{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:6px 0}
.fus-barra label{margin:0;font-size:.85rem}
.fus-barra select,.dlg-fusoes select,.dlg-fusoes input[type=number]{padding:8px 10px;font:inherit;font-size:16px;color:var(--texto);
  background:var(--campo);border:1px solid var(--borda);border-radius:8px}
.dlg-fusoes .dupla select,.dlg-fusoes .dupla input{width:100%}
.fus-status{min-height:1.5em;font-size:.9rem;margin:4px 0 8px;display:flex;gap:10px;flex-wrap:wrap;align-items:baseline}
.fus-rolagem{overflow:auto;max-height:62dvh;border:1px solid var(--borda);border-radius:10px;background:var(--campo);
  -webkit-overflow-scrolling:touch}
.fus-rolagem svg{display:block}
.fus-tit{font:600 13px system-ui,sans-serif;fill:var(--texto)}
.fus-sub{font:12px system-ui,sans-serif;fill:var(--suave)}
.fus-txt{font:12px system-ui,sans-serif;fill:var(--texto)}
.fus-tubo-txt{font:600 11px system-ui,sans-serif;fill:#fff}
.fus-tubo-txt.escuro{fill:#111827}
.fus-tubo{stroke:var(--borda)}
.fus-fibra{stroke:var(--texto);stroke-opacity:.45;stroke-width:1}
.fus-spl{fill:var(--cartao);stroke:var(--borda);stroke-width:1.5}
.fus-contorno{fill:none;stroke:var(--texto);stroke-opacity:.35;stroke-width:5}
.fus-cor{fill:none;stroke-width:3}
.fus-linha.expressa .fus-cor{stroke-dasharray:7 5}
.fus-ponta{cursor:pointer;outline:none}
.fus-alvo{fill:transparent}
.fus-dot{fill:var(--cartao);stroke:var(--suave);stroke-width:2}
.fus-ponta.usada .fus-dot{fill:var(--destaque);stroke:var(--destaque)}
.fus-ponta.escolhida .fus-dot{fill:var(--ok);stroke:var(--ok);r:8}
.fus-ponta:hover .fus-dot,.fus-ponta:focus-visible .fus-dot{stroke:var(--destaque);stroke-width:3}
.fus-bloco{margin-top:12px;border:1px solid var(--borda);border-radius:10px;padding:8px 12px}
.fus-bloco summary{cursor:pointer;font-weight:600}
.fus-bloco .botao.pequeno{margin-top:12px}
.fus-lista{margin:8px 0 0;padding-left:1.4em;font-size:.88rem}
.fus-lista li{display:flex;justify-content:space-between;gap:10px;align-items:baseline;padding:4px 0;border-bottom:1px solid var(--borda)}
.fus-lista li.vazio{display:list-item;color:var(--suave);border:0}
.fus-lista .amostra{display:inline-block;width:10px;height:10px;border-radius:50%;border:1px solid var(--borda);vertical-align:middle}
.fus-lista .amostra.sem-cor{border-style:dashed}
#gav-fusoes{width:100%;margin:4px 0 8px}

/* Botão Ruas/Satélite no mapa */
.botao-fundo{padding:7px 10px;font:600 .85rem system-ui,sans-serif;color:var(--texto);background:var(--cartao);
  border:2px solid rgba(0,0,0,.2);border-radius:8px;background-clip:padding-box;cursor:pointer;min-height:34px}
.botao-fundo:hover{color:var(--destaque)}

/* Barra de navegação inferior (celular) */
.barra-inferior{display:none}
.aviso-flutuante{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(24px + env(safe-area-inset-bottom));z-index:1200;
  max-width:calc(100% - 32px);padding:10px 16px;border-radius:10px;background:var(--cartao);color:var(--texto);
  border:1px solid var(--borda);box-shadow:0 6px 20px rgba(0,0,0,.3);font-size:.9rem;text-align:center}
.aviso-flutuante[hidden]{display:none}
@media (max-width:600px){
  .so-pc{display:none !important}
  .topo{padding:8px 16px}
  body:has(.barra-inferior){padding-bottom:calc(60px + env(safe-area-inset-bottom))}
  .barra-inferior{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:1050;background:var(--cartao);
    border-top:1px solid var(--borda);padding:0 4px env(safe-area-inset-bottom);box-shadow:0 -2px 12px rgba(0,0,0,.12)}
  .barra-inferior a{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;
    min-height:60px;padding:6px 0;font-size:.74rem;font-weight:600;color:var(--suave);text-decoration:none;
    position:relative;-webkit-tap-highlight-color:transparent}
  .barra-inferior svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
  .barra-inferior a[aria-current=page]{color:var(--destaque)}
  .barra-inferior a[aria-current=page]::before{content:"";position:absolute;top:0;left:28%;right:28%;height:3px;
    border-radius:0 0 3px 3px;background:var(--destaque)}
  .barra-inferior a:active{background:var(--campo)}
  .aviso-flutuante{bottom:calc(72px + env(safe-area-inset-bottom))}
  .sair-conta{margin-top:28px}
}
@media (min-width:601px){ .sair-conta{display:none} }

/* Usuários (etapa 16) */
.lista-usuarios li.inativo{opacity:.6}
.etiqueta{font-size:.75rem;padding:2px 8px;border-radius:20px;border:1px solid var(--borda);color:var(--suave);white-space:nowrap}
.etiqueta.sit-ativo{color:var(--ok);border-color:var(--ok)}
.etiqueta.sit-convite-pendente{color:#d97706;border-color:#d97706}
.etiqueta.sit-desativado{color:var(--erro);border-color:var(--erro)}
.ajuda-perfis{margin:0 0 14px;font-size:.9rem}
.ajuda-perfis summary{cursor:pointer;color:var(--destaque)}
.campo-select{width:100%;padding:12px 14px;font:inherit;font-size:16px;color:var(--texto);background:var(--campo);
  border:1px solid var(--borda);border-radius:var(--raio)}
/* Etapa 17 — modo técnico: medições */
.com-sinal{display:flex;gap:6px;align-items:stretch}
.com-sinal input{flex:1;min-width:0}
.com-sinal .botao{min-width:44px;padding:0 10px;font-size:1.1rem}
.med-est{margin:8px 0 0;font-variant-numeric:tabular-nums;font-weight:600;color:var(--suave)}
#cx-leitura{margin-top:8px}
#cx-instalar{margin-top:10px}
#lista-med .spl-cab .dbm{white-space:nowrap}
#calibracao{margin-top:28px;padding-top:8px;border-top:1px solid var(--borda)}
#calibracao td,#calibracao th{white-space:nowrap}
/* Etapa 18 — desenho no mapa */
.ferramentas-desenho{display:flex;flex-direction:column;gap:6px}
.ferramentas-desenho .botao-fundo{text-align:left}
.pop-editar{display:block;margin-top:8px;font-size:.85rem}
#dlg-ponto .botao + .botao,#dlg-rota .botao + .botao{margin-top:10px}
#dlg-ponto .painel-acoes,#dlg-rota .painel-acoes{justify-content:space-between;margin-top:14px}
.barra-desenho{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(20px + env(safe-area-inset-bottom));z-index:1150;
  width:min(560px,calc(100% - 32px));padding:12px 14px;border-radius:12px;background:var(--cartao);color:var(--texto);
  border:1px solid var(--destaque);box-shadow:0 8px 24px rgba(0,0,0,.35)}
.barra-desenho[hidden]{display:none}
.barra-desenho p{margin:0 0 10px;font-size:.92rem;line-height:1.35}
.bd-botoes{display:flex;gap:8px;flex-wrap:wrap}
.bd-botoes .botao{flex:1 1 0;width:auto;margin:0;min-height:44px;padding:8px 10px;font-size:.9rem;white-space:nowrap}
.bd-botoes .botao:disabled{opacity:.45;cursor:not-allowed}
/* Enquanto desenha, o mapa não abre balões: todo toque vai para o desenho */
body.desenhando .leaflet-overlay-pane .leaflet-interactive,
body.desenhando .leaflet-marker-pane .leaflet-interactive{pointer-events:none !important}
body.desenhando .leaflet-container{cursor:crosshair}
body.desenhando .ferramentas-desenho{display:none}
.alca-vertice{width:26px;height:26px;border-radius:50%;background:#fff;border:3px solid var(--destaque);box-shadow:0 1px 4px rgba(0,0,0,.5)}
.alca-meio{width:26px;height:26px;border-radius:50%;background:rgba(255,255,255,.75);border:2px dashed var(--destaque);
  color:#111;font:700 16px/22px system-ui,sans-serif;text-align:center}
.alca-mover{width:34px;height:34px;border-radius:50%;background:var(--destaque);color:var(--destaque-texto);
  font:700 20px/34px system-ui,sans-serif;text-align:center;box-shadow:0 2px 8px rgba(0,0,0,.5)}
@media (max-width:600px){ .barra-desenho{bottom:calc(70px + env(safe-area-inset-bottom))} }
/* Etapa 10.3 — caminho físico (fusões) */
small.caminho{display:block;font-size:.84rem;margin-top:2px}
small.caminho .link{font-size:.84rem;padding:0}
.lista-spl small.cam-ok{color:var(--ok)}
.lista-spl small.cam-aviso{color:#d97706}
.bloco-avisos summary{color:#d97706}
.lista-avisos{list-style:none;margin:6px 0;padding:0}
.lista-avisos li{display:flex;flex-direction:column;gap:2px;padding:6px 0;border-bottom:1px solid var(--borda);cursor:pointer}
.lista-avisos small{color:var(--suave);font-size:.82rem}
/* Etapa 8.1 — importar clientes */
.cab-pagina .painel-acoes{margin:0;gap:8px;flex-wrap:wrap}
.imp-previa{margin:12px 0;padding:10px 12px;border:1px solid var(--borda);border-radius:10px;font-size:.92rem}
.imp-previa p{margin:0 0 6px}
.imp-previa ul{margin:0 0 6px;padding-left:18px}
.imp-previa li{margin:2px 0}
.etiqueta.st-ext-ativo{color:var(--ok);border-color:var(--ok)}
.etiqueta.st-ext-bloqueado{color:var(--erro);border-color:var(--erro)}
.etiqueta.st-ext-observacao{color:#d97706;border-color:#d97706}
@media (max-width:600px){ .cab-pagina{flex-wrap:wrap} .cab-pagina .painel-acoes{width:100%;margin-bottom:14px} .cab-pagina .painel-acoes .botao{flex:1 1 auto;white-space:nowrap} }
/* Etapa 12.1 — ordens de serviço */
.os-badge{display:inline-block;min-width:18px;height:18px;padding:0 5px;margin-left:4px;border-radius:9px;background:var(--erro);
  color:#fff;font:700 .7rem/18px system-ui,sans-serif;text-align:center;vertical-align:top}
.barra-inferior .os-badge{position:absolute;top:6px;left:calc(50% + 6px);margin:0}
.filtros-os{display:flex;gap:6px;flex-wrap:wrap;margin:12px 0 6px}
.lista-os{list-style:none;margin:6px 0 0;padding:0}
.lista-os li.vazio{color:var(--suave);padding:10px 0}
.os-item{border-top:1px solid var(--borda);padding:12px 0;display:flex;flex-direction:column;gap:3px}
.os-item small{color:var(--suave)}
.os-cab{display:flex;justify-content:space-between;align-items:center;gap:8px}
.os-local{font-size:.9rem}
.os-desc{margin:2px 0;white-space:pre-wrap}
.os-prazo.atrasada{color:var(--erro);font-weight:600}
.os-solucao{white-space:pre-wrap}
.os-acoes{margin-top:6px;gap:8px;flex-wrap:wrap;align-items:center}
.os-acoes .botao.pequeno{margin:0}
.os-item.os-concluida,.os-item.os-cancelada{opacity:.85}
.etiqueta.os-st-aberta{color:var(--destaque);border-color:var(--destaque)}
.etiqueta.os-st-em_andamento{color:#d97706;border-color:#d97706}
.etiqueta.os-st-concluida{color:var(--ok);border-color:var(--ok)}
.etiqueta.os-st-cancelada{color:var(--suave)}
.oc-fotos{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));gap:8px;margin:6px 0}
.oc-fotos .foto-mini{aspect-ratio:1}
#oc-botoes-foto{gap:8px}
#oc-botoes-foto.ocupado{opacity:.5;pointer-events:none}
#os-cliente{margin-top:6px}
#sec-ordens .lista-os{margin-top:0}
.pop-os{display:block;margin:4px 0;color:#d97706;font-weight:600}
/* Campos dentro das janelas (OS, poste, rota…) com o mesmo visual da gaveta */
dialog.cartao select,dialog.cartao textarea,dialog.cartao input[type=date],dialog.cartao input[type=number]{width:100%;padding:10px 12px;
  font:inherit;font-size:16px;color:var(--texto);background:var(--campo);border:1px solid var(--borda);border-radius:var(--raio)}
dialog.cartao textarea{resize:vertical}
dialog.cartao select:focus,dialog.cartao textarea:focus{outline:none;border-color:var(--destaque);box-shadow:0 0 0 3px var(--foco)}
#oc-campo-solucao{display:flex;flex-direction:column}
.ajuda-3d summary{cursor:pointer;font-size:.85rem;color:var(--suave);margin:4px 0}
/* Etapa 22: e-mail ao cliente pela OS e página de modelos */
dialog.dlg-email{max-width:min(600px,calc(100% - 32px));max-height:calc(100dvh - 32px);overflow:auto}
.oe-avisos{margin:8px 0 0;padding:8px 12px 8px 28px;border:1px solid var(--borda);border-radius:8px;color:var(--suave);font-size:.88rem}
.oe-lista li{padding:8px 0}
.oe-lista details{font-size:.88rem}
.oe-lista pre{white-space:pre-wrap;font:inherit;margin:6px 0 0;color:var(--suave)}
.modelo-item textarea,#form-modelo textarea{font-family:inherit}
