/* ==========================================================================
   Ajustes do Matter sobre a folha base da SoftSul.
   SoftSul Software & Network

   O port completo (design-softsul.md, secao 8) pede trocar cada tela para o
   vocabulario novo (.cartao, .botao, .pilula...) e nunca manter classe
   sinonima. Isto aqui e o passo 1 desse port - trazer a folha e a paleta -
   feito com uma ponte: as 17 telas do Matter usam HA MUITO um vocabulario
   proprio (.card, .btn, .badge, table simples, .modal-overlay) espalhado
   em HTML e JavaScript inline em cada arquivo. Reescrever as 17 telas para
   o vocabulario novo de uma vez so, sem revisar cada uma linha a linha,
   arriscava quebrar comportamento (upload, modais de edicao, filtros) por
   uma troca que era so visual.

   Entao o nome da classe fica, e a REGRA por tras dela e que virou a da
   SoftSul: mesma cor, mesma tipografia, mesmo raio, mesma sombra do ERP.
   Trocar cada tela para .cartao/.botao/.pilula literalmente, sem mudar
   comportamento nenhum, fica como proximo passo - a partir daqui e refactor
   puro, sem risco visual, porque os tokens ja sao os mesmos.
   ========================================================================== */

:root{
  /* aliases usados soltos em estilo inline pelas 17 telas atuais */
  --bg: var(--nuvem);
  --bg-card: var(--branco);
  --borda: var(--traco);
  --texto: var(--tinta);
  --texto-fraco: var(--suave);
  --acento: var(--indigo);
  --sucesso: var(--verde);
  --alerta: var(--ambar);
  --perigo: var(--rubi);
}

body{ font-family:var(--ui); }
h1,h2,h3,.marca{ font-family:var(--ui); font-weight:800; letter-spacing:-.025em; }

/* -------------------------------------------------------------- .card */
.card{
  background:var(--branco); border:1px solid var(--traco);
  border-radius:var(--r-g); padding:20px 22px; margin-bottom:20px;
}

/* -------------------------------------------------------------- .btn
   As 17 telas antigas põem vários .btn/a.btn lado a lado direto no HTML,
   sem wrapper com gap (ex.: "Visualizar" + "Visualizar original" + "Baixar
   PDF anonimizado" em job.php, um atrás do outro, sem nada entre as tags).
   margin garante respiro entre eles em QUALQUER tela, sem precisar caçar e
   envolver cada grupo de botão num container flex - e o padding cresceu
   pra a caixa ficar mais confortável de clicar. */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:8px;
  border:0; border-radius:var(--r); padding:13px 20px;
  font-family:inherit; font-size:14px; font-weight:700; color:#fff;
  background:var(--gradiente); cursor:pointer; text-decoration:none;
  box-shadow:0 1px 2px rgba(11,92,85,.28), 0 10px 22px -12px rgba(11,92,85,.55);
  transition:transform .1s, box-shadow .15s, filter .15s;
  margin:0 10px 10px 0;
}
.btn:hover{ filter:saturate(1.08) brightness(1.04); text-decoration:none; opacity:1; }
.btn:active{ transform:translateY(1px); }
.btn[disabled]{ opacity:.55; cursor:not-allowed; box-shadow:none; filter:none; }
.btn.secundario{
  background:var(--branco); color:var(--tinta); border:1px solid var(--traco2);
  box-shadow:none; font-weight:600;
}
.btn.secundario:hover{ background:var(--leve); }
.btn.perigo{ background:var(--rubi); color:#fff; box-shadow:none; }
.btn.perigo:hover{ background:#A62F3A; }
.btn.sucesso{ background:var(--verde); color:#fff; box-shadow:none; }
.btn.sucesso:hover{ background:#0A6B4F; }
.btn.pequeno{ padding:9px 15px; font-size:12.5px; margin:0 8px 8px 0; }
/* último botão de uma linha não precisa do respiro à direita - só embaixo,
   pra quando quebrar de linha no celular. */
.barra-acoes .btn:last-child, .card > .btn:last-child{ margin-right:0; }

/* -------------------------------------------------------------- controles
   As 17 telas antigas usam <input> solto (sem caixa em volta). As telas
   novas (a entrada, por enquanto) usam o padrão da folha base, <input>
   dentro de .entrada - que já tem a própria borda, fundo e o anel de foco.
   Sem o :not(.entrada *) aqui, os dois jogos de regra se somavam num campo
   .entrada: o anel de foco aparecia DUAS vezes, uma no wrapper (da folha
   base) e outra direto no <input> (daqui), e a caixa parecia inchada.

   E só os tipos de texto: sem a lista de :not([type=...]), um <input
   type="checkbox"> (arquivos.php, exposicao.php, perfis.php) também virava
   uma caixa de texto - width:100%, fundo, borda - um retângulo grande onde
   devia ter uma caixinha de marcar, empurrando o rótulo ao lado pra quebrar
   linha torto. Foi isso que amontoou o grupo "Termos a verificar". */
input:not(.entrada *):not([type=checkbox]):not([type=radio]):not([type=file]):not([type=hidden]):not([type=submit]):not([type=button]):not([type=reset]):not([type=range]):not([type=color]),
select:not(.entrada *),
textarea:not(.entrada *){
  background:var(--leve); border:1px solid var(--traco); color:var(--tinta);
  padding:11px 14px; border-radius:var(--r); font-size:14.5px; width:100%;
  font-family:inherit; transition:border-color .12s, background-color .12s, box-shadow .12s;
}
input:not(.entrada *):not([type=checkbox]):not([type=radio]):not([type=file]):not([type=hidden]):not([type=submit]):not([type=button]):not([type=reset]):not([type=range]):not([type=color]):focus,
select:not(.entrada *):focus,
textarea:not(.entrada *):focus{
  outline:none; background:var(--branco); border-color:var(--indigo); box-shadow:var(--anel);
}
/* checkbox/radio soltos (sem a .check da folha base): tamanho e cor de
   marcação nativos, só na cor do acento em vez do azul padrão do navegador. */
input[type=checkbox]:not(.entrada *), input[type=radio]:not(.entrada *){
  width:15px; height:15px; accent-color:var(--indigo); cursor:pointer; flex:none;
  margin:0 5px 0 0; vertical-align:middle;
}
label{ font-size:12.5px; font-weight:600; color:var(--suave); display:block; margin-bottom:7px; }
/* Rótulo de checkbox/radio (o texto ao lado, não o de cima do campo): não
   pode herdar display:block nem a margem do rótulo de campo de texto,
   senão ele também quebra pra baixo do quadradinho. */
label:has(> input[type=checkbox]), label:has(> input[type=radio]){
  display:inline-flex; align-items:center; margin-bottom:0; font-weight:500; color:var(--tinta);
  font-size:13px; cursor:pointer;
}
/* Só embaixo de campo que NÃO é da folha base (a de lá já tem gap próprio,
   em flex coluna); somar margin-bottom aos dois juntava espaço demais. */
.campo:not(.acesso-form .campo){ margin-bottom:16px; }

/* Autofill do Chrome/Safari: o navegador pinta o PRÓPRIO <input> com um
   fundo amarelo/azulado dele, sem cantos arredondados - e como o wrapper
   .entrada é que tem o border-radius, esse fundo quadrado do navegador
   sobra pelos cantos do .entrada arredondado, e aparece como uma borda
   branca/reta "dentro" do campo assim que o usuário clica (ou o Chrome
   preenche sozinho, como no e-mail salvo). As duas regras abaixo tomam de
   volta a cor do fundo; a sombra por dentro (inset) é o único jeito de
   sobrescrever o fundo do autofill, que "background" comum não alcança. */
.entrada{ overflow:hidden; }
.entrada input:-webkit-autofill,
.entrada input:-webkit-autofill:hover,
.entrada input:-webkit-autofill:focus{
  -webkit-text-fill-color:var(--tinta);
  -webkit-box-shadow:0 0 0 1000px var(--leve) inset;
  box-shadow:0 0 0 1000px var(--leve) inset;
  transition:background-color 9999s ease-in-out 0s;
}
.entrada:focus-within input:-webkit-autofill{
  -webkit-box-shadow:0 0 0 1000px var(--branco) inset;
  box-shadow:0 0 0 1000px var(--branco) inset;
}

.msg-erro{
  background:var(--rubi-sup); border:1px solid var(--rubi-sup); color:#7E2630;
  padding:11px 13px; border-radius:var(--r); margin-bottom:16px; font-size:12.8px; line-height:1.45;
}
.msg-ok{
  background:var(--verde-sup); border:1px solid var(--verde-sup); color:#0A6B4F;
  padding:11px 13px; border-radius:var(--r); margin-bottom:16px; font-size:12.8px; line-height:1.45;
}

.barra-acoes{ display:flex; justify-content:space-between; align-items:center; margin-bottom:16px; flex-wrap:wrap; gap:10px; }

/* -------------------------------------------------------------- tabelas */
table{ width:100%; border-collapse:collapse; font-size:14px; }
th, td{ text-align:left; padding:10px 16px; border-bottom:1px solid var(--traco); }
th{
  font-family:var(--dado); color:var(--fraca); font-weight:500; font-size:10.5px;
  text-transform:uppercase; letter-spacing:.1em; background:#FAFCFF; white-space:nowrap;
}
tr:hover td{ background:#FBFCFF; }
tr.linha-clicavel{ cursor:pointer; }
tr.linha-clicavel:hover td{ background:var(--indigo-sup); }

/* Uma linha por registro em toda lista: nada quebra dentro da célula.
   Texto comprido (nome, e-mail, cliente, descrição) é cortado com "…" e
   o completo aparece ao passar o mouse (title posto pelo matter.js).
   Se mesmo assim a tabela passar do cartão, o matter.js vai baixando o
   limite das células de texto até caber (não menos que 90px).
   Célula com botões fica sem corte, senão o balão de dica some.
   .quebra libera uma célula que precisa mesmo de várias linhas. */
@media (min-width:701px){
  /* --td-max: o matter.js diminui quando a tabela não cabe no cartão */
  td{ white-space:nowrap; max-width:var(--td-max, 280px); overflow:hidden; text-overflow:ellipsis; }
  td.col-acoes, td:has(.acoes-linha), td:has(button), td:has(.btn){ max-width:none; overflow:visible; }
  /* etiqueta (situação, papel, convite) é curta e não pode sair pela metade */
  td:has(> .badge){ max-width:none; }
  td.quebra{ white-space:normal; }
}

/* Celular: cada registro vira um cartão compacto. O primeiro campo (nome do
   arquivo, do cliente, do usuário) é o título; os outros ficam um por linha,
   rótulo à esquerda e valor à direita; os botões vão no rodapé do cartão.
   Antes cada campo ocupava duas linhas (rótulo em cima, valor embaixo), e
   dois registros já enchiam a tela. */
@media (max-width:700px){
  table.responsiva thead{ display:none; }
  table.responsiva, table.responsiva tbody{ display:block; width:100%; }
  table.responsiva tr{
    display:flex; flex-direction:column; width:100%;
    border:1px solid var(--traco); border-radius:var(--r-g); margin-bottom:10px; padding:10px 14px 8px;
    background:var(--branco);
  }
  table.responsiva tr:hover td{ background:transparent; }
  table.responsiva td{
    display:flex; align-items:baseline; justify-content:space-between; gap:14px;
    width:100%; border-bottom:none; padding:4px 0; min-width:0;
    text-align:right !important; font-size:13.5px; white-space:normal; overflow-wrap:anywhere;
  }
  table.responsiva td[data-rotulo]::before{
    content:attr(data-rotulo); flex:none; max-width:45%; text-align:left;
    font-size:11px; font-weight:600; color:var(--fraca); text-transform:uppercase; letter-spacing:.04em;
  }
  table.responsiva td:empty{ display:none; }
  /* o primeiro campo é o título do cartão */
  table.responsiva td:first-child{
    display:block; text-align:left !important; font-size:14.5px; font-weight:700; color:var(--tinta);
    padding:0 0 8px; margin-bottom:4px; border-bottom:1px solid var(--traco);
  }
  table.responsiva td:first-child::before{ display:none; }
  /* botões: rodapé do cartão, alinhados à esquerda */
  table.responsiva td.col-acoes, table.responsiva td:has(.acoes-linha){
    display:block; text-align:left !important; margin-top:6px; padding-top:8px; border-top:1px solid var(--traco);
  }
  table.responsiva td.col-acoes::before, table.responsiva td:has(.acoes-linha)::before{ display:none; }
  table.responsiva td .badge{ flex:none; }
}

/* Celular: filtros das listas, um por linha, rótulo à esquerda e o seletor
   ocupando o resto. Antes o rótulo se espremia até virar uma letra por
   linha ("C l i e n t e") e o seletor passava da borda do cartão. */
@media (max-width:700px){
  .barra-acoes{ flex-direction:column; align-items:stretch; }
  .barra-acoes > div{ width:100%; }
  .barra-acoes form{ flex:1 1 100%; width:100%; flex-wrap:wrap; min-width:0; }
  .barra-acoes label{ white-space:nowrap; flex:0 0 auto; }
  .barra-acoes select, .barra-acoes input[type="search"], .barra-acoes input[type="text"]{
    flex:1 1 0; min-width:0; width:auto; max-width:none !important;
  }
  .barra-acoes > div > .btn, .barra-acoes > .btn{ width:100%; justify-content:center; }
}

/* Celular: o avatar do usuário sobe para a barra do logotipo, em vez de
   ocupar sozinho uma faixa inteira logo abaixo dela. */
@media (max-width:820px){
  .topo{ position:fixed; top:10px; right:14px; z-index:41; padding:0; border:0; background:transparent; }
  .topo .dir{ margin-left:0; }
  .rail .marca{ padding-right:86px; }
  .menu-usuario .suspenso{ right:0; max-width:calc(100vw - 28px); }
}

/* -------------------------------------------------------------- badges (= .pilula) */
.badge{
  display:inline-flex; align-items:center; gap:5px; font-size:11.5px; font-weight:600;
  padding:3px 9px; border-radius:999px; white-space:nowrap;
}
.badge::before{ content:""; width:5px; height:5px; border-radius:50%; background:currentColor; flex:none; }
.badge.pendente, .badge.aguardando_revisao{ background:var(--ambar-sup); color:var(--ambar); }
.badge.processando, .badge.admin{ background:var(--indigo-sup); color:var(--indigo-fte); }
.badge.concluido{ background:var(--verde-sup); color:var(--verde); }
.badge.erro, .badge.inativo{ background:var(--rubi-sup); color:var(--rubi); }
.badge.revisor{ background:var(--leve); color:var(--fraca); }

/* -------------------------------------------------------------- modais próprios de cada tela */
.modal-overlay{
  display:none; position:fixed; inset:0; background:rgba(21,29,51,.5);
  align-items:center; justify-content:center; z-index:100; padding:20px;
}
.modal-overlay.aberto{ display:flex; }
/* fundo desfocado atrás de todo modal: os das telas, o confirmador e o
   visualizador (<dialog>) */
.modal-overlay,
dialog::backdrop, .visor::backdrop, .confirmador::backdrop{ -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px); }
.modal-caixa{
  background:var(--branco); border:1px solid var(--traco); border-radius:var(--r-g);
  padding:24px; width:100%; max-width:560px; max-height:90vh; overflow-y:auto;
  box-shadow:var(--sombra-alta);
}
.modal-caixa h3{ margin-top:0; font-size:17px; font-weight:800; }
.modal-cabecalho{ display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:14px; }
.modal-cabecalho h3{ margin:0; }
.modal-fechar{
  background:none; border:none; color:var(--fraca); font-size:22px; cursor:pointer;
  line-height:1; flex-shrink:0; padding:0 2px;
}
.modal-fechar:hover{ color:var(--tinta); }

.cards-stats{ display:grid; grid-template-columns:repeat(auto-fit, minmax(150px, 1fr)); gap:12px; margin-bottom:20px; }
.card-stat{ background:var(--branco); border:1px solid var(--traco); border-radius:var(--r-g); padding:16px; text-align:center; }
.card-stat .valor{ font-family:var(--dado); font-size:25px; font-weight:600; letter-spacing:-.02em; }
.card-stat .rotulo{ font-size:12px; color:var(--suave); font-weight:600; margin-top:2px; }
.card-stat.alerta .valor{ color:var(--ambar); }
.card-stat.perigo .valor{ color:var(--rubi); }
.card-stat.sucesso .valor{ color:var(--verde); }

/* -------------------------------------------------------------- gráfico da visão geral */
.grafico-container{ overflow-x:hidden; width:100%; box-sizing:border-box; }
#grafico-dias{ min-width:0; max-width:100%; box-sizing:border-box; }
#grafico-dias > div{ min-width:0; }
#grafico-dias .rotulo-dia{
  font-size:10px; color:var(--fraca); margin-top:4px;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; width:100%; text-align:center;
}
@media (max-width:500px){
  #grafico-dias{ gap:3px !important; }
  #grafico-dias .rotulo-dia{ font-size:8px; }
}

/* -------------------------------------------------------------- logo do Matter
   matter.svg foi feito com traço branco (fill="white"), pensado pra ficar
   sobre um fundo escuro - que era o tema antigo do PrivaDoc. A folha da
   SoftSul é clara, então sem isto o logotipo ficaria invisível na barra
   lateral e na tela de entrada. brightness(0) força os pixels não
   transparentes a preto, do jeito que o resto da folha já trata logotipo:
   monocromático, na cor do texto. */
.rail .marca .logo{
  height:30px; width:auto; aspect-ratio:776/217; filter:brightness(0); opacity:.88;
}
.acesso-marca .logo{
  height:64px; width:auto; aspect-ratio:776/217; filter:brightness(0); opacity:.9;
}
/* .acesso-marca é flex-column sem align-items próprio (softsul-base.css),
   e o cruzamento de "stretch" (o padrão) com aspect-ratio + width:auto num
   elemento substituído (o <img> do logo) faz o Chrome esticar a caixa do
   logo pra ocupar a coluna inteira em vez de respeitar a proporção - o
   desenho ficava pequeno mas empurrado pro meio de uma caixa invisível bem
   mais larga, parecendo centralizado. flex-start tira a esticada: logo,
   título e assinatura encostam na margem esquerda, como no FrameFlow/ERP. */
.acesso-marca{ align-items:flex-start; }

/* -------------------------------------------------------------- avisos passageiros (erpAvisar) */
#avisos-vivos{
  position:fixed; right:18px; bottom:18px; z-index:200;
  display:flex; flex-direction:column; gap:8px; max-width:min(340px, calc(100vw - 36px));
}
#avisos-vivos .aviso{
  background:var(--branco); box-shadow:var(--sombra-alta); border:1px solid var(--traco);
  animation:matter-aviso-entra .18s ease-out;
}
#avisos-vivos .aviso.saindo{ opacity:0; transform:translateY(6px); transition:opacity .4s, transform .4s; }
@keyframes matter-aviso-entra{ from{ opacity:0; transform:translateY(8px); } to{ opacity:1; transform:none; } }

/* faixa de licença (master SoftSul / cliente licenciado), abaixo do topo */
.barra-licenca{
  padding:8px 22px; font-size:12px; color:var(--suave);
  border-bottom:1px solid var(--traco); background:var(--branco);
}
.barra-licenca strong{ color:var(--tinta); }
.badge-master{ color:var(--indigo-fte); font-weight:700; letter-spacing:.02em; }

/* -------------------------------------------------------------- certificado digital
   Jeito alternativo de entrar: abaixo do Entrar, num teal claro que não
   compete com o botão principal (mesma ideia do ERP, no acento do Matter). */
.ou-certificado{display:flex; flex-direction:column; gap:10px}
.ou-certificado .botao{justify-content:center; width:100%}
.ou-certificado .botao.claro{background:var(--acento-borda); border-color:var(--acento-borda);
  color:var(--indigo-fte); box-shadow:none}
.ou-certificado .botao.claro:hover{background:#A9D5CF; border-color:#A9D5CF}
.ou-certificado .botao.claro svg{color:var(--indigo)}

/* lista de certificados vinculados em Minha conta */
.lista-certificados{list-style:none; margin:0 0 14px; padding:0; display:flex; flex-direction:column; gap:10px}
.lista-certificados li{border:1px solid var(--traco); border-radius:var(--r); padding:12px 14px;
  display:flex; justify-content:space-between; align-items:flex-start; gap:12px}
.lista-certificados b{font-size:13.5px}
.lista-certificados .meta{font-size:12px; color:var(--suave); line-height:1.5}
.lista-certificados form{margin:0; flex:none}

/* ================================================================ TEMA ESCURO
   Mesmo modelo do ERP (erp.softsul.com/docs/tema-escuro-outros-sistemas.md):
   escolhido por pessoa no menu do usuário (usuarios.tema) e lembrado no
   navegador para a tela de login. Neutros em preto e cinza, iguais aos do ERP;
   o acento continua o teal do Matter, só que mais claro, para ter contraste.
   Quase tudo é trocar as variáveis; abaixo delas ficam os poucos lugares com
   cor fixa. O PDF, as páginas do documento e o QR Code continuam brancos de
   propósito: é como saem no papel e para quem recebe. */
:root[data-tema="escuro"]{
  color-scheme:dark;
  --nuvem:#0A0A0A;
  --branco:#141414;
  --leve:#1C1C1C;
  --traco:#262626;
  --traco2:#363636;
  --tinta:#EDEDED;
  --suave:#A8A8A8;
  --fraca:#7A7A7A;

  --indigo:#2DD4BF;
  --indigo-fte:#5EEAD4;
  --indigo-sup:#0F2A27;
  --ciano:#5EEAD4;
  --acento-borda:#1F5E57;
  /* o gradiente mantém o tom do claro, e não o teal clarinho, para o texto
     branco do botão continuar legível */
  --gradiente:linear-gradient(96deg, #0F766E 0%, #14B8A6 58%, #2DD4BF 165%);

  --verde:#3FD3A2;  --verde-sup:#10342A;
  --ambar:#F2AE4E;  --ambar-sup:#3A2A12;
  --rubi:#FF7D89;   --rubi-sup:#3E1C23;

  --sombra:0 1px 2px rgba(0,0,0,.35);
  --sombra-alta:0 2px 4px rgba(0,0,0,.3), 0 24px 60px -28px rgba(0,0,0,.75);
  --anel:0 0 0 3px rgba(45,212,191,.28);
}
[data-tema="escuro"] .aviso.ruim,  [data-tema="escuro"] .msg-erro{color:#FFC2C8}
[data-tema="escuro"] .aviso.atencao{color:#F8D9A8}
[data-tema="escuro"] .aviso.bom,   [data-tema="escuro"] .msg-ok{color:#A8EBD3}
[data-tema="escuro"] th,
[data-tema="escuro"] table.dados th{background:var(--leve)}
[data-tema="escuro"] tr:hover td,
[data-tema="escuro"] table.dados tbody tr:hover,
[data-tema="escuro"] .linha-perm:nth-child(odd){background:#1A1A1A}
[data-tema="escuro"] tr.linha-clicavel:hover td{background:var(--indigo-sup)}
[data-tema="escuro"] .metrica.destaque,
[data-tema="escuro"] .cartao > .metricas .metrica.destaque{background:linear-gradient(150deg,#12302C,#161A1A); border-color:var(--acento-borda)}
[data-tema="escuro"] .ou-certificado .botao.claro{background:#2A2A2A; border-color:#2A2A2A; color:var(--indigo-fte)}
[data-tema="escuro"] .ou-certificado .botao.claro:hover{background:#353535; border-color:#353535}
/* botões de perigo e sucesso: o vermelho e o verde do escuro são claros
   demais para texto branco, então o fundo volta ao tom do claro */
[data-tema="escuro"] .btn.perigo{background:#C23A47}
[data-tema="escuro"] .btn.perigo:hover{background:#A62F3A}
[data-tema="escuro"] .btn.sucesso{background:#0E8F6A}
[data-tema="escuro"] .btn.sucesso:hover{background:#0A6B4F}
[data-tema="escuro"] .modal-overlay{background:rgba(0,0,0,.65)}
/* o logo do Matter já é branco (foi desenhado para fundo escuro): no escuro
   ele aparece como é, sem o filtro que o deixa preto no claro */
[data-tema="escuro"] .rail .marca .logo,
[data-tema="escuro"] .acesso-marca .logo{filter:none; opacity:1}
[data-tema="escuro"] .acesso-marca{
  background:
    radial-gradient(120% 95% at 8% 12%, #0F2A27 0%, rgba(15,42,39,0) 62%),
    radial-gradient(110% 90% at 96% 96%, #10302B 0%, rgba(16,48,43,0) 58%),
    #0D0D0D;
}
[data-tema="escuro"] ::selection{background:var(--acento-borda); color:#fff}

/* A chave do tema no menu do usuário, como a do Selina: texto à esquerda,
   interruptor à direita. Seletor com .suspenso > button para vencer o estilo
   dos itens do menu. */
.suspenso > button.menu-tema{display:flex; align-items:center; gap:12px; width:100%; padding:10px 12px; margin:4px 0;
  border:1px solid var(--traco); border-radius:var(--r); background:var(--leve); cursor:pointer;
  font:inherit; color:var(--tinta); text-align:left}
.suspenso > button.menu-tema:hover{border-color:var(--traco2); background:var(--leve)}
.menu-tema .txt{flex:1; display:flex; flex-direction:column; gap:1px; min-width:0}
.menu-tema .txt b{font-size:13.5px; font-weight:700}
.menu-tema .txt span{font-size:11.5px; color:var(--fraca)}
.menu-tema .chave{flex:none; position:relative; width:42px; height:24px; border-radius:999px;
  background:var(--traco2); transition:background .18s}
.menu-tema .chave::after{content:""; position:absolute; top:3px; left:3px; width:18px; height:18px;
  border-radius:50%; background:#fff; box-shadow:0 1px 2px rgba(0,0,0,.3); transition:transform .18s}
.menu-tema[aria-checked="true"] .chave{background:#8B7CF6}
.menu-tema[aria-checked="true"] .chave::after{transform:translateX(18px)}

/* ===== AÇÕES EM ÍCONE NAS LISTAS =====
   Coluna de ações de toda tabela: um botão quadrado por ação, só com o
   ícone, no lugar dos botões de texto que empurravam as outras colunas e
   quebravam o nome do cliente em quatro linhas. O nome da ação aparece no
   balão (data-dica) ao passar o mouse ou focar pelo teclado, e vai em
   aria-label para leitor de tela. Gerado por botaoIcone() em head.php. */
td.col-acoes{width:1%; white-space:nowrap}
/* à esquerda: assim editar, ativar e excluir caem na mesma coluna em toda
   linha, e os opcionais (selo, copiar) sobram no fim */
td.col-acoes .acoes-linha{justify-content:flex-start}
.acoes-linha{gap:6px; flex-wrap:nowrap}
.acoes-linha .ic{
  position:relative; width:34px; height:34px; padding:0; margin:0;
  border:1px solid var(--traco); border-radius:9px; background:var(--branco);
  color:var(--suave); display:inline-flex; align-items:center; justify-content:center;
  cursor:pointer; transition:color .14s, border-color .14s, background .14s;
}
.acoes-linha .ic svg{width:16px; height:16px}
.acoes-linha .ic:hover{border-color:var(--acento-borda); color:var(--indigo); background:var(--indigo-sup)}
.acoes-linha .ic.perigo:hover{border-color:var(--rubi); color:var(--rubi); background:var(--rubi-sup)}
.acoes-linha .ic.sucesso{color:var(--verde)}
.acoes-linha .ic.sucesso:hover{border-color:var(--verde); background:var(--verde-sup)}
.acoes-linha .ic.ligado{color:var(--indigo); border-color:var(--acento-borda); background:var(--indigo-sup)}
.acoes-linha .ic:disabled{opacity:.55; cursor:wait}
.acoes-linha .ic.ocupado svg{animation:ic-gira 1s linear infinite}
@keyframes ic-gira{to{transform:rotate(360deg)}}

/* balão com o nome da ação; abre para cima para não cobrir a linha de baixo */
[data-dica]::after{
  content:attr(data-dica); position:absolute; bottom:calc(100% + 7px); left:50%;
  transform:translateX(-50%) translateY(3px); white-space:nowrap; pointer-events:none;
  background:var(--tinta); color:var(--branco); font:600 12px/1 var(--ui);
  padding:6px 9px; border-radius:7px; opacity:0; transition:opacity .12s, transform .12s; z-index:30;
}
[data-dica]:hover::after,
[data-dica]:focus-visible::after{opacity:1; transform:translateX(-50%) translateY(0)}

/* colunas que não devem quebrar no meio (slug, arquivo de perfil) */
td.nao-quebra{white-space:nowrap}

@media (max-width:760px){
  td.col-acoes{width:100%}
  .acoes-linha{justify-content:flex-start; flex-wrap:wrap; padding-top:4px}
}

/* login: "Esqueci a senha" na mesma linha do rótulo da senha */
.rotulo-com-link{display:flex; justify-content:space-between; align-items:baseline; gap:12px}
.rotulo-com-link a{font-size:12.5px; font-weight:600}

/* ===== ORDENAR PELO CABEÇALHO (mesmo desenho do Orbit)
   Lista paginada: o cabeçalho é link (app/Lista.php). As outras: botão
   posto pelo matter.js. As duas setas sempre à vista dizem que a coluna
   ordena; a acesa, para que lado. */
th.ordenavel{padding:0}
th.ordenavel a, th.ordenavel button.ordenar{
  display:flex; align-items:center; gap:6px; width:100%; padding:10px 16px; border:0; background:none;
  font:inherit; letter-spacing:inherit; text-transform:inherit; color:inherit; cursor:pointer;
  white-space:nowrap; text-align:inherit; text-decoration:none;
}
th.ordenavel.centro a, th.ordenavel.centro button.ordenar{justify-content:center}
th.ordenavel a:hover, th.ordenavel button.ordenar:hover{color:var(--indigo); background:var(--leve); text-decoration:none}
th.ordenavel button.ordenar:focus-visible, th.ordenavel a:focus-visible{outline:none; box-shadow:inset var(--anel)}
th.ordenada a, th.ordenada button.ordenar{color:var(--indigo-fte)}
.setas-ordem{display:inline-flex; flex-direction:column; gap:2px; flex:0 0 auto}
.setas-ordem i{display:block; width:0; height:0; border-left:4px solid transparent; border-right:4px solid transparent; opacity:.35}
.setas-ordem .s-cima{border-bottom:5px solid currentColor}
.setas-ordem .s-baixo{border-top:5px solid currentColor}
.setas-ordem.asc .s-cima, .setas-ordem.desc .s-baixo{opacity:1; color:var(--indigo)}
.setas-ordem.asc .s-baixo, .setas-ordem.desc .s-cima{opacity:.18}

/* Filtros da barra de cada lista: o seletor não cresce até a opção mais
   longa ("Conector: Portal da prefeitura (anexos)" empurrava o botão de
   ação para a linha de baixo). O texto que não cabe sai com reticências; a
   lista aberta continua mostrando o nome inteiro. */
.barra-acoes select{ width:auto; max-width:200px; text-overflow:ellipsis; }
.barra-acoes input[type="search"]{ max-width:220px; }
@media (max-width:760px){
  .barra-acoes select, .barra-acoes input[type="search"]{ max-width:100%; }
}

/* quadro "Fila agora" do Painel */
.fila-ao-vivo{ display:inline-flex; align-items:center; gap:6px; font-size:11px; font-weight:600; color:var(--verde); text-transform:uppercase; letter-spacing:.06em; }
.fila-ao-vivo i{ width:8px; height:8px; border-radius:50%; background:var(--verde); animation:fila-pulso 1.6s ease-in-out infinite; }
@keyframes fila-pulso{ 0%,100%{ opacity:1; } 50%{ opacity:.25; } }
@media (prefers-reduced-motion: reduce){ .fila-ao-vivo i{ animation:none; } }
.fila-etapas{ display:grid; grid-template-columns:repeat(auto-fit, minmax(130px, 1fr)); gap:10px; margin-bottom:18px; }
.fila-etapa{ display:flex; flex-direction:column; gap:2px; padding:12px 14px; border:1px solid var(--traco); border-radius:var(--r-g); background:var(--branco); text-decoration:none; color:inherit; border-top:3px solid var(--traco); transition:border-color .15s; }
.fila-etapa:hover{ border-color:var(--suave); }
.fila-etapa b{ font-family:var(--dado); font-size:24px; font-weight:600; letter-spacing:-.02em; }
.fila-etapa span{ font-size:12px; font-weight:600; color:var(--suave); }
.fila-etapa small{ font-size:11px; color:var(--suave); min-height:1em; }
.fila-etapa.ativo{ border-top-color:var(--indigo-fte); } .fila-etapa.ativo b{ color:var(--indigo-fte); }
.fila-etapa.ia{ border-top-color:var(--indigo-fte); }
.fila-etapa.alerta{ border-top-color:var(--ambar); } .fila-etapa.alerta b{ color:var(--ambar); }
.fila-etapa.sucesso{ border-top-color:var(--verde); } .fila-etapa.sucesso b{ color:var(--verde); }
.fila-etapa.perigo{ border-top-color:var(--rubi); } .fila-etapa.perigo b{ color:var(--rubi); }
.fila-etapa.zerado{ border-top-color:var(--traco); } .fila-etapa.zerado b{ color:var(--suave); }
.fila-colunas{ display:grid; grid-template-columns:minmax(0,1fr) minmax(0,1fr); gap:20px; }
.fila-colunas > div{ min-width:0; }
@media (max-width: 800px){ .fila-colunas{ grid-template-columns:minmax(0,1fr); } }
.fila-colunas h3{ font-size:13px; margin:0 0 8px; color:var(--suave); text-transform:uppercase; letter-spacing:.05em; }
.fila-lista{ list-style:none; margin:0; padding:0; }
.fila-lista li{ border-bottom:1px solid var(--traco); }
.fila-lista li:last-child{ border-bottom:0; }
.fila-lista li.vazio{ padding:10px 0; font-size:13px; color:var(--suave); }
.fila-lista a{ display:flex; align-items:center; gap:8px; padding:8px 0; color:inherit; text-decoration:none; font-size:13px; min-width:0; }
.fila-lista a:hover .nome{ text-decoration:underline; }
.fila-lista .nome{ flex:1; min-width:0; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fila-lista em{ font-style:normal; font-size:12px; color:var(--suave); white-space:nowrap; flex:0 1 auto; max-width:35%; min-width:0; overflow:hidden; text-overflow:ellipsis; }
.fila-lista .badge, .fila-lista time{ flex:none; }
.fila-lista time{ font-size:12px; color:var(--suave); white-space:nowrap; }
.fila-lista .quem{ flex:none; max-width:120px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:12px; color:var(--tinta); }
.fila-extras{ display:grid; grid-template-columns:repeat(auto-fit, minmax(min(260px, 100%), 1fr)); gap:10px; margin-top:16px; }
.fila-extras:empty{ display:none; }
.fila-extra{ display:flex; flex-direction:column; gap:4px; padding:12px 14px; border:1px solid var(--traco); border-radius:var(--r-g); font-size:13px; min-width:0; }
.fila-extra span, .fila-extra small{ color:var(--suave); }
.fila-extra small{ font-size:11px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fila-barra{ height:6px; border-radius:3px; background:var(--leve); overflow:hidden; }
.fila-barra i{ display:block; height:100%; background:var(--indigo-fte); transition:width .4s; }

/* quadro "Gasto com IA" do Painel (Softsul) */
.gasto-ia-numeros{ display:grid; grid-template-columns:repeat(auto-fit, minmax(min(180px, 100%), 1fr)); gap:10px; }
.gasto-ia-numeros > div{ display:flex; flex-direction:column; gap:2px; padding:12px 14px; border:1px solid var(--traco); border-radius:var(--r-g); min-width:0; }
.gasto-ia-numeros b{ font-family:var(--dado); font-size:22px; font-weight:600; letter-spacing:-.02em; }
.gasto-ia-numeros > div:first-child b{ color:var(--indigo-fte); }
.gasto-ia-numeros span{ font-size:12px; color:var(--suave); }

/* quadro "Dados anonimizados por tipo" do Painel */
.por-tipo{ display:grid; grid-template-columns:repeat(auto-fill, minmax(min(160px, 100%), 1fr)); gap:10px; }
.por-tipo > div{ display:flex; flex-direction:column; gap:4px; padding:12px 14px; border:1px solid var(--traco); border-radius:var(--r-g); min-width:0; }
.por-tipo .rotulo{ font-size:12px; font-weight:600; color:var(--suave); line-height:1.3; min-height:2.6em; overflow-wrap:anywhere; }
.por-tipo b{ font-family:var(--dado); font-size:22px; font-weight:600; letter-spacing:-.02em; }
.por-tipo small{ font-size:11px; color:var(--suave); }

/* Conectores: progresso da sincronização na coluna "Última sincronização" */
.progresso-sinc:not([hidden]){ display:flex; flex-direction:column; gap:4px; min-width:110px; color:var(--indigo-fte); font-size:12.5px; font-weight:600; cursor:help; }
.progresso-sinc .barra{ display:block; height:5px; border-radius:3px; background:var(--leve); overflow:hidden; }
.progresso-sinc .barra i{ display:block; height:100%; background:var(--indigo-fte); transition:width .4s; }

/* --- relógios da tela de entrada (o mesmo cartão do Orbit) ---
   Servem para a pessoa ver o desencontro antes de o código do autenticador
   ser recusado sem explicação. */
.cartao-relogios{
  margin-top:4px; padding:12px 14px 13px;
  border:1px solid var(--traco); border-radius:var(--r-g); background:var(--leve);
}
.cab-relogios{
  display:flex; align-items:center; gap:7px; margin-bottom:10px;
  font-size:10.5px; letter-spacing:.12em; text-transform:uppercase; color:var(--fraca);
}
.cab-relogios svg{width:13px; height:13px}
.pe-relogios{font-size:11px; color:var(--fraca); line-height:1.45; margin-top:9px}
.relogios{display:grid; grid-template-columns:repeat(3,1fr); gap:8px}
.um-relogio{display:flex; flex-direction:column; gap:2px; align-items:center; text-align:center}
.um-relogio .rot{font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:var(--fraca)}
.um-relogio b{font-family:var(--dado); font-size:15px; font-variant-numeric:tabular-nums}
@media (max-width:420px){ .relogios{grid-template-columns:1fr 1fr} .um-relogio.diferenca{grid-column:1 / -1} }
.um-relogio.diferenca b{color:var(--fraca)}
.um-relogio.diferenca.bom b{color:var(--verde)}
.um-relogio.diferenca.ruim b{color:var(--rubi)}
.recado-relogio{
  grid-column:1 / -1; font-size:11.5px; line-height:1.5; color:#7E2630;
  background:var(--rubi-sup); border-radius:var(--r-p); padding:9px 12px; margin-top:4px;
}
.recado-relogio[hidden]{display:none}
#area-biometria .botao{width:100%}

/* Meus dados: renomear o aparelho na própria linha da tabela (como no Orbit) */
.renomear-aparelho{display:flex; align-items:center; gap:8px}
.renomear-aparelho .entrada{background:var(--branco); padding:0 10px; min-width:0; flex:1}
.renomear-aparelho input{border:0; background:transparent; outline:none; font-family:inherit; font-size:13.5px; padding:7px 0; width:100%; color:var(--tinta)}
#seguranca .cadastro-2fa .qr{max-width:200px}

/* Celular: números do Painel três por linha, menores (os sete grandes,
   dois por linha, ocupavam a tela inteira antes de qualquer informação) */
@media (max-width:560px){
  .cards-stats{ grid-template-columns:repeat(3, minmax(0,1fr)); gap:8px; margin-bottom:14px; }
  .card-stat{ padding:10px 6px; }
  .card-stat .valor{ font-size:17px; }
  .card-stat .rotulo{ font-size:9.5px; letter-spacing:.06em; overflow-wrap:anywhere; }
  .por-tipo{ grid-template-columns:repeat(2, minmax(0,1fr)); gap:8px; }
  .por-tipo > div{ padding:10px 12px; }
  .por-tipo b{ font-size:18px; }
  .fila-etapas{ grid-template-columns:repeat(2, minmax(0,1fr)); gap:8px; }
  .fila-etapa{ padding:10px 12px; }
  .fila-etapa b{ font-size:20px; }
  .gasto-ia-numeros{ grid-template-columns:repeat(2, minmax(0,1fr)); }
}
/* selo comprido (ação do log) quebra em vez de sair do cartão */
@media (max-width:700px){
  table.responsiva td .badge{ white-space:normal; text-align:left; max-width:65%; flex:0 1 auto; }
}
@media (max-width:700px){
  /* lista de páginas do documento: os títulos das colunas cabem inteiros */
  .lista-paginas-rolagem th, .lista-paginas-rolagem th button.ordenar{ font-size:10px; letter-spacing:.02em; padding-left:6px !important; padding-right:4px !important; }
  .lista-paginas-rolagem td{ padding-left:8px !important; padding-right:8px !important; }
}

/* Celular: tabela em cartões dentro de .rolagem (Meus dados) não pode
   manter a largura mínima de tabela larga, senão os valores ficam fora da
   área visível e aparece rolagem lateral */
@media (max-width:700px){
  .rolagem:has(> table.responsiva){ overflow-x:visible; border:0; background:transparent; }
  table.dados.responsiva, .rolagem.sem-borda table.dados.responsiva{ min-width:0; }
  table.dados.responsiva td{ padding:4px 0; border-bottom:0; }
  table.responsiva td .renomear-aparelho{ width:100%; }
}

/* janelas mais largas (26/10/2026): .media para formulários curtos, .larga
   para configuração e detalhes; campos lado a lado em .grade-campos */
/* Largura: 70 a 80% da tela em todas as janelas (pedido do Luiz, 26/10/2026).
   O !important vence os max-width antigos escritos direto em algumas telas. */
.modal-caixa, .modal-caixa.media, .modal-caixa.larga{ width:76vw; max-width:1400px !important; padding-top:0; overflow-x:hidden; }
/* título e botão de fechar ficam no topo enquanto o conteúdo rola */
.modal-cabecalho{
  position:sticky; top:0; z-index:5; background:var(--branco);
  margin:0 -24px 16px; padding:18px 24px 12px; border-bottom:1px solid var(--traco);
}
.modal-caixa table{ min-width:0; }
@media (max-width:700px){
  .modal-overlay{ padding:10px; }
  .modal-caixa, .modal-caixa.media, .modal-caixa.larga{ width:100%; padding:0 16px 16px; max-height:94vh; }
  .modal-cabecalho{ margin:0 -16px 14px; padding:14px 16px 10px; }
}
.grade-campos{ display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); gap:0 16px; }
.grade-campos.tres{ grid-template-columns:2fr 1fr 2fr; }
@media (max-width:700px){
  .grade-campos, .grade-campos.tres{ grid-template-columns:minmax(0, 1fr); }
}

/* ------------------------------------------------- menu lateral (como no Orbit)
   Logotipo centralizado na barra. Só na tela larga, a borda direita do menu,
   de cima a baixo, é o botão de recolher: uma faixa fina que acende ao passar
   o mouse, com a bolinha da seta sempre à vista no meio da altura. Recolhido,
   ficam os ícones, e o nome aparece ao passar o mouse (title, matter.js). */
.rail .marca{justify-content:center}
.rail .logo-mini{display:none; width:30px; height:30px; border-radius:8px}
.recolher-menu{position:fixed; top:0; left:232px; width:14px; height:100vh; margin:0 0 0 -7px; padding:0;
  border:0; background:transparent; cursor:pointer; z-index:30}
.recolher-menu::before{content:""; position:absolute; top:0; bottom:0; left:6px; width:2px;
  background:transparent; transition:background .15s}
.recolher-menu:hover::before, .recolher-menu:focus-visible::before{background:var(--indigo)}
.recolher-menu .puxador{position:absolute; top:50%; left:50%; width:24px; height:24px; margin:-12px 0 0 -12px;
  display:flex; align-items:center; justify-content:center; border-radius:50%;
  background:var(--branco); border:1px solid var(--traco2); color:var(--suave);
  box-shadow:0 1px 3px rgba(20,30,60,.12); cursor:pointer; transition:background .15s, color .15s}
.recolher-menu:hover .puxador, .recolher-menu:focus-visible .puxador{background:var(--indigo); border-color:var(--indigo); color:#fff}
.recolher-menu svg{width:14px; height:14px; transform:rotate(180deg)}
@media (min-width:821px){
  .menu-recolhido .shell{grid-template-columns:68px 1fr}
  .menu-recolhido .recolher-menu{left:68px}
  .menu-recolhido .recolher-menu svg{transform:none}
  .menu-recolhido .rail{padding:18px 10px; overflow-x:hidden}
  .menu-recolhido .rail .marca{justify-content:center; padding:6px 0 18px}
  .menu-recolhido .rail .marca .logo{display:none}
  .menu-recolhido .rail .logo-mini{display:block}
  .menu-recolhido .rail .nome-item{display:none}
  .menu-recolhido .rail .grupo{font-size:0; padding:0; margin:10px 8px 8px; border-top:1px solid var(--traco)}
  .menu-recolhido .rail .item{justify-content:center; padding:10px 0; position:relative}
}
@media (max-width:820px){ .recolher-menu{display:none} }
[data-tema="escuro"] .recolher-menu .puxador{box-shadow:0 1px 3px rgba(0,0,0,.5)}

/* -------------------------------------------------- lista de escolha
   Lista própria no lugar da do navegador em todo <select> (combo-lista,
   trazida do Centurion; o script está em matter.js). */
:root{
  /* ligadas aos tokens do Matter: o tema escuro já os redefine */
  --combo-fundo:var(--branco);
  --combo-texto:var(--tinta);
  --combo-borda:var(--traco);
  --combo-raio:12px;
  --combo-raio-busca:10px;
  --combo-sombra:var(--sombra-alta);
  --combo-destaque:var(--indigo);
  --combo-anel:var(--anel);
  --combo-foco:var(--leve);
  --combo-escolhido-texto:var(--indigo-fte);
  --combo-escolhido-fundo:var(--indigo-sup);
  --combo-desativado:var(--fraca);
  --combo-suave:var(--suave);
}

.combo-lista{
  position:fixed; z-index:1000; display:flex; flex-direction:column; overflow:hidden;
  background:var(--combo-fundo); color:var(--combo-texto); border:1px solid var(--combo-borda); border-radius:var(--combo-raio);
  box-shadow:var(--combo-sombra); font-size:14px; animation:combo-lista-abre .12s ease-out;
}
@keyframes combo-lista-abre{from{opacity:0; transform:translateY(-4px)}to{opacity:1; transform:none}}
.combo-lista-busca{
  margin:8px 8px 4px; padding:8px 11px; border:1px solid var(--combo-borda); border-radius:var(--combo-raio-busca);
  background:var(--combo-fundo); color:var(--combo-texto); font:inherit; font-size:13.5px; outline:none;
}
.combo-lista-busca:focus{border-color:var(--combo-destaque); box-shadow:var(--combo-anel)}
.combo-lista-itens{flex:1 1 auto; min-height:0; overflow-y:auto; padding:5px; overscroll-behavior:contain}
.combo-lista-item{
  position:relative; padding:8px 30px 8px 11px; border-radius:8px; cursor:pointer;
  white-space:nowrap; overflow:hidden; text-overflow:ellipsis; line-height:1.35;
}
.combo-lista-item.no-grupo{padding-left:20px}
.combo-lista-item.foco{background:var(--combo-foco)}
.combo-lista-item.escolhido{color:var(--combo-escolhido-texto); font-weight:600; background:var(--combo-escolhido-fundo)}
.combo-lista-item.escolhido::after{
  content:""; position:absolute; right:12px; top:50%; width:5px; height:9px; margin-top:-6px;
  border:solid currentColor; border-width:0 2px 2px 0; transform:rotate(45deg);
}
.combo-lista-item.desativado{color:var(--combo-desativado); cursor:default}
.combo-lista-grupo{padding:9px 11px 4px; font-size:11px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--combo-suave)}
.combo-lista-vazia{padding:10px 11px; color:var(--combo-suave)}
