/* ===========================================================================
   CASCA DA APLICAÇÃO — Gestão 360
   ---------------------------------------------------------------------------
   O layout é o do sistema de referência (Ref/projetos.html): lateral escura
   fixa à esquerda, barra superior de 52px, e a página com limite de largura
   no meio. As medidas de corte da lateral são as mesmas — 1180px ela vira só
   ícones, 760px ela sai e vira gaveta.

   Aqui só mora ESTRUTURA e as peças que a primeira tela usa de verdade.
   Componente que ainda não existe não tem CSS neste arquivo: aba, ficha,
   linha do tempo e modal de formulário entram quando a tela que os usa
   entrar. CSS de tela que não existe é CSS que ninguém conserta.

   Cor, tamanho, espaço e raio vêm todos de tokens.css. Valor cru aqui só
   aparece onde não existe token: os tons de dentro da lateral escura, que é
   a única superfície escura do sistema.
   =========================================================================== */

/* ============================================================
   1. A CASCA
   ============================================================ */

.app-casca, #casca { display: flex; min-height: 100vh; align-items: stretch; }

/* width:100% junto do flex:1 — sem ele um filho sem largura explícita
   encolhe para o tamanho do conteúdo em vez de ocupar a coluna. */
.conteudo {
  flex: 1 1 auto; min-width: 0; width: 100%;
  display: flex; flex-direction: column; align-items: stretch;
}

.pagina {
  width: 100%; max-width: var(--content-max);
  margin: 0 auto; padding: var(--space-6);
}

/* ============================================================
   2. LATERAL
   ------------------------------------------------------------
   A única superfície escura do sistema: --violet-950 (#230A38),
   o fundo do roxo da marca. Os tons de texto de dentro dela são
   valores crus de propósito — não existem tokens para "texto
   claro sobre roxo escuro", e inventar seis tokens usados num
   lugar só seria pior. Todos foram medidos:
     item        #B9AEC7   8,48:1
     categoria   #CFC6DA  10,87:1
     grupo       #9C8DAF   5,84:1
     inerte      #8B7BA0   4,64:1
     ativo       #FFFFFF  17,92:1
   ============================================================ */

.lateral {
  flex: 0 0 var(--sidebar-width); width: var(--sidebar-width);
  background: var(--violet-950);
  padding: var(--space-5) 14px var(--space-4);
  display: flex; flex-direction: column; gap: var(--space-1);
  position: sticky; top: 0; height: 100vh; overflow: hidden;
}

/* A marca da lateral: a assinatura da Elaine, na versão "escuro" — o nome do
   arquivo diz o FUNDO a que ela se destina, não a cor da tinta dela. Abaixo,
   "Gestão 360" em ouro: a assinatura diz de quem é o sistema, esta linha diz
   qual sistema é.

   A assinatura é 640x129 (quase 5:1). Ocupa a largura toda da lateral menos o
   respiro lateral — é uma peça horizontal e espremê-la a meia largura só a
   deixaria ilegível sem ganhar nada. */
.lateral__marca {
  flex: 0 0 auto; padding: 0 10px var(--space-5);
  display: flex; flex-direction: column; align-items: flex-start; gap: var(--space-3);
  text-decoration: none; border-radius: var(--radius);
}
.lateral__marca img {
  display: block; width: 100%; height: auto;
}
.lateral__marca span {
  font-size: var(--text-xs); font-weight: var(--weight-medium);
  letter-spacing: var(--track-caps); text-transform: uppercase;
  color: var(--gold-300);
}

.lateral__rolagem {
  flex: 1 1 auto; overflow-y: auto; overflow-x: hidden;
  margin: 0 -6px; padding: 0 6px;
}
.lateral__rolagem::-webkit-scrollbar { width: 6px; }
.lateral__rolagem::-webkit-scrollbar-thumb { background: #3E2C57; border-radius: 999px; }

/* text-decoration:none NÃO é detalhe aqui. Os itens de primeiro nível são
   <a href> de verdade (é o que dá URL a cada tela), e âncora vem sublinhada do
   navegador. Sem esta linha, Painel, Aplicações e Carteira aparecem com um
   risco embaixo de cada um — que foi exatamente o que aconteceu quando o menu
   deixou de ser feito de <button>. */
.nav-l {
  display: flex; align-items: center; gap: 10px;
  width: 100%; height: 40px; padding: 0 12px;
  border: 0; background: transparent; border-radius: var(--radius);
  color: #B9AEC7; cursor: pointer; position: relative;
  font-family: var(--font-sans); font-size: var(--text-sm);
  text-align: left; white-space: nowrap; text-decoration: none;
  transition: background var(--duration-fast) var(--ease);
}
.nav-l:hover { text-decoration: none; }
.nav-l:hover  { background: rgba(255,255,255,.06); }
.nav-l:active { background: rgba(255,255,255,.10); }
.nav-l svg { flex: 0 0 18px; }

/* A PÁGINA ABERTA. Fundo cheio mais barra à esquerda, e esta aparência é
   EXCLUSIVA disto — é o que responde "onde eu estou". Categoria que contém a
   página aberta não usa nada disso: duas coisas diferentes com a mesma cara
   era metade da confusão do menu anterior. */
.nav-l--ativa { background: rgba(145,106,180,.28); color: #fff; font-weight: var(--weight-medium); }
.nav-l--ativa::before {
  content: ""; position: absolute; left: 0; top: 8px;
  width: 3px; height: 24px; background: var(--violet-300); border-radius: 0 2px 2px 0;
}

/* O número no próprio item — ver "3" em Aplicações sem abrir nada é metade do
   motivo de um menu existir. */
.nav-l__conta {
  margin-left: auto; min-width: 20px; padding: 1px 6px; border-radius: var(--radius-full);
  background: rgba(255,255,255,.10); color: #CFC6DA;
  font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 600;
  font-variant-numeric: tabular-nums; text-align: center;
}
.nav-l--ativa .nav-l__conta { background: rgba(255,255,255,.20); color: #fff; }

/* O rótulo que separa o que funciona do que não existe. É a informação mais
   importante do menu, então é um RÓTULO e não um botão: rótulo não se clica,
   e por isso ninguém espera que ele leve a algum lugar. */
.nav-grupo {
  font-size: var(--text-xs); font-weight: var(--weight-medium);
  letter-spacing: var(--track-caps); text-transform: uppercase;
  color: #9C8DAF; padding: var(--space-6) 12px var(--space-2); white-space: nowrap;
}

/* A pasta do que ainda não existe. Nunca ganha fundo nem barra: ela não é
   destino nenhum, só abre e fecha. */
.nav-l--cat { color: #B9AEC7; }
.nav-l--cat .nav-l__seta { margin-left: auto; display: flex; transition: transform var(--duration) var(--ease); }
.nav-l--cat[aria-expanded="true"] { color: #fff; }
.nav-l--cat[aria-expanded="true"] .nav-l__seta { transform: rotate(90deg); }

/* DENTRO. A guia vertical à esquerda é o que faz "dentro" ser visível — a
   versão anterior indentava 2px, que não é hierarquia, é desalinhamento. */
.nav-sub {
  margin: 2px 0 var(--space-2) 21px;
  padding-left: 10px;
  border-left: 1px solid #3E2C57;
  display: flex; flex-direction: column; gap: 1px;
}
.nav-sub .nav-l { height: 34px; font-size: var(--text-sm); }

/* Item que ainda não existe. Não basta ficar apagado — leva a palavra
   "depois" ao lado, porque apagado sozinho é cor, e cor sozinha não
   informa (regra 3 de tokens.css). */
.nav-l--inerte { color: #8B7BA0; cursor: default; }
.nav-l--inerte:hover { background: rgba(255,255,255,.04); }
.nav-l__depois {
  margin-left: auto; font-size: var(--text-xs); font-weight: var(--weight-medium);
  letter-spacing: var(--track-wide); color: #8B7BA0;
}

/* 1180 = a lateral vira só ícones. 760 = sai da página e vira gaveta. */
@media (max-width: 1179px) {
  .lateral { flex-basis: 76px; width: 76px; padding-left: 10px; padding-right: 10px; }
  .lateral .rot, .lateral .nav-grupo, .lateral .nav-l__seta,
  .lateral .nav-l__depois { display: none; }
  /* Com 76px de coluna, a assinatura (quase 5:1) sairia com 11px de altura —
     um rabisco, não uma assinatura. Então ela SAI, e o lugar dela fica com o
     "Q" da MQS, que é o único símbolo quadrado da marca e sobrevive a 44px.
     Trocar de peça é melhor do que mostrar a mesma peça ilegível. */
  .lateral__marca { align-items: center; padding-left: 0; padding-right: 0; }
  .lateral__marca img { display: none; }
  .lateral__marca::before {
    content: ""; display: block; width: 44px; height: 44px;
    background: url("logos/favicon.png") center / contain no-repeat;
  }
  .nav-l { justify-content: center; padding: 0; }
  /* Sem os rótulos, a guia vertical não tem o que guiar: os filhos viram
     ícones soltos e o recuo só desalinharia a coluna. */
  .nav-sub { margin: 0; padding: 0; border-left: 0; }
}

/* ------------------------------------------------------------
   Gaveta no celular. A referência apenas esconde a lateral
   abaixo de 760px e não devolve nenhum caminho para o menu —
   num tablet em retrato o sistema fica sem navegação. Aqui ela
   volta como gaveta, com véu e Esc.
   ------------------------------------------------------------ */
.abrir-menu { display: none; }
.veu-menu   { display: none; }

@media (max-width: 759px) {
  .lateral {
    position: fixed; top: 0; left: 0; z-index: 50;
    flex-basis: auto; width: min(280px, 84vw); padding: var(--space-5) 14px var(--space-4);
    transform: translateX(-100%); transition: transform var(--duration) var(--ease);
  }
  body.menu-aberto .lateral { transform: none; box-shadow: var(--shadow-modal); }
  /* Na gaveta a lateral volta a ser larga, então os rótulos e a guia
     vertical dos filhos voltam junto. */
  .lateral .rot, .lateral .nav-grupo, .lateral .nav-l__seta,
  .lateral .nav-l__depois { display: revert; }
  /* Na gaveta a lateral volta a ser larga: a assinatura volta e o "Q" sai. */
  .lateral__marca { align-items: flex-start; padding-left: 10px; padding-right: 10px; }
  .lateral__marca img { display: block; }
  .lateral__marca::before { content: none; }
  .nav-sub {
    margin: 2px 0 var(--space-2) 21px; padding-left: 10px;
    border-left: 1px solid #3E2C57;
  }

  .abrir-menu {
    display: inline-flex; align-items: center; justify-content: center;
    flex: 0 0 auto; width: 36px; height: 36px; margin-left: -6px;
    border: 1px solid var(--border); border-radius: var(--radius);
    background: var(--bg-surface); color: var(--text); cursor: pointer;
  }
  .veu-menu { position: fixed; inset: 0; z-index: 45; background: rgba(33,24,48,.42); }
  body.menu-aberto .veu-menu { display: block; }
  body.menu-aberto { overflow: hidden; }
}

/* ============================================================
   3. BARRA SUPERIOR
   ============================================================ */

.topo {
  height: var(--topbar-height); flex: 0 0 var(--topbar-height);
  border-bottom: 1px solid var(--border); background: var(--bg-surface);
  display: flex; align-items: center; gap: var(--space-3);
  padding: 0 var(--space-6); position: sticky; top: 0; z-index: 20;
}
.topo__titulo { font-size: var(--text-base); font-weight: var(--weight-bold); letter-spacing: var(--track-tight); }
.topo__espaco { flex: 1; }
/* O carimbo de leitura. Veio do pé da lateral, onde ficava depois de um vão
   vazio e de um traço que não separava nada. Aqui ele está junto do resto do
   estado da tela, que é onde a pessoa procura. */
.topo__estado {
  display: inline-flex; align-items: center; gap: 6px; white-space: nowrap;
  font-size: var(--text-xs); color: var(--text-muted);
  padding-right: var(--space-3); border-right: 1px solid var(--border);
}
.topo__usuario { font-size: var(--text-xs); color: var(--text-muted); white-space: nowrap; }
@media (max-width: 900px) { .topo__estado { display: none; } }
@media (max-width: 640px) { .topo { padding: 0 var(--space-4); } .topo__usuario { display: none; } }

/* ============================================================
   4. CABEÇALHO DE PÁGINA
   ============================================================ */

.pagina__cabecalho {
  display: flex; align-items: baseline; gap: var(--space-3);
  margin-bottom: var(--space-5); flex-wrap: wrap;
}
.pagina__resumo { margin-left: auto; font-size: var(--text-xs); color: var(--text-muted); }
.pagina__resumo strong { color: var(--text); font-variant-numeric: tabular-nums; }

/* ============================================================
   5. BOTÕES E CAMPOS
   ============================================================ */

.linha-botoes { display: flex; gap: var(--space-2); align-items: center; flex-wrap: wrap; }

.btn {
  height: var(--control-height); min-height: var(--tap-min);
  padding: 0 var(--space-4); border-radius: var(--radius);
  font-family: var(--font-sans); font-size: var(--text-sm); font-weight: var(--weight-medium);
  border: 1px solid transparent; cursor: pointer;
  display: inline-flex; align-items: center; justify-content: center; gap: var(--space-2);
  white-space: nowrap; text-decoration: none;
  transition: background var(--duration-fast) var(--ease);
}
.btn--primario   { background: var(--action); color: var(--text-invert); }
.btn--primario:hover:not(:disabled) { background: var(--action-hover); }
.btn--secundario { background: var(--bg-surface); color: var(--text); border-color: var(--border-strong); }
.btn--secundario:hover:not(:disabled) { background: var(--bg-hover); }
.btn--terciario  { background: transparent; color: var(--text-link); padding: 0 var(--space-2); }
.btn--terciario:hover:not(:disabled) { text-decoration: underline; }
.btn--perigo     { background: var(--bg-surface); color: var(--danger); border-color: var(--danger-line); }
.btn--perigo:hover:not(:disabled) { background: var(--danger-bg); }
.btn:disabled { opacity: .5; cursor: not-allowed; }

input[type=text], input[type=email], input[type=password], input[type=tel],
input[type=number], select, textarea {
  width: 100%; height: var(--control-height); padding: 0 var(--space-3);
  font-family: var(--font-sans); font-size: var(--text-sm); color: var(--text);
  background: var(--bg-surface); border: 1px solid var(--border-strong);
  border-radius: var(--radius);
}
textarea { height: auto; padding: var(--space-2) var(--space-3); resize: vertical; }
input:disabled, select:disabled { background: var(--bg-sunken); color: var(--text-disabled); }
input::placeholder, textarea::placeholder { color: var(--text-disabled); }

/* ============================================================
   6. CARTÃO, AVISO
   ============================================================ */

.cartao {
  background: var(--bg-surface); border: 1px solid var(--border);
  border-radius: var(--radius); padding: var(--space-5);
}
.cartao__titulo {
  display: flex; align-items: baseline; gap: var(--space-2);
  font-size: var(--text-sm); font-weight: var(--weight-bold);
  margin-bottom: var(--space-4);
}
.cartao__titulo small {
  margin-left: auto; font-size: var(--text-xs); font-weight: var(--weight-normal);
  color: var(--text-muted); letter-spacing: 0;
}

/* O cartão que é link. É a única peça do sistema que usa sombra em estado
   parado, e a regra 4 de tokens.css abre essa exceção justamente para ele:
   a sombra é o que diz que a peça se levanta, e levantar é o que um link faz.
   Cartão parado com sombra continua proibido. */
a.cartao--link {
  display: block; text-decoration: none; color: inherit;
  transition: border-color var(--duration) var(--ease), box-shadow var(--duration) var(--ease);
}
a.cartao--link:hover { border-color: var(--violet-400); box-shadow: var(--shadow-raise); }
a.cartao--link:hover .rot { color: var(--text); }

/* A tarja de aviso dentro da página. Saiu na primeira entrega, porque
   nenhuma tela mostrava uma; voltou com a Mentoria, que precisa avisar
   que o navegador é o único lugar onde a aplicação está guardada. */
.aviso {
  display: flex; gap: var(--space-3); align-items: flex-start;
  padding: var(--space-3) var(--space-4); margin-bottom: var(--space-4);
  border: 1px solid var(--border); border-radius: var(--radius);
  font-size: var(--text-sm); line-height: 1.55;
}
.aviso svg { flex: 0 0 auto; margin-top: 2px; }
.aviso--erro   { background: var(--danger-bg);  border-color: var(--danger-line);  color: var(--danger); }
.aviso--alerta { background: var(--warning-bg); border-color: var(--warning-line); color: var(--warning); }
.aviso--ok     { background: var(--success-bg); border-color: var(--success-line); color: var(--success); }
.aviso--info   { background: var(--info-bg);    border-color: var(--info-line);    color: var(--violet-800); }
.aviso b, .aviso strong { color: inherit; }
.aviso a { color: inherit; }

/* ============================================================
   6b. O FLUXO — a peça que responde "o que é o quê"
   ------------------------------------------------------------
   Quatro passos, sempre os mesmos, com o atual marcado. Está no
   topo da Mentoria e da Carteira porque são as telas onde a
   pessoa precisa saber de onde veio o que está vendo e para
   onde aquilo vai. Não é enfeite: é a resposta à reclamação
   que originou esta parte do sistema.
   ============================================================ */

.fluxo {
  display: flex; align-items: stretch; gap: var(--space-1);
  margin-bottom: var(--space-5); flex-wrap: wrap;
}
.fluxo__passo {
  display: flex; align-items: center; gap: var(--space-2); min-width: 0;
  flex: 1 1 150px; padding: var(--space-2) var(--space-3);
  border: 1px solid var(--border); border-radius: var(--radius);
  background: var(--bg-surface); text-decoration: none; color: var(--text-muted);
}
a.fluxo__passo:hover { background: var(--bg-hover); color: var(--text); }
.fluxo__passo--atual {
  border-color: var(--action); background: var(--bg-selected); color: var(--text);
  box-shadow: inset 2px 0 0 var(--action);
}
.fluxo__passo--depois { border-style: dashed; background: transparent; }
.fluxo__n {
  flex: 0 0 20px; display: grid; place-items: center; width: 20px; height: 20px;
  border-radius: var(--radius-full); background: var(--bg-sunken);
  border: 1px solid var(--border); font-size: var(--text-xs);
  font-weight: var(--weight-medium); font-variant-numeric: tabular-nums;
}
.fluxo__passo--atual .fluxo__n { background: var(--action); border-color: var(--action); color: #fff; }
.fluxo__txt { min-width: 0; }
.fluxo__txt b {
  display: block; font-size: var(--text-sm); font-weight: var(--weight-medium);
  color: var(--text); line-height: 1.3;
}
.fluxo__passo--depois .fluxo__txt b { color: var(--text-muted); }
.fluxo__txt b i {
  font-style: normal; font-family: var(--font-mono); font-variant-numeric: tabular-nums;
  color: var(--action); font-weight: 600;
}
.fluxo__txt small {
  display: block; font-size: var(--text-xs); color: var(--text-muted);
  line-height: 1.35; margin-top: 1px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.fluxo__seta { display: grid; place-items: center; color: var(--text-disabled); flex: 0 0 auto; }
@media (max-width: 720px) {
  .fluxo__seta { display: none; }
  .fluxo__passo { flex: 1 1 100%; }
}

/* ============================================================
   6c. ABAS DE FILTRO
   ------------------------------------------------------------
   Usadas para filtrar por estado. Abas e não um <select>: com
   três opções, o select esconde duas e obriga a abrir para
   saber quais são — e o número ao lado de cada uma é metade da
   informação da tela.
   ============================================================ */

.abas {
  display: flex; gap: 0; overflow-x: auto;
  border-bottom: 1px solid var(--border); margin-bottom: var(--space-4);
}
.aba {
  display: inline-flex; align-items: center; gap: var(--space-2);
  height: 36px; min-height: var(--tap-min); padding: 0 var(--space-4);
  border: 0; background: transparent; cursor: pointer; white-space: nowrap;
  font-family: var(--font-sans); font-size: var(--text-sm); color: var(--text-muted);
  border-bottom: 2px solid transparent; margin-bottom: -1px;
}
.aba:hover { color: var(--text); }
.aba__n {
  font-family: var(--font-mono); font-size: var(--text-xs); font-weight: 600;
  font-variant-numeric: tabular-nums; padding: 1px 6px; border-radius: var(--radius-full);
  background: var(--gray-100); color: var(--text-muted);
}
.aba--ativa { color: var(--text); font-weight: var(--weight-medium); border-bottom-color: var(--action); }
.aba--ativa .aba__n { background: var(--bg-selected); color: var(--action); }

/* ============================================================
   7. NÍVEL — as quatro faixas de maturidade
   ------------------------------------------------------------
   Quem manda nos cortes é faixas.js; aqui só mora a cor. E ela
   nunca vem sozinha: o crachá carrega a palavra e a linha traz
   o número ao lado.
   ============================================================ */

.n1 { --nivel: var(--nivel-crit);    --nivel-bg: var(--nivel-crit-bg);    }
.n2 { --nivel: var(--nivel-atencao); --nivel-bg: var(--nivel-atencao-bg); }
.n3 { --nivel: var(--nivel-bom);     --nivel-bg: var(--nivel-bom-bg);     }
.n4 { --nivel: var(--nivel-ref);     --nivel-bg: var(--nivel-ref-bg);     }

.cracha {
  display: inline-flex; align-items: center; height: 20px; padding: 0 10px;
  border-radius: var(--radius-full); font-size: var(--text-xs);
  font-weight: var(--weight-medium); white-space: nowrap;
  background: var(--nivel-bg, var(--gray-100)); color: var(--nivel, var(--text-muted));
}
.cracha--neutro { background: var(--gray-100); color: var(--text-muted); }

/* ============================================================
   8. NÚMERO GRANDE E BARRA
   ============================================================ */

.kpis {
  display: grid; grid-template-columns: repeat(4, minmax(0,1fr));
  gap: var(--space-4); margin-bottom: var(--space-5);
}
@media (max-width: 1100px) { .kpis { grid-template-columns: repeat(2, minmax(0,1fr)); } }
@media (max-width: 560px)  { .kpis { grid-template-columns: 1fr; } }

.rot {
  display: block; font-size: var(--text-xs); font-weight: var(--weight-medium);
  letter-spacing: var(--track-wide); color: var(--text-muted);
}
.val {
  display: block; font-family: var(--font-display);
  font-size: var(--text-3xl); font-weight: var(--weight-normal);
  line-height: 1.05; letter-spacing: var(--track-tight);
  font-variant-numeric: tabular-nums; color: var(--nivel, var(--action));
  margin: var(--space-2) 0 0;
}
.val small { font-size: var(--text-base); color: var(--text-muted); font-weight: var(--weight-normal); }
/* Quando o valor é uma palavra, e não um número, a escala é outra:
   42px de texto vira manchete, não indicador. */
.val--texto { font-family: var(--font-sans); font-size: var(--text-lg); font-weight: var(--weight-bold); line-height: 1.25; }
.nota-pe { display: block; font-size: var(--text-xs); color: var(--text-muted); margin-top: var(--space-2); }

/* A barra por pilar: posição numa escala comum, que é o atributo que o
   olho lê com mais precisão. Rótulo à esquerda, número à direita, sempre
   escritos — a barra é o atalho, não a informação. */
.barras { display: grid; }
.barra {
  display: grid; grid-template-columns: minmax(92px, 168px) minmax(0,1fr) 78px;
  gap: var(--space-4); align-items: center;
  padding: var(--space-2) 0; border-bottom: 1px solid var(--border-soft);
}
.barra:last-child { border-bottom: 0; }
.barra__nome { font-size: var(--text-sm); font-weight: var(--weight-medium); }
/* O nível vem escrito, e é ELE que carrega a cor — não a barra. A barra é
   posição numa escala comum, que é o que o olho lê melhor; se ela também
   trocasse de cor, cinco pilares em "Em construção" pintariam meia tela de
   ouro e estourariam o teto de 5% da regra 2. */
.barra__nome small {
  display: block; font-weight: var(--weight-normal); font-size: var(--text-xs);
  color: var(--nivel, var(--text-muted));
}
.barra__trilho {
  position: relative; height: 20px; background: var(--bg-sunken);
  border: 1px solid var(--border-soft); border-radius: var(--radius-sm); overflow: hidden;
}
.barra__preenche { position: absolute; inset: 0 auto 0 0; background: var(--violet-500); }
.barra__val {
  text-align: right; font-family: var(--font-mono); font-size: var(--text-sm);
  font-weight: 600; font-variant-numeric: tabular-nums;
}
.barra__val small { color: var(--text-muted); font-weight: 400; }
@media (max-width: 560px) {
  .barra { grid-template-columns: minmax(0,1fr) 78px; gap: var(--space-2) var(--space-3); }
  .barra__trilho { grid-column: 1 / -1; }
}

/* ============================================================
   9. FILA DE ATENÇÃO
   ------------------------------------------------------------
   Um item por salão, nunca um por métrica. Cinco avisos sobre o
   mesmo salão viram fadiga de alarme e a pessoa para de ler.
   ============================================================ */

.fila { display: grid; }
.fila__item {
  display: grid; grid-template-columns: auto minmax(0,1fr);
  gap: var(--space-3); align-items: start;
  padding: var(--space-3) 0; border-bottom: 1px solid var(--border-soft);
  text-decoration: none; color: inherit;
}
.fila__item:last-child { border-bottom: 0; }
.fila__item:hover .fila__nome { text-decoration: underline; }
.fila__ico {
  display: grid; place-items: center; width: 24px; height: 24px; margin-top: 1px;
  border-radius: var(--radius); background: var(--nivel-bg, var(--gray-100)); color: var(--nivel, var(--text-muted));
}
.fila__nome { font-size: var(--text-sm); font-weight: var(--weight-medium); }
.fila__texto { font-size: var(--text-xs); color: var(--text-muted); margin-top: 2px; line-height: 1.45; }

/* ============================================================
   10. TABELA
   ============================================================ */

.quadro {
  background: var(--bg-surface); border: 1px solid var(--border);
  border-radius: var(--radius); overflow: hidden;
}
.rolagem { overflow-x: auto; }

table.lista { width: 100%; border-collapse: collapse; table-layout: fixed; min-width: 720px; }
table.lista th {
  height: var(--row-height); padding: 0 var(--space-3);
  background: var(--bg-sunken); border-bottom: 1px solid var(--border);
  font-size: var(--text-xs); font-weight: var(--weight-medium); color: var(--text-muted);
  letter-spacing: var(--track-wide); text-align: left; white-space: nowrap;
}
table.lista td {
  height: var(--row-height); padding: 0 var(--space-3);
  border-bottom: 1px solid var(--border-soft); font-size: var(--text-sm);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
table.lista tbody tr:last-child td { border-bottom: 0; }
table.lista tbody tr { cursor: pointer; }
table.lista tbody tr:hover td { background: var(--bg-hover); }
/* A linha esmaecida do registro de teste. Ela CONTINUA na lista: é dado
   real e apagar por conta própria seria pior. O que ela não faz é entrar
   nas médias — e a marca "teste" ao lado diz isso. */
table.lista tbody tr.apagada td { color: var(--text-muted); }

.col-num { text-align: right; font-variant-numeric: tabular-nums; }
.cel-forte { font-weight: var(--weight-medium); }
.cel-mono  { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
.cel-seta  { color: var(--text-disabled); text-align: right; }

/* "não aplicado" não é falta: é o estado normal de quem não fez o
   Diagnóstico. Fica em cinza, sem crachá e sem cor de nível — a palavra
   informa, e nada nela cobra. */
.cel-vazia { color: var(--text-disabled); }

/* A célula do diagnóstico só vira alvo de clique quando tem para onde ir.
   O placar migrado da planilha não tem devolutiva para abrir, e sublinhar
   uma coisa que não abre é prometer o que não existe. */
td.cel-diag[data-diag] { cursor: pointer; }
td.cel-diag[data-diag]:hover .cracha { outline: 1px solid currentColor; }

/* Uma segunda linha dentro da célula do nome, para o nome do salão quando ele
   é diferente do nome da pessoa. */
.cel-sub {
  display: block; font-size: var(--text-xs); font-weight: var(--weight-normal);
  color: var(--text-muted); line-height: 1.3;
  overflow: hidden; text-overflow: ellipsis;
}
table.lista td:has(.cel-sub) { height: var(--row-height-cozy); }

/* --- larguras de coluna, por tela ---
   Ficam todas juntas de propósito: é a única forma de duas tabelas do sistema
   concordarem sobre quanto vale uma coluna de data ou de crachá. */

/* Painel — diagnósticos aplicados */
.c-salao { width: auto; } .c-resp { width: 170px; } .c-data { width: 104px; }
.c-pontos { width: 92px; } .c-nivel { width: 132px; } .c-reapl { width: 128px; }

/* Aplicações da mentoria */
.c-nome { width: auto; min-width: 180px; } .c-negocio { width: 220px; }
.c-fat { width: 150px; } .c-comp { width: 96px; } .c-quando { width: 100px; }
.c-estado { width: 126px; }

/* Carteira */
.c-origem { width: 108px; } .c-diag { width: 210px; } .c-desde { width: 116px; }

/* Pesquisa — a base de dados de quem respondeu */
.c-equipe { width: 130px; } .c-tempo { width: 108px; }
.c-contato { width: 142px; } .c-presente { width: 116px; }

.c-seta { width: 34px; }

/* Colunas somem por largura do QUADRO, não da janela: a lateral muda a
   largura útil sem a janela mudar de tamanho. Em cada corte sai a coluna
   menos necessária para reconhecer a linha — o nome e o estado nunca saem. */
.quadro[data-larg="p"] .c-resp,    .quadro[data-larg="p"] .cel-resp,
.quadro[data-larg="p"] .c-data,    .quadro[data-larg="p"] .cel-data,
.quadro[data-larg="p"] .c-reapl,   .quadro[data-larg="p"] .cel-reapl,
.quadro[data-larg="p"] .c-fat,     .quadro[data-larg="p"] .cel-fat,
.quadro[data-larg="p"] .c-comp,    .quadro[data-larg="p"] .cel-comp,
.quadro[data-larg="p"] .c-quando,  .quadro[data-larg="p"] .cel-quando,
.quadro[data-larg="p"] .c-negocio, .quadro[data-larg="p"] .cel-negocio,
.quadro[data-larg="p"] .c-desde,   .quadro[data-larg="p"] .cel-desde,
.quadro[data-larg="p"] .c-origem,  .quadro[data-larg="p"] .cel-origem,
.quadro[data-larg="p"] .c-equipe,  .quadro[data-larg="p"] .cel-equipe,
.quadro[data-larg="p"] .c-tempo,   .quadro[data-larg="p"] .cel-tempo,
.quadro[data-larg="p"] .c-contato, .quadro[data-larg="p"] .cel-contato,

.quadro[data-larg="m"] .c-resp,    .quadro[data-larg="m"] .cel-resp,
.quadro[data-larg="m"] .c-data,    .quadro[data-larg="m"] .cel-data,
.quadro[data-larg="m"] .c-fat,     .quadro[data-larg="m"] .cel-fat,
.quadro[data-larg="m"] .c-quando,  .quadro[data-larg="m"] .cel-quando,
.quadro[data-larg="m"] .c-tempo,   .quadro[data-larg="m"] .cel-tempo,
.quadro[data-larg="m"] .c-desde,   .quadro[data-larg="m"] .cel-desde { display: none; }

/* O WhatsApp e o "baixou o presente" nunca somem na Pesquisa: o primeiro é o
   motivo de a base existir, e o segundo é como ela sabe quem ficou sem o
   e-book. Some antes qualquer coluna descritiva. */

.quadro__pe {
  display: flex; align-items: center; gap: var(--space-3); flex-wrap: wrap;
  padding: var(--space-3) var(--space-4); border-top: 1px solid var(--border);
  background: var(--bg-sunken); font-size: var(--text-xs); color: var(--text-muted);
}
.quadro__pe .fim { margin-left: auto; }

/* ============================================================
   11. ESTADOS: VAZIO E CARREGANDO
   ============================================================ */

.vazio { padding: var(--space-12) var(--space-6); text-align: center; }
.vazio__ico { color: var(--gray-300); margin-bottom: var(--space-3); }
.vazio__titulo { font-size: var(--text-base); font-weight: var(--weight-bold); margin-bottom: var(--space-1); }
.vazio__texto { font-size: var(--text-sm); color: var(--text-muted); max-width: 460px; margin: 0 auto var(--space-5); }

/* Esqueleto no formato do conteúdo, não um disco girando: o disco diz
   "espere", o esqueleto diz o que vai aparecer. */
.esq {
  height: 10px; border-radius: var(--radius-sm);
  background: linear-gradient(90deg, var(--gray-100) 25%, var(--gray-50) 37%, var(--gray-100) 63%);
  background-size: 400% 100%; animation: esq 1.4s var(--ease) infinite;
}
@keyframes esq { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
@media (prefers-reduced-motion: reduce) { .esq { animation: none; } }

/* ============================================================
   12. TORRADA — o aviso que passa
   ------------------------------------------------------------
   Existe porque o sistema não usa alert() nem confirm(). A barra
   de cor à esquerda é atalho, não informação: o texto diz o que
   aconteceu, e o ícone repete em forma.
   ============================================================ */

.torradas {
  position: fixed; right: var(--space-6); bottom: var(--space-6); z-index: 60;
  display: flex; flex-direction: column; gap: var(--space-2); max-width: min(380px, calc(100vw - 32px));
}
.torrada {
  display: flex; gap: var(--space-3); align-items: flex-start;
  background: var(--bg-surface); border: 1px solid var(--border);
  border-left: 3px solid var(--border-strong); border-radius: var(--radius);
  box-shadow: var(--shadow-popover); padding: var(--space-3) var(--space-4);
  font-size: var(--text-sm);
}
.torrada svg { flex: 0 0 auto; margin-top: 2px; }
.torrada--ok     { border-left-color: var(--success); color: var(--success); }
.torrada--erro   { border-left-color: var(--danger);  color: var(--danger); }
.torrada--alerta { border-left-color: var(--warning); color: var(--warning); }
.torrada div { color: var(--text); }

/* ============================================================
   13. GRADES DE APOIO
   ============================================================ */

.grade-2-1 { display: grid; grid-template-columns: minmax(0,1.35fr) minmax(0,1fr); gap: var(--space-4); }
@media (max-width: 940px) { .grade-2-1 { grid-template-columns: 1fr; } }

.rodape {
  margin-top: var(--space-8); padding: var(--space-4) var(--space-6) var(--space-8);
  border-top: 1px solid var(--border); font-size: var(--text-xs); color: var(--text-muted);
  display: flex; gap: var(--space-4); flex-wrap: wrap;
}
.rodape .fim { margin-left: auto; }
