/* =========================================================================
   Descentralização do CEAF — Design System
   ========================================================================= */
:root {
  /* Tema institucional (padrão de sites de governo): azul-marinho sóbrio,
     verde só para ação/aprovação, cinzas frios para estrutura. */
  --azul-900: #0c2340;
  --azul-800: #102f55;
  --azul-700: #134a8e;
  --azul-600: #1b5cad;
  --azul-500: #2670c8;
  --azul-100: #e6eef8;
  --azul-050: #f3f7fc;
  --verde-600: #16794a;
  --verde-500: #1d8f58;
  --verde-100: #e2f3ea;
  --amarelo-500: #c98a00;
  --amarelo-100: #fdf3da;
  --vermelho-500: #c43333;
  --vermelho-100: #fbe7e7;
  --dourado: #b8860b;

  --cinza-900: #1b2430;
  --cinza-700: #3f4b5b;
  --cinza-600: #536072;
  --cinza-500: #667385;
  --cinza-300: #c5ced9;
  --cinza-200: #dfe5ec;
  --cinza-100: #eef2f6;
  --cinza-050: #f6f8fa;
  --branco: #ffffff;

  --primaria: var(--azul-700);
  --primaria-hover: var(--azul-900);
  --acento: var(--verde-600);

  --raio: 8px;
  --raio-sm: 6px;
  --sombra-sm: 0 1px 2px rgba(12, 35, 64, .06);
  --sombra-md: 0 2px 8px rgba(12, 35, 64, .08), 0 1px 2px rgba(12, 35, 64, .06);
  --sombra-lg: 0 12px 32px rgba(12, 35, 64, .14);
  --container: 1180px;
  --fonte: 'Inter', 'Segoe UI Variable Text', 'Segoe UI', system-ui, -apple-system, Roboto, Helvetica, Arial, sans-serif;
}

* { box-sizing: border-box; }
html { scroll-behavior: smooth; }
body {
  margin: 0;
  font-family: var(--fonte);
  color: var(--cinza-900);
  background: var(--branco);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}
h1, h2, h3, h4 { color: var(--azul-900); line-height: 1.25; margin: 0 0 .5em; }
h1 { font-size: clamp(1.9rem, 4vw, 2.8rem); font-weight: 800; letter-spacing: -.02em; }
h2 { font-size: clamp(1.5rem, 3vw, 2.1rem); font-weight: 700; }
h3 { font-size: 1.2rem; font-weight: 700; }
p { margin: 0 0 1rem; }
a { color: var(--azul-600); }
img { max-width: 100%; }

.container { max-width: var(--container); margin: 0 auto; padding: 0 24px; }
.secao { padding: 72px 0; }
.secao--alt { background: var(--azul-050); }
.text-center { text-align: center; }
.muted { color: var(--cinza-500); }

/* ---- Botões ---- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .5rem;
  font: inherit; font-weight: 600; cursor: pointer;
  padding: 13px 26px; border-radius: var(--raio-sm); border: 2px solid transparent;
  text-decoration: none; transition: all .15s ease; line-height: 1;
}
.btn--primario { background: var(--primaria); color: #fff; }
.btn--primario:hover { background: var(--primaria-hover); transform: translateY(-1px); box-shadow: var(--sombra-md); }
.btn--acento { background: var(--acento); color: #fff; }
.btn--acento:hover { background: var(--verde-500); transform: translateY(-1px); box-shadow: var(--sombra-md); }
.btn--ghost { background: transparent; color: var(--primaria); border-color: var(--cinza-300); }
.btn--ghost:hover { border-color: var(--primaria); background: var(--azul-050); }
.btn--bloco { width: 100%; }
.btn--grande { padding: 16px 34px; font-size: 1.05rem; }
.btn[disabled] { opacity: .55; cursor: not-allowed; transform: none; box-shadow: none; }

/* ---- Cabeçalho ---- */
.topbar {
  position: sticky; top: 0; z-index: 50;
  background: rgba(255, 255, 255, .92); backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--cinza-200);
}
.topbar .container { display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: 68px; padding-top: 8px; padding-bottom: 8px; }
.brand { display: flex; align-items: center; gap: 12px; text-decoration: none; color: var(--azul-900); min-width: 0; }
.brand__txt { max-width: 440px; }
.brand__logo {
  min-width: 40px; height: 40px; padding: 0 8px; border-radius: 10px; flex: none;
  background: linear-gradient(135deg, var(--azul-700), var(--verde-600));
  display: grid; place-items: center; color: #fff; font-weight: 800; font-size: .72rem; letter-spacing: .03em;
}
.brand__txt strong { display: block; font-size: .92rem; line-height: 1.15; }
.brand__txt span { font-size: .76rem; color: var(--cinza-500); }
.topnav { display: flex; align-items: center; gap: 8px; }
.topnav a { color: var(--cinza-700); text-decoration: none; font-weight: 500; padding: 8px 12px; border-radius: 6px; }
.topnav a:hover { background: var(--cinza-100); color: var(--azul-900); }
.nav-toggle { display: none; background: none; border: 1.5px solid var(--cinza-300); border-radius: 8px; font-size: 1.4rem; line-height: 1; cursor: pointer; color: var(--azul-900); padding: 6px 12px; }
.nav-toggle:focus-visible { outline: 3px solid rgba(25,118,210,.4); }

/* Cabeçalho da landing: marca com as seções em links pequenos logo abaixo,
   e as duas ações principais (botões) à direita. */
.topbar__marca { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.subnav { display: flex; flex-wrap: wrap; gap: 2px 16px; padding-left: 52px; }
.subnav a {
  font-size: .76rem; font-weight: 600; color: var(--cinza-500);
  text-decoration: none; letter-spacing: .01em;
}
.subnav a:hover, .subnav a:focus-visible { color: var(--azul-700); text-decoration: underline; }
.topbar__acoes { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; justify-content: flex-end; }
.topbar__acoes .btn { padding: 11px 18px; white-space: nowrap; }

/* Manifestação encerrada: o botão perde o verde (o verde sinaliza formulário aberto) */
.btn--encerrado { background: var(--cinza-200); color: var(--cinza-700); }
.btn--encerrado:hover { background: var(--cinza-300); color: var(--cinza-900); transform: translateY(-1px); }

@media (max-width: 900px) {
  /* O cabeçalho da landing cresce (marca + seções + 2 botões); fixo, roubaria
     meia tela do celular — então deixa de ser sticky. */
  .topbar--landing { position: static; }
  .topbar__linha { flex-wrap: wrap; row-gap: 8px; padding-bottom: 10px; }
  .subnav { padding-left: 0; }
  .topbar__acoes { width: 100%; justify-content: stretch; align-items: stretch; }
  .topbar__acoes .btn {
    flex: 1; font-size: .85rem; padding: 10px 8px;
    white-space: normal; line-height: 1.25; text-align: center;
  }
}

/* ---- Hero ---- */
.hero {
  background:
    radial-gradient(1100px 420px at 85% -10%, rgba(37, 163, 106, .18), transparent),
    linear-gradient(160deg, var(--azul-900), var(--azul-700));
  color: #fff; padding: 84px 0 96px; position: relative; overflow: hidden;
}
.hero h1 { color: #fff; }
.hero p.lead { font-size: 1.2rem; color: #d7e6f7; max-width: 640px; }
.hero .pill {
  display: inline-block; background: rgba(255, 255, 255, .14); color: #eaf3fc;
  border: 1px solid rgba(255, 255, 255, .25); padding: 6px 14px; border-radius: 999px;
  font-size: .85rem; font-weight: 600; margin-bottom: 20px;
}
.hero__acoes { display: flex; gap: 14px; flex-wrap: wrap; margin-top: 28px; }
.hero__acoes .btn--ghost { color: #fff; border-color: rgba(255,255,255,.5); }
.hero__acoes .btn--ghost:hover { background: rgba(255,255,255,.12); }
.hero__stats { display: flex; gap: 36px; flex-wrap: wrap; margin-top: 48px; }
.hero__stat strong { display: block; font-size: 2.1rem; font-weight: 800; color: #fff; }
.hero__stat span { color: #b9d2ec; font-size: .9rem; }
/* Adesão por fase no topo: a bolinha tem a mesma cor do grupo no mapa. */
.hero__fases { margin-top: 18px; gap: 28px; }
.hero__fases .hero__stat strong { font-size: 1.6rem; display: flex; align-items: center; gap: 8px; }
.hero__fase-cor { display: inline-block; width: 12px; height: 12px; border-radius: 50%; border: 2px solid rgba(255,255,255,.7); }

/* Topo em duas colunas: texto à esquerda, mapa da adesão à direita. No celular
   e em telas médias, o mapa desce para baixo do texto. */
.hero__grade { display: grid; grid-template-columns: minmax(0, 1fr); gap: 40px; align-items: center; }
.hero__mapa { color: var(--cinza-900); padding: 20px; box-shadow: 0 18px 40px rgba(4, 18, 36, .35); }
.hero__mapa-titulo { font-size: 1.15rem; text-align: center; margin: 0 0 6px; color: var(--azul-900); }
.hero__mapa .mapa-destaque { font-size: .95rem; margin-bottom: 12px; }
.hero__mapa .mapa-busca { margin-bottom: 12px; }
.hero__mapa .mapa-busca .input { min-width: 160px; }
.hero__mapa .mapa-legenda { margin-top: 10px; }
.hero__mapa-nota { margin: 10px 0 0; text-align: center; font-size: .8rem; color: var(--cinza-500); }
@media (min-width: 1100px) {
  /* Só o topo da página inicial é mais largo, e o mapa fica com a maior parte. */
  .container.hero__grade { max-width: 1480px; }
  .hero__grade { grid-template-columns: minmax(0, .75fr) minmax(0, 1fr); gap: 40px; }
  .hero__mapa .mapa-wrap { max-width: none; }
  .hero h1 { font-size: clamp(1.9rem, 2.6vw, 2.5rem); }
  .hero p.lead { font-size: 1.05rem; }
}

/* ---- Boas-vindas (página inicial): abertura obrigatória de ~7 s ---- */
.bv {
  position: fixed; inset: 0; z-index: 1000; overflow: hidden;
  display: flex; align-items: center; justify-content: center; padding: 24px;
  background: #061a33; color: #fff; text-align: center;
  animation: bv-entra .5s ease-out both;
}
.bv[hidden] { display: none; }
body.bv-aberta { overflow: hidden; }
/* Saída: a abertura sobe e se desfaz, revelando o site. */
.bv--saindo { animation: bv-sai .7s cubic-bezier(.7, 0, .3, 1) both; }
.bv__fundo { position: absolute; inset: 0; pointer-events: none; }
.bv__aurora {
  position: absolute; border-radius: 50%; filter: blur(70px); mix-blend-mode: screen;
  animation: bv-aurora 6s ease-in-out infinite alternate;
}
.bv__aurora--1 { width: 60vmax; height: 60vmax; left: -15vmax; top: -20vmax; background: rgba(25, 118, 210, .55); }
.bv__aurora--2 { width: 50vmax; height: 50vmax; right: -15vmax; bottom: -20vmax; background: rgba(37, 163, 106, .45); animation-delay: -2s; }
.bv__aurora--3 { width: 30vmax; height: 30vmax; left: 45%; top: 30%; background: rgba(124, 196, 240, .30); animation-delay: -4s; }
/* Malha de pontos sutil, deslizando: dá profundidade sem distrair. */
.bv__grade {
  position: absolute; inset: -40px;
  background-image: radial-gradient(rgba(255, 255, 255, .16) 1px, transparent 1.4px);
  background-size: 28px 28px; mask-image: radial-gradient(ellipse at center, #000 30%, transparent 75%);
  -webkit-mask-image: radial-gradient(ellipse at center, #000 30%, transparent 75%);
  animation: bv-grade 9s linear infinite;
}
.bv__conteudo { position: relative; max-width: 760px; }
.bv__selo {
  position: relative; display: inline-flex; align-items: center; justify-content: center;
  padding: 14px 26px; border-radius: 16px; font-weight: 800; letter-spacing: .08em; font-size: clamp(1.3rem, 3vw, 1.8rem);
  background: linear-gradient(135deg, #0b4a8f, #1b8a5a); box-shadow: 0 0 0 1px rgba(255, 255, 255, .18), 0 20px 50px rgba(0, 0, 0, .35);
  animation: bv-selo .9s cubic-bezier(.2, 1.3, .4, 1) .15s both;
}
/* Anel de luz pulsando em volta do selo. */
.bv__selo::after {
  content: ''; position: absolute; inset: -10px; border-radius: 22px;
  border: 2px solid rgba(124, 196, 240, .6); animation: bv-anel 1.8s ease-out .9s infinite;
}
.bv__titulo {
  margin: 28px 0 12px; font-size: clamp(1.6rem, 4.6vw, 3rem); font-weight: 800; line-height: 1.12; letter-spacing: -.01em;
  animation: bv-revela .9s cubic-bezier(.2, .8, .2, 1) .6s both;
}
.bv__titulo strong {
  background: linear-gradient(90deg, #7cc4f0, #5fd39b, #7cc4f0); background-size: 200% 100%;
  -webkit-background-clip: text; background-clip: text; color: transparent;
  animation: bv-brilho 3s linear 1.2s infinite;
}
.bv__frase {
  margin: 0 auto; max-width: 620px; font-size: clamp(1rem, 2.1vw, 1.2rem); line-height: 1.55; color: #cfe2f6;
  animation: bv-revela .9s cubic-bezier(.2, .8, .2, 1) 1s both;
}
/* Barra de tempo: enche durante a abertura (duração vinda do JS). */
.bv__progresso { position: absolute; left: 0; right: 0; bottom: 0; height: 4px; background: rgba(255, 255, 255, .1); }
.bv__progresso span {
  display: block; height: 100%; transform-origin: left; background: linear-gradient(90deg, #1976d2, #25a36a);
  animation: bv-progresso var(--bv-duracao, 7000ms) linear both;
}
@keyframes bv-entra { from { opacity: 0; } to { opacity: 1; } }
@keyframes bv-sai { to { opacity: 0; transform: translateY(-6%) scale(1.03); filter: blur(6px); } }
@keyframes bv-selo { from { opacity: 0; transform: scale(.4) rotate(-8deg); } to { opacity: 1; transform: none; } }
@keyframes bv-anel { from { opacity: .9; transform: scale(1); } to { opacity: 0; transform: scale(1.35); } }
@keyframes bv-revela {
  from { opacity: 0; transform: translateY(22px); clip-path: inset(0 0 100% 0); filter: blur(4px); }
  to { opacity: 1; transform: none; clip-path: inset(0 0 0 0); filter: none; }
}
@keyframes bv-brilho { to { background-position: -200% 0; } }
@keyframes bv-aurora { to { transform: translate(6vmax, 4vmax) scale(1.15); } }
@keyframes bv-grade { to { transform: translate(28px, 28px); } }
@keyframes bv-progresso { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@media (prefers-reduced-motion: reduce) {
  .bv, .bv * , .bv *::after { animation: none !important; }
}

/* ---- Grid de cards ---- */
.grid { display: grid; gap: 24px; }
.grid--3 { grid-template-columns: repeat(3, 1fr); }
.grid--2 { grid-template-columns: repeat(2, 1fr); }
.card {
  background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio);
  padding: 28px; box-shadow: var(--sombra-sm);
}
.card__ico {
  width: 48px; height: 48px; border-radius: 12px; display: grid; place-items: center;
  background: var(--azul-100); color: var(--azul-700); margin-bottom: 16px; font-size: 1.4rem;
}
.card--verde .card__ico { background: var(--verde-100); color: var(--verde-600); }
.card--cta { background: var(--verde-100); border-color: #a9e0c5; }
.card--cta h3 { color: var(--verde-600); }
.card--link { display: block; text-decoration: none; color: inherit; transition: transform .15s, box-shadow .15s, border-color .15s; }
.card--link:hover { transform: translateY(-2px); box-shadow: var(--sombra-md); border-color: var(--azul-500); }
.card--link h3 { color: var(--azul-700); }

/* ---- Acordeão (details/summary) ---- */
details.accordion { border: 1px solid var(--cinza-200); border-radius: var(--raio-sm); background: #fff; box-shadow: var(--sombra-sm); }
details.accordion > summary { cursor: pointer; padding: 16px 20px; font-weight: 700; color: var(--azul-900); list-style: none; display: flex; align-items: center; justify-content: space-between; gap: 12px; }
details.accordion > summary::-webkit-details-marker { display: none; }
details.accordion > summary::after { content: '+'; font-size: 1.4rem; line-height: 1; color: var(--azul-600); flex: none; }
details.accordion[open] > summary::after { content: '\2013'; }
details.accordion > summary:focus-visible { outline: 3px solid rgba(25,118,210,.35); outline-offset: -3px; border-radius: var(--raio-sm); }
.accordion__body { padding: 4px 20px 22px; }
.accordion__body h4 { margin: 18px 0 6px; color: var(--azul-700); font-size: 1rem; }
.accordion__body p { color: var(--cinza-700); }
.accordion__body ul { margin: 0 0 10px; padding-left: 22px; color: var(--cinza-700); }
.accordion__body li { margin-bottom: 5px; }

/* Acordeão compacto dentro de card */
details.mini { margin-top: 12px; }
details.mini > summary { cursor: pointer; font-weight: 600; color: var(--azul-600); font-size: .9rem; list-style: none; }
details.mini > summary::-webkit-details-marker { display: none; }
details.mini > summary::before { content: '\25B8\00a0'; }
details.mini[open] > summary::before { content: '\25BE\00a0'; }
details.mini ul { margin: 8px 0; padding-left: 18px; }
details.mini li { margin-bottom: 4px; }

/* ---- Passos ---- */
.passos { counter-reset: passo; display: grid; gap: 20px; }
.passo { display: flex; gap: 18px; align-items: flex-start; }
.passo__num {
  counter-increment: passo; flex: none; width: 40px; height: 40px; border-radius: 50%;
  background: var(--azul-700); color: #fff; display: grid; place-items: center; font-weight: 700;
}
.passo__num::before { content: counter(passo); }

/* ---- Formulário ---- */
.form-wrap { max-width: 760px; margin: 0 auto; }
.form-card {
  background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio);
  box-shadow: var(--sombra-md); padding: 36px;
}
.campo { margin-bottom: 20px; }
.campo label { display: block; font-weight: 600; margin-bottom: 7px; color: var(--cinza-900); }
.campo label .req { color: var(--vermelho-500); }
.campo .hint { font-size: .82rem; color: var(--cinza-500); margin-top: 5px; }
.input, .select, .textarea {
  width: 100%; font: inherit; color: var(--cinza-900);
  padding: 12px 14px; border: 1.5px solid var(--cinza-300); border-radius: var(--raio-sm);
  background: #fff; transition: border-color .15s, box-shadow .15s;
}
.input:focus, .select:focus, .textarea:focus {
  outline: none; border-color: var(--azul-500); box-shadow: 0 0 0 3px rgba(25, 118, 210, .15);
}
.select:disabled { background: var(--cinza-100); color: var(--cinza-500); cursor: not-allowed; }
.textarea { resize: vertical; min-height: 90px; }
.linha { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }

/* Opções de adesão (radio cards) */
.opcoes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.opcao { position: relative; }
.opcao input { position: absolute; opacity: 0; inset: 0; cursor: pointer; }
.opcao__box {
  display: flex; flex-direction: column; gap: 4px; align-items: flex-start;
  border: 1.5px solid var(--cinza-300); border-radius: var(--raio-sm); padding: 14px;
  cursor: pointer; transition: all .15s; height: 100%;
}
.opcao__box strong { font-size: .98rem; }
.opcao__box small { color: var(--cinza-500); font-size: .8rem; }
.opcao input:checked + .opcao__box { border-color: var(--azul-600); background: var(--azul-050); box-shadow: 0 0 0 2px rgba(21,101,192,.18); }
.opcao input:focus-visible + .opcao__box { box-shadow: 0 0 0 3px rgba(25,118,210,.3); }

/* Mensagens */
.alerta { padding: 14px 16px; border-radius: var(--raio-sm); margin-bottom: 18px; font-size: .95rem; }
.alerta--erro { background: var(--vermelho-100); color: #8a2020; border: 1px solid #f0bcbc; }
.alerta--ok { background: var(--verde-100); color: #14613f; border: 1px solid #a9e0c5; }
.alerta--aviso { background: var(--amarelo-100); color: #7a5600; border: 1px solid #f1d58a; }
.alerta ul { margin: 6px 0 0; padding-left: 20px; }

/* Sucesso */
.sucesso { text-align: center; padding: 28px; }
.sucesso .check {
  width: 76px; height: 76px; border-radius: 50%; background: var(--verde-100); color: var(--verde-600);
  display: grid; place-items: center; margin: 0 auto 18px; font-size: 2.4rem;
}

/* ---- Rodapé ---- */
.footer { background: var(--azul-900); color: #c7d8ec; padding: 40px 0; font-size: .9rem; }
.footer a { color: #fff; }
.footer .container { display: flex; justify-content: space-between; gap: 24px; flex-wrap: wrap; }

/* ---- Painel admin ---- */
.admin-body { background: var(--cinza-100); min-height: 100vh; }
/* Telas internas (painel, Painel DRS, Área do Município, Secretário, admin)
   usam quase toda a largura: tabelas e quadros cabem sem rolagem lateral. */
.admin-body .container {
  max-width: 1840px;
  padding-left: clamp(16px, 2.5vw, 40px);
  padding-right: clamp(16px, 2.5vw, 40px);
}
.admin-top {
  background: var(--azul-900); color: #fff; padding: 0;
  position: sticky; top: 0; z-index: 40;
}
.admin-top .container { display: flex; align-items: center; justify-content: space-between; height: 64px; }
.admin-top .brand { color: #fff; }
.admin-top .brand__txt span { color: #9fc0e4; }
.kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 18px; }
.kpi { background: #fff; border-radius: var(--raio); padding: 22px; box-shadow: var(--sombra-sm); border: 1px solid var(--cinza-200); }
.kpi__label { color: var(--cinza-500); font-size: .85rem; font-weight: 600; text-transform: uppercase; letter-spacing: .03em; }
.kpi__valor { font-size: 2.1rem; font-weight: 800; color: var(--azul-900); margin-top: 6px; }
.kpi__sub { font-size: .85rem; color: var(--cinza-500); }
/* Frase única acima dos cards com o funil inteiro. É a leitura que a equipe
   pede ("dos que disseram sim, quantos já andaram?"), e cinco cards soltos não
   respondem — por isso tem peso próprio, e não o cinza de nota de rodapé. */
.funil-resumo {
  background: var(--azul-050); border-left: 4px solid var(--azul-500);
  border-radius: var(--raio); padding: 14px 18px; margin: 0 0 18px;
  color: var(--cinza-900); font-size: .95rem; line-height: 1.55;
}
.funil-resumo strong { color: var(--azul-700); }

/* Relatório de Pendências (DRS → NAF → Município), pronto para apresentar. */
.pend-cabecalho { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.pend-linha-sit { display: flex; justify-content: space-between; gap: 12px; padding: 6px 0; border-bottom: 1px solid var(--cinza-100); font-size: .92rem; }
.pend-linha-sit:last-child { border-bottom: 0; }
.pend-drs { margin-top: 18px; }
.pend-drs__titulo { margin: 0 0 6px; color: var(--azul-900); border-bottom: 2px solid var(--azul-100); padding-bottom: 8px; }
.pend-cont { font-weight: 600; color: var(--cinza-500); font-size: .82rem; }
.pend-cont--drs { color: var(--azul-700); }
.pend-naf { margin-top: 14px; }
.pend-naf h4 { margin: 0 0 6px; color: var(--cinza-900); }
.pend-contato { font-size: .82rem; color: var(--cinza-700); }

/* Impressão: só o relatório de pendências sai no papel/PDF. */
@media print {
  .painel-menu, .admin-top, .no-print, #painelFormulario { display: none !important; }
  .vista[hidden] { display: none !important; }
  .vista { display: block !important; }
  .panel { break-inside: avoid; box-shadow: none; border: 1px solid var(--cinza-300); }
  .pend-drs { break-inside: avoid; }
  body { background: #fff; }
  /* Aptos à Etapa 4: oito colunas. No papel a caixa com rolagem não rola —
     o navegador recortaria as colunas da direita. Deixa quebrar e encolhe. */
  .vista[data-vista="etapa4"] .tabela-wrap { overflow: visible; }
  .vista[data-vista="etapa4"] table.dados th,
  .vista[data-vista="etapa4"] table.dados td { white-space: normal; font-size: .76rem; padding: 5px 6px; }
  .vista[data-vista="etapa4"] .pend-contato { word-break: break-word; }
}
.panel { background: #fff; border-radius: var(--raio); border: 1px solid var(--cinza-200); box-shadow: var(--sombra-sm); padding: 24px; margin-top: 22px; }
.panel h3 { margin-bottom: 16px; }

/* Barras de adesão */
.bar-row { display: grid; grid-template-columns: 150px 1fr 56px; gap: 12px; align-items: center; margin-bottom: 10px; font-size: .9rem; }
.bar-track { background: var(--cinza-100); border-radius: 999px; height: 22px; overflow: hidden; display: flex; }
.bar-seg { height: 100%; }
.bar-sim { background: var(--verde-500); }
.bar-nao { background: var(--vermelho-500); }
.bar-mais { background: var(--amarelo-500); }
/* Quem ainda não respondeu: sem essa faixa, as barras não compõem os 645. */
.bar-semresposta { background: var(--cinza-300); }
/* Faixa de composição do Estado inteiro: mais alta e separada das barras. */
.bar-row--estado { margin-bottom: 18px; padding-bottom: 14px; border-bottom: 1px solid var(--cinza-200); }
.bar-row--estado .bar-track { height: 30px; }
.bar-row--estado > span:first-child { font-weight: 700; color: var(--azul-900); }

/* Previsão de financiamento */
.panel h4 { margin: 20px 0 10px; font-size: .98rem; color: var(--azul-700); }
.kpi__valor--fin { font-size: 1.55rem; }
.fin-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 32px; }
.bar-row--fin { grid-template-columns: minmax(140px, 220px) 1fr 110px; }
.bar-row--fin > span:last-child { text-align: right; white-space: nowrap; }
.bar-e1 { background: var(--azul-700); }
.bar-e2 { background: var(--azul-500); }
.bar-e3 { background: var(--verde-500); }
.bar-e4 { background: var(--amarelo-500); }

.legenda { display: flex; gap: 18px; flex-wrap: wrap; font-size: .85rem; color: var(--cinza-700); margin-bottom: 14px; }
.legenda i { display: inline-block; width: 12px; height: 12px; border-radius: 3px; margin-right: 6px; vertical-align: middle; }

/* Tabela */
.tabela-wrap { overflow-x: auto; }
table.dados { width: 100%; border-collapse: collapse; font-size: .88rem; }
table.dados th, table.dados td { padding: 10px 12px; text-align: left; border-bottom: 1px solid var(--cinza-200); white-space: nowrap; }
table.dados th { background: var(--azul-050); color: var(--azul-900); font-weight: 700; position: sticky; top: 0; }
table.dados tbody tr:hover { background: var(--azul-050); }

/* Coluna que identifica o município acompanha a rolagem horizontal.
   Sem isso, ao rolar até "Conferência" e "Ações" — que é onde o trabalho de
   fato acontece — o nome do município já saiu da tela, e quem confere perde a
   referência de quem está analisando. O cabeçalho já era sticky na vertical;
   isto é o mesmo no outro eixo. */
table.dados .col-fixa {
  position: sticky;
  left: 0;
  z-index: 1;
  background: #fff;
  /* Sombra de 1px marca onde a coluna fixa termina e o conteúdo passa por baixo. */
  box-shadow: 1px 0 0 var(--cinza-200);
}
/* Canto superior esquerdo: fixo nos dois eixos, precisa vencer os dois. */
table.dados thead .col-fixa { z-index: 3; background: var(--azul-050); }
/* Sem repetir o realce aqui, a célula fixa fica branca na linha destacada. */
table.dados tbody tr:hover .col-fixa { background: var(--azul-050); }

/* As AÇÕES ficam presas na borda direita, pelo mesmo motivo que o município
   fica na esquerda: sem isso é preciso atravessar a tabela inteira, linha por
   linha, só para alcançar o botão de baixar ou aprovar. Com as duas pontas
   fixas, o que rola é só o miolo — e nunca se perde nem quem é, nem o que dá
   para fazer. */
table.dados .col-acoes {
  position: sticky;
  right: 0;
  z-index: 1;
  background: #fff;
  box-shadow: -1px 0 0 var(--cinza-200);
}
table.dados thead .col-acoes { z-index: 3; background: var(--azul-050); }
table.dados tbody tr:hover .col-acoes { background: var(--azul-050); }

/* Etapa 2: além do município (esquerda) e das ações (direita), Termo assinado
   e Conferência ficam fixos — são exatamente o que se confere; o miolo
   descritivo (data, DRS, modalidade, previsão) é o que rola por baixo.
   Sticky right empilhado exige LARGURA FIXA: o offset de cada coluna é a soma
   das larguras das que ficam à direita dela (ações 136 + conferência 190). */
.dados--etapa2 .col-acoes { width: 136px; min-width: 136px; }
.dados--etapa2 .col-termo,
.dados--etapa2 .col-conf {
  position: sticky; z-index: 1; background: #fff;
  /* Sem isso, o nowrap geral da tabela estoura a largura fixa da coluna. */
  white-space: normal;
}
.dados--etapa2 thead .col-termo, .dados--etapa2 thead .col-conf { z-index: 3; background: var(--azul-050); }
.dados--etapa2 tbody tr:hover .col-termo, .dados--etapa2 tbody tr:hover .col-conf { background: var(--azul-050); }
.dados--etapa2 .col-conf  { right: 136px; width: 190px; min-width: 190px; }
.dados--etapa2 .col-termo { right: 326px; width: 122px; min-width: 122px; box-shadow: -1px 0 0 var(--cinza-200); }
/* Botões empilhados: a coluna de ações estreita e sobra tela para o resto. */
.dados--etapa2 .col-acoes .btn-mini { display: block; width: 100%; margin: 0 0 4px; text-align: left; }
.dados--etapa2 .col-acoes .btn-mini:last-child { margin-bottom: 0; }
/* Linhas altas (botões empilhados): alinhar tudo no topo lê melhor. */
.dados--etapa2 tbody td { vertical-align: top; }

/* Etapa 3 (abas Checklist e Autodeclaração), mesma lógica da etapa 2: a coluna
   de status do documento da aba (.col-check) fica fixa junto às ações; rola só
   o descritivo (DRS e, na aba do termo, CNPJ e representantes).
   Offset: ações 150. */
.dados--etapa3 .col-acoes { width: 150px; min-width: 150px; }
.dados--etapa3 .col-check {
  position: sticky; z-index: 1; background: #fff;
  white-space: normal; right: 150px; width: 210px; min-width: 210px;
  box-shadow: -1px 0 0 var(--cinza-200);
}
.dados--etapa3 thead .col-check { z-index: 3; background: var(--azul-050); }
.dados--etapa3 tbody tr:hover .col-check { background: var(--azul-050); }
.dados--etapa3 .col-acoes .btn-mini { display: block; width: 100%; margin: 0 0 4px; text-align: left; }
.dados--etapa3 .col-acoes .btn-mini:last-child { margin-bottom: 0; }
.dados--etapa3 tbody td { vertical-align: top; }

/* "Nova resposta": o município reenviou o documento depois de uma devolução.
   Cor própria (azul informativo) de propósito — nem o verde de aprovado, nem o
   amarelo de pendente, nem o vermelho de devolvido: é uma fila diferente, a de
   quem já respondeu e espera nova conferência. */
.tag--reenvio { background: var(--azul-100); color: var(--azul-700); }

/* Selo de pendência nos botões do menu do painel: avisa a devolução respondida
   na porta da aba, sem precisar entrar nela para descobrir. */
.menu-badge {
  display: inline-block; margin-left: 6px; padding: 1px 7px; border-radius: 999px;
  background: var(--azul-600); color: #fff;
  font-size: .72rem; font-weight: 700; line-height: 1.4;
}
.tag { display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: .78rem; font-weight: 600; }
.tag--sim { background: var(--verde-100); color: #14613f; }
.tag--nao { background: var(--vermelho-100); color: #8a2020; }
.tag--mais { background: var(--amarelo-100); color: #7a5600; }
/* "Sem resposta" é ausência de manifestação, não uma posição — por isso cinza,
   e não o amarelo de quem respondeu "quero saber mais". */
.tag--neutro { background: var(--cinza-100); color: var(--cinza-700); }

/* Botão de ação compacto nas tabelas (ex.: excluir manifestação) */
.btn-mini {
  background: none; border: 1px solid var(--cinza-300); border-radius: 6px;
  padding: 4px 8px; cursor: pointer; font-size: .9rem; line-height: 1;
  transition: border-color .15s, background .15s;
}
.btn-mini--excluir:hover, .btn-mini--excluir:focus-visible { border-color: var(--vermelho-500); background: var(--vermelho-100); }
.btn-mini--aprovar { border-color: var(--verde-500); color: #14613f; font-weight: 600; }
.btn-mini--aprovar:hover, .btn-mini--aprovar:focus-visible { background: var(--verde-100); }
.btn-mini[disabled] { opacity: .5; cursor: not-allowed; }

.filtros { display: flex; gap: 12px; flex-wrap: wrap; align-items: flex-end; margin-bottom: 18px; }
.filtros .campo { margin-bottom: 0; }

/* Seletor de colunas das tabelas (botão "Colunas" + menu de caixas de seleção) */
details.col-picker { position: relative; }
details.col-picker > summary {
  list-style: none; cursor: pointer; user-select: none;
  display: inline-flex; align-items: center; gap: 8px;
  font: inherit; font-weight: 600; color: var(--primaria); line-height: 1;
  padding: 13px 18px; border: 2px solid var(--cinza-300); border-radius: var(--raio-sm);
  background: transparent; transition: all .15s ease;
}
details.col-picker > summary::-webkit-details-marker { display: none; }
details.col-picker > summary::after { content: '\25BE'; font-size: .75em; }
details.col-picker > summary:hover,
details.col-picker[open] > summary { border-color: var(--primaria); background: var(--azul-050); }
details.col-picker > summary:focus-visible { outline: 3px solid rgba(25,118,210,.4); }
.col-picker__menu {
  position: absolute; top: calc(100% + 6px); left: 0; z-index: 30;
  min-width: 230px; max-height: 320px; overflow-y: auto;
  background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio-sm);
  box-shadow: var(--sombra-lg); padding: 10px;
}
.col-picker__menu label {
  display: flex; align-items: center; gap: 8px; padding: 7px 8px;
  font-size: .9rem; font-weight: 500; border-radius: 6px; cursor: pointer;
  white-space: nowrap;
}
.col-picker__menu label:hover { background: var(--azul-050); }
.col-picker__reset {
  display: block; width: 100%; margin-top: 8px; padding: 8px;
  font: inherit; font-size: .85rem; font-weight: 600; color: var(--azul-600);
  background: none; border: 0; border-top: 1px solid var(--cinza-200); cursor: pointer;
}
.col-picker__reset:hover { color: var(--azul-900); }

/* Células de texto longo (observações, dúvidas) — quebram linha dentro da tabela */
.celula-longa { display: block; white-space: normal; min-width: 240px; max-width: 420px; }

/* Garante que blocos ocultados pelo seletor de indicadores sumam mesmo se
   alguma regra futura definir display no elemento */
[hidden] { display: none !important; }

/* Modal de resposta às dúvidas */
dialog.modal-duvida {
  border: 0; border-radius: var(--raio); box-shadow: var(--sombra-lg);
  padding: 24px; width: min(680px, calc(100vw - 32px));
}
dialog.modal-duvida::backdrop { background: rgba(10, 37, 64, .45); }
.modal-duvida__cabecalho { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; }
.modal-duvida__fechar {
  background: none; border: 0; font-size: 1.05rem; cursor: pointer;
  color: var(--azul-900); padding: 4px 10px; border-radius: 6px;
}
.modal-duvida__fechar:hover { background: var(--azul-050); }
.duvida-detalhes {
  background: var(--azul-050); border-radius: var(--raio-sm);
  padding: 14px 16px; font-size: .92rem; margin-bottom: 14px;
}
.duvida-respondida {
  border-left: 3px solid var(--verde-500); background: #f2faf4;
  border-radius: 0 var(--raio-sm) var(--raio-sm) 0;
  padding: 12px 14px; font-size: .92rem; margin-bottom: 14px;
}
.modal-duvida__acoes { display: flex; justify-content: flex-end; gap: 10px; margin-top: 14px; }

/* Linhas de dúvida clicáveis (abrem o modal de resposta) */
#tbodyDuv tr.linha-duvida { cursor: pointer; }
#tbodyDuv tr.linha-duvida:hover { background: var(--azul-050); }

/* Aviso de manifestações duplicadas (painel) */
.aviso-dup {
  display: flex; flex-wrap: wrap; align-items: center; gap: 10px 14px;
  background: #fff7ed; border: 1px solid #fed7aa; border-radius: var(--raio-sm);
  padding: 10px 14px; margin-bottom: 12px; font-size: .88rem; color: #9a3412;
}
.aviso-dup span { flex: 1; min-width: 200px; }
.btn-mini--dedup {
  background: #ea580c; color: #fff; border: 0; border-radius: 6px;
  padding: 7px 12px; font-weight: 600; cursor: pointer; white-space: nowrap;
}
.btn-mini--dedup:hover { background: #c2410c; }
.btn-mini--dedup:disabled { opacity: .6; cursor: default; }

/* Mapa público da adesão por DRS (landing page) */
.mapa-card {
  background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio);
  box-shadow: var(--sombra-sm); padding: 24px;
}
.mapa-destaque { text-align: center; color: var(--azul-900); margin: 0 0 16px; font-size: 1.05rem; }
.mapa-wrap { position: relative; max-width: 820px; margin: 0 auto; min-height: 200px; }
.mapa-wrap svg { display: block; width: 100%; height: auto; }
.mapa-wrap path { transition: fill .15s ease, fill-opacity .3s ease; }
.mapa-wrap path:hover { stroke: var(--azul-900); stroke-width: 1.4; }
/* Fora da DRS selecionada na busca: esmaecido para dar contexto regional */
.mapa-fora-drs { fill-opacity: .22; }

/* Tabela flutuante com os municípios da DRS (aparece junto do zoom da busca) */
.mapa-flutuante {
  position: absolute; top: 10px; right: 10px; z-index: 25;
  width: 340px; max-width: calc(100% - 20px); max-height: 440px; overflow-y: auto;
  /* Fundo semitransparente: o mapa aparece por trás, desfocado. */
  background: rgba(255, 255, 255, .82); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px);
  border: 1px solid rgba(203, 213, 225, .8); border-radius: var(--raio-sm);
  box-shadow: var(--sombra-lg); padding: 12px 14px;
}
.mapa-flutuante__cabecalho {
  display: flex; justify-content: space-between; align-items: center; gap: 8px;
  font-size: .9rem; color: var(--azul-900);
}
.mapa-flutuante__fechar {
  background: none; border: 0; cursor: pointer; font-size: .95rem;
  color: var(--azul-900); padding: 2px 7px; border-radius: 4px; flex-shrink: 0;
}
.mapa-flutuante__fechar:hover { background: var(--azul-050); }
.mapa-flutuante__resumo { margin: 4px 0 8px; font-size: .8rem; color: #64748b; }
.mapa-flutuante__lista { list-style: none; margin: 0; padding: 0; font-size: .82rem; }
.mapa-flutuante__lista li {
  display: flex; justify-content: space-between; align-items: center; gap: 8px;
  padding: 3px 0; border-bottom: 1px solid #f1f5f9;
}
.mapa-flutuante__lista li:last-child { border-bottom: 0; }
.mapa-flutuante__lista .tag { flex-shrink: 0; }
.mapa-flutuante__etapa { display: block; color: #64748b; font-size: .72rem; line-height: 1.3; }
.mapa-flutuante { overflow-x: hidden; }
.mapa-flutuante__lista li > span:first-child { flex: 1 1 auto; min-width: 0; overflow-wrap: break-word; }
.mapa-flutuante__lista li > .tag { flex: 0 0 auto; white-space: nowrap; }
@media (max-width: 640px) {
  .mapa-flutuante { position: static; width: auto; max-height: 260px; margin-top: 12px; }
}
/* Escolha entre o mapa plano e o 3D (mapa-3d.js) */
.mapa-vista {
  display: flex; justify-content: center; gap: 0; margin: 0 auto 12px; width: fit-content;
  border: 1px solid var(--cinza-300); border-radius: 999px; overflow: hidden;
}
.mapa-vista button {
  font: inherit; font-size: .85rem; font-weight: 600; color: var(--azul-900);
  background: #fff; border: 0; padding: 6px 16px; cursor: pointer;
}
.mapa-vista button + button { border-left: 1px solid var(--cinza-300); }
.mapa-vista button[aria-pressed="true"] { background: var(--azul-900); color: #fff; }
.mapa-vista button:focus-visible { outline: 2px solid var(--azul-500); outline-offset: -2px; }
.mapa-3d {
  position: relative; max-width: 820px; margin: 0 auto; height: clamp(320px, 52vw, 520px);
  background: #f4f8fc; border-radius: var(--raio-sm); overflow: hidden;
}
.mapa-3d canvas { display: block; }
.mapa-3d__aviso { margin: 0; padding: 40px 16px; text-align: center; color: var(--azul-900); }
.mapa-3d__ajuda {
  position: absolute; left: 0; right: 0; bottom: 8px; margin: 0; pointer-events: none;
  text-align: center; font-size: .75rem; color: #64748b;
}
.mapa-tooltip {
  position: absolute; pointer-events: none; z-index: 20;
  background: var(--azul-900); color: #fff; font-size: .82rem; line-height: 1.45;
  padding: 8px 11px; border-radius: 8px; box-shadow: var(--sombra-lg); max-width: 250px;
}
.mapa-legenda {
  display: flex; flex-wrap: wrap; gap: 8px 16px; justify-content: center;
  align-items: center; margin-top: 16px; font-size: .85rem; color: var(--azul-900);
}
.mapa-legenda__titulo { font-weight: 600; }
.mapa-legenda i {
  display: inline-block; width: 14px; height: 14px; border-radius: 3px;
  margin-right: 6px; vertical-align: -2px; border: 1px solid rgba(0, 0, 0, .08);
}
.mapa-busca {
  display: flex; gap: 10px; justify-content: center; align-items: stretch;
  flex-wrap: wrap; max-width: 560px; margin: 0 auto 16px;
}
.mapa-busca .input { flex: 1; min-width: 220px; }
.mapa-mun--ativo {
  stroke: var(--azul-900) !important;
  stroke-width: 2.5 !important;
}

/* Área do Município — linha do tempo das etapas da descentralização */
.etapas-mun { display: flex; flex-direction: column; gap: 14px; margin-top: 20px; }
.etapa-mun {
  background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio);
  box-shadow: var(--sombra-sm); padding: 20px 22px; display: flex; gap: 16px;
}
.etapa-mun__num {
  width: 36px; height: 36px; border-radius: 50%; flex-shrink: 0;
  display: flex; align-items: center; justify-content: center;
  font-weight: 700; background: var(--cinza-200); color: #475569;
}
.etapa-mun--feita .etapa-mun__num { background: var(--verde-500); color: #fff; }
.etapa-mun--atual { border-color: var(--primaria); box-shadow: 0 0 0 3px var(--azul-050); }
.etapa-mun--atual .etapa-mun__num { background: var(--primaria); color: #fff; }
.etapa-mun--futura { opacity: .65; }
.etapa-mun h3 { margin: 4px 0 6px; }
.etapa-mun .acoes { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 12px; }
.termo-status { margin-top: 12px; font-size: .92rem; }
.termo-status .tag { margin-right: 6px; }
#termoMsg { margin-top: 10px; }

/* ---- Termo de Ciência e Concordância (Anexo II) na Área do Município ----
   O anexo é exibido como documento; as questões do final dele são os próprios
   campos do formulário, respondidos na tela. */
.termo-doc {
  margin: 18px 0 0;
  background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio);
  box-shadow: var(--sombra-sm); padding: 30px clamp(18px, 4vw, 42px);
}
.termo-doc__titulo {
  text-align: center; font-size: 1.16rem; font-weight: 800;
  letter-spacing: .01em; margin: 0 0 4px;
}
.termo-doc__sub {
  text-align: center; font-size: .84rem; font-style: italic;
  color: var(--cinza-500); margin: 0 0 8px;
}
.termo-doc p, .termo-doc li { text-align: justify; font-size: .94rem; }
.termo-doc ul { padding-left: 22px; margin: 0 0 1rem; }
.termo-doc li { margin-bottom: 8px; }
/* min-inline-size: fieldset não encolhe abaixo do conteúdo por padrão e
   estoura a página em telas estreitas (selects com opções longas). */
.termo-sec { border: 0; padding: 0; margin: 30px 0 0; min-inline-size: 0; }
.termo-sec__titulo {
  display: block; width: 100%; padding: 0 0 8px; margin: 0 0 14px;
  font-size: 1.02rem; font-weight: 700; color: var(--azul-900);
  border-bottom: 2px solid var(--azul-100);
}
.termo-obs {
  font-size: .84rem; font-style: italic; color: var(--cinza-500);
  border-left: 3px solid var(--cinza-200); padding-left: 12px; margin-bottom: 0;
}
/* Anexo 4: título de grupo (1. Requisitos…) acima das seções 1.1 a 1.6 e
   escolha no meio da frase da declaração. */
.termo-doc .termo-grupo {
  margin: 34px 0 -16px; font-size: 1.08rem; font-weight: 800; color: var(--azul-900); text-align: left;
}
.termo-frase { line-height: 2.1; }
.termo-frase .select { display: inline-block; width: auto; max-width: 100%; padding: 6px 10px; margin: 0 4px; }

/* Identificação: preenchida automaticamente pela plataforma */
.termo-ident {
  display: grid; grid-template-columns: max-content 1fr; gap: 1px; margin: 0;
  background: var(--cinza-200); border: 1px solid var(--cinza-200);
  border-radius: var(--raio-sm); overflow: hidden;
}
.termo-ident dt { background: var(--cinza-100); padding: 9px 14px; font-weight: 600; font-size: .89rem; }
.termo-ident dd { background: #fff; padding: 9px 14px; margin: 0; font-size: .94rem; }
@media (max-width: 560px) {
  .termo-ident { grid-template-columns: 1fr; }
  .termo-ident dt { padding-bottom: 2px; }
  /* Em telas estreitas o anexo é um cartão dentro do cartão da etapa; sem esta
     folga reduzida sobra pouca largura útil para o texto do documento. */
  .termo-doc { padding: 22px 14px; }
  .termo-focal { padding: 14px; }
  .termo-condicional { margin-left: 14px; padding: 13px 14px; }
}

/* Alternativas do anexo (uma por linha, como no documento) */
.termo-opcoes { display: flex; flex-direction: column; gap: 8px; margin-bottom: 16px; }
.termo-op {
  display: flex; gap: 11px; align-items: flex-start; cursor: pointer; font-size: .94rem;
  padding: 11px 13px; border: 1.5px solid var(--cinza-300); border-radius: var(--raio-sm);
  transition: border-color .15s, background .15s;
}
.termo-op:hover { border-color: var(--azul-500); background: var(--azul-050); }
.termo-op input { margin: 3px 0 0; accent-color: var(--primaria); flex-shrink: 0; }
.termo-op--sel { border-color: var(--primaria); background: var(--azul-050); font-weight: 600; }
.termo-condicional {
  margin: -6px 0 18px 28px; padding: 15px 17px;
  border-left: 3px solid var(--primaria); background: var(--azul-050);
  border-radius: 0 var(--raio-sm) var(--raio-sm) 0;
}
.termo-condicional .campo:last-child { margin-bottom: 0; }
#previsaoDias { max-width: 130px; }

/* Pontos focais */
.termo-focal {
  border: 1px solid var(--cinza-200); border-radius: var(--raio-sm);
  padding: 17px 19px; margin-bottom: 14px;
}
.termo-focal__titulo { font-weight: 700; color: var(--azul-900); margin: 0 0 14px; font-size: .98rem; }

/* Declaração final */
.termo-declaro {
  display: flex; gap: 12px; align-items: flex-start; cursor: pointer; font-size: .94rem;
  padding: 16px 17px; border: 1.5px solid var(--cinza-300); border-radius: var(--raio-sm);
  transition: border-color .15s, background .15s;
}
.termo-declaro input { margin: 2px 0 0; width: 18px; height: 18px; accent-color: var(--acento); flex-shrink: 0; }
.termo-declaro--sel { border-color: var(--acento); background: var(--verde-100); }
.termo-acoes {
  display: flex; gap: 10px; flex-wrap: wrap; align-items: center;
  margin-top: 26px; padding-top: 22px; border-top: 1px solid var(--cinza-200);
}
.termo-salvo { font-size: .86rem; color: var(--cinza-500); }

/* ---- Guia de preenchimento (Área do Município) ----
   Versão on-line expansível; a versão em PDF sai do mesmo conteúdo. */
.guia {
  background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio);
  box-shadow: var(--sombra-sm); margin: 18px 0 6px;
}
.guia__cabecalho {
  display: flex; align-items: center; gap: 14px; padding: 16px 20px;
  cursor: pointer; list-style: none;
}
.guia__cabecalho::-webkit-details-marker { display: none; }
.guia__cabecalho:hover { background: var(--azul-050); border-radius: var(--raio); }
.guia__icone { font-size: 1.4rem; }
.guia__titulos { flex: 1; min-width: 0; display: flex; flex-direction: column; }
.guia__titulos strong { color: var(--azul-900); }
.guia__titulos span { font-size: .85rem; color: var(--cinza-500); }
.guia__seta { color: var(--cinza-500); transition: transform .15s; }
.guia[open] .guia__seta { transform: rotate(180deg); }
.guia[open] .guia__cabecalho { border-bottom: 1px solid var(--cinza-200); border-radius: var(--raio) var(--raio) 0 0; }
.guia__corpo { padding: 18px 22px 22px; }
.guia__acoes { display: flex; justify-content: flex-end; margin-bottom: 4px; }
.guia h4 {
  margin: 22px 0 4px; font-size: 1.02rem; color: var(--azul-900);
  padding-bottom: 6px; border-bottom: 2px solid var(--azul-100);
}
.guia__secintro { font-size: .93rem; color: var(--cinza-700); margin: 8px 0 12px; }
.guia-passo { display: flex; gap: 12px; margin-bottom: 12px; }
.guia-passo__num {
  width: 26px; height: 26px; border-radius: 50%; flex-shrink: 0; margin-top: 1px;
  background: var(--azul-600); color: #fff; font-size: .82rem; font-weight: 700;
  display: flex; align-items: center; justify-content: center;
}
.guia-passo__txt { min-width: 0; }
.guia-passo__txt strong { display: block; color: var(--azul-900); font-size: .95rem; }
.guia-passo__txt p { margin: 2px 0 0; font-size: .92rem; text-align: justify; }
.guia__nota {
  font-size: .85rem; font-style: italic; color: var(--cinza-500);
  border-left: 3px solid var(--cinza-200); padding-left: 12px; margin: 10px 0 0;
}
.guia-passo__img {
  display: block; width: 100%; max-width: 560px; margin-top: 10px;
  border: 1px solid var(--cinza-200); border-radius: 10px; box-shadow: var(--sombra-sm);
}

/* ---- Relatório da etapa 2 (Termo de Ciência e Concordância) no painel ---- */
/* Rótulos do Anexo são longos: a coluna do rótulo ocupa a sobra e quebra. */
.bar-row--termo { grid-template-columns: minmax(0, 1fr) minmax(64px, 110px) 34px; font-size: .86rem; }
.bar-row--termo > span:first-child { line-height: 1.35; }

/* Barra compacta dentro de célula de tabela (andamento por DRS) */
.bar-inline {
  display: inline-flex; width: 96px; height: 12px; vertical-align: middle;
  background: var(--cinza-100); border-radius: 999px; overflow: hidden;
}
.bar-inline__pct { margin-left: 8px; font-size: .82rem; color: var(--cinza-500); }

/* Linha expansível com a resposta completa do município */
.linha-termo { cursor: pointer; }
.linha-termo:hover, .linha-termo:focus-visible { background: var(--azul-050); }
.linha-termo--aberta { background: var(--azul-050); }
.linha-termo--aberta td { font-weight: 600; }
.detalhe-termo > td { background: var(--azul-050); padding: 0; }
.det-grade {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 18px; padding: 18px 16px;
}
.det-bloco h5, .det-focal h5 {
  margin: 0 0 8px; font-size: .84rem; text-transform: uppercase; letter-spacing: .03em;
  color: var(--azul-700);
}
.det-item { display: flex; gap: 8px; font-size: .87rem; margin-bottom: 4px; line-height: 1.45; }
.det-item dt { font-weight: 600; color: var(--cinza-700); flex-shrink: 0; }
.det-item dd { margin: 0; color: var(--cinza-900); word-break: break-word; }
#avisoPendentes { margin-bottom: 12px; }

/* Comunicados publicados (landing): faixa de destaque logo abaixo do hero.
   O cabeçalho é fixo; a lista abaixo cresce com o que a equipe publicou. */
.secao--comunicado {
  padding: 26px 0; background: linear-gradient(90deg, var(--azul-050), #fff);
  border-bottom: 1px solid var(--azul-100);
}
.comunicado-cab { display: flex; align-items: center; gap: 18px; flex-wrap: wrap; }
.comunicado-banner__ico {
  flex: 0 0 auto; width: 56px; height: 56px; border-radius: 14px; font-size: 1.7rem;
  display: grid; place-items: center; background: var(--azul-100);
}
.comunicado-banner__texto { flex: 1; min-width: 240px; }
.comunicado-banner__rotulo {
  font-size: .76rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
  color: var(--azul-700);
}
.comunicado-cab h2 { font-size: 1.25rem; margin: 4px 0 2px; color: var(--azul-900); }
.comunicado-cab p { margin: 0; font-size: .9rem; }

.comunicado-lista { list-style: none; margin: 16px 0 0; padding: 0; display: grid; gap: 10px; }
.comunicado-item {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
  padding: 14px 18px; background: #fff; border: 1px solid var(--azul-100); border-radius: 12px;
}
/* O mais recente no topo ganha o peso — quem chega vê primeiro o que é novo. */
.comunicado-item:first-child { border-color: var(--azul-600); box-shadow: 0 1px 3px rgb(0 0 0 / .06); }
.comunicado-item__texto { flex: 1; min-width: 220px; }
.comunicado-item h3 { font-size: 1.02rem; margin: 0 0 2px; color: var(--azul-900); }
.comunicado-item p { margin: 0; font-size: .88rem; }
.comunicado-item .btn { flex: 0 0 auto; }

/* No celular o botão vira largura cheia: alvo de toque, não um link apertado
   no canto direito da linha. */
@media (max-width: 560px) {
  .comunicado-item { align-items: stretch; }
  .comunicado-item .btn { width: 100%; text-align: center; }
}

/* T.I.: unidades e ponto INTRAGOV — linha clicável abre o andamento */
.ti-linha { cursor: pointer; }
.ti-linha:hover td { background: var(--azul-050); }
.ti-linha:focus-visible { outline: 3px solid rgba(25,118,210,.4); outline-offset: -3px; }
.ti-form .campo { margin-bottom: 12px; }
.ti-form__datas { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 0 12px; }

/* Enviar comunicado */
.comunicado-grupo__qtd { color: var(--azul-600); font-weight: 600; }
#comAviso { margin-bottom: 12px; }

/* Comunicado: filtro composto (uma caixa por critério, combinadas com E) */
.com-filtros { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 14px 0 10px; }
.com-dias {
  display: flex; align-items: center; gap: 6px;
  font-size: .9rem; color: var(--cinza-700); white-space: nowrap;
}
.com-dias input { width: 82px; padding: 6px 8px; font-size: .9rem; }
.com-limpar {
  padding: 9px 14px; border: 1px solid var(--cinza-300); border-radius: 8px;
  background: #fff; color: var(--cinza-700); font-size: .9rem; font-weight: 500;
  cursor: pointer; transition: border-color .15s, color .15s;
}
.com-limpar:hover:not(:disabled) { border-color: var(--vermelho-500); color: var(--vermelho-500); }
.com-limpar:focus-visible { outline: 3px solid rgba(25,118,210,.4); }
.com-limpar:disabled { opacity: .45; cursor: default; }
.com-resumo { margin: 4px 0 2px; font-size: .9rem; line-height: 1.9; color: var(--cinza-700); }
.com-resumo strong {
  display: inline-block; padding: 2px 8px; border-radius: 999px;
  background: var(--azul-050); color: var(--azul-900); font-weight: 600;
}
.com-previa { margin: 4px 0 14px; }
.com-previa > summary { cursor: pointer; font-size: .9rem; color: var(--azul-700); font-weight: 500; }
.com-previa__grade {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(210px, 1fr));
  gap: 0 16px; margin-top: 8px; max-height: 260px; overflow-y: auto;
  font-size: .86rem;
}
.com-previa__item { padding: 4px 0; border-bottom: 1px solid var(--cinza-100); }
.com-previa__sem { color: var(--vermelho-500); }

/* Menu de navegação do painel administrativo (uma vista por vez) */
.painel-menu {
  display: flex; flex-wrap: wrap; gap: 6px;
  background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio);
  box-shadow: var(--sombra-sm); padding: 8px; margin-bottom: 8px;
}
.painel-menu button {
  font: inherit; font-weight: 600; font-size: .92rem; color: var(--cinza-700);
  background: none; border: 0; border-radius: 8px; padding: 9px 14px;
  cursor: pointer; white-space: nowrap; transition: all .15s ease;
}
.painel-menu button:hover { background: var(--cinza-100); color: var(--azul-900); }
.painel-menu button:focus-visible { outline: 3px solid rgba(25, 118, 210, .4); }
.painel-menu button.painel-menu__ativo { background: var(--primaria); color: #fff; }

/* Controle do formulário público (bloquear/desbloquear no painel) */
.form-controle {
  display: flex; justify-content: space-between; align-items: center;
  gap: 16px; flex-wrap: wrap;
}
.form-controle .tag { margin-right: 6px; }

/* Cabeçalhos ordenáveis das tabelas do painel */
.th-ordenavel { cursor: pointer; user-select: none; white-space: nowrap; }
.th-ordenavel:hover { background: var(--azul-050); color: var(--azul-900); }
.th-ordenavel[aria-sort="ascending"],
.th-ordenavel[aria-sort="descending"] { color: var(--primaria); }

/* Tabela interativa de adesão por DRS (abaixo do mapa) */
.tabela-drs__filtro { display: flex; justify-content: center; margin-bottom: 14px; }
.tabela-drs__filtro .select { max-width: 420px; }
.tabela-drs__wrap { max-width: 560px; margin: 0 auto; max-height: 420px; overflow-y: auto; }

/* Login admin */
.login-screen { min-height: 100vh; display: grid; place-items: center; background: linear-gradient(160deg, var(--azul-900), var(--azul-700)); padding: 24px; }
.login-card { background: #fff; border-radius: var(--raio); box-shadow: var(--sombra-lg); padding: 40px; width: 100%; max-width: 400px; }
.login-card .brand { justify-content: center; margin-bottom: 8px; }

/* ---- Responsivo ---- */
@media (max-width: 900px) {
  .grid--3 { grid-template-columns: 1fr; }
  .grid--2 { grid-template-columns: 1fr; }
  .kpis { grid-template-columns: repeat(2, 1fr); }
  .fin-grid { grid-template-columns: 1fr; }

  /* Menu colapsável (hambúrguer) — colapsa cedo para o título da marca caber */
  .nav-toggle { display: block; }
  .topnav {
    display: none; position: absolute; top: 100%; left: 0; right: 0;
    flex-direction: column; align-items: stretch; gap: 4px; padding: 10px 16px 14px;
    background: #fff; border-bottom: 1px solid var(--cinza-200); box-shadow: var(--sombra-md);
  }
  .topnav.open { display: flex; }
  .topnav a { padding: 12px 10px; }
  .topnav .btn { margin-top: 4px; }
}
@media (max-width: 640px) {
  .secao { padding: 52px 0; }
  .linha { grid-template-columns: 1fr; }
  .opcoes { grid-template-columns: 1fr; }
  .bar-row { grid-template-columns: 110px 1fr 44px; }
  .bar-row--fin { grid-template-columns: 100px 1fr 88px; }
  .hero__stats { gap: 24px; }
  .form-card { padding: 22px; }
  .brand__txt span { display: none; }
}
/* Painel DRS — escolha do tipo de acesso (regional inteira ou NAF) */
.escopo-acesso { border: 0; padding: 0; margin: 0 0 18px; }
.escopo-acesso legend {
  font-size: .82rem; font-weight: 700; letter-spacing: .03em; text-transform: uppercase;
  color: var(--cinza-600); margin-bottom: 8px; padding: 0;
}
.escopo-op {
  display: flex; gap: 11px; align-items: flex-start; cursor: pointer; font-size: .94rem;
  padding: 11px 13px; margin-bottom: 8px;
  border: 1.5px solid var(--cinza-300); border-radius: var(--raio-sm);
  transition: border-color .15s, background .15s;
}
.escopo-op:hover { border-color: var(--azul-500); background: var(--azul-050); }
.escopo-op input { margin: 3px 0 0; accent-color: var(--primaria); flex-shrink: 0; }
.escopo-op > span { display: flex; flex-direction: column; gap: 2px; }
.escopo-op .muted { font-size: .82rem; }
.escopo-op--sel { border-color: var(--primaria); background: var(--azul-050); }

/* ---- Painel DRS: listagem geral ---------------------------------------- */
/* Painel DRS: uma aba por etapa (mesmo visual do menu do painel). */
.drs-abas { margin: 18px 0 14px; }
.drs-aba__n {
  display: inline-block; min-width: 1.7em; padding: 0 6px; margin-left: 4px; border-radius: 999px;
  background: var(--cinza-100); color: var(--cinza-700); font-size: .76rem; font-weight: 700; text-align: center;
}
.painel-menu__ativo .drs-aba__n { background: rgba(255, 255, 255, .25); color: #fff; }
@media (max-width: 720px) {
  /* No celular as abas rolam na horizontal em vez de empilhar em 5 linhas. */
  .drs-abas { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; }
}
/* Item 8 da Autodeclaração (Análise da SES/SP) — formulário dos painéis. */
.analise-ses__opcoes { border: 0; padding: 0; margin: 0 0 12px; }
.analise-ses__opcoes legend { font-weight: 700; margin-bottom: 8px; color: var(--cinza-700); }
.analise-ses__dica { font-size: .78rem; font-weight: 400; }
.analise-ses__resumo { margin-top: 12px; padding: 10px 12px; border-radius: 8px; background: var(--cinza-100); font-size: .86rem; }
.analise-ses__resumo p { margin: 0 0 6px; }
.analise-ses__resumo dl { display: grid; grid-template-columns: minmax(120px, 38%) 1fr; gap: 4px 10px; margin: 0; }
.analise-ses__resumo dt { font-weight: 700; }
.analise-ses__resumo dd { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; }
.analise-ses__vazio { margin: 12px 0 0; font-size: .86rem; }
/* Painel → Ferramentas: scripts de manutenção. */
.ferr-lista { display: grid; gap: 16px; grid-template-columns: repeat(auto-fill, minmax(min(100%, 420px), 1fr)); margin-top: 14px; }
.ferr-card {
  border: 1px solid var(--cinza-200); border-radius: var(--raio); padding: 16px 18px; background: #fff;
  display: flex; flex-direction: column; gap: 8px; min-width: 0;
}
.ferr-card--perigo { border-color: #f0b4b4; background: #fffafa; }
.ferr-card h4 { margin: 0; font-size: 1rem; color: var(--azul-900); }
.ferr-card > p { margin: 0; font-size: .86rem; }
.ferr-campos { display: grid; gap: 8px; }
.ferr-campos .campo { margin: 0; }
.ferr-acoes { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 4px; }
.ferr-saida {
  margin: 4px 0 0; padding: 10px 12px; border-radius: var(--raio-sm); background: #0f1b2b; color: #d9e7f7;
  font: .78rem/1.5 ui-monospace, SFMono-Regular, Consolas, monospace; white-space: pre-wrap; overflow-wrap: anywhere;
  max-height: 320px; overflow: auto;
}
.ferr-saida--erro { background: #3a1212; color: #ffd7d7; }
.btn--perigo { background: var(--vermelho-500); color: #fff; border-color: var(--vermelho-500); }
.btn--perigo:hover:not(:disabled) { background: #b32f2f; }
.btn--perigo:disabled, .btn--acento:disabled { opacity: .45; cursor: not-allowed; }

/* Painel DRS → Documentos: seleção para baixar em ZIP. */
.docs-tipos { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin: 6px 0 10px; font-size: .86rem; }
.docs-acoes { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 12px; }
.docs-acoes .btn { margin-left: auto; }
.docs-itens { display: flex; flex-wrap: wrap; gap: 6px 14px; }
.docs-item { display: inline-flex; gap: 6px; align-items: flex-start; font-size: .86rem; max-width: 100%; overflow-wrap: anywhere; }

/* Campo obrigatório em branco na autodeclaração salva (destaque para completar). */
.campo--pendente { outline: 2px solid var(--vermelho-500); outline-offset: 4px; border-radius: 6px; background: var(--vermelho-100); }

/* Lembrete no topo da Área do Município (ex.: reassinar a autodeclaração). */
.lembrete-mun { margin: 0 0 16px; padding: 14px 16px; border-radius: 10px; }
.lembrete-mun p { margin: 0 0 8px; }
.lembrete-mun__titulo { font-weight: 700; font-size: 1rem; }
.lembrete-mun .termo-acoes { margin-top: 4px; }
.analise-ses-mun {margin-top: 16px; padding-top: 12px; border-top: 1px solid var(--cinza-100); }
.drs-lista-topo { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }
.drs-lista-topo h3 { margin: 0; }
/* A rolagem acontece DENTRO da caixa, nos dois eixos. Antes a barra horizontal
   ficava no fim da tabela — com 40 a 70 municípios, fora da tela — e a linha
   parecia cortada na borda. Com altura limitada, a barra fica sempre à vista
   e o cabeçalho continua preso no topo da caixa. */
.tabela-wrap--drs {
  max-height: calc(100vh - 150px); overflow: auto;
  border: 1px solid var(--cinza-200); border-radius: var(--raio-sm);
}
.tabela-wrap--drs:focus-visible { outline: 2px solid var(--azul-500); outline-offset: 2px; }
.dados--drs tbody td { vertical-align: top; }
/* Cabeçalho acima das células fixas do corpo ao rolar na vertical. */
.dados--drs thead th { z-index: 2; }
/* Município fixo à esquerda (col-fixa), estreito e com quebra de linha: um nome
   longo não pode ocupar metade da tela que sobra para o resto. */
.dados--drs .col-fixa { min-width: 150px; max-width: 200px; white-space: normal; }
.drs-naf { display: block; font-size: .76rem; font-weight: 400; color: var(--cinza-500); margin-top: 2px; }
.drs-fase { font-size: .78rem; }
/* Colunas de texto longo quebram linha em vez de alargar a tabela sem fim. */
.dados--drs .col-situacao { white-space: normal; min-width: 230px; max-width: 320px; }
.dados--drs td:nth-child(5), .dados--drs td:nth-child(6) { white-space: normal; min-width: 190px; }
.dados--drs .col-docs { white-space: normal; min-width: 210px; }
.dados--drs .col-docs .btn-mini { margin: 0 4px 4px 0; }
.dados--drs .tag { margin-bottom: 3px; }
.dados--drs .linha-vazia td { text-align: center; padding: 24px; white-space: normal; }

/* Celular: a tabela vira um cartão por município. Sete colunas não cabem em
   360 px nem com rolagem — só o nome e mais uma apareceriam por vez. No cartão
   cada informação ganha o seu rótulo (data-label) e nada fica escondido. */
@media (max-width: 720px) {
  #viewArea .panel { padding: 16px; }
  #viewArea .filtros .campo { flex: 1 1 100%; }
  .tabela-wrap--drs { max-height: none; overflow: visible; border: 0; border-radius: 0; }
  .dados--drs thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0,0,0,0); }
  .dados--drs, .dados--drs tbody, .dados--drs tr, .dados--drs td { display: block; width: 100%; }
  .dados--drs tr {
    background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio-sm);
    box-shadow: var(--sombra-sm); padding: 12px 14px; margin-bottom: 12px;
  }
  .dados--drs tbody tr:hover { background: #fff; }
  /* "table.dados.dados--drs" de propósito: precisa vencer a regra geral
     "table.dados td" (padding e borda de tabela), que é mais específica que
     ".dados--drs td" — sem isso o rótulo cobre o valor. */
  table.dados.dados--drs td {
    position: relative; border: 0; white-space: normal; min-width: 0; max-width: none;
    /* Altura mínima para o rótulo de duas linhas ("Previsão (etapa 1)")
       não encostar no rótulo seguinte quando o valor ocupa uma linha só. */
    padding: 5px 0 5px 112px; min-height: 38px;
  }
  table.dados.dados--drs td::before {
    content: attr(data-label); position: absolute; left: 0; top: 7px; width: 104px;
    font-size: .72rem; font-weight: 700; line-height: 1.25; letter-spacing: .02em;
    text-transform: uppercase; color: var(--cinza-500);
  }
  /* O nome do município é o título do cartão: sem rótulo, sem coluna fixa. */
  table.dados.dados--drs td.col-fixa {
    position: static; box-shadow: none; background: none; max-width: none;
    padding: 0 0 8px; margin-bottom: 4px; border-bottom: 1px solid var(--cinza-100); font-size: 1.02rem;
  }
  table.dados.dados--drs tbody tr:hover .col-fixa { background: none; }
  table.dados.dados--drs td.col-fixa::before { content: none; }
  /* Fora do roteiro, as etapas são só traços: no cartão, somem. */
  table.dados.dados--drs td.drs-sem-etapa { display: none; }
  .dados--drs .linha-vazia { border: 0; box-shadow: none; background: none; }
  table.dados.dados--drs .linha-vazia td { padding: 16px 0; }
  table.dados.dados--drs .linha-vazia td::before { content: none; }
}

.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); border: 0; }
.skip-link { position: absolute; left: -999px; top: 0; background: #fff; padding: 10px 16px; z-index: 100; }
.skip-link:focus { left: 8px; top: 8px; }

/* ---- FAQ público (/faq) ---- */
.faq-sumario { display: flex; flex-wrap: wrap; gap: 8px; margin: 4px 0 20px; }
.faq-sumario a {
  font-size: .82rem; font-weight: 600; text-decoration: none;
  color: var(--azul-700); background: var(--azul-100);
  padding: 6px 12px; border-radius: 999px;
}
.faq-sumario a:hover, .faq-sumario a:focus-visible { background: var(--azul-050); outline: 2px solid var(--azul-500); }

.faq-secao { margin-bottom: 28px; }
/* Âncora do sumário não some embaixo do cabeçalho fixo. */
.faq-secao h2 { font-size: 1.25rem; scroll-margin-top: 90px; }

.faq-item {
  background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio-sm);
  margin-bottom: 8px;
}
.faq-item summary {
  cursor: pointer; list-style: none; padding: 14px 40px 14px 16px;
  font-weight: 600; color: var(--azul-900); position: relative;
}
.faq-item summary::-webkit-details-marker { display: none; }
.faq-item summary::after {
  content: '▾'; position: absolute; right: 16px; top: 14px;
  color: var(--cinza-500); transition: transform .15s;
}
.faq-item[open] summary::after { transform: rotate(180deg); }
.faq-item summary:hover, .faq-item summary:focus-visible { background: var(--azul-050); border-radius: var(--raio-sm); }
.faq-item__corpo { padding: 0 16px 14px; border-top: 1px solid var(--cinza-100); padding-top: 12px; }
.faq-item__fonte { font-size: .8rem; color: var(--cinza-500); margin: 10px 0 0; }

/* Etapa 4 — seleção múltipla de municípios (CIB no painel, processo SEI no
   Painel DRS). Lista rolável dentro do diálogo: centenas de municípios não
   podem empurrar os botões de salvar para fora da tela. */
dialog.modal-cib { width: min(760px, calc(100vw - 32px)); max-height: calc(100vh - 32px); }
.sel-municipios { border: 1px solid var(--cinza-200); border-radius: var(--raio-sm); padding: 10px 12px 12px; margin: 4px 0 0; min-width: 0; }
.sel-municipios legend { font-weight: 600; font-size: .9rem; padding: 0 6px; }
.sel-municipios__filtros { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 8px; }
.sel-municipios__filtros .input, .sel-municipios__filtros .select { flex: 1; min-width: 150px; }
.sel-municipios__so { display: flex; align-items: center; gap: 6px; font-size: .88rem; white-space: nowrap; }
.sel-municipios__acoes { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-bottom: 6px; font-size: .86rem; }
.sel-municipios__acoes .muted { margin-right: auto; }
.sel-municipios__lista {
  max-height: min(340px, 42vh); overflow-y: auto; border: 1px solid var(--cinza-200);
  border-radius: var(--raio-sm); background: #fff;
}
.sel-municipio {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  padding: 7px 10px; border-bottom: 1px solid var(--cinza-200); cursor: pointer; font-size: .9rem;
}
.sel-municipio:last-child { border-bottom: 0; }
.sel-municipio:hover { background: var(--azul-050); }
.sel-municipio > span:first-of-type { flex: 1; min-width: 160px; }
.sel-municipio--ocupado { cursor: not-allowed; opacity: .7; }

/* Blocos da Etapa 4: uma Deliberação CIB (painel) ou um processo SEI (DRS). */
.cib-bloco { border: 1px solid var(--cinza-200); border-radius: var(--raio-sm); padding: 12px 14px; margin-top: 12px; }
.cib-bloco__topo { display: flex; justify-content: space-between; align-items: flex-start; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.cib-bloco__acoes { display: flex; gap: 6px; flex-wrap: wrap; }
.cib-bloco .tabela-wrap { margin: 0; }
.cib-bloco .dados td .btn-mini { margin: 2px 4px 2px 0; }

/* Área do Município — Etapa 4: dados em leitura e lista de complementares. */
.etapa4-dados { display: grid; grid-template-columns: max-content 1fr; gap: 6px 14px; margin: 10px 0 14px; font-size: .94rem; }
.etapa4-dados dt { font-weight: 600; color: var(--azul-900); }
.etapa4-dados dd { margin: 0; }
.etapa4-docs { list-style: none; padding: 0; margin: 8px 0 0; display: grid; gap: 6px; }
.etapa4-docs li { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; font-size: .9rem; }
.etapa4-docs li > span { flex: 1; min-width: 180px; word-break: break-word; }
@media (max-width: 560px) {
  .etapa4-dados { grid-template-columns: 1fr; gap: 2px; }
  .etapa4-dados dd { margin-bottom: 8px; }
}
.e4-subtitulo { font-size: 1rem; margin: 18px 0 6px; color: var(--azul-900); }

/* ---- Painel: Solicitação de link (chamado de acesso aos sistemas) ---- */
.sl-escolha { display: flex; gap: 12px; align-items: flex-end; flex-wrap: wrap; }
.sl-topo { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; flex-wrap: wrap; margin-bottom: 14px; }
.sl-grade { display: grid; grid-template-columns: minmax(220px, 380px) minmax(0, 1fr); gap: 6px 16px; align-items: center; }
.sl-grade label { font-size: .9rem; }
.sl-grade .sl-forte { font-weight: 700; }
.sl-sep { grid-column: 1 / -1; height: 1px; background: var(--cinza-200, #e3e7ee); margin: 8px 0; }
.sl-campo.sl-vazio, .sl-amarelo { background: #fff2cc; }
.sl-amarelo { padding: 0 4px; border-radius: 3px; }
.sl-pessoas .input { min-width: 110px; }
.sl-pessoas td:first-child .input { min-width: 240px; }
.sl-acoes { display: flex; gap: 10px; flex-wrap: wrap; position: sticky; bottom: 0; z-index: 2; }
.sl-link { background: none; border: 0; padding: 0; color: var(--azul-700, #0b4f8a); text-decoration: underline; cursor: pointer; font: inherit; }
@media (max-width: 700px) { .sl-grade { grid-template-columns: 1fr; } .sl-grade label { margin-top: 6px; } }

/* =========================================================================
   Tema institucional (redesenho 10/2026)
   Camada final: sobrepõe os componentes acima com a linguagem de site de
   governo — superfícies brancas sobre cinza-claro, azul-marinho para estrutura,
   verde só para ação, cantos discretos, sem gradientes nem "pulos" no hover.
   ========================================================================= */
body { color: var(--cinza-900); font-feature-settings: 'tnum' 1, 'cv11' 1; }
h1 { font-weight: 750; letter-spacing: -.015em; }
h2 { font-weight: 700; letter-spacing: -.01em; }
a { color: var(--azul-600); text-underline-offset: 2px; }
:focus-visible { outline: 3px solid rgba(38, 112, 200, .45); outline-offset: 2px; }

/* Faixa do governo, acima de todos os cabeçalhos */
.gov-faixa { background: var(--azul-900); color: #c9d7ea; font-size: .74rem; letter-spacing: .02em; }
.gov-faixa .container { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 30px; }
.gov-faixa strong { color: #fff; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; font-size: .7rem; }
.gov-faixa__sep { display: inline-block; width: 1px; height: 12px; background: rgba(255, 255, 255, .25); margin: 0 10px; vertical-align: middle; }
.gov-faixa a { color: #c9d7ea; text-decoration: none; }
.gov-faixa a:hover { color: #fff; text-decoration: underline; }
@media (max-width: 640px) {
  .gov-faixa__extra { display: none; }
  .gov-faixa .container > span:first-child { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; }
}

/* Marca: selo azul-marinho sólido, com filete verde de "ação" */
.brand__logo {
  background: var(--azul-800); border-radius: 6px; font-size: .7rem; letter-spacing: .06em;
  box-shadow: inset 0 -3px 0 var(--verde-500);
}
.brand__txt strong { font-weight: 700; }

/* Cabeçalho do site público */
.topbar { background: #fff; backdrop-filter: none; border-bottom: 1px solid var(--cinza-200); box-shadow: 0 1px 0 rgba(12, 35, 64, .03); }
.subnav a { color: var(--cinza-600); }
.topnav a { border-radius: var(--raio-sm); }

/* Botões: firmes, sem deslocamento no hover */
.btn { border-radius: var(--raio-sm); padding: 11px 20px; font-weight: 600; border-width: 1.5px; letter-spacing: .005em; transition: background-color .15s, border-color .15s, color .15s, box-shadow .15s; }
.btn--primario:hover, .btn--acento:hover, .btn--encerrado:hover { transform: none; box-shadow: none; }
.btn--primario:hover { background: var(--azul-800); }
.btn--acento:hover { background: #12643d; }
.btn--ghost { color: var(--azul-700); border-color: var(--cinza-300); background: #fff; }
.btn--ghost:hover { border-color: var(--azul-600); background: var(--azul-050); color: var(--azul-800); }
.btn--grande { padding: 14px 26px; font-size: 1rem; }

/* Topo da página inicial: claro, título forte, mapa como peça principal */
.hero { background: var(--cinza-050); color: var(--cinza-900); padding: 56px 0 64px; border-bottom: 1px solid var(--cinza-200); }
.hero::before {
  content: ""; position: absolute; inset: 0 0 auto 0; height: 4px;
  background: linear-gradient(90deg, var(--azul-700) 0 70%, var(--verde-500) 70% 85%, var(--dourado) 85% 100%);
}
.hero h1 { color: var(--azul-900); }
.hero p.lead { color: var(--cinza-700); font-size: 1rem; line-height: 1.7; max-width: 62ch; }
.hero .pill {
  background: #fff; color: var(--azul-700); border: 1px solid var(--azul-100); border-left: 3px solid var(--azul-700);
  border-radius: 4px; font-size: .8rem; letter-spacing: .01em;
}
.hero .pill:hover { background: var(--azul-050); }
.hero__acoes .btn--ghost { color: var(--azul-700); border-color: var(--cinza-300); background: #fff; }
.hero__acoes .btn--ghost:hover { background: var(--azul-050); border-color: var(--azul-600); }
/* Números do topo: faixa de indicadores com divisórias, não texto solto */
.hero__stats {
  gap: 0; margin-top: 36px; background: #fff; border: 1px solid var(--cinza-200); border-radius: var(--raio);
  display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
}
.hero__stats[hidden] { display: none; }
.hero__stat { padding: 14px 18px; border-left: 1px solid var(--cinza-200); }
.hero__stat:first-child { border-left: 0; }
.hero__stat strong { color: var(--azul-900); font-size: 1.6rem; font-weight: 750; line-height: 1.15; }
.hero__stat span { color: var(--cinza-500); font-size: .8rem; }
.hero__fases { margin-top: 12px; }
.hero__fases .hero__stat strong { font-size: 1.35rem; }
.hero__fase-cor { border-color: rgba(12, 35, 64, .25); }
.hero__mapa { box-shadow: var(--sombra-md); border: 1px solid var(--cinza-200); border-top: 3px solid var(--azul-700); border-radius: var(--raio); }
.hero__mapa-titulo { text-align: left; font-size: 1.05rem; }

/* Seções e cartões */
.secao--alt { background: var(--cinza-050); border-top: 1px solid var(--cinza-200); border-bottom: 1px solid var(--cinza-200); }
.card { border-radius: var(--raio); box-shadow: none; border-color: var(--cinza-200); }
.card--link:hover { transform: none; border-color: var(--azul-600); box-shadow: var(--sombra-md); }
.card__ico { border-radius: 8px; }
details.accordion { box-shadow: none; }
.passo__num { background: var(--azul-800); }

/* Formulários */
.input, .select, .textarea { border-width: 1px; border-radius: var(--raio-sm); padding: 10px 12px; }
.input:hover, .select:hover, .textarea:hover { border-color: var(--cinza-500); }
.input:focus, .select:focus, .textarea:focus { border-color: var(--azul-600); box-shadow: 0 0 0 3px rgba(38, 112, 200, .16); }
.campo label { font-size: .9rem; color: var(--cinza-700); }
.form-card { box-shadow: none; border-top: 3px solid var(--azul-700); }
.alerta { border-radius: var(--raio-sm); border-left-width: 4px; }

/* Rodapé */
.footer { background: var(--azul-900); color: #b8c8de; border-top: 4px solid var(--verde-500); padding: 36px 0; }
.footer strong { color: #fff; }

/* ---- Áreas internas (painel, DRS, município, secretário) ---- */
.admin-body { background: var(--cinza-050); }
.admin-top { background: #fff; color: var(--cinza-900); border-bottom: 1px solid var(--cinza-200); box-shadow: 0 1px 0 rgba(12, 35, 64, .03); }
.admin-top .container { height: 60px; }
.admin-top .brand { color: var(--azul-900); }
.admin-top .brand__txt span { color: var(--cinza-500); }
/* Os botões do topo nasceram para fundo azul (texto branco inline): no topo
   claro voltam ao contorno padrão. */
.admin-top .btn--ghost { color: var(--azul-700) !important; border-color: var(--cinza-300) !important; background: #fff; }
.admin-top .btn--ghost:hover { border-color: var(--azul-600) !important; background: var(--azul-050); }

.panel { border-radius: var(--raio); box-shadow: none; border-color: var(--cinza-200); padding: 22px 24px; }
.panel h3 { font-size: 1.08rem; color: var(--azul-900); }
.panel h4 { color: var(--azul-800); }
.kpi { border-radius: var(--raio); box-shadow: none; border-top: 3px solid var(--azul-700); padding: 18px 20px; }
.kpi__label { font-size: .74rem; letter-spacing: .06em; color: var(--cinza-500); }
.kpi__valor { font-size: 1.9rem; font-weight: 750; letter-spacing: -.01em; }
.funil-resumo { background: #fff; border: 1px solid var(--cinza-200); border-left: 4px solid var(--azul-700); border-radius: var(--raio-sm); }

/* Tabelas: cabeçalho discreto em caixa alta, linhas separadas por filete */
table.dados { font-size: .86rem; }
table.dados th {
  background: var(--cinza-050); color: var(--cinza-600); font-size: .72rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em; border-bottom: 1px solid var(--cinza-300);
}
table.dados td { border-bottom-color: var(--cinza-100); }
table.dados tbody tr:hover, table.dados tbody tr:hover .col-fixa, table.dados tbody tr:hover .col-acoes { background: var(--azul-050); }
table.dados thead .col-fixa, table.dados thead .col-acoes { background: var(--cinza-050); }
.tabela-wrap { border: 1px solid var(--cinza-200); border-radius: var(--raio-sm); }

/* Etiquetas de situação: retangulares, com borda do próprio tom */
.tag { border-radius: 4px; padding: 2px 8px; font-size: .74rem; font-weight: 650; border: 1px solid transparent; letter-spacing: .01em; }
.tag--sim { border-color: #b9e0c9; }
.tag--nao { border-color: #f0c3c3; }
.tag--mais { border-color: #f1d58a; }
.tag--neutro { border-color: var(--cinza-200); }

/* Login */
.login-screen { background: linear-gradient(180deg, var(--azul-900), var(--azul-800)); }
.login-card { border-radius: var(--raio); border-top: 4px solid var(--verde-500); }

/* Abas (DRS e telas estreitas) */
.painel-menu { border-radius: var(--raio); box-shadow: none; padding: 6px; gap: 4px; }
.painel-menu button { border-radius: var(--raio-sm); font-weight: 600; font-size: .88rem; color: var(--cinza-600); }
.painel-menu button.painel-menu__ativo { background: var(--azul-700); color: #fff; }
.painel-menu__grupo { display: none; }

/* Menu lateral: painel administrativo e Painel DRS em telas largas.
   O <main> vira grade de duas colunas; o menu ocupa a primeira (fixo ao
   rolar) e todo o resto do conteúdo vai para a segunda. */
@media (min-width: 1100px) {
  main.painel-shell {
    display: grid; grid-template-columns: 252px minmax(0, 1fr); column-gap: 28px; align-items: start;
  }
  main.painel-shell > * { grid-column: 2; min-width: 0; }
  main.painel-shell > .painel-menu {
    grid-column: 1; grid-row: 1 / span 60; position: sticky; top: 76px; align-self: start;
    flex-direction: column; flex-wrap: nowrap; gap: 1px; padding: 10px 8px; margin: 0;
    max-height: calc(100vh - 96px); overflow-y: auto;
  }
  main.painel-shell > .painel-menu button {
    width: 100%; text-align: left; white-space: normal; line-height: 1.3; padding: 8px 12px;
    border-left: 3px solid transparent; border-radius: 0 var(--raio-sm) var(--raio-sm) 0;
    display: flex; justify-content: space-between; align-items: flex-start; gap: 8px;
  }
  main.painel-shell > .painel-menu button:hover { background: var(--cinza-050); color: var(--azul-900); }
  main.painel-shell > .painel-menu button.painel-menu__ativo {
    background: var(--azul-050); color: var(--azul-800); border-left-color: var(--azul-700);
  }
  main.painel-shell .painel-menu__grupo {
    display: block; margin: 14px 12px 4px; font-size: .68rem; font-weight: 700;
    text-transform: uppercase; letter-spacing: .08em; color: var(--cinza-500);
  }
  main.painel-shell .painel-menu__grupo:first-child { margin-top: 4px; }
  /* Os contadores das abas da DRS vão para a direita, como num menu lateral. */
  main.painel-shell .drs-aba__n { flex: none; margin: 1px 0 0; }
  main.painel-shell .painel-menu__ativo .drs-aba__n { background: var(--azul-100); color: var(--azul-800); }
}

/* A faixa do governo soma 30px acima das telas de login de altura cheia. */
body:has(> .gov-faixa) .login-screen { min-height: calc(100vh - 30px); }
/* Números do topo: textos longos ("Fundo a fundo") não quebram a faixa. */
.hero__stat strong { font-size: clamp(1.15rem, 1.6vw, 1.5rem); }

/* ---- Tema institucional: páginas de conteúdo (formulário, FAQ) e secretário ---- */
/* Faixa de título das páginas internas do site: trilha, título e apoio. */
.pagina-topo { background: #fff; border-bottom: 1px solid var(--cinza-200); padding: 28px 0 26px; position: relative; }
.pagina-topo::after {
  content: ""; position: absolute; left: 0; right: 0; bottom: -1px; height: 3px;
  background: linear-gradient(90deg, var(--azul-700) 0 70%, var(--verde-500) 70% 85%, var(--dourado) 85% 100%);
}
.pagina-topo h1 { font-size: clamp(1.6rem, 3vw, 2.1rem); margin: 6px 0 8px; }
.pagina-topo__apoio { color: var(--cinza-700); max-width: 70ch; margin: 0; }
.trilha { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; font-size: .8rem; color: var(--cinza-500); }
.trilha a { color: var(--azul-600); text-decoration: none; font-weight: 600; }
.trilha a:hover { text-decoration: underline; }
.trilha__sep { color: var(--cinza-300); }
.pagina-corpo { padding: 32px 0 64px; background: var(--cinza-050); }

/* Formulário de manifestação: seções numeradas */
.form-legenda {
  display: flex; align-items: center; gap: 10px; width: 100%;
  font-weight: 700; color: var(--azul-900); font-size: 1.05rem;
  padding-bottom: 10px; margin-bottom: 18px; border-bottom: 1px solid var(--cinza-200);
}
.form-legenda__n {
  display: inline-grid; place-items: center; width: 26px; height: 26px; flex: none;
  border-radius: 6px; background: var(--azul-800); color: #fff; font-size: .82rem;
}
.form-secao { border: 0; padding: 0; margin: 0 0 26px; min-width: 0; }
/* Opções de adesão: marcador de cor no lugar dos emojis */
.opcao__box { border-width: 1px; padding: 14px 14px 14px 16px; border-left-width: 4px; border-left-color: var(--cinza-300); }
.opcao__box strong { display: flex; align-items: center; gap: 8px; color: var(--cinza-900); }
.opcao__marca { width: 10px; height: 10px; border-radius: 2px; flex: none; }
.opcao__marca--sim { background: var(--verde-500); }
.opcao__marca--mais { background: var(--amarelo-500); }
.opcao__marca--nao { background: var(--vermelho-500); }
.opcao:hover .opcao__box { border-color: var(--azul-500); }
.opcao input:checked + .opcao__box { border-color: var(--azul-600); border-left-color: var(--azul-700); background: var(--azul-050); box-shadow: none; }
.form-aviso { font-size: .9rem; margin: 0 0 22px; }

/* FAQ */
.faq-sumario { gap: 6px; }
.faq-sumario a {
  background: #fff; color: var(--azul-700); border: 1px solid var(--cinza-200);
  border-radius: 4px; padding: 6px 12px; font-size: .8rem;
}
.faq-sumario a:hover, .faq-sumario a:focus-visible { background: var(--azul-050); border-color: var(--azul-600); outline: 0; }
.faq-secao h2 { font-size: 1.1rem; color: var(--azul-900); padding-bottom: 8px; border-bottom: 2px solid var(--azul-100); }
.faq-item { border-radius: var(--raio-sm); border-left: 3px solid transparent; transition: border-color .15s; }
.faq-item[open] { border-left-color: var(--azul-700); box-shadow: var(--sombra-sm); }
.faq-item summary { font-weight: 600; }
.faq-item summary:hover, .faq-item summary:focus-visible { background: var(--cinza-050); }
.faq-busca .input { padding-left: 38px; background: #fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23667385' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='7'/%3E%3Cpath d='m20 20-3.5-3.5'/%3E%3C/svg%3E") no-repeat 12px center; }
.bloco-titulo { margin: 44px 0 18px; padding-top: 22px; border-top: 1px solid var(--cinza-200); }
.bloco-titulo h2 { font-size: 1.3rem; margin-bottom: 6px; scroll-margin-top: 90px; }
.bloco-titulo p { color: var(--cinza-700); margin: 0; }

/* Área do Secretário */
.pagina-titulo { font-size: 1.55rem; margin-bottom: 4px; }
.pagina-titulo + .muted { margin-top: 0; max-width: 90ch; }
.passos-lote { list-style: none; counter-reset: lote; display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 14px; margin: 12px 0 0; padding: 0; }
.passos-lote li {
  counter-increment: lote; position: relative; background: var(--cinza-050);
  border: 1px solid var(--cinza-200); border-radius: var(--raio-sm); padding: 14px 16px 14px 54px; line-height: 1.55; font-size: .92rem;
}
.passos-lote li::before {
  content: counter(lote); position: absolute; left: 16px; top: 14px; width: 26px; height: 26px;
  display: grid; place-items: center; border-radius: 6px; background: var(--azul-800); color: #fff; font-weight: 700; font-size: .82rem;
}
.passos-lote strong { display: block; color: var(--azul-900); }
.envio-arquivos {
  border: 1.5px dashed var(--cinza-300); border-radius: var(--raio); background: var(--cinza-050);
  padding: 18px; text-align: center; transition: border-color .15s, background .15s;
}
.envio-arquivos:hover, .envio-arquivos:focus-within { border-color: var(--azul-600); background: var(--azul-050); }
.envio-arquivos .input { background: transparent; border: 0; padding: 6px; max-width: 520px; margin: 0 auto; display: block; }
.pagina-topo .req { color: var(--vermelho-500); }
