/* =====================================================================
   REPOSITÓRIO EXCLUSIVEBEE — folha única de estilo
   Gerado em 2026-08-29, a partir do mockup v5 aprovado.

   TODA cor mora aqui, em variável. Nenhuma cor solta em arquivo de tela.
   O Portal Colmeia terminou com 372 cores cravadas em 31 arquivos, e
   trocar a paleta virou um trabalho de semanas. Aqui é um arquivo.

   Contraste conferido em 2026-08-29 — 14 pares, 14 aprovados:
     ink/card 15.97   mut/card 6.07    melTxt/card 6.92   ok/card 7.87
     erro/card 6.54   branco/ink 15.97 ink/mel 8.62       foco/card 5.13
     linha-campo/card 3.50 (componente de interface, mínimo 3:1)
     --linha (1.33) é DECORATIVA. Nunca use para borda de campo.
   ===================================================================== */

:root{
  --ink:#14213D; --mut:#56637A; --bg:#F5F7FA; --card:#FFFFFF;
  --linha:#D9E0E8; --linha-campo:#7E8A9C;
  --mel:#F5B301; --mel-txt:#7A5200; --mel-fraco:#FFF6E0;
  --ok:#1B5E20; --ok-fraco:#E8F3E9;
  --erro:#B3261E; --erro-fraco:#FCEBEA;
  --foco:#0B5FFF;
  --r:10px; --sombra:0 1px 2px rgba(20,33,61,.08), 0 4px 12px rgba(20,33,61,.06);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--ink);
  font:15px/1.55 'Segoe UI', system-ui, -apple-system, Roboto, Arial, sans-serif}
h1,h2,h3{margin:0 0 4px;line-height:1.25}
h1{font-size:22px} h2{font-size:17px} h3{font-size:14px}
p{margin:0 0 10px}
a{color:var(--mel-txt)}
code{background:#F0F3F7;padding:2px 6px;border-radius:5px;font-size:.92em}

/* Foco visível em tudo. Nunca use outline:none neste projeto. */
:focus-visible{outline:3px solid var(--foco);outline-offset:2px;border-radius:4px}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
}

/* Pular para o conteúdo: primeiro item do foco, em toda tela. */
.pular{position:absolute;left:-9999px;top:0;background:var(--mel);color:var(--ink);
  padding:10px 16px;border-radius:0 0 8px 0;font-weight:600;z-index:100}
.pular:focus{left:0}

/* --------------------- casca: EXATAMENTE 2 filhos --------------------- */
.app{display:grid;grid-template-columns:236px 1fr;min-height:100vh}
.side{background:var(--ink);color:#E6EBF5;padding:16px 12px;min-width:0}
.conteudo{padding:22px 26px 60px;min-width:0}
/* A MARCA DO MENU LATERAL.
   [ERRO 2026-09-03] Esta classe se chamava `.marca`, e o modificador do
   botão primário se chama `.btn.marca`. Nome igual para duas coisas
   diferentes: os 40 botões amarelos do sistema herdavam daqui um
   `margin-bottom:14px` e um `border-bottom` do menu escuro.
   Resultado visível: em toda tela, o botão primário do cabeçalho ficava
   14px mais alto que o botão ao lado, e o Anderson viu isso como
   "os botões estão desalinhados". Estavam mesmo, e a causa não era o
   alinhamento do cabeçalho: era colisão de nome de classe.
   `.marca b` e `.marca span` também vazavam para dentro de qualquer botão
   primário com <b> ou <span> dentro, pintando o texto de branco ou cinza
   claro sobre amarelo — contraste que nunca foi conferido.
   O nome novo é único no projeto. O verificador reprova quem reintroduzir
   um seletor de classe que também é modificador de botão. */
.marca-side{display:flex;gap:9px;align-items:center;padding:0 6px 16px;
  border-bottom:1px solid #2A3A5C;margin-bottom:14px}
.marca-side .hex{width:26px;height:26px;background:var(--mel);border-radius:7px;flex:0 0 auto}
.marca-side b{font-size:14px;color:#fff;display:block}
.marca-side span{font-size:11.5px;color:#A9B6D0}
/* seletor de empresa (pacote 006): so aparece para quem tem mais de uma.
   Fica ACIMA do menu, colado na marca, porque ele muda o significado de
   tudo que vem abaixo. */
/* [ERRO 2026-08-31] Aqui tinha 'margin:-6px' para encostar o seletor na
   marca. O proprio verificador reprovou, com a regra que ele carrega
   desde o E-232: margem negativa vira sobreposicao quando o vizinho
   muda de altura — e o vizinho aqui e o nome da empresa, que muda de
   tamanho conforme a empresa. Nao abri excecao. */
.troca-empresa{display:flex;gap:6px;align-items:center;margin:0 6px 14px}
.troca-empresa select{flex:1 1 auto;min-width:0;font-size:12.5px;padding:7px 8px;
  border-radius:8px;border:1px solid #2A3A5C;background:#16223C;color:#E6EBF5;
  min-height:38px}
.troca-empresa select:focus-visible{outline:2px solid var(--mel);outline-offset:1px}
.troca-empresa .btn{flex:0 0 auto;min-height:38px;padding:7px 10px;font-size:12.5px}
.side nav ul{list-style:none;margin:0;padding:0}
.side nav a{display:flex;gap:9px;align-items:center;padding:9px 10px;
  border-radius:8px;color:#D5DEEE;text-decoration:none;font-size:14px;margin-bottom:2px;min-height:44px}
.side nav a:hover{background:#22314F;color:#fff}
.side nav a[aria-current="page"]{background:var(--mel);color:var(--ink);font-weight:600}
/* PACOTE 012 — setor fechado saiu do menu. No lugar da lista cinza
   (.bloq, apagada aqui junto), a única coisa que aparece quando não há
   setor liberado é esta frase, que manda a pessoa para onde tem saída. */
.side-vazio{color:#93A1BC;font-size:12.5px;line-height:1.5;padding:2px 10px 6px;margin:0}
.side-vazio b{color:#D5DEEE}
.side .grupo{font-size:11px;text-transform:uppercase;letter-spacing:.6px;color:#93A1BC;
  padding:14px 10px 6px;margin:0}
.rodape-side{margin-top:20px;padding:10px;border-top:1px solid #2A3A5C;font-size:11.5px;color:#93A1BC}
.rodape-side a{color:#C9D2E4}

/* Botão da gaveta do celular. Fica escondido no computador, mas nunca
   com display:none em cima do <nav>: no Colmeia isso deixou o menu
   inalcançável por teclado no celular, e foi a fragilidade nº 1. */
.abre-menu{display:none;min-height:44px;padding:10px 14px;border-radius:8px;
  border:1px solid var(--linha-campo);background:#fff;color:var(--ink);
  font:600 14px/1 inherit;cursor:pointer;margin-bottom:14px}

/* --------------------- cabeçalho de tela --------------------- */
/* O CABEÇALHO DE TELA (revisto no pacote 010).

   O DEFEITO: `align-items:flex-start` alinhava pelo TOPO o título (27px de
   altura de linha) e o botão (44px de alvo de dedo). Alinhar pelo topo
   caixas de alturas diferentes joga o texto do botão 8px abaixo do texto
   do título — desencontro medido em TODA tela com botão no cabeçalho.

   `align-items:center` não resolve: ele centra o botão contra o bloco
   inteiro (título + subtítulo), então o desencontro só troca de valor e
   passa a depender do tamanho do subtítulo.

   A REGRA CERTA é: o botão alinha com a PRIMEIRA LINHA do título. Isso se
   consegue empurrando o bloco de título para baixo pela metade da
   diferença entre as duas alturas — (44 - 27) / 2 = 8px — e mantendo o
   topo como referência. Vale para título de uma linha e de três.

   Nada de margem negativa (P-527): é padding no bloco de título.

   O SEGUNDO DEFEITO era `justify-content:space-between`: ao quebrar a
   linha ele jogava o grupo de botões para a ESQUERDA. A ficha do
   documento, com cinco botões, virava uma fileira solta embaixo do
   título. Agora o bloco de título cresce e o de ações tem
   `margin-left:auto` — quebrando ou não, as ações ficam na direita. */
.cabeca{display:flex;align-items:flex-start;gap:12px 16px;
  flex-wrap:wrap;margin-bottom:18px}
.cabeca > :first-child{flex:1 1 300px;min-width:0}
.cabeca > :first-child:not(:only-child){padding-top:8px}
.cabeca > :first-child ~ *{margin-left:auto}
/* Botão que sobra do grupo desce alinhado à direita, e não à esquerda. */
.cabeca .linha{justify-content:flex-end}
.cabeca .sub{color:var(--mut);font-size:13.5px;margin:0}

@media (max-width:700px){
  /* No aparelho estreito, empurrar as ações para a direita deixa alvo de
     dedo na quina. Elas ocupam a largura e dividem o espaço por igual —
     e o empurrão de 8px perde a razão de ser, porque nada fica ao lado. */
  .cabeca > :first-child:not(:only-child){padding-top:0}
  .cabeca > :first-child ~ *{margin-left:0;width:100%}
  .cabeca .linha{justify-content:flex-start}
  .cabeca .linha > .btn,
  .cabeca .linha > form > .btn{flex:1 1 140px}
  .cabeca .linha > form{flex:1 1 140px;display:flex}
}

@media (max-width:700px){
  /* No aparelho estreito, empurrar as ações para a direita deixa alvo de
     dedo na quina. Elas ocupam a largura e dividem o espaço por igual. */
  .cabeca{align-items:stretch}
  .cabeca > :first-child ~ *{margin-left:0;width:100%}
  .cabeca .linha{justify-content:flex-start}
  .cabeca .linha > .btn,
  .cabeca .linha > form > .btn{flex:1 1 140px}
  .cabeca .linha > form{flex:1 1 140px;display:flex}
}
.trilha{font-size:12.5px;color:var(--mut);margin:0 0 6px}
.trilha a{color:var(--mut)}

/* --------------------- componentes --------------------- */
.card{background:var(--card);border:1px solid var(--linha);border-radius:var(--r);
  padding:16px;box-shadow:var(--sombra);min-width:0}
.card>*{min-width:0}
.grade{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}
.grade>*{min-width:0}
.duas{display:grid;grid-template-columns:1fr 320px;gap:16px}
.duas>*{min-width:0}

.btn{display:inline-flex;align-items:center;gap:7px;justify-content:center;
  min-height:44px;padding:10px 16px;border-radius:8px;border:1px solid transparent;
  background:var(--ink);color:#fff;font:600 14px/1 'Segoe UI',system-ui,sans-serif;
  cursor:pointer;text-decoration:none}
.btn:hover{background:#0E1830}
.btn.marca{background:var(--mel);color:var(--ink)}
.btn.sec{background:#fff;color:var(--ink);border-color:var(--linha-campo)}
.btn.perigo{background:#fff;color:var(--erro);border-color:var(--erro)}
.btn.sm{min-height:36px;padding:7px 12px;font-size:13px}
.btn[disabled]{opacity:.55;cursor:not-allowed}

.pilula{display:inline-block;padding:3px 9px;border-radius:99px;font-size:11.5px;
  font-weight:600;border:1px solid var(--linha-campo);color:var(--mut);background:#fff;white-space:nowrap}
.pilula.ok{background:var(--ok-fraco);color:var(--ok);border-color:var(--ok)}
.pilula.mel{background:var(--mel-fraco);color:var(--mel-txt);border-color:var(--mel-txt)}
.pilula.erro{background:var(--erro-fraco);color:var(--erro);border-color:var(--erro)}

.abas{display:flex;gap:2px;border-bottom:2px solid var(--linha);margin-bottom:18px;flex-wrap:wrap}
.abas a,.abas button{min-height:44px;border:0;background:none;padding:10px 18px;cursor:pointer;
  font:600 14px/1 'Segoe UI',system-ui,sans-serif;color:var(--mut);text-decoration:none;
  border-bottom:3px solid transparent;margin-bottom:-2px;display:inline-flex;align-items:center}
.abas [aria-selected="true"],.abas [aria-current="page"]{color:var(--ink);border-bottom-color:var(--mel)}

.prontidao{display:flex;gap:3px;margin:8px 0 6px}
.prontidao i{flex:1;height:7px;border-radius:99px;background:var(--linha)}
.prontidao i.cheio{background:var(--ok)}
.prontidao i.falta{background:var(--erro)}
/* [PACOTE 007] Um terceiro estado: material que EXISTE e venceu. Antes
   so havia cheio e falta, e "tem arquivo" era sinonimo de "pronto" —
   que e exatamente a mentira que o prazo veio consertar. */
.prontidao i.velho{background:var(--mel)}

.tabela-wrap{overflow-x:auto;border:1px solid var(--linha);border-radius:var(--r);background:#fff}
table{border-collapse:collapse;width:100%;font-size:14px}
th,td{text-align:left;padding:11px 13px;border-bottom:1px solid var(--linha);vertical-align:middle}
th{font-size:12px;text-transform:uppercase;letter-spacing:.4px;color:var(--mut);background:#FAFBFC}
tbody tr:last-child td{border-bottom:0}
td .acoes{display:flex;gap:6px;flex-wrap:wrap}

/* ---------------------------------------------------------------
   CAMPO DE FORMULÁRIO — um bloco só, sem margem negativa.
   [ERRO 2026-08-30] A versão anterior grudava a dica no campo com
   margin-top:-9px. Quando o CSP de produção matou os espaçadores
   inline, a dica subiu por cima da borda do campo e o formulário
   ficou ilegível. Margem negativa para colar dois elementos é frágil
   por natureza: basta um vizinho mudar e ela vira sobreposição.
   Agora o campo é um bloco com tudo dentro, e o espaço é positivo.
   --------------------------------------------------------------- */
.campo{display:block;margin:0 0 18px}
.campo>label,label.campo>span{display:block;font-size:13px;font-weight:600;margin:0 0 6px}
.campo>.dica{margin:7px 0 0}
.campo>.erro-campo{margin:7px 0 0}
input,select,textarea{font-size:16px;width:100%;padding:10px 12px;border-radius:8px;
  border:1px solid var(--linha-campo);background:#fff;color:var(--ink);font-family:inherit}
input[type=checkbox],input[type=radio]{width:20px;height:20px;padding:0;flex:0 0 auto}
.dica{font-size:12px;color:var(--mut);margin:10px 0 0}
.erro-campo{font-size:12.5px;color:var(--erro);font-weight:600;margin:7px 0 0}
input[aria-invalid="true"]{border-color:var(--erro);border-width:2px}

.grupo-campos{border:1px solid var(--linha);border-radius:8px;padding:12px 14px;margin:0 0 18px}
.grupo-campos legend{font-size:13px;font-weight:600;padding:0 6px}
.opcao{display:flex;gap:10px;align-items:center;min-height:44px}
.opcao span{font-size:14px}

.aviso{border-left:4px solid var(--mel-txt);background:var(--mel-fraco);color:var(--ink);
  padding:12px 14px;border-radius:0 8px 8px 0;font-size:13.5px;margin-bottom:16px}
.aviso.erro{border-left-color:var(--erro);background:var(--erro-fraco)}
.aviso.ok{border-left-color:var(--ok);background:var(--ok-fraco)}
.aviso b{display:block;margin-bottom:2px}

.vazio{text-align:center;padding:44px 20px;color:var(--mut)}
.vazio .icone{font-size:34px;line-height:1;margin-bottom:10px}
.vazio h2{color:var(--ink)}
.vazio p{max-width:470px;margin:0 auto 14px}

.kv{display:grid;grid-template-columns:150px minmax(0,1fr);gap:6px 14px;font-size:14px}
.kv dt{color:var(--mut);min-width:0}
/* [ERRO 2026-08-30] Sem o minmax(0,1fr) e sem quebra, um e-mail longo
   esticava a coluna e empurrava a página inteira para o lado. Palavra
   sem espaço não cabe em coluna estreita: ou quebra, ou vaza. */
.kv dd{margin:0;font-weight:600;min-width:0;overflow-wrap:anywhere}

.contagem{font-size:12.5px;color:var(--mut);margin:10px 2px 0}
/* SÓ PARA LEITOR DE TELA.
   Era `left:-9999px`, a técnica antiga. Com duas dessas na mesma altura
   da página elas ocupam o MESMO ponto fora da tela, e o detector de
   sobreposição do projeto acusa um encontrão que ninguém vê — foi assim
   que a busca do pacote 009 reprovou por um defeito que não existia.
   A técnica de 1px recortado mantém cada uma no lugar dela. */
/* [ERRO 2026-09-03] A versão do pacote 009 trazia `margin:-1px` aqui,
   copiado da receita clássica de conteúdo invisível. O verificador do
   próprio projeto reprova margem negativa, e o 009 foi entregue com essa
   reprovação dentro — eu rodei o verificador ANTES do último ajuste de
   CSS e não rodei de novo depois.
   A margem não fazia falta nenhuma: o elemento é `position:absolute`,
   está fora do fluxo, e mover 1px o que ninguém vê não muda nada. */
.so-leitor{position:absolute;width:1px;height:1px;padding:0;
  overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}

/* --------------------- celular --------------------- */
@media (max-width:900px){
  .app{grid-template-columns:1fr}
  .conteudo{padding:16px 14px 50px}
  .kv{grid-template-columns:1fr}
  .kv dt{margin-top:6px}
  .duas{grid-template-columns:1fr}
  .abre-menu{display:inline-flex}
  /* A gaveta some por [hidden], que o botão controla e o teclado alcança.
     Nunca por display:none numa media query. */
  .side{padding:12px}
}

@media print{
  .side,.abre-menu,.pular{display:none}
  .app{grid-template-columns:1fr}
  .card{box-shadow:none;border-color:#999}
}


/* =====================================================================
   UTILITÁRIOS
   Nasceram em 2026-08-30, quando o CSP de produção derrubou os 103
   estilos inline do sistema e as telas chegaram torcidas no cliente.
   REGRA: nenhum arquivo de tela escreve style="". O verificador reprova.
   Nenhum utilitário usa margem negativa (P-527).
   ===================================================================== */

/* --- larguras --- */
.estreito{max-width:420px}
.medio{max-width:660px}
.largo{max-width:920px}
.cheio{width:100%}

/* --- pilha: espaço entre irmãos, sem div espaçadora --- */
.pilha>*+*{margin-top:14px}
.pilha-fina>*+*{margin-top:8px}

/* --- espaços --- */
.mt-0{margin-top:0}   .mt-1{margin-top:8px}   .mt-2{margin-top:16px}
.mt-3{margin-top:24px} .mt-4{margin-top:32px}
.mb-0{margin-bottom:0} .mb-1{margin-bottom:8px} .mb-2{margin-bottom:16px}
.mb-3{margin-bottom:24px}

/* --- linha de botões e de etiquetas --- */
.linha{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.linha-fim{display:flex;gap:8px;flex-wrap:wrap;align-items:center;justify-content:flex-end}
.linha-centro{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}

/* --- coluna de cards --- */
.col{display:grid;gap:14px;align-content:start;min-width:0}

/* --- tons de texto --- */
.txt-mut{color:var(--mut)}
.txt-erro{color:var(--erro)}
.txt-ok{color:var(--ok)}
.txt-marca{color:var(--mel-txt)}
.txt-p{font-size:13.5px}
.txt-mini{font-size:12.5px}
.txt-grande{font-size:26px;font-weight:700}
.negrito{font-weight:700}
.bloco{display:block}
.sem-borda{border:0}
.dir{text-align:right}
.centro{text-align:center}

/* --- variações de card --- */
.card-alerta{border-color:var(--erro);background:#FFFCFC}
.card-ok{border-color:var(--ok)}
.card-destaque{border-color:var(--mel-txt)}
.card-tracejado{border-style:dashed;background:#FAFBFC;box-shadow:none}
.card-apagado{border-style:dashed;box-shadow:none;background:#FAFBFC}

/* --- listas --- */
.lista-limpa{list-style:none;margin:0;padding:0}
.lista-limpa li{padding:7px 0;border-bottom:1px solid var(--linha);font-size:13.5px}
.lista-limpa li:last-child{border-bottom:0}
.lista-numerada{margin:0 0 14px;padding-left:20px;font-size:13.5px}
.lista-marcada{margin:0;padding-left:18px;font-size:13.5px;color:var(--mut)}

/* --- filtros de canal --- */
.filtro-canal{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px}

/* --- barra de progresso do aviso --- */
.barra-prog{height:9px;background:var(--linha);border-radius:99px;overflow:hidden;margin:8px 0}
.barra-prog i{display:block;height:100%;background:var(--mel)}

/* =====================================================================
   TELA DE ENTRADA
   Ela é a primeira coisa que a equipe vê todo dia. Merece desenho
   próprio, não um card solto no meio da página.
   ===================================================================== */
.entrada{min-height:100vh;display:grid;grid-template-columns:1fr;place-items:center;
  padding:24px 18px;background:var(--bg)}
.entrada-caixa{width:100%;max-width:400px}
.entrada-marca{display:flex;gap:11px;align-items:center;justify-content:center;margin-bottom:20px}
.entrada-marca .hex{width:38px;height:38px;background:var(--mel);border-radius:10px;flex:0 0 auto}
.entrada-marca b{display:block;font-size:17px;line-height:1.2;color:var(--ink)}
.entrada-marca span{display:block;font-size:12px;color:var(--mut)}
.entrada .card{padding:24px}
.entrada h1{font-size:20px;margin-bottom:4px}
.entrada .sub{color:var(--mut);font-size:13.5px;margin:0 0 20px}
.entrada .btn{width:100%}
.entrada-rodape{text-align:center;font-size:12.5px;color:var(--mut);margin:16px 0 0}
.entrada-nota{font-size:12px;margin-top:18px}

@media (min-width:860px){
  .entrada{grid-template-columns:1fr 1fr;place-items:center;gap:40px;
    padding:40px;max-width:1100px;margin:0 auto}
  .entrada-lado{max-width:420px}
  .entrada-lado h2{font-size:22px;margin-bottom:14px}
  .entrada-lado li{margin-bottom:12px;font-size:14.5px;color:var(--mut)}
  .entrada-lado li b{color:var(--ink);display:block;font-size:14px}
}
.entrada-lado{display:none}
@media (min-width:860px){.entrada-lado{display:block}}

/* --- utilitários acrescentados no varredor de 2026-08-30 --- */
.w-auto{width:auto;min-width:200px}
.mt-meio{margin-top:12px}
.auto-inicio{align-self:start}
.aviso-simples{background:var(--mel-fraco);border-left:4px solid var(--mel-txt);
  padding:12px 14px;border-radius:0 8px 8px 0}
.pagina-nua{font:16px/1.6 system-ui,-apple-system,'Segoe UI',sans-serif;max-width:640px;
  margin:40px auto;padding:0 20px;color:#14213D}
.pagina-nua h1{font-size:22px}
.pagina-nua .rodape{color:#56637A;font-size:14px}
.pilula-solta{margin-left:6px}

.abas-filtro{border-bottom:0;margin-bottom:16px}

/* [ERRO 2026-08-30] Havia um <details> aqui, usado como "abrir para
   editar" dentro da célula da tabela. O formulário continuava ocupando
   espaço com o details fechado e sobrepunha o texto ao redor. Virou
   tela própria: usuario-editar.php e setor-editar.php. */

/* =====================================================================
   PACOTE 004 — ARMAZENAMENTO
   Nenhuma regra aqui usa margem negativa, e nenhuma tela usa style="".
   O CSP de producao recusa estilo inline (E-228), entao tudo mora aqui.
   ===================================================================== */

/* Bloco para o Anderson copiar: endereco de retorno, linhas do config.
   Quebra em qualquer ponto, senao um endereco longo estoura a largura
   do card no celular (mesma causa do E-236). */
.bloco-codigo{background:#F0F3F7;border:1px solid var(--linha);border-radius:var(--r);
  padding:10px 12px;font:12.5px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere;margin:0 0 8px}

/* Resultado do autoteste: cada passo diz OK ou FALHOU pelo TEXTO, e a
   cor so reforca. Quem nao distingue vermelho de verde le a mesma coisa. */
.passo-ok{color:var(--ok)}
.passo-erro{color:var(--erro)}
.lista-marcada .passo-ok b,.lista-marcada .passo-erro b{letter-spacing:.4px}

/* Campo de arquivo: o navegador desenha o botao dele, mas a caixa ao
   redor tem que combinar com os outros campos do formulario. */
input[type=file]{width:100%;max-width:100%;font-size:14px;padding:9px 10px;
  border:1px solid var(--linha-campo);border-radius:var(--r);background:#fff;color:var(--ink)}
input[type=file]:focus-visible{outline:2px solid var(--foco);outline-offset:1px}

/* O verificador executável usa estas duas. Ele sobe, roda e sai, mas
   enquanto está no ar precisa ser legível sob o mesmo CSP das telas. */
.verificador{max-width:900px;margin:0 auto}
.col-estreita{width:90px}

/* Opção de rádio com descrição de várias linhas. Com align-items:center
   a bolinha desce para o meio do texto e parece pertencer à linha de
   baixo — exatamente o tipo de dúvida que faz alguém marcar a opção
   errada. Aqui ela fica na altura do título. */
.opcao-alta{align-items:flex-start;min-height:0;margin-bottom:14px}
.opcao-alta input{margin-top:4px;flex:0 0 auto}

/* =====================================================================
   PACOTE 005 — LIXEIRA, INSTITUCIONAL E ACEITE
   ===================================================================== */

/* Formulário que existe só para o botão da tabela apontar (attr form=).
   Ele só tem campos ocultos dentro, então já não desenha nada nem ocupa
   altura. Não precisa de truque para esconder — e MARGEM NEGATIVA aqui
   seria justamente o que o verificador reprova desde o E-232. */
.form-so-dados{display:block;height:0;overflow:hidden}

/* Coluna de caixa de seleção: estreita, e a caixa alcançável pelo dedo. */
.col-caixa{width:56px}
.col-caixa input[type=checkbox]{width:20px;height:20px;margin:0}
td.col-caixa,th.col-caixa{text-align:center}

/* Barra que aparece quando há item selecionado na seleção em massa.
   Fica grudada embaixo para a pessoa não precisar rolar de volta. */
.barra-selecao{position:sticky;bottom:0;z-index:5;background:var(--card);
  border:1px solid var(--linha-campo);border-radius:var(--r);padding:12px 14px;
  box-shadow:0 -2px 12px rgba(20,33,61,.10);margin-top:14px;
  display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.barra-selecao b{font-size:14px}

/* Aviso de documento esperando aceite. Fica no topo de toda tela, então
   precisa ser visível sem gritar: quem tem trabalho para fazer não pode
   achar que o sistema quebrou. */
.faixa-aceite{background:var(--mel-fraco);border:1px solid var(--mel-txt);
  border-radius:var(--r);padding:12px 14px;margin-bottom:16px;font-size:13.5px;color:var(--ink)}
.faixa-aceite b{display:block;margin-bottom:2px}
.faixa-aceite a{color:var(--mel-txt);font-weight:600}

/* O documento institucional em leitura, antes do aceite. */
.doc-aceite{border:1px solid var(--linha);border-radius:var(--r);padding:16px;
  background:#FAFBFC;margin-bottom:16px}
.doc-aceite .declaracao{font-size:14px;line-height:1.6;margin:0}

/* Duas colunas de gente: quem aceitou e quem falta. */
.duas-listas{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.duas-listas>*{min-width:0}
@media (max-width:700px){ .duas-listas{grid-template-columns:1fr} }

/* Card inteiro clicável, na grade da área institucional. O alvo é o card,
   não só o título: alvo pequeno em tela de celular é alvo errado. */
.card-link{display:block;text-decoration:none;color:inherit}
.card-link:hover{border-color:var(--mel-txt)}
.card-link h2{color:var(--ink)}

/* empresas (pacote 006) */
.bloco-empresa{border-top:1px solid var(--linha);padding-top:12px;margin-top:12px}
.bloco-empresa:first-of-type{border-top:0;padding-top:0;margin-top:8px}
.bloco-empresa h3{margin:0 0 8px;font-size:14px}
.linha-form{display:inline}

/* O segundo caminho de uma tela: existe, e nao disputa atencao com o
   primeiro. NAO usar <details> aqui — ja quebrou duas vezes nesta casca
   (2026-08-30 e 2026-08-31): o conteudo nao empurra o card e cai por
   cima do card de baixo. */
.caminho-segundo{border-top:1px solid var(--linha);margin-top:16px;padding-top:12px}
.caminho-segundo h3{margin:0 0 6px;font-size:13.5px;color:var(--mut)}

/* =====================================================================
   PACOTE 007 — PAINEL DE PRONTIDAO
   ===================================================================== */

/* As tiras de contagem no topo. Sao LINKS, nao enfeite: cada uma filtra
   a lista de baixo. Por isso tem area de toque de 44px e foco visivel. */
.tiras{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin-bottom:18px}
.tiras>*{min-width:0}
.tira{display:flex;flex-direction:column;justify-content:center;gap:2px;
  min-height:64px;padding:10px 12px;border:1px solid var(--linha);border-radius:var(--r);
  background:var(--card);text-decoration:none;color:var(--ink)}
.tira b{font-size:22px;line-height:1}
.tira span{font-size:11.5px;color:var(--mut)}
.tira:hover{border-color:var(--mel-txt)}
.tira:focus-visible{outline:2px solid var(--mel);outline-offset:2px}
.tira.agora{border-color:var(--ink);border-width:2px;padding:9px 11px}
.tira.erro b{color:var(--erro)}
.tira.mel  b{color:var(--mel-txt)}
.tira.ok   b{color:var(--ok)}
@media (max-width:700px){
  /* Cinco colunas em 360px viram cinco tiras ilegiveis. Duas cabem. */
  .tiras{grid-template-columns:repeat(2,1fr)}
}

/* O amarelo do texto tinha cor de pilula e nao de texto. Este e o tom
   escuro, que passa no contraste sobre fundo branco. */
.txt-mel{color:var(--mel-txt)}

/* O prazo é editado direto na linha da tabela: um número e um botão.
   Tela separada para trocar um número é atrito que faz ninguém trocar. */
.linha-prazo{display:flex;gap:6px;align-items:center}
.linha-prazo input[type=number]{width:64px;min-height:38px;padding:6px 8px;
  border-radius:8px;border:1px solid var(--linha-campo)}
.linha-prazo .btn{min-height:38px;padding:6px 10px}

/* =====================================================================
   PACOTE 008 — A PORTA PUBLICA
   Casca propria, sem menu e sem contar nada do sistema por dentro.
   ===================================================================== */
body.publica{background:var(--bg);display:flex;align-items:center;justify-content:center;
  min-height:100vh;padding:20px}
.caixa-publica{width:100%;max-width:460px}
.caixa-publica .card{padding:24px}
.caixa-publica h1{font-size:20px;margin:0 0 4px;overflow-wrap:anywhere}
.rodape-publico{margin-top:14px;text-align:center;font-size:12px;color:var(--mut)}

/* o endereco do link, para copiar. Quebra em qualquer ponto, senao um
   token de 64 caracteres estoura a largura do card no celular. */
.link-copiar{width:100%;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;
  padding:9px 10px;border-radius:8px;border:1px solid var(--linha-campo);
  overflow-wrap:anywhere;min-height:44px}
.link-linha{display:flex;gap:6px;align-items:center;flex-wrap:wrap}

/* =====================================================================
   PACOTE 009 — EM CAMPO, PELO CELULAR
   A tela de busca virou a porta de entrada de quem está na rua. Tudo
   aqui é dimensionado para polegar: alvo mínimo de 44px, uma coluna,
   e nada que dependa de passar o mouse por cima.
   ===================================================================== */

/* A BARRA DE CELULAR — só existe no estreito, junto com o botão de menu */
.barra-celular{display:none;gap:8px;align-items:center;margin:0 0 12px;flex-wrap:wrap}
.atalho-busca{text-decoration:none}
@media (max-width:900px){
  .barra-celular{display:flex}
}

/* A CAIXA DE BUSCA. Uma linha no computador, duas no celular, e o campo
   nunca abaixo de 16px: abaixo disso o iOS dá zoom sozinho ao focar, e a
   tela inteira sai do lugar no meio da digitação. */
.busca-campo{display:flex;gap:8px;align-items:stretch;margin:0 0 14px}
.busca-campo input[type=search]{flex:1 1 auto;min-width:0;min-height:48px;
  font-size:16px;padding:10px 14px;border-radius:10px;
  border:1px solid var(--linha-campo);background:var(--card);color:var(--ink)}
.busca-campo .btn{min-height:48px;white-space:nowrap}
@media (max-width:560px){
  .busca-campo{flex-wrap:wrap}
  .busca-campo input[type=search]{flex:1 1 100%}
  .busca-campo .btn{flex:1 1 100%}
}

/* AS TIRAS DE ESTREITAR. Vêm depois do resultado, roláveis na horizontal
   para não empurrar o conteúdo para baixo num aparelho estreito. */
.tiras-filtro{display:flex;gap:8px;overflow-x:auto;padding:2px 0 8px;
  margin:0 0 6px;-webkit-overflow-scrolling:touch}
.pilula-filtro{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;
  min-height:38px;padding:6px 12px;border-radius:999px;text-decoration:none;
  border:1px solid var(--linha);background:var(--card);color:var(--ink);font-size:13px}
.pilula-filtro span{color:var(--mut);font-size:12px}
.pilula-filtro.agora{border-color:var(--ink);border-width:2px;padding:5px 11px;font-weight:600}
.pilula-filtro:focus-visible{outline:3px solid var(--foco);outline-offset:2px}

/* O GRUPO DE RESULTADO — uma oferta, um setor ou o institucional */
.grupo-busca{background:var(--card);border:1px solid var(--linha);border-radius:var(--r);
  box-shadow:var(--sombra);padding:14px 14px 6px;margin:0 0 12px}
.cabeca-grupo h2{font-size:16px;margin:0 0 2px;overflow-wrap:anywhere}
.cabeca-grupo h2 a{color:var(--ink);text-decoration:none}
.cabeca-grupo h2 a:hover,.cabeca-grupo h2 a:focus-visible{text-decoration:underline}
.cabeca-grupo .sub{font-size:12.5px;color:var(--mut);margin:0 0 8px}

/* A LISTA DE DOCUMENTOS DENTRO DO GRUPO */
.lista-doc{list-style:none;margin:0;padding:0}
.lista-doc li{display:flex;gap:10px;align-items:center;justify-content:space-between;
  flex-wrap:wrap;padding:10px 0;border-top:1px solid var(--linha)}
.doc-txt{flex:1 1 220px;min-width:0}
.doc-nome{display:block;font-weight:600;color:var(--ink);text-decoration:none;
  overflow-wrap:anywhere;min-height:24px}
.doc-nome:hover,.doc-nome:focus-visible{text-decoration:underline}
.doc-sub{font-size:12px;color:var(--mut);margin:2px 0 0;overflow-wrap:anywhere}
.doc-acoes{display:flex;gap:6px;flex:0 0 auto}
.doc-acoes .btn{min-height:40px}
@media (max-width:560px){
  /* Botão de largura cheia no aparelho estreito: dois alvos de 40px
     lado a lado, com o dedo, é onde a pessoa abre o documento errado. */
  .lista-doc li{align-items:stretch}
  .doc-acoes{flex:1 1 100%}
  .doc-acoes .btn{flex:1 1 0;justify-content:center}
}

/* A zona de exclusão fica no fim da ficha, separada do resto por cor e
   por distância. Ação destrutiva ao lado do botão de baixar é erro de
   dedo esperando acontecer. */
.zona-perigo{border-color:var(--erro);margin-top:18px}
.zona-perigo h2{color:var(--erro)}

/* =====================================================================
   PACOTE 011 — O VISOR
   Ver o documento sem baixar. A moldura é grande de propósito: prévia
   pequena não substitui o download, ela só adia.
   ===================================================================== */
.visor{background:#F0F3F7;border:1px solid var(--linha);border-radius:var(--r);
  overflow:hidden;line-height:0}
.visor-quadro{width:100%;height:70vh;min-height:420px;border:0;display:block;background:#fff}
/* Altura mínima porque imagem muito pequena (um ícone, um recorte de
   assinatura) centralizada numa faixa fina parece falha de carregamento.
   Com o fundo cinza em volta, fica claro que ela abriu e é pequena. */
.visor-imagem{display:flex;align-items:center;justify-content:center;padding:10px;
  line-height:normal;min-height:240px}
.visor-imagem img{max-width:100%;max-height:70vh;height:auto;display:block;border-radius:6px}
.visor-video{width:100%;max-height:70vh;display:block;background:#000}
@media (max-width:700px){
  /* No celular, 70vh de moldura com a barra do navegador em cima sobra
     pouco. E rolar dentro de moldura, no toque, é briga com a rolagem
     da página: melhor a moldura ser menor e o dedo rolar a página. */
  .visor-quadro{height:58vh;min-height:320px}
  .visor-imagem{min-height:180px}
  .visor-imagem img,.visor-video{max-height:58vh}
}

/* A caixa da porta pública, na largura de leitura */
.caixa-larga{max-width:900px}
