/* =======================================================================
   PLANEJAMENTO.CSS — estilos do módulo Planejamento (Atas de Reunião).
   Reusa o Design System (styles.css): .card .btn .badge .field .chip .muted
   .table-wrap. Aqui só o casco (menu lateral + conteúdo, igual ao Estoque) e
   o layout do formulário de ata (faixas de seção estilo Excel + tabelas).
   Só TOKENS do Design System — nada de hex solto.
   ======================================================================= */

/* --- casco do módulo: menu lateral + conteúdo (idêntico ao Estoque) --------- */
.plan { display: flex; align-items: flex-start; margin: calc(-1 * var(--content-py)) calc(-1 * var(--content-px)) calc(-1 * var(--content-pb)); }
.plan-nav { z-index: 39; }
.plan-main { flex: 1; min-width: 0; padding: var(--content-py) var(--content-px) calc(var(--content-py) + var(--content-pb)); }
.wrap:has(.plan) { max-width: none; }
.plan-conteudo { min-width: 0; }

/* --- recolher/expandir o menu lateral: UM botão para todas as telas — quadrado 32×32 só com ícone
   (texto no tooltip), na ponta esquerda da barra de ferramentas da tela. `.btn.` na frente: vence o
   padding do .btn/.btn.sm (o padding herdado espremia o ícone a ~8 px de largura). --- */
.btn.plan-nav-toggle { width: 32px; height: 32px; padding: 0; gap: 0; flex: 0 0 auto;
  background: var(--surface); border-color: var(--border); color: var(--text-secondary); }
.btn.plan-nav-toggle svg { display: block; flex: 0 0 auto; width: 20px; height: 20px; }
.btn.plan-nav-toggle:hover { border-color: var(--accent); color: var(--accent-strong); filter: none; }
.btn.plan-nav-toggle:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
@media (min-width: 781px) { .plan.plan-recolhido > .plan-nav { display: none; } }
/* barra de ferramentas da tela: botão do menu + controles da tela, alinhados pelo centro */
.plan-barra { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; margin-bottom: 12px; }
.plan-barra-dir { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-left: auto; }
.plan-barra-solo { margin-bottom: 10px; }   /* só o botão (tela sem controles próprios): faixa baixa */
/* telas com sub-abas (Cronograma, PLS): o botão abre a linha das abas; o sublinhado corre a linha toda */
.plan-barra-abas { flex-wrap: nowrap; border-bottom: 1px solid var(--border); margin-bottom: 16px; }
.plan-barra-abas > .hist-subnav { flex: 1 1 auto; min-width: 0; margin: 0; border-bottom: 0; }
.plan-aviso-tela { margin: 0 0 10px; }   /* módulo da tela não carregou (acima do estado vazio) */
@media (max-width: 780px) { .btn.plan-nav-toggle, .plan-barra-solo { display: none; } }
/* título só para leitor de tela (a tela já se identifica pelo menu e pelo cabeçalho escuro) */
.plan-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }

/* No celular a .plan-nav vira barra inferior fixa (regra de styles.css): o casco
   vira bloco simples e reserva o espaço da barra medido em --plan-nav-h. */
@media (max-width: 780px) {
  .plan { display: block; margin: 0; }
  .plan-nav { padding-bottom: calc(6px + env(safe-area-inset-bottom)); }
  .plan-main { padding: 0; padding-bottom: max(0px, calc(var(--plan-nav-h, 0px) - 84px)); }
}

/* --- estado vazio (telas futuras) --- */
.plan-vazia { text-align: center; padding: 30px 18px; }
.plan-vazia-ic { font-size: 2.2rem; margin-bottom: 6px; }
.plan-vazia-tit { font-weight: 700; color: var(--azul); margin-bottom: 4px; }

/* --- lista de atas (barra da tela: .plan-barra) --- */
.plan-tabela { width: 100%; min-width: 640px; border-collapse: collapse; }
.plan-tabela th { text-align: left; font-size: .78rem; text-transform: uppercase; letter-spacing: .3px;
  color: var(--cinza-texto); font-weight: 700; padding: 10px 12px; border-bottom: 1px solid var(--borda); }
.plan-tabela td { padding: 11px 12px; border-bottom: 1px solid var(--cinza-claro); font-size: .92rem; }
.plan-ata-row { cursor: pointer; }
.plan-ata-row:hover td { background: var(--azul-bg); }
.plan-col-quem { color: var(--cinza-texto); }
.plan-col-acao { text-align: right; white-space: nowrap; }
.plan-aviso { border-left: 3px solid var(--warning); background: var(--amarelo-bg); color: var(--warning-fg); }
.plan-aviso code { font-size: .85em; }

/* --- barra de ações do formulário/visualização: botão do menu · ← Voltar | ações à direita --- */
.plan-form-bar { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  position: sticky; top: var(--topbar-h); z-index: 20; background: var(--surface);
  padding: 10px 0; margin-bottom: 6px; border-bottom: 1px solid var(--borda); }
.plan-form-bar-r { display: flex; gap: 8px; margin-left: auto; }
.plan-form-head h2 { color: var(--azul); font-size: 1.2rem; }
.plan-erro { border-left: 3px solid var(--vermelho); background: var(--vermelho-bg); color: var(--vermelho); }

/* --- título do documento (fiel ao topo do Excel) --- */
.plan-doc-tit { display: flex; align-items: baseline; justify-content: space-between; gap: 10px;
  font-weight: 800; letter-spacing: .5px; color: var(--azul); font-size: 1.1rem; margin: 12px 0 8px; }

/* --- seções e faixas (estilo Excel) --- */
.plan-sec { margin-bottom: 18px; }
.plan-faixa { background: var(--surface-2); border: 1px solid var(--borda); border-left: 3px solid var(--accent);
  padding: 8px 12px; font-weight: 700; color: var(--text-primary); border-radius: 8px; margin: 12px 0 10px; }
/* faixa 1 = seção maior (ASSUNTOS DISCUTIDOS, Participantes…) */
.plan-faixa-1 { background: var(--accent); border-color: var(--accent); border-left-color: var(--accent);
  color: var(--accent-contrast); letter-spacing: .4px; text-transform: uppercase; font-size: .92rem; }
/* faixa 2 = grupo (SERVIÇOS TERCEIRIZADOS / EQUIPE PIACENTINI) */
.plan-faixa-2 { background: var(--azul-bg); border-left-color: var(--azul); color: var(--azul); font-weight: 800; }

.plan-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 12px; }
.plan-grid .field { margin-bottom: 0; }

.plan-grupo { margin-bottom: 14px; }
.plan-nada { font-size: .86rem; margin: 6px 0 10px; }

/* --- cartão de tópico --- */
.plan-topico { border: 1px solid var(--borda); border-radius: 12px; padding: 14px; margin-bottom: 12px;
  background: var(--surface); box-shadow: var(--sombra); }
.plan-topico-head { display: grid; grid-template-columns: 1.5fr 1.2fr .8fr auto; gap: 10px; align-items: end; margin-bottom: 8px; }
.plan-topico-head .field { margin-bottom: 0; }
.plan-rm-topico { align-self: center; }

/* subseção dentro do tópico (Quantidade realizada / Programação) */
.plan-sub { background: var(--surface-2); border: 1px solid var(--borda); border-radius: 10px; padding: 10px 12px; margin: 10px 0; }
.plan-sub-head { display: flex; align-items: center; justify-content: space-between; gap: 8px; margin-bottom: 8px; }
.plan-sub-tit { font-weight: 700; font-size: .8rem; text-transform: uppercase; letter-spacing: .3px; color: var(--cinza-texto); }

/* quantidade realizada (linhas descrição + quantidade) */
.plan-qr-list { display: grid; gap: 8px; }
.plan-qr-row { display: grid; grid-template-columns: 1fr 130px auto; gap: 8px; align-items: center; }
.plan-qr-row input { width: 100%; box-sizing: border-box; padding: 8px 10px; border: 1px solid var(--borda); border-radius: 8px; background: var(--surface); color: var(--text-primary); }

/* tabela de programação e de participantes */
.plan-prog, .plan-part { width: 100%; min-width: 620px; border-collapse: collapse; }
.plan-prog th, .plan-part th { text-align: left; font-size: .76rem; text-transform: uppercase; letter-spacing: .3px;
  color: var(--cinza-texto); font-weight: 700; padding: 6px 8px; border-bottom: 1px solid var(--borda); white-space: nowrap; }
.plan-prog td, .plan-part td { padding: 5px 6px; border-bottom: 1px solid var(--cinza-claro); vertical-align: middle; }
.plan-prog input, .plan-prog select, .plan-part input {
  width: 100%; box-sizing: border-box; padding: 7px 8px; border: 1px solid var(--borda); border-radius: 7px;
  background: var(--surface); color: var(--text-primary); font-size: .9rem; }
.plan-prog-sem { max-width: 90px; }
.plan-assin { background: var(--surface-2) !important; font-style: italic; }

/* --- visualização (só leitura) --- */
.plan-ver-cab { border: 1px solid var(--borda); border-radius: 12px; padding: 14px; margin-bottom: 12px; background: var(--surface); }
.plan-ver-meta { display: grid; gap: 4px; }
.plan-ver-row { display: flex; gap: 8px; }
.plan-ver-rot { min-width: 120px; color: var(--cinza-texto); font-weight: 700; font-size: .85rem; }
.plan-ver-val { color: var(--text-primary); }
.plan-ver-texto { white-space: normal; }
.plan-ver-topico { padding: 12px 14px; }
.plan-ver-topico-h { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
.plan-ver-pts { margin: 4px 0; }
.plan-ver-qr { margin: 6px 0; font-size: .92rem; }
.plan-ver-obs { margin-top: 6px; font-size: .9rem; color: var(--cinza-texto); }
.plan-assin-cell { color: var(--cinza-texto); font-style: italic; }
/* .sr-only mudou para o styles.css (utilitário de todos os módulos). */

/* --- continuidade entre atas (docs/SPEC-ATAS-CONTINUIDADE.md) --- */
/* selos discretos: pendência herdada · prazo vencido/hoje · reprogramações · reuniões */
.plan-tag { display: inline-flex; align-items: center; gap: 4px; font-size: .72rem; font-weight: 700; padding: 2px 8px;
  border-radius: 20px; white-space: nowrap; line-height: 1.5; }
.plan-tag--herdada { background: var(--accent-soft); color: var(--accent-strong); border: 1px solid var(--accent-soft-border); }
.plan-tag--vencido { background: var(--danger-bg); color: var(--danger-fg); }
.plan-tag--hoje { background: var(--warning-bg); color: var(--warning-fg); }
.plan-tag--info { background: var(--surface-2); color: var(--text-secondary); border: 1px solid var(--border); }
.plan-tags { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; align-self: center; }
.plan-heranca { border-left: 3px solid var(--accent); background: var(--accent-soft); color: var(--text-primary); font-size: .9rem; padding: 10px 14px; }
.plan-topico--herdado { border-left: 3px solid var(--accent-soft-border); }
.plan-topico-meta { display: grid; grid-template-columns: minmax(170px, auto) 210px 1fr; gap: 10px; align-items: end; margin-bottom: 8px; }
.plan-topico-meta .field { margin-bottom: 0; }
.plan-prazo-fixo { display: flex; align-items: center; gap: 8px; min-height: 40px; }
.plan-meta-ant { margin: 0 0 8px; font-size: .82rem; color: var(--text-muted); }
.plan-aviso-txt { margin: 6px 0 0; font-size: .82rem; color: var(--warning-fg); min-height: 0; }
.plan-aviso-txt:empty { display: none; }
.plan-dica { font-size: .8rem; margin: 8px 0 0; }
.plan-erro-txt { color: var(--danger-fg); font-size: .85rem; margin: 4px 0 0; min-height: 1em; }
.plan-modal-acoes { display: flex; flex-wrap: wrap; justify-content: flex-end; align-items: center; gap: 8px; margin-top: 12px; }
.plan-check { display: flex; align-items: center; gap: 8px; margin: 10px 0 4px; font-weight: 600; }
.plan-check input { width: auto; flex: 0 0 auto; margin: 0; accent-color: var(--accent); }

/* "Pontos discutidos": o botão do mapa mora DENTRO da caixa, numa faixa no topo (não cobre o texto) */
.plan-pts { border: 1px solid var(--border); border-radius: var(--radius-sm, 8px); background: var(--surface); }
.plan-pts:focus-within { border-color: var(--accent); box-shadow: var(--focus-ring); }
.plan-pts-barra { display: flex; justify-content: flex-end; padding: 4px 4px 0; }
.plan-pts textarea { display: block; width: 100%; box-sizing: border-box; border: 0 !important; box-shadow: none !important;
  background: transparent; resize: vertical; padding: 4px 12px 10px; outline: none; }
.plan-lotes { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 6px; }
.plan-lotes-tit { font-size: .8rem; font-weight: 700; color: var(--text-secondary); }
.plan-lote-chip { font-size: .78rem; padding: 3px 9px; }

/* quantidade realizada: anterior · semana · atual (atual = DERIVADO) */
.plan-qtd { display: grid; gap: 6px; }
.plan-qtd-row { display: grid; grid-template-columns: minmax(140px, 2fr) 74px 92px 92px 92px 120px; gap: 8px; align-items: center; }
.plan-qtd-head { font-size: .72rem; font-weight: 700; text-transform: uppercase; letter-spacing: .3px; color: var(--text-muted); }
.plan-qtd-row input { width: 100%; box-sizing: border-box; padding: 7px 9px; border: 1px solid var(--border); border-radius: 8px; background: var(--surface); color: var(--text-primary); }
.plan-qtd-num { text-align: right; }
.plan-qtd-val { text-align: right; font-variant-numeric: tabular-nums; color: var(--text-secondary); padding-right: 4px; }
.plan-qtd-atual { color: var(--text-primary); font-weight: 800; }
.plan-qtd-acoes { display: flex; gap: 4px; justify-content: flex-end; }
.plan-qtd-aj { font-size: .76rem; color: var(--text-muted); margin: 2px 0 0 2px; }
.plan-qtd-item--enc .plan-qtd-row { opacity: .6; }
.plan-qtd-ver td:nth-child(n+3) { text-align: right; font-variant-numeric: tabular-nums; }

/* lista: menu "⋮" (Excluir ata) e atas excluídas */
.plan-col-acao .plan-kebab { display: inline-block; position: relative; margin-left: 4px; vertical-align: middle; }
.plan-kebab > summary { list-style: none; cursor: pointer; padding: 4px 10px; }
.plan-kebab > summary::-webkit-details-marker { display: none; }
/* abre para a ESQUERDA, centrado na linha: fica dentro do card (que corta o que transborda) */
.plan-kebab-menu { position: absolute; right: calc(100% + 4px); top: 50%; transform: translateY(-50%); z-index: 30; background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius-md, 10px); box-shadow: var(--shadow-md); padding: 4px; white-space: nowrap; text-align: left; }
.plan-kebab-menu .btn { width: 100%; justify-content: flex-start; color: var(--danger-fg); }
.plan-excl { margin-top: 10px; }
.plan-excl-lista { margin-top: 8px; padding: 6px 12px; }
.plan-excl-item { display: flex; justify-content: space-between; align-items: center; gap: 10px; padding: 8px 0; border-bottom: 1px solid var(--border); }
.plan-excl-item:last-child { border-bottom: 0; }
.plan-excl-item b { color: var(--text-secondary); }
.plan-excl-info { font-size: .8rem; }
.plan-excl-acoes { display: flex; gap: 6px; flex-shrink: 0; }
.plan-excl-resumo { margin: 8px 0 10px; }
.plan-impacto { min-width: 0; }

/* execução por lote: chips por situação NA META (verde concluído · amarelo pendente · cinza retirado) */
.plan-lote-chip--conc { background: var(--success-bg); color: var(--success-fg); }
.plan-lote-chip--pend { background: var(--warning-bg); color: var(--warning-fg); }
.plan-lote-chip--ret { background: var(--surface-2); color: var(--text-muted); text-decoration: line-through; }
.plan-lotes-acoes { display: inline-flex; gap: 6px; flex-wrap: wrap; }
.plan-btn-exec { border-color: var(--accent-soft-border); color: var(--accent-strong); }
.plan-lotes-rodape-meta { margin-top: 4px; }
.plan-lotes-placar { font-size: .78rem; color: var(--text-secondary); font-variant-numeric: tabular-nums; }
.plan-tag--conc { background: var(--success-bg); color: var(--success-fg); }
.plan-exec-abas { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-bottom: 10px; }
.plan-exec-massa { display: inline-flex; flex-wrap: wrap; gap: 6px; margin-left: auto; }
.plan-exec-tabela td { vertical-align: middle; }
.plan-exec-tabela tr.plan-exec-on td { background: var(--success-bg); }
.plan-exec-chk { margin: 0; justify-content: flex-end; font-weight: 600; }
.plan-exec-motivo { display: block; width: 100%; box-sizing: border-box; margin-top: 6px; padding: 6px 8px; border: 1px solid var(--warning);
  border-radius: 8px; background: var(--surface); color: var(--text-primary); }
.plan-exec-ret { font-size: .8rem; margin: 8px 0 0; }
.plan-exec-concluir { margin-top: 12px; font-weight: 600; }
.plan-exec-legenda { display: flex; gap: 14px; font-size: .8rem; color: var(--text-secondary); margin-bottom: 6px; }
.plan-sw { display: inline-block; width: 12px; height: 12px; border-radius: 3px; vertical-align: -1px; margin-right: 4px; border: 1px solid var(--border); }
.plan-sw--conc { background: var(--success-bg); border-color: var(--success); }
.plan-sw--pend { background: var(--warning-bg); border-color: var(--warning); }
.lote.plan-lote-pend { background: var(--warning-bg); border-color: var(--warning); }
.lote.plan-lote-pend .l-num { color: var(--warning-fg); }
.lote.plan-lote-ret { opacity: .55; border-style: dashed; }
.plan-lotes-ret { margin-top: 10px; padding: 8px 10px; border: 1px dashed var(--border-strong); border-radius: var(--radius-md, 10px); }
.plan-lotes-ret[hidden] { display: none; }
.plan-lotes-ret-txt { margin: 0 0 6px; font-size: .85rem; }
.plan-check--mini { display: inline-flex; margin: 0; font-weight: 500; font-size: .76rem; }
.plan-qtd-lotes { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; }
.plan-hist-meta { margin-top: 6px; font-size: .82rem; }
.plan-hist-meta > summary { cursor: pointer; color: var(--text-secondary); font-weight: 600; }
.plan-hist-tab { min-width: 0; margin-top: 6px; }

/* seletor de lotes (modal) — reusa o mapa global .mapa/.quadra/.lote */
.plan-lotes-mapa { max-height: 60vh; overflow: auto; }
.plan-lotes-mapa .lote { cursor: pointer; }
.plan-lotes-grp { margin-left: 8px; }
.plan-lotes-rodape { position: sticky; bottom: 0; background: var(--surface-elevated); padding-top: 10px; border-top: 1px solid var(--border); }
.plan-lotes-total { margin-right: auto; font-weight: 700; color: var(--accent-strong); }
.plan-lotes-fora { font-size: .8rem; margin-top: 8px; }

/* --- responsivo --- */
@media (max-width: 720px) {
  .plan-topico-head { grid-template-columns: 1fr 1fr; }
  .plan-rm-topico { grid-column: 2; justify-self: end; }
  .plan-qr-row { grid-template-columns: 1fr 90px auto; }
  .plan-topico-meta { grid-template-columns: 1fr 1fr; }
  .plan-topico-meta .plan-tags { grid-column: 1 / -1; }
  /* quantidade: descrição em linha própria; números embaixo */
  .plan-qtd-row { grid-template-columns: 1fr 1fr 1fr 1fr; }
  .plan-qtd-row > :first-child, .plan-qtd-row > :last-child { grid-column: 1 / -1; }   /* item e ações em linha própria (também no cabeçalho) */
  .plan-qtd-head > :last-child { display: none; }
}

/* =======================================================================
   PLS — Planilha de Levantamento de Serviços (tela "PLS" do Planejamento).
   Reusa .card/.btn/.field/.chip do DS e o mapa global (.mapa/.quadra/.lote).
   Só tokens do Design System.
   ======================================================================= */
.pls-subnav { margin-top: 4px; }
.pls-erro { border-left: 3px solid var(--danger); background: var(--danger-bg); color: var(--danger-fg);
  padding: 10px 12px; border-radius: 8px; margin: 10px 0; }

/* loader */
.pls-loader { display: flex; align-items: center; gap: 14px; }
.pls-spin { width: 26px; height: 26px; border: 3px solid var(--border); border-top-color: var(--accent);
  border-radius: 50%; animation: pls-spin 0.8s linear infinite; flex: none; }
@keyframes pls-spin { to { transform: rotate(360deg); } }
.pls-loader-msg { min-width: 0; }
.pls-step { font-size: .84rem; color: var(--text-secondary); margin-top: 2px; }

/* upload (arrastar/soltar) */
.pls-drop { text-align: center; padding: 26px 18px; border: 2px dashed var(--border); }
.pls-drop.drag { border-color: var(--accent); background: var(--accent-soft); }
.pls-drop-ic { font-size: 2.2rem; }
.pls-drop-tit { font-weight: 800; color: var(--text-primary); margin: 6px 0 2px; font-size: 1.05rem; }

/* prévia + indicadores (KPIs) */
.pls-preview h2 { font-size: 1.15rem; color: var(--text-primary); }
.pls-kpis { display: flex; flex-wrap: wrap; gap: 10px; }
.pls-kpi { flex: 1; min-width: 96px; background: var(--surface-2); border: 1px solid var(--border);
  border-radius: 10px; padding: 10px 12px; text-align: center; }
.pls-kpi .n { font-size: 1.35rem; font-weight: 800; color: var(--text-primary); }
.pls-kpi .l { font-size: .7rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: .3px; }
.pls-meta { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 12px 0; font-size: .84rem; }
.pls-meta span { white-space: nowrap; }
.pls-alerta { border-radius: 8px; padding: 8px 12px; margin: 8px 0; font-size: .9rem; border-left: 3px solid var(--info); background: var(--info-bg); color: var(--info-fg); }
.pls-alerta.ok { border-left-color: var(--success); background: var(--success-bg); color: var(--success-fg); }
.pls-alerta.aviso { border-left-color: var(--warning); background: var(--warning-bg); color: var(--warning-fg); }
.pls-alertas-linha { margin: 10px 0; }
.pls-naocasadas { margin: 8px 0; }
.pls-naocasadas summary { cursor: pointer; font-size: .88rem; color: var(--warning-fg); }
.pls-naocasadas .muted { margin-top: 6px; font-size: .82rem; line-height: 1.6; }

/* histórico de importações */
.pls-table-scroll { overflow-x: auto; }
.pls-table { width: 100%; min-width: 620px; border-collapse: collapse; }
.pls-table th { text-align: left; font-size: .74rem; text-transform: uppercase; letter-spacing: .3px;
  color: var(--text-muted); font-weight: 700; padding: 9px 10px; border-bottom: 1px solid var(--border); }
.pls-table td { padding: 10px; border-bottom: 1px solid var(--surface-2); font-size: .9rem; vertical-align: middle; }
.pls-hist-acoes { white-space: nowrap; text-align: right; }
.pls-badge { display: inline-block; font-size: .74rem; font-weight: 700; padding: 1px 7px; border-radius: 999px; }
.pls-badge.ok { background: var(--success-bg); color: var(--success-fg); }
.pls-badge.alerta { background: var(--warning-bg); color: var(--warning-fg); }
.btn.danger.sm { color: var(--danger-fg); }

/* controles do mapa */
.pls-mapa-ctrls { display: flex; flex-wrap: wrap; gap: 14px; align-items: flex-end; }
.pls-mapa-ctrls .field { margin-bottom: 0; min-width: 180px; flex: 1; }
.pls-serv-field { flex-basis: 100%; }
.pls-serv-busca { width: 100%; box-sizing: border-box; padding: 8px 10px; border: 1px solid var(--border);
  border-radius: 8px; background: var(--surface); color: var(--text-primary); margin-bottom: 6px; }
.pls-modo { display: inline-flex; flex-wrap: wrap; gap: 0; border: 1px solid var(--border); border-radius: 999px; overflow: hidden; }
.pls-modo-btn { border: 0; background: var(--surface); color: var(--text-secondary); padding: 8px 14px; cursor: pointer; font-size: .84rem; }
.pls-modo-btn + .pls-modo-btn { border-left: 1px solid var(--border); }
.pls-modo-btn.active { background: var(--accent); color: var(--accent-contrast); font-weight: 700; }

/* legenda + estados do lote no mapa */
.pls-legenda { margin: 10px 0 0; }
.pls-leg { display: inline-block; width: 13px; height: 13px; border-radius: 3px; vertical-align: -2px; margin-right: 4px; border: 1px solid var(--border); }
.pls-leg.nesta { background: var(--accent-soft); border-color: var(--accent); }
.pls-leg.antes { background: var(--success-bg); border-color: var(--success); }
.pls-leg.depois { background: var(--info-bg); border-color: var(--info); }
.pls-leg.nao { background: var(--surface-2); }
.pls-mapa-hint { margin: 10px 0 0; font-size: .88rem; color: var(--text-muted); }

.lote.pls-st-nesta { background: var(--accent-soft); border-color: var(--accent); }
.lote.pls-st-nesta .l-pct { color: var(--accent-strong); font-weight: 800; }
.lote.pls-st-antes { background: var(--success-bg); border-color: var(--success); }
.lote.pls-st-antes .l-pct { color: var(--success-fg); }
.lote.pls-st-depois { background: var(--info-bg); border-color: var(--info); }
.lote.pls-st-depois .l-pct { color: var(--info-fg); }
.lote.pls-st-nao .l-pct { color: var(--text-muted); }

/* cartão do lote (modal) */
.pls-lote-card { display: flex; flex-direction: column; gap: 8px; }
.pls-lote-busca { width: 100%; box-sizing: border-box; padding: 9px 11px; border: 1px solid var(--border);
  border-radius: 8px; background: var(--surface); color: var(--text-primary); }
.pls-lote-sec { margin-top: 6px; }
.pls-lote-sec h3 { font-size: .92rem; margin: 4px 0 8px; color: var(--text-primary); }
.pls-lote-sec summary { cursor: pointer; font-weight: 700; font-size: .9rem; color: var(--text-secondary); padding: 6px 0; }
.pls-lote-lin { display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 8px 4px; border-bottom: 1px solid var(--surface-2); }
.pls-lote-serv { min-width: 0; }
.pls-lote-nao { opacity: .8; }
.pls-med-tag { flex: none; font-size: .76rem; font-weight: 700; padding: 2px 9px; border-radius: 999px;
  border: 1px solid var(--border); background: var(--surface-2); color: var(--text-secondary); }
.pls-med-tag.pls-st-nesta { background: var(--accent-soft); border-color: var(--accent); color: var(--accent-strong); }
.pls-med-tag.pls-st-antes { background: var(--success-bg); border-color: var(--success); color: var(--success-fg); }
.pls-med-tag.pls-st-depois { background: var(--info-bg); border-color: var(--info); color: var(--info-fg); }

@media (max-width: 720px) {
  .pls-kpi { min-width: 44%; }
  .pls-mapa-ctrls .field { flex-basis: 100%; }
}

/* =======================================================================
   CRONOGRAMA (tela "Cronograma" do Planejamento). Importação do MS Project,
   tabela WBS em árvore e Gantt SVG/CSS. Só tokens do Design System.
   ======================================================================= */
.cron-corpo { margin-top: 4px; }
.cron-drop .pls-drop-tit { font-size: 1.02rem; }
.cron-vazio { padding: 20px; text-align: center; }
.cron-sec-tit { font-weight: 800; color: var(--text-primary); font-size: 1.02rem; margin-bottom: 10px; }
.cron-nota { margin-top: 10px; font-size: .82rem; }
.cron-ativo-topo { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 6px 0 10px; }

/* versões */
.cron-versoes { margin-top: 14px; }
.cron-tabela-wrap { overflow-x: auto; }
.cron-tabela { width: 100%; border-collapse: collapse; }
.cron-tabela th { text-align: left; font-size: .72rem; text-transform: uppercase; letter-spacing: .3px;
  color: var(--text-muted); font-weight: 700; padding: 8px 10px; border-bottom: 1px solid var(--border); white-space: nowrap; }
.cron-tabela td { padding: 8px 10px; border-bottom: 1px solid var(--surface-2); font-size: .88rem; vertical-align: middle; }
.cron-tab-ver { min-width: 560px; }
.cron-ver-sub { font-size: .76rem; margin-top: 2px; }
.cron-ver-acoes { white-space: nowrap; text-align: right; }
.cron-ver-ativa { background: var(--accent-soft); }
.cron-badge-ativa { background: var(--accent); color: var(--accent-contrast); font-weight: 800; font-size: .68rem; letter-spacing: .3px; }

/* prévia */
.cron-preview-acoes { margin-top: 14px; display: flex; justify-content: flex-end; gap: 8px; flex-wrap: wrap; }

/* filtros */
.cron-filtros { display: flex; flex-wrap: wrap; gap: 8px 12px; align-items: center; margin: 8px 0; }
.cron-filtros .field { margin-bottom: 0; }
/* Uma linha só: a busca cresce, a situação fica do tamanho do texto (o width:100% global dos campos
   punha cada controle numa linha inteira — a busca, depois um select de 1.650 px). */
.cron-busca { min-width: 220px; flex: 1; }
.cron-filtros > .cron-busca { width: auto; flex: 1 1 320px; }
.cron-filtros > select.field { width: auto; flex: 0 0 auto; min-width: 210px; }
.cron-chk { display: inline-flex; align-items: center; gap: 6px; font-size: .86rem; color: var(--text-secondary); cursor: pointer; white-space: nowrap; }
/* Tabela · Gantt · Linha de Balanço = trilho de alternância (mesmo componente do .lob-seg). */
.cron-vistas { display: flex; width: fit-content; max-width: 100%; flex-wrap: wrap; gap: 2px; padding: 2px; margin: 6px 0 10px;
  background: var(--seg-track); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: var(--well); }
.cron-vistas > .btn { border-color: transparent; background: transparent; box-shadow: none; }
.cron-vistas > .btn[aria-pressed="true"], .cron-vistas > .btn[aria-selected="true"] { background: var(--seg-on); border-color: transparent; box-shadow: var(--seg-on-shadow), inset 0 -2px 0 var(--accent); }

/* tabela WBS */
.cron-c-wbs { white-space: nowrap; color: var(--text-muted); font-variant-numeric: tabular-nums; font-size: .82rem; }
.cron-c-nome { min-width: 240px; }
.cron-c-data, .cron-c-dur, .cron-c-pct { white-space: nowrap; font-variant-numeric: tabular-nums; }
.cron-c-sit { white-space: nowrap; }
.cron-base { color: var(--text-muted); }
.cron-linha-resumo td { background: var(--surface-2); }
.cron-nome-wrap { display: inline-flex; align-items: center; gap: 4px; }
.cron-nome { color: var(--text-primary); }
.cron-nome-resumo { font-weight: 800; }
.cron-tgl { border: 0; background: transparent; color: var(--text-secondary); cursor: pointer; font-size: .9rem;
  width: 18px; height: 18px; line-height: 1; padding: 0; flex: none; border-radius: 4px; }
.cron-tgl:hover { background: var(--surface-3); color: var(--accent-strong); }
.cron-tgl-vazio { display: inline-block; width: 18px; flex: none; }
.cron-marco { color: var(--accent-strong); }
.cron-crit { color: var(--danger); font-weight: 800; }
.cron-sit { display: inline-block; font-size: .74rem; font-weight: 700; padding: 2px 9px; border-radius: 999px;
  border: 1px solid var(--border); background: var(--surface-2); color: var(--text-secondary); }
.cron-sit.cron-st-nao { background: var(--surface-2); color: var(--text-muted); }
.cron-sit.cron-st-and { background: var(--accent-soft); border-color: var(--accent); color: var(--accent-strong); }
.cron-sit.cron-st-ok { background: var(--success-bg); border-color: var(--success); color: var(--success-fg); }
.cron-sit.cron-st-atr { background: var(--danger-bg); border-color: var(--danger); color: var(--danger-fg); }
.cron-sit.cron-st-adi { background: var(--info-bg); border-color: var(--info); color: var(--info-fg); }

/* ---------------- SINCRONIZAR PLS (prévia) ---------------- */
.cron-sync-ctrl { margin-top: 10px; }
.cron-sync-ctrl select { margin-left: 6px; padding: 5px 8px; border: 1px solid var(--border); border-radius: var(--radius-2, 8px); background: var(--surface); color: var(--text-primary); }
.cron-sync-bucket { margin-top: 12px; }
.cron-sync-bucket > summary { cursor: pointer; font-weight: 700; color: var(--text-primary); }
.cron-sync-bucket ul { margin: 8px 0 0; padding-left: 18px; }
.cron-sync-bucket li { margin: 3px 0; color: var(--text-secondary); }
.cron-sync-export { border-left: 3px solid var(--accent); }
.cron-sync-chk { display: flex; gap: 8px; align-items: flex-start; margin: 6px 0; cursor: pointer; color: var(--text-primary); }
.cron-sync-chk input { margin-top: 3px; flex: 0 0 auto; width: auto; }   /* sem isto o input global (width:100%) afasta a caixa do texto */

/* ---- Conferência antes da exportação (modal em #modalRoot2): cabeçalho e rodapé
   fixos, só o corpo rola — nunca passa da altura da tela ---- */
#modalRoot2 .modal.cronconf { width: 100%; max-width: 880px; max-height: 90vh; max-height: 90dvh; padding: 0; overflow: hidden; background: var(--surface); }
.cronconf-cab { flex: 0 0 auto; display: flex; align-items: flex-start; gap: 12px; padding: 16px 56px 12px 20px; border-bottom: 1px solid var(--border); }
.cronconf-ic { flex: 0 0 auto; width: 36px; height: 36px; border-radius: var(--radius-sm); display: grid; place-items: center; font-size: 1.15rem; background: var(--warning-bg); color: var(--warning-fg); }
.cronconf-cab-tit { min-width: 0; }
.modal.cronconf .cronconf-cab h3 { margin: 0; font-size: 1.15rem; color: var(--text-primary); }
.modal.cronconf .cronconf-cab h3:focus { outline: none; }
.cronconf-sub { margin: 2px 0 0; font-size: .84rem; color: var(--text-secondary); }
.cronconf-corpo { flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 16px 20px; background: var(--background); }
.cronconf-rod { flex: 0 0 auto; padding: 12px 20px max(12px, env(safe-area-inset-bottom)); border-top: 1px solid var(--border); background: var(--surface); }
.cronconf-acoes { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; }
.cronconf-acoes .btn { margin: 0; }
.cronconf-ciente { display: flex; gap: 10px; align-items: flex-start; margin: 0 0 10px; cursor: pointer; font-size: .88rem; line-height: 1.4; color: var(--text-primary); }
.cronconf-ciente input { flex: 0 0 auto; width: 18px; height: 18px; margin: 1px 0 0; accent-color: var(--accent); }
.cronconf-kpis { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; margin: 0 0 14px; }
.cronconf-kpi { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 10px 12px; box-shadow: var(--shadow-sm); min-width: 0; }
.cronconf-kpi-alerta { border-color: var(--warning); background: var(--warning-bg); }
.cronconf-kpi-rot { font-size: .72rem; font-weight: 800; text-transform: uppercase; letter-spacing: .3px; color: var(--text-secondary); }
.cronconf-kpi-val { font-size: 1.4rem; font-weight: 800; color: var(--text-primary); font-variant-numeric: tabular-nums; margin-top: 2px; }
.cronconf-kpi-val span { font-size: .85rem; font-weight: 600; color: var(--text-secondary); }
.cronconf-kpi-alerta .cronconf-kpi-val { color: var(--warning-fg); }
.cronconf-kpi-sub { font-size: .76rem; color: var(--text-secondary); margin-top: 2px; }
.cronconf-aviso { border: 1px solid var(--warning); border-left-width: 4px; background: var(--warning-bg); color: var(--text-primary); border-radius: var(--radius-md); padding: 10px 14px; margin: 0 0 14px; }
.cronconf-aviso-tit { font-weight: 800; text-transform: uppercase; letter-spacing: .3px; font-size: .8rem; color: var(--warning-fg); margin-bottom: 4px; }
.cronconf-aviso p { margin: 0; font-size: .88rem; line-height: 1.45; }
.cronconf-ok { border: 1px solid var(--success); border-left-width: 4px; background: var(--success-bg); color: var(--text-primary); border-radius: var(--radius-md); padding: 12px 14px; margin: 0 0 14px; font-size: .9rem; line-height: 1.45; }
.cronconf-ok b { color: var(--success-fg); }
.cronconf-erro { border: 1px solid var(--danger); border-left-width: 4px; background: var(--danger-bg); color: var(--text-primary); border-radius: var(--radius-md); padding: 12px 14px; font-size: .9rem; line-height: 1.45; }
.cronconf-erro b { color: var(--danger-fg); }
.cronconf-erro p { margin: 6px 0 0; }
.cronconf-sec { margin: 0 0 14px; }
.cronconf-sec-tit { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: baseline; gap: 4px 10px; font-weight: 800; font-size: .92rem; color: var(--text-primary); margin: 0 0 6px; }
.cronconf-cont { font-size: .78rem; font-weight: 700; color: var(--warning-fg); background: var(--warning-bg); border-radius: var(--radius-pill); padding: 1px 10px; }
.cronconf-ajuda { margin: 0 0 6px; font-size: .8rem; color: var(--text-secondary); line-height: 1.4; }
.cronconf-lista { list-style: none; margin: 0; padding: 0; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; }
.cronconf-item { display: flex; gap: 12px; align-items: flex-start; padding: 9px 12px; border-top: 1px solid var(--border); }
.cronconf-item:first-child { border-top: 0; }
.cronconf-cod { flex: 0 0 96px; box-sizing: border-box; font-variant-numeric: tabular-nums; font-weight: 700; font-size: .84rem; color: var(--text-primary); background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 1px 8px; text-align: center; overflow-wrap: anywhere; }
.cronconf-txt { min-width: 0; flex: 1 1 auto; }
.cronconf-nome { font-weight: 600; color: var(--text-primary); overflow-wrap: anywhere; }
.cronconf-meta { font-size: .78rem; color: var(--text-secondary); margin-top: 2px; line-height: 1.4; }
.cronconf-notas { margin: 4px 0 0; padding-left: 18px; font-size: .8rem; color: var(--text-secondary); }
.cronconf-notas li { margin: 2px 0; }
@media (max-width: 640px) {
  .cronconf-kpis { grid-template-columns: 1fr; gap: 6px; }
  .cronconf-kpi { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 0 8px; padding: 8px 12px; }
  .cronconf-kpi-val { font-size: 1.15rem; margin: 0; }
  .cronconf-kpi-sub { flex-basis: 100%; }
  .cronconf-cab { padding: 12px 50px 10px 14px; }
  .cronconf-corpo { padding: 12px; }
  .cronconf-rod { padding: 10px 12px max(10px, env(safe-area-inset-bottom)); }
  .cronconf-acoes .btn { flex: 1 1 auto; }
  .cronconf-item { gap: 8px; padding: 8px 10px; }
  .cronconf-cod { flex-basis: 74px; font-size: .78rem; padding: 1px 4px; }
}

/* ---------------- GANTT (SVG/CSS puro) ---------------- */
.cron-gantt { --cron-lbl-w: 244px; --cron-row: 27px; margin-top: 4px; }
.cron-g-ctrls { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 10px; align-items: center; margin-bottom: 8px; }
/* Dia · Semana · Mês = o mesmo trilho de alternância do .cron-vistas / .lob-seg */
.cron-g-escala { display: flex; gap: 2px; padding: 2px; background: var(--seg-track); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: var(--well); }
.cron-g-escala > .btn { border-color: transparent; background: transparent; box-shadow: none; }
.cron-g-escala > .btn[aria-pressed="true"] { background: var(--seg-on); border-color: transparent; box-shadow: var(--seg-on-shadow), inset 0 -2px 0 var(--accent); }
.cron-g-legenda { display: flex; flex-wrap: wrap; gap: 12px; font-size: .78rem; color: var(--text-secondary); }
.cron-leg { display: inline-flex; align-items: center; gap: 5px; }
.cron-leg-bar { display: inline-block; width: 22px; height: 10px; border-radius: 3px; background: var(--accent-soft); border: 1px solid var(--accent); }
.cron-leg-fill { display: inline-block; width: 22px; height: 10px; border-radius: 3px; background: var(--accent); opacity: .55; }
.cron-leg-base { display: inline-block; width: 22px; height: 3px; background: var(--text-muted); }
.cron-leg-hoje { display: inline-block; width: 0; height: 12px; border-left: 2px dashed var(--accent-strong); }

.cron-g-scroll { overflow-x: auto; border: 1px solid var(--border); border-radius: 10px; background: var(--surface); }
.cron-g-inner { width: max-content; min-width: 100%; }
.cron-g-axis { display: flex; position: sticky; top: 0; z-index: 3; background: var(--surface-2); border-bottom: 1px solid var(--border); }
.cron-g-axis-sp { width: var(--cron-lbl-w); flex: none; position: sticky; left: 0; z-index: 4; background: var(--surface-2); border-right: 1px solid var(--border); }
.cron-g-axis-tr { position: relative; height: 24px; flex: none; }
.cron-g-tick { position: absolute; top: 0; height: 24px; font-size: .68rem; color: var(--text-muted); white-space: nowrap; border-left: 1px solid transparent; padding-left: 3px; }
.cron-g-tick.forte { color: var(--text-secondary); font-weight: 700; }
.cron-g-tick span { display: inline-block; transform: translateY(4px); }

.cron-g-body { position: relative; }
.cron-g-grade { position: absolute; top: 0; bottom: 0; left: var(--cron-lbl-w); z-index: 0; pointer-events: none; }
.cron-g-vline { position: absolute; top: 0; bottom: 0; width: 1px; background: var(--surface-2); }
.cron-g-vline.forte { background: var(--border); }
.cron-g-hoje { position: absolute; top: 0; bottom: 0; width: 0; border-left: 2px dashed var(--accent-strong); z-index: 1; }

.cron-g-row { display: flex; height: var(--cron-row); position: relative; z-index: 1; }
.cron-g-row:nth-child(even) .cron-g-track { background: color-mix(in srgb, var(--surface-2) 45%, transparent); }
.cron-g-lbl { width: var(--cron-lbl-w); flex: none; position: sticky; left: 0; z-index: 2; background: var(--surface);
  border-right: 1px solid var(--border); font-size: .8rem; color: var(--text-primary); white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center; }
.cron-g-lbl-resumo { font-weight: 800; }
.cron-g-wbs { color: var(--text-muted); font-size: .72rem; margin-right: 4px; }
.cron-g-track { position: relative; flex: none; height: var(--cron-row); }

.cron-g-base { position: absolute; top: 19px; height: 3px; background: var(--text-muted); border-radius: 2px; opacity: .8; }
.cron-g-bar { position: absolute; top: 4px; height: 12px; border-radius: 4px; overflow: hidden;
  background: var(--cron-bar, var(--surface-2)); border: 1px solid var(--cron-barbd, var(--border)); box-sizing: border-box; }
.cron-g-fill { position: absolute; top: 0; left: 0; bottom: 0; background: var(--cron-barfill, var(--accent)); opacity: .55; }
.cron-g-resumo { height: 8px; top: 6px; border-radius: 2px; }
.cron-g-marco { position: absolute; top: 5px; width: 11px; height: 11px; margin-left: -5px; background: var(--accent-strong);
  transform: rotate(45deg); border-radius: 2px; }
.cron-g-nao_iniciado { --cron-bar: var(--surface-2); --cron-barbd: var(--border); --cron-barfill: var(--text-muted); }
.cron-g-em_andamento { --cron-bar: var(--accent-soft); --cron-barbd: var(--accent); --cron-barfill: var(--accent); }
.cron-g-concluido { --cron-bar: var(--success-bg); --cron-barbd: var(--success); --cron-barfill: var(--success); }
.cron-g-atrasado { --cron-bar: var(--danger-bg); --cron-barbd: var(--danger); --cron-barfill: var(--danger); }
.cron-g-adiantado { --cron-bar: var(--info-bg); --cron-barbd: var(--info); --cron-barfill: var(--info); }

@media (max-width: 720px) {
  .cron-gantt { --cron-lbl-w: 148px; }
  .cron-busca { min-width: 100%; }
  .cron-base { display: none; }
  .cron-tabela th.cron-base, .cron-tabela td.cron-base { display: none; }
}

/* =======================================================================
   METAS MENSAIS (Previsto × Medido). Só tokens do Design System.
   ======================================================================= */
.metas-ctrls { display: flex; flex-wrap: wrap; gap: 12px 16px; align-items: flex-end; margin: 6px 0 12px; }
.metas-ctrl { margin-bottom: 0; min-width: 180px; }
.metas-sec-tit { font-weight: 800; color: var(--text-primary); font-size: 1rem; margin-bottom: 8px; }

/* cards */
.metas-cards { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; margin-bottom: 10px; }
.metas-cards-sec { margin-bottom: 14px; }
.metas-card { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; padding: 12px 14px; box-shadow: var(--shadow-sm, none); }
.metas-cards-sec .metas-card { background: var(--surface-2); }
.metas-card-r { font-size: .72rem; text-transform: uppercase; letter-spacing: .3px; color: var(--text-muted); font-weight: 700; }
.metas-card-v { font-size: 1.35rem; font-weight: 800; color: var(--text-primary); margin-top: 3px; font-variant-numeric: tabular-nums; }
.metas-card-s { font-size: .74rem; color: var(--text-secondary); margin-top: 2px; }
.metas-card.metas-pos .metas-card-v { color: var(--success-fg); }
.metas-card.metas-neg .metas-card-v { color: var(--danger-fg); }
.metas-card.metas-f-ok .metas-card-v { color: var(--success-fg); }
.metas-card.metas-f-atencao .metas-card-v { color: var(--warning-fg); }
.metas-card.metas-f-critico .metas-card-v { color: var(--danger-fg); }

/* curva */
.metas-curva { margin-bottom: 14px; }
.metas-legenda { display: flex; gap: 14px; font-size: .78rem; color: var(--text-secondary); margin-bottom: 6px; }
.metas-leg::before { content: ""; display: inline-block; width: 16px; height: 3px; vertical-align: 3px; margin-right: 5px; }
.metas-leg-prev::before { background: var(--text-secondary); }
.metas-leg-med::before { background: var(--accent); }
.metas-leg-corte::before { border-top: 2px dashed var(--accent-strong); height: 0; }
.metas-curva-wrap { width: 100%; overflow: hidden; }
.metas-svg { width: 100%; height: auto; display: block; }
.metas-path { fill: none; vector-effect: non-scaling-stroke; }
.metas-path-prev { stroke: var(--text-secondary); stroke-width: 2; stroke-dasharray: 5 4; }
.metas-path-med { stroke: var(--accent); stroke-width: 2.5; }
.metas-corte { stroke: var(--accent-strong); stroke-width: 1; stroke-dasharray: 3 3; }
.metas-cx { font-size: 11px; fill: var(--text-muted); text-anchor: middle; }

/* tabela por serviço */
.metas-tabela-card { margin-bottom: 12px; }
.metas-tabela { width: 100%; }
.metas-row { cursor: pointer; }
.metas-row:hover td { background: var(--surface-2); }
.metas-t-serv { min-width: 200px; }
.metas-tipo { font-size: .66rem; font-weight: 700; text-transform: uppercase; padding: 1px 6px; border-radius: 5px; background: var(--surface-3); color: var(--text-muted); }
/* Origem (segmento) do serviço PLS nas Metas — deixa clara a procedência (Infra, etc.) */
.metas-seg { font-size: .66rem; font-weight: 700; padding: 1px 6px; border-radius: 5px; background: var(--accent-soft); color: var(--accent-strong); }
/* Prévia da importação: resumo por origem (segmento) */
.pls-seg-linha { margin: 8px 0 2px; font-size: .82rem; }
.pls-seg-skip { color: var(--warning-fg, var(--warning)); font-weight: 600; }
.metas-num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.metas-num.metas-pos { color: var(--success-fg); }
.metas-num.metas-neg { color: var(--danger-fg); }
/* Tabela "Serviços" da competência: título e valores com o mesmo alinhamento; larguras fixas no
   <colgroup> (Serviço fica com o resto); em tela estreita rola na horizontal dentro do cartão. */
.metas-tab-serv { table-layout: fixed; min-width: 860px; }
.metas-tab-serv .metas-col-qt { width: 88px; }
.metas-tab-serv .metas-col-mon { width: 150px; }
.metas-tab-serv .metas-col-atg { width: 104px; }
.metas-tab-serv th.metas-t-serv, .metas-tab-serv td.metas-t-serv { min-width: 0; text-align: left; overflow-wrap: break-word; }
.metas-tab-serv th.metas-num { text-align: right; }
.metas-tab-serv th.metas-c-atg, .metas-tab-serv td.metas-c-atg { text-align: center; }
.metas-atg { display: inline-block; font-weight: 700; font-size: .78rem; padding: 1px 8px; border-radius: 999px; border: 1px solid var(--border); }
.metas-atg.metas-f-ok { background: var(--success-bg); color: var(--success-fg); border-color: var(--success); }
.metas-atg.metas-f-atencao { background: var(--warning-bg); color: var(--warning-fg); border-color: var(--warning); }
.metas-atg.metas-f-critico { background: var(--danger-bg); color: var(--danger-fg); border-color: var(--danger); }
.metas-atg.metas-f-na { background: var(--surface-2); color: var(--text-muted); }

/* drill-down */
.metas-drill-sec { margin-bottom: 12px; }
.metas-drill-lin { padding: 6px 0; border-bottom: 1px solid var(--surface-2); font-size: .9rem; }

/* cabeçalho da competência (competência · janela · corte · situação) */
.metas-cab { margin-bottom: 12px; padding: 12px 14px; }
.metas-cab-grid { display: grid; grid-template-columns: minmax(180px, 1fr) minmax(200px, 1.3fr) minmax(170px, 1fr) minmax(130px, .8fr); gap: 10px 16px; align-items: end; }
.metas-cab-item { display: flex; flex-direction: column; gap: 3px; padding-bottom: 4px; min-width: 0; }
.metas-cab-r { font-size: .78rem; font-weight: 700; color: var(--text-secondary); }
.metas-cab-v { font-size: 1.02rem; font-weight: 800; color: var(--text-primary); font-variant-numeric: tabular-nums; white-space: nowrap; }
.metas-cab-s { font-size: .72rem; color: var(--text-muted); }
.metas-cab-item .metas-st { align-self: flex-start; }
.metas-cab-nota { font-size: .76rem; margin-top: 8px; }
.metas-aviso-cfg { color: var(--warning-fg); }
.metas-bloco-tit { font-weight: 800; font-size: .86rem; color: var(--text-primary); margin: 4px 0 6px; text-transform: uppercase; letter-spacing: .3px; }
.metas-bloco-tit .muted { font-weight: 500; text-transform: none; letter-spacing: 0; }
.metas-alerta { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; }
.metas-alerta .btn { margin-left: auto; }
.metas-cards-acum { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.metas-cards-acum .metas-card { background: var(--surface-2); border-style: dashed; }
/* valor AUSENTE (aguardando/indeterminado) — nunca parece R$ 0,00 */
.metas-na { color: var(--text-muted); font-weight: 700; font-size: .92em; }
.metas-card-v .metas-na { font-size: 1rem; }
.metas-curva-nota { font-size: .8rem; margin: 6px 0 0; }
.metas-curva-sub { font-size: .78rem; margin-top: 2px; }
.metas-banda { fill: var(--accent-soft); stroke: var(--accent-soft-border); stroke-width: 1; vector-effect: non-scaling-stroke; }
.metas-banda-rot { font-size: 9px; fill: var(--accent-strong); text-anchor: middle; font-weight: 700; }
.metas-leg-banda::before { background: var(--accent-soft); border: 1px solid var(--accent-soft-border); height: 8px; vertical-align: 0; }
.metas-fonte { margin-top: 8px; max-width: 340px; }
/* diagnóstico + reconciliação + calendário de medições */
.metas-diag { margin-bottom: 12px; padding: 10px 14px; }
.metas-diag summary { cursor: pointer; }
.metas-diag-lista { margin: 8px 0 0; padding-left: 18px; font-size: .84rem; display: grid; gap: 4px; }
.metas-diag-erro { color: var(--danger-fg); }
.metas-diag-aviso { color: var(--warning-fg); }
.metas-diag-info { color: var(--text-secondary); }
.metas-cal { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 10px; margin-bottom: 12px; background: var(--surface-2); }
.metas-cal input[type="date"] { min-width: 130px; }
.metas-card-v { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.metas-card-click { cursor: pointer; }
.metas-card-click:hover, .metas-card-click:focus-visible { border-color: var(--accent); outline: none; }
.metas-card-lupa { font-size: .7rem; opacity: .6; }
.metas-barra { height: 4px; border-radius: var(--radius-pill); background: var(--surface-3); margin-top: 6px; overflow: hidden; }
.metas-barra span { display: block; height: 100%; background: var(--accent); }
/* situação da competência */
.metas-st { display: inline-block; font-size: .72rem; font-weight: 700; padding: 1px 8px; border-radius: var(--radius-pill); border: 1px solid var(--border); white-space: nowrap; }
.metas-st-fechada { color: var(--text-secondary); background: var(--surface-2); }
.metas-st-andamento { color: var(--accent-strong); background: var(--accent-soft); border-color: var(--accent-soft-border); }
.metas-st-futura { color: var(--text-muted); background: transparent; border-style: dashed; }
/* curva: alternância + grade + tooltip */
.metas-curva-top { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 6px 12px; margin-bottom: 4px; }
.metas-toggle { display: inline-flex; gap: 4px; }
/* "⚙" das metas aberto = placa marcada (o painel está aberto), não o preenchimento do CTA. */
.btn.metas-cfg-btn.primary { background: var(--seg-on); color: var(--text-primary); border-color: var(--border-strong); box-shadow: var(--seg-on-shadow), inset 0 -2px 0 var(--accent); }
.metas-curva-wrap { position: relative; }
.metas-grade { stroke: var(--border); stroke-width: 1; vector-effect: non-scaling-stroke; }
.metas-cy { font-size: 11px; fill: var(--text-muted); text-anchor: end; }
.metas-hover-ln { stroke: var(--text-muted); stroke-width: 1; vector-effect: non-scaling-stroke; }
.metas-tip { position: absolute; top: 6px; z-index: 2; pointer-events: none; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: var(--shadow-md); padding: 6px 9px; font-size: .78rem; color: var(--text-primary); white-space: nowrap; font-variant-numeric: tabular-nums; }
.metas-tip .metas-pos { color: var(--success-fg); }
.metas-tip .metas-neg { color: var(--danger-fg); }
/* histórico + composições */
.metas-nowrap { white-space: nowrap; }
.metas-row-sel td { background: var(--accent-soft); }
.metas-row-orf td { color: var(--warning-fg); font-size: .82rem; }
.metas-row-tot td { font-weight: 800; border-top: 2px solid var(--border); }
/* Histórico de competências: 3 blocos (mês | acumulado | desempenho). O th herda a MESMA classe da
   célula → cabeçalho e valor sempre no mesmo alinhamento. Rola na horizontal dentro do card. */
.metas-hist-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.metas-hist { min-width: 1180px; font-variant-numeric: tabular-nums; border-collapse: separate; border-spacing: 0; }   /* separate: sem fresta na coluna fixa */
.metas-hist th, .metas-hist td { padding: 7px 9px; }
.metas-hist th { cursor: help; }
.metas-hist th.metas-num, .metas-hist td.metas-num { text-align: right; white-space: nowrap; }
.metas-hist .metas-h-comp { text-align: left; white-space: nowrap; }
.metas-hist td.metas-h-comp { text-transform: capitalize; }
.metas-hist .metas-h-jan { text-align: left; white-space: nowrap; color: var(--text-secondary); }
.metas-hist .metas-h-st { text-align: center; white-space: nowrap; }
.metas-hist .metas-div { border-left: 1px solid var(--border); }
.metas-hist td.metas-ac { font-weight: 600; color: var(--text-primary); }
.metas-hist td.metas-ac.metas-pos { color: var(--success-fg); }
.metas-hist td.metas-ac.metas-neg { color: var(--danger-fg); }
.metas-hist .metas-grp th { text-transform: uppercase; font-size: .64rem; letter-spacing: .5px; color: var(--text-muted); border-bottom: 0; padding-bottom: 0; text-align: center; cursor: default; }
.metas-hist .metas-grp th.metas-ac { color: var(--accent-strong); }
.metas-tot-sub { font-weight: 500; color: var(--text-muted); font-size: .78rem; text-transform: none; }
.metas-hist-nota { font-size: .76rem; margin: 8px 0 0; }
/* competência fixa à esquerda ao rolar (fundo opaco + camada da seleção/hover por cima) */
.metas-hist .metas-h-comp { position: sticky; left: 0; z-index: 1; background: var(--surface); box-shadow: inset -1px 0 0 var(--border); }
.metas-hist th.metas-h-comp { background: var(--surface-2); }
.metas-hist .metas-row:hover td.metas-h-comp { background: var(--surface-2); }
.metas-hist .metas-row-sel td.metas-h-comp { background: linear-gradient(var(--accent-soft), var(--accent-soft)), var(--surface); }
.metas-src { font-size: .8rem; }
.metas-orf { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 6px 10px; margin-bottom: 8px; }
.metas-orf summary { cursor: pointer; }
.metas-orf-meta { font-size: .82rem; margin: 6px 0; display: grid; gap: 2px; }

@media (max-width: 1100px) {
  .metas-cards-acum { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
  .metas-cab-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 720px) {
  .metas-cards, .metas-cards-acum { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .metas-card-v { font-size: 1.05rem; }
  .metas-ctrl { min-width: 0; }
  .metas-cab-grid { grid-template-columns: 1fr; }
  .metas-cab-v { white-space: normal; }
}
@media (max-width: 420px) {
  .metas-cards, .metas-cards-acum { grid-template-columns: 1fr; }
}

/* ---- Metas: ESCOPO da análise (Obra Completa · Habitação · Infraestrutura) + composição + reconciliação ---- */
.metas-escopo { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin-bottom: 12px; padding: 10px 14px; }
.metas-escopo-r { font-size: .78rem; font-weight: 700; color: var(--text-secondary); }
.metas-escopo-btns { flex-wrap: wrap; }
.metas-escopo-s { font-size: .76rem; }
.metas-comp { font-size: .72rem; color: var(--text-secondary); font-variant-numeric: tabular-nums; }
.metas-hist td.metas-tot-med, .metas-hist th.metas-tot-med { font-weight: 800; color: var(--text-primary); background: var(--accent-soft); }
.metas-hist td.metas-meta { font-weight: 700; }
.metas-hist td.metas-comp-c { color: var(--text-secondary); }
.metas-lnk { color: inherit; cursor: pointer; text-decoration: underline dotted; text-underline-offset: 3px; }
.metas-lnk:hover { color: var(--accent-strong); }
.metas-hist .metas-h-rec { text-align: center; white-space: nowrap; font-weight: 800; cursor: pointer; }
.metas-rec-ok { color: var(--success-fg); font-weight: 700; }
.metas-rec-div { color: var(--danger-fg); font-weight: 700; }
.metas-rec-na { color: var(--text-muted); font-weight: 700; }
.metas-rec-tab { min-width: 980px; font-variant-numeric: tabular-nums; }
.metas-rec-tab td, .metas-rec-tab th { white-space: nowrap; }
.metas-grp-seg td { background: var(--surface-2); padding-top: 8px; }
.metas-row-sub td { font-weight: 700; border-top: 1px dashed var(--border); }
.metas-hist-total { min-width: 1480px; }
@media (max-width: 720px) {
  .metas-escopo { padding: 10px; }
  .metas-escopo-s { flex-basis: 100%; }
}

/* ---- PREVISÃO DA PRÓXIMA MEDIÇÃO (metas-previsao-ui.js) — VERDE = previsão/forecast ---- */
.metas-leg-prevs::before { border-top: 2px dashed var(--success); height: 0; }
.metas-prev-path { stroke: var(--success); stroke-width: 2.5; stroke-dasharray: 6 4; }
.metas-prev-faixa-ln { stroke: var(--success); stroke-width: 1.5; opacity: .55; vector-effect: non-scaling-stroke; }
.metas-prev-pt { fill: var(--success); stroke: var(--surface); stroke-width: 1.5; }
.metas-prev-ancora { fill: var(--surface); stroke: var(--success); stroke-width: 1.5; }
.metas-prev-card { border-left: 4px solid var(--success); margin-bottom: 14px; }
.metas-prev-tit { color: var(--success-fg); }
.metas-prev-cards { margin-bottom: 8px; }
.metas-prev-destaque .metas-card-v { color: var(--success-fg); }
.metas-prev-faixa { font-size: 1rem; white-space: nowrap; }
.metas-prev-conf { display: inline-block; font-size: .95rem; padding: 1px 10px; border-radius: 999px; }
.metas-prev-c-alta { background: var(--success-bg); color: var(--success-fg); }
.metas-prev-c-mod { background: var(--warning-bg); color: var(--warning-fg); }
.metas-prev-c-baixa { background: var(--danger-bg); color: var(--danger-fg); }
.metas-prev-c-na { background: var(--surface-3); color: var(--text-muted); }
.metas-prev-rod { font-size: .78rem; line-height: 1.5; }
.metas-prev-rod .btn { margin-left: 6px; vertical-align: middle; }
.metas-prev-tip-tit { font-weight: 800; color: var(--success-fg); margin-bottom: 3px; }
.metas-prev-sel, td.metas-prev-sel { background: var(--success-bg); }
.metas-prev-serie { font-size: .78rem; line-height: 1.6; word-break: break-word; }
@media (max-width: 600px) { .metas-prev-faixa { white-space: normal; } }
.metas-tip.metas-tip-prev { white-space: normal; width: max-content; max-width: min(340px, calc(100% - 8px)); }

/* =======================================================================
   METAS — ARQUITETURA EM CAMADAS (UX 27/09/2026): barra de contexto numa linha,
   parâmetros no ⚙, sub-abas (Resumo · Competências · Serviços · Conferência) e
   Resumo em 3 PAINÉIS comparativos (Competência · Acumulado · Tendência).
   ======================================================================= */
.metas-ctx { padding: 10px 14px; margin-bottom: 10px; }
/* linha do topo: [botão do menu] [barra de contexto]. O botão fica FORA da caixa, centrado na 1ª linha
   (mesmo se a barra quebrar ou o painel ⚙ abrir): 13px = borda (1) + padding da barra (10) + (linha 36 − botão 32) ÷ 2 */
.metas-topo { display: flex; align-items: flex-start; gap: 8px; margin-bottom: 10px; }
.metas-topo > .metas-ctx { flex: 1 1 auto; min-width: 0; margin-bottom: 0; }
.metas-topo > .plan-nav-toggle { margin-top: 13px; }
.metas-ctx-lin { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.metas-ctx-comp { display: inline-flex; align-items: center; gap: 4px; }
.metas-ctx-sel select { font-weight: 800; font-size: 1rem; padding: 6px 10px; min-width: 170px; }
.metas-passo { min-width: 34px; font-size: 1.05rem; line-height: 1; }
.metas-passo[disabled] { opacity: .35; cursor: default; }
.metas-ctx-info { font-size: .84rem; color: var(--text-secondary); white-space: nowrap; font-variant-numeric: tabular-nums; }
.metas-ctx-info b { color: var(--text-primary); }
.metas-ctx-esp { flex: 1 1 auto; }
.metas-chip { font: inherit; font-size: .78rem; font-weight: 700; color: var(--text-secondary); background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-pill); padding: 2px 10px; cursor: pointer; white-space: nowrap; }
.metas-chip:hover, .metas-chip:focus-visible { border-color: var(--accent); color: var(--accent-strong); outline: none; }
span.metas-chip { cursor: default; }
.metas-chip-on { background: var(--accent-soft); border-color: var(--accent-soft-border); color: var(--accent-strong); }
.metas-cfg-btn { min-width: 38px; font-size: 1rem; }
.metas-cfg-dot { color: var(--warning); font-size: .7rem; vertical-align: 2px; }
.metas-cfg { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 18px; margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--border); }
.metas-cfg .metas-fonte { margin-top: 0; }
.metas-cfg .metas-cab-nota { flex: 1 1 100%; margin-top: 0; }
.metas-avisos { margin: 0 0 10px; font-size: .84rem; }
.metas-avisos > summary { cursor: pointer; color: var(--text-secondary); font-weight: 700; padding: 4px 2px; }
.metas-avisos > .pls-alerta { margin-top: 6px; }
.metas-subnav { margin-bottom: 14px; }

.metas-resumo { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; align-items: stretch; margin-bottom: 12px; }
.metas-painel { display: flex; flex-direction: column; gap: 2px; padding: 12px 16px; margin: 0; min-width: 0; }
.metas-painel-tit { font-size: .8rem; font-weight: 800; text-transform: uppercase; letter-spacing: .3px; color: var(--text-secondary); margin-bottom: 4px; }
.metas-painel-tit b { color: var(--text-primary); text-transform: none; letter-spacing: 0; font-size: .95rem; }
.metas-painel-tit .muted { font-weight: 500; text-transform: none; letter-spacing: 0; }
.metas-painel-jan { font-size: .74rem; margin: -2px 0 4px; }
.metas-lin { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 10px; align-items: baseline; padding: 5px 0; border-bottom: 1px solid var(--surface-2); }
.metas-lin:last-of-type { border-bottom: 0; }
.metas-lin-r { font-size: .8rem; font-weight: 700; color: var(--text-secondary); }
.metas-lin-v { font-size: 1.12rem; font-weight: 800; color: var(--text-primary); text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.metas-lin-s { grid-column: 1 / -1; font-size: .74rem; color: var(--text-muted); margin-top: 1px; }
.metas-lin .metas-barra, .metas-lin .metas-prev-slot { grid-column: 1 / -1; }
.metas-lin-click { cursor: pointer; border-radius: var(--radius-sm); }
.metas-lin-click:hover, .metas-lin-click:focus-visible { background: var(--surface-2); outline: none; }
.metas-lin-desvio .metas-lin-v { font-size: 1.3rem; }
.metas-lin-sec .metas-lin-v { font-size: .98rem; }
.metas-lin.metas-pos .metas-lin-v { color: var(--success-fg); }
.metas-lin.metas-neg .metas-lin-v { color: var(--danger-fg); }
.metas-lin.metas-f-ok .metas-lin-v { color: var(--success-fg); }
.metas-lin.metas-f-atencao .metas-lin-v { color: var(--warning-fg); }
.metas-lin.metas-f-critico .metas-lin-v { color: var(--danger-fg); }
.metas-lin-v .metas-na { font-size: .95rem; }
.metas-prev-slot { font-size: .8rem; color: var(--success-fg); background: var(--success-bg); border-radius: var(--radius-sm); padding: 4px 8px; margin-top: 4px; }
.metas-prev-slot .muted { color: var(--text-secondary); }
.metas-prev-destaque .metas-lin-v { color: var(--success-fg); }
.metas-prev-card.metas-painel { border-left: 4px solid var(--success); }
.metas-painel-sub { margin-top: 6px; padding-top: 8px; border-top: 1px dashed var(--border); }
.metas-sub-tit { font-size: .74rem; font-weight: 800; text-transform: uppercase; letter-spacing: .3px; color: var(--text-secondary); margin-bottom: 6px; }
.metas-sub-tit .muted { font-weight: 500; text-transform: none; letter-spacing: 0; }
.metas-minis { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px 12px; }
.metas-mini { display: flex; flex-direction: column; min-width: 0; }
.metas-mini-r { font-size: .7rem; color: var(--text-muted); font-weight: 700; }
.metas-mini-v { font-size: .9rem; font-weight: 800; color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; font-variant-numeric: tabular-nums; }
.metas-mini.metas-pos .metas-mini-v, .metas-mini.metas-f-ok .metas-mini-v { color: var(--success-fg); }
.metas-mini.metas-neg .metas-mini-v, .metas-mini.metas-f-critico .metas-mini-v { color: var(--danger-fg); }
.metas-mini.metas-f-atencao .metas-mini-v { color: var(--warning-fg); }
.metas-mini-v .metas-na { font-size: .82rem; }
.metas-prog { position: relative; height: 8px; border-radius: var(--radius-pill); background: var(--surface-3); margin: 8px 0 4px; }
.metas-prog-real { display: block; height: 100%; border-radius: var(--radius-pill); background: var(--accent); }
.metas-prog-prev { position: absolute; top: -4px; width: 2px; height: 16px; margin-left: -1px; background: var(--text-primary); border-radius: 1px; }
.metas-prog-leg { display: flex; flex-wrap: wrap; gap: 4px 12px; font-size: .74rem; color: var(--text-secondary); margin-bottom: 4px; font-variant-numeric: tabular-nums; }
.metas-leg-marca::before { background: var(--text-primary); width: 2px; height: 10px; vertical-align: -1px; }
.metas-painel-rod { font-size: .72rem; margin-top: auto; padding-top: 8px; line-height: 1.45; }
.metas-painel-rod .btn { margin: 4px 0 0; }
.metas-hist.metas-hist-semcomp { min-width: 980px; }

@media (max-width: 1180px) {
  .metas-resumo { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .metas-resumo > .metas-prev-card { grid-column: 1 / -1; }
}
@media (max-width: 760px) {
  .metas-resumo { grid-template-columns: 1fr; }
  .metas-ctx-esp { display: none; }
  .metas-ctx-sel select { min-width: 0; }
}

/* Curva do MODELO (backtest) — camada opcional do gráfico de Evolução; teal = informação (≠ verde da previsão) */
.metas-modelo-path { stroke: var(--info); stroke-width: 1.5; stroke-dasharray: 2 3; }
.metas-modelo-pt { fill: var(--surface); stroke: var(--info); stroke-width: 1.5; cursor: help; }
.metas-leg-modelo::before { border-top: 2px dotted var(--info); height: 0; }
.metas-chk { display: inline-flex; align-items: center; gap: 6px; margin-left: auto; white-space: nowrap; font-size: .8rem; font-weight: 700; color: var(--text-secondary); cursor: pointer; }
.metas-legenda { flex-wrap: wrap; align-items: center; }
/* Término estimado (camada opcional da Evolução, depende da curva do modelo) — verde = previsão */
.metas-chk-sub { margin-left: 12px; }
.metas-termino-path { stroke: var(--success); stroke-width: 2; stroke-dasharray: 2 4; opacity: .85; }
.metas-termino-pt { fill: var(--surface); stroke: var(--success); stroke-width: 1.5; cursor: help; }
.metas-termino-fim { fill: var(--success); stroke: var(--surface); stroke-width: 1.5; cursor: help; }
.metas-termino-faixa { stroke: var(--success); stroke-width: 5; stroke-linecap: round; opacity: .3; cursor: help; }
.metas-termino-rot { font-size: 11px; font-weight: 700; fill: var(--success-fg); }
.metas-leg-termino::before { border-top: 2px dotted var(--success); height: 0; }

/* ==========================================================================
   CENTRAL DE MODELOS DE PREVISÃO (metas-modelos-ui.js) — modal analítico
   largo (≈88% × 85%), cabeçalho + abas fixos, corpo com rolagem própria,
   rodapé de ações. Só tokens do Design System (séries = --chart-1..4).
   ========================================================================== */
.metas-modelos-btn { display: inline-flex; align-items: center; gap: 6px; }
.metas-modelos-ic { flex: 0 0 auto; }
.metas-modelos-txt-curto { display: none; }
.metas-modelos-dot { width: 7px; height: 7px; border-radius: 50%; background: var(--accent); display: inline-block; }
/* grupo de ações da barra (escopo · Modelos · ⚙): quebra como UNIDADE, alinhado à direita */
.metas-ctx-acoes { display: inline-flex; flex-wrap: wrap; align-items: center; justify-content: flex-end; gap: 8px; margin-left: auto; }
/* texto curto "Modelos" quando a BARRA (não a janela) fica estreita — vale com o menu lateral aberto ou recolhido */
.metas-ctx { container-type: inline-size; }
@container (max-width: 1260px) { .metas-modelos-txt { display: none; } .metas-modelos-txt-curto { display: inline; } }
@media (max-width: 700px) { .metas-modelos-txt { display: none; } .metas-modelos-txt-curto { display: inline; } }

#modalRoot2 .modal.prevc { width: 88vw; max-width: 1240px; height: 85vh; height: 85dvh; max-height: 85dvh; padding: 0; overflow: hidden; background: var(--surface); }
@media (max-width: 780px) { #modalRoot2 .modal.prevc { width: 100%; max-width: 100%; height: 92vh; height: 92dvh; max-height: 92dvh; } }
.prevc-cab { flex: 0 0 auto; display: flex; flex-wrap: wrap; align-items: flex-start; gap: 8px 20px; padding: 16px 58px 10px 22px; }
.prevc-cab-tit { flex: 1 1 320px; min-width: 0; }
.modal.prevc .prevc-cab h3 { margin: 0; font-size: 1.2rem; color: var(--text-primary); padding-right: 0; }
.prevc-sub { margin: 2px 0 0; font-size: .86rem; color: var(--text-secondary); }
.prevc-cab-ctx { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; font-size: .84rem; color: var(--text-secondary); padding-top: 3px; }
.prevc-ctx-obra { font-weight: 700; color: var(--text-primary); }
.prevc-ctx-sep { color: var(--border-strong); }
.prevc-selo { font-size: .72rem; font-weight: 800; padding: 2px 10px; border-radius: var(--radius-pill); border: 1px solid var(--border); background: var(--surface-2); color: var(--text-secondary); white-space: nowrap; }
.prevc-selo-manual { background: var(--accent-soft); border-color: var(--accent-soft-border); color: var(--accent-strong); }
.prevc-selo-pend { background: var(--warning-bg); border-color: transparent; color: var(--warning-fg); }
.hist-subnav.prevc-abas { flex: 0 0 auto; margin: 0; padding: 0 22px; }
.prevc-abas button:focus-visible { outline: none; box-shadow: var(--focus-ring); }
.prevc-corpo { flex: 1 1 auto; min-height: 0; overflow-y: auto; overflow-x: hidden; padding: 16px 22px 22px; background: var(--background); }
.prevc-corpo:focus { outline: none; }
.prevc-rod { flex: 0 0 auto; display: flex; flex-wrap: wrap; align-items: center; gap: 8px 10px; padding: 12px 22px max(12px, env(safe-area-inset-bottom)); border-top: 1px solid var(--border); background: var(--surface); }
.prevc-rod-msg { flex: 1 1 280px; min-width: 0; font-size: .84rem; color: var(--text-secondary); }
.prevc-rod .btn { margin: 0; }
.prevc-msg-ok { color: var(--success-fg); font-weight: 700; }
.prevc-msg-erro { color: var(--danger-fg); font-weight: 700; }
.prevc-msg-info { color: var(--info-fg); }
.prevc-link { font: inherit; border: 0; background: none; padding: 0; color: var(--accent-strong); font-weight: 700; text-decoration: underline; cursor: pointer; }
/* celular: cabeçalho e rodapé enxutos — sobra altura para o conteúdo */
@media (max-width: 560px) {
  .prevc-cab { padding: 12px 52px 6px 16px; gap: 4px 12px; }
  .modal.prevc .prevc-cab h3 { font-size: 1.05rem; }
  .prevc-sub, .prevc-ctx-sep { display: none; }
  .prevc-cab-ctx { font-size: .78rem; padding-top: 0; }
  .hist-subnav.prevc-abas { padding: 0 10px; }
  .prevc-corpo { padding: 12px 12px 16px; }
  .prevc-rod { padding: 8px 12px max(8px, env(safe-area-inset-bottom)); gap: 6px; }
  .prevc-rod-msg { flex-basis: 100%; font-size: .76rem; }
  .prevc-rod-msg .prevc-msg-neutra { display: none; }
  .prevc-rod .btn { flex: 1 1 auto; }
}

/* blocos do corpo */
.prevc-sec { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 14px 16px; margin: 0 0 14px; box-shadow: var(--shadow-sm); min-width: 0; }
.prevc-sec-tit { font-size: .8rem; font-weight: 800; text-transform: uppercase; letter-spacing: .3px; color: var(--text-secondary); margin: 0 0 10px; display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
.prevc-sec-tit .muted { text-transform: none; letter-spacing: 0; font-weight: 500; font-size: .8rem; }
.prevc-sec-tit .prevc-selo { text-transform: none; letter-spacing: 0; }
.prevc-nota { font-size: .8rem; line-height: 1.45; margin: 8px 0 0; }
.prevc-barra { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; margin: 0 0 12px; }
.prevc-esp { flex: 1 1 auto; }
.prevc-ord { display: inline-flex; align-items: center; gap: 8px; font-size: .84rem; font-weight: 700; color: var(--text-secondary); }
.prevc-ord select { width: auto; min-width: 170px; padding: 6px 10px; }
.prevc-det-sel select { min-width: min(320px, 70vw); }

/* KPIs */
.prevc-kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin: 0 0 14px; }
.prevc-kpis-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); margin-bottom: 12px; }
@media (max-width: 1100px) { .prevc-kpis-6 { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 980px) { .prevc-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 520px) { .prevc-kpis, .prevc-kpis-6 { grid-template-columns: 1fr; } }
.prevc-kpi { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-md); padding: 12px 14px; box-shadow: var(--shadow-sm); min-width: 0; }
.prevc-kpi-p { box-shadow: none; background: var(--surface-2); }
.prevc-kpi-rot { font-size: .72rem; font-weight: 800; text-transform: uppercase; letter-spacing: .3px; color: var(--text-secondary); }
.prevc-kpi-val { font-size: 1.4rem; font-weight: 800; color: var(--text-primary); font-variant-numeric: tabular-nums; margin-top: 4px; line-height: 1.2; overflow-wrap: anywhere; }
.prevc-kpi-p .prevc-kpi-val { font-size: 1.1rem; }
.prevc-kpi-de { font-size: .9rem; font-weight: 600; color: var(--text-secondary); }
.prevc-kpi-sub { font-size: .78rem; color: var(--text-secondary); margin-top: 4px; line-height: 1.45; }
.prevc-kpi-lin { display: flex; justify-content: space-between; align-items: center; gap: 8px; font-size: .9rem; margin-top: 6px; color: var(--text-primary); }
.prevc-kpi-lin-sm { font-size: .82rem; margin-top: 3px; color: var(--text-secondary); }
.prevc-kpi-lin-sm b { color: var(--text-primary); font-variant-numeric: tabular-nums; white-space: nowrap; }
.prevc-prev { color: var(--success-fg); }

/* tabelas, etiquetas e situação (texto + ícone: nunca só cor) */
.prevc-tab tr.prevc-grupo th { background: var(--surface-2); text-align: left; font-size: .8rem; color: var(--text-primary); }
.prevc-tab tr.prevc-grupo th .muted { font-weight: 500; }
.prevc-tab tr.prevc-uso td { background: var(--accent-soft); }
.prevc-tab tr.prevc-uso td:first-child { box-shadow: inset 3px 0 0 var(--accent); }
.prevc-tab tr.prevc-diverge td { background: var(--warning-bg); }
.prevc-tab th.prevc-col-on { color: var(--text-primary); text-decoration: underline; text-decoration-color: var(--accent); text-underline-offset: 3px; }
.prevc-tab td.prevc-col-on { font-weight: 800; }
.prevc-tag { display: inline-block; font-size: .68rem; font-weight: 800; padding: 1px 7px; border-radius: var(--radius-pill); background: var(--surface-3); color: var(--text-secondary); vertical-align: 1px; white-space: nowrap; }
.prevc-tag-oficial, .prevc-tag-manual { background: var(--accent-soft); color: var(--accent-strong); }
.prevc-tag-alerta { background: var(--warning-bg); color: var(--warning-fg); }
.prevc-st { display: inline-flex; align-items: center; gap: 4px; font-size: .76rem; font-weight: 700; padding: 2px 8px; border-radius: var(--radius-pill); white-space: nowrap; }
.prevc-st-em_uso { background: var(--success-bg); color: var(--success-fg); }
.prevc-st-disponivel { background: var(--surface-2); color: var(--text-primary); border: 1px solid var(--border); }
.prevc-st-insuficiente, .prevc-st-parcial { background: var(--warning-bg); color: var(--warning-fg); }
.prevc-st-indisponivel { background: var(--surface-3); color: var(--text-muted); }
.prevc-motivo { display: block; font-size: .72rem; font-weight: 500; color: var(--text-muted); margin-top: 2px; white-space: normal; max-width: 340px; line-height: 1.35; }
.prevc-alerta-in { display: block; font-size: .8rem; color: var(--warning-fg); margin-top: 2px; }
.prevc-lista { margin: 4px 0 0; padding-left: 18px; font-size: .88rem; color: var(--text-primary); }
.prevc-lista li { margin: 4px 0; line-height: 1.45; }
.prevc-cfg-lista { list-style: none; padding-left: 0; }
.prevc-cfg-g { display: inline-block; min-width: 118px; font-weight: 800; }
.prevc-barra-erro { display: inline-block; height: 8px; border-radius: 4px; background: var(--text-muted); opacity: .6; vertical-align: middle; margin-right: 8px; }

/* gráfico: medido = grafite contínuo; modelos = cor + tracejado + marcador próprios (identidade nunca só por cor) */
.prevc-chips { display: flex; flex-wrap: wrap; gap: 6px; margin: 0 0 10px; }
.prevc-chip { font: inherit; font-size: .78rem; font-weight: 700; padding: 3px 10px; border-radius: var(--radius-pill); border: 1px solid var(--border); background: var(--surface); color: var(--text-secondary); cursor: pointer; display: inline-flex; align-items: center; gap: 4px; }
.prevc-chip[aria-pressed="true"] { border-color: var(--accent); background: var(--accent-soft); color: var(--text-primary); }
.prevc-chip:focus-visible { outline: none; box-shadow: var(--focus-ring); }
.prevc-graf-wrap { position: relative; overflow-x: auto; }
.prevc-graf { display: block; width: 100%; min-width: 560px; height: auto; }
.prevc-graf text { fill: var(--text-secondary); font-size: 11px; font-family: var(--font-sans); }
.prevc-graf .prevc-rot { font-weight: 700; fill: var(--text-secondary); }
.prevc-grade { stroke: var(--border); stroke-width: 1; }
.prevc-eixo { stroke: var(--border-strong); stroke-width: 1; }
.prevc-l { fill: none; stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.prevc-l-real { stroke: var(--text-primary); stroke-width: 2.5; }
.prevc-s1 { stroke: var(--chart-1); } .prevc-s2 { stroke: var(--chart-2); } .prevc-s3 { stroke: var(--chart-3); } .prevc-s4 { stroke: var(--chart-4); }
.prevc-f1 { fill: var(--chart-1); } .prevc-f2 { fill: var(--chart-2); } .prevc-f3 { fill: var(--chart-3); } .prevc-f4 { fill: var(--chart-4); }
.prevc-m { stroke: var(--surface); stroke-width: 2; }
.prevc-m-real { fill: var(--text-primary); }
.prevc-cruz { stroke: var(--text-muted); stroke-width: 1; stroke-dasharray: 3 3; }
.prevc-hit { fill: transparent; cursor: crosshair; outline: none; }
.prevc-hit:focus-visible { fill: var(--accent-soft); }
.prevc-tip.metas-tip { top: 8px; transform: translateX(-50%); white-space: normal; width: max-content; max-width: min(320px, 90%); }
.prevc-tip[hidden] { display: none; }
.prevc-amostra { vertical-align: middle; margin-right: 2px; }
.prevc-leg { display: flex; flex-wrap: wrap; gap: 6px 16px; font-size: .8rem; color: var(--text-secondary); margin-top: 8px; }
.prevc-leg svg { vertical-align: middle; margin-right: 4px; }

/* detalhes técnicos */
.prevc-det-grid { display: grid; grid-template-columns: minmax(0, 1.4fr) minmax(0, 1fr); gap: 14px; align-items: start; }
.prevc-det-grid > div > .prevc-kpi { margin-bottom: 14px; }
@media (max-width: 860px) { .prevc-det-grid { grid-template-columns: 1fr; } }
.prevc-dl { display: grid; grid-template-columns: max-content minmax(0, 1fr); gap: 6px 14px; margin: 0; font-size: .87rem; }
.prevc-dl dt { color: var(--text-secondary); font-weight: 600; }
.prevc-dl dd { margin: 0; color: var(--text-primary); min-width: 0; overflow-wrap: anywhere; }
@media (max-width: 520px) { .prevc-dl { grid-template-columns: 1fr; gap: 2px; } .prevc-dl dd { margin-bottom: 6px; } }
.prevc-dl-par { background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 8px 10px; margin: 6px 0 4px; font-variant-numeric: tabular-nums; }
.prevc-desc { margin: 0 0 10px; font-size: .92rem; line-height: 1.55; color: var(--text-primary); }
.prevc-como summary { cursor: pointer; font-weight: 800; color: var(--text-primary); padding: 6px 0; }
.prevc-como summary:focus-visible { outline: none; box-shadow: var(--focus-ring); border-radius: 4px; }
.prevc-como-corpo p { margin: 2px 0 8px; font-size: .87rem; line-height: 1.5; }
.prevc-como-tit { font-size: .74rem; font-weight: 800; text-transform: uppercase; letter-spacing: .3px; color: var(--text-secondary); margin-top: 10px; }
.prevc-formula { font-family: var(--font-mono); font-size: .8rem; line-height: 1.6; background: var(--surface-2); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 8px 10px; margin: 4px 0; white-space: pre-wrap; overflow-wrap: anywhere; color: var(--text-primary); }
.prevc-mini-wrap { margin-top: 4px; }
.prevc-mini { display: flex; align-items: flex-end; gap: 3px; height: 48px; padding: 0 2px; border-bottom: 1px solid var(--border-strong); }
.prevc-mini span { flex: 1 1 0; background: var(--text-muted); opacity: .6; border-radius: 3px 3px 0 0; min-height: 3px; }
.prevc-mini-eixo { display: flex; justify-content: space-between; gap: 8px; font-size: .72rem; color: var(--text-muted); margin-top: 3px; }

/* configuração */
.prevc-cfg-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(100%, 320px), 1fr)); gap: 14px; margin: 0 0 14px; }
.prevc-cfg-bloco { margin: 0; display: flex; flex-direction: column; gap: 10px; }
.prevc-cfg-bloco .prevc-sec-tit { margin-bottom: 0; }
.prevc-cfg-bloco.prevc-alterado { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent-soft-border), var(--shadow-sm); }
.prevc-cfg-bloco select, .prevc-motivo-campo textarea { width: 100%; }
.prevc-soma { font-size: 1rem; margin: 0; font-variant-numeric: tabular-nums; }
.prevc-soma .prevc-prev { font-size: 1.15rem; }

/* === PLS HIS — importação === */
/* Prévia da PLS formato HIS (Medição Global + PLS por disciplina) e a confirmação de "outro empreendimento". Só tokens do DS. */
.pls-alerta.erro { border-left-color: var(--danger); background: var(--danger-bg); color: var(--danger-fg); }
.pls-his-formato { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 10px; margin: 0 0 12px; font-size: .86rem; }
.pls-his-preview .pls-meta span { white-space: normal; overflow-wrap: anywhere; }   /* proponente/endereço longos quebram a 375 px */
.pls-his-lista { margin: 6px 0 2px; padding-left: 18px; }
.pls-his-lista li { margin: 3px 0; }
.pls-his-confirma { display: flex; align-items: flex-start; gap: 8px; margin-top: 8px; font-weight: 600; cursor: pointer; color: var(--text-primary); }
.pls-his-confirma input { flex: none; width: auto; min-width: 0; margin: 3px 0 0; padding: 0; accent-color: var(--accent); }
.pls-his-h3 { font-size: .98rem; margin: 16px 0 6px; color: var(--text-primary); }
.pls-his-h4 { font-size: .86rem; margin: 12px 0 4px; color: var(--text-secondary); }
.pls-his-disc { min-width: 1120px; }   /* 11 colunas (incidência e participação com os nomes da Medição Global) */
.pls-his-disc th, .pls-his-conf-tab th { white-space: nowrap; }
.pls-his-num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.pls-his-sub { font-size: .76rem; color: var(--text-muted); font-weight: 400; margin-top: 2px; }
.pls-his-tot td { background: var(--surface-2); font-weight: 700; border-top: 2px solid var(--border-strong); }
.pls-his-ok { color: var(--success); font-weight: 800; }
.pls-his-sem { color: var(--text-muted); }
.pls-his-dif { font-size: .74rem; color: var(--warning-fg); background: var(--warning-bg); border-radius: var(--radius-sm); padding: 1px 6px; margin-top: 3px; white-space: nowrap; }
.pls-his-dif-tag { color: var(--warning-fg); font-weight: 800; }
.pls-his-nota { font-size: .8rem; line-height: 1.5; margin: 6px 0 10px; }
.pls-his-conf summary { font-weight: 700; }
.pls-his-conf-ok { margin-top: 10px; }
.pls-his-conf-ok summary { font-size: .84rem; color: var(--text-secondary); }
.pls-his-conf-tab { min-width: 760px; }
.pls-his-conf-tab td { font-size: .82rem; padding: 7px 10px; }
.pls-his-cel { font-family: var(--font-mono); font-size: .76rem; color: var(--text-secondary); overflow-wrap: anywhere; }
.pls-his-st { display: inline-block; font-size: .72rem; font-weight: 700; padding: 1px 8px; border-radius: var(--radius-pill); white-space: nowrap; }
.pls-his-st.ok { background: var(--success-bg); color: var(--success-fg); }
.pls-his-st.div { background: var(--warning-bg); color: var(--warning-fg); }
.pls-his-st.arr { background: var(--info-bg); color: var(--info-fg); }
.pls-his-alertas { margin: 12px 0 4px; }
.pls-his-alertas-tit { font-size: .78rem; font-weight: 800; text-transform: uppercase; letter-spacing: .3px; color: var(--text-secondary); }
.pls-his-hist-tag { display: inline-block; margin-top: 3px; font-size: .68rem; font-weight: 700; padding: 1px 7px; border-radius: var(--radius-pill); background: var(--accent-soft); color: var(--accent-strong); border: 1px solid var(--accent-soft-border); }
.pls-his-kpi-rs { flex: 1.6; min-width: 150px; }
.pls-his-kpi-rs .n { font-size: 1.05rem; overflow-wrap: anywhere; }
@media (max-width: 520px) {
  .pls-his-formato { font-size: .8rem; }
  .pls-his-confirma { font-size: .88rem; }
}

/* === PLS HIS — mapa === */
/* Mapa ESPACIAL da PLS HIS (bloco → pavimento → apto), desenhado pelo eixo da própria PLS
   (pls-mapa-ui.js › _plsHis*; prefixo .pls-hm-): um cartão por bloco com a grade PAVIMENTOS (de cima) × APTOS.
   Reusa .mapa/.quadra/.lote (styles.css) e os estados .pls-st-* do mapa do PQ7. Só tokens do DS.
   Celular: a PÁGINA nunca rola na horizontal — se faltar largura, só a grade do bloco rola. */
.pls-mapa-ctrls .pls-hm-loc-field { flex-basis: 100%; }
.pls-hm-loc-msg { font-size: .8rem; color: var(--text-muted); min-height: 1.1em; }
.pls-hm-kpi-niveis { flex-basis: 100%; font-size: .82rem; color: var(--text-secondary); }
.pls-hm-serv, .pls-hm-semloc { margin-top: 10px; }
.pls-hm-serv-tit { font-size: .95rem; color: var(--text-primary); overflow-wrap: anywhere; }
.pls-hm-serv-cont { margin-top: 4px; font-size: .88rem; color: var(--text-secondary); }
.pls-hm-n-nesta { color: var(--accent-strong); }
.pls-hm-semloc-txt { margin: 8px 0 0; font-size: .88rem; }
.pls-hm-ind { display: flex; flex-wrap: wrap; gap: 6px 18px; margin-top: 8px; font-size: .9rem; font-variant-numeric: tabular-nums; }
.pls-hm-etapas { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }

.pls-hm-mapa.mapa { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 330px), 1fr)); gap: 14px; margin-top: 10px; align-items: start; }
.pls-hm-bloco { min-width: 0; }
.pls-hm-bloco .quadra-head { margin-bottom: 10px; }
/* "Achado" pelo Localizar = contorno TRACEJADO + 📍 — nunca igual ao foco do teclado (contorno cheio + anel). */
.pls-hm-bloco.pls-hm-achado { outline: 3px dashed var(--accent-strong); outline-offset: 2px; }
.pls-hm-grade-scroll { overflow-x: auto; max-width: 100%; -webkit-overflow-scrolling: touch; }
/* padding = folga p/ o contorno (foco/achado: 3px + 1px) não ser cortado pela rolagem da grade */
.pls-hm-grade { display: flex; flex-direction: column; gap: 6px; min-width: min-content; padding: 4px; }
.pls-hm-pav { display: grid; grid-template-columns: 62px minmax(0, 1fr); gap: 6px; align-items: stretch; }
.pls-hm-pav-lbl { display: flex; flex-direction: column; justify-content: center; gap: 2px; padding: 4px 6px; line-height: 1.1;
  border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--surface);
  font-size: .66rem; font-weight: 800; letter-spacing: .4px; text-transform: uppercase; color: var(--text-secondary); }
.pls-hm-pav-med { font-size: .66rem; letter-spacing: 0; color: var(--text-muted); }
.pls-hm-pav-lbl.pls-st-nesta { background: var(--accent-soft); border-color: var(--accent); color: var(--accent-strong); }
.pls-hm-pav-lbl.pls-st-antes { background: var(--success-bg); border-color: var(--success); color: var(--success-fg); }
.pls-hm-pav-lbl.pls-st-depois { background: var(--info-bg); border-color: var(--info); color: var(--info-fg); }
.pls-hm-pav-lbl.pls-st-nesta .pls-hm-pav-med, .pls-hm-pav-lbl.pls-st-antes .pls-hm-pav-med, .pls-hm-pav-lbl.pls-st-depois .pls-hm-pav-med { color: inherit; }
.pls-hm-pav.pls-hm-achado .pls-hm-pav-lbl { outline: 3px dashed var(--accent-strong); outline-offset: 1px; }
.pls-hm-aptos { display: grid; grid-template-columns: repeat(var(--pls-hm-cols, 4), minmax(52px, 84px)); gap: 6px; }
.pls-hm-aptos .lote { min-height: 52px; padding: 7px 4px; }
.lote.pls-hm-achado { outline: 3px dashed var(--accent-strong); outline-offset: 1px; }
.lote.pls-hm-achado::before { content: '📍'; position: absolute; top: 2px; left: 3px; font-size: .6rem; line-height: 1; pointer-events: none; }
.lote.pls-hm-achado:focus-visible { outline-style: solid; outline-color: var(--focus-color); }
.pls-hm-st { font-weight: 700; padding: 1px 8px; border-radius: var(--radius-pill); border: 1px solid var(--border); background: var(--surface-2); color: var(--text-secondary); }
.pls-hm-st.pls-st-nesta { background: var(--accent-soft); border-color: var(--accent); color: var(--accent-strong); }
.pls-hm-st.pls-st-antes { background: var(--success-bg); border-color: var(--success); color: var(--success-fg); }
.pls-hm-st.pls-st-depois { background: var(--info-bg); border-color: var(--info); color: var(--info-fg); }
.pls-hm-onde { display: inline-block; margin-left: 4px; font-size: .7rem; font-weight: 700; color: var(--text-muted); text-transform: uppercase; letter-spacing: .3px; }
.pls-hm-casado { font-size: .84rem; }
.pls-hm-sem-det .btn { margin-top: 8px; }
@media (max-width: 720px) {
  .pls-hm-pav { grid-template-columns: 54px minmax(0, 1fr); }
  .pls-hm-aptos { grid-template-columns: repeat(var(--pls-hm-cols, 4), minmax(48px, 1fr)); }
}

/* ---------------- CALENDÁRIO DE SERVIÇOS (calendario-ui.js) ----------------
   Cor + ícone + rótulo em todo evento (nunca só cor). Início = info (teal) · Término =
   perigo · Em execução = alerta · Concluído = sucesso · Marco = dourado (acento). */
.cal-ev-inicio { --cal-cor: var(--info); --cal-bg: var(--info-bg); --cal-fg: var(--info-fg); }
.cal-ev-termino { --cal-cor: var(--danger); --cal-bg: var(--surface-2); --cal-fg: var(--danger-fg); }
.cal-ev-termino.cal-ev-atr { --cal-bg: var(--danger-bg); }
.cal-ev-execucao { --cal-cor: var(--warning); --cal-bg: var(--warning-bg); --cal-fg: var(--warning-fg); }
.cal-ev-conclusao { --cal-cor: var(--success); --cal-bg: var(--success-bg); --cal-fg: var(--success-fg); }
.cal-ev-marco { --cal-cor: var(--accent); --cal-bg: var(--accent-soft); --cal-fg: var(--accent-strong); }

/* barra da tela (.plan-barra): [botão do menu] [‹ Hoje › período] ··· [Mês|Semana|Dia] à direita */
.cal-barra { gap: 8px 12px; margin-bottom: 10px; }
.cal-nav { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.cal-periodo { font-size: 1.1rem; margin: 0 0 0 6px; color: var(--text-primary); }
.cal-periodo::first-letter { text-transform: uppercase; }
.cal-vistas { display: flex; gap: 6px; margin-left: auto; }

.cal-filtros-wrap { display: grid; gap: 8px; margin-bottom: 12px; }
.cal-filtros-wrap .field { margin-bottom: 0; }
.cal-filtros { padding: 10px 14px; }
.cal-filtros summary { cursor: pointer; font-weight: 700; color: var(--text-secondary); }
.cal-nfiltros { display: inline-block; margin-left: 6px; font-size: .74rem; padding: 1px 8px; border-radius: var(--radius-pill);
  background: var(--accent-soft); color: var(--accent-strong); border: 1px solid var(--accent-soft-border); }
.cal-filtros-grade { display: grid; grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 10px 12px; margin-top: 10px; align-items: end; }
.cal-filtros-grade label { display: grid; gap: 4px; font-size: .8rem; color: var(--text-secondary); }
.cal-filtros-grade .cal-chk { display: inline-flex; }
.cal-filtros-nota { font-size: .78rem; margin: 8px 0 0; }

.cal-kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.cal-kpi { background: var(--surface); border: 1px solid var(--border); border-left: 4px solid var(--cal-cor, var(--border));
  border-radius: var(--radius-md); padding: 10px 12px; box-shadow: var(--shadow-sm); }
.cal-k-ini { --cal-cor: var(--info); }
.cal-k-fim { --cal-cor: var(--danger); }
.cal-k-exe { --cal-cor: var(--warning); }
.cal-k-atr { --cal-cor: var(--danger); background: var(--danger-bg); }
.cal-kpi-rot { font-size: .76rem; color: var(--text-secondary); text-transform: uppercase; letter-spacing: .3px; font-weight: 700; }
.cal-kpi-val { font-size: 1.6rem; font-weight: 800; color: var(--text-primary); line-height: 1.2; }
.cal-kpi-sub { font-size: .74rem; color: var(--text-muted); }
.cal-kpi-nota { font-size: .8rem; margin: 6px 0 10px; }

.cal-legenda { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 12px 0 4px; font-size: .78rem; }
.cal-leg { color: var(--cal-fg); font-weight: 600; }

/* Mês */
.cal-mes { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); border: 1px solid var(--border);
  border-radius: var(--radius-md); overflow: hidden; background: var(--border); gap: 1px; }
.cal-dsem { background: var(--surface-2); color: var(--text-secondary); font-size: .76rem; font-weight: 700; text-align: center; padding: 6px 2px; }
.cal-cel { background: var(--surface); min-height: 112px; padding: 4px; display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.cal-cel.cal-fora { background: var(--surface-2); }
.cal-cel.cal-fora .cal-cel-num { color: var(--text-muted); }
.cal-cel-num { align-self: flex-start; border: 0; background: transparent; cursor: pointer; font-weight: 700; font-size: .82rem;
  color: var(--text-primary); min-width: 24px; height: 24px; border-radius: var(--radius-pill); padding: 0 6px; }
.cal-cel-num:hover { background: var(--surface-3); }
.cal-hoje .cal-cel-num, .cal-sem-col.cal-hoje .cal-sem-cab { background: var(--accent); color: var(--accent-contrast); }
.cal-cel-evs { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.cal-ev { display: block; width: 100%; text-align: left; border: 0; border-left: 3px solid var(--cal-cor); background: var(--cal-bg);
  color: var(--text-primary); font-size: .72rem; line-height: 1.25; padding: 2px 4px; border-radius: 4px; cursor: pointer;
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cal-ev:hover, .cal-card:hover { outline: 1px solid var(--cal-cor); }
.cal-ev-ic, .cal-ev-rot { color: var(--cal-fg); font-weight: 700; }
.cal-mais { border: 0; background: transparent; color: var(--accent-strong); font-size: .72rem; font-weight: 700; text-align: left; cursor: pointer; padding: 1px 4px; }
.cal-compacto { display: none; }

/* Semana */
.cal-sem { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 8px; }
.cal-sem-col { display: flex; flex-direction: column; gap: 6px; min-width: 0; background: var(--surface-2); border: 1px solid var(--border);
  border-radius: var(--radius-md); padding: 6px; }
.cal-sem-cab { border: 0; background: var(--surface); border-radius: var(--radius-sm); padding: 6px; cursor: pointer; font-weight: 700; color: var(--text-primary); }
.cal-sem-dsem { text-transform: uppercase; font-size: .74rem; }
.cal-sem-vazio { font-size: .76rem; margin: 2px 4px; }
.cal-sem-exe { border: 1px dashed var(--cal-cor); background: var(--cal-bg); color: var(--cal-fg); font-weight: 700; font-size: .76rem;
  border-radius: var(--radius-sm); padding: 5px; cursor: pointer; }

/* Cartão de evento (semana/dia) */
.cal-card { display: grid; gap: 3px; width: 100%; text-align: left; border: 1px solid var(--border); border-left: 4px solid var(--cal-cor);
  background: var(--surface); color: var(--text-primary); border-radius: var(--radius-sm); padding: 7px 8px; cursor: pointer; min-width: 0; }
.cal-ev-atr.cal-card { background: var(--danger-bg); }
.cal-card-top { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 4px; }
.cal-tag { color: var(--cal-fg); font-weight: 700; font-size: .74rem; }
.cal-card-nome { font-weight: 700; font-size: .84rem; overflow-wrap: anywhere; }
.cal-card-meta { font-size: .74rem; color: var(--text-secondary); overflow-wrap: anywhere; }
.cal-card .cron-sit { font-size: .68rem; padding: 1px 7px; }
.cal-resumo-tag { font-size: .66rem; font-weight: 700; color: var(--text-muted); border: 1px solid var(--border); border-radius: var(--radius-pill); padding: 0 6px; }

/* Dia */
.cal-dia { display: grid; gap: 12px; }
.cal-dia-bloco { border-left: 4px solid var(--cal-cor); }
.cal-dia-bloco h3 { font-size: 1rem; margin: 0 0 8px; color: var(--cal-fg); }
.cal-dia-n { display: inline-block; font-size: .76rem; background: var(--cal-bg); color: var(--cal-fg); border-radius: var(--radius-pill); padding: 1px 8px; margin-left: 4px; }
.cal-dia-lista { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 8px; }

/* Detalhe (modal) */
.cal-det-nome { font-weight: 800; font-size: 1.05rem; margin-bottom: 8px; color: var(--text-primary); }
.cal-det-sec { font-size: .8rem; text-transform: uppercase; letter-spacing: .3px; color: var(--text-secondary); margin: 14px 0 6px;
  padding-top: 10px; border-top: 1px solid var(--border); }
.cal-det-lin { display: grid; grid-template-columns: minmax(120px, 38%) 1fr; gap: 8px; padding: 3px 0; font-size: .88rem; }
.cal-det-rot { color: var(--text-secondary); }
.cal-det-val { color: var(--text-primary); overflow-wrap: anywhere; }
.cal-det-acoes { margin-top: 14px; gap: 8px; display: flex; flex-wrap: wrap; }

/* Linha destacada no Cronograma ao vir do Calendário ("Abrir no cronograma") */
.cron-tabela tr.cron-linha-destaque td { background: var(--accent-soft); box-shadow: inset 0 1px 0 var(--accent), inset 0 -1px 0 var(--accent); }

@media (max-width: 720px) {
  .cal-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cal-cel { min-height: 64px; padding: 2px; }
  .cal-cel-evs { display: none; }
  .cal-compacto { display: flex; flex-wrap: wrap; gap: 1px 4px; border: 0; background: transparent; padding: 0 2px; cursor: pointer;
    font-size: .68rem; font-weight: 700; text-align: left; }
  .cal-compacto span { color: var(--cal-fg); }
  .cal-sem { grid-template-columns: 1fr; }
  .cal-dia-lista { grid-template-columns: 1fr; }
  .cal-det-lin { grid-template-columns: 1fr; gap: 0; }
}

/* ---------- Cronograma › Conversão Tático × Estratégico (cronograma-conversao-ui.js) ---------- */
.conv-topo { display: flex; flex-direction: column; gap: 10px; }
.conv-linha1 { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px; }
.conv-seletor { display: inline-flex; gap: 2px; padding: 2px; border: 1px solid var(--border); border-radius: var(--radius-md);
  background: var(--seg-track); box-shadow: var(--well); }
.conv-seletor .btn { border-color: transparent; background: transparent; box-shadow: none; min-width: 128px; }
.conv-seletor .btn.primary, .conv-seletor .btn[aria-pressed="true"] { background: var(--seg-on); color: var(--text-primary); border-color: transparent;
  box-shadow: var(--seg-on-shadow), inset 0 -2px 0 var(--accent); }
.conv-selo { font-weight: 800; font-size: .76rem; letter-spacing: .6px; padding: 5px 12px; border-radius: var(--radius-pill);
  border: 1px solid var(--border-strong); background: var(--surface-2); color: var(--text-primary); }
.conv-selo-tatico { background: var(--accent-soft); border-color: var(--accent-soft-border); color: var(--accent-strong); }
.conv-versao { font-size: .86rem; }
.conv-acoes, .conv-export { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.conv-export { padding-top: 10px; border-top: 1px solid var(--border); }
.conv-export-tit { font-weight: 700; font-size: .86rem; color: var(--text-secondary); }
.conv-export-nota { margin: 0; font-size: .8rem; }
.conv-em-obra { font-size: .72rem; font-weight: 700; color: var(--warning-fg); background: var(--warning-bg); border-radius: var(--radius-pill); padding: 2px 10px; }
.conv-kpis { margin: 12px 0; }
.conv-eap tr.conv-g1 td { font-weight: 700; background: var(--surface-2); }
.conv-eap tr.conv-g2 td:nth-child(2) { padding-left: 26px; }
.conv-passos { margin: 8px 0 8px 20px; padding: 0; line-height: 1.6; }

/* pré-validação do Tático (Etapa 3) */
.conv-pre-cab { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-start; gap: 10px 16px; }
.conv-corte { display: flex; flex-direction: column; gap: 4px; font-size: .82rem; color: var(--text-secondary); font-weight: 700; }
.conv-sub { font-weight: 400; font-size: .8rem; margin-left: 6px; }
.conv-pre-acoes { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 8px; margin-top: 10px; }
/* conversão da EAP + exportação do Tático (Etapa 5) */
.conv-eap-resumo { font-size: .88rem; color: var(--text-secondary); line-height: 1.5; padding: 8px 12px; border-radius: 8px; background: var(--surface-2); }
.conv-exp-bloq ul { margin: 6px 0 0 18px; padding: 0; font-size: .86rem; line-height: 1.5; }
/* reprogramação (Etapa 6) */
.conv-ver { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 4px 0 10px; font-size: .86rem; color: var(--text-secondary); }
.conv-rep-params { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 10px 16px; margin-top: 8px; }
.conv-rep-params .field { max-width: 120px; }
.conv-tol { display: flex; flex-direction: column; gap: 4px; font-size: .8rem; color: var(--text-secondary); }
.conv-rep-fim { margin: 10px 0 0; font-size: .95rem; }
.conv-rep-lista { margin: 6px 0 0 18px; padding: 0; font-size: .86rem; line-height: 1.5; }
.conv-alerta { border-top: 1px solid var(--border); padding: 8px 0; }
.conv-alerta summary { cursor: pointer; font-size: .9rem; }
.conv-fam .conv-sel-frentes { min-width: 110px; }
.conv-pav tr.conv-fora td { color: var(--text-muted); }
.conv-ord { white-space: nowrap; }
.conv-ord .btn { padding: 2px 8px; margin-left: 2px; }
.conv-macro { margin-top: 10px; border: 1px solid var(--border); border-radius: var(--radius-md); padding: 6px 10px; background: var(--surface); }
.conv-macro > summary { cursor: pointer; padding: 4px 0; }
.conv-fam .field { width: auto; font-size: .82rem; padding: 4px 6px; }
.conv-fam .conv-sel-classe { min-width: 150px; }
.conv-fam .conv-sel-macro { min-width: 200px; }
.conv-fam .conv-sel-dir { min-width: 100px; }
.conv-fam td:first-child { min-width: 240px; }   /* nome da família legível (a tabela rola dentro da caixa) */
.conv-pavs { white-space: nowrap; }
.conv-pavchip { display: inline-block; font-size: .72rem; font-weight: 700; padding: 1px 6px; margin: 1px 2px 1px 0; border-radius: var(--radius-pill);
  border: 1px solid var(--border); color: var(--text-muted); }
.conv-pavchip.on { border-color: var(--success); color: var(--success-fg); background: var(--success-bg); }
.conv-chip { display: inline-block; font-size: .72rem; font-weight: 700; padding: 2px 8px; border-radius: var(--radius-pill); background: var(--surface-2); color: var(--text-secondary); white-space: nowrap; }
.conv-chip.conv-chip-ok { background: var(--success-bg); color: var(--success-fg); }
.conv-chip.conv-chip-lote { background: var(--warning-bg); color: var(--warning-fg); }
/* Tático — importar o editado no Project: destaque do que muda fora da Linha de Balanço (D6) */
.conv-chip.conv-chip-fora { background: var(--warning-bg); color: var(--warning-fg); }
.conv-imp-datas td:nth-child(n+2) { white-space: nowrap; }
/* Tático — abas, matriz Serviço × Pavimento e Linha de Balanço (Etapa 4) */
.conv-abas { flex-wrap: wrap; margin: 4px 0 12px; }
.conv-mx-pav { text-align: center; white-space: nowrap; }
.conv-mx-cel { text-align: center; white-space: nowrap; }
.conv-mx-cel .cron-sit { font-size: .72rem; }
.conv-mx-leg { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: .8rem; margin: 8px 0; }
.conv-lb-topo { display: flex; flex-wrap: wrap; justify-content: space-between; align-items: center; gap: 10px; }
.conv-lb-filtro { display: flex; align-items: center; gap: 8px; font-size: .86rem; font-weight: 700; color: var(--text-secondary); }
.conv-lb-ind { display: flex; flex-wrap: wrap; gap: 6px; }
.conv-lb-tit { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.conv-lb-cor { width: 14px; height: 14px; border-radius: 4px; background: var(--cor); flex: 0 0 auto; }
.conv-lb-wrap { overflow-x: auto; }
.conv-lb-svg { display: block; width: 100%; min-width: 720px; height: auto; }
.conv-lb-svg .conv-lb-grade { stroke: var(--border); stroke-width: 1; }
.conv-lb-svg .conv-lb-mes { stroke: var(--border); stroke-width: 1; stroke-dasharray: 2 4; }
.conv-lb-svg .conv-lb-corte { stroke: var(--text-secondary); stroke-width: 1.5; stroke-dasharray: 5 4; }
.conv-lb-svg text { font-family: var(--font-sans); }
.conv-lb-svg .conv-lb-eixo { fill: var(--text-muted); font-size: 11px; }
.conv-lb-svg .conv-lb-pav { fill: var(--text-secondary); font-size: 11px; font-weight: 700; }
.conv-lb-svg .conv-lb-rot { fill: var(--text-secondary); font-size: 10px; pointer-events: none; }
.conv-lb-svg .conv-lb-rot.sel { fill: var(--text-primary); font-weight: 700; }
.conv-lb-fam { cursor: pointer; }
.conv-lb-fam .faixa { fill: var(--cor); fill-opacity: .14; stroke: none; }
.conv-lb-fam .barra { fill: var(--cor); fill-opacity: .55; stroke: var(--surface); stroke-width: 1; }
.conv-lb-fam .ini { fill: none; stroke: var(--cor); stroke-width: 2; stroke-linejoin: round; }
.conv-lb-fam .alvo { fill: none; stroke: transparent; stroke-width: 12; pointer-events: stroke; }
.conv-lb-fam:hover .faixa, .conv-lb-fam:focus .faixa, .conv-lb-fam.sel .faixa { fill-opacity: .32; }
.conv-lb-fam.sel .ini { stroke-width: 3; }
.conv-lb-svg.tem-sel .conv-lb-fam:not(.sel) { opacity: .25; }
.conv-lb-leg { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 8px; }
.conv-lb-legbtn { border: 1px solid var(--border); background: var(--surface-2); color: var(--text-secondary); border-radius: var(--radius-pill);
  padding: 3px 10px; font-size: .78rem; cursor: pointer; }
.conv-lb-legbtn.sel { border-color: var(--cor); color: var(--text-primary); font-weight: 700; box-shadow: inset 0 0 0 1px var(--cor); }
.conv-lb-det { margin-top: 8px; }
@media (max-width: 600px) {
  .conv-seletor { width: 100%; }
  .conv-seletor .btn { flex: 1; min-width: 0; }
}

/* =======================================================================
   LINHA DE BALANÇO (Cronograma › vista "Linha de Balanço") — cronograma-lob-ui.js / cronograma-lob-canvas.js.
   O gráfico é Canvas (cores lidas dos tokens --serie-* e semânticos); aqui só o casco: barra compacta, filtros,
   área do gráfico (a maior parte da tela — §40), tooltip, legenda recolhível, painel lateral (drawer — §41),
   menu de contexto e o modo TELA CHEIA (§4: cobre o app inteiro, abaixo dos modais). Só tokens.
   ======================================================================= */
.lob { display: flex; flex-direction: column; gap: 8px; }
.lob-barra { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
.lob-barra2 { padding-top: 6px; border-top: 1px solid var(--border); }
.lob-tit { font-weight: 800; color: var(--text-primary); margin-right: 4px; display: inline-flex; align-items: center; gap: 8px; }
.lob-selo { font-size: .62rem; padding: 3px 8px; }
/* Grupo de alternância = TRILHO (poço) com as opções soltas dentro; a escolhida é a placa neutra
   elevada com a linha dourada embaixo (o dourado marca, não preenche — o CTA continua sendo o único
   botão dourado). Dentro do trilho ".primary" = escolhida, com ou sem aria-pressed. */
.lob-seg { display: inline-flex; align-items: center; gap: 2px; padding: 2px; border: 1px solid var(--border); border-radius: var(--radius-sm);
  background: var(--seg-track); box-shadow: var(--well); }
.lob-seg .btn { border-color: transparent; background: transparent; box-shadow: none; color: var(--text-secondary); }
.lob-seg .btn:hover { color: var(--text-primary); background: var(--surface-hover); filter: none; }
.lob-seg .btn.primary, .lob-seg .btn[aria-pressed="true"] { background: var(--seg-on); border-color: transparent; color: var(--text-primary); font-weight: 700;
  box-shadow: var(--seg-on-shadow), inset 0 -2px 0 var(--accent); }
/* "⚲ Filtros (n)": filtro ligado = a mesma placa marcada (antes: preenchimento dourado igual ao CTA). */
.lob-dd-filtros > summary.btn.primary { background: var(--seg-on); color: var(--text-primary); border-color: var(--border-strong);
  box-shadow: var(--seg-on-shadow), inset 0 -2px 0 var(--accent); }
.lob-zoom { align-items: center; }
.lob-zoom-pct { min-width: 46px; text-align: center; font-size: .8rem; font-variant-numeric: tabular-nums; color: var(--text-secondary); }
.lob-busca { width: 220px; margin-bottom: 0; }
.lob-edicao[aria-pressed="true"] { box-shadow: var(--seg-on-shadow), inset 0 -2px 0 var(--accent), 0 0 0 2px var(--accent-soft-border); }
.lob-badge { background: var(--warning); color: var(--warning-fg, var(--text-primary)); font-size: .68rem; padding: 1px 6px; margin-left: 2px; }
.lob-filtros { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; }
/* barra compacta (REG-10): os controles menos usados num "⋯ Mais" — mais altura para o gráfico */
.lob-barra-compacta .lob-selo { display: none; }
.lob-barra-compacta .lob-busca { width: 180px; }
/* "⋯ Mais" aberto vira uma faixa a mais da barra (em linha): nunca passa da borda da tela, perto de qualquer canto */
.lob-dd-mais[open] { flex-basis: 100%; }
.lob-dd-lista.lob-mais-painel { position: static; width: auto; max-height: none; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 6px; }
.lob-mais-painel .lob-camadas { display: flex; flex-wrap: wrap; gap: 4px 10px; }
/* celular: título + indicadores + [Tela cheia] [⚙ Controles] [busca]; o painel de controles abre por cima do gráfico */
.lob-barra-movel { position: relative; }
.lob-aviso-busca { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
.lob-busca-sl:empty { display: none; }
.lob-movel-linha { display: flex; align-items: center; gap: 6px; width: 100%; }
.lob-movel-linha .lob-busca { flex: 1; min-width: 0; width: auto; }
/* o painel ancora na BARRA (não no botão): ocupa a largura dela e nunca passa da tela */
.lob-barra-movel .lob-dd-ctrl { position: static; }
.lob-barra-movel .lob-ctrl-painel { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; left: 0; right: 0; width: auto; max-height: 70vh; overflow: auto; }
.lob-ctrl-painel .lob-dd-lista { position: static; width: 100%; max-width: 100%; }
.lob-ctrl-painel .lob-filtros { flex-direction: column; align-items: flex-start; }
@media (max-width: 720px) {
  .lob-barra-movel .lob-tit { font-size: .9rem; }
  .lob-barra-compacta .lob-tit { font-size: .9rem; }
  .lob-barra-compacta .lob-busca { width: 100%; order: 10; }
  .lob-filtros-compacta .plan-barra-dir { margin-left: 0; }
}
.lob-filtros .field { margin-bottom: 0; width: auto; }
.lob-aviso { font-size: .84rem; padding: 6px 10px; border-radius: var(--radius-sm); background: var(--surface-2); border-left: 3px solid var(--border-strong); display: flex; flex-wrap: wrap; gap: 8px; align-items: center; }
.lob-aviso-erro { border-left-color: var(--danger); }
/* Aviso de erro com "↻ Tentar de novo": o botão vem primeiro no HTML (fica à vista no celular); aqui o texto corre à
   esquerda e a ação encosta à direita — antes o botão ficava sozinho numa linha acima da mensagem. */
.lob-aviso.lob-aviso-erro { display: block; }
.lob-aviso.lob-aviso-erro > .btn { float: right; margin: -3px 0 4px 12px; }
.lob-aviso.lob-aviso-erro::after { content: ""; display: block; clear: both; }
.lob-aviso-escolha { border-left-color: var(--accent); background: var(--accent-soft); }
/* lista de serviços (multiseleção) */
.lob-dd { position: relative; }
.lob-dd > summary { list-style: none; cursor: pointer; }
.lob-dd > summary::-webkit-details-marker { display: none; }
.lob-dd-lista { position: absolute; z-index: 30; top: calc(100% + 4px); left: 0; width: 320px; max-height: 360px; overflow: auto; padding: 8px;
  background: var(--surface-elevated); border: 1px solid var(--border-strong); border-radius: var(--radius-md); box-shadow: var(--edge-light), var(--elev-2); display: flex; flex-direction: column; gap: 2px; }
.lob-dd-item { display: flex; align-items: center; gap: 6px; font-size: .84rem; padding: 3px 4px; border-radius: 6px; cursor: pointer; }
.lob-dd-item:hover { background: var(--surface-2); }
.lob-dd-item input[type=checkbox], .lob-cfg-item input[type=checkbox], .lob-est input[type=checkbox] { width: auto; flex: none; margin: 0; }
.lob-dd-item { justify-content: flex-start; text-align: left; }
.lob-dd-item > span:first-of-type { flex: 1; min-width: 0; }
/* "Filtros ▾": estrutura, período, situação e a lista de serviços num painel só */
.lob-dd-filtros .lob-filtros-painel { width: 360px; max-height: 70vh; gap: 8px; }
.lob-dd-filtros .lob-filtros-painel > .field, .lob-dd-filtros .lob-filtros-painel > select { width: 100%; }
.lob-dd-sec { font-weight: 700; font-size: .78rem; color: var(--text-secondary); display: flex; align-items: center; gap: 6px; margin-top: 4px; }
.lob-dd-servs { max-height: 300px; overflow: auto; display: flex; flex-direction: column; gap: 2px; border-top: 1px solid var(--border); padding-top: 4px; }
.lob-chk { white-space: nowrap; }
/* amostra de cor/traço (a mesma do gráfico) */
.lob-amostra { display: inline-block; width: 22px; height: 0; border-top: 3px solid var(--lob-cor, var(--text-muted)); vertical-align: middle; flex: none; }
.lob-amostra.lob-traco-1 { border-top-style: dashed; }
.lob-amostra.lob-traco-2 { border-top-style: dotted; }
/* corpo: gráfico + painel */
.lob-corpo { display: flex; gap: 10px; align-items: stretch; min-height: 0; }
/* Moldura do gráfico = placa (aresta clara + sombra de contato); o Canvas desenha o fundo com os tokens. */
.lob-area { position: relative; flex: 1; min-width: 0; border: 1px solid var(--border); border-radius: var(--radius-md); overflow: hidden; background: var(--surface);
  box-shadow: var(--edge-light), var(--elev-1); }
.lob-canvas-host { position: relative; width: 100%; height: max(420px, calc(100vh - 330px)); touch-action: none; }
.lob-canvas { display: block; outline: none; }
.lob-canvas:focus-visible { box-shadow: inset 0 0 0 2px var(--accent); }
/* Dica do gráfico: placa flutuante (degrau elevado) com a COTA no topo — o segmento dourado curto da
   identidade, como a etiqueta de uma medida no desenho. */
.lob-tip { position: absolute; z-index: 20; max-width: 300px; pointer-events: none; padding: 9px 11px 8px; font-size: .78rem; line-height: 1.45;
  background: linear-gradient(var(--cota), var(--cota)) 10px 0 / 22px var(--cota-w) no-repeat, var(--surface-elevated);
  color: var(--text-primary); border: 1px solid var(--border-strong); border-radius: var(--shape-sm); corner-shape: var(--shape-corners);
  box-shadow: var(--edge-light), var(--elev-2); }
.lob-tip-serv { display: flex; align-items: center; gap: 6px; margin-bottom: 2px; }
/* Legenda = painel flutuante sobre o gráfico: degrau elevado, forma média da assinatura e sombra que o
   descola do Canvas (antes lia como mais um retângulo do gráfico). */
.lob-legenda { position: absolute; z-index: 10; right: 10px; bottom: 10px; max-width: min(360px, 60%); max-height: 55%; display: flex; flex-direction: column;
  background: var(--plate-sheen), var(--surface-elevated); border: 1px solid var(--border-strong); border-radius: var(--shape-md); corner-shape: var(--shape-corners);
  box-shadow: var(--edge-light), var(--elev-2); font-size: .76rem; overflow: hidden; }
.lob-leg-cab { display: flex; align-items: center; justify-content: space-between; gap: 6px; padding: 4px 4px 4px 10px; border-bottom: 1px solid var(--border);
  font-family: var(--font-display); letter-spacing: .02em; }
.lob-leg-lista { overflow: auto; padding: 4px; display: flex; flex-direction: column; }
.lob-leg-item { display: flex; align-items: center; gap: 6px; text-align: left; background: none; border: 0; color: var(--text-secondary); padding: 2px 6px; border-radius: 6px; cursor: pointer; font: inherit; }
.lob-leg-item:hover { background: var(--surface-2); color: var(--text-primary); }
.lob-leg-off { opacity: .5; }
/* caminho crítico: selo da atividade sem folga (painel) e o botão ligado em vermelho */
.lob-badge-crit { background: var(--danger-bg); color: var(--danger-fg); border-color: var(--danger); }
.lob-crit-btn.primary { background: var(--danger); border-color: var(--danger); color: var(--surface); box-shadow: var(--fill-edge); }
.lob-crit-btn.primary:hover { background: var(--danger); filter: brightness(1.06); }
.lob-leg-rodape { padding: 4px 10px; border-top: 1px solid var(--border); }
.lob-leg-busca { padding: 4px 10px 6px; }
.lob-leg-busca .field { width: 100%; min-height: 30px; padding: 4px 8px; font-size: .85rem; }
.lob-leg-nada { padding: 6px 10px; font-size: .85rem; }
.lob-leg-item[hidden], .lob-leg-nada[hidden], .lob-leg-grupo[hidden] { display: none; }
/* legenda em níveis (como a EAP): recuo por nível, seta que gira ao recolher; buscando, tudo que achou fica aberto */
.lob-leg-acoes { display: inline-flex; gap: 2px; }
.lob-leg-item, .lob-leg-gcab { padding-left: calc(6px + var(--lob-nivel, 0) * 14px); }
.lob-leg-item > span { min-width: 0; }
/* cabeçalho do nível = caixa (marca o nível inteiro) + botão (abre/recolhe) */
.lob-leg-gcab { display: flex; align-items: center; gap: 6px; padding-top: 2px; padding-bottom: 2px; padding-right: 4px; border-radius: 6px; }
.lob-leg-gcab:hover { background: var(--surface-2); }
.lob-leg-gbtn { flex: 1; min-width: 0; display: flex; align-items: center; gap: 6px; text-align: left; background: none; border: 0; padding: 1px 2px; color: var(--text-primary);
  cursor: pointer; font: inherit; font-size: .8rem; font-weight: 600; letter-spacing: .01em; border-radius: 4px; }
.lob-leg-gbtn:focus-visible { outline: 2px solid var(--accent); outline-offset: -2px; }
.lob-leg-ck:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
/* caixas de seleção (comparar serviços): na cor institucional */
.lob-leg-ck { flex: none; width: 15px; height: 15px; margin: 0; accent-color: var(--accent); cursor: pointer; }
.lob-leg-sel { display: flex; align-items: center; justify-content: space-between; gap: 6px; min-height: 26px; padding: 0 6px 4px 10px; }
.lob-leg-sel .btn { padding: 2px 8px; }
.lob-leg-gnome { flex: 1; min-width: 0; }
.lob-leg-gn { flex: none; font-size: .72rem; font-weight: 500; color: var(--text-muted); background: var(--surface-2); border-radius: 999px; padding: 0 6px; }
.lob-leg-seta { flex: none; width: 10px; color: var(--accent); transition: transform .15s; }
.lob-leg-filhos { display: flex; flex-direction: column; }
.lob-leg-fechado > .lob-leg-filhos { display: none; }
.lob-leg-fechado > .lob-leg-gcab .lob-leg-seta { transform: rotate(-90deg); }
.lob-leg-buscando .lob-leg-fechado > .lob-leg-filhos { display: flex; }
.lob-leg-buscando .lob-leg-fechado > .lob-leg-gcab .lob-leg-seta { transform: none; }
/* lista pesquisável de predecessora / sucessora (painel da atividade) */
.lob-combo { position: relative; flex: 1 1 260px; min-width: 0; }
.lob-combo .field { width: 100%; }
.lob-combo-lista { position: absolute; left: 0; right: 0; top: 100%; z-index: 30; max-height: 280px; overflow-y: auto; margin-top: 2px; background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: var(--shadow-md); }
.lob-combo-lista[hidden] { display: none; }
.lob-combo-op { display: block; width: 100%; text-align: left; background: none; border: 0; border-bottom: 1px solid var(--surface-2); padding: 6px 8px; color: var(--text-primary); font: inherit; font-size: .85rem; cursor: pointer; }
.lob-combo-op:hover, .lob-combo-op:focus { background: var(--accent-soft); }
.lob-combo-mais { padding: 6px 8px; font-size: .8rem; }   /* o display do item anulava o hidden da busca */
.lob-leg-atr { color: var(--danger); }
.lob-leg-abrir { position: absolute; z-index: 10; right: 10px; bottom: 10px; }
/* visão POR BLOCOS (docs/SPEC-LOB-POR-BLOCOS.md D19): o Canvas da Geral com o eixo pavimento › blocos, sobre a mesma régua
   do tempo; a rolagem vertical é a barra do navegador (o Canvas fica parado no alto e um espaçador dá a altura) */
.lob .lob-canvas-host.lob-canvas-nativa { overflow-x: hidden; overflow-y: auto; overscroll-behavior: contain; }
.lob-canvas-nativa > .lob-canvas { position: sticky; top: 0; }
.lob-canvas-espaco { pointer-events: none; }
.lob-blocos-vazio { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 8px; height: max(420px, calc(100vh - 330px)); background: var(--surface-2); }
.lob-ext-tag { font-size: .72rem; white-space: nowrap; color: var(--info-fg, var(--info)); }
.lob-al-bloco { display: block; font-size: .74rem; }
/* painel lateral (drawer) */
.lob-painel { position: relative; flex: 0 0 360px; max-width: 42%; max-height: max(420px, calc(100vh - 330px)); overflow: auto; padding: 12px 14px;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-md); box-shadow: var(--shadow-md); font-size: .86rem;
  scroll-margin-top: calc(var(--topbar-h) + 12px); }   /* aberto abaixo do gráfico (≤ 900 px): rolar até ele sem ficar sob o topo (LOB-01) */
.lob-painel-x { position: absolute; top: 6px; right: 6px; }
.lob-p-tit { font-size: 1rem; margin: 0 28px 8px 0; }
.lob-p-sub { margin: -4px 0 8px; font-size: .8rem; }
.lob-p-serv { display: flex; align-items: center; gap: 6px; }
.lob-p-nome { font-weight: 700; margin: 8px 0 4px; }
.lob-p-tags { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-bottom: 6px; }
.lob-p-nota { font-size: .8rem; color: var(--text-secondary); background: var(--surface-2); border-radius: 6px; padding: 6px 8px; margin: 6px 0; }
.lob-p-msg { font-size: .82rem; color: var(--danger-fg, var(--danger)); background: var(--danger-bg, var(--surface-2)); border-radius: 6px; padding: 6px 8px; margin: 6px 0; }
.lob-p-grade { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 10px; margin: 8px 0 4px; }
.lob-p-grade label { display: flex; flex-direction: column; gap: 2px; font-size: .76rem; color: var(--text-secondary); }
.lob-p-grade .field { margin-bottom: 0; }
.lob-p-rest { font-size: .76rem; margin-bottom: 4px; }
.lob-p-sec { font-weight: 700; font-size: .78rem; text-transform: uppercase; letter-spacing: .3px; color: var(--text-secondary); margin: 12px 0 4px; }
.lob-p-ativs { display: flex; flex-direction: column; gap: 2px; margin: 8px 0; }
.lob-p-rot { font-size: .76rem; color: var(--text-secondary); }
.lob-p-ativ { text-align: left; background: var(--surface-2); border: 1px solid transparent; border-radius: 6px; padding: 4px 8px; cursor: pointer; font: inherit; font-size: .8rem; color: var(--text-primary); }
.lob-p-ativ:hover, .lob-p-ativ-sel { border-color: var(--accent); background: var(--accent-soft); }
.lob-lig { display: flex; align-items: center; gap: 6px; padding: 3px 0; border-bottom: 1px solid var(--border); font-size: .8rem; }
.lob-lig .field { margin-bottom: 0; width: auto; padding: 2px 6px; min-height: 0; }
.lob-lig-id { min-width: 34px; font-variant-numeric: tabular-nums; color: var(--text-muted); font-size: .74rem; }
.lob-lig-nome { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.lob-lig .field.lob-lag { width: 64px; }
.lob-lig select.field { width: 74px; }
.lob-lig-herdada { opacity: .75; }
.lob-lig-ed { flex-wrap: wrap; }
.lob-lig-ed .lob-lig-nome { flex: 1 1 calc(100% - 46px); white-space: normal; }
.lob-lig-quebra { flex-basis: 100%; height: 0; }
.lob-lig-ed .lob-lig-quebra + select { margin-left: 40px; }
.lob-lig-add { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.lob-lig-add .field { margin-bottom: 0; width: 130px; }
.lob-p-acoes { display: flex; justify-content: flex-end; gap: 8px; margin-top: 12px; }
.lob-p-links { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; padding-top: 8px; border-top: 1px solid var(--border); }
.lob-alertas, .lob-diag, .lob-impacto { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.lob-alerta { width: 100%; text-align: left; display: flex; flex-direction: column; gap: 2px; padding: 6px 8px; border-radius: 6px; cursor: pointer; font: inherit; font-size: .8rem;
  background: var(--surface-2); border: 1px solid transparent; border-left: 3px solid var(--warning); color: var(--text-primary); }
.lob-alerta-info { border-left-color: var(--info); }
.lob-alerta-critico { border-left-color: var(--danger); }
.lob-alerta-atencao { border-left-color: var(--warning); }
.lob-alerta:hover { border-color: var(--accent); }
.lob-alerta span { color: var(--text-secondary); }
.lob-alerta .lob-al-nivel { font-size: .72rem; font-weight: 700; color: var(--text-secondary); margin-right: 2px; }
.lob-al-cat { margin-top: 10px; }
.lob-al-cat-tit { font-size: .84rem; margin: 0 0 4px; }
.lob-al-mais > summary { cursor: pointer; font-size: .78rem; padding: 4px 2px; }
.lob-al-mais > .lob-alertas { margin-top: 4px; }
.lob-p-filtro { font-size: .8rem; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }
/* Controle de produção (docs/SPEC-LOB-CONTROLE-PRODUCAO.md): indicadores, camadas, janela, painel Produção, ajuda */
.lob-inds { display: inline-flex; flex-wrap: wrap; gap: 4px; }
.lob-ind { font: inherit; font-size: .76rem; line-height: 1.2; padding: 3px 8px; border-radius: 999px; border: 1px solid var(--border); background: var(--surface-2); color: var(--text-secondary); cursor: pointer; white-space: nowrap; }
.lob-ind[tabindex="-1"] { cursor: default; }
.lob-ind b { color: var(--text-primary); font-variant-numeric: tabular-nums; }
.lob-ind:not([tabindex="-1"]):hover { border-color: var(--accent); }
.lob-ind-atencao { border-color: var(--warning); background: var(--warning-bg); color: var(--warning-fg); }
.lob-ind-critico { border-color: var(--danger); background: var(--danger-bg); color: var(--danger-fg); }
.lob-ind-atencao b, .lob-ind-critico b { color: inherit; }
.lob-camadas { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 2px 10px; padding: 2px 8px; border: 1px solid var(--border); border-radius: var(--radius-sm); }
.lob-camadas label:has(input:disabled) { opacity: .55; }
.lob-filtros .field.lob-janela { width: auto; max-width: 220px; font-size: .84rem; padding: 4px 26px 4px 8px; min-height: 0; }
.lob-dr { font-size: .78rem; white-space: nowrap; }
.lob-i { display: inline-block; margin-left: 2px; font-size: .78em; font-style: normal; color: var(--info); cursor: help; border-radius: 50%; }
.lob-i:focus-visible { outline: 2px solid var(--accent); outline-offset: 1px; }
.lob-ajuda-btn { font-weight: 700; }
.lob-abas { display: flex; gap: 2px; margin: 0 30px 8px 0; border-bottom: 1px solid var(--border); }
.lob-aba { font: inherit; font-size: .84rem; padding: 6px 12px; border: 0; border-bottom: 2px solid transparent; background: none; color: var(--text-secondary); cursor: pointer; }
.lob-aba-on { color: var(--text-primary); font-weight: 700; border-bottom-color: var(--accent); }
.lob-dl { display: grid; grid-template-columns: minmax(110px, auto) 1fr; gap: 3px 10px; margin: 4px 0; font-size: .82rem; }
.lob-dl dt { color: var(--text-secondary); }
.lob-dl dd { margin: 0; color: var(--text-primary); }
.lob-st { display: inline-flex; align-items: center; gap: 4px; font-size: .76rem; font-weight: 700; padding: 2px 8px; border-radius: 999px; background: var(--surface-2); color: var(--text-secondary); border: 1px solid var(--border); }
.lob-st-ok { background: var(--success-bg); color: var(--success-fg); border-color: var(--success); }
.lob-st-aten { background: var(--warning-bg); color: var(--warning-fg); border-color: var(--warning); }
.lob-st-crit { background: var(--danger-bg); color: var(--danger-fg); border-color: var(--danger); }
.lob-neg { color: var(--danger-fg, var(--danger)); }
.lob-aten { color: var(--warning-fg, var(--warning)); }
.lob-pos { color: var(--success-fg, var(--success)); }
.lob-barra-av { position: relative; height: 10px; margin: 6px 0 2px; border-radius: 999px; background: var(--surface-3); overflow: visible; }
.lob-av-real { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 999px; background: var(--accent); }
.lob-av-plan { position: absolute; top: -3px; bottom: -3px; width: 3px; margin-left: -1px; border-radius: 2px; background: var(--info); }
.lob-bufs { list-style: none; margin: 2px 0 6px; padding: 0; display: flex; flex-direction: column; gap: 6px; }
.lob-buf { font-size: .8rem; padding: 6px 8px; border-radius: 6px; background: var(--surface-2); display: flex; flex-direction: column; gap: 2px; }
.lob-buf .btn { align-self: flex-start; margin-top: 2px; }
.lob-cadeia { list-style: none; margin: 4px 0; padding: 0; font-size: .82rem; }
.lob-cadeia li { padding: 1px 0; }
.lob-cad-lig { color: var(--text-secondary); padding-left: 12px !important; font-size: .78rem; }
.lob-cad-este { color: var(--accent-strong); }
/* Centro de Ajuda (modal) — diagramas em SVG com tokens */
.lob-aj { display: flex; flex-direction: column; gap: 4px; max-height: 70vh; overflow: auto; font-size: .88rem; line-height: 1.5; }
.lob-aj-ind { display: flex; flex-wrap: wrap; gap: 4px; position: sticky; top: 0; z-index: 1; padding: 4px 0 8px; background: var(--surface); border-bottom: 1px solid var(--border); }
.lob-aj-sec { padding: 8px 0; border-bottom: 1px solid var(--border); scroll-margin-top: 84px; }
.lob-aj-sec h3 { font-size: 1rem; margin: 4px 0 6px; }
.lob-aj-sec p, .lob-aj-sec ul { margin: 4px 0; }
.lob-aj-par { display: grid; grid-template-columns: 240px 1fr; gap: 12px; align-items: start; }
.lob-aj-svg { width: 100%; max-width: 240px; height: auto; background: var(--surface-2); border-radius: var(--radius-sm); }
.lob-aj-svg line, .lob-aj-svg path { fill: none; stroke-linecap: round; }
.lob-aj-ax { stroke: var(--border-strong); stroke-width: 1; }
.lob-aj-tx { fill: var(--text-secondary); font-size: 9px; }
.lob-aj-tx2 { fill: var(--surface); font-size: 9px; font-weight: 700; }
.lob-aj-s1 { stroke: var(--serie-1); stroke-width: 3; }
.lob-aj-s2 { stroke: var(--serie-2); stroke-width: 3; }
.lob-aj-s3 { stroke: var(--serie-3); stroke-width: 3; }
.lob-aj-pl { stroke: var(--info); stroke-width: 2; }
.lob-aj-re { stroke: var(--accent-strong); stroke-width: 4; }
.lob-aj-pt { fill: var(--accent-strong); stroke: var(--surface-2); stroke-width: 1.5; }
.lob-aj-pj { stroke: var(--accent-strong); stroke-width: 2.5; stroke-dasharray: 1.5 5; }
.lob-aj-svg .lob-aj-pjf { fill: var(--surface-2); stroke: var(--accent-strong); stroke-width: 1.5; }
.lob-aj-hoje { stroke: var(--text-muted); stroke-width: 1; stroke-dasharray: 4 3; }
.lob-aj-buf { stroke: var(--success); stroke-width: 2; stroke-dasharray: 3 2; }
.lob-aj-svg .lob-aj-al { fill: var(--danger); stroke: var(--surface-2); stroke-width: 1.5; }
.lob-aj-alt { fill: var(--surface); font-size: 11px; font-weight: 700; }
.lob-aj-ligs { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; font-size: .82rem; }
.lob-aj-lig { max-width: 180px; display: block; margin-bottom: 4px; }
.lob-aj-bar { fill: var(--info); }
.lob-aj-bar2 { fill: var(--accent-strong); }
.lob-aj-seta { stroke: var(--text-primary); stroke-width: 1.5; }
.lob-aj-glo { display: grid; grid-template-columns: minmax(100px, auto) 1fr; gap: 4px 12px; margin: 4px 0; }
.lob-aj-glo dt { font-weight: 700; }
.lob-aj-glo dd { margin: 0; color: var(--text-secondary); }
.lob-diag li { padding: 2px 0; }
.lob-cfg-item { display: flex; align-items: center; gap: 8px; padding: 4px 0; font-size: .84rem; }
.lob-impacto-tit { font-size: 1rem; }
/* ajuste em lote (etapa 4): grupos do formulário no modal */
.lob-lote { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 8px 10px; margin: 0 0 10px; display: flex; flex-direction: column; gap: 6px; }
.lob-lote legend { font-weight: 600; padding: 0 4px; color: var(--text-secondary); }
.lob-lote-op { display: inline-flex; align-items: center; gap: 6px; }
.lob-lote-n { width: 6.5em; display: inline-block; }
.lob-lote-fora summary { cursor: pointer; font-size: .84rem; color: var(--text-secondary); }
.lob-p-lote { align-items: center; flex-wrap: wrap; gap: 6px; margin: 6px 0; }
.lob-p-sec-sub { font-weight: 400; text-transform: none; letter-spacing: 0; }
.lob-p-tipos { font-size: .72rem; margin: 0 0 4px; }
.lob-p-lote .muted { font-size: .76rem; }
.lob-lote-fora .lob-impacto { max-height: 18vh; margin: 4px 0; }
.lob-tip-arr { margin-top: 4px; font-size: .78rem; }
.lob-impacto { max-height: 45vh; overflow: auto; border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 6px 8px; }
/* impacto na entrega (simulação de usuário 12/10/2026): término da obra, marcos e grupos ANTES das listas */
.lob-imp-resumo { display: flex; flex-direction: column; gap: 4px; padding: 8px 10px; margin: 0 0 10px; border-radius: var(--radius-sm); background: var(--surface-2); border-left: 3px solid var(--accent); font-size: .86rem; }
.lob-imp-entrega { font-size: .98rem; }
.lob-imp-nota { font-size: .76rem; }
.lob-imp-passado { font-size: .82rem; color: var(--warning-fg, var(--text-primary)); }
/* prévia no painel enquanto digita (nada gravado) */
.lob-previa { font-size: .8rem; margin: 6px 0; padding: 6px 8px; border-radius: var(--radius-sm); background: var(--accent-soft); border-left: 3px solid var(--accent); }
.lob-imp-sec { margin: 8px 0 4px; font-size: .9rem; }
.lob-impacto-ed { max-height: 22vh; margin-bottom: 6px; }
/* janelas da LB (impacto, lote, reprogramar…): os botões ficam à vista no rodapé mesmo com a janela alta (o mesmo
   padrão do .btn-row do styles.css) — a janela de impacto cresceu com o resumo e o "Aplicar" saía da tela */
.modal2-body > .lob-p-acoes:last-child { position: sticky; bottom: 0; z-index: 1; background: var(--surface-elevated); padding-top: 10px; }
/* painel da atividade: "Cancelar / Salvar" à vista no rodapé do painel (o painel rola; as ligações empurravam o Salvar) */
.lob-painel .lob-p-acoes:not(:empty) { position: sticky; bottom: -12px; z-index: 1; background: var(--surface); padding: 8px 0 12px; }
.lob-impacto li { display: flex; justify-content: space-between; gap: 10px; font-size: .82rem; padding: 2px 0; border-bottom: 1px solid var(--border); }
.lob-escolha-lista { display: flex; flex-direction: column; gap: 6px; }
.lob-est { display: flex; flex-direction: column; gap: 8px; max-height: 55vh; overflow: auto; }
.lob-est-c { border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 6px 10px; }
.lob-est-f { display: flex; flex-wrap: wrap; gap: 4px 14px; padding: 4px 0 0 22px; font-size: .82rem; color: var(--text-secondary); }
/* atividades sem localização (§26) */
.lob-semlocal summary { cursor: pointer; }
/* cronograma sem locais que se repetem (S8 da simulação 12/10/2026): a lista no lugar do gráfico vazio */
.lob-vazio { display: flex; flex-direction: column; align-items: flex-start; gap: 6px; border-left-color: var(--accent); }
.lob-vazio-acoes { display: flex; flex-wrap: wrap; gap: 6px; }
.lob-area-lista { max-height: max(420px, calc(100vh - 330px)); overflow: auto; padding: 8px; }
.lob-area-lista .lob-semlocal { box-shadow: none; border: 0; margin: 0; }
.lob-leg-fora { font-size: .74rem; padding: 4px 8px 6px; border-top: 1px solid var(--border); }
.lob-leg-fora-btn { background: none; border: 0; padding: 0; font: inherit; color: var(--accent-strong, var(--text-primary)); text-decoration: underline; cursor: pointer; }
.lob-sl-grupo { font-weight: 700; font-size: .8rem; margin: 8px 0 2px; color: var(--text-secondary); }
.lob-sl-lista { list-style: none; margin: 0; padding: 0; }
.lob-sl-item { width: 100%; text-align: left; background: none; border: 0; padding: 2px 4px; cursor: pointer; font: inherit; font-size: .82rem; color: var(--text-primary); border-radius: 4px; }
.lob-sl-item:hover { background: var(--surface-2); }
/* menu de contexto (§33) */
.lob-menu { position: fixed; z-index: 95; min-width: 200px; padding: 4px; display: flex; flex-direction: column;
  background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius-sm); box-shadow: var(--shadow-lg); }
.lob-menu button { text-align: left; background: none; border: 0; padding: 6px 10px; border-radius: 6px; cursor: pointer; font: inherit; font-size: .86rem; color: var(--text-primary); }
.lob-menu button:hover:not(:disabled) { background: var(--accent-soft); }
.lob-menu button:disabled { color: var(--text-muted); cursor: default; }
/* tela cheia (§4): cobre cabeçalho e menu do app; modais (z 100+) e avisos ficam por cima */
.lob.lob-cheia { position: fixed; inset: 0; z-index: 90; padding: 10px 12px; background: var(--surface); overflow: auto; }
.lob.lob-cheia .lob-corpo { flex: 1; }
.lob.lob-cheia .lob-canvas-host { height: max(360px, calc(100vh - 150px)); }
.lob.lob-cheia .lob-painel { max-height: calc(100vh - 150px); }
/* Gantt / versões: destaque vindo da Linha de Balanço e a versão editada */
.cron-g-row.cron-g-destaque .cron-g-lbl { background: var(--accent-soft); box-shadow: inset 3px 0 0 var(--accent); }
.cron-g-row.cron-g-destaque .cron-g-track { background: var(--accent-soft); }
.cron-badge-edicao { background: var(--accent-soft); color: var(--accent-strong); border: 1px solid var(--accent-soft-border); font-size: .68rem; }
.cron-ver-ed { color: var(--text-secondary); }
@media (max-width: 900px) {
  .lob-corpo { flex-direction: column; }
  .lob-painel { flex: none; max-width: none; max-height: none; }
  .lob-busca { width: 100%; }
}
@media (max-width: 600px) {
  .lob-canvas-host { height: 62vh; }
  .lob-legenda { display: none; }
  .lob-aj-par { grid-template-columns: 1fr; }
  .lob-seg { flex-wrap: wrap; max-width: 100%; }   /* §36: nenhum botão de modo/escala escondido no celular */
  .lob-seg .btn { flex: 1 1 auto; }
  .lob-dl { grid-template-columns: 1fr; gap: 0 10px; }
  .lob-dl dd { margin-bottom: 4px; }
}
