/* ════════════════════════════════════════════════════════════════════════
   TrackFunnel · painel — sistema visual
   Densidade de FERRAMENTA, nao de leitura. Toda cor por token: cor fixa
   funciona no claro e quebra no escuro sem avisar. Zero !important.
   z-index so' por token.
   ════════════════════════════════════════════════════════════════════════ */

:root{--bg:#f8fafc;--surface:#fff;--border:#e2e8f0;--text:#0f172a;--text-dim:#64748b;
--accent:#2563eb;--ok:#15803d;--warn:#b45309;--bad:#b91c1c;
--font:system-ui,"Segoe UI",sans-serif;--font-mono:ui-monospace,Consolas,monospace;
--fs-base:14px;--fs-sm:12px;--lh:1.45;--sp-1:4px;--sp-2:8px;--sp-3:16px;
--radius:6px;--shadow:0 1px 2px rgba(15,23,42,.08)}
@media(prefers-color-scheme:dark){:root{--bg:#0f172a;--surface:#1e293b;--border:#334155;
--text:#e2e8f0;--text-dim:#94a3b8;--accent:#60a5fa;--ok:#4ade80;--warn:#facc15;--bad:#f87171;
--shadow:0 1px 2px rgba(0,0,0,.4)}}

:root{
  /* derivados — sempre a partir dos tokens acima */
  --linha-alt: color-mix(in srgb, var(--text) 3%, transparent);
  --realce:    color-mix(in srgb, var(--accent) 12%, transparent);
  --ok-fundo:  color-mix(in srgb, var(--ok) 14%, transparent);
  --warn-fundo:color-mix(in srgb, var(--warn) 16%, transparent);
  --bad-fundo: color-mix(in srgb, var(--bad) 14%, transparent);
  --esqueleto: color-mix(in srgb, var(--text) 9%, transparent);
  /* z-index: nunca um numero solto no meio do arquivo */
  --z-topo: 5;
  --z-veu: 10;
  --z-gaveta: 20;
  --z-pop: 30;
  --z-aviso: 40;
}

*,*::before,*::after{box-sizing:border-box}

html,body{margin:0;padding:0}
body{
  background:var(--bg);color:var(--text);
  font-family:var(--font);font-size:var(--fs-base);line-height:var(--lh);
  -webkit-text-size-adjust:100%;
}

a{color:var(--accent);text-decoration:none}
a:hover{text-decoration:underline}

:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}

code,.mono{font-family:var(--font-mono);font-size:var(--fs-sm)}

/* 🔴 especificidade DOBRADA de proposito. `[hidden]` sozinho tem a mesma
   especificidade de `.login`/`.gaveta`, e como as classes vem depois no
   arquivo elas venciam — o painel abria com a tela de login ainda por baixo.
   Dobrar o atributo resolve sem um unico `!important`. */
[hidden][hidden]{display:none}

/* ── topo ───────────────────────────────────────────────────────────── */

.topo{
  position:sticky;top:0;z-index:var(--z-topo);
  display:flex;align-items:center;gap:var(--sp-3);flex-wrap:wrap;
  padding:var(--sp-2) var(--sp-3);
  background:var(--surface);border-bottom:1px solid var(--border);box-shadow:var(--shadow);
}
.marca{font-weight:700;letter-spacing:-.01em;color:var(--text)}
.marca:hover{text-decoration:none}

.nav{display:flex;gap:var(--sp-1);flex:1 1 auto;flex-wrap:wrap}
.nav a{
  padding:var(--sp-1) var(--sp-2);border-radius:var(--radius);
  color:var(--text-dim);font-weight:500;
}
.nav a:hover{background:var(--linha-alt);text-decoration:none;color:var(--text)}
.nav a[aria-current="page"]{background:var(--realce);color:var(--accent)}

.topo-dir{display:flex;align-items:center;gap:var(--sp-2);margin-left:auto}
.quem{color:var(--text-dim);font-size:var(--fs-sm)}

.tela{padding:var(--sp-3);max-width:1400px;margin:0 auto}
.tela:focus{outline:none}

/* ── tipografia de secao ────────────────────────────────────────────── */

h1,h2,h3{margin:0;font-weight:600;letter-spacing:-.01em}
h1{font-size:18px}
h2{font-size:15px}
h3{font-size:13px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.04em}

.cabecalho-secao{
  display:flex;align-items:baseline;gap:var(--sp-2);flex-wrap:wrap;
  margin-bottom:var(--sp-3);
}
.cabecalho-secao .contagem{color:var(--text-dim);font-size:var(--fs-sm)}

/* ── cartao ─────────────────────────────────────────────────────────── */

.cartao{
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:var(--shadow);padding:var(--sp-3);
}
.cartao + .cartao{margin-top:var(--sp-3)}
.cartao-titulo{display:flex;align-items:center;gap:var(--sp-2);margin-bottom:var(--sp-2);flex-wrap:wrap}

.grade{display:grid;gap:var(--sp-3);grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}

/* ── botoes ─────────────────────────────────────────────────────────── */

.botao{
  font:inherit;font-size:var(--fs-sm);line-height:1.2;
  padding:6px 10px;border-radius:var(--radius);cursor:pointer;
  border:1px solid var(--border);background:var(--surface);color:var(--text);
}
.botao:hover:not(:disabled){border-color:var(--accent);color:var(--accent)}
.botao:disabled{opacity:.5;cursor:not-allowed}
.botao-primario{background:var(--accent);border-color:var(--accent);color:#fff}
.botao-primario:hover:not(:disabled){filter:brightness(1.08);color:#fff}
.botao-fantasma{border-color:transparent;background:transparent;color:var(--text-dim)}
.botao-perigo{border-color:var(--bad);color:var(--bad)}
.botao-perigo:hover:not(:disabled){background:var(--bad-fundo);color:var(--bad)}
.botao-mini{padding:2px 6px;font-size:var(--fs-sm)}
.acoes{display:flex;gap:var(--sp-1);flex-wrap:wrap;align-items:center}

/* botao girando: depois de alguns segundos ele mesmo diz que nao deu */
.botao[data-ocupado]{position:relative;color:transparent}
.botao[data-ocupado]::after{
  content:attr(data-ocupado);position:absolute;inset:0;
  display:flex;align-items:center;justify-content:center;color:var(--text);
}
.botao-primario[data-ocupado]::after{color:#fff}

/* ── formulario ─────────────────────────────────────────────────────── */

.campo{display:flex;flex-direction:column;gap:var(--sp-1);margin-bottom:var(--sp-2)}
.campo > span{font-size:var(--fs-sm);color:var(--text-dim)}
input,select,textarea{
  font:inherit;font-size:var(--fs-base);
  padding:6px 8px;border:1px solid var(--border);border-radius:var(--radius);
  background:var(--bg);color:var(--text);min-width:0;
}
textarea{resize:vertical}
.linha-filtros{display:flex;gap:var(--sp-2);flex-wrap:wrap;align-items:flex-end;margin-bottom:var(--sp-3)}
.linha-filtros .campo{margin-bottom:0}
.dica{color:var(--text-dim);font-size:var(--fs-sm);margin:var(--sp-2) 0 0}

/* ── tabela: linha de 32px ──────────────────────────────────────────── */

.rolagem{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}
table{border-collapse:collapse;width:100%;font-size:var(--fs-base)}
th,td{padding:6px 8px;text-align:left;border-bottom:1px solid var(--border);vertical-align:middle}
th{
  font-size:var(--fs-sm);font-weight:600;color:var(--text-dim);
  text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;
  position:sticky;top:0;background:var(--surface);z-index:1;
}
tbody tr:nth-child(even){background:var(--linha-alt)}
tbody tr:last-child td{border-bottom:none}
tbody tr[data-selecionada]{background:var(--realce)}
.num{text-align:right;font-variant-numeric:tabular-nums}
.nowrap{white-space:nowrap}

/* ── semaforo: NUNCA so' cor. Simbolo + palavra vao no HTML ─────────── */

.selo{
  display:inline-flex;align-items:center;gap:4px;
  padding:1px 6px;border-radius:999px;font-size:var(--fs-sm);font-weight:600;
  border:1px solid var(--border);white-space:nowrap;
}
.selo:hover{text-decoration:none}
.selo-simbolo{font-weight:700}
.selo-ok     {color:var(--ok);  background:var(--ok-fundo);  border-color:var(--ok)}
.selo-revisar{color:var(--warn);background:var(--warn-fundo);border-color:var(--warn)}
.selo-falhou {color:var(--bad); background:var(--bad-fundo); border-color:var(--bad)}
.selo-neutro {color:var(--text-dim)}
.selo-info   {color:var(--accent);background:var(--realce);border-color:var(--accent)}

.etiqueta{
  display:inline-block;padding:1px 6px;border:1px solid var(--border);
  border-radius:var(--radius);font-size:var(--fs-sm);color:var(--text-dim);
  white-space:nowrap;
}
.etiqueta + .etiqueta{margin-left:var(--sp-1)}

/* etiquetas de EVENTO (migration 018) — vem depois do nome da etapa, numa
   linha propria, para nao empurrar a coluna quando ha tres tags */
.etiquetas{display:block;margin-top:2px}
.etiquetas .etiqueta{margin-right:var(--sp-1)}
.etiquetas .etiqueta + .etiqueta{margin-left:0}
/* tag que nasceu da coleta e ninguem curou: em geral erro de digitacao na
   pagina. Tracejada porque tem de dar para ver que e' diferente sem ler */
.etiqueta-inativa{border-style:dashed;opacity:.7}
/* teste e' a unica etiqueta com cor: e' a que muda o significado do numero */
.etiqueta-teste{border-color:var(--warn);color:var(--warn);background:var(--warn-fundo)}

/* ── acoes irreversiveis (etapa 6) ───────────────────────────────────────
   🔴 O vermelho aqui NAO e decoracao. Excluir e fundir nao tem volta neste
   projeto (nao ha git), e o cartao precisa parecer diferente dos outros ANTES
   de a pessoa ler o texto do botao. */
.cartao-perigo{border-color:var(--bad)}
.cartao-perigo h3{color:var(--bad)}

.dim{color:var(--text-dim)}
.sm{font-size:var(--fs-sm)}

/* ── recado (erro, vazio, permissao) ────────────────────────────────── */

.recado{
  border:1px solid var(--border);border-left-width:3px;border-radius:var(--radius);
  padding:var(--sp-2) var(--sp-3);background:var(--surface);
}
.recado + .recado{margin-top:var(--sp-2)}
.recado p{margin:0 0 var(--sp-2)}
.recado p:last-child{margin-bottom:0}
.recado-falha{border-left-color:var(--bad)}
.recado-aviso{border-left-color:var(--warn)}
.recado-vazio{border-left-color:var(--text-dim);color:var(--text-dim)}
.recado-ok{border-left-color:var(--ok)}
.recado-titulo{font-weight:600;color:var(--text);margin-bottom:var(--sp-1)}

/* ── esqueleto: altura da linha real, nunca tela branca ─────────────── */

.esqueleto{
  height:20px;border-radius:3px;background:var(--esqueleto);
  animation:pulsar 1.2s ease-in-out infinite;
}
.esqueleto-linha{padding:6px 8px;border-bottom:1px solid var(--border)}
@keyframes pulsar{0%,100%{opacity:1}50%{opacity:.45}}
@media(prefers-reduced-motion:reduce){.esqueleto{animation:none}}

/* ── login ──────────────────────────────────────────────────────────── */

.login{display:flex;align-items:center;justify-content:center;min-height:100vh;padding:var(--sp-3)}
.login-cartao{width:100%;max-width:360px}
.login-marca{font-size:20px;margin-bottom:2px}
.login-sub{margin:0 0 var(--sp-3);color:var(--text-dim);font-size:var(--fs-sm)}
.login-cartao .botao{width:100%;padding:8px}
.login-cartao .recado{margin-bottom:var(--sp-3)}

/* ── gaveta lateral (ficha do alerta) ───────────────────────────────── */

.veu{position:fixed;inset:0;background:rgba(15,23,42,.4);z-index:var(--z-veu)}
.gaveta{
  position:fixed;top:0;right:0;bottom:0;width:min(560px,100%);
  z-index:var(--z-gaveta);overflow-y:auto;
  background:var(--surface);border-left:1px solid var(--border);
  box-shadow:-2px 0 12px rgba(15,23,42,.16);
  padding:var(--sp-3);
}
.gaveta-topo{
  display:flex;align-items:flex-start;gap:var(--sp-2);
  margin:0 0 var(--sp-3);
}
.gaveta-topo h2{flex:1 1 auto}
.gaveta h3{margin-top:var(--sp-3)}

.pares{display:grid;grid-template-columns:auto 1fr;gap:2px var(--sp-3);font-size:var(--fs-base)}
.pares dt{color:var(--text-dim);font-size:var(--fs-sm);white-space:nowrap}
.pares dd{margin:0;overflow-wrap:anywhere}

.lista-limpa{list-style:none;margin:var(--sp-2) 0 0;padding:0}
.lista-limpa li{padding:var(--sp-1) 0;border-bottom:1px solid var(--border)}
.lista-limpa li:last-child{border-bottom:none}

/* ── abas ───────────────────────────────────────────────────────────── */

.abas{display:flex;gap:var(--sp-1);border-bottom:1px solid var(--border);margin-bottom:var(--sp-3);flex-wrap:wrap}
.abas button{
  font:inherit;font-size:var(--fs-sm);font-weight:600;cursor:pointer;
  padding:var(--sp-2);border:none;background:none;color:var(--text-dim);
  border-bottom:2px solid transparent;margin-bottom:-1px;
}
.abas button[aria-selected="true"]{color:var(--accent);border-bottom-color:var(--accent)}

/* ── metricas: celular primeiro ─────────────────────────────────────── */

.numerao{font-size:26px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.rotulo{font-size:var(--fs-sm);color:var(--text-dim)}
.delta{font-size:var(--fs-sm);font-weight:600;white-space:nowrap}
.delta-sobe{color:var(--ok)}
.delta-desce{color:var(--bad)}
.delta-igual{color:var(--text-dim)}

.bloco-moeda{border:1px solid var(--border);border-radius:var(--radius);padding:var(--sp-3);background:var(--surface)}
.bloco-moeda + .bloco-moeda{margin-top:var(--sp-2)}
.moeda-nome{font-size:var(--fs-sm);color:var(--text-dim);letter-spacing:.06em}

.cartao-toque{cursor:pointer;text-align:left;width:100%;font:inherit;color:inherit}
.cartao-toque:hover{border-color:var(--accent)}

/* funil: barras. Horizontal no desktop, vertical no celular. */
.funil{display:flex;flex-direction:column;gap:var(--sp-2);margin-top:var(--sp-2)}
.funil-etapa{display:grid;grid-template-columns:140px 1fr auto;gap:var(--sp-2);align-items:center}
.funil-barra{background:var(--linha-alt);border-radius:3px;height:20px;overflow:hidden}
.funil-preenche{background:var(--accent);height:100%;min-width:2px}

/* ── avisos ─────────────────────────────────────────────────────────── */

.avisos{position:fixed;right:var(--sp-3);bottom:var(--sp-3);z-index:var(--z-aviso);
  display:flex;flex-direction:column;gap:var(--sp-2);max-width:min(380px,calc(100vw - 32px))}
.aviso{
  background:var(--surface);border:1px solid var(--border);border-left-width:3px;
  border-radius:var(--radius);box-shadow:var(--shadow);padding:var(--sp-2) var(--sp-3);
  font-size:var(--fs-sm);
}
.aviso-ok{border-left-color:var(--ok)}
.aviso-falha{border-left-color:var(--bad)}
.aviso-aviso{border-left-color:var(--warn)}

/* ── popover de motivo (resolver) ───────────────────────────────────── */

.pop{
  position:absolute;z-index:var(--z-pop);
  background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);
  box-shadow:0 4px 16px rgba(15,23,42,.18);padding:var(--sp-2);
  display:flex;flex-direction:column;gap:var(--sp-1);min-width:180px;
}
.pop-titulo{font-size:var(--fs-sm);color:var(--text-dim);padding:0 var(--sp-1)}

/* ── chave emitida: aparece UMA vez ─────────────────────────────────── */

.segredo{
  font-family:var(--font-mono);font-size:var(--fs-base);
  background:var(--bg);border:1px dashed var(--warn);border-radius:var(--radius);
  padding:var(--sp-2);overflow-wrap:anywhere;user-select:all;margin:var(--sp-2) 0;
}

/* ── celular ────────────────────────────────────────────────────────── */

@media(max-width:720px){
  .tela{padding:var(--sp-2)}
  .topo{gap:var(--sp-2)}
  .quem{display:none}
  .nav{order:3;width:100%}
  .nav a{flex:1 1 auto;text-align:center}

  /* tabela vira cards empilhados */
  .tabela-cartoes thead{display:none}
  .tabela-cartoes,.tabela-cartoes tbody,.tabela-cartoes tr,.tabela-cartoes td{display:block;width:100%}
  .tabela-cartoes tr{
    border:1px solid var(--border);border-radius:var(--radius);
    margin-bottom:var(--sp-2);padding:var(--sp-1);background:var(--surface);
  }
  .tabela-cartoes tr:nth-child(even){background:var(--surface)}
  .tabela-cartoes td{border-bottom:none;padding:3px var(--sp-2)}
  .tabela-cartoes td[data-rotulo]::before{
    content:attr(data-rotulo) " ";
    color:var(--text-dim);font-size:var(--fs-sm);
  }
  .tabela-cartoes td.num{text-align:left}
  .rolagem{border:none;background:none}

  /* funil horizontal vira barras verticais */
  .funil-etapa{grid-template-columns:1fr;gap:2px}
  .funil-barra{height:14px}

  .gaveta{width:100%;border-left:none}
  .avisos{left:var(--sp-2);right:var(--sp-2);max-width:none}
}

@media print{
  .topo,.acoes,.avisos,.veu{display:none}
  .cartao,.rolagem{box-shadow:none}
}

/* trilha: linha curta que abre o evento inteiro ao clicar */
.clicavel{cursor:pointer}
.clicavel:hover{background:color-mix(in srgb,var(--accent) 7%,transparent)}
.clicavel:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.linha-detalhe>td{background:var(--bg);padding:var(--sp-3)}
.pares-detalhe{display:grid;grid-template-columns:auto 1fr;gap:var(--sp-1) var(--sp-3);margin:0}
.pares-detalhe dd{margin:0;word-break:break-all}
@media(max-width:640px){.pares-detalhe{grid-template-columns:1fr}
  .pares-detalhe dt{margin-top:var(--sp-2)}}

/* dash: contadores da janela — cartoes pequenos, muitos por linha */
.grade-num{display:grid;gap:var(--sp-2);margin-bottom:var(--sp-3);
  grid-template-columns:repeat(auto-fit,minmax(110px,1fr))}
.grade-num .numerao{font-size:22px}
.campo-inline{flex-direction:row;align-items:center;gap:var(--sp-2)}
.campo-inline input{margin:0}
