/* =============================================================================
   Eventos de Conversão — sistema de design
   Tokens primeiro; componentes derivam deles. Sem hex solto em tela.

   Direção: painel de instrumentos. A barra lateral é escura e fixa — âncora da
   navegação; o conteúdo é claro e arejado, com o azul da marca reservado para
   o que exige ação. Verde SÓ em estado positivo, nunca em decoração.
   ============================================================================= */

:root {
  /* superfícies */
  --papel:        #f3f4fb;
  --superficie:   #ffffff;
  --superficie-2: #f6f7fc;
  --superficie-3: #eceef7;
  --linha:        #e4e6f1;
  --linha-forte:  #d3d6e6;

  /* tinta — preto azulado, nunca cinza puro */
  --tinta:        #14162b;
  --tinta-2:      #5c5f7c;   /* 6.2:1 — texto secundário continua texto */
  --tinta-3:      #6e7290;
  --tinta-4:      #9497b2;   /* rótulos e placeholders */

  /* acento */
  --acento:        #3b3fd0;
  --acento-forte:  #3034b4;
  --acento-suave:  #eceeff;
  --acento-tinta:  #ffffff;
  --acento-texto:  #3034b4;   /* acento legível sobre superfície clara */
  --acento-linha:  #c6c9f5;

  /* barra lateral — escura nos dois temas, por decisão de design */
  --sb:        #12143a;
  --sb-2:      #1c1f5e;
  --sb-tinta:  rgba(255, 255, 255, .66);
  --sb-linha:  rgba(255, 255, 255, .10);
  --sb-hover:  rgba(255, 255, 255, .08);
  --sb-ativo:  rgba(255, 255, 255, .14);

  /* semânticas */
  --ok:     #1a8a58;  --ok-suave:    #e1f5ea;
  --aviso:  #b06400;  --aviso-suave: #fff2da;
  --erro:   #c8393a;  --erro-suave:  #fdeaea;
  --info:   #2c5fd1;  --info-suave:  #e6f0ff;
  --ia:     #7a3fc8;  --ia-suave:    #f2e9fc;

  /* tipografia */
  --sans:  "Manrope", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
  --serif: "Instrument Serif", Georgia, "Times New Roman", serif;
  --mono:  "JetBrains Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;

  /* forma */
  /* quanto da cor da etapa entra no fundo da coluna: no claro basta um véu */
  --tom-etapa:     7%;
  --tom-etapa-cab: 13%;

  --raio:    14px;
  --raio-sm: 11px;
  --raio-xs: 8px;
  --sombra:    0 1px 2px rgba(20, 22, 60, .05), 0 10px 28px -14px rgba(20, 22, 60, .14);
  --sombra-2:  0 2px 6px rgba(20, 22, 60, .06), 0 16px 40px -18px rgba(20, 22, 60, .20);
  --sombra-3:  0 24px 60px -20px rgba(20, 22, 60, .28);
  --anel:      0 0 0 3px rgba(59, 63, 208, .22);

  --sidebar-w:  264px;
  --sidebar-wc: 76px;
  --topbar-h:   64px;

  /* movimento — um ritmo só para o produto inteiro */
  --mola:      cubic-bezier(.4, 0, .2, 1);
  --transicao: 150ms var(--mola);
}

/* Modo escuro: só quando o usuário escolhe. O padrão é claro. Não é inversão —
   os tons são recalculados e o acento clareia para manter contraste. */
:root[data-tema="escuro"] {
  --papel:        #0d0e19;
  --superficie:   #151729;
  --superficie-2: #1b1d32;
  --superficie-3: #22253c;
  --linha:        #262941;
  --linha-forte:  #363a55;
  /* no escuro a mesma porcentagem some: a cor precisa pesar mais */
  --tom-etapa:     15%;
  --tom-etapa-cab: 24%;

  --tinta:        #eceefb;
  --tinta-2:      #a4a8c9;
  --tinta-3:      #8b8fb0;
  --tinta-4:      #6b6f93;

  --acento:        #6d72ff;
  --acento-forte:  #8489ff;
  --acento-suave:  #22254f;
  --acento-tinta:  #0d0e19;
  --acento-texto:  #aeb1ff;
  --acento-linha:  #3a3f7d;

  --sb:   #0a0b16;
  --sb-2: #12142c;

  --ok:     #3fd18f;  --ok-suave:    #113126;
  --aviso:  #f2b24e;  --aviso-suave: #3a2a10;
  --erro:   #ff6b6b;  --erro-suave:  #3a1a1f;
  --info:   #7aa8f5;  --info-suave:  #15224a;
  --ia:     #b78cf2;  --ia-suave:    #2b1f46;

  --sombra:   0 1px 2px rgba(0, 0, 0, .4), 0 10px 28px -14px rgba(0, 0, 0, .6);
  --sombra-2: 0 2px 6px rgba(0, 0, 0, .5), 0 16px 40px -18px rgba(0, 0, 0, .7);
  --sombra-3: 0 24px 60px -20px rgba(0, 0, 0, .8);
  --anel:     0 0 0 3px rgba(109, 114, 255, .35);
  color-scheme: dark;
}

* { box-sizing: border-box; }
html { color-scheme: light; }

body {
  margin: 0;
  background: var(--papel);
  color: var(--tinta);
  font-family: var(--sans);
  font-size: 15px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
  /* halos de luz atrás do conteúdo: dão profundidade sem custar um elemento */
  background-image:
    radial-gradient(1200px 600px at 20% -10%, rgba(59, 63, 208, .08), transparent 60%),
    radial-gradient(800px 500px at 100% 0%, rgba(122, 108, 255, .08), transparent 60%);
  background-attachment: fixed;
}

a { color: var(--acento-texto); text-decoration: none; }
a:hover { color: var(--acento); text-decoration: underline; text-underline-offset: 2px; }
button { font: inherit; cursor: pointer; color: inherit; }
input, select, textarea { font: inherit; }
input::placeholder, textarea::placeholder { color: var(--tinta-4); }
::selection { background: var(--acento-suave); color: var(--tinta); }
svg.ic { flex: none; }
/* SVG inline sem width/height vinha ocupando a tela inteira. :where() tem
   especificidade ZERO, então qualquer regra de componente continua mandando
   (.grafico-dias com width:100%, por exemplo). */
svg:where(:not([width])) { width: 18px; height: 18px; flex: none; }

:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; border-radius: var(--raio-xs); }

* { scrollbar-width: thin; scrollbar-color: var(--linha-forte) transparent; }
::-webkit-scrollbar { width: 10px; height: 10px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: var(--linha-forte); border-radius: 99px; border: 3px solid transparent; background-clip: content-box; }
::-webkit-scrollbar-thumb:hover { background: var(--tinta-4); background-clip: content-box; }

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation: none !important; transition: none !important; }
}

[x-cloak] { display: none !important; }

/* -----------------------------------------------------------------------------
   Movimento — poucos gestos, reaproveitados
   ----------------------------------------------------------------------------- */
@keyframes surgir  { from { opacity: 0; transform: scale(.97) translateY(6px); } to { opacity: 1; transform: none; } }
@keyframes aparece { from { opacity: 0; } to { opacity: 1; } }
@keyframes subir   { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
@keyframes toastIn { from { opacity: 0; transform: translateY(10px) scale(.97); } to { opacity: 1; transform: none; } }
@keyframes girar   { to { transform: rotate(360deg); } }
@keyframes pulsar  { 50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--erro) 22%, transparent); } }
@keyframes brilho  { to { background-position: -200% 0; } }

/* =============================================================================
   Casca: barra lateral escura + topo + conteúdo
   ============================================================================= */
.casca { display: flex; min-height: 100dvh; width: 100%; }

.sidebar {
  position: sticky; top: 0; left: 0; z-index: 50;
  height: 100dvh; width: var(--sidebar-w); flex: none;
  display: flex; flex-direction: column;
  background: linear-gradient(180deg, var(--sb), var(--sb-2));
  color: #fff;
  transition: width .25s var(--mola), transform .25s var(--mola);

  /* Rola em vez de cortar. O super_admin tem quatro itens a mais que o gestor,
     e numa tela baixa o rodapé com o avatar e o "Sair" ficava abaixo do corte
     do `overflow: hidden` que estava aqui — sem scroll, o botão de sair
     simplesmente não existia. O eixo X continua escondido por causa da
     animação de recolher a barra. */
  overflow-x: hidden;
  overflow-y: auto;
  scrollbar-width: thin;
  scrollbar-color: var(--sb-linha) transparent;
}
/* Barra de rolagem discreta: sobre o fundo escuro, a padrão do Windows brilha
   mais que o menu. */
.sidebar::-webkit-scrollbar { width: 8px; }
.sidebar::-webkit-scrollbar-track { background: transparent; }
.sidebar::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, .13); border-radius: 99px; }
.sidebar:hover::-webkit-scrollbar-thumb { background: rgba(255, 255, 255, .22); }
.casca.recolhida .sidebar { width: var(--sidebar-wc); }
.casca.recolhida .so-aberta { display: none !important; }
.so-recolhida { display: none; }
.casca.recolhida .so-recolhida { display: flex; }
.casca.recolhida .sb-expandir { display: grid; }

.marca { display: flex; align-items: center; gap: 12px; padding: 18px 16px 12px; min-height: 72px; color: inherit; }
.marca:hover { text-decoration: none; }
.marca-icone {
  width: 38px; height: 38px; flex: none; border-radius: 11px;
  background: #fff; color: var(--acento);
  display: grid; place-items: center; overflow: hidden;
  box-shadow: 0 8px 20px -8px rgba(0, 0, 0, .5);
}
.marca-icone img { display: block; width: 100%; height: 100%; }
.marca-nome { font-weight: 700; font-size: 12px; white-space: nowrap; line-height: 1.25; letter-spacing: .01em; }
.marca-papel { font-size: 11px; color: var(--sb-tinta); white-space: nowrap; }
.casca.recolhida .marca { justify-content: center; padding: 18px 8px 12px; }

.sb-botao {
  width: 30px; height: 30px; flex: none; border: 0; border-radius: 8px;
  background: transparent; color: var(--sb-tinta);
  display: grid; place-items: center; transition: background var(--transicao), color var(--transicao);
}
.sb-botao:hover { background: var(--sb-hover); color: #fff; }
.sb-expandir {
  /* só existe com a barra recolhida — a regra .casca.recolhida abaixo liga */
  display: none; place-items: center;
  margin: 0 auto 8px; width: 38px; height: 34px;
  border: 1px solid var(--sb-linha); border-radius: 9px;
  background: var(--sb-hover); color: var(--sb-tinta);
}
.sb-expandir:hover { background: var(--sb-ativo); color: #fff; }

/* seletor de cliente na barra lateral */
.troca { padding: 4px 12px 8px; position: relative; }
.troca-botao {
  display: flex; align-items: center; gap: 10px; width: 100%; height: 50px; padding: 0 10px;
  border: 1px solid var(--sb-linha); border-radius: 13px;
  background: var(--sb-hover); color: #fff; text-align: left;
  transition: background var(--transicao), border-color var(--transicao);
}
.troca-botao:hover { background: var(--sb-ativo); border-color: rgba(255, 255, 255, .25); }
.troca-sigla { overflow: hidden; padding: 0;
  width: 30px; height: 30px; flex: none; border-radius: 9px;
  background: linear-gradient(135deg, #7a6cff, #3b3fd0); color: #fff;
  font-weight: 800; font-size: 13px; display: grid; place-items: center;
  box-shadow: 0 4px 12px -4px rgba(0, 0, 0, .5);
}
.troca-sigla img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: inherit; }
.troca-nome { display: block; font-weight: 700; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.troca-meta { display: flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--sb-tinta); }
.troca-meta i { width: 6px; height: 6px; border-radius: 50%; display: inline-block; background: var(--ok); }
.troca-meta.atencao i { background: #f2b24e; }
.troca-fixa { display: flex; align-items: center; gap: 10px; margin: 4px 12px 8px; padding: 10px; border-radius: 13px; background: var(--sb-hover); }

.troca-menu {
  position: absolute; z-index: 60; top: calc(100% - 2px); left: 12px; right: 12px;
  display: none; padding: 10px;
  background: var(--superficie); color: var(--tinta);
  border: 1px solid var(--linha); border-radius: var(--raio); box-shadow: var(--sombra-3);
}
.troca-menu.aberta { display: block; animation: surgir .18s var(--mola); }
.troca-busca { display: flex; align-items: center; gap: 8px; height: 38px; padding: 0 10px; border: 1px solid var(--linha); border-radius: var(--raio-sm); background: var(--superficie-2); color: var(--tinta-4); }
.troca-busca input { flex: 1; min-width: 0; border: 0; background: transparent; outline: 0; font-size: 13.5px; color: var(--tinta); }
.troca-lista { display: flex; flex-direction: column; gap: 2px; margin-top: 8px; max-height: 260px; overflow-y: auto; }
.troca-lista button {
  display: flex; align-items: center; gap: 10px; width: 100%; height: 50px; padding: 0 8px;
  border: 0; border-radius: var(--raio-sm); background: transparent; text-align: left; color: var(--tinta);
}
.troca-lista button:hover { background: var(--superficie-2); }
.troca-lista button.atual { background: var(--acento-suave); }
.troca-lista .troca-sigla { background: var(--acento-suave); color: var(--acento-texto); box-shadow: none; }
.troca-lista .n { display: block; font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.troca-lista .d { display: block; font-size: 12px; color: var(--tinta-4); }
.troca-vazio { padding: 18px; text-align: center; color: var(--tinta-4); font-size: 13px; }
.troca-novo {
  display: flex; align-items: center; gap: 8px; width: 100%; height: 38px; padding: 0 10px; margin-top: 8px;
  border: 0; border-top: 1px solid var(--linha); border-radius: 0 0 var(--raio-xs) var(--raio-xs);
  background: transparent; color: var(--acento-texto); font-weight: 600; font-size: 13.5px;
  padding-top: 8px;
}
.troca-novo:hover { text-decoration: none; }

/* navegação */
.nav { display: flex; flex-direction: column; gap: 2px; padding: 6px 12px; }
.nav a {
  position: relative; display: flex; align-items: center; gap: 12px;
  height: 42px; padding: 0 12px; border-radius: var(--raio-sm);
  font-size: 14.5px; color: var(--sb-tinta); text-decoration: none;
  transition: background var(--transicao), color var(--transicao);
}
.nav a:hover { background: var(--sb-hover); color: #fff; text-decoration: none; }
.nav a.ativo { background: var(--sb-ativo); color: #fff; font-weight: 600; }
.nav a.ativo::before { content: ""; position: absolute; left: -12px; top: 11px; width: 3px; height: 20px; border-radius: 0 3px 3px 0; background: #fff; }
.nav a .ic { width: 20px; flex: none; }
.nav a > span { flex: 1; white-space: nowrap; }
.nav a > span.nav-badge { flex: none; }
/* Sem isto o span herda `flex: 1`, estica, e o raio de 50% vira pilula. */
.nav a > span.nav-sinal { flex: none; }
.nav-badge {
  min-width: 20px; height: 20px; padding: 0 6px; border-radius: 10px;
  background: var(--sb-ativo); color: #fff;
  font-size: 11px; font-weight: 700; display: grid; place-items: center;
}
.nav-badge.perigo { background: #ff6b6b; color: #fff; }

/* Estado dos numeros no proprio menu: verde de pe, vermelho caido. Sem
   animacao no verde — nada ali pede acao, so confirma que funciona. */
.nav-sinal { margin-left: auto; flex: none; display: grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; }
.nav-sinal.ok   { background: color-mix(in srgb, #34c759 18%, transparent); color: #1f9d45; }
.nav-sinal.caiu { background: color-mix(in srgb, #ff6b6b 20%, transparent); color: #d92f2f; }
.casca.recolhida .nav-sinal { position: absolute; top: 5px; right: 5px; width: 14px; height: 14px; margin: 0; }
.casca.recolhida .nav-sinal svg { width: 10px; height: 10px; }

/* Grupo recolhivel da administracao */
/* Cabecalho do grupo: precisa PARECER botao. Antes era um rotulo igual aos
   outros da barra, e ninguem descobria que abria. Agora tem fundo proprio,
   seta e realce no hover. */
.nav-grupo-cab {
  width: 100%; display: flex; align-items: center; gap: 8px; cursor: pointer;
  background: var(--sb-hover); border: 0; border-radius: var(--raio-sm);
  /* 12px nas laterais: o mesmo respiro do padding de `.nav`, para o botao
     alinhar com os itens do menu em vez de encostar na borda da barra. */
  margin: 12px 12px 2px; width: calc(100% - 24px); padding: 9px 12px; font: inherit;
  font-size: 12px; font-weight: 700; letter-spacing: .04em;
  color: var(--sb-tinta); transition: background var(--transicao), color var(--transicao);
}
.nav-grupo-cab:hover { background: var(--sb-ativo); color: #fff; }
.nav-grupo-cab:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

/* Aberto, o grupo e uma lista secundaria: menor e mais junta, para nao empurrar
   o dia a dia (Inicio, Funil, Insights) para fora da tela. */
.nav-grupo-itens { gap: 1px; padding-left: 6px; }
.nav-grupo-itens a { height: 34px; font-size: 13.5px; gap: 10px; }
.nav-grupo-itens a .ic { width: 17px; }
.nav-grupo-itens a svg { width: 17px; height: 17px; }
.nav-grupo-cab span:first-child { flex: 1; text-align: left; }
.nav-grupo-seta { display: grid; place-items: center; transition: transform var(--transicao); }
.nav-grupo-seta.girada { transform: rotate(180deg); }

/* Com a barra recolhida nao ha cabecalho para clicar: os itens voltam a
   aparecer sempre, como icones, que e o modo dela de funcionar. */
.casca.recolhida .nav-grupo-itens { display: flex !important; }

.casca.recolhida .nav a { justify-content: center; padding: 0; }
.casca.recolhida .nav-badge { position: absolute; top: 4px; right: 6px; min-width: 16px; height: 16px; font-size: 9.5px; padding: 0 4px; }

.nav-fundo { margin-top: auto; }
/* a agência do usuário cliente, no pé da barra lateral */
.sb-agencia {
  margin: 0 12px 12px; padding: 12px 12px 10px; border-radius: 13px; background: var(--sb-hover);
  display: flex; flex-direction: column; gap: 3px; min-width: 0;
}
.sb-agencia-rot { font-size: 10.5px; font-weight: 800; letter-spacing: .1em; text-transform: uppercase; color: var(--sb-tinta); }
.sb-agencia > b { font-size: 14px; font-weight: 700; color: #fff; overflow-wrap: anywhere; margin-bottom: 2px; }
.sb-agencia a { display: flex; align-items: center; gap: 7px; font-size: 12.5px; color: var(--sb-tinta); min-width: 0; }
.sb-agencia a span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.sb-agencia a:hover { color: #fff; text-decoration: none; }

.nav-rotulo { padding: 0 24px 6px; font-size: 10.5px; font-weight: 800; letter-spacing: .1em; color: var(--sb-tinta); opacity: .8; white-space: nowrap; }
.casca.recolhida .nav-fundo::before { content: ""; display: block; height: 1px; background: var(--sb-linha); margin: 6px 18px; }

.sidebar-rodape { margin: 12px; padding: 10px 0 0; border-top: 1px solid var(--sb-linha); display: flex; align-items: center; gap: 10px; }
.avatar {
  width: 34px; height: 34px; flex: none; border-radius: 50%;
  background: rgba(255, 255, 255, .14); color: #fff;
  border: 1px solid var(--sb-linha);
  font-weight: 700; font-size: 13px; display: grid; place-items: center;
}
/* com foto, a bolinha vira moldura: a imagem preenche e corta em círculo */
.avatar { overflow: hidden; padding: 0; }
.avatar img, .avatar-botao img { width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 50%; }

.quem { flex: 1; min-width: 0; line-height: 1.2; }
.quem b { display: block; font-weight: 600; font-size: 13.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.quem span { display: block; font-size: 12px; color: var(--sb-tinta); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.quem-link { color: inherit; }
.quem-link:hover { text-decoration: none; }
/* A palavra embaixo do icone: porta sozinha nao diz o que faz, e sair da conta
   e das poucas acoes da barra que a pessoa nao quer fazer por engano. Vermelho
   fraco — aviso, nao alarme. */
.sair {
  width: 40px; flex: none; border: 1px solid var(--sb-linha); border-radius: var(--raio-xs);
  background: transparent; color: #ff9d9d; text-decoration: none;
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 1px;
  padding: 5px 2px; transition: background var(--transicao), color var(--transicao);
}
.sair span { font-size: 9px; line-height: 1; letter-spacing: .04em; }
.sair:hover { background: #ff6b6b; color: #fff; text-decoration: none; border-color: #ff6b6b; }
.casca.recolhida .sidebar-rodape { justify-content: center; }

/* -----------------------------------------------------------------------------
   Topo
   ----------------------------------------------------------------------------- */
.principal { flex: 1; min-width: 0; display: flex; flex-direction: column; }

.topbar {
  position: sticky; top: 0; z-index: 30;
  display: flex; align-items: center; gap: 12px;
  height: var(--topbar-h); padding: 0 28px;
  background: color-mix(in srgb, var(--superficie) 82%, transparent);
  backdrop-filter: blur(14px); -webkit-backdrop-filter: blur(14px);
  border-bottom: 1px solid var(--linha);
}
.topbar-titulo { flex: none; line-height: 1.1; }
.migalha { display: flex; gap: 6px; align-items: center; font-size: 11.5px; color: var(--tinta-4); margin-bottom: 2px; white-space: nowrap; }
.migalha b { color: var(--tinta-2); font-weight: 400; }
.topbar h1 { margin: 0; font: italic 400 26px/1 var(--serif); letter-spacing: -.01em; white-space: nowrap; }
.topbar .espaco { flex: 1; }
.acoes { display: flex; align-items: center; gap: 8px; }

.menu-botao { display: none; width: 40px; height: 40px; border: 1px solid var(--linha); border-radius: var(--raio-sm); background: var(--superficie); color: var(--tinta); place-items: center; }

/* chip "VENDO ‹cliente›" */
.contexto-cliente { position: relative; }
.contexto-botao {
  display: flex; align-items: center; gap: 8px; height: 36px; padding: 0 6px 0 12px;
  border: 1px solid var(--linha); border-radius: 999px; background: var(--superficie);
  font-size: 13.5px; white-space: nowrap; transition: border-color var(--transicao), box-shadow var(--transicao);
}
.contexto-botao:hover { border-color: var(--acento); box-shadow: var(--anel); }
.contexto-rotulo { font-size: 10.5px; font-weight: 800; letter-spacing: .08em; color: var(--acento-texto); }
.contexto-sigla { width: 22px; height: 22px; border-radius: 50%; background: var(--acento); color: #fff; font-size: 11px; font-weight: 700; display: grid; place-items: center; }
.contexto-nome { font-weight: 600; max-width: 26ch; overflow: hidden; text-overflow: ellipsis; }
.contexto-seta { width: 26px; height: 26px; border-radius: 50%; background: var(--superficie-2); color: var(--tinta-2); display: grid; place-items: center; }

/* busca do topo (abre a paleta) */
.busca-topo {
  display: flex; align-items: center; gap: 8px; height: 38px; width: 260px; padding: 0 12px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie-2); color: var(--tinta-4); font-size: 13.5px; cursor: text;
  transition: border-color var(--transicao), background var(--transicao);
}
.busca-topo:hover { border-color: var(--acento); background: var(--superficie); }
.busca-topo span { flex: 1; text-align: left; }
.tecla {
  font-size: 11px; font-weight: 600; padding: 2px 6px; border-radius: 5px;
  border: 1px solid var(--linha); background: var(--superficie); color: var(--tinta-4);
  font-family: var(--sans);
}

.icone-botao {
  position: relative; width: 38px; height: 38px; flex: none;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie); color: var(--tinta-2);
  display: grid; place-items: center; transition: background var(--transicao), color var(--transicao), border-color var(--transicao);
}
.icone-botao:hover { background: var(--superficie-2); color: var(--tinta); }
.icone-botao.destaque:hover { background: var(--acento-suave); color: var(--acento-texto); border-color: var(--acento); }
.icone-botao .ponto-alerta { position: absolute; top: 8px; right: 9px; width: 8px; height: 8px; border-radius: 50%; background: var(--erro); border: 2px solid var(--superficie); }
/* Suporte (WhatsApp) no topo, só para o gestor. Neutro de propósito: verde é
   reservado para estado bom/alerta, e o desenho do ícone já diz o que é. */
.suporte-botao {
  height: 38px; flex: none; display: inline-flex; align-items: center; gap: 7px; padding: 0 13px 0 11px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie); color: var(--tinta-2); font-size: 13.5px; font-weight: 600; white-space: nowrap;
  transition: background var(--transicao), color var(--transicao), border-color var(--transicao);
}
.suporte-botao:hover { background: var(--acento-suave); color: var(--acento-texto); border-color: var(--acento); text-decoration: none; }
.suporte-botao:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }
@media (max-width: 760px) {
  .suporte-botao { width: 38px; padding: 0; justify-content: center; }
  .suporte-botao span { display: none; }
}

/* O botao do /login usa outra classe (a barra de la nao existe), mas a troca
   do icone e a mesma regra: sem `.ent-tema` aqui, a tela de entrada mostrava
   a lua e o sol empilhados. */
.tema-botao .icone-sol, .ent-tema .icone-sol { display: none; }
:root[data-tema="escuro"] .tema-botao .icone-lua,
:root[data-tema="escuro"] .ent-tema .icone-lua { display: none; }
:root[data-tema="escuro"] .tema-botao .icone-sol,
:root[data-tema="escuro"] .ent-tema .icone-sol { display: block; }

.avatar-botao {
  width: 38px; height: 38px; flex: none; border: 2px solid var(--linha); border-radius: 50%;
  background: var(--acento-suave); color: var(--acento-texto); font-weight: 700; font-size: 13px;
  display: grid; place-items: center; transition: border-color var(--transicao);
}
.avatar-botao { overflow: hidden; padding: 0; }
.avatar-botao:hover { border-color: var(--acento); }

/* menus suspensos do topo */
.pop { position: relative; }
.pop-menu {
  position: absolute; z-index: 60; top: 46px; right: 0;
  display: none; width: 340px; max-width: calc(100vw - 32px);
  background: var(--superficie); border: 1px solid var(--linha);
  border-radius: var(--raio); box-shadow: var(--sombra-3); overflow: hidden;
}
.pop-menu.aberta { display: block; animation: surgir .18s var(--mola); }
.pop-menu.estreito { width: 230px; padding: 8px; }
.pop-cab { display: flex; align-items: center; justify-content: space-between; padding: 14px 16px; border-bottom: 1px solid var(--linha); }
.pop-cab b { font-size: 14px; }
.pop-cab button { border: 0; background: transparent; color: var(--acento-texto); font-size: 12.5px; font-weight: 600; }
.pop-item { display: flex; gap: 12px; padding: 12px 16px; border-bottom: 1px solid var(--linha); transition: background var(--transicao); }
.pop-item:last-child { border-bottom: 0; }
.pop-item:hover { background: var(--superficie-2); }
.pop-item .marcador { width: 32px; height: 32px; flex: none; border-radius: 9px; display: grid; place-items: center; }
.pop-item .txt { line-height: 1.35; font-size: 13px; min-width: 0; }
.pop-item .txt b { display: block; font-weight: 600; }
.pop-item .txt span { display: block; color: var(--tinta-2); }
.pop-item .txt time { display: block; font-size: 11.5px; color: var(--tinta-4); margin-top: 2px; }

/* Dispensar o aviso. Discreto: aparece de leve e firma no hover do item — quem
   procura acha, quem só esta lendo nao tropeca nele. */
.pop-dispensa {
  margin-left: auto; align-self: flex-start; flex: none;
  width: 26px; height: 26px; border: 0; border-radius: 7px; cursor: pointer;
  background: transparent; color: var(--tinta-4); opacity: .45;
  display: grid; place-items: center; transition: opacity var(--transicao), background var(--transicao);
}
.pop-item:hover .pop-dispensa { opacity: 1; }
.pop-dispensa:hover { background: var(--superficie-3, var(--superficie-2)); color: var(--tinta); }
.pop-dispensa:focus-visible { opacity: 1; }
.pop-vazio { padding: 28px 16px; text-align: center; color: var(--tinta-4); font-size: 13px; }
.pop-quem { padding: 8px 10px 10px; border-bottom: 1px solid var(--linha); margin-bottom: 6px; line-height: 1.25; }
.pop-foto { width: 40px; height: 40px; border-radius: 50%; object-fit: cover; display: block; margin-bottom: 7px; }
.pop-quem b { font-size: 14px; }
.pop-quem div { font-size: 12px; color: var(--tinta-4); }
.pop-menu a:not(.pop-item), .pop-menu .pop-acao {
  display: flex; align-items: center; gap: 10px; width: 100%; height: 36px; padding: 0 10px;
  border: 0; border-radius: var(--raio-xs); background: transparent; font-size: 13.5px; color: var(--tinta);
}
.pop-menu a:hover, .pop-menu .pop-acao:hover { background: var(--superficie-2); text-decoration: none; }
a.pop-item { color: inherit; text-decoration: none; align-items: flex-start; }
.pop-menu .pop-acao.perigo { color: var(--erro); }
.pop-menu .pop-acao.perigo:hover { background: var(--erro-suave); }

.conteudo { padding: 28px; width: 100%; max-width: 1480px; margin: 0 auto; }

.escurece { position: fixed; inset: 0; z-index: 40; background: rgba(10, 12, 30, .45); animation: aparece .2s; }

/* barra inferior do celular */
.nav-celular {
  position: fixed; left: 0; right: 0; bottom: 0; z-index: 35; display: none;
  grid-template-columns: repeat(5, 1fr); height: 64px; padding: 6px 8px 10px;
  background: color-mix(in srgb, var(--superficie) 92%, transparent);
  backdrop-filter: blur(14px); border-top: 1px solid var(--linha);
}
.nav-celular a {
  display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
  border-radius: var(--raio-sm); color: var(--tinta-4); font-size: 10.5px; text-decoration: none;
}
.nav-celular a.ativo { color: var(--acento-texto); font-weight: 700; }
/* uma aba só (o usuário cliente, que só tem o Funil): a barra não leva a lugar nenhum */
.nav-celular.so-um { display: none !important; }
.nav-celular a:hover { text-decoration: none; }

/* =============================================================================
   Componentes
   ============================================================================= */

/* ---- botões ---- */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  height: 40px; padding: 0 14px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie); color: var(--tinta);
  font-size: 14px; font-weight: 600; white-space: nowrap;
  transition: background var(--transicao), border-color var(--transicao), color var(--transicao), box-shadow var(--transicao);
}
.btn:hover { background: var(--superficie-2); text-decoration: none; }
.btn:disabled { opacity: .5; cursor: not-allowed; }
.btn:disabled:hover { background: var(--superficie); }
.btn .ic { stroke: currentColor; }

.btn-primario { background: var(--acento); border-color: transparent; color: #fff; box-shadow: 0 8px 20px -10px rgba(59, 63, 208, .8); }
.btn-primario:hover { background: var(--acento-forte); }
.btn-primario:disabled:hover { background: var(--acento); }

.btn-fantasma { border-color: transparent; background: transparent; color: var(--tinta-2); }
.btn-fantasma:hover { background: var(--superficie-2); color: var(--tinta); }

.btn-perigo { color: var(--erro); border-color: color-mix(in srgb, var(--erro) 35%, var(--linha)); }
.btn-perigo:hover { background: var(--erro-suave); }
.btn-destaque { background: var(--erro); border-color: transparent; color: #fff; }
.btn-destaque:hover { background: var(--erro); filter: brightness(.92); }

.btn-sm { height: 34px; padding: 0 11px; font-size: 13px; border-radius: var(--raio-xs); }
.btn-lg { height: 46px; padding: 0 20px; font-size: 15px; }
/* a chamada principal de /conexoes: é o único botão que importa naquela tela */
.btn-xl { height: 58px; padding: 0 28px; font-size: 17px; font-weight: 700; border-radius: var(--raio); }
.btn-xl svg { width: 22px; height: 22px; }

/* ---- cartão ---- */
.cartao {
  background: var(--superficie); border: 1px solid var(--linha);
  border-radius: var(--raio); box-shadow: var(--sombra);
  min-width: 0; overflow: hidden;
}
.cartao-cab {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 16px 18px; border-bottom: 1px solid var(--linha);
}
.cartao-cab h2 { margin: 0; font-size: 16px; font-weight: 700; letter-spacing: -.01em; }
.cartao-cab .direita { margin-left: auto; display: flex; gap: 8px; align-items: center; }
.cartao-corpo { padding: 18px; }
.secao-titulo { margin: 0; font-size: 17px; font-weight: 700; letter-spacing: -.015em; }

/* ---- tabela ---- */
.rolagem { overflow-x: auto; }
.tabela { width: 100%; border-collapse: collapse; font-size: 14px; }
.tabela th {
  text-align: left; padding: 11px 18px; white-space: nowrap;
  font-size: 10.5px; font-weight: 800; letter-spacing: .08em; text-transform: uppercase;
  color: var(--tinta-4); background: var(--superficie-2); border-bottom: 1px solid var(--linha);
}
.tabela td { padding: 13px 18px; border-bottom: 1px solid var(--linha); vertical-align: middle; }
.tabela tbody tr:last-child td { border-bottom: 0; }
.tabela tbody tr { transition: background var(--transicao); }
.tabela tbody tr:hover { background: var(--superficie-2); }

/* a linha inteira abre o lead; o nome continua sendo um link de verdade, para
   teclado, botão do meio e "abrir em nova aba" */
.tabela tbody tr.linha-clicavel { cursor: pointer; }
.tabela tbody tr.linha-clicavel:hover { background: var(--acento-suave); }
.linha-alvo { color: inherit; text-decoration: none; }
.linha-alvo:hover { color: var(--acento-texto); text-decoration: underline; }
.tabela tbody tr.linha-clicavel:focus-within { background: var(--acento-suave); outline: 2px solid var(--acento); outline-offset: -2px; }

/* ---- selos e chips ---- */
.selo {
  display: inline-flex; align-items: center; gap: 5px;
  padding: 3px 9px; border-radius: 999px;
  background: var(--superficie-2); color: var(--tinta-2);
  font-size: 12px; font-weight: 600; white-space: nowrap;
}
.selo::before { content: ""; width: 6px; height: 6px; border-radius: 50%; background: currentColor; opacity: .85; }
.selo.sem-ponto::before, .sem-ponto::before { display: none; }
.selo-ok     { background: var(--ok-suave);     color: var(--ok); }
.selo-aviso  { background: var(--aviso-suave);  color: var(--aviso); }
.selo-erro   { background: var(--erro-suave);   color: var(--erro); }
.selo-info   { background: var(--info-suave);   color: var(--info); }
.selo-acento { background: var(--acento-suave); color: var(--acento-texto); }

.pino {
  display: inline-flex; align-items: center; padding: 2px 8px; border-radius: 999px;
  background: var(--superficie-2); color: var(--tinta-3); font-size: 11px; font-weight: 700;
}
.pino-acento { background: var(--acento-suave); color: var(--acento-texto); }
.pino-info   { background: var(--info-suave);   color: var(--info); }

/* ---- formulário ---- */
.campo { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.campo label, .campo > span:first-child { font-size: 13.5px; font-weight: 600; }
.campo input, .campo select, .campo textarea {
  height: 44px; padding: 0 14px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie); color: var(--tinta); font-size: 14.5px; outline: 0;
  transition: border-color var(--transicao), box-shadow var(--transicao);
  width: 100%; min-width: 0;
}
.campo textarea { height: auto; padding: 11px 14px; line-height: 1.5; resize: vertical; }
.campo select { appearance: none; padding-right: 38px; cursor: pointer;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%239497b2' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>");
  background-repeat: no-repeat; background-position: right 12px center; }
.campo input:focus, .campo select:focus, .campo textarea:focus { border-color: var(--acento); box-shadow: var(--anel); }
.campo .ajuda { font-size: 12.5px; color: var(--tinta-3); line-height: 1.45; }
.campo-grupo {
  display: flex; flex-direction: column; gap: 14px;
  margin: 0; padding: 14px 16px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie-2);
}
.campo-grupo > legend {
  padding: 0 6px; margin-left: -6px;
  font-size: 10.5px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase;
  color: var(--tinta-3);
}
.campo-grupo .campo input { background: var(--superficie); }
.escolha-op { background: var(--superficie); }
.req { color: var(--erro); }

/* ---- alarmes e avisos ---- */
.alarme {
  display: flex; gap: 12px; align-items: flex-start;
  padding: 13px 15px; border-radius: var(--raio-sm);
  background: var(--superficie-2); border-left: 3px solid var(--tinta-4);
  font-size: 13.5px; line-height: 1.5;
}
.alarme p { margin: 3px 0 0; color: var(--tinta-2); }
.alarme .ponto { width: 9px; height: 9px; flex: none; margin-top: 6px; border-radius: 50%; background: currentColor; }
.alarme.ok     { background: var(--ok-suave);    border-left-color: var(--ok);    color: var(--ok); }
.alarme.aviso  { background: var(--aviso-suave); border-left-color: var(--aviso); color: var(--aviso); }
.alarme.erro   { background: var(--erro-suave);  border-left-color: var(--erro);  color: var(--erro); }
.alarme b, .alarme div { color: var(--tinta); }

.vazio { padding: 36px 24px; text-align: center; color: var(--tinta-3); }
.vazio h3 { margin: 0 0 6px; font-size: 15px; color: var(--tinta); font-weight: 700; }
.vazio p { margin: 0 auto; max-width: 46ch; font-size: 13.5px; line-height: 1.55; }

/* ---- utilitários ---- */
.mudo { color: var(--tinta-3); }
.pequeno { font-size: 12.5px; }
.mono { font-family: var(--mono); font-size: .92em; }
.num { font-variant-numeric: tabular-nums; }
.falta { color: var(--tinta-4); font-style: italic; }
.grifo { background: color-mix(in srgb, var(--acento) 16%, transparent); border-radius: 3px; padding: 0 2px; }
.so-celular { display: none; }

/* escolha entre duas opções explicadas — mais claro que um <select> de dois itens */
.escolha { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.escolha-op {
  display: flex; align-items: flex-start; gap: 10px;
  padding: 12px 13px; border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie); cursor: pointer;
  transition: border-color var(--transicao), background var(--transicao);
}
.escolha-op:hover { border-color: var(--acento-linha); }
.escolha-op.marcada { border-color: var(--acento); background: var(--acento-suave); box-shadow: var(--anel); }
.escolha-op input { margin: 2px 0 0; accent-color: var(--acento); flex: none; }
.escolha-op b { display: block; font-size: 14px; }
.escolha-op span span { display: block; font-size: 12.5px; color: var(--tinta-3); line-height: 1.45; margin-top: 2px; }
@media (max-width: 560px) { .escolha { grid-template-columns: 1fr; } }

/* =============================================================================
   Alarme de número caído — o mais alto da interface

   Pulso LENTO (2,4 s = 0,4 Hz), não piscada. Acima de 3 Hz há risco real de
   convulsão fotossensível, e piscar rápido vira ruído que se aprende a ignorar.
   Quem pediu "sem movimento" no sistema operacional não vê animação nenhuma:
   a regra global de prefers-reduced-motion desliga tudo, e o alarme continua
   grande e vermelho — que é o que importa.
   ============================================================================= */
@keyframes ping {
  0%   { transform: scale(1);   opacity: .55; }
  70%  { transform: scale(2.1); opacity: 0; }
  100% { transform: scale(2.1); opacity: 0; }
}
@keyframes respira {
  50% { box-shadow: 0 0 0 6px color-mix(in srgb, var(--erro) 18%, transparent), var(--sombra-2); }
}

.alerta-parado {
  display: flex; align-items: center; gap: 18px; flex-wrap: wrap;
  padding: 20px 22px; margin-bottom: 20px;
  border-radius: var(--raio);
  background: var(--erro-suave);
  border: 1px solid color-mix(in srgb, var(--erro) 38%, transparent);
  border-left: 5px solid var(--erro);
  box-shadow: var(--sombra-2);
  animation: respira 2.4s ease-in-out infinite;
}

.alerta-icone {
  position: relative; width: 52px; height: 52px; flex: none;
  border-radius: 50%; display: grid; place-items: center;
  background: var(--erro); color: #fff;
}
/* o anel que se expande: chama o olho sem fazer o bloco inteiro tremer */
.alerta-icone::after {
  content: ""; position: absolute; inset: 0; border-radius: 50%;
  background: var(--erro); animation: ping 2.4s cubic-bezier(0, 0, .2, 1) infinite;
  z-index: -1;
}

.alerta-txt { flex: 1; min-width: 260px; }
.alerta-txt b {
  display: block; font-size: 19px; font-weight: 800; letter-spacing: -.015em;
  color: var(--erro); line-height: 1.25;
}
.alerta-txt p {
  margin: 6px 0 0; font-size: 14.5px; line-height: 1.55; color: var(--tinta-2); max-width: 74ch;
}
.alerta-txt p b { display: inline; font-size: inherit; color: var(--tinta); font-weight: 700; }
.alerta-quais {
  display: flex; flex-wrap: wrap; gap: 6px 10px; margin-top: 10px;
  font-size: 12.5px; color: var(--tinta-3);
}
.alerta-quais span {
  padding: 4px 10px; border-radius: 999px;
  background: var(--superficie); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--erro) 22%, transparent);
}

.alerta-acao {
  flex: none; background: var(--erro); border-color: transparent; color: #fff;
  font-weight: 700; font-size: 15px; box-shadow: 0 10px 24px -10px var(--erro);
}
.alerta-acao:hover { background: var(--erro); filter: brightness(.92); color: #fff; text-decoration: none; }

/* duas saídas, com peso muito diferente: reconectar é o botão; largar o número
   é um link discreto, porque some da lista e não se desfaz sozinho */
.alerta-acoes { flex: none; display: flex; flex-direction: column; align-items: stretch; gap: 8px; }
.alerta-descartar {
  border: 0; background: transparent; color: var(--tinta-3);
  font-size: 12.5px; font-weight: 600; padding: 2px 4px; text-decoration: underline;
  text-underline-offset: 3px; text-decoration-color: var(--linha-forte);
}
.alerta-descartar:hover { color: var(--erro); text-decoration-color: currentColor; }

/* o selo do menu acompanha o alarme */
.nav-badge.perigo { animation: respira 2.4s ease-in-out infinite; }
.casca.sem-pulso .nav-badge.perigo { animation: none; }

@media (max-width: 760px) {
  .alerta-parado { padding: 16px; gap: 14px; }
  .alerta-txt { min-width: 0; }
  .alerta-txt b { font-size: 17px; }
  .alerta-acao { width: 100%; }
  .alerta-acoes { width: 100%; }
}

/* =============================================================================
   Dica da tela (page hint)
   ============================================================================= */
.dica {
  display: flex; gap: 12px; align-items: center;
  padding: 14px 16px; margin-bottom: 20px;
  border-radius: var(--raio); background: var(--acento-suave);
  border: 1px solid color-mix(in srgb, var(--acento) 22%, transparent);
  animation: aparece .2s;
}
.dica-icone { width: 32px; height: 32px; flex: none; border-radius: 9px; background: var(--superficie); color: var(--acento-texto); display: grid; place-items: center; }
.dica-texto { flex: 1; font-size: 13.5px; line-height: 1.45; color: var(--tinta); }
.dica-texto span { color: var(--tinta-2); }
.dica-fechar { width: 28px; height: 28px; flex: none; border: 0; border-radius: 7px; background: transparent; color: var(--tinta-2); display: grid; place-items: center; }
.dica-fechar:hover { background: var(--superficie); color: var(--tinta); }

/* =============================================================================
   Faixa de aviso — menos grave que o alarme vermelho, mais que uma dica
   ============================================================================= */
.faixa-aviso {
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  padding: 14px 18px; margin-bottom: 20px;
  border-radius: var(--raio);
  background: var(--aviso-suave);
  border: 1px solid color-mix(in srgb, var(--aviso) 30%, transparent);
  border-left: 4px solid var(--aviso);
}
.fa-icone {
  width: 38px; height: 38px; flex: none; border-radius: 50%;
  background: var(--aviso); color: #fff; display: grid; place-items: center;
}
.fa-txt { flex: 1; min-width: 220px; line-height: 1.45; }
.fa-txt b { display: block; font-size: 15px; font-weight: 700; color: var(--aviso); }
.fa-txt span { display: block; font-size: 13.5px; color: var(--tinta-2); margin-top: 2px; max-width: 78ch; }
.faixa-aviso .btn { flex: none; }

/* Funil do usuário cliente: quem cuida da conta dele */
.funil-responsavel {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  padding: 12px 14px; margin-bottom: 16px; border-radius: var(--raio);
  background: var(--superficie); border: 1px solid var(--linha);
}
.fr-sigla {
  width: 38px; height: 38px; flex: none; border-radius: 11px; display: grid; place-items: center;
  background: var(--acento-suave); color: var(--acento-texto); font-weight: 800; font-size: 16px;
}
.fr-txt { flex: 1; min-width: 220px; line-height: 1.45; }
.fr-txt b { display: block; font-size: 14.5px; }
.fr-txt span { display: block; font-size: 13px; color: var(--tinta-2); margin-top: 1px; max-width: 90ch; }
.funil-responsavel .btn { flex: none; }
.faixa-aviso.faixa-grave {
  background: var(--erro-suave);
  border-color: color-mix(in srgb, var(--erro) 30%, transparent);
  border-left-color: var(--erro);
}
.faixa-grave .fa-icone { background: var(--erro); }
.faixa-grave .fa-txt b { color: var(--erro); }

/* =============================================================================
   Clientes — a grade de cards
   ============================================================================= */
/* cabeçalho de Clientes: o convite à ação e o consumo do plano, lado a lado */
.clientes-cabecalho {
  display: grid; grid-template-columns: minmax(0, 1fr) 320px;
  gap: 0; margin-bottom: 20px;
  background: var(--superficie); border: 1px solid var(--linha);
  border-radius: var(--raio); box-shadow: var(--sombra); overflow: hidden;
}
.cab-info { padding: 20px 24px; min-width: 0; }
.cab-linha { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.cab-linha .btn { margin-left: auto; flex: none; }
.cab-info h2 { margin: 0; font-size: 21px; font-weight: 800; letter-spacing: -.02em; }
.cab-info p { margin: 10px 0 0; font-size: 14px; line-height: 1.6; color: var(--tinta-2); max-width: 62ch; }

.cab-plano {
  padding: 22px 24px; min-width: 0;
  background: var(--superficie-2); border-left: 1px solid var(--linha);
  display: flex; flex-direction: column; gap: 14px;
}
.cp-topo { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.cp-topo span { font-size: 10.5px; font-weight: 800; letter-spacing: .07em; text-transform: uppercase; color: var(--tinta-4); }
.cp-topo b { font-size: 15px; font-weight: 700; }

.medidor { display: flex; flex-direction: column; gap: 6px; }
.md-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; font-size: 13px; color: var(--tinta-2); }
.md-cab b { font-size: 15px; font-weight: 700; color: var(--tinta); }
.md-cab b i { font-style: normal; font-weight: 500; color: var(--tinta-4); font-size: 13px; }
.md-barra { height: 8px; border-radius: 999px; background: var(--superficie-3); overflow: hidden; }
.md-barra i { display: block; height: 100%; border-radius: 999px; background: var(--acento); transition: width .4s var(--mola); }
.md-barra i.quase { background: var(--aviso); }
.md-barra i.cheio { background: var(--erro); }
.cp-nota { display: flex; align-items: flex-start; gap: 7px; margin: 0; font-size: 12.5px; color: var(--tinta-3); line-height: 1.45; }
.cp-nota .ic { flex: none; margin-top: 2px; }
.cp-nota b { color: var(--tinta); }

@media (max-width: 900px) {
  .clientes-cabecalho { grid-template-columns: 1fr; }
  .cab-plano { border-left: 0; border-top: 1px solid var(--linha); }
}

/* Lista, não cartões. Com vários clientes o trabalho desta tela é comparar, e
   número alinhado em coluna se compara com o olho; cartão lado a lado, não.
   A cor também mudou de origem: antes vinha do id (verde e vermelho por sorteio,
   o que fazia cliente saudável parecer quebrado), agora vem só do estado real. */
.lista-clientes { overflow: visible; }

.lc-titulos, .lc-linha {
  display: grid; align-items: center; gap: 14px;
  /* a última coluna é FIXA: com `auto`, o cabeçalho (célula vazia) e a linha
     (dois botões) davam larguras diferentes, e a sobra ia toda para as colunas
     em fr — o título ficava deslocado do número que ele nomeia */
  grid-template-columns: minmax(200px, 2.4fr) minmax(150px, 1.1fr) 78px 78px 92px 96px 132px;
  padding: 0 18px;
}

.lc-titulos {
  height: 36px; font-size: 10.5px; text-transform: uppercase; letter-spacing: .06em;
  font-weight: 800; color: var(--tinta-4);
  background: var(--superficie-2); border-bottom: 1px solid var(--linha);
}

.lc-linha {
  min-height: 68px; border-bottom: 1px solid var(--linha);
  transition: background var(--transicao);
}
.lc-linha:last-of-type { border-bottom: 0; }
.lc-linha:hover { background: var(--superficie-2); }
.lc-linha.atual { background: var(--acento-suave); box-shadow: inset 3px 0 0 var(--acento); }

.lc-quem { display: flex; align-items: center; gap: 12px; min-width: 0; }

/* a foto é o próprio botão de trocar: o lápis só aparece ao passar o mouse */
.lc-foto {
  position: relative; width: 40px; height: 40px; flex: none; padding: 0;
  border: 0; border-radius: 11px; overflow: hidden; cursor: pointer;
  background: var(--superficie-3); color: var(--tinta-2);
  display: grid; place-items: center; font-weight: 800; font-size: 14px;
  box-shadow: inset 0 0 0 1px var(--linha);
}
.lc-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
.lc-foto-lapis {
  position: absolute; inset: 0; display: grid; place-items: center;
  background: rgba(10, 12, 30, .55); color: #fff; opacity: 0;
  transition: opacity var(--transicao);
}
.lc-linha:hover .lc-foto-lapis, .lc-foto:focus-visible .lc-foto-lapis { opacity: 1; }

.lc-nome { display: flex; align-items: center; gap: 8px; min-width: 0; }
.lc-nome b { font-size: 14.5px; font-weight: 700; letter-spacing: -.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lc-vendo {
  flex: none; padding: 2px 8px; border-radius: 999px; font-size: 10px; font-weight: 800;
  letter-spacing: .06em; text-transform: uppercase;
  background: var(--acento); color: #fff;
}
.lc-slug { font-size: 11.5px; color: var(--tinta-4); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

.lc-situacao { min-width: 0; }
.lc-situacao .selo { cursor: help; max-width: 100%; }

.lc-titulos .num-col, .lc-linha .num-col { text-align: right; }

/* Visão do administrador: uma coluna a mais, com a agência e os gestores dela. */
.lista-clientes.com-agencia .lc-titulos, .lista-clientes.com-agencia .lc-linha {
  grid-template-columns: minmax(200px, 2.1fr) minmax(170px, 1.4fr) minmax(150px, 1.1fr) 78px 78px 92px 96px 132px;
}
.lc-agencia { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.lc-agencia a { font-weight: 700; font-size: 13.5px; color: var(--tinta); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lc-agencia a:hover { color: var(--acento-texto); }
.lc-agencia .pequeno { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: help; }
.lc-acessos { font-family: var(--sans); cursor: help; }
.lc-filtros { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 12px; }
.lc-filtros select { height: 36px; padding: 0 34px 0 12px; border-radius: var(--raio-xs); border: 1px solid var(--linha); background: var(--superficie); color: var(--tinta); font: inherit; font-size: 13.5px; max-width: 260px; }
.lc-busca {
  display: inline-flex; align-items: center; gap: 8px; height: 36px; padding: 0 12px; min-width: 260px;
  border-radius: var(--raio-xs); border: 1px solid var(--linha); background: var(--superficie); color: var(--tinta-4);
}
.lc-busca:focus-within { border-color: var(--acento); box-shadow: var(--anel); }
.lc-busca input { border: 0; outline: 0; background: transparent; font: inherit; font-size: 13.5px; color: var(--tinta); width: 100%; }
.cab-responsaveis { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin-top: 10px; font-size: 13px; }
.cab-responsaveis > .mudo { display: inline-flex; align-items: center; gap: 6px; }
.resp-chip { padding: 3px 10px; border-radius: 999px; background: var(--superficie-2); border: 1px solid var(--linha); font-weight: 600; cursor: help; }
.resp-chip.inativo { opacity: .55; text-decoration: line-through; }
.lista-clientes .paginacao { border-top: 1px solid var(--linha); }
.lc-num { font-size: 16px; font-weight: 700; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.lc-num.destaque { color: var(--acento-texto); }
.lc-num.atencao { color: var(--erro); }
.lc-de { font-size: 12px; font-weight: 600; color: var(--tinta-4); }
.lc-num[data-dica] { cursor: help; }
.lc-quando { white-space: nowrap; }

.lc-acoes { display: flex; align-items: center; gap: 6px; justify-content: flex-end; }
.lc-menu { position: relative; }
.lc-mais { width: 30px; height: 30px; padding: 0; color: var(--tinta-3); }
.lc-mais:hover { color: var(--tinta); background: var(--superficie-3); }

@media (max-width: 1100px) {
  /* some com as colunas que dá para descobrir abrindo o cliente */
  .lc-titulos > :nth-child(3), .lc-linha > :nth-child(3),
  .lc-titulos > :nth-child(4), .lc-linha > :nth-child(4),
  .lc-titulos > :nth-child(6), .lc-linha > :nth-child(6) { display: none; }
  .lc-titulos, .lc-linha { grid-template-columns: minmax(160px, 2fr) minmax(130px, 1fr) 92px 132px; }
  /* com a coluna da agência: as colunas escondidas são uma a mais para a direita */
  .lista-clientes.com-agencia .lc-titulos > :nth-child(3), .lista-clientes.com-agencia .lc-linha > :nth-child(3) { display: block; }
  .lista-clientes.com-agencia .lc-titulos > :nth-child(7), .lista-clientes.com-agencia .lc-linha > :nth-child(7) { display: none; }
  .lista-clientes.com-agencia .lc-titulos > :nth-child(5), .lista-clientes.com-agencia .lc-linha > :nth-child(5) { display: none; }
  .lista-clientes.com-agencia .lc-titulos, .lista-clientes.com-agencia .lc-linha { grid-template-columns: minmax(160px, 2fr) minmax(140px, 1.2fr) minmax(120px, 1fr) 132px; }
}

@media (max-width: 760px) {
  .lc-titulos { display: none; }
  .lc-linha { grid-template-columns: 1fr auto; gap: 10px; padding: 14px 16px; }
  .lc-linha > :nth-child(5) { display: none; }
  .lc-situacao { grid-column: 1 / -1; }
}

/* =============================================================================
   Equipe
   ============================================================================= */
.grade-equipe { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(300px, 1fr); gap: 16px; align-items: start; }

.senha-caixa {
  display: flex; gap: 18px; align-items: center; flex-wrap: wrap;
  margin-top: 10px; padding: 12px 14px; border-radius: var(--raio-sm);
  background: var(--superficie); border: 1px dashed var(--linha-forte);
}
.senha-caixa > div { min-width: 0; }
.senha-caixa span { display: block; font-size: 10.5px; text-transform: uppercase; letter-spacing: .06em; color: var(--tinta-4); font-weight: 700; }
.senha-caixa b { display: block; font-size: 15px; color: var(--tinta); }
.senha-caixa .btn { margin-left: auto; }

/* modal de senha nova (Equipe) */
.sn-passos { display: flex; flex-direction: column; gap: 14px; }
.sn-lista { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; font-size: 14px; line-height: 1.5; color: var(--tinta-2); }
.sn-lista li { display: grid; grid-template-columns: 16px minmax(0, 1fr); gap: 10px; align-items: start; }
.sn-lista li > svg { margin-top: 3px; color: var(--tinta-3); }
.sn-lista b { color: var(--tinta); }

.equipe-sub {
  display: flex; align-items: center; gap: 6px;
  padding: 12px 18px 8px; font-size: 10.5px; font-weight: 800;
  letter-spacing: .07em; text-transform: uppercase; color: var(--tinta-4);
  border-top: 1px solid var(--linha); background: var(--superficie-2);
}

.pessoa {
  display: grid; grid-template-columns: 48px minmax(0, 1.4fr) auto minmax(0, auto) auto;
  gap: 14px; align-items: center; padding: 14px 18px; border-top: 1px solid var(--linha);
}
.pessoa:first-of-type { border-top: 0; }
.pessoa.inativa { opacity: .62; }
.pessoa-foto {
  position: relative; width: 48px; height: 48px; border-radius: 50%; overflow: hidden;
  background: var(--acento-suave); color: var(--acento-texto);
  display: grid; place-items: center; font-weight: 700; font-size: 15px; cursor: pointer;
}
.pessoa-foto img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pessoa-foto:hover::after {
  content: "trocar"; position: absolute; inset: 0; display: grid; place-items: center;
  background: rgba(0, 0, 0, .5); color: #fff; font-size: 10px; font-weight: 700;
}
.pessoa-quem { min-width: 0; line-height: 1.35; }
.pessoa-quem b { display: flex; align-items: center; gap: 7px; font-size: 14.5px; font-weight: 600; }
.pessoa-quem span { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.pessoa-quem .pessoa-contato span { display: inline; }
.pessoa-contato a { color: var(--tinta-2); }
.pessoa-contato a:hover { color: var(--acento-texto); }
.pessoa-vinculo a { color: var(--acento-texto); font-weight: 600; }
.pessoa-papel { display: flex; flex-direction: column; align-items: flex-start; gap: 4px; }
.eq-filtros { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 18px; border-bottom: 1px solid var(--linha); background: var(--superficie-2); }
.eq-busca-form { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.eq-busca-form select { height: 36px; padding: 0 30px 0 10px; border-radius: var(--raio-xs); border: 1px solid var(--linha); background: var(--superficie); color: var(--tinta); font: inherit; font-size: 13px; max-width: 200px; }
.eq-busca-form .lc-busca { min-width: 200px; }
.atv-agencia { display: inline-block; margin-top: 3px; padding: 1px 7px; border-radius: 999px; background: var(--superficie-2); font-size: 11px; color: var(--tinta-3); }
.pessoa-numeros { display: flex; gap: 18px; }
.pessoa-numeros > div { text-align: right; min-width: 0; }
.pessoa-numeros b { display: block; font-size: 14px; font-weight: 600; white-space: nowrap; }
.pessoa-numeros span { display: block; font-size: 10.5px; color: var(--tinta-4); white-space: nowrap; }
.pessoa-acoes { display: flex; gap: 4px; align-items: center; }

/* IA cliente a cliente */
.lista-ia { display: flex; flex-direction: column; padding: 8px 0; }
.ia-linha { display: flex; align-items: center; gap: 11px; padding: 10px 18px; }
.ia-linha + .ia-linha { border-top: 1px solid var(--linha); }
.ia-linha .troca-sigla { width: 28px; height: 28px; font-size: 12px; box-shadow: none; }
.ia-nome { flex: 1; min-width: 0; font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.ia-linha .interruptor { gap: 10px; }

/* foto no perfil */
.perfil-foto { display: flex; align-items: center; gap: 14px; }
.pf-img {
  position: relative; width: 64px; height: 64px; flex: none; border-radius: 50%;
  background: var(--acento-suave); color: var(--acento-texto); overflow: hidden;
  display: grid; place-items: center; font-weight: 800; font-size: 20px; cursor: pointer;
}
.pf-img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.pf-img i {
  position: absolute; right: -2px; bottom: -2px; width: 24px; height: 24px; border-radius: 50%;
  background: var(--acento); color: #fff; display: grid; place-items: center;
  border: 2px solid var(--superficie);
}
.perfil-foto b { display: block; font-size: 14px; }
.perfil-foto span { display: block; max-width: 40ch; line-height: 1.45; margin-top: 2px; }

/* guia numerado — o passo a passo de pegar a chave da OpenAI */
.guia {
  border: 1px solid var(--acento-linha); border-radius: var(--raio-sm);
  background: var(--acento-suave); overflow: hidden;
}
.guia-titulo {
  display: flex; align-items: center; gap: 8px;
  padding: 11px 14px; background: color-mix(in srgb, var(--acento) 10%, transparent);
  font-size: 13px; font-weight: 700; color: var(--acento-texto);
}
.guia-passos { list-style: none; margin: 0; padding: 12px 14px 14px; display: flex; flex-direction: column; gap: 12px; }
.guia-passos li { display: flex; align-items: flex-start; gap: 11px; font-size: 13.5px; line-height: 1.5; }
.guia-passos .passo-n { margin-top: 1px; background: var(--superficie); color: var(--acento-texto); box-shadow: inset 0 0 0 1px var(--acento-linha); }
.guia-passos a {
  display: inline-flex; align-items: center; gap: 5px;
  font-weight: 700; color: var(--acento-texto);
  border-bottom: 1px solid var(--acento-linha); padding-bottom: 1px;
}
.guia-passos a:hover { color: var(--acento); border-bottom-color: var(--acento); text-decoration: none; }
.guia-passos div > span { display: block; font-size: 12.5px; color: var(--tinta-2); margin-top: 3px; }

/* a promessa sobre a chave, destacada — é a dúvida que trava o cadastro */
.nota-segura {
  display: flex; gap: 11px; align-items: flex-start;
  padding: 12px 14px; border-radius: var(--raio-sm);
  background: var(--ok-suave); border-left: 3px solid var(--ok);
}
.nota-segura .ic { color: var(--ok); flex: none; margin-top: 1px; }
/* Texto menor e com folga em volta: é uma garantia, não uma instrução — fica
   ali para tranquilizar quem vai colar uma chave secreta, sem disputar
   atenção com o campo logo acima. */
.nota-segura b { display: block; font-size: 12.5px; color: var(--tinta); line-height: 1.45; }
.nota-segura span { display: block; font-size: 11.5px; color: var(--tinta-2); line-height: 1.55; margin-top: 4px; }

/* lista de atalhos para as outras telas */
.atalhos { display: flex; flex-direction: column; }
.atalho {
  display: flex; align-items: center; gap: 12px;
  padding: 13px 18px; border-top: 1px solid var(--linha);
  color: var(--tinta); transition: background var(--transicao);
}
.atalho:first-child { border-top: 0; }
.atalho:hover { background: var(--superficie-2); text-decoration: none; }
.atalho:hover .atalho-icone { background: var(--acento); color: #fff; }
.atalho-icone {
  width: 36px; height: 36px; flex: none; border-radius: 10px;
  background: var(--superficie-2); color: var(--tinta-2);
  display: grid; place-items: center;
  transition: background var(--transicao), color var(--transicao);
}
.atalho-txt { flex: 1; min-width: 0; line-height: 1.4; }
.atalho-txt b { display: block; font-size: 14px; font-weight: 600; }
.atalho-txt span { display: block; font-size: 12.5px; color: var(--tinta-3); }
.atalho > .ic:last-child { color: var(--tinta-4); flex: none; }
.atalho:hover > .ic:last-child { color: var(--acento); }

/* paginação */
.paginacao {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
  padding: 12px 18px; border-top: 1px solid var(--linha); background: var(--superficie-2);
  font-size: 12.5px; color: var(--tinta-3);
}
.paginacao .pg-botoes { display: flex; gap: 6px; }
.paginacao .pg-botoes .btn { min-width: 0; }
.rolagem > .paginacao, .atividade + .paginacao { border-radius: 0 0 var(--raio) var(--raio); }
.paginacao a[aria-disabled="true"] { opacity: .4; pointer-events: none; }

/* =============================================================================
   Recorte de foto
   ============================================================================= */
.recorte-area { position: relative; width: 300px; height: 300px; margin: 0 auto; border-radius: var(--raio-sm); overflow: hidden; background: var(--superficie-3); }
.recorte-tela { display: block; cursor: grab; touch-action: none; }
.recorte-tela:active { cursor: grabbing; }
.recorte-mascara { position: absolute; inset: 0; pointer-events: none; box-shadow: inset 0 0 0 2px rgba(255, 255, 255, .8), inset 0 0 0 3px var(--acento); border-radius: var(--raio-sm); }
.recorte-zoom { display: flex; align-items: center; gap: 12px; width: 300px; margin: 14px auto 0; font-size: 13px; color: var(--tinta-3); }
.recorte-zoom input { flex: 1; accent-color: var(--acento); }

@media (max-width: 1120px) {
  .grade-equipe { grid-template-columns: 1fr; }
}
@media (max-width: 760px) {
  .pessoa { grid-template-columns: 44px 1fr auto; row-gap: 10px; }
  .pessoa-papel { grid-column: 2 / -1; }
  .pessoa-numeros { grid-column: 2 / -1; justify-content: flex-start; }
  .pessoa-numeros > div { text-align: left; }
  .pessoa-acoes { grid-column: 3; grid-row: 1; }
  .recorte-area, .recorte-zoom { width: 100%; max-width: 300px; }
}

/* =============================================================================
   Barra de tela: período + número + nota
   ============================================================================= */
.tela-barra { display: flex; flex-wrap: wrap; gap: 12px 16px; align-items: center; margin-bottom: 20px; position: relative; z-index: 10; }
.tela-barra-nota { max-width: 520px; line-height: 1.4; }

.periodo { position: relative; }
.periodo-botao {
  display: flex; align-items: center; gap: 10px; height: 40px; padding: 0 14px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie); color: var(--tinta); font-size: 14px;
  box-shadow: var(--sombra); white-space: nowrap;
  transition: border-color var(--transicao);
}
.periodo-botao:hover { border-color: var(--acento); }
.periodo-botao > .ic:first-child { color: var(--acento-texto); }
.periodo-rotulo { font-weight: 700; }
.periodo-datas { color: var(--tinta-2); padding-left: 10px; border-left: 1px solid var(--linha); }
.periodo-seta { color: var(--tinta-4); }

.periodo-painel {
  position: absolute; z-index: 45; top: calc(100% + 6px); left: 0;
  display: none; grid-template-columns: 190px 240px;
  background: var(--superficie); border: 1px solid var(--linha);
  border-radius: var(--raio); box-shadow: var(--sombra-3); overflow: hidden;
}
.periodo-painel.aberta { display: grid; }
.periodo-atalhos { display: flex; flex-direction: column; padding: 6px; border-right: 1px solid var(--linha); }
.periodo-atalhos a { padding: 9px 11px; border-radius: var(--raio-xs); font-size: 13.5px; color: var(--tinta); white-space: nowrap; }
.periodo-atalhos a:hover { background: var(--superficie-2); text-decoration: none; }
.periodo-atalhos a.atual { background: var(--acento-suave); color: var(--acento-texto); font-weight: 700; }
.periodo-custom { padding: 14px; display: flex; flex-direction: column; gap: 11px; }
.periodo-titulo { font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase; color: var(--tinta-4); font-weight: 800; }
.periodo-custom .campo input { height: 38px; font-size: 13.5px; }
.periodo-nota { margin: 2px 0 0; font-size: 11.5px; color: var(--tinta-3); line-height: 1.45; }

.filtro-numero {
  display: flex; align-items: center; gap: 8px; height: 40px; padding: 0 10px 0 13px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie); box-shadow: var(--sombra);
  transition: border-color var(--transicao);
}
.filtro-numero:focus-within { border-color: var(--acento); box-shadow: var(--anel); }
.filtro-numero .ic { color: var(--acento-texto); }
.filtro-numero select { border: 0; background: transparent; box-shadow: none; font-size: 14px; font-weight: 600; color: var(--tinta); max-width: 250px; padding: 0; height: 100%; outline: 0; cursor: pointer; }

/* segmentado (filtros de origem, abas de nível) */
.filtros { display: inline-flex; gap: 2px; padding: 3px; border-radius: var(--raio-sm); background: var(--superficie-2); border: 1px solid var(--linha); }
.filtros button {
  height: 32px; padding: 0 12px; border: 0; border-radius: var(--raio-xs);
  background: transparent; color: var(--tinta-2); font-size: 13.5px; font-weight: 600;
  transition: background var(--transicao), color var(--transicao);
}
.filtros button:hover { color: var(--tinta); }
.filtros button.ativo { background: var(--superficie); color: var(--tinta); box-shadow: var(--sombra); }
/* os mesmos botões de filtro quando são links (filtro que vive na URL) */
.filtros a {
  display: inline-flex; align-items: center; height: 32px; padding: 0 12px; border-radius: var(--raio-xs);
  color: var(--tinta-2); font-size: 13.5px; font-weight: 600; text-decoration: none;
  transition: background var(--transicao), color var(--transicao);
}
.filtros a:hover { color: var(--tinta); text-decoration: none; }
.filtros a.ativo { background: var(--superficie); color: var(--tinta); box-shadow: var(--sombra); }
.qtd-mini { font-size: 11px; color: var(--tinta-4); margin-left: 3px; }

/* =============================================================================
   Início
   ============================================================================= */
.grade-inicio { display: grid; grid-template-columns: minmax(0, 1.7fr) minmax(300px, 1fr); gap: 16px; align-items: start; }
.grade-hero   { display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(320px, 1fr); gap: 16px; margin-bottom: 20px; }

/* hero: a frase que resume o dia
   O gradiente para em #5b55f0 de propósito — daí para cima o branco perde
   contraste e o parágrafo deixaria de ser legível. O tom mais claro fica no
   canto superior direito, onde não há texto. */
.hero {
  position: relative; overflow: hidden; isolation: isolate;
  display: flex; flex-direction: column; justify-content: space-between; gap: 22px;
  min-height: 260px; padding: 30px 32px; border-radius: var(--raio); color: #fff;
  background:
    radial-gradient(120% 140% at 88% -20%, #7b74ff 0%, transparent 55%),
    linear-gradient(142deg, #2f2fa0 0%, #3b3fd0 48%, #5b55f0 100%);
  box-shadow: 0 20px 48px -22px rgba(47, 47, 160, .75);
}
/* grão fino: tira o aspecto de bloco chapado sem custar um elemento */
.hero::before {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  opacity: .16; mix-blend-mode: overlay;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='3'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
}
/* dois halos e uma linha de luz no topo: profundidade, não enfeite */
.hero::after {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background:
    radial-gradient(420px 420px at 82% 8%,  rgba(255, 255, 255, .16), transparent 62%),
    radial-gradient(320px 320px at 108% 92%, rgba(122, 108, 255, .42), transparent 60%);
  border-radius: inherit;
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, .22);
}

.hero-topo { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.hero-data {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 5px 12px 5px 10px; border-radius: 999px;
  background: rgba(255, 255, 255, .13); border: 1px solid rgba(255, 255, 255, .18);
  font-size: 12.5px; font-weight: 600; letter-spacing: .01em;
  backdrop-filter: blur(6px);
}
.hero-data .ic { opacity: .8; }

.hero h2 {
  margin: 14px 0 12px; font: italic 400 38px/1.08 var(--serif);
  letter-spacing: -.015em; text-wrap: balance;
}
.hero p {
  margin: 0; font-size: 15px; line-height: 1.65; max-width: 58ch;
  color: rgba(255, 255, 255, .88);
}
.hero p b { color: #fff; font-weight: 700; }

.hero-acoes { display: flex; flex-wrap: wrap; gap: 9px; align-items: center; }
.hero-acoes .btn {
  height: 42px; padding: 0 16px;
  background: rgba(255, 255, 255, .12); border-color: rgba(255, 255, 255, .2); color: #fff;
  backdrop-filter: blur(8px);
}
.hero-acoes .btn:hover { background: rgba(255, 255, 255, .22); border-color: rgba(255, 255, 255, .34); }
.hero-acoes .btn-primario {
  background: #fff; color: #2f2fa0; border-color: transparent; font-weight: 700;
  box-shadow: 0 10px 24px -10px rgba(0, 0, 0, .55);
}
.hero-acoes .btn-primario:hover { background: #fff; filter: brightness(.94); }
/* separa o atalho do resto: é conveniência, não ação do dia */
.hero-atalho {
  margin-left: auto; display: inline-flex; align-items: center; gap: 8px;
  border: 0; background: transparent; color: rgba(255, 255, 255, .72);
  font-size: 13px; font-weight: 600; padding: 6px 4px;
}
.hero-atalho:hover { color: #fff; }
.hero-atalho .tecla { background: rgba(255, 255, 255, .14); border-color: rgba(255, 255, 255, .22); color: #fff; }

@media (max-width: 760px) {
  .hero { min-height: 0; padding: 22px; gap: 18px; }
  .hero h2 { font-size: 28px; margin: 12px 0 10px; }
  .hero p { font-size: 14px; }
  .hero-atalho { display: none; }
}

/* o caminho até a Meta — quatro elos em cadeia, um dependendo do outro */
.caminho-cab { gap: 10px; }
.caminho-cab h2 { margin: 0; font-size: 16px; font-weight: 700; }
.caminho-selo {
  margin-left: auto; font-size: 10.5px; font-weight: 800; letter-spacing: .06em;
  padding: 4px 10px; border-radius: 999px;
}
.caminho-selo.ok        { background: var(--ok-suave);    color: var(--ok); }
.caminho-selo.problema  { background: var(--erro-suave);  color: var(--erro); }
.caminho-selo.esperando { background: var(--superficie-2); color: var(--tinta-3); }
.caminho-frase { margin: 0; padding: 14px 18px 0; font-size: 13px; line-height: 1.5; color: var(--tinta-2); }

.caminho { list-style: none; margin: 0; padding: 14px 18px 18px; display: flex; flex-direction: column; }
.elo { position: relative; display: flex; align-items: flex-start; gap: 11px; padding: 9px 0; }
/* Ação e "já vi" lado a lado; quebram para baixo quando não couberem. */
.elo-acoes { margin-left: auto; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.elo-dispensar { color: var(--tinta-3); }
.elo-dispensar:hover { color: var(--tinta); }
/* a linha que liga os elos: mostra que um depende do anterior */
.elo::before {
  content: ""; position: absolute; left: 10px; top: 30px; bottom: -9px; width: 2px;
  background: var(--linha); border-radius: 2px;
}
.elo:last-child::before { display: none; }
.elo-marca { width: 22px; height: 22px; flex: none; border-radius: 50%; display: grid; place-items: center; z-index: 1; }
.elo-ok .elo-marca        { background: var(--ok-suave);    color: var(--ok); }
.elo-problema .elo-marca  { background: var(--erro-suave);  color: var(--erro); }
.elo-esperando .elo-marca { background: var(--superficie-2); color: var(--tinta-4); box-shadow: inset 0 0 0 1px var(--linha); }
.elo-txt { flex: 1; min-width: 0; line-height: 1.4; }
.elo-txt b { display: block; font-size: 13.5px; font-weight: 600; }
.elo-txt span { display: block; font-size: 12.5px; color: var(--tinta-3); }
.elo-esperando .elo-txt b { color: var(--tinta-3); font-weight: 500; }
.elo-problema .elo-txt b { color: var(--erro); }
.elo .btn { flex: none; align-self: center; }

/* cartões de número */
.grade-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 12px; }
.grade-stats-6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.grade-stats-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.stat.destaque {
  background: linear-gradient(135deg, var(--acento), #6a63ff); border-color: transparent; color: #fff;
  box-shadow: 0 14px 34px -16px rgba(59, 63, 208, .8);
}

.faisca { display: block; }
.faisca path { fill: none; stroke: var(--acento); stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; }

/* funil em resumo */
.funil-resumo { padding: 16px 18px; }
.funil-resumo-cab { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.funil-resumo-cab h2 { margin: 0; font-size: 16px; font-weight: 700; }
.funil-resumo-cab .direita { margin-left: auto; font-size: 13px; color: var(--tinta-2); }
.fr-trilhos { display: grid; gap: 10px; grid-auto-flow: column; grid-auto-columns: 1fr; }
.fr-etapa { min-width: 0; text-align: left; border: 0; background: transparent; padding: 0; }
.fr-barra { height: 8px; border-radius: 999px; background: var(--superficie-3); overflow: hidden; margin-bottom: 8px; }
.fr-barra i { display: block; height: 100%; border-radius: 999px; transition: width .4s var(--mola); }
.fr-etapa b { display: block; font-size: 13.5px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fr-etapa span { display: block; font-size: 12px; color: var(--tinta-4); }
.fr-etapa:hover b { color: var(--acento-texto); }

/* atividade recente */
.atividade { display: flex; flex-direction: column; }
.atv-item { display: flex; gap: 12px; padding: 12px 18px; border-bottom: 1px solid var(--linha); }
.atv-item:last-child { border-bottom: 0; }
.atv-icone { width: 28px; height: 28px; flex: none; border-radius: 8px; display: grid; place-items: center; }
.atv-txt { flex: 1; min-width: 0; line-height: 1.35; font-size: 13px; }
.atv-txt b { display: block; font-weight: 600; }
.atv-txt span { display: block; color: var(--tinta-3); font-size: 12.5px; }
.atv-quando { font-size: 11.5px; color: var(--tinta-4); white-space: nowrap; }
.ao-vivo { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--ok); }
.ao-vivo::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: var(--ok); animation: pulsar 2s infinite; }

/* hero de conectar (quando não há número) */
.conectar-hero {
  position: relative; overflow: hidden;
  display: flex; gap: 20px; align-items: center; flex-wrap: wrap;
  padding: 26px 28px; border-radius: var(--raio);
  background: var(--superficie); border: 1px solid var(--linha); box-shadow: var(--sombra);
}
.conectar-hero::after {
  content: ""; position: absolute; right: -60px; top: -80px; width: 320px; height: 320px; z-index: 0;
  border-radius: 50%; background: radial-gradient(circle, var(--acento-suave), transparent 65%);
}
.conectar-hero > * { position: relative; z-index: 1; }
.conectar-hero h3 { margin: 12px 0 8px; font-size: 24px; font-weight: 800; letter-spacing: -.025em; line-height: 1.2; }
.conectar-hero p { margin: 0; color: var(--tinta-2); font-size: 14px; line-height: 1.55; max-width: 62ch; }
.ch-texto { flex: 1; min-width: 280px; }
.ch-acao { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
.ch-nota { max-width: 38ch; line-height: 1.5; }

/* com número parado a tela inteira muda de tom — sem piscar: aqui o usuário já
   chegou, o que falta é a ação, não o susto */
.conectar-hero.urgente {
  border-color: color-mix(in srgb, var(--erro) 34%, transparent);
  background: linear-gradient(180deg, var(--erro-suave), var(--superficie) 62%);
}
.conectar-hero.urgente::after { background: radial-gradient(circle, color-mix(in srgb, var(--erro) 14%, transparent), transparent 65%); }
.conectar-hero.urgente h3 { color: var(--erro); }
.conectar-hero.urgente .btn-primario {
  background: var(--erro); box-shadow: 0 12px 28px -12px var(--erro);
}
.conectar-hero.urgente .btn-primario:hover { background: var(--erro); filter: brightness(.92); }
.passos { display: flex; flex-wrap: wrap; gap: 8px 18px; list-style: none; margin: 14px 0 0; padding: 0; font-size: 13px; color: var(--tinta-2); }
.passos li { display: flex; align-items: center; gap: 8px; }
.passos li .ic { color: var(--tinta-4); }
.passos li.ok { color: var(--ok); }
.passos li.ok .ic { color: var(--ok); }
.passos li.erro { color: var(--erro); }
.passo-n { width: 20px; height: 20px; border-radius: 50%; background: var(--acento-suave); color: var(--acento-texto); font-size: 11px; font-weight: 700; display: grid; place-items: center; }

/* =============================================================================
   Funil (kanban)
   ============================================================================= */
.funil-tela { display: flex; flex-direction: column; }
.funil-barra { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 14px; position: relative; z-index: 10; }
.funil-acoes { margin-left: auto; display: flex; gap: 8px; }
.funil-conta { white-space: nowrap; }
.funil-conta b { color: var(--tinta); }

.busca-campo {
  /* estreita de propósito: com ela larga demais, "Atualizar" e "+ Etapa" caem
     para a linha de baixo em tela de 1400 e a barra fica com três alturas */
  display: flex; align-items: center; gap: 8px; height: 40px; padding: 0 12px;
  min-width: 148px; flex: 0 1 200px; max-width: 228px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm); background: var(--superficie);
  color: var(--tinta-4); box-shadow: var(--sombra); transition: border-color var(--transicao);
}
.busca-campo:focus-within { border-color: var(--acento); box-shadow: var(--anel); }
.busca-campo input { flex: 1; min-width: 0; border: 0; background: transparent; outline: 0; font-size: 14px; color: var(--tinta); }

.chip-filtro {
  display: inline-flex; align-items: center; gap: 6px; padding: 5px 6px 5px 11px; border-radius: 999px;
  background: var(--acento-suave); color: var(--acento-texto); font-size: 12.5px;
  box-shadow: inset 0 0 0 1px var(--acento-linha);
}
.chip-filtro button { border: 0; background: transparent; color: inherit; font-size: 15px; line-height: 1; width: 20px; height: 20px; border-radius: 50%; padding: 0; }
.chip-filtro button:hover { background: color-mix(in srgb, var(--acento) 16%, transparent); }

.aviso-fino {
  display: flex; align-items: center; gap: 10px; padding: 11px 15px; margin-bottom: 12px;
  border-radius: var(--raio-sm); background: var(--superficie); border: 1px solid var(--linha);
  font-size: 13.5px; color: var(--tinta-2); box-shadow: var(--sombra);
}
.aviso-fino .ic { color: var(--tinta-4); }
.aviso-fino b { color: var(--tinta); }
.aviso-fino .btn { margin-left: auto; }

.aviso-organico {
  display: flex; gap: 12px; align-items: flex-start; padding: 14px 16px; margin-bottom: 14px;
  border-radius: var(--raio); background: var(--aviso-suave);
  border: 1px solid color-mix(in srgb, var(--aviso) 26%, transparent);
  font-size: 13.5px; line-height: 1.5; color: var(--tinta-2);
}
.aviso-organico .ic { color: var(--aviso); flex: none; margin-top: 1px; }
.aviso-organico b { color: var(--tinta); }
.aviso-organico .btn { margin-left: auto; flex: none; align-self: center; }

/* As colunas ficam SEMPRE lado a lado e o quadro rola na horizontal. Antes era
   uma grade de cinco: a sexta etapa caía para baixo e o funil deixava de ser
   lido da esquerda para a direita. */
.kanban { display: none; }
.kanban.mostrar {
  display: flex; gap: 14px; align-items: flex-start;
  overflow-x: auto; overflow-y: hidden; padding-bottom: 10px;
  scroll-snap-type: x proximity; overscroll-behavior-x: contain;
}
/* A rolagem do quadro é o gesto mais repetido desta tela: a barra fina padrão
   dá 6 px de alvo. Aqui ela fica alta, com trilho visível, para pegar de
   primeira com o mouse. */
.kanban.mostrar { scrollbar-width: auto; scrollbar-color: var(--linha-forte) var(--superficie-2); }
/* scrollbar-width manda no Chrome novo e no Firefox; o ::-webkit fica para a
   cor e para tirar as setinhas, que só roubam trilho. */
.kanban.mostrar::-webkit-scrollbar { height: 15px; }
.kanban.mostrar::-webkit-scrollbar-button { display: none; }
.kanban.mostrar::-webkit-scrollbar-track {
  background: var(--superficie-2); border-radius: 99px;
  border: 4px solid transparent; background-clip: content-box;
}
.kanban.mostrar::-webkit-scrollbar-thumb {
  background: var(--linha-forte); border-radius: 99px;
  border: 3px solid transparent; background-clip: content-box;
}
.kanban.mostrar::-webkit-scrollbar-thumb:hover { background: var(--tinta-3); background-clip: content-box; }
.kanban.mostrar::-webkit-scrollbar-thumb:active { background: var(--acento); background-clip: content-box; }

.coluna {
  flex: 0 0 280px; min-width: 0; scroll-snap-align: start;
  display: flex; flex-direction: column;
  border-radius: var(--raio); box-shadow: var(--sombra);
  /* o fundo é a cor da etapa diluída no fundo da tela — véu, não bloco */
  background: color-mix(in srgb, var(--cor-etapa, var(--acento)) var(--tom-etapa), var(--superficie));
  border: 1px solid color-mix(in srgb, var(--cor-etapa, var(--linha)) 26%, var(--linha));
}
.coluna-cab {
  display: flex; align-items: center; gap: 8px; padding: 13px 14px 11px;
  border-radius: var(--raio) var(--raio) 0 0;
  background: color-mix(in srgb, var(--cor-etapa, var(--acento)) var(--tom-etapa-cab), var(--superficie));
  border-bottom: 1px solid color-mix(in srgb, var(--cor-etapa, var(--linha)) 22%, transparent);
}
.coluna-cab .qtd { background: color-mix(in srgb, var(--cor-etapa) 30%, var(--superficie)); }

/* o corpo rola dentro da própria coluna: a página não cresce sem fim e o
   cabeçalho da etapa continua à vista */
/* Sem `overscroll-behavior: contain`: com ele, a roda do mouse parada em cima de
   uma coluna ficava presa ali, e a pagina so rolava com o cursor nos vaos entre
   as colunas. Agora a coluna rola ate o fim e a rolagem segue para a pagina,
   que e o que o navegador faz por padrao em qualquer lugar. */
.coluna-corpo { max-height: 58vh; overflow-y: auto; }

/* o resto dos cards vem a pedido — desenhar 500 de uma vez trava a tela */
.coluna-mais-cards {
  width: 100%; margin-top: 2px; padding: 9px; border: 1px dashed var(--linha-forte);
  border-radius: var(--raio-sm); background: transparent; color: var(--tinta-3);
  font-size: 12.5px; font-weight: 600; font-family: inherit;
}
.coluna-mais-cards:hover { border-color: var(--acento); color: var(--acento-texto); background: var(--superficie); }
.coluna-cab h2 { margin: 0; font-size: 14.5px; font-weight: 700; flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.coluna-cab .qtd { min-width: 22px; height: 22px; padding: 0 7px; border-radius: 11px; background: var(--superficie-2); color: var(--tinta-2); font-size: 12px; font-weight: 700; display: grid; place-items: center; }
.coluna-menu { position: relative; }
.coluna-mais { width: 28px; height: 28px; padding: 0; }
.coluna-evento { padding: 0 14px 10px; }
.coluna-evento .mono {
  display: inline-flex; align-items: center; gap: 5px; padding: 2px 7px; border-radius: 6px;
  background: var(--acento-suave); color: var(--acento-texto);
  font-size: 10.5px; letter-spacing: -.01em; cursor: help;
  max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.coluna.terminal .coluna-evento .mono { background: var(--superficie-2); color: var(--tinta-3); }
.trilho { height: 3px; background: var(--superficie-3); margin: 0 14px 12px; border-radius: 3px; overflow: hidden; }
.trilho i { display: block; height: 100%; border-radius: 3px; }
.coluna-corpo { display: flex; flex-direction: column; gap: 10px; padding: 12px; min-height: 90px; }

/* --- arrastar -------------------------------------------------------------
   Três estados, porque sem eles o quadro parece que não arrasta: o cursor
   avisa antes de pegar, a coluna se acende enquanto se arrasta e o buraco
   deixado pelo card mostra onde ele vai cair. */
.coluna-corpo.alvo {
  border-radius: var(--raio-sm);
  box-shadow: inset 0 0 0 2px var(--acento-linha);
  background: color-mix(in srgb, var(--acento) 5%, transparent);
}
.card.arrastando {                      /* o buraco que fica para trás */
  opacity: .5; border-style: dashed; border-color: var(--acento);
  background: var(--acento-suave); box-shadow: none; transform: none;
}
.card.arrastando > * { visibility: hidden; }
.sortable-drag {                        /* o card que segue o dedo */
  box-shadow: var(--sombra-3) !important; transform: rotate(1.4deg) !important;
  border-color: var(--acento) !important; opacity: 1 !important;
}
.coluna.sortable-chosen { opacity: .9; }
.coluna.arrastando { opacity: .55; }

/* a alça das colunas: só ela arrasta a coluna, para não brigar com os cards */
.coluna-alca {
  flex: none; display: grid; place-items: center; width: 18px; height: 22px;
  margin-left: -4px; color: var(--linha-forte); cursor: grab; opacity: .55;
  transition: opacity var(--transicao), color var(--transicao);
}
.coluna-alca:active { cursor: grabbing; }
.coluna:hover .coluna-alca, .coluna:focus-within .coluna-alca { opacity: 1; }
.coluna-alca:hover { color: var(--acento); }
.coluna-vazia {
  border: 1px dashed var(--linha-forte); border-radius: var(--raio-sm);
  padding: 22px 14px; text-align: center; color: var(--tinta-4); font-size: 12.5px; line-height: 1.5;
}
.coluna-vazia .ic { color: var(--linha-forte); margin-bottom: 6px; }
.coluna-vazia b { display: block; color: var(--tinta-3); font-size: 13px; font-weight: 600; margin-bottom: 2px; }

.card {
  background: var(--superficie); border: 1px solid var(--linha); border-radius: var(--raio-sm);
  padding: 12px; box-shadow: var(--sombra); cursor: grab;
  transition: border-color var(--transicao), box-shadow var(--transicao), transform var(--transicao);
}
.card:hover { border-color: var(--acento-linha); box-shadow: var(--sombra-2); transform: translateY(-1px); }
.card:active { cursor: grabbing; }
.card.organico { background: var(--superficie-2); }
.card-topo { display: flex; align-items: flex-start; gap: 8px; }
.card-nome { font-weight: 700; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.card-tel { font-family: var(--mono); font-size: 11px; color: var(--tinta-3); margin-top: 1px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.card-rodape { display: flex; align-items: center; gap: 8px; margin-top: 11px; padding-top: 10px; border-top: 1px solid var(--linha); }
.card-quando { font-size: 11.5px; color: var(--tinta-4); display: flex; align-items: center; gap: 4px; }
.card-sinais { margin-left: auto; display: flex; align-items: center; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.card-quando, .chip-msg, .chip-valor, .chip-ia { white-space: nowrap; }
.chip-ia { padding: 2px 7px; border-radius: 6px; background: var(--ia-suave); color: var(--ia); font-size: 11px; font-weight: 700; cursor: help; }
.chip-msg { display: inline-flex; align-items: center; gap: 3px; font-size: 11.5px; color: var(--tinta-3); }
.chip-erro { width: 18px; height: 18px; border-radius: 50%; background: var(--erro-suave); color: var(--erro); font-size: 11px; font-weight: 800; display: grid; place-items: center; }
.chip-valor { border: 0; background: transparent; color: var(--tinta-4); font-size: 11.5px; font-weight: 600; padding: 2px 6px; border-radius: 6px; }
.chip-valor:hover { background: var(--superficie-2); color: var(--tinta-2); }
.chip-valor.tem { color: var(--ok); background: var(--ok-suave); }

.menu-flutuante {
  position: absolute; z-index: 30; right: 0; top: calc(100% + 4px); min-width: 200px; padding: 5px; display: none;
  background: var(--superficie); border: 1px solid var(--linha); border-radius: var(--raio-sm); box-shadow: var(--sombra-3);
}
.menu-flutuante.aberta { display: block; animation: surgir .14s var(--mola); }
.menu-flutuante button {
  display: flex; align-items: center; gap: 9px; width: 100%; height: 34px; padding: 0 10px;
  border: 0; border-radius: var(--raio-xs); background: transparent; color: var(--tinta);
  font-size: 13.5px; text-align: left;
}
.menu-flutuante button:hover { background: var(--superficie-2); }
.menu-flutuante button.perigo { color: var(--erro); }
.menu-flutuante button.perigo:hover { background: var(--erro-suave); }
.menu-flutuante button:disabled { opacity: .4; cursor: not-allowed; }
.menu-flutuante button:disabled:hover { background: transparent; }

/* =============================================================================
   Painel do lead — tela cheia: dados à esquerda, conversa à direita
   ============================================================================= */
.painel-fundo {
  position: fixed; inset: 0; z-index: 110; display: none; padding: 18px;
  background: rgba(10, 12, 30, .5); backdrop-filter: blur(4px);
}
.painel-fundo.aberta { display: flex; animation: aparece .15s; }
.painel { flex: 1; min-height: 0; min-width: 0; display: flex; background: var(--superficie); border-radius: 18px; box-shadow: var(--sombra-3); overflow: hidden; animation: surgir .2s var(--mola); }
/* meio a meio: a ficha tem tanto o que dizer quanto a conversa, e a conversa
   larga demais espalha as bolhas por uma linha longa e fica pior de ler */
.painel-grade { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); width: 100%; height: 100%; min-height: 0; }

.painel-lado { display: flex; flex-direction: column; min-height: 0; border-right: 1px solid var(--linha); }
.lado-cab { display: flex; align-items: center; gap: 12px; padding: 16px 18px; border-bottom: 1px solid var(--linha); }
.lado-avatar { width: 44px; height: 44px; flex: none; border-radius: 50%; background: var(--acento-suave); color: var(--acento-texto); display: grid; place-items: center; font-weight: 800; }
.lado-cab h3 { margin: 0; font-size: 16.5px; font-weight: 700; letter-spacing: -.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lado-sub { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 3px; font-size: 12.5px; color: var(--tinta-3); }

/* o nome vem do WhatsApp e às vezes é só emoji — o lápis aparece ao passar */
.nome-edit { display: flex; align-items: center; gap: 6px; min-width: 0; }
.nome-edit h3 { min-width: 0; }
.nome-edit > .btn { flex: none; }
/* discreto mas sempre visível: em telas de toque não existe hover para revelar */
.btn-renomear { width: 26px; height: 26px; padding: 0; color: var(--tinta-4); opacity: .5; transition: opacity var(--transicao), color var(--transicao); }
.lado-cab:hover .btn-renomear, .btn-renomear:focus-visible { opacity: 1; }
.btn-renomear:hover { opacity: 1; color: var(--acento); background: var(--acento-suave); }
.nome-edit input {
  flex: 1; min-width: 0; height: 32px; padding: 0 9px;
  border: 1px solid var(--acento); border-radius: 8px; background: var(--superficie);
  color: var(--tinta); font-family: inherit; font-size: 15px; font-weight: 700;
}
.nome-edit input:focus { outline: 2px solid var(--acento-linha); outline-offset: 1px; }

.lado-rolagem { flex: 1; min-height: 0; overflow-y: auto; display: flex; flex-direction: column; gap: 14px; padding: 16px 18px 22px; }
.lado-rolagem > * { flex-shrink: 0; }
.lado-rotulo { display: block; font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--tinta-4); font-weight: 800; margin-bottom: 8px; }

.lado-etapa { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.lado-etapa .lado-rotulo { width: 100%; margin-bottom: 0; }
.etapa-atual { display: inline-flex; align-items: center; gap: 8px; padding: 7px 13px 7px 11px; border-radius: 999px; background: var(--superficie-2); font-size: 13.5px; font-weight: 700; }
.etapa-atual i { width: 10px; height: 10px; border-radius: 50%; display: inline-block; }

.lado-fatos { display: grid; grid-template-columns: 1fr 1fr; gap: 1px; background: var(--linha); border: 1px solid var(--linha); border-radius: var(--raio-sm); overflow: hidden; }
.lado-fatos > div { background: var(--superficie); padding: 10px 12px; min-width: 0; }
.lado-fatos > div > span { display: block; font-size: 10.5px; color: var(--tinta-4); text-transform: uppercase; letter-spacing: .05em; font-weight: 700; }
.lado-fatos b { display: block; font-size: 13.5px; font-weight: 600; margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.link-mini { border: 0; background: transparent; color: var(--acento-texto); font-size: 12px; padding: 0; margin-top: 2px; font-weight: 600; }
.link-mini:hover { text-decoration: underline; }

.lado-alerta { padding: 11px 13px; border-radius: var(--raio-sm); background: var(--aviso-suave); border-left: 3px solid var(--aviso); font-size: 13px; line-height: 1.5; color: var(--tinta-2); }
.lado-ia { padding: 12px 14px; border-radius: var(--raio-sm); background: var(--ia-suave); border-left: 3px solid var(--ia); }
.lado-ia-cab { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.lado-ia p { margin: 7px 0 0; font-size: 13px; line-height: 1.5; color: var(--tinta-2); }

.eventos-lista { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 9px; }
.eventos-lista li { display: grid; grid-template-columns: 10px 1fr auto; column-gap: 10px; row-gap: 2px; align-items: center; font-size: 13px; }
.eventos-lista li i { width: 10px; height: 10px; border-radius: 50%; background: var(--tinta-4); }
.eventos-lista li.ev-enviado i  { background: var(--ok); }
.eventos-lista li.ev-erro i     { background: var(--erro); animation: pulsar 1.8s infinite; }
.eventos-lista li.ev-pendente i { background: var(--aviso); }
.ev-nome { font-size: 12.5px; }
.ev-status { font-size: 12px; color: var(--tinta-3); white-space: nowrap; }
.ev-enviado .ev-status { color: var(--ok); }
.ev-erro .ev-status { color: var(--erro); }
.ev-quando { grid-column: 2 / -1; font-size: 11.5px; color: var(--tinta-4); }
.ev-erro-msg { grid-column: 2 / -1; margin: 0; font-size: 12px; color: var(--erro); line-height: 1.4; }

/* anúncio de origem */
.gaveta-anuncio { border: 1px solid var(--linha); border-radius: var(--raio-sm); overflow: hidden; }
.ga-cab { display: flex; align-items: center; justify-content: space-between; padding: 9px 12px; background: var(--superficie-2); font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em; color: var(--tinta-4); font-weight: 800; }
.ga-cab a { text-transform: none; letter-spacing: 0; font-weight: 600; font-size: 12px; }
.ga-corpo { display: flex; gap: 12px; padding: 12px; }
.ga-thumb { width: 64px; height: 64px; flex: none; border-radius: var(--raio-xs); background: var(--superficie-3) center / cover no-repeat; display: grid; place-items: center; font-size: 10px; color: var(--tinta-4); text-transform: uppercase; }
.ga-cadeia { display: flex; flex-wrap: wrap; align-items: center; gap: 4px; font-size: 13px; font-weight: 700; line-height: 1.35; }
.ga-cadeia i { color: var(--tinta-4); font-style: normal; }
.ga-texto { margin: 6px 0 0; font-size: 12.5px; color: var(--tinta-2); line-height: 1.45; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; }
.ga-fatos { display: flex; flex-wrap: wrap; gap: 4px 14px; margin-top: 8px; font-size: 12px; color: var(--tinta-3); }
.ga-fatos b { color: var(--tinta); font-weight: 600; }

/* ---- a conversa, no visual do WhatsApp Web ---- */
.zap {
  --zap-fundo: #efeae2; --zap-cab: #f0f2f5; --zap-dele: #ffffff; --zap-meu: #d9fdd3;
  --zap-texto: #111b21; --zap-hora: #667781; --zap-pill: #ffffff; --zap-avatar: #dfe5e7; --zap-avatar-tinta: #54656f;
  --zap-doodle: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140' viewBox='0 0 140 140'><g fill='none' stroke='%23000' stroke-opacity='.055' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><circle cx='22' cy='24' r='7'/><path d='M62 14l9 9M71 14l-9 9'/><path d='M104 18c7-7 16 1 9 9-4 4-9 4-9 4'/><circle cx='34' cy='80' r='4'/><path d='M80 66v16M72 74h16'/><path d='M14 116q11-11 22 0'/><path d='M104 100l11 11M115 100l-11 11'/><rect x='56' y='104' width='15' height='15' rx='3'/><path d='M120 62l6 4-6 4z'/></g></svg>");
  display: flex; flex-direction: column; min-height: 0; min-width: 0;
  background: var(--zap-fundo); color: var(--zap-texto);
}
:root[data-tema="escuro"] .zap {
  --zap-fundo: #0b141a; --zap-cab: #202c33; --zap-dele: #202c33; --zap-meu: #005c4b;
  --zap-texto: #e9edef; --zap-hora: #8696a0; --zap-pill: #182229; --zap-avatar: #2a3942; --zap-avatar-tinta: #aebac1;
  --zap-doodle: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='140' height='140' viewBox='0 0 140 140'><g fill='none' stroke='%23fff' stroke-opacity='.045' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'><circle cx='22' cy='24' r='7'/><path d='M62 14l9 9M71 14l-9 9'/><path d='M104 18c7-7 16 1 9 9-4 4-9 4-9 4'/><circle cx='34' cy='80' r='4'/><path d='M80 66v16M72 74h16'/><path d='M14 116q11-11 22 0'/><path d='M104 100l11 11M115 100l-11 11'/><rect x='56' y='104' width='15' height='15' rx='3'/><path d='M120 62l6 4-6 4z'/></g></svg>");
}
.zap-cab { display: flex; align-items: center; gap: 12px; padding: 10px 16px; background: var(--zap-cab); border-bottom: 1px solid rgba(0, 0, 0, .06); }
.zap-avatar { width: 40px; height: 40px; flex: none; border-radius: 50%; background: var(--zap-avatar); color: var(--zap-avatar-tinta); display: grid; place-items: center; font-weight: 700; font-size: 14px; }
.zap-quem { min-width: 0; flex: 1; display: flex; flex-direction: column; line-height: 1.3; }
.zap-quem b { font-size: 15px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.zap-quem span { font-size: 12.5px; color: var(--zap-hora); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.zap-conta { font-size: 12px; padding: 4px 10px; border-radius: 999px; background: var(--acento-suave); color: var(--acento-texto); white-space: nowrap; font-weight: 600; }
.zap-fechar, .zap-voltar {
  border: 0; font-size: 26px; line-height: 1; width: 36px; height: 36px;
  border-radius: 50%; flex: none; display: grid; place-items: center;
  background: transparent; color: var(--zap-hora);
}
.zap-voltar:hover { background: rgba(0, 0, 0, .07); }

/* fechar é a saída de uma tela que cobre tudo: com anel próprio, não some no
   cabeçalho, e vira vermelho na hora de clicar */
.zap-fechar {
  width: 38px; height: 38px; color: var(--tinta-2);
  background: var(--superficie); box-shadow: inset 0 0 0 1px var(--linha-forte), var(--sombra);
  transition: background var(--transicao), color var(--transicao), box-shadow var(--transicao), transform var(--transicao);
}
.zap-fechar:hover {
  background: var(--erro); color: #fff; transform: rotate(90deg);
  box-shadow: inset 0 0 0 1px transparent, 0 8px 18px -8px var(--erro);
}
.zap-fechar:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }
.zap-voltar { display: none; }
.zap-corpo { flex: 1; min-height: 0; overflow-y: auto; padding: 14px 6% 18px; display: flex; flex-direction: column; background-color: var(--zap-fundo); background-image: var(--zap-doodle); }
.zap-data { align-self: center; margin: 12px 0 8px; padding: 5px 12px; border-radius: 8px; background: var(--zap-pill); color: var(--zap-hora); font-size: 12px; text-transform: uppercase; letter-spacing: .02em; box-shadow: 0 1px .5px rgba(0, 0, 0, .13); }
.zap-linha { display: flex; margin-top: 2px; }
.zap-linha.cauda { margin-top: 10px; }
.zap-linha.meu { justify-content: flex-end; }
.zap-balao {
  position: relative; max-width: 65%; padding: 6px 8px 7px 9px; border-radius: 8px;
  background: var(--zap-dele); color: var(--zap-texto); box-shadow: 0 1px .5px rgba(0, 0, 0, .13);
  font-size: 14.2px; line-height: 1.38; display: flex; flex-wrap: wrap; align-items: flex-end; gap: 2px 10px;
}
.meu .zap-balao { background: var(--zap-meu); }
.cauda.dele .zap-balao { border-top-left-radius: 0; }
.cauda.meu .zap-balao { border-top-right-radius: 0; }
.cauda .zap-balao::before { content: ""; position: absolute; top: 0; width: 8px; height: 13px; }
.cauda.dele .zap-balao::before { left: -8px; background: var(--zap-dele); clip-path: polygon(100% 0, 0 0, 100% 100%); }
.cauda.meu .zap-balao::before { right: -8px; background: var(--zap-meu); clip-path: polygon(0 0, 100% 0, 0 100%); }
.zap-texto { white-space: pre-wrap; overflow-wrap: anywhere; flex: 1 1 auto; min-width: 0; }
.zap-hora { font-size: 11px; color: var(--zap-hora); margin-left: auto; flex: none; margin-bottom: -2px; }
.zap-aviso { align-self: center; margin: auto; padding: 8px 14px; border-radius: 8px; background: var(--zap-pill); color: var(--zap-hora); font-size: 13px; }
.zap-rodape { padding: 10px 16px; background: var(--zap-cab); }
.zap-caixa { display: flex; align-items: center; gap: 10px; padding: 11px 14px; border-radius: 8px; background: var(--zap-dele); color: var(--zap-hora); font-size: 13.5px; }
.zap-caixa > span { flex: 1; min-width: 0; }

/* --- anotação do gestor ---------------------------------------------------
   Mora no lugar da caixa de escrever porque é lendo a conversa que se percebe
   o que anotar. Tudo aqui foge de propósito da linguagem do WhatsApp — nada de
   verde, nada de botão de enviar, nada de balão — para ninguém supor que isto
   chega ao cliente. */
.zap-anotar {
  flex: none; display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 13px; border-radius: 999px; border: 1px solid var(--linha-forte);
  background: var(--superficie); color: var(--tinta-2);
  font-size: 13px; font-weight: 600; font-family: inherit;
  transition: background var(--transicao), color var(--transicao), border-color var(--transicao);
}
.zap-anotar:hover { background: var(--acento-suave); border-color: var(--acento-linha); color: var(--acento-texto); }
.zap-anotar.tem { border-color: var(--acento-linha); background: var(--acento-suave); color: var(--acento-texto); }
.zap-anotar .ic { flex: none; }

/* Mostra e esconde por classe, não por x-show. Com x-show o botão Anotar abria
   a nota mas o X não a fechava de volta — reproduzido com clique de verdade, e
   a causa não ficou clara. Alternar classe é determinístico e é o que os menus
   e os modais deste projeto já fazem, pelo mesmo tipo de problema. */
.zap-caixa.oculta { display: none; }

.nota {
  display: none;
  border-radius: 10px; padding: 11px 13px 10px;
  background: var(--superficie); box-shadow: inset 0 0 0 1px var(--linha-forte), var(--sombra);
  animation: surgir .16s var(--mola);
}
.nota.aberta { display: block; }
.nota-cab { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.nota-rotulo {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 10.5px; text-transform: uppercase; letter-spacing: .07em;
  font-weight: 800; color: var(--tinta-3);
}
.nota-estado { font-size: 11.5px; color: var(--tinta-4); }
.nota-cab .link-mini { margin-left: auto; display: inline-flex; align-items: center; gap: 5px; }
.nota-fechar {
  flex: none; width: 24px; height: 24px; padding: 0; border: 0; border-radius: 6px;
  display: grid; place-items: center; background: transparent; color: var(--tinta-4);
}
.nota-fechar:hover { background: var(--superficie-2); color: var(--tinta); }

.nota textarea {
  width: 100%; resize: vertical; min-height: 62px; padding: 9px 11px;
  border: 1px solid var(--linha-forte); border-radius: 8px; background: var(--superficie-2);
  color: var(--tinta); font-family: inherit; font-size: 13.5px; line-height: 1.55;
}
.nota textarea:focus { outline: none; border-color: var(--acento); background: var(--superficie); box-shadow: 0 0 0 3px var(--acento-suave); }
.nota textarea::placeholder { color: var(--tinta-4); }

.nota-rodape {
  display: flex; align-items: center; gap: 6px; margin-top: 7px;
  font-size: 11.5px; color: var(--tinta-4);
}
.nota-rodape .ic { flex: none; }

@media (max-width: 900px) {
  .zap-caixa { flex-wrap: wrap; }
  .zap-caixa > span { flex-basis: 100%; }
  .zap-anotar { margin-left: auto; }
}

/* =============================================================================
   Funil em lista — as mesmas etapas, uma linha por lead

   Quando o cliente tem centenas de leads, varrer uma lista com o olho é mais
   rápido do que rolar cinco colunas. É a mesma informação do card, em linha.
   ============================================================================= */
.lista-funil { display: none; }
.lista-funil.mostrar { display: flex; flex-direction: column; gap: 14px; }

.lf-grupo {
  border-radius: var(--raio); overflow: hidden; box-shadow: var(--sombra);
  background: var(--superficie);
  border: 1px solid color-mix(in srgb, var(--cor-etapa, var(--linha)) 26%, var(--linha));
}
.lf-cab {
  display: flex; align-items: center; gap: 10px; padding: 11px 16px; cursor: pointer;
  background: color-mix(in srgb, var(--cor-etapa, var(--acento)) var(--tom-etapa-cab), var(--superficie));
  border-bottom: 1px solid color-mix(in srgb, var(--cor-etapa, var(--linha)) 22%, transparent);
}
.lf-cab:hover { filter: brightness(.98); }
.lf-seta { display: grid; place-items: center; color: var(--tinta-3); transition: transform var(--transicao); }
.lf-seta.fechada { transform: rotate(-90deg); }
.lf-nome { font-size: 14px; font-weight: 800; letter-spacing: -.01em; }
.lf-qtd {
  min-width: 22px; height: 22px; padding: 0 7px; border-radius: 11px; display: grid; place-items: center;
  background: color-mix(in srgb, var(--cor-etapa) 32%, var(--superficie));
  color: var(--tinta-2); font-size: 12px; font-weight: 700;
}
.lf-evento { margin-left: auto; font-size: 11.5px; color: var(--tinta-3); }

.lf-titulos, .lf-linha {
  display: grid; align-items: center; gap: 12px;
  grid-template-columns: minmax(180px, 2.2fr) 110px 150px minmax(120px, 1fr) 120px;
  padding: 0 16px;
}
.lf-titulos {
  height: 34px; font-size: 10.5px; text-transform: uppercase; letter-spacing: .06em;
  font-weight: 800; color: var(--tinta-4); background: var(--superficie-2);
  border-bottom: 1px solid var(--linha);
}
.lf-linha {
  min-height: 56px; border-bottom: 1px solid var(--linha); cursor: pointer;
  transition: background var(--transicao);
}
.lf-linha:last-of-type { border-bottom: 0; }
.lf-linha:hover { background: color-mix(in srgb, var(--cor-etapa) 8%, var(--superficie)); }
.lf-linha:focus-visible { outline: 2px solid var(--acento); outline-offset: -2px; }

.lf-quem { display: flex; align-items: center; gap: 10px; min-width: 0; }
.lf-bolha {
  width: 30px; height: 30px; flex: none; border-radius: 50%; display: grid; place-items: center;
  background: color-mix(in srgb, var(--cor-etapa) 26%, var(--superficie-2));
  color: var(--tinta-2); font-size: 12px; font-weight: 800;
}
.lf-lead { font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lf-tel { font-size: 11.5px; color: var(--tinta-3); white-space: nowrap; }
.lf-quando { font-size: 12.5px; color: var(--tinta-3); white-space: nowrap; }
.lf-sinais { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; }

.lf-mais {
  width: 100%; padding: 11px; border: 0; border-top: 1px solid var(--linha);
  background: var(--superficie-2); color: var(--tinta-3);
  font-size: 12.5px; font-weight: 600; font-family: inherit;
}
.lf-mais:hover { color: var(--acento-texto); background: var(--acento-suave); }
.lf-vazia { padding: 22px 16px; text-align: center; color: var(--tinta-4); font-size: 13px; }

@media (max-width: 900px) {
  .lf-titulos { display: none; }
  .lf-linha { grid-template-columns: 1fr auto; gap: 8px; padding: 12px 14px; }
  .lf-linha > div:nth-child(3) { grid-column: 1 / -1; }
  .lf-sinais { grid-column: 1; }
}

/* Nota de rodapé que ocupa a largura toda: é explicação de regra, não um
   comentário solto. Com 70ch ela parecia opcional. */
/* Nota de rodapé de tela: explica um porquê que não muda nunca.
   Compacta e discreta de propósito — quem já leu uma vez não precisa reler, e
   um bloco grande ali embaixo competia com o que a tela tem de acionável.
   Sem sombra e sem caixa branca: o fundo da página já separa. */
.nota-larga {
  display: flex; gap: 11px; align-items: flex-start; width: 100%;
  margin-top: 18px; padding: 13px 15px;
  border-radius: var(--raio-sm); border: 1px solid var(--linha);
  background: var(--superficie-2);
}
.nota-larga-ic {
  flex: none; width: 26px; height: 26px; border-radius: 8px; display: grid; place-items: center;
  background: var(--superficie); color: var(--tinta-3);
}
.nota-larga-ic svg { width: 14px; height: 14px; }
.nota-larga b { display: block; font-size: 12.5px; font-weight: 700; letter-spacing: 0; margin-bottom: 4px; color: var(--tinta-2); }
.nota-larga p { margin: 0 0 6px; font-size: 12px; line-height: 1.55; color: var(--tinta-3); max-width: 100ch; }
.nota-larga p:last-child { margin-bottom: 0; }
.nota-larga p b { display: inline; font-size: inherit; color: var(--tinta-2); }

/* Faixa de chegada: aparece uma única vez, logo depois de cadastrar o cliente.
   Verde porque é confirmação de algo que deu certo, não alarme. */
.boas-vindas {
  display: flex; gap: 14px; align-items: flex-start;
  margin-bottom: 16px; padding: 16px 18px;
  border-radius: var(--raio); border: 1px solid color-mix(in srgb, var(--ok) 32%, var(--linha));
  background: color-mix(in srgb, var(--ok) 7%, var(--superficie));
  animation: surgir .2s var(--mola);
}
.bv-ic {
  flex: none; width: 38px; height: 38px; border-radius: 11px; display: grid; place-items: center;
  background: var(--ok-suave); color: var(--ok);
}
.boas-vindas b { display: block; font-size: 15px; font-weight: 800; letter-spacing: -.01em; color: var(--tinta); }
.boas-vindas p { margin: 5px 0 0; font-size: 13.5px; line-height: 1.6; color: var(--tinta-2); max-width: 92ch; }
.boas-vindas p b { display: inline; font-size: inherit; }

/* =============================================================================
   Ajuda da tela — o botão do cantinho e o painel que ele abre
   ============================================================================= */
/* Discreto de propósito: ele fica em toda tela o tempo todo, então não pode
   competir com o conteúdo. Some no fundo até a pessoa procurar por ele.
   O rótulo vem pela dica flutuante — o botão não muda de tamanho no hover,
   que era o que fazia o canto da tela "pular". */
.ajuda-fab {
  position: fixed; right: 22px; bottom: 22px; z-index: 140;
  width: 38px; height: 38px; padding: 0; border-radius: 50%;
  display: grid; place-items: center;
  border: 1px solid var(--linha); background: var(--superficie); color: var(--tinta-3);
  /* a sombra é quem dá presença: sem ela o botão some no fundo da página,
     porque a cor é de propósito apagada */
  box-shadow: 0 2px 5px rgba(20, 22, 60, .10), 0 8px 20px -6px rgba(20, 22, 60, .22);
  opacity: .88;
  transition: opacity var(--transicao), color var(--transicao), border-color var(--transicao),
              background var(--transicao), box-shadow var(--transicao), transform var(--transicao);
}
.ajuda-fab .ic { flex: none; margin-left: 1px; }   /* o triângulo pesa à esquerda */
.ajuda-fab:hover {
  opacity: 1; color: var(--acento); border-color: var(--acento-linha); background: var(--acento-suave);
  transform: translateY(-1px);
  box-shadow: 0 3px 8px rgba(20, 22, 60, .12), 0 14px 28px -8px color-mix(in srgb, var(--acento) 38%, transparent);
}
.ajuda-fab:focus-visible { opacity: 1; outline: 2px solid var(--acento); outline-offset: 2px; }
.ajuda-fab.ativo {
  opacity: 1; color: #fff; background: var(--acento); border-color: transparent;
  box-shadow: 0 3px 8px rgba(20, 22, 60, .18), 0 12px 26px -8px color-mix(in srgb, var(--acento) 55%, transparent);
}

/* No escuro a sombra clara some no fundo escuro: precisa ser mais densa.
   O tema aqui é sempre explícito (o atributo existe ou não existe), então NÃO
   entra prefers-color-scheme: quem está no claro com o sistema escuro receberia
   a sombra errada. */
:root[data-tema="escuro"] .ajuda-fab { box-shadow: 0 2px 6px rgba(0, 0, 0, .5), 0 10px 24px -6px rgba(0, 0, 0, .7); }


/* o .modal-largo (620px) ja existe mais abaixo; nao redeclarar aqui, senao
   sao duas regras para a mesma classe e vence a ultima por acidente */

.tut-video {
  position: relative; width: 100%; aspect-ratio: 16 / 9; margin-bottom: 16px;
  border-radius: var(--raio-sm); overflow: hidden; background: #000;
  box-shadow: inset 0 0 0 1px var(--linha);
}
.tut-video iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }

.tut-resumo { margin: 0 0 14px; font-size: 14.5px; line-height: 1.6; color: var(--tinta-2); }
.tut-itens { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.tut-itens li { display: flex; gap: 10px; align-items: flex-start; font-size: 13.5px; line-height: 1.55; color: var(--tinta-2); }
.tut-marca {
  flex: none; width: 20px; height: 20px; margin-top: 1px; border-radius: 50%;
  display: grid; place-items: center; background: var(--ok-suave); color: var(--ok);
}
.tut-sem-video {
  display: flex; align-items: center; gap: 7px; margin: 16px 0 0;
  font-size: 12.5px; color: var(--tinta-4);
}
.tut-sem-video .ic { flex: none; }

@media (max-width: 900px) {
  /* acima da barra inferior do celular */
  .ajuda-fab { right: 14px; bottom: 74px; }
}

/* =============================================================================
   Diagnóstico — escrito para o gestor, não para o operador
   ============================================================================= */
.problemas { border-color: color-mix(in srgb, var(--erro) 30%, var(--linha)); }

.problema { display: flex; gap: 14px; align-items: flex-start; padding: 16px 18px; border-top: 1px solid var(--linha); }
.problema:first-of-type { border-top: 0; }
.problema-ic {
  flex: none; width: 34px; height: 34px; border-radius: 10px; display: grid; place-items: center;
  background: var(--erro-suave); color: var(--erro);
}
.problema b { display: block; font-size: 14.5px; font-weight: 700; color: var(--tinta); }
.problema p { margin: 4px 0 0; font-size: 13.5px; line-height: 1.55; color: var(--tinta-2); max-width: 90ch; }
.problema-fazer { color: var(--tinta) !important; }
.problema-fazer b { display: inline; font-size: inherit; }
.problema-quem { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 9px; }
.problema > .btn { flex: none; align-self: center; }
.problema-acoes { flex: none; align-self: center; display: flex; flex-direction: column; gap: 6px; }
.problema-acoes .btn { white-space: nowrap; }

/* o placar: número grande e, embaixo, o que ele quer dizer */
.placar { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 1px; background: var(--linha); border-top: 1px solid var(--linha); }
.placar-item { background: var(--superficie); padding: 16px 18px; }
.placar-item b { display: block; font-size: 30px; font-weight: 800; letter-spacing: -.03em; line-height: 1.1; }
.placar-item > span { display: block; font-size: 13.5px; font-weight: 600; color: var(--tinta); margin-top: 2px; }
.placar-item p { margin: 6px 0 0; font-size: 12.5px; line-height: 1.5; color: var(--tinta-3); }
.placar-item.ok b    { color: var(--ok); }
.placar-item.aviso b { color: var(--aviso); }
.placar-item.erro b  { color: var(--erro); }

/* o material técnico existe, mas fechado: quem precisa dele sabe que precisa */
.tecnico > summary {
  cursor: pointer; font-size: 12.5px; font-weight: 600; color: var(--tinta-3);
  padding: 7px 10px; border-radius: 8px; background: var(--superficie-3); display: inline-block;
  list-style: none;
}
.tecnico > summary::-webkit-details-marker { display: none; }
.tecnico > summary::before { content: "▸ "; }
.tecnico[open] > summary::before { content: "▾ "; }
.tecnico > summary:hover { color: var(--tinta); }

/* =============================================================================
   Insights
   ============================================================================= */
.insights-tela > * + * { margin-top: 18px; }
.grade-insights { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(0, 1fr); gap: 16px; }

.frases-lista { display: flex; flex-direction: column; }
.frase { display: flex; align-items: flex-start; gap: 12px; padding: 14px 18px; border-top: 1px solid var(--linha); font-size: 14px; line-height: 1.5; }
.frase:first-child { border-top: 0; }
.frase p { margin: 0; flex: 1; color: var(--tinta); }
.frase .btn { flex: none; align-self: center; }
.frase-icone { width: 28px; height: 28px; flex: none; border-radius: 8px; display: grid; place-items: center; margin-top: -1px; }
.frase-bom .frase-icone    { background: var(--ok-suave);    color: var(--ok); }
.frase-alerta .frase-icone { background: var(--aviso-suave); color: var(--aviso); }
.frase-neutro .frase-icone { background: var(--acento-suave); color: var(--acento-texto); }

.legenda { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; color: var(--tinta-3); margin-left: auto; }
.legenda i { width: 12px; height: 12px; border-radius: 3px; display: inline-block; margin-left: 8px; }
.legenda i:first-child { margin-left: 0; }
.lg-area  { background: var(--acento-suave); box-shadow: inset 0 0 0 1px var(--acento); }
.lg-venda { background: var(--ok); border-radius: 50% !important; }
.lg-leads { background: var(--superficie-3); box-shadow: inset 0 0 0 1px var(--linha-forte); }
.lg-qual  { background: var(--acento-linha); }
.lg-vend  { background: var(--acento); }

.grafico-caixa { padding: 12px 16px 8px; }
.grafico-dias { width: 100%; height: auto; display: block; font-family: var(--sans); }
.gd-grade { stroke: var(--linha); stroke-width: 1; stroke-dasharray: 3 4; }
.gd-eixo  { fill: var(--tinta-4); font-size: 11px; }
.gd-area  { fill: var(--acento); opacity: .12; }
.gd-linha { fill: none; stroke: var(--acento); stroke-width: 2.2; stroke-linejoin: round; stroke-linecap: round; }
.gd-venda { fill: var(--ok); stroke: var(--superficie); stroke-width: 2; }

/* Faixa invisível por dia: é ela que o mouse encontra. A guia e o ponto só
   aparecem quando o cursor entra na faixa, para o gráfico ficar limpo parado. */
.gd-alvo rect { fill: transparent; cursor: help; }
.gd-guia, .gd-ponto { opacity: 0; transition: opacity .12s; pointer-events: none; }
.gd-guia { stroke: var(--acento); stroke-width: 1; stroke-dasharray: 3 3; }
.gd-ponto { fill: var(--acento); stroke: var(--superficie); stroke-width: 2; }
.gd-alvo:hover .gd-guia, .gd-alvo:hover .gd-ponto { opacity: 1; }
.gd-alvo:hover rect { fill: color-mix(in srgb, var(--acento) 7%, transparent); }

.calor { padding: 14px 18px 0; overflow-x: auto; }
.calor-cab, .calor-linha { display: grid; grid-template-columns: 34px repeat(24, minmax(12px, 1fr)); gap: 3px; align-items: center; }
.calor-cab span { font-size: 10px; color: var(--tinta-4); text-align: left; height: 14px; }
.calor-linha { margin-top: 3px; }
.calor-dia { font-size: 11px; color: var(--tinta-3); }
.calor-cel { cursor: help; display: block; aspect-ratio: 1; border-radius: 3px; background: color-mix(in srgb, var(--acento) var(--forca, 0%), var(--superficie-2)); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--linha) 60%, transparent); }

.cab-niveis { flex-wrap: wrap; gap: 10px 14px; }
.tabela-niveis .num-col { text-align: right; white-space: nowrap; }
.tabela-niveis .col-barra { width: 26%; min-width: 160px; }
.tabela-niveis .col-acoes { text-align: right; white-space: nowrap; }
.tabela-niveis tr.sem-nome .col-nome b { color: var(--tinta-3); font-style: italic; font-weight: 600; }
.nivel-nome { display: flex; align-items: center; gap: 10px; min-width: 0; }
.nivel-nome b { display: block; font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 34ch; }
.nivel-nome span { display: block; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 34ch; }
.thumb-ad { width: 36px; height: 36px; flex: none; border-radius: 7px; background: var(--superficie-3) center / cover no-repeat; box-shadow: inset 0 0 0 1px var(--linha); }
.b3 { cursor: help; position: relative; height: 12px; width: var(--w, 0%); min-width: 4px; border-radius: 3px; overflow: hidden; background: var(--superficie-3); box-shadow: inset 0 0 0 1px var(--linha-forte); }
.b3 i { position: absolute; left: 0; top: 0; bottom: 0; display: block; }
.b3-leads { width: 100%; }
.b3-qual { background: var(--acento-linha); }
.b3-vend { background: var(--acento); }
.aviso-nomes { display: flex; gap: 12px; align-items: flex-start; padding: 14px 18px; border-top: 1px solid var(--linha); background: var(--superficie-2); font-size: 13px; line-height: 1.5; color: var(--tinta-2); }
.aviso-nomes .ic { color: var(--tinta-4); flex: none; margin-top: 2px; }
.aviso-nomes b { color: var(--tinta); }
.aviso-nomes .btn { flex: none; align-self: center; }
.aviso-nomes > svg { width: 18px; height: 18px; color: var(--tinta-4); flex: none; margin-top: 2px; }

/* Aviso de conta de anuncios pendente: as contas em fila e os passos. */
.aviso-contas { margin: 8px 0 0; display: flex; flex-wrap: wrap; gap: 6px; align-items: baseline; }
.aviso-contas .mono { background: var(--superficie); border: 1px solid var(--linha); border-radius: 6px; padding: 1px 6px; }
.aviso-passos { margin: 8px 0 0; padding-left: 18px; display: grid; gap: 4px; }
.aviso-passos li { color: var(--tinta-2); }

/* =============================================================================
   Conexões
   ============================================================================= */
/* O card vive fechado. A lista inteira cabe na tela de uma vez e o gestor abre
   só o número sobre o qual tem dúvida. Número com problema já nasce aberto — o
   PHP liga o `aberto` nesse caso, e a linha de cima ainda diz o que falta. */
.conexao { display: block; border-bottom: 1px solid var(--linha); }
.conexao:last-child { border-bottom: 0; }

.cx-topo {
  width: 100%; display: grid; align-items: center; gap: 8px 14px;
  grid-template-columns: 44px minmax(140px, 1.6fr) auto 1fr auto auto 24px;
  padding: 13px 18px; border: 0; background: transparent; text-align: left;
  font-family: inherit; color: inherit; cursor: pointer;
  transition: background var(--transicao);
}
.cx-topo:hover { background: var(--superficie-2); }
.cx-topo:focus-visible { outline: 2px solid var(--acento); outline-offset: -2px; }
.cx-topo .conexao-icone { width: 44px; height: 44px; border-radius: 12px; }

.cx-quem { min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.cx-quem .conexao-nome { font-size: 15px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cx-num { font-size: 12px; color: var(--tinta-3); white-space: nowrap; }

.cx-resumo {
  display: inline-flex; align-items: center; gap: 6px; min-width: 0;
  font-size: 12.5px; font-weight: 600; color: var(--erro);
}
.cx-resumo .ic { flex: none; }

.cx-conta { font-size: 12.5px; color: var(--tinta-3); white-space: nowrap; text-align: right; }
.cx-conta b { color: var(--tinta); font-size: 18px; font-weight: 800; letter-spacing: -.02em; margin-right: 3px; }
.cx-conta .mudo { margin-left: 8px; }
.cx-quando { white-space: nowrap; }

.cx-seta { display: grid; place-items: center; color: var(--tinta-4); transition: transform var(--transicao); }
.conexao.aberta .cx-seta { transform: rotate(180deg); }

.cx-corpo { display: none; padding: 0 18px 18px 76px; }
.conexao.aberta .cx-corpo { display: block; animation: surgir .16s var(--mola); }
.cx-corpo .conexao-meta { margin-top: 0; }

.cx-nome-edita { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }

@media (max-width: 900px) {
  .cx-topo { grid-template-columns: 44px 1fr 24px; }
  .cx-topo > .selo, .cx-resumo, .cx-conta, .cx-quando { grid-column: 2 / -1; justify-self: start; text-align: left; }
  .cx-corpo { padding-left: 18px; }
}
.conexao-morta { background: color-mix(in srgb, var(--superficie-2) 55%, transparent); }
.conexao-icone { width: 48px; height: 48px; border-radius: 13px; background: var(--ok-suave); color: var(--ok); display: grid; place-items: center; }
.conexao-icone.apagado { background: var(--superficie-3); color: var(--tinta-4); box-shadow: inset 0 0 0 1px var(--linha); }
.conexao-nome { font-weight: 700; font-size: 15.5px; }
.conexao-meta { display: flex; flex-wrap: wrap; gap: 4px 14px; margin-top: 5px; font-size: 12.5px; color: var(--tinta-3); }
.conexao-acoes { display: flex; gap: 8px; align-items: center; margin-top: 13px; flex-wrap: wrap; }
.conexao-numeros { text-align: right; font-size: 13px; color: var(--tinta-3); white-space: nowrap; }
.conexao-numeros b { color: var(--tinta); font-size: 21px; font-weight: 800; letter-spacing: -.02em; }

.estado-explica { margin-top: 12px; padding: 12px 14px; border-radius: var(--raio-sm); border-left: 3px solid var(--tinta-4); background: var(--superficie-2); font-size: 13px; line-height: 1.5; }
.estado-explica b { display: block; color: var(--tinta); margin-bottom: 2px; }
.estado-explica p { margin: 0; color: var(--tinta-2); max-width: 78ch; }
.estado-explica .btn { margin-top: 10px; }
.estado-ok    { background: var(--ok-suave);    border-left-color: var(--ok); }
.estado-aviso { background: var(--aviso-suave); border-left-color: var(--aviso); }
.estado-erro  { background: var(--erro-suave);  border-left-color: var(--erro); }

.checklist { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 10px; margin-top: 14px; }
.check { display: flex; align-items: center; gap: 9px; font-size: 13px; padding: 11px 13px; border-radius: var(--raio-sm); background: var(--superficie-2); box-shadow: inset 0 0 0 1px var(--linha); flex-wrap: wrap; line-height: 1.35; }
.check .ic { flex: none; }
.check.ok { background: var(--acento-suave); color: var(--acento-texto); box-shadow: inset 0 0 0 1px var(--acento-linha); }
.check.falta { color: var(--tinta-3); }
.check .mono { flex-basis: 100%; padding-left: 26px; opacity: .8; font-size: 11px; word-break: break-all; }

/* Conexao saudavel: uma linha calma no lugar de quatro selos repetindo o mesmo. */
.check-resumo { display: flex; gap: 10px; align-items: flex-start; margin-top: 14px; padding: 12px 14px;
  border-radius: var(--raio-sm); background: var(--acento-suave); color: var(--acento-texto);
  box-shadow: inset 0 0 0 1px var(--acento-linha); font-size: 13px; line-height: 1.5; }
.check-resumo > svg { margin-top: 2px; }
.check-resumo b { display: block; }
.check-dataset { display: block; margin-top: 4px; opacity: .75; font-size: 11px; word-break: break-all; }

/* Diagnostico da plataforma: presente, mas visivelmente fora do caminho do gestor. */
.acoes-plataforma { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--linha); }
.check-sub { flex-basis: 100%; padding-left: 26px; font-size: 11.5px; color: var(--tinta-4); }

.painel-escuro { background: #0f1120; color: #e6e8f5; border-radius: var(--raio-sm); padding: 14px 16px; overflow-x: auto; }
.painel-escuro h4 { margin: 0 0 8px; font-size: 11px; text-transform: uppercase; letter-spacing: .08em; color: #8d92b8; font-weight: 800; }
.painel-escuro .resp { font-family: var(--mono); font-size: 12px; white-space: pre-wrap; word-break: break-word; line-height: 1.5; }

/* dois números na mesma conta do WhatsApp: a Meta não separa as conversões */
.conta-junta {
  display: flex; align-items: flex-start; gap: 8px;
  margin-top: 10px; padding: 9px 12px; border-radius: var(--raio-xs);
  background: var(--info-suave); color: var(--tinta-2);
  font-size: 12.5px; line-height: 1.45; cursor: help;
}
.conta-junta .ic { color: var(--info); flex: none; margin-top: 1px; }
.conta-junta b { color: var(--tinta); }

/* =============================================================================
   Clientes, equipe, perfil, plano, admin
   ============================================================================= */
.clientes-topo { display: grid; grid-template-columns: 1fr 320px; gap: 16px; align-items: start; }
.uso-plano { display: flex; flex-direction: column; gap: 14px; padding: 18px; }
.uso-linha { display: flex; flex-direction: column; gap: 6px; }
.uso-linha .barra { height: 8px; border-radius: 999px; background: var(--superficie-3); overflow: hidden; }
.uso-linha .barra i { display: block; height: 100%; background: var(--acento); border-radius: 999px; transition: width .4s var(--mola); }
.uso-linha .barra i.cheio { background: var(--erro); }
.uso-linha .r { display: flex; justify-content: space-between; font-size: 12.5px; color: var(--tinta-3); }
.uso-linha .r b { color: var(--tinta); }

.fato { display: flex; flex-direction: column; gap: 2px; padding: 11px 0; border-bottom: 1px solid var(--linha); }
.fato:last-child { border-bottom: 0; }
.fato span { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; color: var(--tinta-4); font-weight: 700; }
.fato b { font-size: 14px; font-weight: 600; }

.grade-perfil  { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 16px; align-items: start; }
.grade-config  { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr); gap: 16px; align-items: start; }
.grade-admin   { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 12px; }
.grade-detalhe { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }

.controles-agencia { display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr)); gap: 12px; padding: 16px 18px; background: var(--superficie-2); border-top: 1px solid var(--linha); }
.interruptor { display: inline-flex; align-items: center; gap: 9px; cursor: pointer; font-size: 13.5px; }
.interruptor input { position: absolute; opacity: 0; width: 0; height: 0; }
.interruptor .trilha-sw { width: 38px; height: 22px; border-radius: 999px; background: var(--linha-forte); position: relative; transition: background var(--transicao); flex: none; }
.interruptor .trilha-sw::after { content: ""; position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0, 0, 0, .3); transition: transform var(--transicao); }
.interruptor input:checked + .trilha-sw { background: var(--acento); }
.interruptor input:checked + .trilha-sw::after { transform: translateX(16px); }
.interruptor input:focus-visible + .trilha-sw { box-shadow: var(--anel); }

.grafico-barras { display: flex; flex-direction: column; gap: 11px; padding: 18px; }
.gb-linha { display: grid; grid-template-columns: 140px 1fr auto; gap: 12px; align-items: center; font-size: 13px; }
.gb-rotulo { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--tinta-2); }
.gb-trilho { height: 10px; border-radius: 999px; background: var(--superficie-3); overflow: hidden; display: flex; }
.gb-anuncio { background: var(--acento); }
.gb-total { background: var(--acento-linha); }
.gb-valor { font-variant-numeric: tabular-nums; color: var(--tinta-2); white-space: nowrap; }

/* =============================================================================
   Modal
   ============================================================================= */
.modal-fundo {
  position: fixed; inset: 0; z-index: 120; display: flex;
  background: rgba(10, 12, 30, .5); backdrop-filter: blur(3px);
  align-items: center; justify-content: center; padding: 16px;
  animation: aparece .2s;
}
.modal { width: 100%; max-width: 460px; background: var(--superficie); border: 1px solid var(--linha); border-radius: 18px; box-shadow: var(--sombra-3); animation: surgir .22s var(--mola); overflow: hidden; max-height: calc(100dvh - 32px); display: flex; flex-direction: column; }
.modal-largo { max-width: 620px; }
.modal-cab { display: flex; align-items: flex-start; gap: 12px; padding: 20px 22px 0; }
.modal-cab h3 { margin: 0; font-size: 17px; font-weight: 700; flex: 1; }
.modal-icone { width: 40px; height: 40px; flex: none; border-radius: 11px; background: var(--acento-suave); color: var(--acento-texto); display: grid; place-items: center; }
.modal-icone.perigo { background: var(--erro-suave); color: var(--erro); }
.modal-sub { font-size: 13.5px; color: var(--tinta-2); line-height: 1.45; margin-top: 3px; }
.modal-corpo { padding: 18px 22px; display: flex; flex-direction: column; gap: 14px; overflow-y: auto; }
.modal-rodape { padding: 14px 22px; background: var(--superficie-2); border-top: 1px solid var(--linha); display: flex; gap: 8px; justify-content: flex-end; }

.explica-evento { margin-top: 9px; padding: 11px 13px; border-radius: var(--raio-xs); background: var(--acento-suave); border-left: 3px solid var(--acento); font-size: 13px; line-height: 1.5; }
.explica-evento b { color: var(--acento-texto); font-family: var(--mono); font-size: 12.5px; }
.explica-evento p { margin: 5px 0 0; color: var(--tinta-2); }
.explica-evento p.alerta { color: var(--aviso); font-weight: 600; }
.explica-evento.aviso { background: var(--superficie-2); border-left-color: var(--tinta-4); }
.explica-evento.aviso p { color: var(--tinta-3); }

.exemplos { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 9px; }
.exemplos-rotulo { font-size: 11.5px; color: var(--tinta-4); width: 100%; }
.exemplo-chip { border: 1px dashed var(--linha-forte); background: transparent; color: var(--tinta-2); font-size: 12px; padding: 5px 10px; border-radius: 999px; text-align: left; transition: border-color var(--transicao), background var(--transicao), color var(--transicao); }
.exemplo-chip:hover { border-style: solid; border-color: var(--acento); background: var(--acento-suave); color: var(--acento-texto); }

.cores { display: flex; gap: 8px; flex-wrap: wrap; }
.cores button { width: 30px; height: 30px; border-radius: 50%; border: 3px solid transparent; transition: transform .1s; }
.cores button:hover { transform: scale(1.1); }
.cores button.atual { border-color: var(--tinta); }

/* =============================================================================
   Paleta de comandos (⌘K)
   ============================================================================= */
.paleta-fundo {
  position: fixed; inset: 0; z-index: 130; display: none;
  background: rgba(10, 12, 30, .5); backdrop-filter: blur(4px);
  align-items: flex-start; justify-content: center; padding: 96px 16px 16px;
}
.paleta-fundo.aberta { display: flex; animation: aparece .15s; }
.paleta { width: 100%; max-width: 600px; background: var(--superficie); border: 1px solid var(--linha); border-radius: 18px; box-shadow: var(--sombra-3); overflow: hidden; animation: surgir .18s var(--mola); }
.paleta-busca { display: flex; align-items: center; gap: 12px; padding: 14px 18px; border-bottom: 1px solid var(--linha); color: var(--tinta-4); }
.paleta-busca input { flex: 1; min-width: 0; border: 0; background: transparent; outline: 0; font-size: 16px; color: var(--tinta); }
.paleta-lista { max-height: 400px; overflow-y: auto; padding: 8px; }
.paleta-grupo { padding: 8px 10px 4px; font-size: 10.5px; font-weight: 800; letter-spacing: .08em; color: var(--tinta-4); }
.paleta-item {
  display: flex; align-items: center; gap: 12px; width: 100%; height: 44px; padding: 0 10px;
  border: 0; border-radius: var(--raio-sm); background: transparent; text-align: left; color: var(--tinta);
}
.paleta-item:hover, .paleta-item.marcado { background: var(--superficie-2); }
.paleta-item .marcador { width: 30px; height: 30px; flex: none; border-radius: var(--raio-xs); background: var(--superficie-2); color: var(--tinta-2); display: grid; place-items: center; }
.paleta-item.marcado .marcador { background: var(--acento-suave); color: var(--acento-texto); }
.paleta-item .txt { flex: 1; min-width: 0; line-height: 1.2; }
.paleta-item .txt b { display: block; font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.paleta-item .txt span { display: block; font-size: 12px; color: var(--tinta-4); }
.paleta-item .seta { color: var(--tinta-4); }
.paleta-vazio { padding: 32px; text-align: center; color: var(--tinta-4); font-size: 13.5px; }
.paleta-vazio .ic { margin-bottom: 8px; }
.paleta-pe { display: flex; gap: 14px; padding: 10px 18px; border-top: 1px solid var(--linha); background: var(--superficie-2); font-size: 11.5px; color: var(--tinta-4); }
.paleta-pe b { color: var(--tinta-2); }
.paleta-pe .dica-final { margin-left: auto; }

/* =============================================================================
   Tour guiado
   ============================================================================= */
.tour-fundo { position: fixed; inset: 0; z-index: 300; display: none; }
.tour-fundo.aberta { display: block; animation: aparece .2s; }
.tour-recorte { position: fixed; border-radius: var(--raio); box-shadow: 0 0 0 9999px rgba(10, 12, 30, .58), 0 0 0 3px var(--acento); transition: all .3s var(--mola); pointer-events: none; }
.tour-caixa { position: fixed; width: 340px; max-width: calc(100vw - 24px); background: var(--superficie); border: 1px solid var(--linha); border-radius: 16px; padding: 18px; box-shadow: var(--sombra-3); transition: all .3s var(--mola); }
.tour-cab { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
.tour-cab span { font-size: 10.5px; font-weight: 800; letter-spacing: .08em; color: var(--acento-texto); }
.tour-caixa b { font-size: 16px; display: block; margin-bottom: 6px; }
.tour-caixa p { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--tinta-2); }
.tour-pe { display: flex; gap: 6px; margin-top: 16px; align-items: center; }
.tour-pontos { display: flex; gap: 5px; align-items: center; }
.tour-pontos i { width: 6px; height: 6px; border-radius: 3px; background: var(--linha-forte); transition: all .2s; display: block; }
.tour-pontos i.atual { width: 18px; background: var(--acento); }
.tour-pe .espaco { flex: 1; }

/* =============================================================================
   Tooltip e toasts
   ============================================================================= */
.dica-flutuante {
  position: fixed; z-index: 200; pointer-events: none; max-width: 260px;
  padding: 7px 10px; border-radius: var(--raio-xs);
  background: #14162b; color: #fff; font-size: 12.5px; line-height: 1.35;
  box-shadow: 0 8px 24px -8px rgba(0, 0, 0, .4); animation: aparece .12s;
}
:root[data-tema="escuro"] .dica-flutuante { background: #2b2f4d; }

/* "?" que explica um termo ao lado do rótulo. Existe porque algumas palavras
   desta interface são do fornecedor, não do negócio — "token" é da OpenAI, e
   quem lê é dono de agência. Tem tabindex para a dica também abrir no teclado:
   a JS de dicas escuta focusin. */
.dica-ico {
  display: inline-grid; place-items: center; vertical-align: 1px;
  width: 15px; height: 15px; margin-left: 3px; flex: none;
  border-radius: 50%; border: 1px solid currentColor;
  font-size: 10px; font-weight: 700; line-height: 1;
  opacity: .5; cursor: help; user-select: none;
  transition: opacity var(--transicao);
}
.dica-ico:hover, .dica-ico:focus-visible { opacity: 1; }
.dica-ico:focus-visible { outline: none; box-shadow: var(--anel); }
label .dica-ico { color: var(--tinta-3); }

/* bottom sobe para o aviso não sentar em cima do botão de ajuda do canto */
.toast-area { position: fixed; right: 24px; bottom: 74px; z-index: 150; display: flex; flex-direction: column; gap: 10px; width: 360px; max-width: calc(100vw - 32px); pointer-events: none; }
.toast {
  pointer-events: auto; display: flex; gap: 12px; align-items: flex-start;
  padding: 12px 14px; border-radius: 12px;
  background: var(--superficie); border: 1px solid var(--linha); border-left: 3px solid var(--tinta-4);
  box-shadow: var(--sombra-3); animation: toastIn .25s var(--mola);
  font-size: 13.5px; line-height: 1.35;
}
.toast .marcador { width: 28px; height: 28px; flex: none; border-radius: var(--raio-xs); display: grid; place-items: center; background: var(--superficie-2); color: var(--tinta-2); }
.toast .txt { flex: 1; min-width: 0; }
.toast .txt b { display: block; }
.toast .txt span { color: var(--tinta-2); }
.toast .fechar { width: 26px; height: 26px; flex: none; border: 0; border-radius: 6px; background: transparent; color: var(--tinta-4); display: grid; place-items: center; }
.toast .fechar:hover { background: var(--superficie-2); color: var(--tinta); }
.toast.ok    { border-left-color: var(--ok); }
.toast.ok .marcador    { background: var(--ok-suave); color: var(--ok); }
.toast.erro  { border-left-color: var(--erro); }
.toast.erro .marcador  { background: var(--erro-suave); color: var(--erro); }
.toast.aviso { border-left-color: var(--aviso); }
.toast.aviso .marcador { background: var(--aviso-suave); color: var(--aviso); }
.toast.info  { border-left-color: var(--acento); }
.toast.info .marcador  { background: var(--acento-suave); color: var(--acento-texto); }

/* carregando */
.girando { animation: girar .8s linear infinite; }
.esqueleto {
  background: linear-gradient(90deg, var(--superficie-2) 25%, var(--superficie-3) 37%, var(--superficie-2) 63%);
  background-size: 400% 100%; animation: brilho 1.4s ease infinite; border-radius: var(--raio-xs);
}

/* =============================================================================
   Responsivo
   ============================================================================= */
@media (max-width: 1200px) {
  .grade-stats-6, .grade-stats-5 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}

@media (max-width: 1120px) {
  .grade-inicio, .grade-hero, .grade-insights, .grade-perfil, .grade-config { grid-template-columns: 1fr; }
  .clientes-topo { grid-template-columns: 1fr; }
  .conteudo { padding: 20px; }
  .topbar { padding: 0 20px; }
  .migalha { display: none; }
  .busca-topo { width: 180px; }
}

@media (max-width: 900px) {
  .painel-fundo { padding: 0; }
  .painel { border-radius: 0; }
  .painel-grade { grid-template-columns: 1fr; }
  .painel-lado, .zap { display: none; }
  .painel-lado.aba-ativa, .zap.aba-ativa { display: flex; }
  .painel-lado { border-right: 0; }
  .zap-voltar, .so-celular { display: inline-flex; }
  .zap-conta { display: none; }
  .zap-corpo { padding: 12px 12px 16px; }
  .zap-balao { max-width: 82%; }
  .kanban { grid-template-columns: repeat(5, 260px); }
}

@media (max-width: 760px) {
  .btn-xl { width: 100%; }
  .ch-acao { width: 100%; }
  .conectar-hero h3 { font-size: 20px; }
  .sidebar { position: fixed; transform: translateX(-100%); width: 280px; }
  .sidebar.aberta { transform: none; }
  .casca.recolhida .sidebar { width: 280px; }
  .casca.recolhida .so-aberta { display: flex !important; }
  .menu-botao { display: grid; }
  .principal { padding-bottom: 72px; }
  .nav-celular { display: grid; }
  .conteudo { padding: 16px; }
  .topbar { padding: 0 16px; gap: 8px; }
  .topbar h1 { font-size: 22px; }
  .busca-topo, .contexto-cliente, .icone-botao.so-desktop { display: none; }
  .grade-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .grade-stats-6, .grade-stats-5 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .hero { padding: 20px; }
  .hero h2 { font-size: 27px; }
  .kanban { grid-template-columns: repeat(5, 84vw); gap: 10px; }
  .fr-trilhos { grid-auto-flow: row; }
  .modal-fundo { align-items: flex-end; padding: 0; }
  .modal { max-width: none; border-radius: 18px 18px 0 0; max-height: 92dvh; }
  .paleta-fundo { padding: 16px; align-items: flex-start; }
  .toast-area { right: 12px; left: 12px; bottom: 124px; width: auto; }   /* acima do botão de ajuda e da barra do celular */
  .lado-fatos { grid-template-columns: 1fr; }
  .conexao { grid-template-columns: 1fr; }
  .conexao-numeros { text-align: left; }
  .periodo-painel { grid-template-columns: 1fr; }
  .periodo-atalhos { border-right: 0; border-bottom: 1px solid var(--linha); }
  .periodo-datas { display: none; }
  .gb-linha { grid-template-columns: 100px 1fr auto; }
}

/* =============================================================================
   Assinaturas — tela da agência (.as-) e painel da plataforma (.aa-)
   ============================================================================= */

/* Cores de série dos gráficos. Validadas com o validador de paleta (daltonismo,
   contraste e separação) sobre as duas superfícies: acento × laranja passam no
   tema claro e no escuro. Não usar --erro/--ok como série: verde e vermelho são
   reservados para situação. */
:root { --serie-1: var(--acento); --serie-2: #eb6834; }
:root[data-tema="escuro"] { --serie-2: #d95926; }

.assinatura-tela, .aa-tela { display: flex; flex-direction: column; gap: 18px; }

/* ---- avisos de configuração ---- */
.as-aviso-config {
  display: flex; gap: 14px; align-items: flex-start; padding: 16px 18px;
  border-radius: var(--raio); background: var(--info-suave); border: 1px solid color-mix(in srgb, var(--info) 25%, transparent);
}
.as-aviso-config b { display: block; font-size: 14.5px; }
.as-aviso-config p { margin: 4px 0 0; font-size: 13.5px; color: var(--tinta-2); line-height: 1.5; }
.as-aviso-icone { color: var(--info); display: flex; padding-top: 1px; }
.as-sandbox {
  display: inline-flex; align-self: flex-start; align-items: center; gap: 7px;
  font-size: 12.5px; font-weight: 600; color: var(--aviso);
  background: var(--aviso-suave); border-radius: 999px; padding: 6px 12px;
}

/* ---- a situação ---- */
.as-situacao {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
  padding: 18px 20px; border-radius: var(--raio);
  background: var(--superficie); border: 1px solid var(--linha); border-left: 4px solid var(--tinta-4);
  box-shadow: var(--sombra);
}
.as-situacao.tom-erro  { background: var(--erro-suave);  border-color: color-mix(in srgb, var(--erro) 30%, transparent);  border-left-color: var(--erro); }
.as-situacao.tom-aviso { background: var(--aviso-suave); border-color: color-mix(in srgb, var(--aviso) 30%, transparent); border-left-color: var(--aviso); }
.as-situacao-icone { width: 42px; height: 42px; flex: none; border-radius: 12px; display: grid; place-items: center; background: var(--superficie-2); color: var(--tinta-3); }
.tom-erro .as-situacao-icone  { background: var(--erro);  color: #fff; }
.tom-aviso .as-situacao-icone { background: var(--aviso); color: #fff; }
.as-situacao-txt { flex: 1; min-width: 240px; }
.as-situacao-txt b { display: block; font-size: 16px; font-weight: 800; letter-spacing: -.01em; }
.tom-erro .as-situacao-txt b  { color: var(--erro); }
.tom-aviso .as-situacao-txt b { color: var(--aviso); }
.as-situacao-txt p { margin: 4px 0 0; font-size: 14px; line-height: 1.5; color: var(--tinta-2); max-width: 72ch; }
.as-situacao-acao { flex: none; }

/* ---- assinatura viva ---- */
.as-grade { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(0, 1fr); gap: 18px; align-items: start; }
.as-coluna { display: flex; flex-direction: column; gap: 18px; min-width: 0; }
.as-plano .cartao-cab .selo { margin-left: auto; }

.as-plano-topo { display: flex; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
.as-plano-nome { font-size: 13px; font-weight: 700; color: var(--acento-texto); text-transform: uppercase; letter-spacing: .06em; }
.as-plano-preco { margin-top: 4px; display: flex; align-items: baseline; gap: 4px; }
.as-plano-preco b { font-size: 34px; font-weight: 800; letter-spacing: -.03em; line-height: 1; }
.as-plano-preco span { font-size: 14px; color: var(--tinta-3); }

.as-fatos { display: grid; grid-template-columns: auto auto; gap: 6px 22px; margin: 0; align-content: start; }
.as-fatos div { display: contents; }
.as-fatos dt { font-size: 12.5px; color: var(--tinta-3); }
.as-fatos dd { margin: 0; font-size: 13.5px; font-weight: 700; font-variant-numeric: tabular-nums; text-align: right; }

.as-uso { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 22px; padding-top: 18px; border-top: 1px solid var(--linha); }
.as-medidor-cab { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; font-size: 13px; }
.as-medidor-cab span { display: inline-flex; align-items: center; gap: 6px; color: var(--tinta-2); }
.as-medidor-cab b { font-size: 14px; }
.as-medidor-trilho { margin-top: 8px; height: 8px; border-radius: 999px; background: var(--acento-suave); overflow: hidden; }
.as-medidor-trilho i { display: block; height: 100%; border-radius: 999px; background: var(--acento); }
.as-medidor.quase .as-medidor-trilho { background: var(--aviso-suave); }
.as-medidor.quase .as-medidor-trilho i { background: var(--aviso); }
.as-medidor.cheio .as-medidor-trilho { background: var(--erro-suave); }
.as-medidor.cheio .as-medidor-trilho i { background: var(--erro); }

.as-rodape {
  display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap;
  padding: 12px 18px; border-top: 1px solid var(--linha); background: var(--superficie-2);
  border-radius: 0 0 var(--raio) var(--raio);
}

.as-cartao { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.as-cartao-linha { display: flex; align-items: center; gap: 12px; min-width: 0; }
.as-cartao-linha b { display: block; font-size: 15px; }
.as-cartao-linha .pequeno { display: block; margin-top: 2px; }
.as-bandeira { width: 48px; height: 34px; flex: none; border-radius: 7px; display: grid; place-items: center; background: var(--superficie-3); color: var(--tinta-2); }
.as-seguro { display: flex; align-items: flex-start; gap: 6px; margin: 0; padding: 0 18px 16px; font-size: 12px; line-height: 1.5; color: var(--tinta-3); }
.as-seguro .ic { flex: none; margin-top: 2px; }

.as-dados { display: grid; grid-template-columns: 1fr 1fr; gap: 14px 18px; margin: 0; padding: 16px 18px 18px; }
.as-dados dt { font-size: 12px; color: var(--tinta-3); }
.as-dados dd { margin: 3px 0 0; font-size: 14px; font-weight: 600; overflow-wrap: anywhere; }

/* ---- escolher plano ---- */
.as-escolha .cartao-cab { flex-wrap: wrap; }
.as-escolha .cartao-cab .mudo { margin-left: auto; }
.as-planos { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 12px; padding: 18px; }
.as-plano-op {
  display: flex; flex-direction: column; align-items: flex-start; gap: 8px; text-align: left;
  padding: 18px; border-radius: var(--raio-sm); border: 1.5px solid var(--linha);
  background: var(--superficie); color: var(--tinta); font: inherit; cursor: pointer;
  transition: border-color var(--transicao), box-shadow var(--transicao), transform var(--transicao);
}
.as-plano-op:hover:not(:disabled) { border-color: var(--acento-linha); transform: translateY(-1px); }
.as-plano-op:focus-visible { outline: none; box-shadow: var(--anel); }
.as-plano-op.marcado { border-color: var(--acento); background: var(--acento-suave); box-shadow: var(--anel); }
.as-plano-op:disabled { opacity: .55; cursor: not-allowed; }
.as-op-nome { font-size: 15px; font-weight: 800; }
.as-op-preco { font-size: 13px; color: var(--tinta-3); }
.as-op-preco b { font-size: 24px; font-weight: 800; letter-spacing: -.02em; color: var(--tinta); }
.as-op-lista { list-style: none; margin: 4px 0 0; padding: 0; display: flex; flex-direction: column; gap: 6px; font-size: 13px; color: var(--tinta-2); }
.as-op-lista li { display: flex; align-items: flex-start; gap: 6px; line-height: 1.4; }
.as-op-lista .ic { flex: none; color: var(--acento); margin-top: 2px; }
.as-op-nota { font-size: 12px; color: var(--erro); font-weight: 600; }

/* ---- checkout ---- */
/* Fora do `.cartao` agora (o overflow dele matava o sticky do resumo), então
   o checkout desenha a própria superfície. */
.as-checkout {
  display: grid; grid-template-columns: minmax(0, 1.6fr) minmax(280px, 1fr); gap: 20px;
  margin-top: 16px; padding: 20px; scroll-margin-top: 90px;
  background: var(--superficie); border: 1px solid var(--linha);
  border-radius: var(--raio); box-shadow: var(--sombra);
}
.as-passos { min-width: 0; display: flex; flex-direction: column; gap: 18px; }

/* ---- trilha das etapas ----------------------------------------------------
   Três paradas curtas em vez de treze campos de uma vez. O número vira ✓ no
   que já passou, e só o que já passou volta a ser clicável: ir adiante é
   sempre pelo Continuar, que é quem confere.                                */
.as-trilha {
  list-style: none; margin: 0; padding: 0 0 16px;
  display: grid; grid-auto-flow: column; grid-auto-columns: 1fr; gap: 6px;
  border-bottom: 1px solid var(--linha);
}
.as-trilha-bt {
  display: flex; align-items: center; gap: 8px; width: 100%;
  background: none; border: 0; padding: 4px 2px; font: inherit; text-align: left;
  color: var(--tinta-3); cursor: default;
}
.as-trilha li:not(.atual) .as-trilha-bt:not(:disabled) { cursor: pointer; }
.as-trilha li:not(.atual) .as-trilha-bt:not(:disabled):hover { color: var(--acento); }
.as-trilha-n {
  width: 26px; height: 26px; flex: none; border-radius: 50%;
  display: grid; place-items: center;
  font-size: 12.5px; font-weight: 700;
  background: var(--superficie-2); color: var(--tinta-3);
  box-shadow: inset 0 0 0 1px var(--linha);
  transition: background var(--transicao), color var(--transicao);
}
.as-trilha-rot { font-size: 13px; font-weight: 600; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.as-trilha .atual .as-trilha-bt { color: var(--tinta); }
.as-trilha .atual .as-trilha-n { background: var(--acento); color: var(--acento-tinta); box-shadow: none; }
/* Verde só aqui: etapa concluída é estado positivo, não "preste atenção". */
.as-trilha .feito .as-trilha-n { background: var(--ok-suave); color: var(--ok); box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ok) 30%, transparent); }
.as-trilha .feito .as-trilha-bt { color: var(--tinta-2); }
.as-trilha-n > span { display: grid; place-items: center; }

/* ---- etapa 3: a conferida ---- */
.as-revisao { margin: 0; display: flex; flex-direction: column; gap: 2px; }
.as-revisao > div {
  display: grid; grid-template-columns: minmax(0, 160px) minmax(0, 1fr); gap: 14px;
  padding: 11px 2px; border-bottom: 1px solid var(--linha);
}
.as-revisao > div:last-child { border-bottom: 0; }
.as-revisao dt { font-size: 12.5px; color: var(--tinta-3); display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.as-revisao dd { margin: 0; font-size: 13.5px; line-height: 1.6; }
.as-revisao .num { font-variant-numeric: tabular-nums; }

.as-navegacao { display: flex; gap: 8px; padding-top: 4px; }

@media (max-width: 860px) {
  .as-checkout { grid-template-columns: 1fr; padding: 16px; }
  /* O resumo fica DEPOIS do formulário, que é a ordem do documento. Antes ele
     vinha por cima (`order: -1`), e o botão que avança mora dentro dele: a
     pessoa lia "Continuar" antes de ter campo nenhum para preencher, e
     precisava rolar para baixo e voltar. Abaixo, o botão cai no fim dos
     campos, que é onde o polegar já está. */
  .as-trilha-rot { display: none; }
  .as-trilha { grid-auto-columns: auto; justify-content: center; gap: 10px; }
}
.as-form { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.as-bloco { border: 0; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.as-bloco + .as-bloco { margin-top: 8px; }
.as-bloco legend { display: flex; align-items: center; gap: 7px; font-size: 12px; font-weight: 800; color: var(--tinta-2); text-transform: uppercase; letter-spacing: .06em; padding: 0; margin-bottom: 12px; }
.as-par { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.as-par-cep { grid-template-columns: 1.4fr 1fr; }
.as-numero { position: relative; }
.as-numero input { width: 100%; padding-right: 128px; font-variant-numeric: tabular-nums; letter-spacing: .04em; }
.as-bandeira-tag {
  position: absolute; right: 10px; top: 50%; transform: translateY(-50%);
  font-size: 11.5px; font-weight: 700; color: var(--acento-texto); background: var(--acento-suave);
  padding: 3px 8px; border-radius: 6px; pointer-events: none;
}
.campo input.invalido { border-color: var(--erro); box-shadow: 0 0 0 3px color-mix(in srgb, var(--erro) 16%, transparent); }
.as-erro { font-size: 12.5px; color: var(--erro); font-weight: 600; line-height: 1.4; }
.as-erro-geral { margin: 0; font-size: 13.5px; font-weight: 600; color: var(--erro); }
.as-erro-geral:empty { display: none; }
.as-ajuda-titular { display: block; font-size: 12px; color: var(--tinta-3); line-height: 1.45; }

.as-resumo {
  align-self: start; position: sticky; top: calc(var(--topbar-h) + 16px);
  display: flex; flex-direction: column; gap: 10px;
  padding: 18px; border-radius: var(--raio-sm); background: var(--superficie-2); border: 1px solid var(--linha);
}
.as-resumo-cab { font-size: 12px; font-weight: 800; color: var(--tinta-3); text-transform: uppercase; letter-spacing: .06em; }
.as-resumo-linha { display: flex; justify-content: space-between; gap: 12px; font-size: 14px; }
.as-resumo-linha span { color: var(--tinta-2); }
.as-resumo-nota { margin: 4px 0 2px; font-size: 12.5px; line-height: 1.55; color: var(--tinta-3); padding-top: 10px; border-top: 1px solid var(--linha); }
.as-pagar { width: 100%; justify-content: center; }
.as-resumo .as-seguro { padding: 0; }

.as-pagar-atraso {
  display: flex; gap: 12px; align-items: flex-start; padding: 14px; margin-top: 4px;
  border-radius: var(--raio-sm); border: 1.5px solid var(--linha); cursor: pointer;
}
.as-pagar-atraso.marcada { border-color: var(--acento); background: var(--acento-suave); }
.as-pagar-atraso input { margin-top: 3px; accent-color: var(--acento); }
.as-pagar-atraso b { display: block; font-size: 14px; }
.as-pagar-atraso span span { display: block; font-size: 12.5px; color: var(--tinta-3); margin-top: 2px; line-height: 1.45; }

/* ---- histórico ---- */
.as-historico .cartao-cab .mudo { margin-left: auto; }
.as-sub, .aa-sub { display: block; margin-top: 2px; }
.as-falha { display: flex; align-items: center; gap: 5px; margin-top: 3px; font-size: 12px; font-weight: 600; color: var(--erro); }
/* ---- planos (painel da plataforma) ---- */
.pl-regras { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; padding: 14px 18px; border-bottom: 1px solid var(--linha); background: var(--superficie-2); }
.pl-regras > div { display: flex; gap: 8px; align-items: flex-start; font-size: 12.5px; line-height: 1.45; color: var(--tinta-2); }
.pl-regras .ic { flex: none; margin-top: 2px; color: var(--tinta-3); }
.pl-tabela td { vertical-align: middle; }
.pl-ordem { width: 76px; white-space: nowrap; }
.pl-ordem .aa-ico { width: 28px; height: 28px; }
.pl-selos { display: flex; gap: 6px; margin-top: 4px; }
.pl-fora td:not(.aa-acoes):not(.pl-ordem) { opacity: .6; }
.pl-form { display: flex; flex-direction: column; gap: 14px; }
.pl-check { display: flex; gap: 10px; align-items: flex-start; cursor: pointer; }
.pl-check input { margin-top: 3px; accent-color: var(--acento); }
.pl-check b { display: block; font-size: 14px; }
.pl-check span span { display: block; font-size: 12.5px; color: var(--tinta-3); line-height: 1.45; }
.pl-preco-escolha { display: flex; flex-direction: column; gap: 6px; padding: 12px; border-radius: var(--raio-sm); background: var(--aviso-suave); }
.pl-preco-escolha > b { font-size: 13.5px; }
.pl-acima { margin: 6px 0; padding-left: 18px; font-size: 13px; line-height: 1.6; }
@media (max-width: 900px) { .pl-regras { grid-template-columns: 1fr; } }

.troca-rotulo { display: flex; justify-content: space-between; gap: 8px; padding: 6px 12px 2px; font-size: 11.5px; font-weight: 700; color: var(--tinta-3); text-transform: uppercase; letter-spacing: .04em; }
.troca-rotulo .mudo { text-transform: none; letter-spacing: 0; font-weight: 500; }
.as-docs { white-space: nowrap; }
/* Números e documentos à direita, cabeçalho junto — só nestas tabelas: o
   .num-col de outras telas tem regra própria. */
.as-historico .num-col, .aa-tela .tabela .num-col { text-align: right; }
.as-docs .btn { margin-left: 2px; }

.as-zona-cancelar {
  display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap;
  padding: 16px 18px; border-radius: var(--raio); border: 1px dashed var(--linha-forte);
}
.as-zona-cancelar b { font-size: 14px; }
.as-zona-cancelar p { margin: 4px 0 0; font-size: 13px; color: var(--tinta-3); line-height: 1.5; max-width: 76ch; }

/* ---- modais ---- */
.as-planos-lista { display: flex; flex-direction: column; gap: 8px; }
.as-plano-linha {
  display: flex; align-items: center; justify-content: space-between; gap: 14px; width: 100%; text-align: left;
  padding: 12px 14px; border-radius: var(--raio-sm); border: 1.5px solid var(--linha);
  background: var(--superficie); color: var(--tinta); font: inherit; cursor: pointer;
}
.as-plano-linha:hover:not(:disabled) { border-color: var(--acento-linha); }
.as-plano-linha.marcado { border-color: var(--acento); background: var(--acento-suave); box-shadow: var(--anel); }
.as-plano-linha:disabled { cursor: default; opacity: .6; }
.as-plano-linha.atual { opacity: 1; background: var(--superficie-2); }
.as-pl-nome { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.as-pl-preco { font-weight: 700; white-space: nowrap; }

.as-motivos { border: 0; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 6px; }
.as-motivos legend { font-size: 13.5px; font-weight: 600; margin-bottom: 8px; padding: 0; }
.as-motivo {
  display: flex; align-items: center; gap: 10px; padding: 9px 12px; font-size: 14px;
  border-radius: var(--raio-xs); border: 1px solid var(--linha); cursor: pointer;
}
.as-motivo:hover { background: var(--superficie-2); }
.as-motivo.marcado { border-color: var(--acento); background: var(--acento-suave); }
.as-motivo input { accent-color: var(--acento); margin: 0; }

/* ---- conta suspensa (usuário cliente) ---- */
/* ---- acesso pausado por cobrança: modal que não fecha sobre um painel apagado ---- */
.bq-painel { display: flex; flex-direction: column; gap: 18px; opacity: .6; pointer-events: none; user-select: none; }
.bq-esq { border-radius: var(--raio); background: var(--superficie); border: 1px solid var(--linha); min-height: 104px; }
.bq-esq-cab { min-height: 64px; max-width: 420px; }
.bq-esq-linha { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 18px; }
.bq-esq-grande { min-height: 320px; }
@media (max-width: 760px) { .bq-esq-linha { grid-template-columns: 1fr 1fr; } }

.bq-fundo { background: rgba(10, 12, 30, .62); z-index: 130; }
.bq-modal { max-width: 520px; }
.bq-modal:focus { outline: none; }   /* o foco no próprio aviso é para o leitor de tela, não para o olho */
.bq-corpo { padding: 28px 28px 22px; display: flex; flex-direction: column; gap: 12px; overflow-y: auto; }
.bq-icone {
  width: 52px; height: 52px; border-radius: 15px; display: grid; place-items: center;
  background: var(--erro-suave); color: var(--erro); margin-bottom: 4px;
}
.bq-icone.pausa { background: var(--aviso-suave); color: var(--aviso); }
.bq-rotulo { font-size: 12px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase; color: var(--tinta-3); }
.bq-corpo h2 { margin: 0; font-size: 22px; font-weight: 800; letter-spacing: -.02em; line-height: 1.25; text-wrap: balance; }
.bq-corpo > p { margin: 0; font-size: 14.5px; line-height: 1.6; color: var(--tinta-2); }
.bq-corpo > p b { color: var(--tinta); }

.bq-lista {
  list-style: none; margin: 6px 0 0; padding: 14px 16px; display: flex; flex-direction: column; gap: 11px;
  border-radius: var(--raio-sm); background: var(--superficie-2);
  font-size: 13.5px; line-height: 1.5; color: var(--tinta-2);
}
.bq-lista li { display: grid; grid-template-columns: 16px minmax(0, 1fr); gap: 10px; align-items: start; }
.bq-lista li > svg { margin-top: 2px; color: var(--tinta-3); }
.bq-lista b { color: var(--tinta); }

.bq-agencia {
  margin-top: 6px; padding: 14px 16px; display: flex; flex-direction: column; gap: 10px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm); background: var(--superficie-2);
}
.bq-agencia-rot { font-size: 12.5px; color: var(--tinta-3); }
.bq-agencia-nome { font-size: 17px; font-weight: 800; letter-spacing: -.01em; margin-top: -6px; }
.bq-contato { display: flex; align-items: center; justify-content: space-between; gap: 8px 12px; flex-wrap: wrap; font-size: 13.5px; }
.bq-contato > span { color: var(--tinta-2); overflow-wrap: anywhere; min-width: 0; }
.bq-contato > span b { color: var(--tinta); }

.bq-acoes {
  display: flex; justify-content: flex-end; align-items: center; gap: 10px; flex-wrap: wrap;
  padding: 14px 28px 18px; border-top: 1px solid var(--linha);
}
@media (max-width: 480px) {
  .bq-corpo { padding: 22px 20px 18px; }
  .bq-acoes { padding: 12px 20px 16px; }
  .bq-acoes .btn { flex: 1 1 auto; justify-content: center; }
}

@media (max-width: 1000px) {
  .as-grade, .as-checkout { grid-template-columns: 1fr; }
  .as-resumo { position: static; }
}
@media (max-width: 560px) {
  .as-uso, .as-dados, .as-par, .as-par-cep { grid-template-columns: 1fr; }
  .as-fatos dd { text-align: left; }
}

/* ---- painel da plataforma ---- */
.aa-config { display: flex; flex-wrap: wrap; gap: 8px; }
.aa-conf {
  display: inline-flex; align-items: center; gap: 6px; padding: 6px 11px; border-radius: 999px;
  font-size: 12.5px; font-weight: 600; background: var(--superficie); border: 1px solid var(--linha); color: var(--tinta-2); cursor: help;
}
.aa-conf.ok    { color: var(--ok); }
.aa-conf.falta { color: var(--erro); background: var(--erro-suave); border-color: transparent; }
.aa-conf.teste { color: var(--aviso); background: var(--aviso-suave); border-color: transparent; }

.aa-stats { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.aa-stats .n { font-size: 26px; }
.aa-stats .aa-heroi { font-size: 30px; }

.aa-graficos { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 18px; align-items: start; }
.aa-graficos .cartao-cab { flex-wrap: wrap; }
.aa-graficos .cartao-cab > .mudo { margin-left: auto; }

.grafico-receita, .grafico-movimento { width: 100%; height: auto; display: block; font-family: var(--sans); }
.gr-grade { stroke: var(--linha); stroke-width: 1; }
.gr-zero  { stroke: var(--linha-forte); stroke-width: 1; }
.gr-eixo  { fill: var(--tinta-3); font-size: 11.5px; font-variant-numeric: tabular-nums; }
.gr-rotulo { fill: var(--tinta); font-size: 12px; font-weight: 700; font-variant-numeric: tabular-nums; }
.gr-col   { fill: var(--serie-1); pointer-events: none; }
.gr-col-2 { fill: var(--serie-2); pointer-events: none; }
.gr-parcial { fill: color-mix(in srgb, var(--serie-1) 55%, var(--superficie)); }
.gr-alvo  { fill: transparent; cursor: help; }
.gr-alvo:hover { fill: color-mix(in srgb, var(--acento) 7%, transparent); }

.aa-legenda span { display: inline-flex; align-items: center; gap: 6px; color: var(--tinta-2); }
.aa-legenda span + span { margin-left: 12px; }
.aa-legenda .aa-chave { width: 12px; height: 12px; border-radius: 3px; margin: 0; }
.aa-chave.serie-1 { background: var(--serie-1); }
.aa-chave.serie-2 { background: var(--serie-2); }

.aa-tabela-dados { border-top: 1px solid var(--linha); }
.aa-tabela-dados summary { cursor: pointer; padding: 10px 18px; font-size: 13px; font-weight: 600; color: var(--tinta-2); }
.aa-tabela-dados summary:hover { color: var(--tinta); }

.aa-barras { display: flex; flex-direction: column; gap: 12px; }
.aa-barra { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1.5fr) 104px; align-items: center; gap: 12px; font-size: 13.5px; }
/* O motivo é frase inteira e vale ser lido: quebra linha em vez de cortar. */
.aa-barra-rot { line-height: 1.35; }
.aa-barra-trilho { height: 12px; background: var(--superficie-2); border-radius: 0 4px 4px 0; }
.aa-barra-trilho i { display: block; height: 100%; min-width: 2px; background: var(--serie-1); border-radius: 0 4px 4px 0; }
.aa-barra-val { font-weight: 700; text-align: right; min-width: 70px; font-variant-numeric: tabular-nums; }

.aa-atencao .cartao-cab .selo { margin-left: auto; }
.aa-lista { list-style: none; margin: 0; padding: 0; }
.aa-lista li { display: flex; align-items: center; gap: 12px; padding: 12px 18px; border-top: 1px solid var(--linha); font-size: 14px; }
.aa-lista li:first-child { border-top: 0; }
.aa-lista li > div { flex: 1; min-width: 0; line-height: 1.45; }
.aa-lista li .pequeno { display: block; }
.aa-lista-ico { width: 28px; height: 28px; flex: none; border-radius: 8px; display: grid; place-items: center; }
.aa-lista-ico.erro  { background: var(--erro-suave);  color: var(--erro); }
.aa-lista-ico.aviso { background: var(--aviso-suave); color: var(--aviso); }

.aa-todas-cab { flex-wrap: wrap; gap: 10px 14px; }
.aa-busca {
  margin-left: auto; display: inline-flex; align-items: center; gap: 8px; height: 36px; padding: 0 12px;
  border-radius: var(--raio-xs); border: 1px solid var(--linha); background: var(--superficie); color: var(--tinta-4);
}
.aa-busca:focus-within { border-color: var(--acento); box-shadow: var(--anel); }
.aa-busca input { border: 0; outline: 0; background: transparent; font: inherit; font-size: 13.5px; color: var(--tinta); width: 180px; }
.aa-acoes { white-space: nowrap; text-align: right; }
.aa-nw { white-space: nowrap; }
/* Texto só para leitor de tela (cabeçalho da coluna de ações, que não tem rótulo visível). */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.aa-quem b { cursor: default; }
.aa-ico { width: 34px; padding: 0; justify-content: center; }
.aa-seta { display: flex; color: var(--tinta-4); transition: transform var(--transicao); }
.aa-avisos[open] .aa-seta { transform: rotate(180deg); }
.aa-lista code.mono { font-size: 12.5px; background: var(--superficie-2); padding: 1px 6px; border-radius: 5px; }
.aa-perigo { color: var(--erro); }
.aa-perigo:hover { background: var(--erro-suave); color: var(--erro); }

.aa-avisos > summary { list-style: none; cursor: pointer; }
.aa-avisos > summary::-webkit-details-marker { display: none; }
.aa-avisos > summary .mudo { margin-left: auto; }

@media (max-width: 1280px) { .aa-stats { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 1000px) { .aa-graficos { grid-template-columns: 1fr; } }
@media (max-width: 640px)  {
  .aa-stats { grid-template-columns: 1fr 1fr; }
  .aa-busca { margin-left: 0; width: 100%; }
  .aa-busca input { width: 100%; }
  .aa-barra { grid-template-columns: 1fr auto; }
  .aa-barra-trilho { grid-column: 1 / -1; order: 3; }
}

/* ==========================================================================
   Ficha da agência (/admin/agencias/{id})
   ========================================================================== */
.ag-tela { display: flex; flex-direction: column; gap: 18px; }
.migalha a { color: inherit; }
.migalha a:hover { color: var(--acento-texto); }

.ag-cab { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; padding: 18px 20px; }
.ag-sigla {
  width: 52px; height: 52px; flex: none; border-radius: 14px; display: grid; place-items: center;
  background: var(--acento-suave); color: var(--acento-texto); font-size: 22px; font-weight: 800;
}
.ag-cab-txt { flex: 1; min-width: 220px; }
.ag-cab-txt h2 { margin: 0; font-size: 22px; font-weight: 800; letter-spacing: -.02em; text-wrap: balance; }
.ag-cab-meta { margin-top: 6px; display: flex; align-items: center; gap: 6px 14px; flex-wrap: wrap; font-size: 13px; }
.ag-cab-acoes { display: flex; gap: 8px; flex-wrap: wrap; }

.ag-grade { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr); gap: 18px; align-items: start; }
.ag-coluna { display: flex; flex-direction: column; gap: 18px; min-width: 0; }

.ag-contato {
  display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 4px 12px; align-items: center;
  padding: 14px 18px; border-bottom: 1px solid var(--linha);
}
.ag-contato.inativo { opacity: .65; }
.ag-contato-foto {
  grid-row: span 2; width: 40px; height: 40px; border-radius: 50%; display: grid; place-items: center;
  background: var(--superficie-2); color: var(--tinta-2); font-size: 14px; font-weight: 700;
}
.ag-contato-quem { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ag-contato-quem b { display: flex; align-items: center; gap: 8px; font-size: 14.5px; flex-wrap: wrap; }
.ag-contato-canais { grid-column: 2; display: flex; align-items: center; gap: 4px 10px; flex-wrap: wrap; margin-top: 4px; }
.ag-canal { display: inline-flex; align-items: center; gap: 6px; font-size: 13.5px; color: var(--tinta-2); min-width: 0; }
.ag-canal span { overflow-wrap: anywhere; }
.ag-canal:hover { color: var(--acento-texto); }

.ag-cobranca-dados { padding-top: 4px; }
.ag-cobranca-cab { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 18px 0; font-size: 13.5px; }

.ag-clientes td, .ag-clientes th { padding: 11px 10px; }
.ag-clientes td:first-child, .ag-clientes th:first-child { padding-left: 18px; }
.ag-clientes th { white-space: nowrap; }
.ag-cli-nome { min-width: 140px; }
.ag-cli-abrir {
  all: unset; cursor: pointer; font-weight: 700; color: var(--tinta); line-height: 1.35;
  border-radius: 4px;
}
.ag-cli-abrir:hover { color: var(--acento-texto); text-decoration: underline; }
.ag-cli-abrir:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

.ag-assinatura { border-left: 4px solid var(--tinta-4); display: flex; flex-direction: column; gap: 2px; }
.ag-assinatura > b { font-size: 15px; font-weight: 800; }
.ag-assinatura > p { margin: 2px 0 0; color: var(--tinta-2); line-height: 1.5; }
.ag-assinatura.tom-ok    { border-left-color: var(--ok); }
.ag-assinatura.tom-aviso { border-left-color: var(--aviso); }
.ag-assinatura.tom-aviso > b { color: var(--aviso); }
.ag-assinatura.tom-erro  { border-left-color: var(--erro); }
.ag-assinatura.tom-erro > b { color: var(--erro); }
.ag-assinatura .as-dados { padding-left: 0; padding-right: 0; }

.ag-cobrancas { list-style: none; margin: 0; padding: 0 0 6px; border-top: 1px solid var(--linha); }
.ag-cobrancas li {
  display: grid; grid-template-columns: 88px 1fr auto 44px; align-items: center; gap: 10px;
  padding: 9px 18px; font-size: 13.5px; border-bottom: 1px solid var(--linha);
}
.ag-cobrancas li:last-child { border-bottom: 0; }
.ag-cobrancas li a { text-align: right; }

.ag-uso { display: flex; flex-direction: column; gap: 16px; }
.ag-controles { display: flex; flex-direction: column; gap: 14px; }
.ag-excecoes { border: 1px solid var(--linha); border-radius: var(--raio-sm, 10px); padding: 10px 14px 14px; margin: 0; }
.ag-excecoes legend { font-size: 13px; font-weight: 600; padding: 0 6px; }
.ag-tres { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; }
.ag-salvar { display: flex; align-items: center; justify-content: flex-end; gap: 12px; margin-top: 4px; }
.ag-obs {
  width: 100%; resize: vertical; min-height: 110px; font: inherit; font-size: 14px; line-height: 1.5;
  padding: 10px 12px; border: 1px solid var(--linha-forte, var(--linha)); border-radius: var(--raio-sm, 10px);
  background: var(--superficie); color: var(--tinta);
}
.ag-obs:focus { outline: 2px solid var(--acento); outline-offset: 1px; }

.nome-link { color: inherit; font-weight: 700; }
.nome-link:hover { color: var(--acento-texto); text-decoration: underline; }

@media (max-width: 1100px) { .ag-grade { grid-template-columns: minmax(0, 1fr); } }
@media (max-width: 640px)  {
  .ag-tres, .as-par { grid-template-columns: 1fr; }
  .ag-cobrancas li { grid-template-columns: 80px 1fr auto; }
  .ag-cobrancas li a { grid-column: 1 / -1; text-align: left; }
}

/* ==========================================================================
   Relatórios de resultado — o documento (painel, link público e PDF)
   ========================================================================== */
.rel-folha {
  width: 100%; max-width: 920px; margin: 0 auto;
  background: var(--superficie); border: 1px solid var(--linha); border-radius: var(--raio);
  box-shadow: var(--sombra); padding: 40px 44px;
}
.rel-doc { display: flex; flex-direction: column; gap: 34px; color: var(--tinta); }

.rel-capa { display: flex; flex-direction: column; gap: 6px; padding-bottom: 26px; border-bottom: 1px solid var(--linha); }
.rel-capa-marca { display: flex; align-items: center; gap: 10px; margin-bottom: 18px; }
.rel-capa-marca > span:last-child { display: flex; flex-direction: column; line-height: 1.25; }
.rel-capa-marca b { font-size: 14.5px; font-weight: 800; }
.rel-capa-marca span span { font-size: 11px; font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--tinta-3); }
.rel-sigla {
  width: 36px; height: 36px; flex: none; border-radius: 10px; display: grid; place-items: center;
  background: var(--acento); color: #fff; font-weight: 800; font-size: 16px;
}
.rel-capa-periodo { margin: 0; font: italic 400 24px/1.2 var(--serif); color: var(--acento-texto); }
.rel-capa h1 { margin: 0; font-size: 34px; line-height: 1.12; font-weight: 800; letter-spacing: -.025em; text-wrap: balance; }
.rel-capa-sub { margin: 4px 0 0; font-size: 14px; color: var(--tinta-3); }

.rel-bloco { display: flex; flex-direction: column; gap: 14px; }
.rel-bloco h2 { margin: 0; font-size: 17px; font-weight: 800; letter-spacing: -.01em; }
.rel-bloco h3 { margin: 10px 0 0; font-size: 14px; font-weight: 700; color: var(--tinta-2); }
.rel-bloco-cab { display: flex; align-items: baseline; justify-content: space-between; gap: 8px 16px; flex-wrap: wrap; }
.rel-nota { margin: -6px 0 0; font-size: 13.5px; color: var(--tinta-3); line-height: 1.5; }
.rel-vazio { margin: 0; padding: 18px; border-radius: var(--raio-sm); background: var(--superficie-2); color: var(--tinta-3); font-size: 14px; text-align: center; }

.rel-comentario { padding: 18px 20px; border-radius: var(--raio-sm); background: var(--acento-suave); border-left: 3px solid var(--acento); gap: 8px; }
.rel-comentario h2 { font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: var(--acento-texto); }
.rel-comentario p { margin: 0; font-size: 15px; line-height: 1.65; color: var(--tinta); max-width: 72ch; }
.rel-assina { font-size: 13px; color: var(--tinta-3); }

/* números do resumo: uma grade com filetes de 1px, não quatro caixas soltas */
.rel-kpis {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px;
  background: var(--linha); border: 1px solid var(--linha); border-radius: var(--raio-sm); overflow: hidden;
}
.rel-kpi { background: var(--superficie); padding: 16px 18px; display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.rel-kpi-rot { font-size: 12.5px; font-weight: 600; color: var(--tinta-3); }
.rel-kpi-num { font-size: 30px; font-weight: 800; letter-spacing: -.02em; line-height: 1.1; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
.rel-kpi-sub { font-size: 12.5px; color: var(--tinta-3); margin-top: 2px; }
.rel-var { font-size: 12.5px; font-weight: 700; font-variant-numeric: tabular-nums; }
.rel-var.bom    { color: var(--ok); }
.rel-var.ruim   { color: var(--erro); }
.rel-var.neutro { color: var(--tinta-4); font-weight: 600; }

.rel-invest {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px 18px;
  padding: 14px 18px; border-radius: var(--raio-sm); background: var(--superficie-2);
}
.rel-invest div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.rel-invest span { font-size: 12.5px; color: var(--tinta-3); }
.rel-invest b { font-size: 19px; font-weight: 800; font-variant-numeric: tabular-nums; }
.rel-invest small { font-size: 12px; color: var(--tinta-3); font-weight: 500; }

.rel-fatos { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px 18px; margin: 4px 0 0; }
.rel-fatos div { min-width: 0; }
.rel-fatos dt { font-size: 12.5px; color: var(--tinta-3); line-height: 1.35; }
.rel-fatos dd { margin: 3px 0 0; font-size: 15px; font-weight: 700; font-variant-numeric: tabular-nums; }
.rel-fatos small { font-size: 11.5px; font-weight: 500; color: var(--tinta-4); }

.rel-legenda { display: flex; gap: 14px; flex-wrap: wrap; font-size: 12.5px; color: var(--tinta-2); }
.rel-legenda span { display: inline-flex; align-items: center; gap: 6px; }
.rel-chave { width: 10px; height: 10px; border-radius: 3px; display: inline-block; }
.rel-chave.serie-1 { background: var(--serie-1); }
.rel-chave.serie-2 { background: var(--serie-2); }
.rel-grafico-caixa { width: 100%; }
.rel-grafico { width: 100%; height: auto; display: block; }
/* a venda fica dentro da coluna de leads: um anel da cor do fundo separa as duas */
.rel-venda { stroke: var(--superficie); stroke-width: 2; paint-order: stroke; }

.rel-funil { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.rel-funil li { display: grid; grid-template-columns: minmax(120px, 190px) minmax(0, 1fr) 64px 52px; align-items: center; gap: 12px; }
.rel-funil-nome { font-size: 14px; font-weight: 600; overflow-wrap: anywhere; }
.rel-funil-barra { height: 16px; border-radius: 4px; background: var(--superficie-2); overflow: hidden; }
.rel-funil-barra i { display: block; height: 100%; background: var(--serie-1); border-radius: 0 4px 4px 0; }
.rel-funil-num { text-align: right; font-size: 15px; font-weight: 800; font-variant-numeric: tabular-nums; }
.rel-funil-pct { text-align: right; font-size: 13px; color: var(--tinta-3); font-variant-numeric: tabular-nums; }

.rel-tabela-caixa { overflow-x: auto; }
.rel-tabela { width: 100%; border-collapse: collapse; font-size: 14px; }
.rel-tabela th {
  text-align: left; font-size: 11.5px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase;
  color: var(--tinta-3); padding: 0 12px 8px; border-bottom: 1px solid var(--linha-forte); white-space: nowrap;
}
.rel-tabela td { padding: 10px 12px; border-bottom: 1px solid var(--linha); vertical-align: top; }
.rel-tabela th:first-child, .rel-tabela td:first-child { padding-left: 0; }
.rel-tabela th:last-child, .rel-tabela td:last-child { padding-right: 0; }
.rel-tabela .num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
.rel-sub { display: block; font-size: 12px; color: var(--tinta-3); margin-top: 2px; }

.rel-frases { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 10px; }
.rel-frases li { display: grid; grid-template-columns: 18px minmax(0, 1fr); gap: 10px; font-size: 14.5px; line-height: 1.55; color: var(--tinta-2); }
.rel-frases li > svg { margin-top: 3px; color: var(--tinta-3); }
.rel-frases li.bom > svg { color: var(--ok); }
.rel-frases li.alerta > svg { color: var(--aviso); }

.rel-meta-frase { margin: 0; font-size: 14.5px; line-height: 1.6; color: var(--tinta-2); max-width: 78ch; }
.rel-meta-frase b { color: var(--tinta); }
.rel-chips { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
.rel-chips li { display: inline-flex; align-items: center; gap: 8px; padding: 6px 12px; border-radius: 999px; background: var(--superficie-2); font-size: 13px; color: var(--tinta-2); }
.rel-chips b { color: var(--tinta); font-variant-numeric: tabular-nums; }

.rel-rodape { padding-top: 18px; border-top: 1px solid var(--linha); display: flex; flex-direction: column; gap: 6px; }
.rel-rodape p { margin: 0; font-size: 12px; line-height: 1.55; color: var(--tinta-3); max-width: 96ch; }
.rel-rodape span { font-size: 11.5px; color: var(--tinta-4); }

/* ---- no painel ---- */
.rel-tela { display: flex; flex-direction: column; gap: 18px; }
.rel-barra { padding: 16px 20px; display: flex; flex-direction: column; gap: 10px; }
.rel-voltar { display: inline-flex; align-items: center; gap: 6px; font-size: 13px; color: var(--tinta-3); align-self: flex-start; }
.rel-voltar:hover { color: var(--acento-texto); text-decoration: none; }
.rel-voltar-ico { transform: rotate(-90deg); }
.rel-barra-linha { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px 20px; flex-wrap: wrap; }
.rel-barra-txt { min-width: 240px; flex: 1; }
.rel-barra-txt h2 { margin: 0 0 3px; font-size: 20px; font-weight: 800; letter-spacing: -.015em; text-wrap: balance; }
.rel-barra-acoes { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.rel-menu { right: 0; left: auto; min-width: 290px; }
.rel-barra-status { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.rel-validade {
  display: inline-flex; align-items: center; gap: 5px; padding: 3px 9px; border-radius: 999px;
  border: 1px solid var(--linha); background: var(--superficie); color: var(--tinta-2);
  font: inherit; font-size: 12.5px; cursor: pointer;
}
.rel-validade:hover { border-color: var(--acento); color: var(--acento-texto); }
.rel-validade:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }
.rel-avisos { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
.rel-avisos li {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 10px 12px;
  border-radius: var(--raio-sm); background: var(--superficie-2); font-size: 13.5px; color: var(--tinta-2);
}
.rel-avisos li > svg { flex: none; color: var(--tinta-3); }
.rel-avisos li > span { flex: 1; min-width: 220px; line-height: 1.45; }
.rel-avisos li.aviso { background: var(--aviso-suave); }
.rel-avisos li.aviso > svg { color: var(--aviso); }
.rel-avisos b { color: var(--tinta); }

.rel-lista-sub { display: block; margin-top: 2px; }
.rel-lista-vazia { display: flex; flex-direction: column; align-items: center; gap: 10px; padding: 44px 24px; }
.rel-lista-vazia h3 { margin: 0; }
.rel-lista-vazia p { margin: 0 0 6px; }
.rel-vazio-ico { width: 56px; height: 56px; border-radius: 16px; display: grid; place-items: center; background: var(--acento-suave); color: var(--acento-texto); }
.rel-escolha { border: 0; padding: 0; margin: 0; min-width: 0; }
.rel-escolha legend { font-size: 13.5px; font-weight: 600; padding: 0; margin-bottom: 8px; }
.rel-escolha .escolha-op span span { display: block; font-size: 12.5px; color: var(--tinta-3); }

/* ---- link público ---- */
body.rel-pagina { background: var(--superficie-2); min-height: 100dvh; padding: 0 16px 40px; }
.rel-pagina-barra {
  max-width: 920px; margin: 0 auto; padding: 16px 0 14px;
  display: flex; align-items: center; justify-content: space-between; gap: 12px; font-size: 13.5px; color: var(--tinta-3);
}
.rel-pagina-barra b { color: var(--tinta); }
.rel-indisponivel {
  max-width: 460px; margin: 14vh auto 0; padding: 36px 28px; text-align: center;
  background: var(--superficie); border: 1px solid var(--linha); border-radius: var(--raio);
}
.rel-indisponivel h1 { margin: 16px 0 8px; font-size: 21px; font-weight: 800; }
.rel-indisponivel p { margin: 0; color: var(--tinta-2); line-height: 1.55; }

@media (max-width: 860px) {
  .rel-folha { padding: 28px 24px; }
  .rel-kpis, .rel-invest, .rel-fatos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 560px) {
  .rel-folha { padding: 22px 16px; }
  .rel-capa h1 { font-size: 27px; }
  .rel-kpi { padding: 14px; }
  .rel-kpi-num { font-size: 24px; }
  .rel-funil li { grid-template-columns: minmax(0, 1fr) auto auto; gap: 4px 10px; }
  .rel-funil-nome { grid-column: 1 / -1; }
  .rel-fatos { grid-template-columns: 1fr; }
}

/* ---- PDF (imprimir e salvar como PDF) ---- */
@media print {
  @page { size: A4; margin: 12mm 12mm 14mm; }
  * { -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  body.rel-pagina { background: #fff; padding: 0; min-height: 0; }
  .rel-pagina-barra { display: none; }
  .rel-folha { max-width: none; border: 0; border-radius: 0; box-shadow: none; padding: 0; }
  .rel-doc { gap: 22px; }
  .rel-capa h1 { font-size: 30px; }
  .rel-quebra-evita, .rel-kpis, .rel-invest, .rel-fatos, .rel-comentario, .rel-funil li, .rel-tabela tr { break-inside: avoid; }
  .rel-bloco h2, .rel-bloco h3 { break-after: avoid; }
  .rel-tabela-caixa { overflow: visible; }
  .rel-kpis, .rel-invest, .rel-fatos { grid-template-columns: repeat(4, minmax(0, 1fr)); }
}

/* ============================================================================
   Cartão de crédito desenhado (/assinatura)

   Espelho dos campos, nunca fonte: não guarda nada, não recebe digitação, e
   some do leitor de tela (aria-hidden) porque para quem não vê ele é repetição.

   Existe por um motivo prático: digitar 16 dígitos no celular é onde a pessoa
   erra e desiste. Ver o número cair no lugar certo mostra progresso e erro na
   hora, sem precisar conferir dígito por dígito.
   ========================================================================== */
/* width explicito: o conteudo do cartao e todo position:absolute, entao sem isto
   ele nao tem largura propria e colapsa dentro de qualquer container flex. */
.cc { perspective: 1200px; margin: 0 auto 20px; width: 100%; max-width: 360px; flex: none; }

.cc-face {
  position: relative; width: 100%; aspect-ratio: 1.586;   /* proporção real do cartão */
  transform-style: preserve-3d; transition: transform .55s cubic-bezier(.4, .2, .2, 1);
}
.cc-face.virada { transform: rotateY(180deg); }

.cc-frente, .cc-verso {
  position: absolute; inset: 0; border-radius: 16px; backface-visibility: hidden;
  color: #fff; overflow: hidden;
  background: linear-gradient(135deg, #2a2d55 0%, #1b1d38 55%, #14162b 100%);
  box-shadow: 0 14px 34px rgba(12, 14, 35, .28), inset 0 1px 0 rgba(255, 255, 255, .12);
}

/* Brilho diagonal discreto: dá superfície ao cartão sem virar enfeite. */
.cc-frente::after {
  content: ''; position: absolute; inset: -40% -10% auto -10%; height: 90%;
  background: linear-gradient(105deg, transparent 38%, rgba(255, 255, 255, .07) 50%, transparent 62%);
}

.cc-frente { display: flex; flex-direction: column; justify-content: space-between; padding: 20px 22px; }
.cc-verso  { transform: rotateY(180deg); }

/* flex:none nos tres blocos: sem isto eles esticam/encolhem e o rotulo descola
   do valor quando o cartao esta vazio. Altura natural, e o space-between so
   distribui a sobra. */
.cc-frente > * { flex: none; }
.cc-topo { display: flex; align-items: center; justify-content: space-between; gap: 12px; }

/* Chip: desenhado, para não depender de imagem. */
.cc-chip {
  width: 44px; height: 33px; border-radius: 6px; flex: none;
  background: linear-gradient(145deg, #e6c56b, #b8912f 55%, #f0d98d);
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .18);
  position: relative;
}
.cc-chip::before, .cc-chip::after {
  content: ''; position: absolute; left: 6px; right: 6px; height: 1px;
  background: rgba(0, 0, 0, .25);
}
.cc-chip::before { top: 12px; } .cc-chip::after { top: 20px; }

.cc-bandeira {
  font-size: 13px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  opacity: .95; text-align: right; line-height: 1.2;
}
.cc-bandeira.vazia { opacity: .4; font-weight: 500; text-transform: none; letter-spacing: 0; white-space: nowrap; }

.cc-numero {
  font-family: var(--mono, ui-monospace, monospace);
  font-size: clamp(16px, 5.2vw, 21px); letter-spacing: .06em;
  text-shadow: 0 1px 2px rgba(0, 0, 0, .35); white-space: nowrap;
}

.cc-pe { display: flex; align-items: flex-end; justify-content: space-between; gap: 14px; }
/* coluna com gap: rotulo e valor ficam grudados por construcao, sem depender de
   como o flex de cima distribui a sobra. */
.cc-campo { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.cc-campo span {
  display: block; font-size: 9px; text-transform: uppercase; letter-spacing: .12em;
  opacity: .55; line-height: 1.2;
}
.cc-campo b {
  display: block; font-size: 13px; font-weight: 600; letter-spacing: .03em; line-height: 1.25;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.cc-campo b.vazio { opacity: .38; font-weight: 500; }
.cc-validade { text-align: right; flex: none; }

/* Verso */
.cc-tarja { height: 44px; margin-top: 22px; background: #0d0e1c; }
.cc-assinatura {
  margin: 18px 22px 0; height: 38px; border-radius: 5px; background: #f2f2f5;
  display: flex; align-items: center; justify-content: flex-end; padding: 0 12px;
}
.cc-cvv {
  font-family: var(--mono, ui-monospace, monospace); color: #14162b;
  font-size: 15px; letter-spacing: .22em;
}
.cc-verso-nota {
  display: block; margin: 8px 22px 0; font-size: 9px; letter-spacing: .12em;
  text-transform: uppercase; opacity: .5; text-align: right;
}

/* Quem pediu menos movimento não recebe o giro: o verso aparece do mesmo jeito. */
@media (prefers-reduced-motion: reduce) {
  .cc-face { transition: none; }
}

/* Lista do que se perde ao excluir um cliente. Numeros grandes e a frase curta
   do lado: e o que faz a pessoa parar antes de confirmar o que nao tem volta. */
.ex-lista { list-style: none; margin: 14px 0 0; padding: 0; display: grid; gap: 7px; }
.ex-lista li {
  display: flex; align-items: baseline; gap: 8px; font-size: 13.5px; color: var(--tinta-2);
  padding: 8px 12px; border-radius: var(--raio-sm); background: var(--superficie-2);
}
.ex-lista b { font-size: 15px; font-weight: 700; color: var(--tinta); font-variant-numeric: tabular-nums; }

/* Cartao ao lado dos campos: o olho acompanha o que esta sendo digitado sem
   precisar subir e descer a pagina. Abaixo de 820px vira uma coluna so. */
.cc-lado { display: grid; grid-template-columns: minmax(0, 300px) minmax(0, 1fr); gap: 22px; align-items: start; }
.cc-campos { display: flex; flex-direction: column; gap: 12px; min-width: 0; }
.cc-lado .cc { margin: 0; }
@media (max-width: 820px) {
  /* Uma coluna: o cartão em cima, com largura de cartão, centralizado. */
  .cc-lado { grid-template-columns: 1fr; }
  .cc-lado .cc { margin: 0 auto 4px; max-width: 320px; }
}

/* O resumo e o botao de pagar acompanham a rolagem: em formulario longo, o
   valor e o botao sumiam da tela justo na hora de decidir.
   (Só passou a funcionar quando o checkout saiu de dentro do `.cartao`: o
   `overflow: hidden` dele desligava o sticky de todos os descendentes.) */
.as-resumo { position: sticky; top: calc(var(--topbar-h) + 16px); align-self: start; }
@media (max-width: 860px) { .as-resumo { position: static; } }

/* Insights: campanha -> conjunto -> anuncio */
.nivel-abrir {
  background: none; border: 0; padding: 0; cursor: pointer; text-align: left;
  font: inherit; font-weight: 600; color: var(--tinta);
  display: inline-flex; align-items: center; gap: 4px;
}
.nivel-abrir:hover { color: var(--acento); text-decoration: underline; }
.nivel-abrir svg { opacity: .5; }

/* No ar ou pausado. Verde so no estado positivo; pausado e cinza, nao vermelho:
   campanha pausada e decisao do gestor, nao defeito do sistema. */
.selo-veic {
  display: inline-block; margin-left: 7px; padding: 1px 7px; border-radius: 999px;
  font-size: 10.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
  background: var(--superficie-2); color: var(--tinta-3); vertical-align: middle;
}
.selo-veic.ativo { background: var(--acento-suave); color: var(--acento-texto); }

.trilha-niveis { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

/* Escolha de etapas na exportacao. Contagem ao lado de cada uma: escolher "so
   os qualificados" sem saber que sao tres pessoas leva a subir um publico
   pequeno demais para a Meta aceitar. */
.mx-etapas { display: flex; flex-wrap: wrap; gap: 8px; }
.mx-etapa {
  display: inline-flex; align-items: center; gap: 7px; cursor: pointer;
  padding: 7px 11px; border-radius: var(--raio-sm); font-size: 13px;
  background: var(--superficie-2); box-shadow: inset 0 0 0 1px var(--linha);
}
.mx-etapa.marcada { background: var(--acento-suave); color: var(--acento-texto); box-shadow: inset 0 0 0 1px var(--acento-linha); }
.mx-etapa b { font-variant-numeric: tabular-nums; opacity: .7; }
.mx-etapa input { margin: 0; }

/* Atalhos de periodo na exportacao, no mesmo formato do seletor do topo. */
.mx-atalhos { display: flex; flex-wrap: wrap; gap: 6px; }
.mx-atalhos button {
  padding: 6px 11px; border-radius: 999px; border: 1px solid var(--linha);
  background: var(--superficie); color: var(--tinta-2); font-size: 12.5px; cursor: pointer;
}
.mx-atalhos button:hover { border-color: var(--linha-forte); color: var(--tinta); }
.mx-atalhos button.ativo { background: var(--acento); border-color: var(--acento); color: #fff; font-weight: 600; }

/* Etapa sem ninguem no periodo: visivel, mas claramente fora de alcance. */
.mx-etapa.vazia { opacity: .45; cursor: not-allowed; }

/* As duas saidas da exportacao, lado a lado: escolher errado aqui tem
   consequencia, entao as duas ficam explicadas antes dos botoes. */
.mx-saidas { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; margin-top: 14px; }
.mx-saida { padding: 11px 13px; border-radius: var(--raio-sm); background: var(--superficie-2); box-shadow: inset 0 0 0 1px var(--linha); }
.mx-saida b { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--tinta); }
.mx-saida p { margin: 6px 0 0; font-size: 12px; line-height: 1.5; color: var(--tinta-3); }
@media (max-width: 620px) { .mx-saidas { grid-template-columns: 1fr; } }

/* "marcar tudo como visto" no cabecalho do sino */
.pop-limpar {
  margin-left: auto; background: none; border: 0; padding: 0; cursor: pointer;
  font: inherit; font-size: 11.5px; color: var(--acento); font-weight: 600;
}
.pop-limpar:hover { text-decoration: underline; }

/* Olhinho para ver a senha digitada. Dentro do campo, nao ao lado: ao lado ele
   viraria mais um controle na fila e empurraria o input. */
.campo-olho { position: relative; display: flex; }
.campo-olho input { flex: 1; min-width: 0; padding-right: 40px; }
.campo-olho button {
  position: absolute; right: 4px; top: 50%; transform: translateY(-50%);
  width: 32px; height: 32px; display: grid; place-items: center;
  background: none; border: 0; border-radius: var(--raio-xs); cursor: pointer;
  color: var(--tinta-4); transition: color var(--transicao), background var(--transicao);
}
.campo-olho button:hover { color: var(--tinta); background: var(--superficie-2); }

/* O guia de "como pegar a chave" virou um botao que abre. Fechado por padrao:
   sao quatro passos que so interessam na primeira vez. */
/* Virou <button> para poder abrir e fechar, e esta regra chegou depois da
   original (linha ~1108) zerando o padding dela — o título ficava encostado na
   borda da caixa. Aqui o botão volta a ter o respiro do cartão; só o que é de
   botão (fundo, borda, fonte herdada) é neutralizado. */
.guia-titulo {
  display: flex; align-items: center; gap: 8px; width: 100%; cursor: pointer;
  border: 0; font: inherit; text-align: left;
  padding: 11px 14px;
  background: color-mix(in srgb, var(--acento) 10%, transparent);
  color: var(--acento-texto); font-weight: 700; font-size: 13px;
}
.guia-titulo span:nth-child(2) { flex: 1; }
.guia-titulo:hover { color: var(--acento); }
.guia-seta { display: grid; place-items: center; color: var(--tinta-4); transition: transform var(--transicao); }
.guia-seta.girada { transform: rotate(180deg); }

/* Medidor de consumo da IA. Existe para responder "quanto isto esta me
   custando, e por causa de qual cliente" sem abrir o painel da OpenAI. */
.ia-consumo { border: 1px solid var(--linha); border-radius: var(--raio-sm); padding: 14px; }
.ia-consumo-cab { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-bottom: 12px; }
.ia-consumo-cab b { display: flex; align-items: center; gap: 7px; font-size: 13px; }
.ia-consumo-numeros { display: grid; grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); gap: 10px; }
.ia-consumo-numeros > div { padding: 10px 12px; border-radius: var(--raio-sm); background: var(--superficie-2); }
.ia-consumo-numeros span { display: block; font-size: 11px; color: var(--tinta-3); margin-bottom: 3px; }
.ia-consumo-numeros b { font-size: 16px; font-variant-numeric: tabular-nums; }
.ia-consumo-preco { margin-top: 12px; font-size: 12px; }
.ia-consumo-preco summary { cursor: pointer; color: var(--tinta-3); }
.ia-consumo-preco summary:hover { color: var(--acento); }
.ia-consumo-preco label { display: flex; flex-direction: column; gap: 4px; font-size: 12px; color: var(--tinta-2); margin-top: 8px; }
.ia-consumo-tabela { margin-top: 12px; }

/* ---- agência: nome + plano num card só ------------------------------------
   Eram dois cartões separados por toda a coluna. Juntos ocupam menos e
   respondem juntos a mesma pergunta: quem é esta conta e até onde ela vai.   */
.cfg-agencia { display: flex; flex-direction: column; gap: 14px; }
/* O form leva a classe `campo` junto, então o input já vem estilizado daqui. */
.cfg-nome-linha { display: flex; gap: 8px; align-items: stretch; }
.cfg-nome-linha input { flex: 1; min-width: 0; }
.cfg-nome-linha .btn { flex: none; height: 44px; }

.cfg-plano {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: 1px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--linha); overflow: hidden;
}
.cfg-plano-item { background: var(--superficie); padding: 10px 12px; }
.cfg-plano-item > span { display: block; font-size: 11px; color: var(--tinta-3); margin-bottom: 2px; }
.cfg-plano-item > b { font-size: 15px; font-variant-numeric: tabular-nums; display: flex; align-items: center; gap: 4px; }
/* O total é referência, não o número: fica mais leve que o usado. */
.cfg-plano-item > b i { font-style: normal; font-weight: 500; color: var(--tinta-3); }
.cfg-plano-item[data-dica] { cursor: help; }
a.cfg-plano-link { text-decoration: none; color: inherit; transition: background var(--transicao); }
a.cfg-plano-link:hover { background: var(--superficie-2); text-decoration: none; }
a.cfg-plano-link > b { font-size: 12.5px; font-weight: 600; color: var(--acento-texto); }

.cfg-cobranca { border: 1px solid var(--linha); border-radius: var(--raio-sm); }
.cfg-cobranca > summary {
  display: flex; align-items: center; gap: 8px; cursor: pointer;
  padding: 11px 13px; font-size: 13px; font-weight: 600;
  list-style: none;
}
.cfg-cobranca > summary::-webkit-details-marker { display: none; }
.cfg-cobranca > summary::marker { content: ""; }
.cfg-cobranca > summary > span:first-child { display: flex; align-items: center; gap: 7px; flex: 1; }
.cfg-cobranca > summary:hover { color: var(--acento); }
.cfg-cobranca[open] > summary { border-bottom: 1px solid var(--linha); }
.cfg-cobranca-form { display: flex; flex-direction: column; gap: 12px; padding: 14px 13px; }

/* ---- ids da Meta em /conexoes --------------------------------------------- */
.id-meta { display: inline-flex; align-items: center; gap: 4px; }
/* Os dois botõezinhos da linha do id: copiar o número, e ver a captura que
   mostra onde ele fica dentro da Meta. Mesmo tamanho e mesmo peso — nenhum dos
   dois é mais importante que o outro. */
.id-copiar,
.id-ver {
  display: grid; place-items: center; width: 20px; height: 20px; flex: none;
  border: 0; border-radius: 5px; background: transparent; color: var(--tinta-4);
  cursor: pointer; opacity: .7; transition: opacity var(--transicao), background var(--transicao);
}
.id-copiar:hover,
.id-ver:hover { opacity: 1; background: var(--superficie-2); color: var(--acento); }
.id-copiar:focus-visible,
.id-ver:focus-visible { outline: none; box-shadow: var(--anel); opacity: 1; }
/* Na lista de verificação o botão vem depois do id, já fora do `.id-meta`. */
.check .id-ver { margin-left: 2px; vertical-align: middle; }

/* ---- "a prova real" ------------------------------------------------------- */
.prova-real {
  margin-top: 18px;   /* estava colado no cartão de números acima */
  border: 1px solid var(--acento-linha); border-radius: var(--raio);
  background: var(--acento-suave); overflow: hidden;
}
.prova-real > summary {
  display: flex; align-items: center; gap: 11px; cursor: pointer;
  padding: 14px 16px; list-style: none;
}
/* Duas linhas para a mesma coisa: o `::-webkit-details-marker` some o
   triângulo no Safari e em Chrome antigo, e o `::marker` no Firefox e no
   Chrome atual. `list-style: none` sozinho não dá conta em nenhum dos dois. */
.prova-real > summary::-webkit-details-marker { display: none; }
.prova-real > summary::marker { content: ""; }
.prova-real > summary > span:nth-child(2) { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.prova-real > summary b { font-size: 13.5px; color: var(--acento-texto); }
.prova-ic { display: grid; place-items: center; width: 34px; height: 34px; flex: none;
  border-radius: 10px; background: var(--superficie); color: var(--acento-texto); }
.prova-seta { display: grid; place-items: center; color: var(--tinta-4); transition: transform var(--transicao); }
.prova-real[open] .prova-seta { transform: rotate(180deg); }
.prova-corpo { padding: 0 16px 18px; background: var(--superficie); border-top: 1px solid var(--acento-linha); }
.prova-intro { margin: 16px 0 14px; font-size: 13.5px; line-height: 1.6; color: var(--tinta-2); }

.prova-ids { margin: 0 0 18px; display: flex; flex-direction: column; gap: 12px; }
.prova-ids > div { padding: 12px 14px; border-radius: var(--raio-sm); background: var(--superficie-2); }
.prova-ids dt { font-size: 12.5px; color: var(--tinta-3); margin-bottom: 5px; }
.prova-ids dd { margin: 0; font-size: 13px; line-height: 1.6; }

.prova-passos { list-style: none; margin: 0 0 16px; padding: 0; display: flex; flex-direction: column; gap: 14px; }
.prova-passos li { display: flex; align-items: flex-start; gap: 11px; font-size: 13.5px; line-height: 1.5; }
.prova-passos .passo-n { margin-top: 1px; background: var(--superficie-2); color: var(--acento-texto); box-shadow: inset 0 0 0 1px var(--acento-linha); }
.prova-passos div > span { display: block; font-size: 12.5px; color: var(--tinta-2); margin-top: 4px; line-height: 1.55; }

.prova-aviso {
  display: flex; gap: 9px; align-items: flex-start; margin: 0;
  padding: 11px 13px; border-radius: var(--raio-sm);
  background: var(--aviso-suave); color: var(--aviso);
  font-size: 12.5px; line-height: 1.55;
}
.prova-aviso svg { flex: none; margin-top: 1px; }

/* ---- figuras do tutorial --------------------------------------------------
   Miniatura clicável. O `figure` inteiro é o botão porque a legenda faz parte
   do alvo — mirar só na imagem é mira desnecessária.                         */
.prova-fig {
  display: block; width: 100%; margin: 10px 0 0; padding: 0;
  background: none; border: 0; cursor: zoom-in; text-align: left;
  border-radius: var(--raio-sm); overflow: hidden;
}
.prova-fig img {
  display: block; width: 100%; height: auto; aspect-ratio: 1.6;
  object-fit: cover; object-position: top left;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  transition: border-color var(--transicao), transform .3s var(--mola);
}
.prova-fig:hover img { border-color: var(--acento); }
.prova-fig:focus-visible { outline: none; box-shadow: var(--anel); }
.prova-fig-cap {
  display: flex; align-items: center; gap: 5px;
  margin-top: 6px; font-size: 11.5px; color: var(--tinta-3);
}
.prova-fig:hover .prova-fig-cap { color: var(--acento); }

/* Caminho do menu dentro da Meta, como migalha: Contas › Contas do WhatsApp */
.prova-caminho {
  display: flex; flex-wrap: wrap; align-items: center; gap: 4px;
  margin: 8px 0 0; font-size: 12px; color: var(--tinta-2);
}
.prova-caminho b {
  background: var(--superficie); padding: 2px 7px; border-radius: 5px;
  box-shadow: inset 0 0 0 1px var(--linha); font-weight: 600; white-space: nowrap;
}
.prova-caminho i { font-style: normal; color: var(--tinta-4); }

/* ---- visor de imagens ------------------------------------------------------ */
.visor {
  position: fixed; inset: 0; z-index: 300; display: none;
  background: rgba(8, 9, 22, .92);
  align-items: center; justify-content: center;
  padding: 64px 16px 72px;
}
.visor.aberto { display: flex; animation: aparece .15s; }
.visor-palco {
  max-width: min(1400px, 100%); max-height: 100%;
  display: grid; place-items: center; overflow: hidden;
}
.visor-img {
  max-width: 100%; max-height: 100%; display: block;
  border-radius: 8px; box-shadow: 0 24px 60px rgba(0, 0, 0, .55);
  transform-origin: center; transition: transform .16s var(--mola);
  cursor: zoom-in; touch-action: none; user-select: none; -webkit-user-drag: none;
}
.visor-img.ampliada { cursor: grab; }
.visor-img.ampliada:active { cursor: grabbing; transition: none; }

.visor-barra {
  position: absolute; top: 0; left: 0; right: 0; height: 56px;
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 0 16px; color: rgba(255, 255, 255, .8); font-size: 12.5px;
}
.visor-bts { display: flex; align-items: center; gap: 6px; margin-left: auto; }
.visor-bt {
  min-width: 34px; height: 34px; padding: 0 9px;
  display: grid; place-items: center; cursor: pointer;
  border: 0; border-radius: 9px; font-size: 16px; line-height: 1;
  background: rgba(255, 255, 255, .11); color: #fff;
  transition: background var(--transicao);
}
.visor-bt:hover { background: rgba(255, 255, 255, .2); }
.visor-nivel { font-size: 12px; font-variant-numeric: tabular-nums; }
.visor-fechar { font-size: 20px; }

.visor-seta {
  position: absolute; top: 50%; transform: translateY(-50%);
  width: 44px; height: 44px; display: grid; place-items: center; cursor: pointer;
  border: 0; border-radius: 50%; font-size: 26px; line-height: 1;
  background: rgba(255, 255, 255, .11); color: #fff;
  transition: background var(--transicao);
}
.visor-seta:hover { background: rgba(255, 255, 255, .22); }
.visor-ant { left: 14px; }
.visor-prox { right: 14px; }

.visor-legenda {
  position: absolute; left: 0; right: 0; bottom: 0; margin: 0;
  padding: 16px 20px; text-align: center;
  font-size: 13px; line-height: 1.5; color: rgba(255, 255, 255, .82);
}

@media (max-width: 620px) {
  .visor { padding: 56px 8px 84px; }
  .visor-seta { width: 38px; height: 38px; font-size: 22px; }
  .visor-ant { left: 6px; }
  .visor-prox { right: 6px; }
}

/* ---- medidor do teto mensal de IA (030) ----------------------------------
   Três estados, e a cor de cada um diz o que fazer: sem cor = siga; âmbar =
   olhe; vermelho = parou. Verde não entra aqui — nesta interface o verde é
   "está funcionando", e uma barra cheia de verde diria o contrário do que
   significa estar perto do limite.                                          */
.ia-medidor { margin-bottom: 12px; }
.ia-medidor-topo { display: flex; align-items: baseline; gap: 7px; margin-bottom: 7px; }
.ia-medidor-topo b { font-size: 24px; font-variant-numeric: tabular-nums; letter-spacing: -.02em; }
.ia-medidor-topo span { font-size: 13px; color: var(--tinta-2); }
.ia-medidor-pe { display: flex; justify-content: space-between; gap: 10px; margin-top: 6px; }

.ia-barra { height: 8px; border-radius: 99px; background: var(--linha); overflow: hidden; }
.ia-barra > span {
  display: block; height: 100%; border-radius: 99px;
  background: var(--acento); transition: width 420ms var(--mola);
}
.ia-alerta   .ia-barra > span { background: var(--aviso); }
.ia-estourou .ia-barra > span { background: var(--erro); }

.ia-recado {
  margin: 12px 0 0; padding: 10px 12px; border-radius: var(--raio-sm);
  font-size: 12.5px; line-height: 1.55;
  background: var(--aviso-suave); color: var(--aviso);
  border: 1px solid color-mix(in srgb, var(--aviso) 24%, transparent);
}
.ia-estourou .ia-recado {
  background: var(--erro-suave); color: var(--erro);
  border-color: color-mix(in srgb, var(--erro) 24%, transparent);
}
.ia-recado b { display: block; margin-bottom: 2px; }

.ia-historico { margin-top: 14px; font-size: 12px; }
.ia-historico summary { cursor: pointer; color: var(--tinta-3); }
.ia-historico summary:hover { color: var(--acento); }
.ia-historico table { margin-top: 10px; }

/* ---- estimativa do teto na tela de planos -------------------------------- */
.pl-estimativa {
  margin-top: 10px; padding: 11px 13px; border-radius: var(--raio-sm);
  background: var(--acento-suave); border: 1px solid var(--acento-linha);
  font-size: 12.5px;
}
.pl-estimativa.sem-teto { background: var(--aviso-suave); border-color: color-mix(in srgb, var(--aviso) 24%, transparent); }
.pl-estimativa.sem-teto p { color: var(--aviso); }
.pl-estimativa p { margin: 0; }
.pl-est-linha { font-variant-numeric: tabular-nums; }
.pl-est-linha.forte { font-size: 15px; font-weight: 650; color: var(--acento-texto); margin-top: 2px; }
.pl-est-nota { margin-top: 8px !important; line-height: 1.5; }
.pl-sem-teto { color: var(--aviso); }

/* ---- /admin/ia ------------------------------------------------------------ */
.ai-tela { display: flex; flex-direction: column; gap: 18px; }
.ai-meses { display: flex; gap: 6px; flex-wrap: wrap; }

.ai-totais {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  gap: 12px; padding: 16px 18px; border-bottom: 1px solid var(--linha);
}
.ai-total { display: flex; flex-direction: column; gap: 2px; }
.ai-total > span { font-size: 11px; color: var(--tinta-3); }
.ai-total > b { font-size: 22px; font-variant-numeric: tabular-nums; letter-spacing: -.02em; }
.ai-total > small { font-size: 11px; }
/* O que sai do bolso da plataforma é o número da tela, não mais um cartão. */
.ai-total-forte > b { color: var(--acento-texto); font-size: 26px; }

.ai-lista { padding-top: 0; }
.ai-lista .num { font-variant-numeric: tabular-nums; }
.ai-linha > td { vertical-align: top; }
.ai-barra { height: 6px; width: 110px; border-radius: 99px; background: var(--linha); overflow: hidden; margin-bottom: 3px; }
.ai-barra > span { display: block; height: 100%; border-radius: 99px; background: var(--acento); }
.ai-alerta   .ai-barra > span { background: var(--aviso); }
.ai-estourou .ai-barra > span { background: var(--erro); }
.ai-estourou > td:first-child { box-shadow: inset 3px 0 0 var(--erro); }
.ai-alerta   > td:first-child { box-shadow: inset 3px 0 0 var(--aviso); }

.ai-detalhe { background: var(--superficie-2); padding: 0 14px 12px; }
.tabela-interna { font-size: 12.5px; }
.tabela-interna th { color: var(--tinta-3); font-weight: 600; }
.ai-mes-atual { background: var(--acento-suave); }

.ai-nota { font-size: 12px; }
.ai-nota > summary { cursor: pointer; color: var(--tinta-3); padding: 2px; }
.ai-nota > summary:hover { color: var(--acento); }
.ai-nota-corpo {
  margin-top: 10px; padding: 14px 16px;
  border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie); line-height: 1.6;
}
.ai-nota-corpo p { margin: 0 0 10px; }
.ai-nota-corpo p:last-child { margin-bottom: 0; }
.ai-precos { margin: 0 0 12px; padding-left: 18px; display: flex; flex-direction: column; gap: 4px; }
.ai-precos b { font-variant-numeric: tabular-nums; }
.ai-env {
  margin: 0 0 12px; padding: 10px 12px; overflow-x: auto;
  border-radius: var(--raio-xs); background: var(--superficie-2);
  font-family: var(--mono); font-size: 11.5px; line-height: 1.7; color: var(--tinta-2);
}

@media (max-width: 700px) {
  .ai-barra { width: 70px; }
  .ai-total > b { font-size: 19px; }
  .ai-total-forte > b { font-size: 22px; }
}

/* =============================================================================
   Programa de indicação
   ========================================================================== */

/* ---- /indicacoes: a tela do gestor ---------------------------------------- */
.ind-tela { display: flex; flex-direction: column; gap: 16px; }

/* O link é a única coisa acionável da página: ganha o destaque do acento. */
.ind-link-card { border-color: var(--acento-linha); }
.ind-link {
  display: flex; gap: 10px; align-items: stretch; flex-wrap: wrap;
  padding: 12px 14px; border-radius: var(--raio-sm);
  background: var(--acento-suave); border: 1px solid var(--acento-linha);
}
.ind-link-url {
  flex: 1; min-width: 200px; display: flex; align-items: center;
  font-size: 14px; color: var(--acento-texto); font-weight: 600;
  overflow-wrap: anywhere;
}
.ind-link .btn { flex: none; }
.ind-codigo { margin: 10px 0 14px; }

.ind-numeros {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 14px; padding: 16px 18px;
}
.ind-num { display: flex; flex-direction: column; gap: 2px; }
.ind-num > span { font-size: 11px; color: var(--tinta-3); }
.ind-num > b { font-size: 22px; font-variant-numeric: tabular-nums; letter-spacing: -.02em; }
.ind-num > small { font-size: 11px; line-height: 1.4; }
/* Dias adiados é o número que faz mandar o link de novo. */
.ind-num-forte > b { font-size: 32px; color: var(--acento-texto); }

@media (max-width: 620px) {
  .ind-num-forte > b { font-size: 26px; }
  .ind-link .btn { width: 100%; justify-content: center; }
}

/* ---- fila de indicações no painel do admin -------------------------------- */
.ai-indicacoes .tabela td { vertical-align: top; }
.ind-fila-vazia { padding: 28px 24px; text-align: center; color: var(--tinta-3); font-size: 13px; }

/* =============================================================================
   Início: saudação enxuta, funil de conversão e evolução por etapa
   ========================================================================== */

/* ---- saudação: uma linha, não um cartão --------------------------------- */
.saud {
  display: flex; align-items: flex-end; gap: 18px; flex-wrap: wrap;
  margin-bottom: 16px;
}
.saud-txt { flex: 1; min-width: 260px; }
.saud-txt h2 { margin: 0 0 3px; font-size: 21px; letter-spacing: -.02em; }
.saud-txt p { margin: 0; font-size: 14px; line-height: 1.55; color: var(--tinta-2); max-width: 78ch; }
.saud-acoes { display: flex; gap: 8px; flex-wrap: wrap; }

/* ---- funil de conversão -------------------------------------------------
   Degraus centralizados, largura proporcional. A cor é uma RAMPA de um matiz
   só, clareando do topo para o fundo: etapa é dado ORDENADO, e degradê é a
   forma certa para ordem. Cinco matizes diferentes — um por etapa, como no
   quadro — não se separam no tema escuro (validado: ΔE abaixo do piso).
   O nome vai escrito dentro da barra, então a identidade nunca depende da cor. */
.fn-card { display: flex; flex-direction: column; }
.fn-taxa {
  margin-left: auto; text-align: right; padding: 7px 14px; border-radius: var(--raio-sm);
  background: var(--tinta); color: #fff; cursor: help;
}
.fn-taxa span { display: block; font-size: 9.5px; letter-spacing: .1em; text-transform: uppercase; opacity: .7; }
.fn-taxa b { display: block; font-size: 19px; line-height: 1.15; font-variant-numeric: tabular-nums; }

.fn-tabela { margin: 0 18px 16px; font-size: 12.5px; }
.fn-tabela summary { cursor: pointer; color: var(--tinta-3); padding: 4px 0; }
.fn-tabela summary:hover { color: var(--acento); }
.fn-tabela table { margin-top: 8px; }

@media (max-width: 560px) {
  .fn-degrau { min-width: 62%; }
  .fn-linha b { font-size: 18px; }
  .fn-pct-2 { display: none; }
}

/* ---- gráfico de evolução por etapa --------------------------------------
   Três séries, paleta categórica validada nos dois temas (skill dataviz):
   claro #3a3ac9/#1f9d8f/#c98a1f, escuro #6b6ef2/#2aa896/#bf871f. O âmbar fica
   abaixo de 3:1 contra a superfície clara — daí a legenda escrita e a tabela,
   que são o alívio exigido. */
:root {
  --s1: #3a3ac9;
  --s2: #1f9d8f;
  --s3: #c98a1f;
}
:root[data-tema="escuro"] {
  --s1: #6b6ef2;
  --s2: #2aa896;
  --s3: #bf871f;
}

.gr-card { display: flex; flex-direction: column; min-width: 0; }
.gr-legenda { display: flex; gap: 16px; flex-wrap: wrap; padding: 2px 18px 10px; font-size: 12.5px; color: var(--tinta-2); }
.gr-item { display: inline-flex; align-items: center; gap: 7px; }
.gr-cor { width: 9px; height: 9px; border-radius: 50%; flex: none; }
.gr-c1 { background: var(--s1); }
.gr-c2 { background: var(--s2); }
.gr-c3 { background: var(--s3); }

.gr-tela { position: relative; padding: 0 12px 8px; }
.gr-tela svg { display: block; width: 100%; height: 230px; overflow: visible; }

.gr-grade { stroke: var(--linha); stroke-width: 1; }
.gr-eixo { fill: var(--tinta-3); font-size: 10.5px; font-family: var(--sans); font-variant-numeric: tabular-nums; }
.gr-linha { fill: none; stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.gr-l1 { stroke: var(--s1); }
.gr-l2 { stroke: var(--s2); }
.gr-l3 { stroke: var(--s3); }
/* Área só sob a primeira série: duas áreas sobrepostas viram borrão. */
.gr-area { fill: var(--s1); opacity: .12; }

.gr-mira { stroke: var(--tinta-4); stroke-width: 1; stroke-dasharray: 3 3; }
/* Anel da cor da superfície nos pontos: sem ele, dois pontos que se cruzam
   viram uma mancha só. */
.gr-bolas circle { stroke: var(--superficie); stroke-width: 2; }

.gr-dica {
  position: absolute; z-index: 5; pointer-events: none;
  padding: 9px 11px; border-radius: var(--raio-xs); min-width: 132px;
  background: #14162b; color: #fff; font-size: 12px; line-height: 1.5;
  box-shadow: 0 10px 28px -10px rgba(0, 0, 0, .5);
  transform: translate(-50%, -100%); white-space: nowrap;
}
:root[data-tema="escuro"] .gr-dica { background: #2b2f4d; }
.gr-dica b { display: block; margin-bottom: 5px; font-size: 11.5px; opacity: .72; }
.gr-dica-l { display: flex; align-items: center; gap: 7px; font-variant-numeric: tabular-nums; }
.gr-dica-l i { width: 8px; height: 8px; border-radius: 50%; flex: none; }
.gr-dica-l span { margin-left: auto; font-weight: 700; padding-left: 12px; }

.rolagem-x { overflow-x: auto; }

@media (max-width: 900px) {
  .gr-tela svg { height: 200px; }
}

/* ---- selects da barra do funil ------------------------------------------
   Substituíram cinco botões que ocupavam duas fileiras. Aparência de campo,
   não de <select> do sistema: a seta é desenhada aqui para casar com o resto
   da barra, e o ícone à esquerda devolve a leitura rápida que os botões
   davam. */
.sel-campo {
  position: relative; display: inline-flex; align-items: center; flex: none;
  height: 34px; border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie); cursor: pointer;
  transition: border-color var(--transicao), box-shadow var(--transicao);
}
.sel-campo:hover { border-color: var(--linha-forte); }
.sel-campo:focus-within { border-color: var(--acento); box-shadow: var(--anel); }
.sel-ico {
  display: grid; place-items: center; width: 30px; flex: none;
  color: var(--tinta-3); pointer-events: none;
}
.sel-campo select {
  appearance: none; border: 0; background: none; outline: 0; cursor: pointer;
  height: 100%; padding: 0 30px 0 2px;
  font: 600 13px/1 var(--sans); color: var(--tinta);
}
/* A seta: pseudo-elemento em vez de background-image, para herdar a cor do
   tema sem uma segunda cópia do SVG em data-uri. */
.sel-campo::after {
  content: ""; position: absolute; right: 12px; top: 50%; width: 7px; height: 7px;
  border-right: 1.6px solid var(--tinta-4); border-bottom: 1.6px solid var(--tinta-4);
  transform: translateY(-70%) rotate(45deg); pointer-events: none;
}

/* Atualizar e Etapa andam juntos: eram eles que caíam para a linha de baixo
   quando a barra enchia. */
.funil-acoes { flex-wrap: nowrap; flex: none; }
.funil-acoes .btn { white-space: nowrap; }

@media (max-width: 720px) {
  .funil-acoes { margin-left: 0; width: 100%; }
  .funil-acoes .btn { flex: 1; justify-content: center; }
}

/* ---- coluna da esquerda: gráfico em cima, números embaixo --------------- */
.grade-hero > .col-esq { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
.col-esq .grade-stats { margin-bottom: 0; }
/* Cinco cartões numa coluna de 1.6fr ficariam estreitos demais para o número
   caber: viram duas fileiras, e a altura casa com a do funil ao lado. */
.col-esq .grade-stats-5 { grid-template-columns: repeat(auto-fit, minmax(128px, 1fr)); }

/* ---- o funil: trapézios encaixados --------------------------------------
   A base de cada degrau é o topo do seguinte — é isso que faz o desenho
   PARECER um funil, em vez de barras centralizadas de larguras diferentes.
   O recorte é clip-path para o texto continuar sendo HTML: selecionável,
   lido por leitor de tela e capaz de quebrar linha sozinho.                */
.fn-card { display: flex; flex-direction: column; }
.fn-funil { padding: 4px 16px 10px; display: flex; flex-direction: column; gap: 3px; flex: 1; }

.fn-seg { position: relative; min-height: 54px; flex: 1; display: flex; }
.fn-forma {
  position: absolute; inset: 0; background: var(--c);
  clip-path: var(--clip);
  transition: clip-path .5s var(--mola), background .3s ease;
}
/* O texto vive FORA do recorte: recortado junto, ele seria cortado nas bordas
   do trapézio justamente onde o degrau é mais estreito. */
.fn-txt {
  position: relative; z-index: 1; margin: auto; padding: 6px 10px;
  display: flex; flex-direction: column; align-items: center; gap: 1px;
  color: #fff; text-align: center; text-shadow: 0 1px 2px rgba(0, 0, 0, .22);
}
.fn-nome { font-size: 11px; font-weight: 700; letter-spacing: .05em; text-transform: uppercase; opacity: .95; }
.fn-linha { display: flex; align-items: baseline; gap: 7px; flex-wrap: wrap; justify-content: center; }
.fn-linha b { font-size: 19px; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.fn-pct { font-size: 11px; opacity: .88; }

.fn-taxa {
  margin-left: auto; text-align: right; padding: 6px 13px; border-radius: var(--raio-sm);
  background: var(--tinta); color: #fff; cursor: help;
}
.fn-taxa span { display: block; font-size: 9px; letter-spacing: .1em; text-transform: uppercase; opacity: .7; }
.fn-taxa b { display: block; font-size: 18px; line-height: 1.15; font-variant-numeric: tabular-nums; }

.fn-pe { padding: 0 16px 14px; }

@media (max-width: 900px) {
  .fn-seg { min-height: 46px; }
  .fn-linha b { font-size: 17px; }
}

/* ---- legenda que liga e desliga etapas ---------------------------------- */
.gr-legenda { display: flex; gap: 6px; flex-wrap: wrap; padding: 0 16px 8px; }
.gr-item {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  padding: 4px 10px 4px 8px; border-radius: 999px;
  border: 1px solid var(--linha); background: var(--superficie);
  font: 600 12px/1.4 var(--sans); color: var(--tinta-3);
  transition: border-color var(--transicao), color var(--transicao), background var(--transicao);
}
.gr-item:hover { border-color: var(--linha-forte); color: var(--tinta-2); }
.gr-item:focus-visible { outline: none; box-shadow: var(--anel); }
.gr-cor { width: 8px; height: 8px; border-radius: 50%; flex: none; background: var(--tinta-4); }

/* A cor segue o SLOT, não a etapa: a primeira ligada usa sempre a cor 1, então
   trocar uma etapa não repinta as outras duas. */
.gr-s1, .gr-s2, .gr-s3 { color: var(--tinta); background: var(--superficie-2); }
.gr-s1 { border-color: color-mix(in srgb, var(--s1) 52%, transparent); }
.gr-s2 { border-color: color-mix(in srgb, var(--s2) 52%, transparent); }
.gr-s3 { border-color: color-mix(in srgb, var(--s3) 52%, transparent); }
.gr-s1 .gr-cor { background: var(--s1); }
.gr-s2 .gr-cor { background: var(--s2); }
.gr-s3 .gr-cor { background: var(--s3); }
.gr-off .gr-cor { background: var(--tinta-4); opacity: .5; }

.gr-tela svg { height: 180px; }
.gr-area { fill: var(--s1); opacity: .11; }

/* ---- a janela das tabelas ----------------------------------------------
   Cresce com o conteúdo até 88% da altura e daí rola por dentro. Não é tela
   cheia: uma tabela de cinco linhas numa janela de 1920px deixa o dado perdido
   num canto e o resto vazio. */
.modal-tabela { width: min(760px, 94vw); max-height: 88vh; display: flex; flex-direction: column; }
.modal-tabela .modal-corpo { overflow: auto; padding: 0 0 8px; }
.modal-tabela table { width: 100%; }
/* Cabeçalho grudado no topo: numa tabela de 31 dias, rolar perdia a coluna. */
.modal-tabela thead th {
  position: sticky; top: 0; z-index: 1;
  background: var(--superficie); box-shadow: inset 0 -1px 0 var(--linha);
}

/* ---- cartões de número ---------------------------------------------------
   Uma anatomia só, em quatro faixas fixas: ícone + ⓘ · rótulo · número ·
   variação. Fixas de propósito — é o que faz os cinco cartões alinharem
   horizontalmente mesmo com rótulos de tamanhos diferentes. Antes o rótulo
   dividia a linha com o ícone, então um nome de duas palavras empurrava o
   número para baixo só naquele cartão e a fileira ficava torta.             */
.stat {
  padding: 15px 16px 14px;
  display: flex; flex-direction: column; gap: 0;
}
.stat-topo { display: flex; align-items: center; justify-content: space-between; margin-bottom: 12px; }

.stat-icone {
  width: 32px; height: 32px; flex: none; border-radius: 10px;
  display: grid; place-items: center;
  background: var(--acento-suave); color: var(--acento-texto);
}
/* Verde e vermelho só onde o estado é de fato bom ou ruim: "aceitos pela Meta"
   e "eventos com erro". Os outros três são contagem, não julgamento. */
.stat-icone.tom-ok   { background: var(--ok-suave);   color: var(--ok); }
.stat-icone.tom-erro { background: var(--erro-suave); color: var(--erro); }

.stat .info-alvo { color: var(--tinta-4); display: flex; cursor: help; }
.stat .info-alvo:hover { color: var(--tinta-2); }

/* Duas linhas reservadas para o rótulo: com uma só, "aceitos pela Meta"
   quebraria e desceria o número um degrau em relação aos vizinhos. */
.stat-rot {
  font-size: 11px; font-weight: 700; letter-spacing: .07em; text-transform: uppercase;
  color: var(--tinta-3); line-height: 1.35; min-height: 2.7em;
  display: flex; align-items: flex-start;
}

.stat-n {
  font-size: 34px; font-weight: 800; letter-spacing: -.035em; line-height: 1;
  font-variant-numeric: tabular-nums; margin-bottom: 10px;
}
.stat-n.ruim { color: var(--erro); }

.stat-pe { margin-top: auto; display: flex; flex-direction: column; gap: 1px; }
.stat-var {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 12.5px; font-weight: 700; font-variant-numeric: tabular-nums;
  color: var(--tinta-3);
}
.stat-var.sobe { color: var(--ok); }
.stat-var.desce { color: var(--erro); }
.stat-nota { font-size: 11.5px; color: var(--tinta-4); line-height: 1.35; }

/* O cartão em destaque: o único número que a Meta consegue medir. */
.stat.destaque .stat-rot,
.stat.destaque .stat-nota { color: rgba(255, 255, 255, .78); }
.stat.destaque .stat-var { color: rgba(255, 255, 255, .9); }
.stat.destaque .stat-icone { background: rgba(255, 255, 255, .17); color: #fff; }
.stat.destaque .info-alvo { color: rgba(255, 255, 255, .65); }
.stat.destaque .info-alvo:hover { color: #fff; }

@media (max-width: 520px) {
  .stat-n { font-size: 28px; }
  .stat-rot { min-height: 0; }
}

/* ---- porteira do vídeo antes de conectar --------------------------------
   Existe para evitar o chamado de suporte mais caro da tela de Conexões: quem
   não sabe o que esperar escolhe "criar número novo" na janela da Meta, ela
   responde que o número já está registrado, e o fluxo morre com o cliente do
   lado. */
.pt-modal .modal-corpo { display: flex; flex-direction: column; gap: 16px; }

.pt-video {
  position: relative; aspect-ratio: 16 / 9; border-radius: var(--raio-sm); overflow: hidden;
  background: var(--tinta); display: grid; place-items: center; cursor: pointer;
}
.pt-video img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transform: scale(1.35); }
.pt-video::after { content: ""; position: absolute; inset: 0; background: rgba(10, 14, 42, .42); transition: background .25s; }
.pt-video:hover::after { background: rgba(10, 14, 42, .3); }
.pt-video iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; z-index: 3; }
.pt-video.tocando::after, .pt-video.tocando .pt-play { display: none; }
.pt-play {
  position: relative; z-index: 2; display: grid; place-items: center;
  width: 66px; height: 66px; padding-left: 4px; border: 0; border-radius: 50%;
  background: #fff; color: var(--acento); cursor: pointer;
  box-shadow: 0 16px 34px -14px rgba(0, 0, 0, .6);
  transition: transform .25s var(--mola);
}
.pt-video:hover .pt-play { transform: scale(1.06); }

.pt-intro { margin: 0; font-size: 13.5px; font-weight: 600; color: var(--tinta-2); }

/* O rótulo inteiro é o alvo: acertar um quadradinho de 16px com o dedo é
   pedir demais, e é justamente o clique que destrava o botão.

   Por ser o que destrava, ela não pode parecer detalhe de rodapé. Vazia,
   pulsa em azul e diz o que falta; marcada, fica verde e para de chamar. */
.pt-check {
  display: flex; gap: 13px; align-items: center; cursor: pointer;
  padding: 16px 18px; border-radius: var(--raio-sm);
  border: 2px solid var(--acento); background: var(--acento-suave);
  font-size: 14px; line-height: 1.45;
  transition: border-color var(--transicao), background var(--transicao);
  animation: ptChama 2.2s ease-in-out infinite;
}
.pt-check:hover { background: color-mix(in srgb, var(--acento) 14%, var(--superficie)); }
.pt-check.marcado {
  border-color: var(--ok); background: var(--ok-suave); animation: none;
}
.pt-check input { position: absolute; opacity: 0; width: 0; height: 0; }

/* O anel pulsante sai do próprio box, e para assim que é marcado: alarme que
   continua depois de resolvido é alarme que se aprende a ignorar. */
@keyframes ptChama {
  0%, 100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--acento) 32%, transparent); }
  55%      { box-shadow: 0 0 0 7px color-mix(in srgb, var(--acento) 0%, transparent); }
}

.pt-box {
  flex: none; width: 26px; height: 26px; border-radius: 8px;
  border: 2px solid var(--acento); background: var(--superficie);
  display: grid; place-items: center; color: transparent;
  transition: background var(--transicao), border-color var(--transicao), color var(--transicao);
}
.pt-check.marcado .pt-box { background: var(--ok); border-color: var(--ok); color: #fff; }
.pt-check input:focus-visible + .pt-box { box-shadow: var(--anel); }

.pt-check-txt { display: flex; flex-direction: column; gap: 1px; }
.pt-check-txt b { font-size: 14.5px; color: var(--tinta); }
.pt-check-txt small { font-size: 12px; color: var(--acento-texto); font-weight: 600; }
.pt-check.marcado .pt-check-txt b { color: var(--ok); }

@media (prefers-reduced-motion: reduce) { .pt-check { animation: none; } }

.modal-pe { display: flex; gap: 10px; justify-content: flex-end; padding: 16px 20px; border-top: 1px solid var(--linha); }
.modal-pe .btn:disabled { opacity: .5; cursor: not-allowed; }

@media (max-width: 560px) {
  .pt-play { width: 54px; height: 54px; }
  .modal-pe { flex-direction: column-reverse; }
  .modal-pe .btn { width: 100%; justify-content: center; }
}


/* =============================================================================
   /admin/acessos — registros de acesso (Marco Civil art. 15)
   ========================================================================== */

.ac-tela { display: flex; flex-direction: column; gap: 16px; }

/* Os três números que respondem antes de qualquer filtro: há quanto tempo
   existe registro, quanto tem, e se alguém está martelando a porta. */
.ac-numeros { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; }
.ac-num {
  padding: 14px 16px; border: 1px solid var(--linha); border-radius: var(--raio-sm);
  background: var(--superficie-2); display: flex; flex-direction: column; gap: 4px;
}
.ac-num-rot { font-size: 12px; color: var(--tinta-3); }
.ac-num b { font-size: 21px; font-weight: 800; letter-spacing: -.02em; }
.ac-num .num { font-variant-numeric: tabular-nums; }
/* Recusa é estado de atenção, não decoração: só pinta quando há alguma. */
.ac-num-alerta { border-color: var(--linha-forte); background: var(--aviso-suave); }
.ac-num-alerta b { color: var(--aviso); }

.ac-aviso {
  display: flex; gap: 8px; align-items: flex-start; margin: 14px 0 0;
  font-size: 12.5px; line-height: 1.55; color: var(--tinta-3);
}
.ac-aviso svg { flex: none; margin-top: 2px; }

/* Filtros numa linha que quebra sozinha. O campo de data encolhe menos que os
   outros porque abaixo de ~150px o seletor nativo corta o ano. */
.ac-filtros {
  display: flex; flex-wrap: wrap; gap: 12px; align-items: flex-end; padding: 16px;
}
.ac-filtros .campo { flex: 1 1 170px; min-width: 0; margin: 0; gap: 6px; }
.ac-filtros .campo:has(input[type="date"]) { flex: 0 1 156px; }
.ac-filtros-acoes { display: flex; gap: 8px; flex: 0 0 auto; }

.ac-tabela td { vertical-align: middle; }
.ac-tabela .num { font-variant-numeric: tabular-nums; white-space: nowrap; }

/* A etiqueta do evento. Verde só no que é positivo — entrar é o caminho feliz;
   recusado é alerta; sair é neutro e não merece cor nenhuma. */
.ac-tag {
  display: inline-block; padding: 3px 9px; border-radius: 999px;
  font-size: 11.5px; font-weight: 700; white-space: nowrap;
  background: var(--superficie-3); color: var(--tinta-2);
}
.ac-entrou   { background: var(--ok-suave); color: var(--ok); }
.ac-recusado { background: var(--erro-suave); color: var(--erro); }

/* Não existe ícone "esquerda" no conjunto: o da direita girado evita inventar
   um segundo desenho para a mesma seta. */
.ac-volta { display: inline-flex; rotate: 180deg; }

.ac-paginas {
  display: flex; align-items: center; justify-content: center; gap: 14px;
  padding: 14px 16px; border-top: 1px solid var(--linha);
}

@media (max-width: 720px) {
  .ac-filtros .campo, .ac-filtros .campo:has(input[type="date"]) { flex: 1 1 100%; }
  .ac-filtros-acoes { width: 100%; }
  .ac-filtros-acoes .btn { flex: 1; justify-content: center; }
}

/* ---- marca na barra do topo, só no celular --------------------------------
   No desktop a marca mora na barra lateral. No celular a lateral é gaveta, e o
   topo ficava sem nada que dissesse de quem é a tela. O nome trunca em vez de
   empurrar os botões: numa barra de 360px o que não pode faltar é o alvo de
   toque, não a última letra do nome. */
.topbar-marca { display: none; }

@media (max-width: 760px) {
  .topbar-marca {
    display: flex; align-items: center; gap: 8px; min-width: 0; flex: 1 1 auto;
    text-decoration: none; color: inherit;
  }
  .topbar-marca img { width: 28px; height: 28px; border-radius: 8px; flex: none; }
  .tm-txt { display: flex; flex-direction: column; min-width: 0; line-height: 1.15; }
  .tm-txt b {
    font-size: 12.5px; font-weight: 800; letter-spacing: -.035em; color: var(--tinta);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  }
  .tm-txt i { font-style: normal; font-size: 10.5px; color: var(--tinta-3); }

  /* O `.espaco` empurrava as ações para a direita quando o título ocupava o
     meio. Com a marca crescendo no lugar dele, ele vira zero — senão sobra um
     vão que rouba a largura do nome. */
  .topbar .espaco { flex: 0 0 0; }
  .topbar .acoes { flex: none; }
}

/* O alternador de tema dentro do menu da conta. Herda a forma dos outros itens
   do menu (a mesma regra de .pop-acao) e só existe no celular: no desktop ele
   continua sendo o botão da barra, que é mais rápido. */
.pop-tema { display: none; cursor: pointer; font-family: inherit; text-align: left; }

@media (max-width: 760px) {
  .pop-tema {
    display: flex; align-items: center; gap: 10px; width: 100%; height: 36px; padding: 0 10px;
    border: 0; border-radius: var(--raio-xs); background: transparent;
    font-size: 13.5px; color: var(--tinta);
  }
  .pop-tema:hover { background: var(--superficie-2); }

  /* Só o da barra some; o do menu assume. Três ícones soltos numa barra de
     360px custavam 48px que o nome da marca precisava mais. */
  .topbar > .acoes > .tema-botao { display: none; }
}

/* =============================================================================
   /login — entrada
   =============================================================================

   Uma coluna centrada, não mais duas. O painel de venda ao lado fazia sentido
   quando a única porta de entrada era o convite de um gestor; com a página de
   vendas existindo, quem chega aqui já foi convencido — vem entrar, e a tela
   inteira deve servir a isso.

   Tudo abaixo do cartão (os três selos, a assinatura do rodapé) é secundário
   de propósito: aparece depois do que a pessoa veio fazer, e some antes dele
   quando a tela é baixa demais para os dois.
   ========================================================================== */

.ent {
  min-height: 100dvh;
  display: flex; flex-direction: column; align-items: center;
  padding: clamp(24px, 5vw, 48px) 20px clamp(28px, 5vw, 56px);
  background: var(--papel);
}

/* As manchas do fundo. `fixed` e não `absolute`: numa tela baixa a página
   rola, e mancha que rola junto vira sujeira passando. */
.ent-fundo { position: fixed; inset: 0; z-index: 0; overflow: hidden; pointer-events: none; }
.ent-blob { position: absolute; border-radius: 50%; filter: blur(70px); opacity: .5; }
.ent-blob.a {
  width: 46vw; height: 46vw; min-width: 320px; min-height: 320px;
  top: -16vw; left: -14vw;
  background: radial-gradient(circle, var(--acento-suave), transparent 68%);
}
.ent-blob.b {
  width: 40vw; height: 40vw; min-width: 280px; min-height: 280px;
  right: -12vw; bottom: -16vw;
  background: radial-gradient(circle, color-mix(in srgb, var(--acento) 22%, transparent), transparent 68%);
}

.ent-palco { position: relative; z-index: 1; width: 100%; max-width: 440px; display: flex; flex-direction: column; }

/* O botão de tema no canto, fora do fluxo do palco: ele não pertence à
   sequência marca → cartão → selos, e entrar nela empurraria a marca. */
.ent-tema {
  position: fixed; top: clamp(16px, 3vw, 28px); right: clamp(16px, 3vw, 28px); z-index: 3;
  width: 44px; height: 44px; display: grid; place-items: center;
  border: 1px solid var(--linha); border-radius: 14px;
  background: var(--superficie); color: var(--tinta-2); cursor: pointer;
  transition: border-color var(--transicao), color var(--transicao), background var(--transicao);
}
.ent-tema:hover { border-color: var(--acento-linha); color: var(--acento-texto); }
.ent-tema:focus-visible { outline: 2px solid var(--acento); outline-offset: 2px; }

/* ---- marca ---- */

.ent-marca { display: flex; flex-direction: column; align-items: center; text-align: center; margin-bottom: clamp(22px, 4vw, 34px); }
.ent-marca img {
  width: clamp(64px, 15vw, 84px); height: clamp(64px, 15vw, 84px);
  border-radius: clamp(18px, 4vw, 23px); margin-bottom: 16px;
  box-shadow: 0 26px 50px -26px color-mix(in srgb, var(--acento) 70%, transparent);
}
.ent-nome {
  margin: 0; font-family: "Bricolage Grotesque", var(--sans);
  font-size: clamp(27px, 7vw, 38px); font-weight: 800; line-height: 1.05;
  letter-spacing: -.04em; color: var(--tinta);
}
/* Espaçamento próprio, e não `space-between` esticando até a largura do nome.
   Esticar funcionava no cabeçalho, onde a assinatura é minúscula e o vão
   pequeno; aqui, com a linha em 300px, os vãos ficavam maiores que as palavras
   e o nome virava seis pedaços soltos. Centrada e com `gap`, o espaço é o
   mesmo em qualquer largura de tela. */
.ent-assina {
  display: flex; justify-content: center; flex-wrap: wrap; gap: .55em;
  margin-top: 9px;
  font: 400 clamp(10.5px, 2.7vw, 12.5px)/1.5 var(--mono); color: var(--tinta-4);
  text-decoration: none; border-bottom: 1px solid transparent; padding-bottom: 2px;
  transition: color var(--transicao), border-color var(--transicao);
}
.ent-assina i { font-style: normal; }
.ent-assina i:nth-child(4) { opacity: .5; }
.ent-assina:hover, .ent-assina:focus-visible { color: var(--acento-texto); border-bottom-color: var(--acento-linha); outline: none; }

/* ---- o cartão ---- */

.ent-cartao {
  background: var(--superficie); border: 1px solid var(--linha);
  border-radius: clamp(20px, 5vw, 28px); padding: clamp(24px, 6vw, 38px);
  box-shadow: 0 36px 70px -46px rgba(20, 22, 43, .5);
  display: flex; flex-direction: column; gap: 20px;
}
.ent-cartao h1 {
  margin: 0; text-align: center;
  font-family: "Bricolage Grotesque", var(--sans);
  font-size: clamp(22px, 5.4vw, 28px); font-weight: 800; letter-spacing: -.035em; line-height: 1.15;
  color: var(--tinta);
}
.ent-cartao .sub { margin: 7px 0 0; text-align: center; font-size: 15px; line-height: 1.5; color: var(--tinta-3); }
.ent-cartao form { display: flex; flex-direction: column; gap: 18px; }

.ent-rotulos { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
.ent-cartao label { font-size: 14px; font-weight: 700; color: var(--tinta); }
.ent-esqueci { font-size: 13.5px; font-weight: 600; }

/* Campo com ícone. O ícone é decoração funcional: diz o que o campo quer antes
   de a pessoa ler o rótulo, e por isso é aria-hidden — o rótulo já conta. */
.ent-campo { display: flex; flex-direction: column; gap: 8px; }
.ent-caixa { position: relative; }
.ent-caixa > svg {
  position: absolute; left: 15px; top: 50%; translate: 0 -50%;
  color: var(--tinta-4); pointer-events: none;
}
/* 54px e 16px: alvo de toque confortável, e abaixo de 16px o Safari do iPhone
   dá zoom sozinho ao focar o campo e a tela salta de lugar. */
.ent-caixa input {
  width: 100%; height: 54px; padding: 0 15px 0 46px;
  border: 1px solid var(--linha); border-radius: 14px;
  background: var(--superficie-2); color: var(--tinta);
  font: 400 16px/1 var(--sans); outline: 0;
  transition: border-color var(--transicao), box-shadow var(--transicao), background var(--transicao);
}
.ent-caixa input::placeholder { color: var(--tinta-4); }
.ent-caixa input:focus {
  border-color: var(--acento); background: var(--superficie);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--acento) 18%, transparent);
}
.ent-caixa.com-olho input { padding-right: 50px; }
.ent-olho {
  position: absolute; right: 8px; top: 50%; translate: 0 -50%;
  width: 36px; height: 36px; display: grid; place-items: center;
  border: 0; border-radius: 10px; background: transparent; color: var(--tinta-4); cursor: pointer;
}
.ent-olho:hover { color: var(--tinta-2); background: var(--superficie-3); }
.ent-olho:focus-visible { outline: 2px solid var(--acento); outline-offset: -2px; }

.ent-cartao .btn-primario {
  height: 54px; border-radius: 14px; font-size: 16px; font-weight: 700;
  gap: 10px; box-shadow: 0 16px 30px -16px color-mix(in srgb, var(--acento) 80%, transparent);
}

.ent-risco { height: 1px; background: var(--linha); margin: 2px 0; }
.ent-legais { margin: 0; text-align: center; font-size: 14px; }
.ent-legais a { font-weight: 600; }
.ent-legais span { color: var(--tinta-4); margin: 0 6px; }

/* ---- avisos e os outros modos ---- */

.ent-aviso {
  padding: 13px 15px; border: 1px solid var(--linha); border-radius: 12px;
  background: var(--superficie-2); font-size: 13.5px; line-height: 1.55; color: var(--tinta-2);
}
.ent-aviso b { color: var(--tinta); }
.ent-aviso.erro { background: var(--erro-suave); border-color: color-mix(in srgb, var(--erro) 30%, transparent); color: var(--erro); }
.ent-voltar { font-size: 14px; font-weight: 600; text-align: center; }
.ent-passos { display: flex; flex-direction: column; gap: 18px; }
.ent-ver { display: flex; align-items: center; gap: 9px; font-size: 14px; color: var(--tinta-2); cursor: pointer; }
.ent-ver input { width: 17px; height: 17px; accent-color: var(--acento); }

/* ---- os três selos ---- */

.ent-selos {
  list-style: none; margin: clamp(22px, 4vw, 32px) 0 0; padding: 0;
  display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;
}
.ent-selos li {
  display: flex; flex-direction: column; align-items: center; gap: 10px; text-align: center;
  font-size: 13px; line-height: 1.35; color: var(--tinta-3);
}
.ent-selos span {
  width: 44px; height: 44px; display: grid; place-items: center;
  border-radius: 13px; background: var(--acento-suave); color: var(--acento-texto);
}

/* ---- rodapé ---- */

.ent-pe { display: flex; flex-direction: column; align-items: center; gap: 14px; margin-top: clamp(26px, 5vw, 38px); }
.ent-pe i { display: block; width: 52px; height: 2px; border-radius: 2px; background: var(--linha-forte); }
.ent-pe small {
  font-size: 10.5px; font-weight: 600; letter-spacing: .18em; text-transform: uppercase;
  color: var(--tinta-4); text-align: center;
}

@media (max-width: 420px) {
  .ent-selos { gap: 6px; }
  .ent-selos li { font-size: 12px; }
  .ent-selos span { width: 40px; height: 40px; border-radius: 12px; }
}

/* Numa tela baixa (celular deitado), o cartão é a única coisa que precisa
   caber: o resto é enfeite e sai da frente. */
@media (max-height: 620px) {
  .ent-selos, .ent-pe { display: none; }
  .ent-marca img { width: 64px; height: 64px; border-radius: 18px; margin-bottom: 12px; }
}

/* ---- /insights: cabecalho do "Quem esta vendendo" -------------------------
   A frase de ajuda ocupa a linha inteira da grade do cabecalho; o contador de
   escondidos fica ao lado dela, porque so aparece quando ha algo escondido e
   nao pode empurrar o titulo quando nao ha. */
.niveis-ajuda {
  flex-basis: 100%; margin: 6px 0 0; font-size: 13px; line-height: 1.5; color: var(--tinta-3);
}
.niveis-ocultos {
  display: flex; align-items: center; gap: 8px;
  font-size: 12.5px; color: var(--tinta-3);
}
.niveis-ocultos > span {
  padding: 3px 9px; border-radius: 999px;
  background: var(--superficie-3); color: var(--tinta-2); font-weight: 600;
}
