/* ==========================================================================
   LITIGANTE BANCÁRIO — sistema visual
   Preto profundo com dourado. Uma folha só, sem framework.
   ========================================================================== */

:root {
  /* fundo, do mais escuro ao mais claro */
  --void:      #0A0907;
  --carbon:    #0C0B09;
  --panel:     #0F0D0B;
  --field:     #100E0B;
  --raised:    #141109;

  /* linhas */
  --line:      #1B1813;
  --line-2:    #221E18;
  --line-3:    #2B2620;
  --line-4:    #3A342A;

  /* texto */
  --ink:       #F0EBE0;
  --ink-hi:    #F7F3EA;
  --muted:     #A39C8D;
  --muted-2:   #8F8878;
  --faint:     #6B6558;
  --faint-2:   #5A554A;
  --ghost:     #4E4A40;

  /* dourado */
  --gold:        #D6B25E;
  --gold-bright: #F2DDA4;
  --gold-deep:   #8F7326;
  --gold-edge:   #4A3D1F;
  --gold-grad:   linear-gradient(160deg, #F2DDA4 0%, #D6B25E 55%, #A88633 100%);

  /* semântica */
  --alto:      #E8846F;
  --alto-bg:   #1A100E;
  --alto-line: #3A2420;
  --ok:        #6FA97D;
  --ok-bg:     #0E1410;
  --ok-line:   #23301F;
  --aviso:     #D9A441;
  --aviso-bg:  #141109;
  --aviso-line:#3A2F16;

  /* tipos */
  --f-serif: "Instrument Serif", Georgia, "Times New Roman", serif;
  --f-sans:  "Archivo", "Helvetica Neue", Arial, sans-serif;
  --f-mono:  "JetBrains Mono", ui-monospace, Consolas, monospace;

  --raio: 2px;

  /* A medida do conteúdo. Nada no site encosta na borda de um monitor
     largo: a coluna para nesta largura e o que sobra vira margem.

     SÃO DUAS MEDIDAS DIFERENTES PORQUE SÃO DUAS COISAS DIFERENTES. O site
     público é texto para ler, e texto largo demais faz o olho perder a volta
     na quebra de linha — 1140px é a medida de leitura. O painel é dado para
     conferir: tabela de gerações com custo, cobrado e sobra lado a lado não
     cabe em medida de leitura, e o que sobra dela vira barra de rolagem
     horizontal, que é a pior forma de esconder uma coluna. Por isso o painel
     é mais largo, e só ele. */
  --largura: 1140px;
  --largura-painel: 1600px;
  --respiro: 72px;
}

* { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  margin: 0;
  background: var(--void);
  color: var(--ink);
  font-family: var(--f-sans);
  font-size: 16px;
  line-height: 1.62;
  -webkit-font-smoothing: antialiased;
}

a { color: var(--gold); text-decoration: none; }
a:hover { color: var(--gold-bright); }
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 2px;
}

img { max-width: 100%; }

/* ------------------------------------------------------------- tipografia */
.serif { font-family: var(--f-serif); font-weight: 400; }
.mono  { font-family: var(--f-mono); font-variant-numeric: tabular-nums; }

h1, h2, h3 { font-family: var(--f-serif); font-weight: 400; margin: 0; text-wrap: balance; }
h1 { font-size: clamp(38px, 5vw, 76px); line-height: 1.04; letter-spacing: -0.02em; color: var(--ink-hi); }
h2 { font-size: clamp(30px, 3.2vw, 44px); line-height: 1.1; color: var(--ink-hi); }
h3 { font-size: 26px; line-height: 1.2; color: var(--ink-hi); }
p  { margin: 0; }

.eyebrow {
  font-family: var(--f-mono);
  font-size: 11px;
  letter-spacing: 0.18em;
  text-transform: uppercase;
  color: var(--gold-deep);
}
.rotulo {
  font-family: var(--f-mono);
  font-size: 10.5px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--faint-2);
}
.dek { font-size: 17px; line-height: 1.62; color: var(--muted); max-width: 52ch; }
.nota { font-size: 12.5px; color: var(--faint); }

/* ---------------------------------------------------------------- estrutura */
/* A coluna do conteúdo. Largura máxima E recuo lateral: se um dia alguma
   página zerar o recuo num style embutido, a largura ainda segura o texto
   no lugar. Seções não têm fundo próprio, então travar a largura aqui não
   corta faixa de cor nenhuma. */
.faixa {
  max-width: calc(var(--largura) + 2 * var(--respiro));
  margin-inline: auto;
  padding-inline: var(--respiro);
}
.centro { max-width: var(--largura); margin: 0 auto; }
.pilha { display: flex; flex-direction: column; }
.linha { display: flex; align-items: center; }
.entre { justify-content: space-between; }
.crescer { flex: 1; min-width: 0; }

.g4 { gap: 4px; } .g6 { gap: 6px; } .g8 { gap: 8px; } .g10 { gap: 10px; }
.g12 { gap: 12px; } .g14 { gap: 14px; } .g16 { gap: 16px; } .g20 { gap: 20px; }
.g24 { gap: 24px; } .g26 { gap: 26px; } .g28 { gap: 28px; } .g30 { gap: 30px; }
.g32 { gap: 32px; } .g40 { gap: 40px; }

.grade { display: grid; gap: 26px; }
.g-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.g-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.g-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }

.regua { height: 1px; background: var(--line); border: 0; margin: 0; }

/* ------------------------------------------------------------------ botões */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  padding: 15px 28px;
  border: 0; border-radius: var(--raio);
  font-family: var(--f-sans); font-size: 14px; font-weight: 600;
  letter-spacing: 0.05em; text-transform: uppercase;
  color: #12100D; background: var(--gold-grad);
  cursor: pointer;
}
.btn:hover { color: #12100D; filter: brightness(1.06); }
.btn--calmo {
  color: var(--ink); background: transparent;
  border: 1px solid var(--line-4); font-weight: 400;
}
.btn--calmo:hover { color: var(--ink); border-color: var(--gold-deep); }
.btn--bloco { width: 100%; }
.btn--peq { padding: 11px 20px; font-size: 12.5px; }

/* ------------------------------------------------------------------ campos */
.campo { display: flex; flex-direction: column; gap: 9px; }
.campo > label {
  font-size: 11.5px; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--muted);
}
.campo .obrig { color: var(--gold); }
.campo .ajuda { font-size: 11.5px; color: var(--faint-2); }

.entrada, select.entrada, textarea.entrada {
  width: 100%; height: 52px; padding: 0 16px;
  border: 1px solid var(--line-3); border-radius: var(--raio);
  background: var(--field); color: var(--ink);
  font-family: var(--f-sans); font-size: 14.5px;
}
textarea.entrada { height: auto; padding: 14px 16px; line-height: 1.6; resize: vertical; }
.entrada::placeholder { color: var(--faint-2); }
.entrada:focus { border-color: var(--gold-deep); outline: none; }
.entrada--mono { font-family: var(--f-mono); }

select.entrada {
  appearance: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'><path d='m4 6 4 4 4-4' stroke='%236B6558' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/></svg>");
  background-repeat: no-repeat;
  background-position: right 14px center;
  padding-right: 40px;
}

.com-sufixo { display: flex; align-items: stretch; }
.com-sufixo .entrada { border-right: 0; border-radius: var(--raio) 0 0 var(--raio); }
.com-sufixo .sufixo {
  display: grid; place-items: center; padding: 0 14px;
  border: 1px solid var(--line-3); border-radius: 0 var(--raio) var(--raio) 0;
  background: var(--carbon); color: var(--faint);
  font-family: var(--f-mono); font-size: 12.5px;
  white-space: nowrap;   /* "% a.m." quebrava em duas linhas e engordava o campo */
}

/* O irmão do `.com-sufixo`, do outro lado do campo: o R$ de "Valor liberado" e
   "Parcela". Fica FORA do input de propósito — cifrão colado no valor é a
   maneira mais fácil de um número virar zero na leitura do servidor. */
.com-prefixo { display: flex; align-items: stretch; }
.com-prefixo .entrada { border-left: 0; border-radius: 0 var(--raio) var(--raio) 0; text-align: right; }
.com-prefixo .prefixo-fixo {
  display: grid; place-items: center; padding: 0 13px;
  border: 1px solid var(--line-3); border-radius: var(--raio) 0 0 var(--raio);
  background: var(--carbon); color: var(--faint);
  font-family: var(--f-mono); font-size: 12.5px;
  white-space: nowrap;
}
/* O foco tem de acender o conjunto, não meio campo. */
.com-prefixo:focus-within .prefixo-fixo { border-color: var(--gold-deep); color: var(--gold); }
.com-sufixo:focus-within .sufixo { border-color: var(--gold-deep); color: var(--gold); }

.marcar { display: flex; align-items: flex-start; gap: 12px; cursor: pointer; }
.marcar input { position: absolute; opacity: 0; width: 0; height: 0; }
.marcar .caixa {
  width: 20px; height: 20px; flex: 0 0 auto; margin-top: 1px;
  border: 1px solid var(--line-4); border-radius: var(--raio);
  background: var(--carbon);
  display: grid; place-items: center;
}
.marcar .caixa svg { opacity: 0; }
.marcar input:checked + .caixa { border-color: transparent; background: var(--gold-grad); }
.marcar input:checked + .caixa svg { opacity: 1; }
.marcar input:focus-visible + .caixa { outline: 2px solid var(--gold); outline-offset: 2px; }

/* opção em pastilha (as perguntas objetivas da ficha) */
.opcoes { display: flex; flex-wrap: wrap; gap: 8px; }
.opcao { position: relative; }
.opcao input { position: absolute; opacity: 0; width: 0; height: 0; }
.opcao span {
  display: inline-block; padding: 9px 14px;
  border: 1px solid var(--line-3); border-radius: var(--raio);
  background: var(--field); color: var(--muted-2);
  font-size: 12.5px; cursor: pointer;
}
.opcao input:checked + span {
  border-color: var(--gold-edge); background: var(--raised); color: var(--gold-bright);
}

/* ------------------------------------------------------------------ painéis */
.painel {
  border: 1px solid var(--line); background: var(--panel);
}
.painel--fundo { background: var(--carbon); }
.painel--dourado {
  border-color: var(--line-2);
  background: linear-gradient(150deg, #151209 0%, var(--carbon) 74%);
}
.painel__cabeca {
  padding: 16px 20px; border-bottom: 1px solid var(--line);
}
.painel__corpo { padding: 22px 24px; }

/* grade de blocos coladas por linha de 1px */
.blocos {
  display: grid; gap: 1px; background: var(--line); border: 1px solid var(--line);
}
.blocos > * { background: var(--panel); }

/* --------------------------------------------------------------- etiquetas */
.etiq {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 5px 11px; border-radius: var(--raio);
  font-size: 11.5px; border: 1px solid var(--line-3); color: var(--muted);
}
.etiq--ok    { background: var(--ok-bg);    border-color: var(--ok-line);    color: #7E9584; }
.etiq--aviso { background: var(--aviso-bg); border-color: var(--aviso-line); color: #C9A24F; }
.etiq--alto  { background: var(--alto-bg);  border-color: var(--alto-line);  color: #B0736A; }

.ponto { width: 6px; height: 6px; border-radius: 50%; flex: 0 0 auto; }
.ponto--ok { background: var(--ok); }
.ponto--aviso { background: var(--aviso); }
.ponto--alto { background: var(--alto); }

/* ---------------------------------------------------------------- tabelas */
.tabela { width: 100%; border-collapse: collapse; border: 1px solid var(--line); }
.tabela thead th {
  padding: 11px 20px; text-align: left;
  background: var(--field); border-bottom: 1px solid var(--line);
  font-family: var(--f-mono); font-size: 10px; font-weight: 400;
  letter-spacing: 0.14em; text-transform: uppercase; color: var(--faint-2);
}
.tabela tbody td {
  padding: 14px 20px; background: var(--carbon);
  border-bottom: 1px solid #16130F; font-size: 13px; color: var(--ink);
}
.tabela tbody tr:last-child td { border-bottom: 0; }
/* NÚMERO NÃO QUEBRA. "R$ 135.213,83" partido em "R$" numa linha e o valor na
   outra deixa de ser uma cifra e vira duas coisas: a coluna perde o alinhamento
   da vírgula, que é justamente o que faz uma tabela de valores ser lida de
   relance. Quando não couber, quem cede é a moldura — a tabela rola dentro de
   `.rolagem` — e não o número. */
.tabela .num {
  text-align: right; font-family: var(--f-mono); font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.tabela .suave { color: var(--muted); }

/* As colunas curtas também não quebram: data, UF, rótulo de tese e a fileira de
   botões têm tamanho conhecido, e deixá-las quebrar é dar a elas a largura que
   falta para o nome do banco. Quem cede é o texto longo — nome de cliente e de
   banco —, que é onde a quebra não atrapalha a leitura. */
.tabela .curta { white-space: nowrap; }
.tabela .longa { min-width: 12ch; }
.rolagem, .pc-tabela-rola { overflow-x: auto; max-width: 100%; min-width: 0; }
/* Tabela larga rola dentro da própria moldura. Sem `max-width`, ela empurra a
   página inteira para o lado no celular: o texto fica fora da tela e o dedo
   arrasta o layout todo em vez da tabela. */

/* O CASO NUMA CÉLULA SÓ: quem em cima, contra quem embaixo.
   Cliente e banco eram duas colunas disputando a mesma largura, e num nome
   comprido as duas quebravam. Empilhados, cada um tem a largura inteira da
   coluna e a leitura fica na ordem natural — é uma informação, não duas. */
.caso { line-height: 1.35; min-width: 28ch; }
.caso__cliente { display: block; color: var(--ink); }
/* O banco não quebra. Ele é a linha de apoio, e "104 - CAIXA ECONOMICA /
   FEDERAL" em duas linhas embaixo de um nome que já ocupa duas transforma a
   linha da tabela num parágrafo. Faltando largura, quem cede é a moldura: a
   tabela rola dentro de `.rolagem` e o nome continua inteiro. */
.caso__banco {
  display: block; font-size: 11.5px; color: var(--faint); margin-top: 3px;
  white-space: nowrap;
}
.caso__uf {
  display: inline-block; margin-left: 7px; padding: 1px 6px; border-radius: 3px;
  border: 1px solid var(--line-3); font-family: var(--f-mono);
  font-size: 9.5px; letter-spacing: .08em; color: var(--faint-2); vertical-align: 1px;
}

/* A TENTATIVA QUE NÃO VIROU PEÇA, na mesma tabela das que viraram.
   São duas linhas que valem por uma: a de cima repete as colunas, a de baixo
   diz em uma frase por que parou. Por isso a borda entre elas some — separá-las
   faria parecer que houve dois envios. O traço vermelho na margem é o que
   distingue a linha de longe, sem precisar ler. */
.tabela tr.falhou td { color: var(--muted-2); }
.tabela tr.falhou td:first-child { box-shadow: inset 2px 0 0 var(--alto-line); }
.tabela tr.falhou:not(.falhou--motivo) td { border-bottom: 0; }
.tabela tr.falhou--motivo td { padding-top: 0; padding-bottom: 15px; }

/* O RASTRO DO MOUSE.
   Passar por uma linha acende a linha inteira — é o que diz, sem ler, até
   onde vai o registro que está sob o cursor. Nas tentativas que falharam o
   registro tem DUAS linhas, e elas acendem juntas: acender só a de baixo
   faria parecer que o motivo pertence à linha seguinte. `:has` alcança a
   linha de cima a partir da de baixo; onde ele não existir, cada uma acende
   sozinha e nada quebra. */
.tabela tbody tr:hover td { background: rgba(255, 255, 255, .022); }
.tabela tr.falhou:hover td,
.tabela tr.falhou:hover + tr.falhou--motivo td,
.tabela tr.falhou--motivo:hover td { background: var(--alto-bg); }
.tabela tr.falhou:not(.falhou--motivo):has(+ tr.falhou--motivo:hover) td { background: var(--alto-bg); }

.tabela tr.falhou:hover td:first-child,
.tabela tr.falhou:hover + tr.falhou--motivo td:first-child,
.tabela tr.falhou--motivo:hover td:first-child { box-shadow: inset 3px 0 0 var(--alto); }
.tabela tr.falhou:not(.falhou--motivo):has(+ tr.falhou--motivo:hover) td:first-child {
  box-shadow: inset 3px 0 0 var(--alto);
}
.falhou__texto { font-size: 12.5px; color: var(--alto); }
.falhou__nada { font-size: 12px; color: var(--faint-2); margin-left: 10px; }
.etiq--peq { padding: 3px 9px; font-size: 10.5px; }

/* -------------------------------------------------------------- topo do site */
.topo {
  display: flex; align-items: center; justify-content: space-between;
  padding-block: 22px;
  padding-inline: max(var(--respiro), calc((100% - var(--largura)) / 2));
  border-bottom: 1px solid var(--line);
}
.topo { gap: 24px; }
.topo nav { display: flex; align-items: center; gap: 28px; }
.topo nav a {
  font-size: 12.5px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--muted); white-space: nowrap;
}
.topo nav a:hover, .topo nav a[aria-current] { color: var(--gold-bright); }
.topo__acoes { flex: 0 0 auto; }
.topo__vivo {
  display: inline-block; margin-left: 4px; padding: 2px 6px; border-radius: 999px; vertical-align: 1px;
  background: rgba(214, 84, 70, .16); border: 1px solid rgba(214, 84, 70, .5);
  font-family: var(--f-mono); font-size: 9px; letter-spacing: .08em; color: #E88F83;
}
/* A gaveta do celular: some no computador. */
.topo__gaveta { display: none; position: relative; }
.topo__gaveta > summary {
  list-style: none; cursor: pointer; display: grid; place-items: center;
  width: 44px; height: 44px; border: 1px solid var(--line-3); border-radius: var(--raio); color: var(--ink);
}
.topo__gaveta > summary::-webkit-details-marker { display: none; }
.topo__gaveta[open] > summary { border-color: var(--gold-edge); color: var(--gold-bright); }
.topo__gaveta-corpo {
  position: absolute; right: 0; top: calc(100% + 10px); z-index: 60; width: min(320px, calc(100vw - 32px));
  display: flex; flex-direction: column; gap: 16px; padding: 18px;
  border: 1px solid var(--line-3); border-radius: var(--raio); background: #0E0C09;
  box-shadow: 0 24px 60px rgba(0, 0, 0, .6);
}
.topo__gaveta-corpo nav { flex-direction: column; align-items: stretch; gap: 0; }
.topo__gaveta-corpo nav a { padding: 12px 4px; border-bottom: 1px solid var(--line); font-size: 13px; }
.topo__gaveta-acoes { display: flex; gap: 10px; }
.topo__gaveta-acoes .btn { flex: 1 1 0; justify-content: center; }
@media (max-width: 1180px) {
  .topo nav.topo__nav { gap: 20px; }
  .topo nav.topo__nav a { font-size: 11.5px; }
}
@media (max-width: 1040px) {
  .topo nav.topo__nav, .topo__acoes { display: none; }
  .topo__gaveta { display: block; }
}

.marca { display: flex; align-items: center; gap: 14px; }
/* A logo já traz o nome dentro da arte, então não há mais texto ao lado. A
   altura vem do atributo no HTML (58 no topo do site, 56 na tela de entrada) e
   a largura acompanha sozinha. */
.marca__img { display: block; height: auto; max-width: 100%; }

/* NA BARRA LATERAL QUEM MANDA É A LARGURA.
   Lá não há linha de cabeçalho: há uma coluna, e tudo dentro dela — rótulo de
   grupo, item de menu, cartão do usuário — nasce e termina no mesmo respiro.
   Com altura fixa a marca ocupava pouco mais da metade da coluna e ficava
   encostada no canto; medindo pela coluna, ela fica alinhada com o menu que vem
   logo abaixo. A regra é mais específica que as de altura lá de baixo, então
   vale em qualquer largura de tela sem depender da ordem do arquivo. */
.marca--lateral { display: block; }
.marca--lateral .marca__img { width: 100%; height: auto; }
.marca:hover .marca__img { opacity: .88; }
.marca__img { transition: opacity .22s; }

/* Em tela estreita o cabeçalho fica apertado entre a marca e os botões: a
   marca cede primeiro, porque ela continua legível menor e o botão não. Abaixo
   de 400 px ela cede de novo — mas nunca abaixo de 28 px, que é onde o nome
   dentro da arte deixa de se ler. */
@media (max-width: 720px) { .marca__img { width: auto; height: 34px; } }
@media (max-width: 400px) { .marca__img { width: auto; height: 28px; } }

@media (prefers-reduced-motion: reduce) { .marca__img { transition: none; } }

/* ===========================================================================
   O RODAPÉ

   Era uma linha: domínio à esquerda, três links à direita. Rodapé é onde se
   procura o que não coube no menu — como falar com a casa, quem assina o
   serviço, onde ficam os termos —, e uma linha não responde nada disso.

   Quatro colunas: a marca com a frase, dois blocos de links e os contatos.
   Embaixo, uma faixa fina com quem assina e as redes. O conteúdo vem do
   banco: campo vazio não vira linha em branco, some.
   =========================================================================== */
.rodape {
  margin-top: 72px; border-top: 1px solid var(--line);
  font-size: 12.5px; color: var(--faint-2);
  background: linear-gradient(180deg, rgba(214, 178, 94, .03) 0%, transparent 38%);
}
.rodape a { color: var(--faint); text-decoration: none; transition: color .18s; }
.rodape a:hover { color: var(--gold); }

/* 1. A chamada para conversar, com os WhatsApps em botão. */
.rodape__cta {
  display: flex; align-items: center; justify-content: space-between; gap: 22px 36px; flex-wrap: wrap;
  margin-top: 46px; padding: 26px 30px;
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: linear-gradient(135deg, #17120A 0%, #0F0D0A 70%);
}
.rodape__cta-tit { font-family: var(--f-serif); font-weight: 400; font-size: 25px; line-height: 1.2; color: var(--ink-hi); max-width: 34ch; }
.rodape__cta-botoes { display: flex; gap: 10px; flex-wrap: wrap; }
.rodape .rodape__cta-botoes .btn { color: #16120A; }
.rodape .rodape__cta-botoes .btn--calmo { color: var(--ink); }
.rodape__zap { display: inline-flex; align-items: center; gap: 9px; }

/* 2. O meio: a marca com as redes, os caminhos e os contatos. */
.rodape__grade {
  display: grid; gap: 34px 28px; padding-block: 44px 34px;
  grid-template-columns: minmax(0, 1.5fr) repeat(3, minmax(0, .8fr)) minmax(0, 1.3fr);
  align-items: start;
}
.rodape__marca { display: flex; flex-direction: column; gap: 16px; align-items: flex-start; min-width: 0; }
.rodape__frase { margin: 0; font-size: 12.5px; line-height: 1.7; color: var(--faint); max-width: 40ch; }
.rodape__col { display: flex; flex-direction: column; gap: 9px; min-width: 0; }
.rodape__tit {
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .14em;
  text-transform: uppercase; color: var(--gold-deep); margin-bottom: 3px;
}
.rodape__col a { font-size: 12.5px; line-height: 1.55; }
.rodape__redes { display: flex; gap: 8px; flex-wrap: wrap; }
.rodape__redes a {
  display: inline-flex; align-items: center; gap: 7px; height: 34px; padding: 0 12px;
  border: 1px solid var(--line-2); border-radius: 999px; font-size: 12px; color: var(--muted-2);
}
.rodape__redes a:hover { border-color: var(--gold-deep); color: var(--gold); }
.rodape__item { display: flex; align-items: flex-start; gap: 10px; font-size: 12.5px; line-height: 1.5; color: var(--muted-2); }
.rodape__item svg { flex: 0 0 auto; margin-top: 2px; color: var(--gold-deep); }
.rodape__item > span { display: flex; flex-direction: column; min-width: 0; overflow-wrap: anywhere; }
.rodape__item small { font-size: 11px; color: var(--faint-2); }
a.rodape__item:hover { color: var(--gold); }

/* 3. Quem assina. */
.rodape__pe { padding-block: 18px 34px; border-top: 1px solid var(--line); }
.rodape__quem { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.rodape__razao { font-size: 11px; line-height: 1.6; color: var(--faint-2); }

@media (max-width: 1100px) {
  .rodape__grade { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .rodape__marca { grid-column: 1 / -1; }
  .rodape__contato { grid-column: span 3; }
  /* Contato ocupa a largura toda: os itens se espalham em colunas. */
  .rodape__contato { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 12px 24px; }
  .rodape__contato > .rodape__tit { grid-column: 1 / -1; margin-bottom: 0; }
}
@media (max-width: 720px) {
  .rodape__cta { padding: 22px 20px; }
  .rodape__cta-tit { font-size: 21px; }
  .rodape__cta-botoes, .rodape__cta-botoes .btn { width: 100%; }
  .rodape__cta-botoes .btn { justify-content: center; }
  .rodape__grade { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 28px 20px; }
  .rodape__contato { grid-column: 1 / -1; }
}

/* ------------------------------------------------------------------ brilho */
.brilho { position: relative; overflow: hidden; }
.brilho::before {
  content: ""; position: absolute; pointer-events: none;
  width: 760px; height: 760px; border-radius: 50%;
  top: -200px; right: 20px;
  background: radial-gradient(circle, rgba(214,178,94,0.10) 0%, rgba(10,9,7,0) 68%);
}

/* ------------------------------------------------------------------ painel */
/* A página não rola: quem rola é cada coluna, por dentro. Sem isto, um menu
   comprido empurra a barra de cima para fora da tela e o usuário perde a
   trilha e o saldo justamente quando desce para ler a tabela. */
.app { display: flex; height: 100vh; overflow: hidden; }

.lateral {
  width: 274px; flex: 0 0 auto;
  border-right: 1px solid var(--line); background: var(--carbon);
  display: flex; flex-direction: column; justify-content: space-between;
  padding: 24px 0;
  height: 100vh; overflow-y: auto; overscroll-behavior: contain;
}
/* Barra de rolagem discreta: o menu não é o assunto da tela. */
.lateral::-webkit-scrollbar { width: 8px; }
.lateral::-webkit-scrollbar-track { background: transparent; }
.lateral::-webkit-scrollbar-thumb {
  background: #221D17; border-radius: 8px; border: 2px solid var(--carbon);
}
.lateral::-webkit-scrollbar-thumb:hover { background: #2E271F; }
.lateral { scrollbar-width: thin; scrollbar-color: #221D17 transparent; }

.app > main {
  height: 100vh; overflow-y: auto; overscroll-behavior: contain;
}
.app > main::-webkit-scrollbar { width: 10px; }
.app > main::-webkit-scrollbar-track { background: var(--void); }
.app > main::-webkit-scrollbar-thumb {
  background: #221D17; border-radius: 8px; border: 2px solid var(--void);
}
.app > main::-webkit-scrollbar-thumb:hover { background: #332B22; }
.app > main { scrollbar-width: thin; scrollbar-color: #221D17 var(--void); }
.lateral__grupo { display: flex; flex-direction: column; gap: 3px; }
.lateral__grupo > .rotulo { padding: 0 22px 7px; }
.lateral a.item {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 22px; font-size: 13.5px; color: var(--muted);
}
.lateral a.item svg { flex: 0 0 auto; }
.lateral a.item:hover { color: var(--ink); background: #100E0B; }
.lateral a.item[aria-current] {
  color: var(--ink); background: var(--raised);
  box-shadow: inset 2px 0 0 0 var(--gold);
}
.lateral a.item[aria-current] svg [stroke] { stroke: var(--gold); }

.lateral .selo {
  margin-left: auto;
  font-family: var(--f-mono); font-size: 9px; letter-spacing: 0.08em;
  color: var(--ghost); white-space: nowrap;
}
.lateral a.item span:first-of-type { min-width: 0; }

.usuario {
  display: flex; align-items: center; gap: 12px;
  margin: 0 16px; padding: 13px 14px;
  border: 1px solid #1F1B16; border-radius: 3px; background: var(--field);
}
.usuario__sigla {
  width: 34px; height: 34px; flex: 0 0 auto;
  display: grid; place-items: center; border-radius: var(--raio);
  font-family: var(--f-mono); font-size: 12px;
  color: #12100D; background: linear-gradient(160deg, #F2DDA4, #C9A24F);
}

/* A barra de cima ocupa a largura toda de propósito: ela é moldura, não
   conteúdo. Prender a trilha e o saldo numa coluna estreita deixava um vazio
   enorme dos dois lados numa tela grande. */
.barra {
  position: sticky; top: 0; z-index: 30;
  display: flex; align-items: center; justify-content: space-between;
  padding-block: 18px; padding-inline: 30px;
  border-bottom: 1px solid var(--line);
  background: rgba(10,9,7,0.86);
  backdrop-filter: saturate(140%) blur(10px);
  -webkit-backdrop-filter: saturate(140%) blur(10px);
}
.trilha { display: flex; align-items: center; gap: 11px; font-size: 13px; }
.trilha .pai { color: var(--faint-2); }

.saldo {
  display: flex; align-items: center; gap: 10px;
  height: 40px; padding: 0 16px;
  border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--field);
}
.saldo b { font-family: var(--f-mono); font-size: 13px; font-weight: 400; color: var(--gold-bright); }
.saldo span { font-family: var(--f-mono); font-size: 11px; letter-spacing: 0.1em; color: var(--faint-2); }

/* O saldo e o "+" andam colados, como um controle só: o primeiro leva ao
   extrato, o segundo à compra. O "+" fica calado até o mouse chegar — é
   atalho, não chamada. */
.saldo-par { display: flex; align-items: stretch; }
.saldo-par .saldo { border-top-right-radius: 0; border-bottom-right-radius: 0; border-right: 0; }
.saldo-mais {
  display: grid; place-items: center; width: 36px; height: 40px;
  border: 1px solid var(--line-2); border-radius: 0 var(--raio) var(--raio) 0;
  background: var(--field); color: var(--faint);
  font-family: var(--f-mono); font-size: 17px; line-height: 1;
  transition: color .2s, background .2s, border-color .2s;
}
.saldo-mais:hover, .saldo-mais:focus-visible {
  color: var(--gold-bright); background: var(--panel); border-color: var(--gold-deep);
}

/* O miolo do painel acompanha a barra de cima: mesma coluna, mesma
   margem. É o que faz a trilha, o saldo e o conteúdo ficarem no prumo. */
.conteudo {
  width: 100%;
  max-width: calc(var(--largura-painel) + 72px);
  margin-inline: auto;
  padding: 34px 36px;
  display: flex; flex-direction: column; gap: 30px;
}

/* O painel ficou largo para caber tabela, não para esticar parágrafo. Quadro,
   grade e tabela usam a coluna inteira; texto corrido para na medida em que
   ainda se lê sem perder a linha. Vale só para parágrafo solto — a nota que
   vive dentro de uma célula ou de um cartão é <div> e não entra aqui. */
.conteudo p.nota, .conteudo p.dek { max-width: 92ch; }

/* --------------------------------------------------------------- avisos */
.aviso {
  display: flex; gap: 13px; align-items: flex-start;
  padding: 16px 18px;
}
.aviso__texto { display: flex; flex-direction: column; gap: 3px; }
.aviso__texto b { font-size: 13.5px; font-weight: 400; color: var(--ink); }
.aviso__texto span { font-size: 12.5px; line-height: 1.5; color: var(--faint); }

.recado {
  display: flex; gap: 12px; align-items: flex-start;
  padding: 14px 16px; border-radius: var(--raio); font-size: 13px; line-height: 1.5;
}
.recado--erro { background: var(--alto-bg); border: 1px solid var(--alto-line); color: #E0A79C; }
.recado--ok   { background: var(--ok-bg);   border: 1px solid var(--ok-line);   color: #8FA891; }

/* ------------------------------------------------------------- responsivo */
@media (max-width: 1100px) {
  :root { --respiro: 32px; }
  .faixa, .topo, .rodape { padding-inline: 32px; }
  .g-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

@media (max-width: 860px) {
  /* !important porque várias telas declaram a proporção no próprio style="",
     que é onde o editor visual mexe — a quebra no celular tem de vencer. */
  .grade, .g-2, .g-3, .g-4 { grid-template-columns: minmax(0, 1fr) !important; }
  .blocos { grid-template-columns: minmax(0, 1fr) !important; }
  h1 { font-size: 38px; }
  h2 { font-size: 30px !important; }
  .conteudo, .barra { padding-inline: 20px; }
  .faixa, .topo, .rodape { padding-inline: 20px; }
  .rodape { flex-direction: column; align-items: flex-start; gap: 14px; }
}

@media (prefers-reduced-motion: reduce) {
  * { animation: none !important; transition: none !important; }
}

/* ==========================================================================
   ACRÉSCIMOS DA VERSÃO COMPLETA
   Telas de acesso, formulário longo de cadastro, equipe e privacidade.
   ========================================================================== */

/* ------------------------------------------------------------- selo/pílula */
.selo {
  margin-left: auto; flex: 0 0 auto;
  font-family: var(--f-mono); font-size: 8px; letter-spacing: 0.06em;
  padding: 2px 5px; border: 1px solid var(--line-3); border-radius: var(--raio);
  color: var(--faint-2); white-space: nowrap;
}
/* Na barra lateral o rótulo não quebra em duas linhas por causa do selo:
   a barra é larga o bastante e o selo é curto. */
.lateral .item > span:not(.selo) { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lateral .item .selo {
  font-size: 8px; padding: 2px 5px; border: 1px solid var(--line-2);
  color: var(--faint-2); letter-spacing: 0.08em;
}
.selo--ok    { color: #7E9584; border-color: var(--ok-line);    background: var(--ok-bg); }
.selo--aviso { color: #C9A24F; border-color: var(--aviso-line); background: var(--aviso-bg); }
.selo--alto  { color: #B0736A; border-color: var(--alto-line);  background: var(--alto-bg); }
.selo--gold  { color: var(--gold-bright); border-color: var(--gold-edge); background: var(--raised); }

/* --------------------------------------------------------------- tipografia */
.titulo { font-family: var(--f-serif); font-size: clamp(30px, 3.4vw, 44px); line-height: 1.12;
          color: var(--ink-hi); margin: 0; letter-spacing: -0.015em; }
.titulo--peq { font-size: clamp(23px, 2.4vw, 30px); }
.texto { font-size: 15px; line-height: 1.7; color: var(--muted); margin: 0; max-width: 62ch; }
.texto--peq { font-size: 13.5px; color: var(--muted-2); }
.texto b, .texto strong { color: var(--ink); font-weight: 600; }

/* ------------------------------------------------------------ telas de acesso */
.corpo-acesso { background:
  radial-gradient(900px 520px at 50% -10%, #16120A 0%, transparent 62%), var(--void); }
.acesso { min-height: 100vh; display: flex; flex-direction: column;
          align-items: center; justify-content: center; padding: 44px 20px; gap: 22px; }
.acesso__caixa {
  width: 100%; max-width: 452px;
  border: 1px solid var(--line-2); border-radius: 4px;
  background: var(--panel); padding: 38px 36px;
}
.acesso__caixa--largo { max-width: 860px; }
.acesso__pe { font-size: 12px; color: var(--faint-2); text-align: center; }
.acesso__pe a { color: var(--faint); }
.acesso__pe a:hover { color: var(--gold); }

/* ----------------------------------------------------------------- campos + */
.campo__opc { float: right; text-transform: none; letter-spacing: 0;
              font-size: 10.5px; color: var(--ghost); }
.campo__dica { font-size: 11.5px; line-height: 1.5; color: var(--faint-2); }
.campo--largo { grid-column: 1 / -1; }
.campo--duplo { grid-column: span 2; }
@media (max-width: 860px) { .campo--duplo { grid-column: auto; } }

.form-grade { display: grid; gap: 18px; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.form-grade--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }

/* Doze colunas, para o endereço.
   Endereço não é uma lista de caixas iguais: é duas linhas com larguras
   diferentes. CEP (3) · rua (6) · número (3); complemento (3) · bairro (3) ·
   cidade (4) · Estado (2). O CEP é o mais estreito porque tem oito dígitos e
   não precisa de mais espaço do que isso. */
.form-grade--12 { grid-template-columns: repeat(12, minmax(0, 1fr)); }
/* As doze larguras, todas. Faltavam a 5 e a 7, e o efeito não era um campo
   levemente fora de medida: sem a classe, o elemento cai para UMA coluna de
   doze e o campo vira uma caixa de dois centímetros com o rótulo quebrado em
   cinco linhas. Definir a série inteira custa doze linhas e fecha a porta. */
.campo--c1  { grid-column: span 1; }
.campo--c2  { grid-column: span 2; }
.campo--c3  { grid-column: span 3; }
.campo--c4  { grid-column: span 4; }
.campo--c5  { grid-column: span 5; }
.campo--c6  { grid-column: span 6; }
.campo--c7  { grid-column: span 7; }
.campo--c8  { grid-column: span 8; }
.campo--c9  { grid-column: span 9; }
.campo--c10 { grid-column: span 10; }
.campo--c11 { grid-column: span 11; }
.campo--c12 { grid-column: 1 / -1; }
/* Em tela média as linhas de doze não cabem sem apertar: viram meias-larguras,
   e o Estado continua pequeno ao lado da cidade. */
@media (max-width: 900px) {
  .campo--c1, .campo--c2, .campo--c3 { grid-column: span 6; }
  .campo--c4, .campo--c5, .campo--c6, .campo--c7,
  .campo--c8, .campo--c9, .campo--c10, .campo--c11 { grid-column: 1 / -1; }
}

/* O CEP consultando: a caixa avisa sem empurrar nada de lugar. */
.campo--buscando > .entrada {
  border-color: var(--gold-deep);
  background-image: linear-gradient(90deg, transparent, rgba(214,178,94,.10), transparent);
  background-size: 200% 100%;
  animation: lb-varre 1.1s linear infinite;
}
@keyframes lb-varre { to { background-position: -200% 0; } }
.campo__cep-aviso { font-size: 11.5px; line-height: 1.5; margin-top: 6px; color: var(--faint); }
.campo__cep-aviso--erro { color: var(--alto); }
.campo__cep-aviso--ok { color: var(--ok); }
/* O que o CEP acabou de preencher pisca uma vez — quem digitou precisa VER o
   que mudou na tela, senão parece que nada aconteceu. */
.entrada--veio-do-cep { animation: lb-preencheu 1.2s var(--mola); }
@keyframes lb-preencheu {
  0%   { border-color: var(--gold); background: rgba(214,178,94,.07); }
  100% { border-color: var(--line-3); background: transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .campo--buscando > .entrada, .entrada--veio-do-cep { animation: none; }
}

.secao-form { border-top: 1px solid var(--line); padding-top: 26px; margin-top: 26px; }
.secao-form:first-of-type { border-top: 0; padding-top: 0; margin-top: 0; }
.secao-form__nome {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: 0.16em;
  text-transform: uppercase; color: var(--gold-deep); margin-bottom: 5px;
}
.secao-form__nota { font-size: 12.5px; color: var(--faint); margin-bottom: 20px; line-height: 1.6; }

/* ------------------------------------------------------------------- recados */
.recado {
  padding: 13px 16px; border-radius: var(--raio); font-size: 13.5px; line-height: 1.6;
  border: 1px solid var(--line-3); background: var(--carbon); color: var(--muted);
}
.recado--ok   { border-color: var(--ok-line);   background: var(--ok-bg);   color: #8CA891; }
.recado--erro { border-color: var(--alto-line); background: var(--alto-bg); color: #C68C80; }
.recado--aviso{ border-color: var(--aviso-line);background: var(--aviso-bg);color: #C9A24F; }

/* ---------------------------------------------------------------- equipe */
.pessoa {
  display: flex; align-items: center; gap: 14px;
  padding: 15px 20px; background: var(--carbon); border-bottom: 1px solid var(--line);
}
.pessoa:last-child { border-bottom: 0; }
.pessoa__sigla {
  width: 36px; height: 36px; flex: 0 0 auto; border-radius: 50%;
  display: grid; place-items: center; background: var(--raised);
  border: 1px solid var(--gold-edge); color: var(--gold);
  font-family: var(--f-mono); font-size: 12px;
}
.pessoa__nome { font-size: 14px; color: var(--ink); }
.pessoa__mail { font-size: 12px; color: var(--faint); }
.pessoa__acoes { margin-left: auto; display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }

/* ------------------------------------------------------------ força da senha */
.forca { display: flex; gap: 4px; }
.forca span { height: 3px; flex: 1; background: var(--line-3); border-radius: 2px; }

/* ---------------------------------------------------------------- listinha */
.marcas { list-style: none; margin: 0; padding: 0; display: flex;
          flex-direction: column; gap: 11px; }
.marcas li { position: relative; padding-left: 22px; font-size: 14px;
             line-height: 1.65; color: var(--muted); }
.marcas li::before {
  content: ""; position: absolute; left: 2px; top: 9px;
  width: 6px; height: 6px; border-radius: 50%; background: var(--gold-deep);
}

/* ------------------------------------------------------------------- celular */
@media (max-width: 860px) {
  .form-grade, .form-grade--3 { grid-template-columns: minmax(0, 1fr) !important; }
  .acesso__caixa { padding: 28px 22px; }
  .acesso { padding: 28px 14px; }
  .pessoa { flex-wrap: wrap; }
  .pessoa__acoes { margin-left: 0; width: 100%; }
}

/* ==========================================================================
   MOVIMENTO
   43 espécimes aprovados. Sem biblioteca: só CSS e um punhado de JS.

   Duas regras valem para tudo aqui:
   1. Nada nasce invisível esperando um gatilho. Toda animação parte de um
      estado que já está na tela — se o JS falhar, a página continua legível.
   2. Quem pediu menos movimento no sistema recebe menos movimento. O bloco
      no fim desta seção desliga tudo. Enjoo e vertigem são reação real, e
      um painel de trabalho é usado o dia inteiro.
   ========================================================================== */

:root {
  --mola:  cubic-bezier(.22, 1, .36, 1);   /* entra rápido, assenta devagar */
  --saida: cubic-bezier(.4, 0, 1, 1);      /* sai acelerando */
}

/* ---------------------------------------------------------- 01-09 botões */
.btn { position: relative; overflow: hidden; isolation: isolate;
  transition: transform .22s var(--mola), box-shadow .22s var(--mola), border-color .22s, color .22s; }

/* 01 brilho que atravessa (só na ação principal, não nos calmos) */
.btn:not(.btn--calmo):not(.btn--perigo)::after {
  content: ""; position: absolute; inset: 0; z-index: -1;
  background: linear-gradient(105deg, transparent 30%, rgba(255,255,255,.5) 50%, transparent 70%);
  transform: translateX(-130%); transition: transform .62s var(--mola);
}
.btn:not(.btn--calmo):not(.btn--perigo):hover::after { transform: translateX(130%); }

/* 02 elevação */
.btn:not(.btn--calmo):not(.btn--perigo):hover { transform: translateY(-2px); box-shadow: 0 10px 22px -9px rgba(214,178,94,.5); }
.btn--calmo:hover { border-color: var(--line-4); color: var(--ink); }

/* 03 afundar */
.btn:active { transform: scale(.97); transition-duration: .09s; }

/* 04 anel de foco pelo teclado */
.btn:focus-visible { outline: none; box-shadow: 0 0 0 2px var(--void), 0 0 0 4px var(--gold); }

/* 05 carregando */
.btn[data-estado="carregando"] { color: transparent !important; pointer-events: none; }
.btn[data-estado="carregando"]::before {
  content: ""; position: absolute; inset: 0; margin: auto;
  width: 15px; height: 15px; border-radius: 50%;
  border: 2px solid rgba(18,16,13,.28); border-top-color: #12100D;
  animation: lb-girar .62s linear infinite;
}
.btn--calmo[data-estado="carregando"]::before { border-color: var(--line-3); border-top-color: var(--gold); }
@keyframes lb-girar { to { transform: rotate(360deg); } }

/* 06 concluído */
.btn[data-estado="feito"] { background: var(--ok) !important; color: #0B120D !important; }

/* 07 recusa que treme */
@keyframes lb-treme {
  10%,90% { transform: translateX(-1px); } 20%,80% { transform: translateX(2px); }
  30%,50%,70% { transform: translateX(-4px); } 40%,60% { transform: translateX(4px); }
}
.treme { animation: lb-treme .5s cubic-bezier(.36,.07,.19,.97); }

/* 08 segurar para confirmar — só para o que não tem volta */
.segurar { position: relative; overflow: hidden; }
.segurar__preenche {
  position: absolute; inset: 0; z-index: -1; background: rgba(232,132,111,.22);
  transform: scaleX(0); transform-origin: left;
}
.segurar[data-ativo="1"] .segurar__preenche { transform: scaleX(1); transition: transform 1.1s linear; }

/* 09 ondulação do ponto do clique */
.lb-onda {
  position: absolute; border-radius: 50%; background: rgba(18,16,13,.3);
  transform: scale(0); animation: lb-onda .58s var(--saida) forwards; pointer-events: none;
}
.btn--calmo .lb-onda { background: rgba(214,178,94,.22); }
@keyframes lb-onda { to { transform: scale(3.2); opacity: 0; } }

/* ------------------------------------------------------ 10-15 espera */
/* 10 barra fina no topo, em qualquer navegação */
.lb-topo {
  position: fixed; top: 0; left: 0; height: 2px; width: 0; z-index: 999;
  background: linear-gradient(90deg, var(--gold-deep), var(--gold-bright));
  box-shadow: 0 0 8px var(--gold); pointer-events: none;
}
.lb-topo.anda { animation: lb-carrega 1.7s var(--mola) forwards; }
@keyframes lb-carrega { 0%{width:0} 55%{width:72%} 100%{width:100%; opacity:0} }

/* 11 giro */
.giro { width: 26px; height: 26px; border-radius: 50%;
  border: 2px solid var(--line-3); border-top-color: var(--gold); animation: lb-girar .7s linear infinite; }
.giro--peq { width: 15px; height: 15px; border-width: 1.6px; }

/* 12 esqueleto com varredura */
.esqueleto { display: block; height: 9px; border-radius: 2px; background: var(--field);
  position: relative; overflow: hidden; }
.esqueleto::after {
  content: ""; position: absolute; inset: 0;
  background: linear-gradient(90deg, transparent, rgba(214,178,94,.13), transparent);
  transform: translateX(-100%); animation: lb-varre 1.5s infinite;
}
@keyframes lb-varre { to { transform: translateX(100%); } }

/* 13 três pontos pensando */
.pensando { display: inline-flex; gap: 6px; }
.pensando i { width: 7px; height: 7px; border-radius: 50%; background: var(--gold); animation: lb-pulsa 1.1s infinite; }
.pensando i:nth-child(2) { animation-delay: .16s; } .pensando i:nth-child(3) { animation-delay: .32s; }
@keyframes lb-pulsa { 0%,60%,100%{opacity:.22; transform:scale(.78)} 30%{opacity:1; transform:scale(1)} }

/* 14 anel com número / 28 anel do veredito */
.anel { position: relative; display: grid; place-items: center; }
.anel svg { position: absolute; inset: 0; transform: rotate(-90deg); }
.anel circle { fill: none; stroke-width: 5; }
.anel .trilho { stroke: var(--line-2); }
.anel .arco { stroke: var(--gold); stroke-linecap: round; transition: stroke-dashoffset 1.5s var(--mola); }

/* 15 barra sem fim conhecido */
.indeterminada { width: 100%; height: 3px; background: var(--field); overflow: hidden; border-radius: 3px; }
.indeterminada i { display: block; width: 38%; height: 100%; border-radius: 3px;
  background: linear-gradient(90deg, transparent, var(--gold), transparent); animation: lb-vaivem 1.35s infinite; }
@keyframes lb-vaivem { 0%{transform:translateX(-100%)} 100%{transform:translateX(320%)} }

/* --------------------------------------------- 16-20 envio de arquivos */
/* 16 área que acende ao arrastar */
.solta { border: 1.5px dashed var(--line-3); border-radius: var(--raio); padding: 28px 20px;
  text-align: center; color: var(--faint); font-size: 13px; cursor: pointer;
  transition: border-color .25s, background .25s, transform .25s var(--mola), color .25s; }
.solta:hover { border-color: var(--line-4); color: var(--muted); }
.solta.sobre { border-color: var(--gold); background: rgba(214,178,94,.06);
  transform: scale(1.015); color: var(--gold-bright); }
.solta.sobre .solta__ic { animation: lb-flutua .9s ease-in-out infinite; }
@keyframes lb-flutua { 50% { transform: translateY(-5px); } }
.solta__ic { display: block; font-size: 20px; margin-bottom: 8px; color: var(--gold); }

/* 17 arquivo entra na lista */
@keyframes lb-entra-arq { from { opacity: 0; transform: translateY(-9px) scale(.97); } to { opacity: 1; transform: none; } }
/* TRÊS COISAS DIFERENTES SE CHAMAVAM ".arq" NESTE ARQUIVO.
   Esta (a linha do envio com check), a lista de documentos do gerador e o
   campo de escolher arquivo do admin. Como a folha é lida de cima para
   baixo, a última declaração vencia: o campo do admin, lá embaixo, impunha
   "display:block" à lista do gerador e derrubava a grade — nome, peso e o
   botão de tirar ficavam grudados numa linha só, sem respiro. Agora cada
   componente tem nome próprio: ".arq-env" aqui, ".arq" na lista e
   ".arq-campo" no admin. */
.arq-env { position: relative; overflow: hidden; display: flex; align-items: center; gap: 10px;
  padding: 10px 12px; background: var(--field); border: 1px solid var(--line-2);
  border-radius: var(--raio); font-size: 12.5px; animation: lb-entra-arq .34s var(--mola) backwards; }
.arq-env__nome { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; color: var(--muted); }
.arq-env__pct { font-family: var(--f-mono); font-size: 10.5px; color: var(--gold); font-variant-numeric: tabular-nums; }
/* 18 progresso por arquivo */
.arq-env__tri { position: absolute; left: 0; bottom: 0; height: 2px; background: var(--gold); width: 0; transition: width .3s linear; }
/* 19 check que se desenha */
.tick { width: 16px; height: 16px; flex: 0 0 auto; }
.tick path { fill: none; stroke: var(--ok); stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round;
  stroke-dasharray: 22; stroke-dashoffset: 22; transition: stroke-dashoffset .42s var(--mola); }
.arq-env.pronto .tick path { stroke-dashoffset: 0; }
/* 20 remover colapsa */
.arq-env.sai { animation: lb-sai-arq .3s var(--saida) forwards; }
@keyframes lb-sai-arq { to { opacity: 0; transform: translateX(26px); height: 0; padding-block: 0; margin-top: -1px; } }

/* --------------------------------------------------- 21-25 navegação */
/* 21 marca dourada que desliza no menu */
.lateral__grupo { position: relative; }
.lateral__mira {
  position: absolute; left: 0; width: 2px; background: var(--gold);
  box-shadow: 0 0 8px rgba(214,178,94,.6); border-radius: 0 2px 2px 0;
  transition: transform .34s var(--mola), height .34s var(--mola); pointer-events: none;
}
/* o realce do item atual continua existindo sem JS; a mira é um extra */
.lateral a.item { transition: color .2s, background .2s; }
/* 22 ícone reage antes do texto */
.lateral a.item svg { transition: transform .3s var(--mola); }
.lateral a.item:hover svg { transform: translateX(2px) rotate(-6deg); }

/* 23 troca de tela em cascata / 43 painel entra em cascata */
@keyframes lb-entra-pag { from { opacity: 0; transform: translateY(14px); } to { opacity: 1; transform: none; } }
.conteudo > * { animation: lb-entra-pag .5s var(--mola) backwards; }
.conteudo > *:nth-child(1) { animation-delay: .02s; }
.conteudo > *:nth-child(2) { animation-delay: .07s; }
.conteudo > *:nth-child(3) { animation-delay: .12s; }
.conteudo > *:nth-child(4) { animation-delay: .17s; }
.conteudo > *:nth-child(5) { animation-delay: .22s; }
.conteudo > *:nth-child(6) { animation-delay: .27s; }
.conteudo > *:nth-child(n+7) { animation-delay: .3s; }

/* 24 trilha que se monta */
.trilha > * { animation: lb-entra-pag .42s var(--mola) backwards; }
.trilha > *:nth-child(2) { animation-delay: .07s; }
.trilha > *:nth-child(3) { animation-delay: .14s; }

/* 25 abas com marca corrediça */
.abas { position: relative; }
.abas__lista { display: flex; gap: 2px; border-bottom: 1px solid var(--line-2); position: relative; }
.abas__lista button { background: none; border: none; color: var(--faint); font-family: var(--f-sans);
  font-size: 13px; padding: 9px 14px; cursor: pointer; transition: color .22s; }
.abas__lista button[aria-selected="true"] { color: var(--gold-bright); }
.abas__mira { position: absolute; bottom: -1px; height: 2px; background: var(--gold);
  transition: transform .36s var(--mola), width .36s var(--mola); }

/* ---------------------------------------------- 26-31 números e tabelas */
/* 26 número que sobe — a classe marca o alvo, o JS faz a conta */
.conta { font-variant-numeric: tabular-nums; }

/* 27 barras crescendo do chão */
.barra-graf { transition: height .85s var(--mola); }

/* 29 linhas entram escalonadas */
.tabela tbody tr { animation: lb-entra-linha .44s var(--mola) backwards; }
@keyframes lb-entra-linha { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: none; } }
.tabela tbody tr:nth-child(1){animation-delay:.03s} .tabela tbody tr:nth-child(2){animation-delay:.07s}
.tabela tbody tr:nth-child(3){animation-delay:.11s} .tabela tbody tr:nth-child(4){animation-delay:.15s}
.tabela tbody tr:nth-child(5){animation-delay:.19s} .tabela tbody tr:nth-child(6){animation-delay:.23s}
.tabela tbody tr:nth-child(7){animation-delay:.27s} .tabela tbody tr:nth-child(n+8){animation-delay:.3s}

/* 30 linha destacada no hover */
.tabela tbody tr { transition: background .18s; }
.tabela tbody tr:hover { background: var(--field); }
.tabela tbody tr:hover td:first-child { box-shadow: inset 2px 0 0 var(--gold); }

/* 31 reordenar sem piscar — o JS mede antes e depois, o CSS leva */
.reordena { transition: transform .45s var(--mola); }

/* ------------------------------------------- 32-35 avisos e diálogos */
/* 32 recado que entra e sai sozinho */
.recado { animation: lb-recado .35s var(--mola) backwards; }
@keyframes lb-recado { from { opacity: 0; transform: translateX(22px); } to { opacity: 1; transform: none; } }
.recado.some { animation: lb-recado-sai .4s var(--saida) forwards; }
@keyframes lb-recado-sai { to { opacity: 0; transform: translateX(22px); } }

/* 33 diálogo com fundo desfocado */
.fundo { position: fixed; inset: 0; z-index: 200; display: grid; place-items: center; padding: 20px;
  background: rgba(5,4,3,.62); backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
  opacity: 0; pointer-events: none; transition: opacity .3s; }
.fundo.abre { opacity: 1; pointer-events: auto; }
.fundo .caixa { background: var(--raised); border: 1px solid var(--gold-edge); border-radius: var(--raio);
  padding: 26px 28px; max-width: 420px; width: 100%;
  transform: scale(.9) translateY(10px); opacity: 0;
  transition: transform .34s var(--mola), opacity .3s; }
.fundo.abre .caixa { transform: none; opacity: 1; }

/* 34 acordeão com altura animada — sem saber a altura de antemão */
.acord__miolo { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .38s var(--mola); }
.acord__miolo.abre { grid-template-rows: 1fr; }
.acord__miolo > div { overflow: hidden; }
.acord button span.sinal { transition: transform .3s var(--mola); display: inline-block; }
.acord button[aria-expanded="true"] span.sinal { transform: rotate(45deg); }

/* 35 dica que cresce do pé */
.dica { position: relative; display: inline-flex; }
.dica__bolha {
  position: absolute; bottom: calc(100% + 8px); left: 50%; translate: -50% 0;
  background: var(--raised); border: 1px solid var(--line-3); border-radius: var(--raio);
  padding: 7px 11px; font-size: 11.5px; color: var(--muted); white-space: nowrap; z-index: 50;
  opacity: 0; transform: scale(.9) translateY(4px); transform-origin: bottom center;
  transition: opacity .2s, transform .24s var(--mola); pointer-events: none;
}
.dica:hover .dica__bolha, .dica:focus-within .dica__bolha { opacity: 1; transform: none; }

/* ------------------------------------------------- 36-40 formulários */
/* 36 rótulo que sobe + 37 borda dourada acende */
.campo--flut { position: relative; display: block; }
.campo--flut > input, .campo--flut > select {
  transition: border-color .25s, box-shadow .25s;
}
.campo--flut > input:focus, .campo--flut > select:focus {
  border-color: var(--gold-edge); box-shadow: 0 0 0 3px rgba(214,178,94,.1);
}
.campo--flut > label {
  position: absolute; left: 12px; top: 13px; font-size: 13px; color: var(--faint);
  pointer-events: none; transform-origin: left top;
  transition: transform .22s var(--mola), color .22s;
}
.campo--flut > input:focus + label,
.campo--flut > input:not(:placeholder-shown) + label { transform: translateY(-8px) scale(.78); color: var(--gold); }

/* 38 erro treme e a mensagem desce */
.erro-msg { display: block; font-size: 11.5px; color: var(--alto); margin-top: 5px;
  max-height: 0; overflow: hidden; opacity: 0;
  transition: max-height .3s var(--mola), opacity .25s; }
.errado .erro-msg { max-height: 40px; opacity: 1; }

/* 39 contador que muda de cor */
.contador { font-family: var(--f-mono); font-size: 10.5px; color: var(--faint-2);
  text-align: right; transition: color .25s; font-variant-numeric: tabular-nums; }
.contador.perto { color: var(--gold); } .contador.estourou { color: var(--alto); }

/* 40 chave que desliza */
.chave { width: 42px; height: 23px; border-radius: 99px; background: var(--line-2); border: none;
  position: relative; cursor: pointer; transition: background .28s var(--mola); flex: 0 0 auto; }
.chave::after { content: ""; position: absolute; top: 3px; left: 3px; width: 17px; height: 17px;
  border-radius: 50%; background: var(--faint); transition: transform .28s var(--mola), background .28s; }
.chave[aria-checked="true"] { background: var(--gold-deep); }
.chave[aria-checked="true"]::after { transform: translateX(19px); background: var(--gold-bright); }
.chave:focus-visible { outline: 2px solid var(--gold); outline-offset: 2px; }

/* --------------------------------------------------- 41-42 ambiente */
/* 41 brilho que respira ao fundo */
.brilho::before { animation: lb-respira 5.5s ease-in-out infinite; }
@keyframes lb-respira { 50% { transform: scale(1.18); opacity: .6; } }

/* 42 saldo pulsa quando muda */
.saldo { transition: border-color .3s; }
.saldo.mudou { animation: lb-pulsa-saldo .8s var(--mola); }
@keyframes lb-pulsa-saldo {
  30% { transform: scale(1.06); border-color: var(--gold); box-shadow: 0 0 18px -4px rgba(214,178,94,.5); }
}

/* cartões do painel também reagem */
.painel, .bloco { transition: transform .25s var(--mola), border-color .25s, box-shadow .25s; }
a.painel:hover, a.bloco:hover, .painel--vivo:hover {
  transform: translateY(-2px); border-color: var(--line-4);
  box-shadow: 0 12px 28px -16px rgba(0,0,0,.7);
}

/* ============================== A REGRA ACIMA DE TODAS ==================== */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .001ms !important;
    scroll-behavior: auto !important;
  }
}

/* ==========================================================================
   GERADOR — a área de envio de documentos e os campos com máscara

   O envio é o momento em que o advogado entrega o caso ao sistema. Ele
   precisa parecer um instrumento, não um formulário: moldura de visor,
   varredura ao arrastar, e cada arquivo aceito entrando como uma linha de
   registro. Tudo isso desliga sozinho em `prefers-reduced-motion`.
   ========================================================================== */

.solta {
  position: relative;
  display: grid;
  place-items: center;
  gap: 14px;
  padding: 54px 32px;
  background:
    radial-gradient(120% 90% at 50% 0%, rgba(214,178,94,.045) 0%, transparent 62%),
    var(--field);
  border: 1px dashed var(--line-3);
  border-radius: var(--raio);
  text-align: center;
  cursor: pointer;
  overflow: hidden;
  transition: border-color .22s var(--mola), background-color .22s, transform .22s var(--mola);
}
.solta:hover { border-color: var(--gold-edge); }
.solta:focus-visible { outline: 1px solid var(--gold); outline-offset: 3px; }

/* Os quatro cantos do visor. Ficam apagados e acendem quando o arquivo
   chega por cima — é o sinal de que a área está pronta para receber. */
.solta__canto {
  position: absolute; width: 16px; height: 16px;
  border: 1px solid var(--line-4);
  transition: border-color .22s, width .22s var(--mola), height .22s var(--mola);
  pointer-events: none;
}
.solta__canto--ne { top: 10px; left: 10px;  border-right: 0; border-bottom: 0; }
.solta__canto--no { top: 10px; right: 10px; border-left: 0;  border-bottom: 0; }
.solta__canto--se { bottom: 10px; left: 10px;  border-right: 0; border-top: 0; }
.solta__canto--so { bottom: 10px; right: 10px; border-left: 0;  border-top: 0; }

.solta.sobre {
  border-color: var(--gold);
  background:
    radial-gradient(120% 90% at 50% 0%, rgba(214,178,94,.10) 0%, transparent 64%),
    var(--raised);
  transform: scale(1.004);
}
.solta.sobre .solta__canto { border-color: var(--gold); width: 22px; height: 22px; }

/* A varredura: uma linha de luz que percorre a área enquanto o arquivo
   está sendo arrastado por cima. Só existe nesse estado. */
.solta__scan {
  position: absolute; inset: 0 0 auto 0; height: 1px;
  background: linear-gradient(90deg, transparent, var(--gold), transparent);
  opacity: 0; pointer-events: none;
}
.solta.sobre .solta__scan { animation: lb-varre 1.25s linear infinite; }
@keyframes lb-varre {
  0%   { transform: translateY(0);     opacity: 0; }
  12%  { opacity: .85; }
  88%  { opacity: .85; }
  100% { transform: translateY(var(--h, 180px)); opacity: 0; }
}

.solta__icone { color: var(--gold); opacity: .8; transition: transform .3s var(--mola); }
.solta.sobre .solta__icone { transform: translateY(-3px) scale(1.06); }
.solta__titulo { font-size: 15px; color: var(--ink); }
.solta__dica   { font-size: 12px; color: var(--faint); font-family: var(--f-mono); }
.solta__ou {
  font-size: 11px; letter-spacing: .1em; color: var(--faint-2);
  font-family: var(--f-mono); text-transform: uppercase;
}

/* --------------------------------------------------------- lista de arquivos */
/* CADA DOCUMENTO É UM CARTÃO, E CARTÃO PRECISA DE AR EM VOLTA.
   Antes era uma grade de fio de cabelo — 1px de fundo aparecendo entre uma
   linha e outra. Com vinte documentos aquilo virava um bloco cinza único e
   não dava para saber onde um arquivo terminava e o outro começava. Agora
   são cartões separados de verdade, com borda própria e 8px entre eles. */
.arqs { display: grid; gap: 8px; }

/* A DIVISÓRIA ENTRE UM CONTRATO E OUTRO.
   Quando o advogado separa as fotos em pastas, cada pasta é um contrato — e a
   lista tem de mostrar isso, senão ele confirma um envio sem saber se a foto
   que faltava entrou no contrato certo. Só aparece quando há pasta: envio de
   arquivos soltos continua sendo uma lista simples. */
.arqs__pasta {
  display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap;
  padding: 9px 16px; background: var(--raised);
  border: 1px solid var(--line-2); border-left: 2px solid var(--gold-edge);
  border-radius: var(--raio); margin-top: 6px;
}
.arqs__pasta:first-child { margin-top: 0; }
.arqs__pasta__nome {
  font-family: var(--f-mono); font-size: 11px; letter-spacing: .1em;
  text-transform: uppercase; color: var(--gold-bright);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap; max-width: 60%;
}
.arqs__pasta__dica { font-size: 11.5px; color: var(--faint-2); }

/* O seletor de pastas: um campo de arquivo não pode escolher arquivo E pasta,
   então são dois. O de pasta fica fora da área de solta, porque lá dentro o
   rótulo que cobre a caixa inteira abriria o seletor errado. */
.pastas { display: flex; flex-direction: column; gap: 8px; }
.pastas__campo { position: absolute; width: 1px; height: 1px; opacity: 0;
                 overflow: hidden; clip-path: inset(50%); }
.pastas__botao {
  display: inline-flex; align-items: center; gap: 9px; align-self: flex-start;
  padding: 8px 13px; cursor: pointer;
  border: 1px dashed var(--line-3); border-radius: var(--raio);
  background: var(--field); color: var(--muted);
  font-size: 12.5px;
  transition: color .18s, border-color .18s, background .18s;
}
.pastas__botao:hover { color: var(--gold-bright); border-color: var(--gold-edge); background: var(--raised); }
/* O campo é invisível, mas continua focável pelo teclado: o contorno tem de
   aparecer no rótulo, que é o que se vê. Por isso o campo vem ANTES dele no
   HTML — irmão seguinte é o que o seletor alcança. */
.pastas__campo:focus-visible + .pastas__botao {
  outline: 2px solid var(--gold); outline-offset: 2px;
  color: var(--gold-bright); border-color: var(--gold-edge);
}
.pastas__dica { font-size: 12px; line-height: 1.6; }
.arq {
  display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto;
  align-items: center; gap: 14px;
  padding: 12px 16px; background: var(--panel);
  border: 1px solid var(--line-2); border-radius: var(--raio);
  animation: lb-arq-entra .3s var(--mola) both;
  transition: border-color .18s, background .18s;
}
.arq:hover { border-color: var(--line-3); background: var(--raised); }
@keyframes lb-arq-entra {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: none; }
}
.arq.saindo { animation: lb-arq-sai .2s ease-in forwards; }
@keyframes lb-arq-sai {
  to { opacity: 0; transform: translateX(10px); }
}
.arq__tipo {
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .08em;
  color: var(--gold); background: var(--raised);
  border: 1px solid var(--gold-edge); border-radius: 2px;
  padding: 4px 7px; min-width: 42px; text-align: center;
}
.arq__nome {
  font-size: 13px; color: var(--ink);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.arq__peso {
  font-family: var(--f-mono); font-size: 11.5px; color: var(--faint);
  white-space: nowrap; font-variant-numeric: tabular-nums;
}
/* O × tem de ser uma caixa quadrada com o glifo NO MEIO. Com "line-height:1"
   e nada mais ele descia para o rodapé do botão e ficava torto; o flex
   centrado resolve nos dois eixos de uma vez. "flex: 0 0 auto" impede que a
   grade o encolha quando o nome do arquivo é longo. */
.arq__tira {
  display: inline-flex; align-items: center; justify-content: center;
  flex: 0 0 auto; padding: 0;
  background: none; border: 1px solid var(--line-3); border-radius: var(--raio);
  color: var(--faint); width: 26px; height: 26px; line-height: 1;
  cursor: pointer; font-size: 15px;
  transition: color .18s, border-color .18s, background .18s, transform .18s var(--mola);
}
.arq__tira:hover, .arq__tira:focus-visible {
  color: var(--alto); border-color: var(--alto-line);
  background: var(--alto-bg); transform: rotate(90deg);
}
.arq--ruim { background: var(--alto-bg); }
.arq--ruim .arq__tipo { color: var(--alto); border-color: var(--alto-line); }
.arq__erro { grid-column: 2 / -1; font-size: 11.5px; color: var(--alto); }

/* ------------------------------------------------------------- medidor total */
.medidor { display: grid; gap: 7px; }
.medidor__trilho { height: 2px; background: var(--line-2); overflow: hidden; }
.medidor__barra {
  height: 100%; width: 0;
  background: var(--gold-grad);
  transition: width .3s var(--mola), background-color .3s;
}
.medidor.cheio .medidor__barra { background: linear-gradient(90deg, #D9A441, #E8846F); }

/* ------------------------------------------------------------------ overlay */
.gerando {
  position: fixed; inset: 0; z-index: 60;
  display: grid; place-items: center;
  background: rgba(10,9,7,.92);
  backdrop-filter: blur(3px);
  animation: lb-fade .25s ease both;
}
@keyframes lb-fade { from { opacity: 0 } to { opacity: 1 } }
.gerando__caixa {
  width: min(460px, 90vw); display: grid; gap: 20px;
  padding: 34px; background: var(--panel); border: 1px solid var(--line-2);
}
.gerando__passos { display: grid; gap: 10px; }
.passo {
  display: grid; grid-template-columns: 18px 1fr; align-items: center; gap: 11px;
  font-size: 13px; color: var(--faint-2); transition: color .3s;
}
.passo__bolha {
  width: 7px; height: 7px; border-radius: 50%; margin-left: 5px;
  background: var(--line-4); transition: background-color .3s, box-shadow .3s;
}
.passo.ativo { color: var(--ink); }
.passo.ativo .passo__bolha {
  background: var(--gold); box-shadow: 0 0 0 4px rgba(214,178,94,.14);
  animation: lb-pulsa 1.4s ease-in-out infinite;
}
.passo.feito { color: var(--muted-2); }
.passo.feito .passo__bolha { background: var(--gold-deep); }
@keyframes lb-pulsa { 50% { box-shadow: 0 0 0 8px rgba(214,178,94,.05) } }

.gerando__trilho { height: 2px; background: var(--line-2); overflow: hidden; }
.gerando__barra { height: 100%; width: 0; background: var(--gold-grad); transition: width .2s linear; }
.gerando__barra.indef {
  width: 34%; animation: lb-indef 1.5s var(--mola) infinite;
}
@keyframes lb-indef {
  0%   { transform: translateX(-100%) }
  100% { transform: translateX(390%) }
}
.gerando__relogio { font-family: var(--f-mono); font-size: 12px; color: var(--faint); }

/* ------------------------------------------------------- campos com máscara */
.campo--valor input { font-family: var(--f-mono); text-align: right; }
.campo--valor { position: relative; }
.campo--valor .prefixo {
  position: absolute; left: 12px; bottom: 8px;
  font-family: var(--f-mono); font-size: 12px; color: var(--faint-2);
  pointer-events: none;
}
.campo--valor input { padding-left: 34px !important; }

@media (prefers-reduced-motion: reduce) {
  .solta, .solta__canto, .solta__icone, .arq, .arq__tira,
  .medidor__barra, .gerando, .gerando__barra { transition: none; animation: none; }
  .solta.sobre .solta__scan { animation: none; opacity: 0; }
  .passo.ativo .passo__bolha { animation: none; }
  .gerando__barra.indef { animation: none; width: 100%; }
}

/* Os blocos numerados do gerador respiram e ficam separados por uma régua
   fina. Tópico grudado no anterior é o tipo de coisa que faz a pessoa pular
   um campo sem perceber. */
.bloco-gerador + .bloco-gerador {
  padding-top: 30px;
  border-top: 1px solid var(--line);
}
.pergunta {
  display: flex; justify-content: space-between; align-items: center;
  gap: 20px; flex-wrap: wrap;
  padding: 12px 14px;
  background: var(--field);
  border: 1px solid var(--line-2);
  border-radius: var(--raio);
}
.pergunta__texto { flex: 1; min-width: 260px; font-size: 13px; color: var(--muted); }
.pergunta__opcoes { display: flex; gap: 18px; }
.pergunta__opcoes label {
  display: inline-flex; align-items: center; gap: 7px;
  font-size: 13px; color: var(--muted); cursor: pointer;
}
.pergunta__opcoes input { accent-color: var(--gold); cursor: pointer; }

/* O atributo `hidden` precisa vencer o `display` da própria classe. Sem isto,
   `.medidor { display: grid }` mantém o elemento na tela mesmo marcado como
   escondido — e o medidor aparecia vazio antes de haver qualquer arquivo. */
[hidden] { display: none !important; }

/* ==========================================================================
   ÁREA DE SOLTA — DUAS ZONAS, E O QUE ACONTECE QUANDO O ARQUIVO POUSA
   ==========================================================================
   A separação em dois grupos (cliente / contrato) tem consequência visual:
   as áreas ficam lado a lado e precisam caber sem virar duas caixas enormes.
   Daí a variante --dupla, mais baixa, e a contagem dentro da própria área
   para o advogado ver de relance quantos arquivos foram para cada lado. */

/* Lado a lado, as duas caixas não precisam do tamanho de uma só. */
.solta--dupla { padding: 26px 20px; gap: 8px; min-height: 0; }
.solta--dupla .solta__titulo { font-size: 13.5px; }
.solta--dupla .solta__icone { width: 24px; height: 24px; }

/* A aura: um halo que só existe enquanto o arquivo paira sobre a área.
   Fica atrás de tudo (z-index 0 contra o conteúdo, que sobe para 1). */
.solta__aura {
  position: absolute; inset: -40%; z-index: 0;
  background: radial-gradient(closest-side, rgba(214,178,94,.16), transparent 72%);
  opacity: 0; transform: scale(.7);
  transition: opacity .3s var(--mola), transform .45s var(--mola);
  pointer-events: none;
}
.solta.sobre .solta__aura { opacity: 1; transform: scale(1); }

/* Só o conteúdo sobe acima da aura, um a um.
 *
 * Aqui havia um `.solta > *:not(.solta__aura)` que parecia mais limpo e
 * custou caro: por ser mais específico, ele vencia o `position: absolute`
 * dos quatro cantos do visor. Os cantos saíam do canto, viravam quatro
 * LINHAS da grade no meio da caixa, e a área de solta ficava 105px mais
 * alta do que devia. Regra que muda o `position` de "todo mundo menos
 * fulano" é como se apaga o posicionamento de quem dependia dele. */
.solta__icone, .solta__titulo, .solta__ou, .solta__dica, .solta__conta {
  position: relative; z-index: 1;
}
.solta__canto, .solta__scan { z-index: 1; }

/* O pulso de recebimento. Dura 0,7s e some: é a confirmação de que o
   arquivo pousou NESTA área, e não na outra ao lado. */
.solta.recebeu { animation: lb-pousou .7s var(--mola); }
@keyframes lb-pousou {
  0%   { border-color: var(--gold); box-shadow: 0 0 0 0 rgba(214,178,94,.30); }
  55%  { border-color: var(--gold); box-shadow: 0 0 0 10px rgba(214,178,94,0); }
  100% { box-shadow: 0 0 0 0 rgba(214,178,94,0); }
}

/* Área que já tem arquivo para de gritar por atenção: a borda vira sólida
   discreta e o ícone recua. O destaque passa a ser a lista abaixo. */
.solta.tem { border-style: solid; border-color: var(--gold-edge); }
.solta.tem .solta__icone { opacity: .45; transform: scale(.92); }
.solta.tem .solta__titulo { color: var(--muted); }

.solta__conta {
  font-size: 10.5px; letter-spacing: .08em; text-transform: uppercase;
  color: var(--gold-bright); min-height: 13px;
}

/* A escadinha de entrada: cada arquivo recém-chegado desce um pouco depois
   do anterior, com um brilho que atravessa a linha uma vez. Só as linhas
   novas se animam — redesenhar a lista inteira com tudo pulando de novo
   fazia a tela tremer a cada remoção. */
.arq.pousando {
  animation: lb-pousa .42s var(--mola) both;
  animation-delay: var(--atraso, 0ms);
}
@keyframes lb-pousa {
  0%   { opacity: 0; transform: translateY(-14px) scale(.98); }
  60%  { opacity: 1; transform: translateY(2px) scale(1); }
  100% { opacity: 1; transform: none; }
}
.arq.pousando::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(100deg, transparent 20%, rgba(242,221,164,.10) 50%, transparent 80%);
  animation: lb-brilho .7s ease-out both;
  animation-delay: var(--atraso, 0ms);
  pointer-events: none;
}
@keyframes lb-brilho {
  from { transform: translateX(-100%); opacity: 1; }
  to   { transform: translateX(100%);  opacity: 0; }
}
.arq { position: relative; overflow: hidden; }

@media (prefers-reduced-motion: reduce) {
  .solta.recebeu, .arq.pousando, .arq.pousando::after,
  .solta.sobre .solta__scan { animation: none; }
}

/* ==========================================================================
   A CONFIRMAÇÃO DE CUSTO
   ==========================================================================
   Esta tela existe para uma coisa só: mostrar o número antes de gastá-lo.
   Por isso a cifra é grande e tudo o mais é apoio. */

.confirma__cifra {
  display: grid; grid-template-columns: minmax(180px, auto) 1fr;
  gap: 28px; align-items: center;
  padding: 24px 26px;
  background:
    radial-gradient(120% 140% at 0% 0%, rgba(214,178,94,.06) 0%, transparent 60%),
    var(--field);
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
}
.confirma__num {
  font-family: var(--f-mono); font-variant-numeric: tabular-nums;
  font-size: 46px; line-height: .95; color: var(--gold-bright);
}

.escala { display: grid; gap: 9px; }
.escala__trilho {
  position: relative; height: 4px; border-radius: 2px;
  background: var(--line-2);
}
.escala__zona {
  position: absolute; inset: 0; border-radius: 2px;
  background: linear-gradient(90deg, var(--gold-deep), var(--gold), #C97F4E);
  opacity: .55;
}
/* O losango marca onde o caso TÍPICO cai dentro da faixa. Sem ele a barra
   diria apenas "entre tanto e tanto", que é menos do que se sabe. */
.escala__marca {
  position: absolute; top: 50%; width: 11px; height: 11px;
  margin: -5.5px 0 0 -5.5px; border-radius: 2px;
  background: var(--gold-bright);
  box-shadow: 0 0 0 3px var(--field), 0 0 10px rgba(214,178,94,.5);
  transform: rotate(45deg);
}
.escala__ponta { font-size: 11px; color: var(--faint); }

@media (max-width: 720px) {
  .confirma__cifra { grid-template-columns: 1fr; gap: 20px; }
  .confirma__num { font-size: 38px; }
}

/* ==========================================================================
   CAMPOS DO GERADOR — UMA ALTURA SÓ
   ==========================================================================
   Estes campos nasceram com o estilo escrito à mão em cada input, e por isso
   ficaram 41px altos enquanto o `.entrada` do resto do painel tem 52px: duas
   alturas de campo na mesma tela, e nenhuma forma de acertar as duas de uma
   vez. Agora a regra é uma só, aqui. */

.campo--flut > input,
.campo--flut > select {
  width: 100%; height: 52px;
  padding: 19px 12px 6px;
  background: var(--field);
  border: 1px solid var(--line-3);
  border-radius: var(--raio);
  color: var(--ink);
  font-family: var(--f-sans);
  font-size: 14px;
}
/* Caixa de texto com o mesmo rótulo flutuante dos demais campos. Sem isto,
   o cadastro do acervo — que é quase todo texto colado — ficava com dois
   desenhos de campo na mesma tela. */
.campo--flut > textarea {
  width: 100%; min-height: 96px;
  padding: 22px 12px 10px;
  background: var(--field);
  border: 1px solid var(--line-3);
  border-radius: var(--raio);
  color: var(--ink);
  font-family: var(--f-sans);
  font-size: 14px; line-height: 1.6; resize: vertical;
  transition: border-color .25s, box-shadow .25s;
}
.campo--flut > textarea:focus {
  outline: none; border-color: var(--gold-edge); box-shadow: 0 0 0 3px rgba(214,178,94,.1);
}
.campo--flut > textarea:focus + label,
.campo--flut > textarea:not(:placeholder-shown) + label {
  transform: translateY(-10px) scale(.76); color: var(--gold);
}

/* O seletor de data nativo desenha o próprio calendário: sem isto ele abre
   branco por cima de um painel preto. */
.campo--flut > input[type="date"] { color-scheme: dark; }

/* Caixa de marcar — a do "já conferi o inteiro teor", que é o que separa o
   acervo de uma lista de referências não verificadas. */
input[type="checkbox"] {
  appearance: none; -webkit-appearance: none;
  width: 17px; height: 17px; flex: none;
  border: 1px solid var(--line-4); border-radius: var(--raio);
  background: var(--field); cursor: pointer; position: relative;
  transition: border-color .2s, background-color .2s;
}
input[type="checkbox"]:hover { border-color: var(--gold-deep); }
input[type="checkbox"]:checked { border-color: var(--gold); background: rgba(214,178,94,.14); }
input[type="checkbox"]:checked::after {
  content: ''; position: absolute; left: 4px; top: 4px;
  width: 7px; height: 3.5px;
  border-left: 1.6px solid var(--gold-bright); border-bottom: 1.6px solid var(--gold-bright);
  transform: rotate(-45deg);
}
input[type="checkbox"]:focus-visible { outline: 2px solid var(--gold-deep); outline-offset: 2px; }

.campo--flut > label { top: 17px; }
.campo--flut > input:focus + label,
.campo--flut > input:not(:placeholder-shown) + label {
  transform: translateY(-10px) scale(.76);
}
.campo--flut--maiusc > input { text-transform: uppercase; }

.campo--valor > input { font-family: var(--f-mono); text-align: right; padding-left: 36px; }
.campo--valor .prefixo { bottom: 7px; }

/* ==========================================================================
   ESCOLHA BINÁRIA — Não / Sim
   ==========================================================================
   Dois radios soltos com a bolinha do sistema operacional destoavam de tudo
   nesta tela e, pior, eram pequenos demais para uma pergunta cuja resposta
   muda o cálculo. Viram duas pastilhas coladas com um cursor que desliza de
   uma para a outra.

   Continua sendo `input[type=radio]` de verdade por baixo: teclado, leitor de
   tela, `required` e o POST funcionam sem uma linha de JavaScript. */

.binario {
  position: relative;
  display: inline-grid;
  grid-template-columns: 1fr 1fr;
  align-items: stretch;
  min-width: 168px;
  padding: 3px;
  background: var(--carbon);
  border: 1px solid var(--line-3);
  border-radius: 999px;
  isolation: isolate;
}
.binario input {
  position: absolute; opacity: 0; width: 0; height: 0; margin: 0;
  pointer-events: none;
}
.binario label {
  z-index: 1;
  padding: 8px 20px;
  border-radius: 999px;
  font-size: 13px; line-height: 1.2; text-align: center;
  color: var(--muted-2);
  cursor: pointer;
  transition: color .24s var(--mola);
  user-select: none;
}
.binario label:hover { color: var(--ink); }

/* O cursor. Nasce invisível: pergunta sem resposta não pode parecer
   respondida — é ela que decide se o valor entra ou sai do cálculo. */
.binario__cursor {
  position: absolute; z-index: 0;
  top: 3px; bottom: 3px; left: 3px;
  width: calc(50% - 3px);
  border-radius: 999px;
  background: var(--gold-grad);
  box-shadow: 0 1px 10px rgba(214,178,94,.22);
  opacity: 0;
  transition: transform .3s var(--mola), opacity .2s;
}
.binario input:checked ~ .binario__cursor { opacity: 1; }
.binario input:nth-of-type(1):checked ~ .binario__cursor { transform: translateX(0); }
.binario input:nth-of-type(2):checked ~ .binario__cursor { transform: translateX(100%); }
.binario input:checked + label { color: #12100D; font-weight: 500; }

/* O foco tem de aparecer no rótulo: o input está escondido. */
.binario input:focus-visible + label {
  outline: 2px solid var(--gold); outline-offset: 2px;
}

/* A linha inteira responde. Enquanto está sem resposta a borda esquerda
   avisa; respondida, ela se apaga. */
.pergunta {
  border-left: 2px solid var(--line-2);
  transition: border-color .3s, background-color .3s;
}
.pergunta:has(input:checked) { border-left-color: var(--gold-edge); }
.pergunta:not(:has(input:checked)) { border-left-color: var(--gold-deep); }

@media (max-width: 560px) {
  .binario { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .binario__cursor, .binario label { transition: none; }
}

/* ==========================================================================
   CURVA DA MÉDIA DO BACEN
   ==========================================================================
   Substitui as barras a partir do zero. Numa série que anda entre 1,69% e
   2,05%, barra desde o zero desenha 27 retângulos iguais — a variação, que é
   a única coisa que se quer ver ali, desaparecia. Curva pode ter escala
   truncada; barra não pode. A escala fica escrita em cima do desenho, e os
   números exatos ficam na tabela logo abaixo. */

/* ==========================================================================
   ÁREA DA PLATAFORMA
   ==========================================================================
   Parecida com o painel de propósito — é o mesmo sistema — e diferente o
   bastante para ninguém confundir as duas. Quem confunde acaba lançando
   crédito na conta errada, e é por isso que a faixa do topo fica em toda
   tela, e não só na primeira. */

.app--admin .lateral { border-right-color: var(--gold-edge); }
.app--admin .item[aria-current="page"] { box-shadow: inset 2px 0 0 var(--gold); }

.barra--admin {
  border-bottom: 1px solid var(--gold-edge);
  background:
    linear-gradient(90deg, rgba(214,178,94,.07), transparent 42%),
    var(--carbon);
}
.barra--admin .pai { color: var(--gold); }

.etiq--admin {
  color: var(--gold); border-color: var(--gold-edge);
  background: rgba(214,178,94,.06);
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .08em;
  text-transform: uppercase;
}

/* A porta da área, no menu do painel. Fica discreta: quem opera a plataforma
   passa o dia no painel e não precisa de um botão gritando ao lado. */
.item--plataforma { color: var(--gold); }
.item--plataforma:hover { color: var(--gold-bright); }

/* O MÓDULO QUE O PLANO NÃO INCLUI.
   Continua no menu, apagado e com cadeado. Apagar é o suficiente: riscar ou
   travar o clique só faria a pessoa achar que é defeito. Clicando, ela cai na
   tela que explica qual plano abre aquilo — que é para onde ela precisa ir. */
.lateral a.item--trancado { color: var(--faint-2); }
.lateral a.item--trancado svg [stroke] { stroke: currentColor; }
.lateral a.item--trancado:hover { color: var(--muted); }
.item__cadeado {
  margin-left: auto; display: inline-flex; align-items: center;
  color: var(--faint-2); flex: 0 0 auto;
}
.lateral a.item--trancado:hover .item__cadeado { color: var(--gold-deep); }

/* A TELA DO MÓDULO TRANCADO. O cadeado à esquerda, o texto à direita, e o
   texto usa a largura toda — é a mesma regra das aberturas do site. */
.trancado {
  display: grid; grid-template-columns: 54px minmax(0, 1fr); gap: 22px;
  align-items: start; padding: 34px 32px;
  border: 1px solid var(--line-2); border-radius: var(--raio);
  background: var(--panel);
}
.trancado__cadeado {
  display: flex; align-items: center; justify-content: center;
  width: 54px; height: 54px; border-radius: 50%;
  border: 1px solid var(--gold-edge, var(--line-2)); background: var(--raised);
  color: var(--gold);
}
.trancado h2 { font-size: clamp(22px, 2.4vw, 30px); line-height: 1.15; max-width: none; }
@media (max-width: 720px) {
  .trancado { grid-template-columns: minmax(0, 1fr); gap: 16px; padding: 26px 20px; }
}

/* ----------------------------------------------- gráfico de colunas simples
   Barras aqui SAEM DO ZERO e devem sair mesmo: contagem de peças por dia tem
   zero como referência real, ao contrário de taxa de juros — e é por isso que
   a série do BACEN usa curva e esta usa coluna. */
.colunas {
  display: flex; align-items: flex-end; gap: 6px;
  height: 180px; padding-top: 8px;
}
.coluna {
  flex: 1; min-width: 0; display: flex; flex-direction: column;
  align-items: center; justify-content: flex-end; gap: 6px; height: 100%;
}
.coluna__valor {
  font-size: 10.5px; color: var(--faint); height: 14px;
  font-variant-numeric: tabular-nums;
}
.coluna__barra {
  width: 100%; max-width: 46px; min-height: 2px;
  background: var(--gold-grad); border-radius: 1px;
  transition: height .5s var(--mola), filter .2s;
  animation: lb-sobe .6s var(--mola) both;
}
.coluna:hover .coluna__barra { filter: brightness(1.25); }
.coluna__barra--zero { background: var(--line-3); animation: none; }
.coluna__dia {
  font-size: 9.5px; color: var(--faint-2); white-space: nowrap;
}
@keyframes lb-sobe { from { transform: scaleY(0); transform-origin: bottom; } }

@media (max-width: 720px) {
  .colunas { height: 140px; gap: 3px; }
  .coluna__dia { font-size: 8px; transform: rotate(-45deg); }
}
@media (prefers-reduced-motion: reduce) {
  .coluna__barra { animation: none; transition: none; }
}

/* ==========================================================================
   SÉRIES DO BACEN — CARTÕES DE MODALIDADE
   ==========================================================================
   A tela mostrava as cinco modalidades abertas, cada uma com trinta e seis
   linhas de tabela: cento e oitenta linhas numa página que não acabava. Os
   cartões são a camada de panorama — última taxa, variação em doze meses e a
   forma da curva — e o histórico completo só abre para a que for escolhida. */

.serie__cartoes {
  display: grid; gap: 1px;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  background: var(--line); border: 1px solid var(--line);
}
.serie {
  position: relative; display: grid; gap: 10px; align-content: start;
  padding: 16px 18px 14px; background: var(--panel);
  color: var(--ink); text-decoration: none;
  transition: background-color .25s, box-shadow .25s;
}
.serie:hover { background: var(--carbon); color: var(--ink); }
.serie--ativa { background: var(--carbon); box-shadow: inset 2px 0 0 var(--gold); }

.serie__nome {
  font-size: 12.5px; line-height: 1.4; color: var(--muted);
  min-height: 2.8em;
}
.serie--ativa .serie__nome { color: var(--ink); }

.serie__valor {
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
  font-size: 20px; color: var(--gold-bright); font-variant-numeric: tabular-nums;
}
.serie__delta { font-size: 10.5px; letter-spacing: .02em; }
/* A seta já diz para onde foi. Pintar de vermelho e verde sugeriria bom e
   ruim, e média de mercado que sobe não é nem uma coisa nem outra — muda o
   patamar do que é abusivo, e é isso que se quer ver. */
.serie__delta.sobe, .serie__delta.desce { color: var(--muted-2); }

.serie__mini { display: block; width: 100%; height: 42px; }
.serie__pe { font-size: 10px; color: var(--faint-2); letter-spacing: .04em; }

/* A linha da competência que está sendo consultada, destacada no histórico:
   é o número que a pessoa veio buscar. */
.tabela tr.linha--aceso td {
  background: rgba(214,178,94,.06);
  box-shadow: inset 2px 0 0 var(--gold-deep);
}

.curva { display: grid; gap: 8px; margin-bottom: 18px; }
.curva__svg {
  display: block; width: 100%; height: 110px;
  border-bottom: 1px solid var(--line-2);
}
.curva__eixo { font-size: 10.5px; color: var(--faint-2); }
.curva__eixo .mono { font-family: var(--f-mono); }
.curva__agora { color: var(--gold-bright); }
.curva__topo { gap: 12px; flex-wrap: wrap; }

/* ==========================================================================
   A CAIXA DE ENVIO COM A LISTA DENTRO
   ==========================================================================
   A relação de documentos vivia solta embaixo da caixa, junto com a linha de
   formatos — um bloco de texto entre um campo e outro, exatamente onde
   ninguém lê. Mudou de lugar: agora está DENTRO da caixa, que é para onde o
   advogado olha na hora de decidir o que arrastar. */

.solta--dupla {
  padding: 0; gap: 0;
  grid-template-rows: auto 1fr auto;
  align-content: stretch;
  text-align: center;
}
.solta__topo {
  display: grid; place-items: center; gap: 5px;
  padding: 20px 18px 14px;
}
.solta--dupla .solta__icone { width: 24px; height: 24px; }

.solta__lista {
  display: grid; gap: 4px;
  padding: 12px 18px;
  border-top: 1px solid var(--line-2);
  text-align: left;
}
.solta__lista-titulo {
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .14em;
  text-transform: uppercase; color: var(--faint-2);
  margin-bottom: 2px;
}
.solta__item {
  position: relative; padding-left: 15px;
  font-size: 11.5px; line-height: 1.45; color: var(--muted-2);
}
.solta__item::before {
  content: ''; position: absolute; left: 3px; top: 8px;
  width: 4px; height: 4px; border-radius: 50%;
  background: var(--gold-deep);
}
.solta__rodape {
  padding: 9px 18px 11px;
  border-top: 1px solid var(--line-2);
  font-size: 10px; letter-spacing: .06em; color: var(--faint-2);
  text-align: left;
}

/* Com arquivo dentro, a lista some: já cumpriu o papel e a atenção passa a
   ser dos arquivos escolhidos, logo abaixo. */
.solta.tem .solta__lista { display: none; }
.solta.tem .solta__topo { padding-block: 26px 22px; }

/* A caixa obrigatória é a que carrega os números da peça. */
.solta--exige { border-color: var(--gold-edge); }

/* ==========================================================================
   ERRO DE PREENCHIMENTO
   ==========================================================================
   O navegador mostra a bolha dele num campo só, some sozinha e fala inglês
   pela metade. Por isso o <form> vai com `novalidate` e a conferência é
   nossa: todos os problemas de uma vez, cada um embaixo do seu campo, e
   ficam lá até o advogado resolver. */

[data-erro]:empty { display: none; }
.erro-msg[data-erro] {
  max-height: none; overflow: visible; opacity: 1;
  font-size: 12px; color: var(--alto); margin-top: 6px;
}
.errado > .campo--flut > input,
.errado > .campo--flut > select,
.campo--flut.errado > input,
.campo--flut.errado > select { border-color: var(--alto-line); }

.solta.errado {
  border-color: var(--alto); border-style: solid;
  animation: lb-treme .3s ease-in-out;
}
.binario.errado { border-color: var(--alto-line); }
@keyframes lb-treme {
  0%, 100% { transform: translateX(0); }
  25% { transform: translateX(-4px); }
  75% { transform: translateX(4px); }
}

/* ==========================================================================
   LISTA DE ESCOLHA COM RÓTULO FLUTUANTE
   ========================================================================== */
.campo--flut > select {
  appearance: none;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' fill='none'><path d='m4 6 4 4 4-4' stroke='%236B6558' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/></svg>");
  background-repeat: no-repeat;
  background-position: right 12px center;
  padding-right: 36px;
  cursor: pointer;
}
/* Lista de escolha não tem `:placeholder-shown`. O rótulo sobe por padrão e
   só desce quando a opção vazia é a escolhida — sem uma linha de JavaScript. */
.campo--flut > select + label {
  transform: translateY(-10px) scale(.76); color: var(--gold);
}
.campo--flut > select:has(option[value=""]:checked):not(:focus) + label {
  transform: none; color: var(--faint);
}
.campo--flut > select option { background: var(--panel); color: var(--ink); }

@media (max-width: 720px) {
  .grade.g-2 { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  .solta.errado { animation: none; }
}

/* As duas caixas têm o MESMO tamanho, e um tamanho fixo.
 *
 * A tentativa anterior foi esticar a caixa para preencher a coluna. Deu
 * errado do pior jeito: a coluna cresce com a LISTA DE ARQUIVOS ESCOLHIDOS
 * embaixo, então sete arquivos de um lado inflavam a caixa vazia do outro
 * até virar um retângulo enorme com um "arraste para cá" perdido no meio.
 * A caixa de envio não tem nada a ver com quantos arquivos já entraram: é
 * uma porta, e porta tem tamanho próprio. */
.grupo-envio .solta { min-height: 248px; }

/* E ficam iguais entre si mesmo quando uma lista tem quatro itens e a outra
   dois: as duas colunas passam a dividir as MESMAS três faixas — título,
   caixa, arquivos —, então a faixa da caixa tem uma altura só. Onde o
   navegador não tiver subgrid, cai no min-height acima e o pior que acontece
   é uma caixa alguns pixels mais alta que a outra. */
@supports (grid-template-rows: subgrid) {
  .grade--envio { grid-template-rows: auto auto auto; }
  .grupo-envio {
    display: grid;
    grid-row: span 3;
    grid-template-rows: subgrid;
    gap: 12px;
  }
  /* A lista de arquivos não estica para acompanhar a do vizinho: ela tem
     borda, e borda esticada vira caixa vazia com moldura. */
  .grupo-envio .arqs { align-self: start; }
}

/* ==========================================================================
   A BARRA LATERAL: O MENU ROLA, O CARTÃO NÃO
   ==========================================================================
   A lateral inteira rolava, e o cartão do usuário ia junto: bastava o menu
   crescer para ele sumir por baixo da dobra. Agora quem rola é só o miolo, e
   o cartão fica preso no pé — que é onde se procura por ele. */

.lateral { overflow: hidden; }
.lateral__rolagem {
  flex: 1; min-height: 0;
  overflow-y: auto; overscroll-behavior: contain;
}
.lateral__rolagem::-webkit-scrollbar { width: 8px; }
.lateral__rolagem::-webkit-scrollbar-track { background: transparent; }
.lateral__rolagem::-webkit-scrollbar-thumb {
  background: #221D17; border-radius: 8px; border: 2px solid var(--carbon);
}
.lateral__rolagem::-webkit-scrollbar-thumb:hover { background: #2E271F; }
.lateral__rolagem { scrollbar-width: thin; scrollbar-color: #221D17 transparent; }

.usuario {
  flex: 0 0 auto;
  margin-top: 20px;
  padding-top: 13px;
  border-top: 1px solid var(--line);
  border-radius: 0;
  border-left: 0; border-right: 0; border-bottom: 0;
  background: transparent;
  margin-inline: 16px;
}

/* ------------------------------------------- o escritório da vez, no menu */
/* Só existe para quem está em mais de um escritório. Fica no pé do menu, em
   cima do nome da pessoa, porque a pergunta "em qual escritório eu estou?"
   se faz olhando para o mesmo canto em que se olha para saber quem se é. */
.troca-esc {
  flex: 0 0 auto;
  display: flex; align-items: center; gap: 10px;
  margin: 20px 16px 0; padding: 11px 13px;
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: var(--raised); text-decoration: none;
  transition: border-color .18s, background .18s;
}
.troca-esc:hover { border-color: var(--gold-deep); background: var(--field); }
.troca-esc__nome {
  font-size: 12.5px; color: var(--gold-bright); line-height: 1.3;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.troca-esc__acao {
  margin-left: auto; flex: 0 0 auto;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .1em;
  text-transform: uppercase; color: var(--faint);
}
.troca-esc:hover .troca-esc__acao { color: var(--ink); }

/* -------------------------------------------- a escolha entre escritórios */
/* Cartão grande e clicável inteiro: é a primeira tela depois da senha e a
   decisão que ela pede vale dinheiro — gerar no escritório errado debita o
   saldo de quem não pediu. Alvo pequeno aqui seria economia no lugar errado. */
.escolhas { display: grid; gap: 10px; }
.escolha {
  display: flex; align-items: center; gap: 14px; width: 100%;
  padding: 16px 18px; text-align: left; cursor: pointer;
  border: 1px solid var(--line-2); border-radius: var(--raio);
  background: var(--panel); color: inherit; font: inherit;
  transition: border-color .18s, background .18s, transform .18s var(--mola);
}
.escolha:hover, .escolha:focus-visible {
  border-color: var(--gold-edge); background: var(--raised); transform: translateX(2px);
}
.escolha--atual { border-color: var(--gold-deep); }
.escolha__sigla {
  flex: 0 0 auto; width: 40px; height: 40px;
  display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
  font-family: var(--f-mono); font-size: 13px; color: var(--gold-bright);
  background: var(--field);
}
.escolha__texto { display: flex; flex-direction: column; gap: 4px; min-width: 0; flex: 1; }
.escolha__nome {
  font-size: 15px; color: var(--ink); line-height: 1.3;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.escolha__nota { font-size: 11.5px; color: var(--faint); line-height: 1.45; }
.escolha__seta { flex: 0 0 auto; color: var(--faint-2); font-size: 17px; }
.escolha:hover .escolha__seta { color: var(--gold); }

/* ==========================================================================
   A JANELA DE CONFIRMAÇÃO
   ==========================================================================
   Era uma página inteira. Como página, o advogado perdia de vista o que
   acabou de enviar e a decisão parecia mais um formulário. Como janela, o
   envio continua atrás e a pergunta fica em cima dele.

   Não fecha por clique fora nem por Esc, de propósito: os documentos já estão
   no servidor e sair daqui é uma escolha — gerar ou apagar. */

.modal {
  position: fixed; inset: 0; z-index: 90;
  /* A COLUNA É LIMITADA PELA TELA, não pelo conteúdo. Sem o `minmax(0,1fr)`
     a trilha da grade é `auto`, e `auto` significa "do tamanho do conteúdo":
     um título longo ou um <option> comprido fazia a janela inteira nascer
     mais larga que o celular. */
  display: grid; grid-template-columns: minmax(0, 1fr); place-items: center;
  padding: 28px 20px;
  background: rgba(6, 5, 4, .78);
  backdrop-filter: blur(3px);
  animation: lb-fade .22s ease-out;
  overflow-y: auto;
  overscroll-behavior: contain;
}
.modal__caixa {
  width: 100%; max-width: 940px;
  margin: auto;
  animation: lb-sobe .3s var(--mola) both;
}
@keyframes lb-sobe {
  from { opacity: 0; transform: translateY(14px) scale(.985); }
  to   { opacity: 1; transform: none; }
}
.modal .painel {
  border-color: var(--line-2);
  box-shadow: 0 24px 70px rgba(0, 0, 0, .6);
  background: var(--panel);
}

.modal__x {
  width: 30px; height: 30px; line-height: 1;
  background: none; border: 1px solid var(--line-3); border-radius: var(--raio);
  color: var(--faint); font-size: 17px; cursor: pointer;
  transition: color .18s, border-color .18s, transform .18s var(--mola);
}
.modal__x:hover { color: var(--alto); border-color: var(--alto-line); transform: rotate(90deg); }

/* ------------------------------------------------- o rodapé da janela
   CABEÇA E RODAPÉ PARADOS, MIOLO ROLANDO.

   A janela de confirmação cresce com o caso: dez documentos na mesa, a
   faixa de créditos, a escolha de modalidade, o aviso de saldo. Numa tela
   de notebook o par de botões nascia abaixo da dobra, e o "Confirmar e
   gerar — até N cr." é justamente onde está escrito o teto que vai ser
   bloqueado. Botão de decisão não se esconde: o miolo é que rola. */
.modal .painel--janela {
  display: flex; flex-direction: column;
  max-height: calc(100vh - 56px);
}
.modal .painel--janela > .painel__cabeca,
.modal .painel--janela > .modal__rodape { flex: 0 0 auto; }
.modal .painel--janela > .painel__corpo {
  /* min-height:0 é o que deixa um filho de flex encolher abaixo do
     conteúdo; sem ele o corpo empurra a caixa e ninguém rola. */
  flex: 1 1 auto; min-height: 0;
  overflow-y: auto; overscroll-behavior: contain;
}
.modal__rodape {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: 10px 16px;
  padding: 14px 24px 16px;
  border-top: 1px solid var(--line-2);
  background: var(--raised);
}
/* O prazo vem numa linha só dele, ACIMA dos botões: dividir a faixa com o
   texto empurrava o "Confirmar e gerar" para baixo do "Cancelar", e os dois
   botões alinhados à esquerda leem-se como uma lista, não como uma escolha. */
.modal__rodape__nota {
  margin: 0; order: -1; flex: 1 1 100%; min-width: 0;
  font-size: 11.5px; line-height: 1.55;
}
/* O botão que confirma vai para a direita — longe do que apaga. */
.modal__rodape > form { margin: 0; }
.modal__rodape > form:last-child { margin-left: auto; }

/* Com a janela aberta, a página atrás para de rolar junto. */
html.com-modal, html.com-modal body { overflow: hidden; }

@media (max-width: 640px) {
  .modal { padding: 0; place-items: stretch; }
  .modal__caixa { max-width: none; }
  .modal .painel { border-left: 0; border-right: 0; min-height: 100%; }
  /* No celular a janela já ocupa a tela inteira: o corpo rola com a página
     e o rodapé cola no fim da tela, para o polegar alcançar sem rolar. */
  .modal .painel--janela { max-height: none; }
  .modal .painel--janela > .painel__corpo { overflow: visible; }
  .modal__rodape {
    position: sticky; bottom: 0; z-index: 2;
    padding: 12px 20px 14px;
  }
  /* No celular os dois botões ocupam a largura toda, um sobre o outro. O de
     confirmar fica EMBAIXO, onde o polegar cai sem esticar; o que apaga os
     documentos fica acima, longe do toque fácil. */
  .modal__rodape > form { flex: 1 1 100%; }
  .modal__rodape > form .btn { width: 100%; }
  .modal__rodape > form:last-child { margin-left: 0; }
}

@media (prefers-reduced-motion: reduce) {
  .modal, .modal__caixa { animation: none; }
}

/* ==========================================================================
   A TELA DE ANÁLISE
   ==========================================================================
   A geração roda num processo à parte e leva minutos. Esta tela existe para
   o advogado saber em que passo o trabalho está — antes ele recebia a página
   de erro do servidor web aos 60 segundos e não sabia se a peça tinha saído
   nem se tinha sido cobrada. */

/* --------------------------------------------------------------- a cabeça */
.analise { overflow: hidden; }

.analise__topo {
  position: relative; overflow: hidden;
  display: flex; align-items: center; justify-content: space-between;
  gap: 18px; flex-wrap: wrap;
  padding: 24px 26px;
  border-bottom: 1px solid var(--line);
  background:
    radial-gradient(120% 180% at 12% 0%, rgba(214,178,94,.10), transparent 62%),
    var(--panel);
}

/* Malha fina por baixo de tudo: dá textura de instrumento sem competir com
   o texto. Anda devagar de propósito — se corresse, viraria distração. */
.analise__malha {
  position: absolute; inset: -40px; pointer-events: none; opacity: .5;
  background-image:
    linear-gradient(rgba(214,178,94,.055) 1px, transparent 1px),
    linear-gradient(90deg, rgba(214,178,94,.055) 1px, transparent 1px);
  background-size: 34px 34px;
  animation: lb-malha 22s linear infinite;
  mask-image: radial-gradient(130% 100% at 20% 0%, #000 10%, transparent 78%);
  -webkit-mask-image: radial-gradient(130% 100% at 20% 0%, #000 10%, transparent 78%);
}
@keyframes lb-malha { to { transform: translate(34px, 34px); } }

/* O feixe que varre a cabeça. É a leitura acontecendo, traduzida em luz. */
.analise__feixe {
  position: absolute; top: 0; bottom: 0; width: 32%; pointer-events: none;
  background: linear-gradient(90deg,
    transparent, rgba(242,221,164,.09) 40%, rgba(242,221,164,.16) 50%,
    rgba(242,221,164,.09) 60%, transparent);
  filter: blur(2px);
  animation: lb-feixe 4.2s var(--mola) infinite;
}
@keyframes lb-feixe {
  0%   { transform: translateX(-120%); }
  100% { transform: translateX(420%); }
}

.analise__titulo {
  position: relative; display: flex; align-items: center; gap: 16px; min-width: 0;
}

/* O selo: um anel que gira em volta de um núcleo que pulsa. É o único
   elemento que diz "está vivo" mesmo quando nada mais muda por um minuto. */
.analise__selo {
  position: relative; flex: none; width: 38px; height: 38px;
  display: grid; place-items: center;
}
.analise__selo__anel {
  position: absolute; inset: 0; border-radius: 50%;
  border: 1px solid rgba(214,178,94,.22);
  border-top-color: var(--gold);
  border-right-color: rgba(214,178,94,.55);
  animation: lb-gira 2.6s linear infinite;
}
.analise__selo__nucleo {
  width: 8px; height: 8px; border-radius: 50%;
  background: var(--gold-bright);
  box-shadow: 0 0 0 0 rgba(214,178,94,.42);
  animation: lb-farol 1.9s ease-out infinite;
}
@keyframes lb-gira { to { transform: rotate(360deg); } }
@keyframes lb-farol {
  0%   { box-shadow: 0 0 0 0 rgba(214,178,94,.40); }
  70%  { box-shadow: 0 0 0 13px rgba(214,178,94,0); }
  100% { box-shadow: 0 0 0 0 rgba(214,178,94,0); }
}

.analise__relogio {
  position: relative; display: grid; gap: 2px; justify-items: flex-end; text-align: right;
}
.analise__tempo {
  font-size: 22px; color: var(--gold-bright); letter-spacing: .01em;
  font-variant-numeric: tabular-nums;
}

/* ------------------------------------------------- o trilho do andamento */
.analise__trilho {
  position: relative; height: 3px; background: var(--line-2); overflow: hidden;
}
.analise__trilho__cheio {
  position: absolute; inset: 0 auto 0 0; width: 0;
  background: var(--gold-grad);
  transition: width 1.1s var(--mola);
}
/* Um brilho corre por cima do trilho inteiro: mostra que o trabalho continua
   mesmo enquanto a largura não muda — e ela fica parada por minutos. */
.analise__trilho__brilho {
  position: absolute; inset: 0; width: 26%;
  background: linear-gradient(90deg, transparent, rgba(242,221,164,.55), transparent);
  animation: lb-vaievem 2.4s ease-in-out infinite;
}
@keyframes lb-vaievem {
  0%   { transform: translateX(-120%); }
  100% { transform: translateX(420%); }
}

/* Mantido: a barra simples ainda é usada em telas antigas de envio. */
.analise__barra { height: 2px; background: var(--line-2); overflow: hidden; border-radius: 2px; }
.analise__pulso {
  display: block; height: 100%; width: 38%;
  background: var(--gold-grad); animation: lb-vaievem 1.6s ease-in-out infinite;
}

/* --------------------------------------------------------- os cinco passos */
.analise__passos { display: grid; gap: 2px; }

.analise .passo {
  /* O display vai escrito aqui de propósito: herdá-lo de .passo foi o que
     deixou a tela à mercê de qualquer regra posterior com o mesmo nome. */
  display: grid;
  grid-template-columns: 20px 1fr auto;
  align-items: center; gap: 14px;
  padding: 11px 12px; font-size: 13.5px;
  border: 1px solid transparent; border-radius: var(--raio);
  transition: background-color .4s, border-color .4s, color .4s;
}
.analise .passo.ativo {
  background: rgba(214,178,94,.05); border-color: rgba(214,178,94,.16);
}
.analise .passo__bolha {
  position: relative; width: 14px; height: 14px; margin-left: 2px;
  border-radius: 50%; background: none;
  border: 1px solid var(--line-4);
  display: grid; place-items: center;
  transition: border-color .4s;
}
.analise .passo__miolo {
  width: 5px; height: 5px; border-radius: 50%;
  background: var(--line-4); transition: background-color .4s, transform .4s;
}
.analise .passo.ativo .passo__bolha {
  border-color: var(--gold); box-shadow: 0 0 0 4px rgba(214,178,94,.10);
  animation: lb-pulsa 1.6s ease-in-out infinite;
}
.analise .passo.ativo .passo__miolo {
  background: var(--gold-bright); transform: scale(1.2);
}
.analise .passo.feito .passo__bolha {
  border-color: var(--gold-deep); background: rgba(143,115,38,.16);
}
.analise .passo.feito .passo__miolo { background: none; }
/* Passo concluído recebe a marca de conferido: ponto aceso e ponto apagado
   são parecidos demais para distinguir de relance. */
.analise .passo.feito .passo__bolha::after {
  content: ''; position: absolute;
  width: 6px; height: 3px; margin-top: -1px;
  border-left: 1.4px solid var(--gold); border-bottom: 1.4px solid var(--gold);
  transform: rotate(-45deg);
}

.passo__texto { display: flex; align-items: baseline; gap: 12px; min-width: 0; }
.passo__num { font-size: 10px; color: var(--faint-2); letter-spacing: .08em; }
.analise .passo.ativo .passo__num { color: var(--gold); }
.passo__nome { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.passo__tempo {
  font-size: 11px; color: var(--faint-2); font-variant-numeric: tabular-nums;
}

/* O passo ativo escreve sozinho: três pontinhos que não saem do lugar, para
   a linha não dançar a cada segundo. */
.analise .passo.ativo .passo__nome::after {
  content: '…'; display: inline-block; width: 1.1em;
  color: var(--gold); animation: lb-reticencia 1.4s steps(4) infinite;
}
@keyframes lb-reticencia {
  0%   { clip-path: inset(0 100% 0 0); }
  100% { clip-path: inset(0 0 0 0); }
}

/* -------------------------------------------------- os documentos na mesa */
.analise__papeis {
  display: grid; gap: 1px;
  grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
  background: var(--line); border: 1px solid var(--line);
}
.papel {
  position: relative; overflow: hidden;
  display: flex; align-items: center; gap: 12px;
  padding: 13px 14px; background: var(--panel); min-width: 0;
  animation: lb-papel .5s var(--mola) both;
  animation-delay: var(--atraso, 0ms);
}
@keyframes lb-papel {
  from { opacity: 0; transform: translateY(6px); }
  to   { opacity: 1; transform: none; }
}
/* Cada documento é varrido por uma faixa de luz, em tempos diferentes: é a
   leitura passando por eles. */
.papel__varre {
  position: absolute; inset: 0; width: 45%; pointer-events: none;
  background: linear-gradient(90deg, transparent, rgba(242,221,164,.07), transparent);
  animation: lb-vaievem 3.6s ease-in-out infinite;
  animation-delay: var(--atraso, 0ms);
}
.papel__marca {
  flex: none; width: 28px; height: 28px; display: grid; place-items: center;
  border: 1px solid rgba(214,178,94,.28); border-radius: var(--raio);
  color: var(--gold); background: rgba(214,178,94,.05);
}
.papel__medida { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.papel__nome {
  font-size: 12.5px; color: var(--ink);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.papel__medida { font-size: 10.5px; color: var(--faint-2); }

/* ---------------------------------------------------------- o placar final */
.analise__placar {
  display: grid; gap: 1px;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  background: var(--line); border: 1px solid var(--line);
}
.placar__cela {
  display: grid; gap: 7px; padding: 15px 16px; background: var(--panel);
}
.placar__valor {
  font-size: 13.5px; color: var(--gold-bright); line-height: 1.35;
}

.analise__rodape {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 18px; flex-wrap: wrap;
}

@media (max-width: 640px) {
  .analise__topo { padding: 20px 18px; }
  .analise__tempo { font-size: 18px; }
  .analise__relogio { justify-items: flex-start; text-align: left; }
}

@media (prefers-reduced-motion: reduce) {
  .analise__feixe, .analise__malha, .analise__selo__anel, .analise__selo__nucleo,
  .analise__trilho__brilho, .analise__pulso, .papel, .papel__varre,
  .analise .passo.ativo .passo__bolha, .analise .passo.ativo .passo__nome::after {
    animation: none;
  }
  .analise__pulso { width: 100%; opacity: .5; }
  .papel__varre, .analise__trilho__brilho { opacity: 0; }
  .analise .passo.ativo .passo__nome::after { clip-path: none; }
}

/* ==========================================================================
   OS DOCUMENTOS DE UMA GERAÇÃO
   ==========================================================================
   Toda geração entrega três arquivos: a inicial, a memória de cálculo e o
   parecer. Um botão só de "baixar" escondia dois deles. */

.documentos {
  display: grid; gap: 1px;
  background: var(--line); border: 1px solid var(--line);
}
.doc {
  display: flex; align-items: center; gap: 15px;
  padding: 16px 18px; background: var(--panel);
  color: var(--ink); text-decoration: none;
  transition: background-color .25s, padding-left .25s var(--mola);
}
.doc:hover { background: var(--carbon); padding-left: 22px; color: var(--ink); }
.doc__icone {
  flex: none; width: 38px; height: 38px; display: grid; place-items: center;
  border: 1px solid rgba(214,178,94,.24); border-radius: var(--raio);
  color: var(--gold); background: rgba(214,178,94,.05);
  transition: border-color .25s, background-color .25s;
}
.doc:hover .doc__icone { border-color: var(--gold); background: rgba(214,178,94,.10); }
.doc__nome { font-size: 14px; font-weight: 400; }
.doc__desc { font-size: 12px; line-height: 1.5; }
.doc__baixar {
  margin-left: auto; flex: none; font-size: 11px; color: var(--faint);
  letter-spacing: .06em; transition: color .25s, transform .25s var(--mola);
}
.doc:hover .doc__baixar { color: var(--gold-bright); transform: translateX(2px); }

@media (max-width: 560px) {
  .doc { flex-wrap: wrap; }
  .doc__baixar { margin-left: 53px; }
}

/* Botão-letra da coluna de arquivos: I, C e P — inicial, cálculos, parecer.
   Três botões escritos por extenso numa linha de tabela empurrariam as
   colunas de valor para fora da tela. */
.baixinha {
  display: inline-grid; place-items: center;
  width: 30px; height: 30px;
  border: 1px solid var(--line-4); border-radius: var(--raio);
  color: var(--muted); text-decoration: none;
  font-family: var(--f-mono); font-size: 12px;
  transition: border-color .2s, color .2s, background-color .2s, transform .2s var(--mola);
}
.baixinha--larga {
  width: auto; padding: 0 14px; font-family: var(--f-sans); letter-spacing: .05em;
  text-transform: uppercase; font-size: 11.5px;
}
.baixinha:hover {
  border-color: var(--gold); color: var(--gold-bright);
  background: rgba(214,178,94,.07); transform: translateY(-1px);
}

/* ==========================================================================
   BARRA DE BUSCA E FILTRO
   ==========================================================================
   Campo, lista de escolha e botões na MESMA altura, numa linha só. Cada peça
   trazia antes o seu próprio estilo solto, e o resultado era uma fileira de
   alturas diferentes — o tipo de desalinho que se vê antes de se ler. */

.busca {
  display: flex; align-items: stretch; gap: 8px; flex-wrap: wrap;
  --alt-busca: 46px;
}

.busca__campo {
  position: relative; display: flex; align-items: center;
  flex: 1 1 240px; min-width: 200px;
}
.busca__lupa {
  position: absolute; left: 14px; color: var(--faint-2); pointer-events: none;
  transition: color .25s;
}
.busca__campo input {
  width: 100%; height: var(--alt-busca); padding: 0 14px 0 38px;
  background: var(--field); border: 1px solid var(--line-2);
  border-radius: var(--raio);
  color: var(--ink); font-family: var(--f-sans); font-size: 13.5px;
  transition: border-color .25s, background-color .25s;
}
.busca__campo input::placeholder { color: var(--faint-2); }
.busca__campo input:focus { outline: none; border-color: var(--gold-deep); background: var(--carbon); }
.busca__campo:focus-within .busca__lupa { color: var(--gold); }

.busca__lista { position: relative; display: flex; }
.busca__lista select {
  appearance: none; -webkit-appearance: none;
  height: var(--alt-busca); padding: 0 40px 0 14px;
  background: var(--field); border: 1px solid var(--line-2);
  border-radius: var(--raio);
  color: var(--ink); font-family: var(--f-sans); font-size: 13.5px;
  cursor: pointer; transition: border-color .25s, background-color .25s;
  /* Faz o Chrome pintar a lista aberta em escuro. Sem isto, a lista abre
     branca com a linha selecionada em azul de sistema — que foi exatamente
     o que apareceu por cima da tabela. */
  color-scheme: dark;
}
.busca__lista select:focus { outline: none; border-color: var(--gold-deep); background: var(--carbon); }
.busca__lista select:hover { border-color: var(--line-4); }
.busca__lista select option { background: var(--panel); color: var(--ink); }
.busca__lista::after {
  content: ''; position: absolute; right: 15px; top: 50%; pointer-events: none;
  width: 7px; height: 7px; margin-top: -5px;
  border-right: 1.4px solid var(--faint); border-bottom: 1.4px solid var(--faint);
  transform: rotate(45deg); transition: border-color .25s;
}
.busca__lista:focus-within::after { border-color: var(--gold); }

/* Os botões acompanham a altura da linha em vez de trazerem a própria. */
.busca__btn {
  /* O padrão vale também fora da barra de busca: o botão de atualizar as
     séries usa esta classe só para ficar da mesma altura dos outros. */
  height: var(--alt-busca, 46px); padding: 0 22px; font-size: 12.5px; white-space: nowrap;
}

@media (max-width: 560px) {
  .busca__campo, .busca__lista, .busca__lista select { flex: 1 1 100%; width: 100%; }
  .busca__btn { flex: 1 1 auto; }
}

/* Linha de geração em andamento, na lista de peças. É por aqui que o
   advogado reencontra o trabalho depois de fechar a aba — sem isso, "pode
   fechar a aba" seria uma frase bonita sobre uma tela que ele nunca mais
   acharia. */
.andando {
  display: flex; align-items: center; gap: 14px;
  padding: 14px 18px;
  border-left: 2px solid var(--gold-deep);
  color: var(--ink);
}
.andando:hover { color: var(--ink); border-color: var(--gold); background: var(--raised); }
.andando .etiq { margin-left: auto; flex: 0 0 auto; }
.andando__sinal {
  width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto;
  background: var(--gold);
  animation: lb-pisca 1.4s ease-in-out infinite;
}
@keyframes lb-pisca { 50% { opacity: .25; transform: scale(.8); } }
.andando--erro { border-left-color: var(--alto-line); }
.andando--erro .andando__sinal { background: var(--alto); animation: none; }

@media (prefers-reduced-motion: reduce) {
  .andando__sinal { animation: none; }
}

/* ==========================================================================
   ESCOLHA EM CARTÕES — uma resposta entre quatro ou cinco
   ==========================================================================
   Um `<select>` serviria, e foi o que quase entrou. Não serve aqui: a pergunta
   da modalidade decide qual série do Banco Central entra no cálculo, e o
   advogado precisa LER a definição de cada opção antes de marcar — num select
   as definições ficam escondidas até depois da escolha, que é tarde.

   Continuam sendo `input[type=radio]` de verdade: teclado, leitor de tela e o
   POST funcionam sem uma linha de JavaScript. */

.escolhas {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(268px, 1fr));
  gap: 10px;
}

.escolha {
  position: relative;
  display: flex; align-items: flex-start; gap: 12px;
  padding: 14px 16px;
  background: var(--carbon);
  border: 1px solid var(--line-2);
  border-radius: 4px;
  cursor: pointer;
  transition: border-color .24s var(--mola), background-color .24s, transform .24s var(--mola);
}
.escolha:hover { border-color: var(--line-4); background: var(--raised); }
.escolha input {
  position: absolute; opacity: 0; width: 0; height: 0; margin: 0;
  pointer-events: none;
}

/* O anel. Vazio enquanto ninguém respondeu — pergunta cuja resposta muda a
   conta não pode parecer respondida por padrão. */
.escolha__marca {
  flex: 0 0 auto;
  width: 15px; height: 15px; margin-top: 2px;
  border: 1px solid var(--line-4);
  border-radius: 50%;
  display: grid; place-items: center;
  transition: border-color .24s, box-shadow .24s;
}
.escolha__marca::after {
  content: ''; width: 7px; height: 7px; border-radius: 50%;
  background: var(--gold-grad);
  transform: scale(0);
  transition: transform .26s var(--mola);
}
.escolha__texto { display: grid; gap: 5px; min-width: 0; }
.escolha__nome { font-size: 13.5px; color: var(--ink); line-height: 1.3; }
.escolha__desc { font-size: 11.5px; line-height: 1.55; color: var(--muted-2); }

.escolha:has(input:checked) {
  border-color: var(--gold-edge);
  background: var(--raised);
}
.escolha:has(input:checked) .escolha__marca {
  border-color: var(--gold);
  box-shadow: 0 0 0 3px rgba(214,178,94,.09);
}
.escolha:has(input:checked) .escolha__marca::after { transform: scale(1); }
.escolha:has(input:checked) .escolha__nome { color: var(--gold-bright); }

.escolha:has(input:focus-visible) { outline: 2px solid var(--gold); outline-offset: 2px; }

/* O bloco inteiro avisa enquanto está sem resposta, como as perguntas do RMC. */
.escolhas:not(:has(input:checked)) .escolha { border-left-color: var(--gold-deep); }

@media (prefers-reduced-motion: reduce) {
  .escolha, .escolha__marca, .escolha__marca::after { transition: none; }
}

/* Reprovado na conferência: a borda dos cartões avisa junto com a mensagem. */
.errado .escolha { border-color: var(--alto-line); }

/* ==========================================================================
   PAINEL TÉCNICO — a linguagem das telas de apuração
   ==========================================================================
   Nasceu na tela da peça pronta e ficou lá dentro, num <style> da própria
   página, porque só existia ali. Deixou de ser verdade quando "Créditos e
   consumo" passou a mostrar a mesma coisa — números apurados, fonte de cada
   um, tabela conferível. Duas cópias do mesmo CSS divergem na primeira
   correção que alguém esquece de repetir na outra, então mudou de casa.

   O que define a linguagem: grade de um pixel no lugar de espaçamento, número
   em monoespaçada com dígito de largura fixa, rótulo pequeno em versalete, e
   nenhum valor cortado por reticências. */

.pc-topo {
  display: flex; justify-content: space-between; gap: 28px; flex-wrap: wrap;
  align-items: flex-start;
  padding: 26px 28px;
  border: 1px solid var(--line-2);
  background:
    radial-gradient(120% 160% at 0% 0%, rgba(214,178,94,.06) 0%, transparent 55%),
    var(--panel);
}
.pc-topo__nomes { font-family: var(--f-serif); font-size: 30px; line-height: 1.15; color: var(--ink-hi); }
/* A coluna da esquerda cede antes de quebrar a linha: sem isso um subtítulo
   longo tomava a largura inteira e empurrava selos e botão para baixo, com um
   vão de cabeçalho vazio no meio. */
.pc-topo > :first-child { flex: 1 1 380px; }
.pc-topo > :last-child { flex: 0 1 auto; }
.pc-topo__nomes small {
  font-family: var(--f-sans); font-size: 13px; color: var(--faint);
  display: block; margin-top: 6px; letter-spacing: .02em;
}
.pc-selos { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.pc-digital { font-family: var(--f-mono); font-size: 10.5px; color: var(--gold-deep); letter-spacing: .14em; }

/* A faixa de indicadores. Seis por padrão; `--quatro` e `--tres` para telas
   com menos a dizer — e a grade não muda de altura por causa disso. */
.pc-kpis {
  display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 1px;
  background: var(--line); border: 1px solid var(--line); margin-top: 1px;
}
.pc-kpis--quatro { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.pc-kpis--tres { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.pc-kpi { background: var(--panel); padding: 16px 18px; display: flex; flex-direction: column; gap: 7px; min-width: 0; }
.pc-kpi__rot {
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .16em;
  text-transform: uppercase; color: var(--faint);
}
/* Sem reticências: cortar um número é esconder informação, e num painel que
   existe para mostrar a apuração isso é o oposto do objetivo. Valor comprido
   diminui de corpo e, no limite, quebra — mas aparece inteiro. */
.pc-kpi__val {
  font-family: var(--f-mono); font-size: clamp(14px, 1.15vw, 17px); color: var(--ink-hi);
  font-variant-numeric: tabular-nums; overflow-wrap: anywhere; line-height: 1.2;
}
.pc-kpi--ouro .pc-kpi__val { color: var(--gold-bright); font-size: clamp(15px, 1.3vw, 19px); }
.pc-kpi--alerta .pc-kpi__val { color: var(--alto); }
.pc-kpi__pe { font-size: 10.5px; color: var(--faint-2); }
/* O outro extremo da escada do crédito, colado no valor principal e menor que
   ele: é intervalo, não um segundo número de mesmo peso. */
.pc-kpi__ate { font-size: .72em; color: var(--gold-deep); margin-left: 6px; }

.pc-sec { border: 1px solid var(--line-2); background: var(--panel); margin-top: 22px; }
.pc-sec__cab {
  display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap;
  align-items: baseline;
  padding: 14px 22px; border-bottom: 1px solid var(--line); background: var(--carbon);
}
.pc-sec__tit {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .18em;
  text-transform: uppercase; color: var(--muted-2);
}
.pc-sec__nota { font-size: 11.5px; color: var(--faint); }
.pc-sec__corpo { padding: 22px; }
/* Seção cujo corpo é só uma tabela: a tabela encosta na borda, sem moldura
   dentro de moldura. */
.pc-sec__corpo--rente { padding: 0 22px 6px; }

.pc-barra { display: block; width: 100%; background: var(--line-2); border-radius: 1px; overflow: hidden; margin-top: 6px; }
.pc-barra__preenche { display: block; height: 100%; border-radius: 1px; }

.pc-tab { width: 100%; border-collapse: collapse; font-size: 12.5px; }
.pc-tab th {
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase;
  color: var(--faint); text-align: left; padding: 14px 12px 10px 0; font-weight: 400; white-space: nowrap;
}
.pc-tab td { padding: 11px 12px 11px 0; border-top: 1px solid var(--line); vertical-align: top; color: var(--muted); }
.pc-tab td.num { font-family: var(--f-mono); text-align: right; color: var(--ink); white-space: nowrap; font-variant-numeric: tabular-nums; }
.pc-tab th.num { text-align: right; }
.pc-tab tr:hover td { background: rgba(255,255,255,.012); }
.pc-tabela-rola { overflow-x: auto; }

.pc-fonte { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--line); }
.pc-fonte__it { background: var(--panel); padding: 16px 18px; display: flex; flex-direction: column; gap: 6px; }
.pc-fonte__k { font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--faint); }
.pc-fonte__v { font-size: 13px; color: var(--ink); }
.pc-fonte__d { font-size: 11px; color: var(--faint-2); line-height: 1.5; }

@media (max-width: 1100px) {
  .pc-kpis { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .pc-kpis--quatro { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pc-fonte { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 760px) {
  .pc-kpis, .pc-kpis--quatro, .pc-kpis--tres, .pc-fonte { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pc-topo__nomes { font-size: 24px; }
  .pc-sec__corpo { padding: 18px 16px; }
  .pc-sec__corpo--rente { padding: 0 16px 6px; }
}
/* Duas colunas num celular de 390 px dão 138 px por coluna: um parágrafo de
   trinta palavras vira uma palavra por linha. Número curto ainda cabe em duas
   colunas; texto explicado, não. */
@media (max-width: 560px) {
  .pc-fonte { grid-template-columns: minmax(0, 1fr); }
  .pc-kpis, .pc-kpis--quatro, .pc-kpis--tres { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* ==========================================================================
   PACOTES DE CRÉDITO
   ==========================================================================
   Eram três caixas iguais numa grade genérica, e a diferença entre elas — que
   é a única coisa que importa na hora de escolher — ficava espremida numa
   linha de nota. Agora cada uma diz o número grande, o preço, e o que aquilo
   significa NO CONSUMO DESTE ESCRITÓRIO: quantas peças, quantos meses. */

.pacotes {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 1px;
  background: var(--line);
  border: 1px solid var(--line);
}
.pacote {
  position: relative;
  display: flex; flex-direction: column; gap: 12px;
  padding: 24px 22px 22px;
  background: var(--panel);
  transition: background-color .24s;
}
.pacote:hover { background: var(--raised); }
.pacote--destaque { background: var(--raised); box-shadow: inset 0 2px 0 0 var(--gold); }
.pacote__selo {
  position: absolute; top: 0; right: 0;
  padding: 4px 10px;
  font-family: var(--f-mono); font-size: 8.5px; letter-spacing: .14em; text-transform: uppercase;
  color: #12100D; background: var(--gold-grad);
}
.pacote__n {
  font-family: var(--f-serif); font-size: 34px; line-height: 1; color: var(--ink-hi);
  display: flex; align-items: baseline; gap: 6px;
}
.pacote--destaque .pacote__n { color: var(--gold-bright); }
.pacote__un { font-family: var(--f-sans); font-size: 12.5px; color: var(--faint); }
.pacote__preco {
  font-family: var(--f-mono); font-size: 17px; color: var(--gold);
  font-variant-numeric: tabular-nums;
}
.pacote--destaque .pacote__preco { color: var(--gold-bright); }
/* Quanto sai UM crédito neste pacote — o número que deixa comparar dois
   pacotes sem conta de cabeça. Fica abaixo do preço, miúdo, porque é
   conferência e não chamada. */
.pacote__cada {
  font-family: var(--f-mono); font-size: 11px; color: var(--faint);
  font-variant-numeric: tabular-nums; margin-top: -3px;
}
/* Quanto este pacote desconta em relação ao crédito mais caro da casa. Só
   aparece quando existe desconto de verdade — selo de −0% seria ruído. */
.pacote__off {
  font-weight: 400; color: var(--gold); letter-spacing: .04em; margin-left: 4px;
}
.pc-rodape-nota { margin-top: 20px; line-height: 1.6; }
.pacote__linhas { display: grid; gap: 5px; margin-bottom: 4px; }
.pacote__linhas span { font-size: 11.5px; line-height: 1.5; color: var(--faint-2); }
.pacote__linhas b { color: var(--ink); font-weight: 400; }

@media (prefers-reduced-motion: reduce) { .pacote { transition: none; } }

/* O gráfico de consumo mês a mês.
   A largura máxima por coluna existe para o escritório NOVO: com um mês só de
   histórico, a barra em `flex:1` virava um bloco dourado do tamanho da seção
   — cor, não informação. Com teto, uma barra parece uma barra e doze também. */
.grafico-meses { display: flex; align-items: flex-end; gap: 10px; height: 180px; }
.grafico-meses__col {
  display: flex; flex-direction: column; align-items: center; gap: 8px;
  flex: 1 1 0; min-width: 0; max-width: 96px;
}
.grafico-meses__col .barra-graf { width: 100%; border-radius: 1px; }
.grafico-meses__n {
  font-family: var(--f-mono); font-size: 10.5px; color: var(--faint-2);
  font-variant-numeric: tabular-nums;
}
.grafico-meses__n--atual { color: var(--gold-bright); }
.grafico-meses__m {
  font-family: var(--f-mono); font-size: 10px; color: var(--faint-2); white-space: nowrap;
}
.grafico-meses__m span { color: var(--faint); }

@media (max-width: 700px) {
  .grafico-meses { gap: 5px; height: 150px; }
  .grafico-meses__n { font-size: 9px; }
  .grafico-meses__m { font-size: 8.5px; }
  .grafico-meses__m span { display: none; }
}

/* ==========================================================================
   A EQUIPE
   ==========================================================================
   A lista tratava todo mundo como uma linha de tabela com um select ao lado.
   Não é isso que alguém precisa ver: precisa ver QUEM é a pessoa, o que ela
   faz no escritório (o cargo) e o que o sistema deixa ela fazer (o perfil,
   aberto em módulos). Os três de uma vez, sem clicar. */

.equipe { display: flex; flex-direction: column; }
.membro { border-bottom: 1px solid var(--line); }
.membro:last-child { border-bottom: 0; }
.membro__linha {
  display: flex; align-items: flex-start; gap: 18px;
  padding: 20px 22px;
  transition: background-color .22s;
}
.membro:hover > .membro__linha { background: rgba(255,255,255,.012); }
.membro--frio > .membro__linha { opacity: .5; }

.membro__sigla {
  flex: 0 0 auto;
  width: 42px; height: 42px;
  display: grid; place-items: center;
  border: 1px solid var(--line-3); border-radius: 50%;
  font-family: var(--f-mono); font-size: 13px; letter-spacing: .04em;
  color: var(--muted);
}
.membro__sigla--dono { border-color: var(--gold-edge); color: var(--gold); }
.membro__sigla--convite { color: var(--faint); border-style: dashed; }

.membro__nome { font-size: 15px; color: var(--ink-hi); }
.membro__cargo {
  font-size: 11.5px; color: var(--muted-2);
  padding: 2px 8px; border: 1px solid var(--line-3); border-radius: 999px;
}
.membro__mail { font-size: 12.5px; color: var(--faint); overflow-wrap: anywhere; }
.membro__visto { font-size: 11px; color: var(--faint-2); }

/* O perfil e o que ele alcança, na mesma linha. É a resposta para "o que essa
   pessoa consegue fazer aqui" sem abrir nada. */
.membro__poderes { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 3px; }
.membro__papel {
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase;
  color: var(--gold); padding: 3px 9px;
  border: 1px solid var(--gold-edge); border-radius: 2px;
  background: rgba(214,178,94,.05);
}
.poder {
  display: inline-flex; align-items: center; gap: 5px;
  font-size: 11px; color: var(--faint-2);
  padding: 3px 8px; border: 1px solid var(--line-2); border-radius: 2px;
}
.poder__marca { font-family: var(--f-mono); font-size: 10px; color: var(--line-4); }
.poder--sim { color: var(--muted); border-color: var(--line-3); }
.poder--sim .poder__marca { color: var(--ok); }
/* O resumo do que sobrou de fora. Um número, não sete pastilhas apagadas: a
   lista existe para dizer o que a pessoa FAZ; o que ela não alcança está
   inteiro na tabela dos perfis, mais abaixo. */
.poder--fora { border-style: dashed; border-color: var(--line-2); color: var(--faint-2); }

.membro__acoes { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-left: auto; }

/* A janela. Abre no lugar da pessoa, empurrando a lista para baixo: quem edita
   continua vendo o resto da equipe, que é o que ele precisa para decidir. */
.janela {
  border-top: 1px solid var(--gold-edge);
  background: var(--carbon);
  padding: 22px;
  animation: lb-abre-janela .26s var(--mola);
}
.janela--alto { border-top-color: var(--alto-line); background: var(--alto-bg); }
@keyframes lb-abre-janela { from { opacity: 0; transform: translateY(-6px); } }
.janela__cab {
  display: flex; justify-content: space-between; align-items: center; gap: 16px;
  margin-bottom: 20px;
}
/* O mesmo "×" das janelas do painel (.modal__x): quadrado, com o raio da casa. */
.janela__x {
  flex: 0 0 auto; background: none; border: 1px solid var(--line-3); border-radius: var(--raio);
  width: 30px; height: 30px; line-height: 1; font-size: 17px;
  color: var(--faint); cursor: pointer;
  transition: color .18s, border-color .18s, transform .18s var(--mola);
}
.janela__x:hover { color: var(--alto); border-color: var(--alto-line); transform: rotate(90deg); }
.janela__pe { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 20px; }
.janela__pe--dir { justify-content: flex-end; padding-top: 18px; border-top: 1px solid var(--line-2); }

/* Campo que existe para ser lido, não editado. Parece campo — está na mesma
   grade — mas não finge que aceita digitação. */
.entrada--travada {
  display: flex; align-items: center;
  color: var(--faint); background: var(--carbon);
  cursor: default; user-select: text;
}

/* A tabela de permissão que segue o perfil escolhido. */
.permissoes { margin-top: 20px; border: 1px solid var(--line-2); background: var(--panel); }
.permissoes__topo {
  display: flex; justify-content: space-between; align-items: baseline; gap: 14px; flex-wrap: wrap;
  padding: 12px 16px; border-bottom: 1px solid var(--line); background: var(--carbon);
}
.permissoes__grade {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(215px, 1fr));
  gap: 1px; background: var(--line);
}
.permissao { display: flex; gap: 10px; padding: 13px 16px; background: var(--panel); }
.permissao__marca {
  font-family: var(--f-mono); font-size: 12px; flex: 0 0 auto; line-height: 1.4;
}
.permissao--sim .permissao__marca { color: var(--ok); }
.permissao--nao { opacity: .42; }
.permissao--nao .permissao__marca { color: var(--faint-2); }
.permissao__nome { font-size: 12.5px; color: var(--ink); }
.permissao__nota { font-size: 10.5px; color: var(--faint-2); line-height: 1.45; }

/* A tabela dos seis perfis lado a lado. */
.tabela-perfis th.centro, .tabela-perfis td.centro { text-align: center; }
.tabela-perfis th.centro { min-width: 96px; vertical-align: bottom; }
.tabela-perfis__ex {
  display: block; margin-top: 4px;
  font-family: var(--f-sans); font-size: 9.5px; letter-spacing: 0;
  text-transform: none; color: var(--faint-2); font-weight: 400;
  white-space: normal; line-height: 1.35;
}
.tabela-perfis td.sim { color: var(--ok); font-family: var(--f-mono); }
.tabela-perfis td.nao { color: var(--line-4); font-family: var(--f-mono); }

.btn--alto { border-color: var(--alto-line); color: var(--alto); }
.btn--alto:hover { border-color: var(--alto); background: var(--alto-bg); color: var(--alto); }

@media (max-width: 820px) {
  .membro__linha { flex-wrap: wrap; gap: 14px; }
  .membro__acoes { margin-left: 0; width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
  .janela { animation: none; }
  .janela__x, .membro__linha { transition: none; }
}

/* ======================================================== papel timbrado
   A tela do timbre é uma decisão visual: o advogado precisa VER a faixa na
   folha antes de salvar. Por isso a página é duas colunas — a prova de um
   lado, os controles do outro — e a prova é uma folha A4 de verdade, com o
   texto fantasma embaixo. É contra o texto que se percebe que 45 mm de faixa
   comem a primeira página. */
.timbre {
  display: grid; grid-template-columns: minmax(260px, 380px) 1fr;
  gap: 34px; align-items: start;
}
.timbre__caixa { overflow: hidden; }

/* A FOLHA. Proporção do A4 (1 : 1,414), papel quase branco e uma sombra
   discreta — o suficiente para ler como folha e não como caixa. */
.folha {
  position: relative; aspect-ratio: 1 / 1.414; width: 100%;
  background: #FBFAF7; border: 1px solid var(--line-3); border-radius: 2px;
  box-shadow: 0 10px 30px rgba(0,0,0,.35);
  overflow: hidden; display: flex; flex-direction: column;
}
.folha__timbre {
  flex: 0 0 auto; display: grid; place-items: center;
  padding: 0 7%; overflow: hidden;
  transition: height .18s ease;
}
.folha__timbre img { display: block; width: 100%; height: 100%; object-fit: contain; }
.folha__timbre--novo { animation: lb-timbre-pousa .5s var(--mola); }
@keyframes lb-timbre-pousa { from { opacity: 0; transform: translateY(-6px); } to { opacity: 1; } }
.folha__vazio {
  font-family: var(--f-mono); font-size: 8px; letter-spacing: .14em;
  text-transform: uppercase; color: #B9B2A4; text-align: center;
  border: 1px dashed #D6CFC0; border-radius: 2px;
  width: 100%; height: 100%; display: grid; place-items: center;
}
.folha__texto {
  flex: 1 1 auto; padding: 5% 7% 0; display: flex; flex-direction: column; gap: 5px;
}
.folha__linha { display: block; height: 3px; border-radius: 2px; background: #DDD8CC; width: 100%; }
.folha__linha--titulo { width: 52%; height: 5px; background: #B9B2A4; margin-bottom: 8px; }
.folha__rodape {
  flex: 0 0 auto; display: flex; justify-content: space-between;
  padding: 0 7% 5%; border-top: 1px solid #E7E2D6; margin: 0 7%;
  padding-top: 6px; gap: 10px;
}
.folha__rodape span { display: block; height: 3px; background: #E2DDD1; border-radius: 2px; }
.folha__rodape span:first-child { width: 42%; }
.folha__rodape span:last-child { width: 14%; }

/* A área de envio aqui é MENOR que a do gerador, e por um motivo: lá são
   dezenas de documentos e a caixa precisa parecer um receptáculo; aqui é um
   arquivo só, e uma caixa do tamanho daquela deixaria a tela desequilibrada
   contra a folha de prova, que é o que importa olhar. */
.timbre__solta { padding: 26px 22px; gap: 10px; }
.timbre__solta .solta__topo { gap: 6px; }
.timbre__solta .solta__rodape { margin-top: 12px; }

.timbre__ficha {
  display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
  padding: 10px 12px; background: var(--field);
  border: 1px solid var(--line-2); border-radius: var(--raio);
}
.timbre__ficha__nome {
  font-size: 12.5px; color: var(--ink);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.timbre__ficha__medida { font-size: 11px; color: var(--faint); flex: 0 0 auto; }
.timbre__mm { font-size: 12.5px; color: var(--gold-bright); }
.timbre__remover { display: inline-flex; }

/* O LIGA/DESLIGA desta tela.
   Chama-se `liga`, e não `chave`, porque `.chave` já é outro componente do
   sistema — o interruptor de 42 px que roda por atributo. Duas classes com o
   mesmo nome brigavam: o rótulo inteiro herdava o fundo e o arredondamento do
   outro, e virava uma pílula de 600 px atravessando a caixa.
   Um interruptor se lê de longe; uma caixa de marcar, não —
   e esta é a decisão mais consultada da tela. */
/* `width:100%` não é enfeite: a caixa que segura este bloco é uma coluna
   flex, e sem isso o rótulo encolhia para a largura do interruptor — o texto
   saía por fora e caía por cima do bloco seguinte. */
.liga {
  display: flex; align-items: flex-start; gap: 14px; cursor: pointer;
  width: 100%; align-self: stretch;
}
.liga > .pilha { flex: 1 1 auto; min-width: 0; }
.liga input { position: absolute; opacity: 0; width: 0; height: 0; }
.liga__trilho {
  flex: 0 0 auto; width: 44px; height: 24px; border-radius: 999px; margin-top: 1px;
  background: var(--field); border: 1px solid var(--line-3);
  position: relative; transition: background .2s, border-color .2s;
}
.liga__bola {
  position: absolute; top: 3px; left: 3px; width: 16px; height: 16px;
  border-radius: 50%; background: var(--faint);
  transition: transform .22s var(--mola), background .2s;
}
.liga input:checked + .liga__trilho { background: rgba(214,178,94,.14); border-color: var(--gold-edge); }
.liga input:checked + .liga__trilho .liga__bola { transform: translateX(20px); background: var(--gold-grad, var(--gold)); }
.liga input:focus-visible + .liga__trilho { outline: 2px solid var(--gold); outline-offset: 2px; }
.liga__nome { font-size: 14px; color: var(--ink); }

/* O controle de altura. */
.regua-campo {
  -webkit-appearance: none; appearance: none; width: 100%; height: 4px;
  background: var(--line-3); border-radius: 999px; outline: none; cursor: pointer;
}
.regua-campo::-webkit-slider-thumb {
  -webkit-appearance: none; appearance: none; width: 18px; height: 18px;
  border-radius: 50%; background: var(--gold); border: 2px solid var(--carbon);
  box-shadow: 0 0 0 1px var(--gold-edge); cursor: pointer;
}
.regua-campo::-moz-range-thumb {
  width: 18px; height: 18px; border-radius: 50%; background: var(--gold);
  border: 2px solid var(--carbon); cursor: pointer;
}
.regua-campo:focus-visible { outline: 2px solid var(--gold); outline-offset: 4px; }

.escolhas--duas { grid-template-columns: 1fr; }

@media (max-width: 980px) {
  .timbre { grid-template-columns: 1fr; }
  .folha { max-width: 320px; }
}
@media (prefers-reduced-motion: reduce) {
  .folha__timbre, .chave__bola, .folha__timbre--novo { transition: none; animation: none; }
}

/* ===========================================================================
   MÓDULO COM ABAS
   ---------------------------------------------------------------------------
   Um assunto por tela, com as partes dele em abas. O alto identifica o módulo
   uma vez só — é por isso que a aba não repete o título lá dentro.

   A aba traz NOME E DESCRITOR. Sem o descritor, "Dados", "Equipe" e "Timbrado"
   pedem que a pessoa clique para descobrir o que tem em cada um; com ele, a
   fita de abas já é o índice do módulo.
   =========================================================================== */
.mod { border: 1px solid var(--line-2); background: var(--panel); }

.mod__cabeca {
  display: flex; justify-content: space-between; gap: 28px; flex-wrap: wrap;
  align-items: flex-start;
  padding: 26px 28px 22px;
  background:
    radial-gradient(120% 170% at 0% 0%, rgba(214,178,94,.06) 0%, transparent 58%),
    transparent;
}
.mod__ident { display: flex; flex-direction: column; gap: 9px; flex: 1 1 380px; min-width: 0; }
.mod__titulo { font-family: var(--f-serif); font-size: 32px; line-height: 1.12; color: var(--ink-hi); }
.mod__nota { font-size: 13px; color: var(--faint); line-height: 1.6; max-width: 62ch; }
.mod__selos { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; flex: 0 1 auto; }

/* A fita. Rola no celular em vez de quebrar em duas linhas: aba que quebra
   perde a leitura de "estas são as partes deste assunto". */
.mod__abas {
  display: flex; gap: 0; border-top: 1px solid var(--line);
  overflow-x: auto; scrollbar-width: none;
}
.mod__abas::-webkit-scrollbar { display: none; }

.mod__aba {
  display: flex; align-items: center; gap: 11px;
  padding: 15px 22px; min-width: 0; flex: 0 0 auto;
  border-right: 1px solid var(--line);
  color: var(--muted); text-decoration: none;
  position: relative; transition: background .22s, color .22s;
}
.mod__aba:last-child { border-right: 0; }
.mod__aba:hover { background: rgba(255,255,255,.016); color: var(--ink); }

.mod__aba__ic { display: flex; opacity: .55; transition: opacity .22s; flex: 0 0 auto; }
.mod__aba__txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.mod__aba__txt b { font-size: 14px; font-weight: 500; color: inherit; white-space: nowrap; }
.mod__aba__txt small { font-size: 11px; color: var(--faint-2); white-space: nowrap; }

/* A aba aberta: fundo um degrau acima, filete dourado embaixo. O filete fica
   por dentro da borda para não somar um pixel à altura da fita. */
.mod__aba--aqui {
  background: var(--carbon);
  color: var(--ink-hi);
}
.mod__aba--aqui .mod__aba__ic { opacity: 1; }
.mod__aba--aqui .mod__aba__txt small { color: var(--gold-deep); }
.mod__aba--aqui::after {
  content: ''; position: absolute; left: 0; right: 0; bottom: 0;
  height: 2px; background: var(--gold-grad, var(--gold));
}
.mod__aba:focus-visible { outline: 2px solid var(--gold); outline-offset: -3px; }

/* O corpo da aba. Não tem moldura própria: a moldura é a do módulo, e uma
   dentro da outra vira caixa em caixa. */
/* O corpo fica fora do <header class="mod">, separado por um respiro: sem
   as bordas dos lados ele parecia um cartão sem moldura, só com o traço de
   cima. Agora é um cartão inteiro, na mesma linha do módulo. */
.mod__corpo { padding: 30px 28px 32px; border: 1px solid var(--line-2); background: var(--carbon); }
.mod__corpo > .pc-sec:first-child,
.mod__corpo > .pc-topo:first-child { margin-top: 0; }

/* Cabeçalho interno de uma aba, quando ela precisa de um. */
.mod__parte { display: flex; flex-direction: column; gap: 7px; margin-bottom: 24px; }
.mod__parte h3 { font-family: var(--f-serif); font-size: 21px; color: var(--ink-hi); line-height: 1.2; }
.mod__parte p { font-size: 12.5px; color: var(--faint); line-height: 1.6; max-width: 74ch; }

@media (max-width: 760px) {
  .mod__cabeca { padding: 22px 20px 18px; }
  .mod__titulo { font-size: 26px; }
  .mod__corpo { padding: 24px 20px 26px; }
  .mod__aba { padding: 13px 16px; }
  .mod__aba__txt small { display: none; }
}

/* ===========================================================================
   CURSOS
   =========================================================================== */

/* O convite de retomar. Fica antes da vitrine porque quem já começou não quer
   escolher de novo — quer continuar, e caçar a aula na lista é o atrito que
   faz o curso ser abandonado na terceira semana. */
.retomar {
  display: flex; align-items: center; gap: 16px;
  padding: 16px 22px; margin-top: 22px; text-decoration: none;
  border: 1px solid var(--gold-edge); background:
    linear-gradient(100deg, rgba(214,178,94,.09) 0%, transparent 60%), var(--panel);
  transition: border-color .22s, transform .22s var(--mola);
}
.retomar:hover { border-color: var(--gold-deep); transform: translateY(-1px); }
.retomar__play {
  display: grid; place-items: center; flex: 0 0 auto;
  width: 40px; height: 40px; border-radius: 50%; background: var(--gold-grad, var(--gold));
}
.retomar__aula { font-size: 15px; color: var(--ink-hi); }
.retomar__pct { font-family: var(--f-mono); font-size: 13px; color: var(--gold); flex: 0 0 auto; }

.trilhas {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(288px, 1fr));
  gap: 18px; margin-top: 22px;
}
.trilha-cartao {
  display: flex; flex-direction: column; text-decoration: none;
  border: 1px solid var(--line-2); background: var(--panel); overflow: hidden;
  transition: border-color .22s, transform .24s var(--mola);
}
.trilha-cartao:hover { border-color: var(--line-4); transform: translateY(-2px); }
.trilha-cartao__capa {
  position: relative; aspect-ratio: 16 / 9; display: grid; place-items: center;
  background:
    radial-gradient(110% 130% at 30% 10%, rgba(214,178,94,.10) 0%, transparent 60%),
    var(--carbon);
  border-bottom: 1px solid var(--line);
}
.trilha-cartao__capa img { width: 100%; height: 100%; object-fit: cover; }
.trilha-cartao__marca { opacity: .7; }
.trilha-cartao__cadeado {
  position: absolute; top: 10px; right: 10px;
  display: inline-flex; align-items: center; gap: 6px;
  padding: 4px 9px; border-radius: var(--raio);
  background: rgba(10,9,7,.86); border: 1px solid var(--gold-edge);
  font-size: 10.5px; color: var(--gold);
}
/* A trilha fechada não some da vitrine: some esconde o motivo de subir de
   plano. Ela fica visivelmente mais apagada, e o cadeado diz qual plano abre. */
.trilha-cartao--presa .trilha-cartao__capa { filter: saturate(.35) brightness(.72); }
.trilha-cartao--presa .trilha-cartao__titulo { color: var(--muted); }
.trilha-cartao__corpo { display: flex; flex-direction: column; gap: 9px; padding: 16px 18px 18px; }
.trilha-cartao__titulo { font-size: 15px; color: var(--ink-hi); line-height: 1.3; }
.trilha-cartao__pe { display: flex; justify-content: space-between; gap: 12px; align-items: baseline; margin-top: auto; }

/* ------------------------------------------------------------ o sumário */
.aulas { display: flex; flex-direction: column; }
.aula-linha {
  display: flex; align-items: center; gap: 14px;
  padding: 14px 22px; text-decoration: none;
  border-top: 1px solid var(--line); transition: background .2s;
}
.aula-linha:first-child { border-top: 0; }
.aula-linha:hover { background: rgba(255,255,255,.015); }
.aula-linha__marca { display: flex; flex: 0 0 auto; }
.aula-linha__titulo { font-size: 13.5px; color: var(--ink); font-weight: 400; }
.aula-linha__tempo { font-size: 11.5px; color: var(--faint-2); flex: 0 0 auto; }
.aula-linha--presa { cursor: default; }
.aula-linha--presa:hover { background: none; }
.aula-linha--presa .aula-linha__titulo { color: var(--faint); }

/* ------------------------------------------------------------- a aula */
.aula-tela {
  display: grid; grid-template-columns: minmax(0, 1fr) 320px;
  gap: 26px; align-items: start; margin-top: 18px;
}
.palco {
  position: relative; aspect-ratio: 16 / 9; width: 100%;
  background: #000; border: 1px solid var(--line-2); overflow: hidden;
}
.palco__video { width: 100%; height: 100%; border: 0; display: block; }
.palco__aviso {
  position: absolute; inset: 0; display: flex; flex-direction: column;
  align-items: center; justify-content: center; gap: 12px; text-align: center;
  padding: 30px; background: var(--carbon);
}
.palco__aviso b { font-size: 15px; color: var(--ink-hi); }
.palco__aviso p { max-width: 46ch; line-height: 1.6; }
.palco__falha {
  position: absolute; left: 12px; right: 12px; bottom: 64px; z-index: 3;
  padding: 10px 14px; font-size: 13px; line-height: 1.5; text-align: center;
  color: var(--ink-hi); background: rgba(10, 9, 7, .88);
  border: 1px solid var(--line-2);
}

/* A MARCA D'ÁGUA de quem assiste. Não impede gravação de tela — nada impede —,
   mas quem vazar, vaza assinado. Ela anda de canto em canto pelo JavaScript
   para não ser sempre a mesma quina a ser cortada. */
.palco__marca {
  position: absolute; top: 5%; left: 5%;
  font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .06em;
  color: rgba(255,255,255,.30); text-shadow: 0 1px 2px rgba(0,0,0,.6);
  pointer-events: none; user-select: none;
  transition: top .8s ease, left .8s ease, right .8s ease, bottom .8s ease;
}

/* A ponte da aula para o gerador — o motivo de o curso morar aqui dentro. */
.ponte {
  display: flex; align-items: center; justify-content: space-between;
  gap: 22px; flex-wrap: wrap; padding: 20px 24px;
  border: 1px solid var(--gold-edge);
  background: linear-gradient(100deg, rgba(214,178,94,.07) 0%, transparent 62%), var(--panel);
}

.material {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 22px; text-decoration: none; transition: background .2s;
}
.material:hover { background: rgba(255,255,255,.02); }
.material__ext {
  flex: 0 0 auto; display: grid; place-items: center; width: 38px; height: 38px;
  border: 1px solid var(--line-3); border-radius: var(--raio);
  font-family: var(--f-mono); font-size: 9.5px; color: var(--muted-2);
}
.material__nome {
  font-size: 12.5px; color: var(--ink);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

.vizinha {
  display: flex; flex-direction: column; gap: 3px;
  padding: 12px 14px; text-decoration: none;
  border: 1px solid var(--line-2); transition: border-color .22s;
}
.vizinha:hover { border-color: var(--line-4); }
.vizinha--proxima { border-color: var(--gold-edge); }
.vizinha__titulo { font-size: 13px; color: var(--ink); line-height: 1.35; }

.duvida { display: flex; flex-direction: column; gap: 7px; }
.duvida__quem { font-size: 12.5px; color: var(--ink); }
.duvida__texto { font-size: 13px; color: var(--muted); line-height: 1.65; }
.duvida__resposta {
  display: flex; flex-direction: column; gap: 5px;
  padding: 12px 16px; margin-top: 4px;
  border-left: 2px solid var(--gold-edge); background: var(--raised);
}
.duvida__resposta p { font-size: 13px; color: var(--ink); line-height: 1.7; }

/* A dúvida que acabou de ser enviada entra sem recarregar a página: sem um
   sinal de chegada ela apareceria do nada, e quem escreveu não saberia se
   o clique valeu. */
.duvida--nova { animation: duvidaEntra .42s ease both; }
@keyframes duvidaEntra {
  from { opacity: 0; transform: translateY(-6px); }
  to   { opacity: 1; transform: none; }
}
.duvida-aviso { font-size: 11.5px; color: var(--gold-deep); }
.duvida-aviso--ruim { color: var(--alto); }
@media (prefers-reduced-motion: reduce) { .duvida--nova { animation: none; } }

/* ===========================================================================
   PLANOS
   =========================================================================== */
.planos {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 18px; margin-top: 26px;
}
.plano {
  position: relative; display: flex; flex-direction: column; gap: 18px;
  padding: 26px 22px 24px; border: 1px solid var(--line-2); background: var(--panel);
}
.plano--destaque { border-color: var(--gold-edge); }
.plano--atual {
  border-color: var(--gold-deep);
  background: linear-gradient(170deg, rgba(214,178,94,.07) 0%, transparent 55%), var(--panel);
}
.plano__fita {
  position: absolute; top: -1px; right: 18px;
  padding: 4px 10px; font-family: var(--f-mono); font-size: 9px; letter-spacing: .14em;
  background: var(--gold-grad, var(--gold)); color: #17130A;
}
.plano__fita--sugerido { background: var(--line-3); color: var(--muted); }
.plano__nome { font-family: var(--f-serif); font-size: 21px; color: var(--ink-hi); }
.plano__preco { display: flex; align-items: baseline; gap: 5px; }
.plano__cifra { font-size: 13px; color: var(--faint); }
.plano__preco b { font-family: var(--f-mono); font-size: 32px; color: var(--gold-bright); }
.plano__mes { font-size: 12px; color: var(--faint); }
/* A LISTA CORRE DE CIMA PARA BAIXO, colada no preço.
   Ela tinha `margin-top:auto`, o que a empurrava para o rodapé do cartão: no
   plano com poucas vantagens sobrava um vazio de dez centímetros entre o
   preço e a primeira linha, e o cartão lia como se estivesse faltando
   conteúdo. Quem desce para o fim agora é o BOTÃO — que é o que precisa
   ficar alinhado entre os quatro cartões. */
.plano__inclui { display: flex; flex-direction: column; gap: 9px; }
.plano__linha { font-size: 12.5px; color: var(--muted); }
.plano__linha b { color: var(--ink); }
.plano__linha--tem span { color: var(--gold-deep); margin-right: 4px; }
.plano__acao { margin-top: auto; display: flex; flex-direction: column; gap: 8px; }
.plano__acao .btn { width: 100%; }

@media (max-width: 980px) {
  .aula-tela { grid-template-columns: 1fr; }
}
@media (max-width: 760px) {
  .retomar { padding: 14px 16px; gap: 12px; }
  .trilhas { grid-template-columns: 1fr; }
  .aula-linha { padding: 13px 16px; gap: 11px; }
  .material { padding: 11px 16px; }
}
@media (prefers-reduced-motion: reduce) {
  .retomar, .trilha-cartao, .palco__marca { transition: none; }
}

/* ------------------------------------------------------------ certificado */
.certificado {
  display: flex; flex-direction: column; align-items: center; gap: 16px;
  text-align: center; margin-top: 22px; padding: 56px 40px 44px;
  border: 1px solid var(--gold-edge);
  background:
    radial-gradient(120% 90% at 50% 0%, rgba(214,178,94,.07) 0%, transparent 60%),
    var(--panel);
}
.certificado__marca { margin-bottom: 8px; }
.certificado__rotulo {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .3em;
  color: var(--gold-deep);
}
.certificado__frase { font-size: 14px; color: var(--muted); line-height: 1.7; }
.certificado__nome {
  font-family: var(--f-serif); font-size: clamp(26px, 3.4vw, 38px);
  color: var(--ink-hi); line-height: 1.15;
}
.certificado__oab { font-family: var(--f-mono); font-size: 12px; color: var(--gold); }
.certificado__pe {
  display: flex; justify-content: space-between; gap: 40px; flex-wrap: wrap;
  width: 100%; margin-top: 26px; padding-top: 22px; border-top: 1px solid var(--line-2);
}
.certificado__pe > * { flex: 1 1 200px; }
.certificado__assina { font-family: var(--f-serif); font-size: 17px; color: var(--ink); }
.certificado__data { font-size: 11.5px; color: var(--faint); }
.certificado__codigo {
  font-family: var(--f-mono); font-size: 15px; letter-spacing: .14em; color: var(--gold-bright);
}
.certificado__conferir {
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .16em;
  text-transform: uppercase; color: var(--faint-2);
}

/* NA IMPRESSÃO sobra o documento e mais nada. Salvar em PDF pelo próprio
   navegador entrega um arquivo pronto, sem gerador de PDF no servidor. */
@media print {
  .lateral, .barra, .nao-imprime, .recado { display: none !important; }
  .app, main, .conteudo { display: block !important; padding: 0 !important; margin: 0 !important; }
  body { background: #fff !important; }
  .certificado {
    border-color: #C9B182; background: #fff !important; color: #1a1712;
    page-break-inside: avoid; padding: 40px 32px;
  }
  .certificado__nome, .certificado__assina { color: #12100C !important; }
  .certificado__frase { color: #3A342A !important; }
  .certificado__rotulo, .certificado__oab, .certificado__codigo { color: #8F7326 !important; }
  .certificado__data, .certificado__conferir { color: #6B6558 !important; }
}

/* A caixinha de marcar do admin: alvo grande o bastante para clicar sem mira,
   e a moldura acende quando está marcada — num formulário com sete delas, a
   marca do sistema operacional sozinha não se distingue de relance. */
.caixinha {
  display: inline-flex; align-items: center; gap: 9px; cursor: pointer;
  padding: 8px 13px; border: 1px solid var(--line-3); border-radius: var(--raio);
  font-size: 12.5px; color: var(--muted); transition: border-color .2s, color .2s;
}
.caixinha:hover { border-color: var(--line-4); color: var(--ink); }
.caixinha:has(input:checked) {
  border-color: var(--gold-edge); color: var(--ink-hi);
  background: rgba(214,178,94,.06);
}
.caixinha input { accent-color: #D6B25E; }

/* O montador do curso: a lista de trilhas à esquerda, o que se edita à
   direita. Separar em três telas obrigaria a voltar a cada aula cadastrada,
   e montar uma trilha de vinte aulas viraria um dia de trabalho. */
.montador {
  display: grid; grid-template-columns: 280px minmax(0, 1fr);
  gap: 24px; align-items: start; margin-top: 24px;
}
.item--aqui { background: rgba(214,178,94,.07); box-shadow: inset 2px 0 0 var(--gold); }
@media (max-width: 1080px) { .montador { grid-template-columns: 1fr; } }

/* ===========================================================================
   LIVES
   A página de lives tem uma hierarquia de urgência, e o desenho obedece a ela:
   o que está no ar ocupa uma faixa inteira e se move; o que vem aí é uma
   lista com a data em bloco, legível de relance; o que já passou entra na
   mesma grade das trilhas, porque gravação e aula são a mesma coisa para
   quem assiste.
   =========================================================================== */

/* ------------------------------------------------- a faixa do "no ar agora" */
.live-agora {
  position: relative; display: flex; flex-direction: column; gap: 10px;
  padding: 30px 34px 32px; margin-top: 24px; overflow: hidden;
  text-decoration: none;
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background:
    radial-gradient(120% 160% at 12% 0%, rgba(214,178,94,.14) 0%, transparent 58%),
    linear-gradient(180deg, #16130D 0%, #0E0C08 100%);
  transition: border-color .22s, transform .24s var(--mola);
}
.live-agora:hover { border-color: var(--gold-deep); transform: translateY(-2px); }

/* O brilho que atravessa a faixa devagar. É o único movimento da página: uma
   live no ar é a coisa mais perecível do painel e precisa puxar o olho uma
   vez, não piscar sem parar. */
.live-agora__brilho {
  position: absolute; top: 0; left: -40%; width: 40%; height: 100%;
  background: linear-gradient(100deg, transparent, rgba(242,221,164,.07), transparent);
  animation: live-varre 5.5s ease-in-out infinite;
  pointer-events: none;
}
@keyframes live-varre {
  0%, 62% { transform: translateX(0); }
  100%    { transform: translateX(350%); }
}

.live-agora__selo {
  display: inline-flex; align-items: center; gap: 8px; align-self: flex-start;
  padding: 5px 11px; border-radius: var(--raio);
  border: 1px solid var(--alto-line); background: var(--alto-bg);
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .12em; color: var(--alto);
}
.live-agora__ponto {
  width: 7px; height: 7px; border-radius: 50%; background: var(--alto);
  box-shadow: 0 0 0 0 rgba(232,132,111,.55);
  animation: live-pulsa 1.9s ease-out infinite;
}
@keyframes live-pulsa {
  0%   { box-shadow: 0 0 0 0 rgba(232,132,111,.5); }
  70%  { box-shadow: 0 0 0 9px rgba(232,132,111,0); }
  100% { box-shadow: 0 0 0 0 rgba(232,132,111,0); }
}

.live-agora__titulo {
  font-family: var(--f-serif); font-size: 30px; line-height: 1.15; color: var(--ink-hi);
}
.live-agora__chamada { font-size: 13.5px; line-height: 1.6; color: var(--muted); max-width: 70ch; }
.live-agora__entrar {
  display: inline-flex; align-items: center; gap: 8px; align-self: flex-start;
  margin-top: 8px; padding: 10px 18px; border-radius: var(--raio);
  background: var(--gold-grad); color: #12100D;
  font-size: 12.5px; letter-spacing: .01em;
}

/* --------------------------------------------------------- o que vem aí */
.live-proxima {
  display: flex; align-items: flex-start; gap: 18px;
  padding: 18px 20px; border: 1px solid var(--line-2); background: var(--panel);
  transition: border-color .2s;
}
.live-proxima:hover { border-color: var(--line-4); }
.live-proxima--destaque { border-color: var(--gold-edge); }

/* A data em bloco. Um advogado que abre o painel entre duas audiências lê
   "25 SET" antes de ler qualquer título — e é o que decide se ele para para
   ler o resto. */
.live-proxima__data {
  flex: 0 0 auto; width: 58px; text-align: center; padding: 10px 0 8px;
  border: 1px solid var(--line-3); border-radius: var(--raio);
  background: var(--carbon);
}
.live-proxima__dia {
  display: block; font-family: var(--f-serif); font-size: 26px;
  line-height: 1; color: var(--ink-hi);
}
.live-proxima__mes {
  display: block; margin-top: 4px; font-family: var(--f-mono);
  font-size: 9.5px; letter-spacing: .14em; color: var(--gold-deep);
}
.live-proxima__titulo { font-size: 15px; color: var(--ink-hi); line-height: 1.3; }
.live-proxima__acoes {
  flex: 0 0 auto; display: flex; flex-direction: column; align-items: flex-end; gap: 7px;
}
.live-proxima__ver { font-size: 11.5px; text-decoration: underline; text-underline-offset: 3px; }

/* --------------------------------------------- a fita da gravação no cartão */
.trilha-cartao__fita {
  position: absolute; top: 10px; left: 10px;
  padding: 3px 9px; border-radius: var(--raio);
  background: rgba(10,9,7,.86); border: 1px solid var(--line-3);
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .1em;
  text-transform: uppercase; color: var(--muted-2);
}

/* ------------------------------------------------------ dentro da live */
.palco--ao-vivo { border-color: var(--alto-line); }
.palco__aovivo {
  position: absolute; top: 12px; left: 12px; z-index: 2;
  display: inline-flex; align-items: center; gap: 7px;
  padding: 4px 10px; border-radius: var(--raio);
  background: rgba(10,9,7,.8); border: 1px solid var(--alto-line);
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .12em; color: var(--alto);
  pointer-events: none;
}
.palco__aviso--espera { gap: 14px; }

/* O contador da live agendada. Grande de propósito: é a informação que a
   pessoa veio buscar quando abre a página antes da hora. */
.contador {
  font-family: var(--f-serif); font-size: 40px; line-height: 1;
  color: var(--gold); letter-spacing: -.01em;
}

.etiq--gold { background: rgba(214,178,94,.08); border-color: var(--gold-edge); color: var(--gold); }
.etiq--vivo { background: var(--alto-bg); border-color: var(--alto-line); color: var(--alto); }

/* Material que o plano não alcança: aparece, não baixa. Esconder faria a
   live parecer mais pobre do que é. */
.material--preso { opacity: .55; cursor: default; }
.material--preso:hover { background: none; }

/* ------------------------------------------------------- a vitrine vazia */
.vazio-live {
  position: relative; overflow: hidden;
  display: flex; flex-direction: column; align-items: center; gap: 14px;
  padding: 56px 36px 48px; margin-top: 24px; text-align: center;
  border: 1px solid var(--line-2); border-radius: var(--raio);
  background:
    radial-gradient(70% 100% at 50% 0%, rgba(214,178,94,.07) 0%, transparent 62%),
    var(--panel);
}
.vazio-live__aura {
  position: absolute; top: -120px; left: 50%; transform: translateX(-50%);
  width: 420px; height: 240px; pointer-events: none;
  background: radial-gradient(circle, rgba(214,178,94,.10) 0%, transparent 70%);
}
.vazio-live__marca {
  position: relative;
  display: inline-flex; align-items: center; justify-content: center;
  width: 66px; height: 66px; border-radius: 50%;
  border: 1px solid var(--gold-edge); background: rgba(214,178,94,.05);
  color: var(--gold);
}
.vazio-live__titulo {
  position: relative; font-family: var(--f-serif); font-size: 26px;
  line-height: 1.2; color: var(--ink-hi);
}
.vazio-live__texto {
  position: relative; max-width: 60ch; margin: 0;
  font-size: 13px; line-height: 1.75; color: var(--muted);
}

/* AS TRÊS FASES DA LIVE, na tela que ainda não tem nenhuma. Quem chega aqui
   primeiro não sabe o que esta seção faz — e a caixa que só diz "nada aqui"
   não ensina nada nem dá motivo para voltar. */
.vazio-live__passos {
  position: relative; display: grid; gap: 14px; margin: 12px 0 6px;
  grid-template-columns: repeat(auto-fit, minmax(196px, 1fr));
  width: 100%; max-width: 760px; text-align: left;
}
.vazio-live__passo {
  display: flex; flex-direction: column; gap: 6px;
  padding: 18px 18px 16px; border-radius: var(--raio);
  border: 1px solid var(--line-2); background: rgba(255,255,255,.012);
}
.vazio-live__passo > span {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; border-radius: 50%;
  border: 1px solid var(--gold-edge); color: var(--gold);
  font-family: var(--f-mono); font-size: 10.5px;
}
.vazio-live__passo b { font-size: 13px; color: var(--ink-hi); }
.vazio-live__passo p { margin: 0; font-size: 12px; line-height: 1.6; color: var(--muted-2); }

@media (max-width: 860px) {
  .live-agora { padding: 24px 20px 26px; }
  .live-agora__titulo { font-size: 24px; }
  .live-proxima { flex-wrap: wrap; gap: 14px; }
  .live-proxima__acoes { flex-direction: row; align-items: center; width: 100%; justify-content: space-between; }
  .contador { font-size: 30px; }
}

/* A linha de lista dentro de um painel — a lista de trilhas, de lives, de
   materiais. Fora da lateral, `.item` não tinha estilo nenhum e cada uma
   dessas listas saía como texto empilhado. */
.painel .item {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 12px 20px; text-decoration: none;
  border-top: 1px solid var(--line); transition: background .2s;
}
.painel .item:first-child { border-top: 0; }
a.item:hover { background: rgba(255,255,255,.02); }


/* O aviso de transmissão no menu. Pulsa devagar: é a única coisa do painel
   que precisa ser vista por quem está olhando para outra tela. */
.lateral .selo--vivo {
  color: var(--alto); border: 1px solid var(--alto-line); background: var(--alto-bg);
  padding: 2px 6px; border-radius: var(--raio); font-size: 8px; letter-spacing: .08em;
  animation: selo-vivo 2.4s ease-in-out infinite;
}
@keyframes selo-vivo { 0%, 100% { opacity: 1; } 50% { opacity: .5; } }
/* A etiqueta na lista do admin não quebra em duas linhas: "no ar" virando
   "no / ar" faz a linha inteira parecer defeito. */
.painel .item .etiq { white-space: nowrap; flex: 0 0 auto; }

/* ===========================================================================
   O CARTÃO DO PLANO GRATUITO
   Enquanto não há plano pago, uma grade de comparação não tem o que comparar
   — e uma grade com um cartão só parece defeito de tela. Esta é a peça dessa
   fase: cabeçalho com o preço do lado, o que está aberto em três blocos
   clicáveis, e o rodapé que separa CRÉDITO de ACESSO, que é a dúvida que mais
   chega no suporte.
   =========================================================================== */
.gratuito {
  position: relative; overflow: hidden; margin-top: 24px;
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background:
    radial-gradient(75% 130% at 6% 0%, rgba(214,178,94,.12) 0%, transparent 60%),
    linear-gradient(180deg, #16130D 0%, #0D0B08 100%);
}
.gratuito__aura {
  position: absolute; top: -90px; right: -70px; width: 320px; height: 320px;
  border-radius: 50%; pointer-events: none;
  background: radial-gradient(circle, rgba(214,178,94,.10) 0%, transparent 68%);
}

.gratuito__topo {
  position: relative; display: flex; align-items: flex-start;
  justify-content: space-between; gap: 28px; flex-wrap: wrap;
  padding: 32px 36px 26px;
}
.gratuito__fita {
  align-self: flex-start; padding: 4px 11px; border-radius: var(--raio);
  border: 1px solid var(--gold-edge); background: rgba(214,178,94,.07);
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .14em; color: var(--gold);
}
.gratuito__nome {
  font-family: var(--f-serif); font-size: 42px; line-height: 1;
  color: var(--ink-hi); margin: 0; letter-spacing: -.01em;
}
.gratuito__chamada {
  font-size: 14px; line-height: 1.6; color: var(--muted); max-width: 56ch; margin: 0;
}
.gratuito__preco { display: flex; flex-direction: column; align-items: flex-end; gap: 4px; }
.gratuito__preco b {
  font-family: var(--f-serif); font-size: 34px; line-height: 1; color: var(--gold);
}
.gratuito__preco span { font-size: 11.5px; color: var(--faint); }

/* Os três blocos do que está aberto. Dois deles são links: o advogado que
   acabou de ler "as lives" quer ir para as lives, e voltar ao menu para isso
   é o atrito que faz a tela virar enfeite. */
.gratuito__itens {
  position: relative; display: grid;
  grid-template-columns: repeat(auto-fit, minmax(232px, 1fr));
  gap: 1px; background: var(--line);
  border-top: 1px solid var(--line); border-bottom: 1px solid var(--line);
}
.gratuito__item {
  display: flex; flex-direction: column; gap: 9px;
  padding: 26px 28px 24px; text-decoration: none;
  background: #100E0A; transition: background .2s;
}
a.gratuito__item:hover { background: #17140E; }
a.gratuito__item:hover .gratuito__ir { color: var(--gold-bright); }
.gratuito__marca {
  display: inline-flex; align-items: center; justify-content: center;
  width: 38px; height: 38px; border-radius: 50%;
  border: 1px solid var(--gold-edge); background: rgba(214,178,94,.06);
  color: var(--gold); margin-bottom: 4px;
}
.gratuito__item b { font-size: 15px; color: var(--ink-hi); }
.gratuito__item p { font-size: 12.5px; line-height: 1.65; color: var(--muted); margin: 0; }
.gratuito__ir {
  margin-top: auto; padding-top: 10px; font-size: 12px; color: var(--gold);
  transition: color .2s;
}
.gratuito__ir--calado { color: var(--faint); }

/* O rodapé que separa crédito de acesso. Em faixa própria, com o sinal de
   aviso: é a frase que evita o chamado "paguei e não consigo ver a aula". */
.gratuito__pe {
  position: relative; display: flex; align-items: center; gap: 16px;
  flex-wrap: wrap; padding: 22px 36px 24px;
}
.gratuito__pe-marca { color: var(--gold-deep); display: inline-flex; flex: 0 0 auto; }
.gratuito__pe p {
  flex: 1 1 380px; margin: 0;
  font-size: 12.5px; line-height: 1.7; color: var(--muted);
}
.gratuito__pe p b { color: var(--ink); }
.gratuito__pe-acoes { display: flex; gap: 10px; flex-wrap: wrap; flex: 0 0 auto; }

@media (max-width: 760px) {
  .gratuito__topo { padding: 26px 20px 22px; gap: 18px; }
  .gratuito__nome { font-size: 32px; }
  .gratuito__preco { align-items: flex-start; }
  .gratuito__item { padding: 22px 20px 20px; }
  .gratuito__pe { padding: 20px; }
  .gratuito__pe-acoes { width: 100%; }
}

/* ------------------------------------------- o passo a passo da configuração */
.cfg-passo {
  display: flex; gap: 14px; align-items: flex-start;
  padding: 18px 20px; border: 1px solid var(--line-2); border-radius: var(--raio);
  background: var(--panel);
}
.cfg-passo--ok { border-color: var(--ok-line); background: linear-gradient(180deg, #0E1410 0%, var(--panel) 100%); }
.cfg-passo__marca {
  flex: 0 0 auto; display: inline-flex; align-items: center; justify-content: center;
  width: 24px; height: 24px; border-radius: 50%; margin-top: 1px;
  border: 1px solid var(--line-3); color: var(--faint-2); font-size: 12px;
}
.cfg-passo--ok .cfg-passo__marca { border-color: var(--ok-line); color: var(--ok); }
.cfg-passo b { font-size: 14px; color: var(--ink-hi); }

/* O bloco de configuração para copiar. Fonte mono e rolagem própria: linha
   de config quebrada em duas vira erro de sintaxe quando colada. */
.bloco-cfg {
  margin: 0; padding: 14px 16px; overflow-x: auto;
  border: 1px solid var(--line-2); border-radius: var(--raio);
  background: #0B0A07; color: var(--muted);
  font-family: var(--f-mono); font-size: 11px; line-height: 1.7;
  white-space: pre;
}

/* TEXTO DESCRITIVO QUE VAI ATÉ O FIM DO CARTÃO — da trilha, da aula, da live.
   Colunas de 78 caracteres servem a texto corrido de artigo; dentro de um
   painel largo elas param o texto na metade e deixam o resto vazio, e o vazio
   lê como falta de conteúdo — justamente o contrário do que a descrição quer
   dizer. */
.descricao-larga {
  margin: 0; max-width: none;
  font-size: 13.5px; line-height: 1.8; color: var(--muted);
  white-space: pre-line;
}
.descricao-larga + .descricao-larga { margin-top: 14px; }

/* ===========================================================================
   AS JANELAS DA ÁREA DA PLATAFORMA
   ===========================================================================
   Cadastrar é o que se faz de vez em quando; olhar a lista é o que se faz o
   tempo todo. Com o formulário aberto embaixo da tabela, a proporção ficava
   invertida — meia tela de formulário parado debaixo de uma lista espremida.

   A janela devolve a tela à lista e traz o formulário só quando ele é o
   assunto. Ela reusa a caixa da janela de confirmação (.modal) e acrescenta o
   que um formulário longo pede: cabeça fixa, corpo que rola, pé fixo. */

.modal__caixa--largo { max-width: 1040px; }

/* A página atrás para de rolar. No administrador quem rola é o <main>, não o
   body — travar só o body deixava a lista deslizando sob a janela. */
html.com-modal .app > main,
html.com-modal .lateral,
html.com-modal .lateral__rolagem { overflow: hidden; }

.jm { display: flex; flex-direction: column; max-height: calc(100vh - 56px); }
.jm__cab {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 18px;
  padding: 20px 26px; border-bottom: 1px solid var(--line-2);
  background: linear-gradient(180deg, rgba(214,178,94,.045) 0%, transparent 100%);
  flex: 0 0 auto;
}
.jm__tit {
  font-family: var(--f-serif); font-size: 21px; font-weight: 400;
  color: var(--ink-hi); line-height: 1.25;
  overflow: hidden; text-overflow: ellipsis;
}
/* O corpo é o único pedaço que rola: a cabeça diz o que se está editando e o
   pé tem o botão que salva — perder qualquer um dos dois no meio de um
   formulário de vinte campos é o que faz alguém sair sem salvar. */
.jm__corpo { padding: 24px 26px; overflow-y: auto; flex: 1 1 auto; }
.jm__corpo + .jm__corpo { border-top: 0; padding-top: 0; }
.jm__pe {
  display: flex; align-items: center; justify-content: flex-end; gap: 12px; flex-wrap: wrap;
  padding: 18px 26px; border-top: 1px solid var(--line-2);
  background: var(--carbon); flex: 0 0 auto;
}
/* O que é acessório — "ver como aluno", um link para outra tela — encosta na
   margem esquerda e deixa o canto direito só para desistir e confirmar. */
.jm__pe__extra { margin-right: auto; display: inline-flex; gap: 10px; }

.jm__abas {
  display: flex; gap: 2px; padding: 0 26px; flex: 0 0 auto;
  border-bottom: 1px solid var(--line-2); background: var(--carbon);
}
.jm__aba {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 13px 16px; margin-bottom: -1px;
  background: none; border: 0; border-bottom: 2px solid transparent;
  font-family: var(--f-sans); font-size: 11.5px; letter-spacing: .06em;
  text-transform: uppercase; color: var(--faint); cursor: pointer;
  transition: color .18s, border-color .18s;
}
.jm__aba:hover { color: var(--muted); }
.jm__aba[aria-selected="true"] { color: var(--gold); border-bottom-color: var(--gold-deep); }
.jm__ponto { width: 6px; height: 6px; border-radius: 50%; background: var(--faint-2); }
.jm__ponto--ok { background: var(--ok); }
.jm__ponto--erro { background: var(--alto); }
.jm__ponto--anda { background: var(--aviso); animation: lb-pisca 1.4s ease-in-out infinite; }
@keyframes lb-pisca { 50% { opacity: .25; } }
.jm__conta {
  min-width: 17px; padding: 1px 5px; border-radius: 9px;
  background: var(--line-3); color: var(--muted);
  font-family: var(--f-mono); font-size: 10px; line-height: 15px; text-align: center;
}

/* O gatilho enquanto a janela não chegou. */
.jm-carregando { opacity: .55; pointer-events: none; }

@media (max-width: 640px) {
  .jm { max-height: 100vh; }
  .jm__cab, .jm__corpo, .jm__pe { padding-left: 18px; padding-right: 18px; }
  .jm__abas { padding: 0 10px; overflow-x: auto; }
}

/* ===========================================================================
   CAMPO DE ARQUIVO DESENHADO
   ===========================================================================
   O `<input type=file>` cru é pintado pelo sistema operacional: botão cinza,
   outra família de fonte, um "Nenhum arquivo escolhido" que não combina com
   nada em volta. No meio de uma tela inteira desenhada, é a única coisa que
   parece de outro programa.

   O input continua existindo e continua recebendo foco — ele só fica
   transparente POR CIMA desta caixa, que tem a borda, o fundo e a altura dos
   outros campos. */

/* ".arq-campo", não ".arq": este bloco fica no fim da folha e, enquanto se
   chamava ".arq", o "display:block" daqui vencia o "display:grid" da lista
   de documentos do gerador, que é outro componente com o mesmo nome. */
.arq-campo { position: relative; display: block; cursor: pointer; }
.arq-campo > input[type="file"] {
  position: absolute; inset: 0; width: 100%; height: 100%;
  opacity: 0; cursor: pointer;
}
.arq-campo__alvo {
  display: flex; align-items: center; gap: 14px;
  padding: 12px 14px; min-height: 52px;
  border: 1px solid var(--line-3); border-radius: var(--raio);
  background: var(--field);
  transition: border-color .2s, background .2s;
}
.arq-campo > input[type="file"]:focus-visible + .arq-campo__alvo,
.arq-campo:hover .arq-campo__alvo { border-color: var(--line-4); }
.arq-campo--sobre .arq-campo__alvo { border-color: var(--gold-deep); background: rgba(214,178,94,.06); }
.arq-campo--cheio .arq-campo__alvo { border-color: var(--gold-edge); }
.arq-campo__ico { display: flex; flex: 0 0 auto; color: var(--faint); }
.arq-campo--cheio .arq-campo__ico { color: var(--gold); }
.arq-campo__txt { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1; }
.arq-campo__nome {
  font-size: 13px; color: var(--muted);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.arq-campo--cheio .arq-campo__nome { color: var(--ink); }
.arq-campo__dica { font-size: 11px; color: var(--faint-2); line-height: 1.45; }
.arq-campo__btn {
  flex: 0 0 auto; padding: 7px 13px; border-radius: var(--raio);
  border: 1px solid var(--line-3); background: var(--raised);
  font-size: 11px; letter-spacing: .06em; text-transform: uppercase; color: var(--muted);
}
.arq-campo:hover .arq-campo__btn { color: var(--ink); border-color: var(--line-4); }

/* A área grande de soltar — só para o vídeo, que é o arquivo que se arrasta. */
.vd-solta { position: relative; display: block; cursor: pointer; }
.vd-solta > input[type="file"] { position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer; }
.vd-solta__miolo {
  display: flex; flex-direction: column; align-items: center; gap: 7px;
  padding: 34px 22px; text-align: center;
  border: 1px dashed var(--line-4); border-radius: var(--raio);
  background:
    radial-gradient(120% 140% at 50% 0%, rgba(214,178,94,.05) 0%, transparent 62%),
    var(--field);
  transition: border-color .2s, background .2s;
}
.vd-solta:hover .vd-solta__miolo { border-color: var(--gold-deep); }
.vd-solta.arq-campo--sobre .vd-solta__miolo { border-color: var(--gold); background: rgba(214,178,94,.08); }
.vd-solta__ico { color: var(--gold-deep); }
.vd-solta:hover .vd-solta__ico { color: var(--gold); }
.vd-solta__tit { font-size: 14px; color: var(--ink); font-weight: 400; }
.vd-solta__nota { font-size: 11.5px; color: var(--faint); }

/* ===========================================================================
   O ANDAMENTO DO ENVIO
   ===========================================================================
   Quem sobe um arquivo de oitocentos megabytes precisa de três números:
   quanto já foi, quão rápido está indo e quanto falta. Sem os três, um envio
   lento é indistinguível de um envio travado — e quem não sabe qual dos dois
   está vendo fecha a aba no meio. */

.env {
  display: flex; flex-direction: column; gap: 13px;
  padding: 18px 20px; border: 1px solid var(--line-2); border-radius: var(--raio);
  background: var(--carbon);
}
.env__topo { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; }
.env__fase { font-size: 13.5px; color: var(--ink); font-weight: 400; }
.env__arquivo {
  font-size: 11px; max-width: 46ch;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.env__pct { font-size: 26px; line-height: 1; color: var(--gold); flex: 0 0 auto; }
.env__trilho { height: 5px; background: var(--line-2); border-radius: 3px; overflow: hidden; }
.env__barra {
  display: block; height: 100%; width: 0; border-radius: 3px;
  background: linear-gradient(90deg, var(--gold-deep) 0%, var(--gold) 100%);
  transition: width .3s linear;
}
.env__num { display: flex; gap: 26px; flex-wrap: wrap; }
.env__num__item { display: flex; flex-direction: column; gap: 3px; }
.env__num__item b { font-size: 12.5px; color: var(--ink); font-weight: 400; }
.env__recado { font-size: 11.5px; line-height: 1.55; }

/* Convertendo é trabalho do servidor: não há percentual honesto para mostrar,
   então a barra anda sem dizer quanto falta — e diz, ela mesma, que está
   trabalhando. */
.env--convertendo .env__barra {
  width: 100% !important;
  background-image: repeating-linear-gradient(
    115deg, rgba(10,9,7,.45) 0 10px, transparent 10px 22px);
  background-size: 240px 100%;
  animation: lb-listra 1.1s linear infinite;
}
@keyframes lb-listra { to { background-position: 240px 0; } }
.env--convertendo .env__pct { color: var(--aviso); }
.env--pronto .env__pct { color: var(--ok); }
.env--pronto .env__barra { background: var(--ok); }
.env--erro .env__pct { color: var(--alto); }
.env--erro .env__barra { background: var(--alto); }

@media (prefers-reduced-motion: reduce) {
  .env--convertendo .env__barra { animation: none; }
  .jm__ponto--anda { animation: none; }
}

/* O estado do vídeo em uma linha, no alto da aba. */
.vd-estado {
  display: flex; align-items: flex-start; gap: 13px;
  padding: 14px 16px; border: 1px solid var(--line-2); border-radius: var(--raio);
  background: var(--panel);
}
.vd-estado__marca {
  flex: 0 0 auto; width: 26px; height: 26px; border-radius: 50%;
  display: grid; place-items: center; font-size: 13px;
  border: 1px solid var(--line-3); color: var(--faint);
}
.vd-estado__marca--ok { color: var(--ok); border-color: var(--ok-line); background: var(--ok-bg); }
.vd-estado__marca--erro { color: var(--alto); border-color: var(--alto-line); background: var(--alto-bg); }
.vd-estado__marca--anda { color: var(--aviso); border-color: var(--aviso-line); background: var(--aviso-bg); }
.vd-estado__tit { font-size: 13.5px; color: var(--ink); font-weight: 400; }

/* Os materiais anexados. */
.mat { display: flex; flex-direction: column; border: 1px solid var(--line-2); border-radius: var(--raio); }
.mat:empty { display: none; }
.mat > p { padding: 16px 18px; margin: 0; }
.mat__linha {
  display: flex; align-items: center; gap: 13px;
  padding: 11px 16px; border-top: 1px solid var(--line);
}
.mat__linha:first-child { border-top: 0; }
.mat__ext {
  flex: 0 0 auto; min-width: 46px; padding: 5px 7px; text-align: center;
  border: 1px solid var(--line-3); border-radius: var(--raio);
  font-size: 10px; color: var(--gold); background: var(--raised);
}
.mat__nome {
  font-size: 12.5px; color: var(--ink);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}

/* ===========================================================================
   A CABEÇA DE UMA TRILHA ABERTA
   =========================================================================== */
.tr-cab { margin-top: 24px; }
.tr-cab__volta {
  display: inline-block; margin-bottom: 14px; text-decoration: none;
  font-size: 11.5px; letter-spacing: .05em; color: var(--faint);
  transition: color .18s;
}
.tr-cab__volta:hover { color: var(--gold); }
.tr-cab__linha {
  display: flex; align-items: flex-start; justify-content: space-between; gap: 20px;
  flex-wrap: wrap; padding-bottom: 18px; border-bottom: 1px solid var(--line-2);
}
.tr-cab__tit { font-family: var(--f-serif); font-size: 27px; font-weight: 400; color: var(--ink-hi); }

/* Um link dentro de texto corrido — o único sublinhado do sistema, porque
   dentro de frase a cor sozinha não basta para dizer que ali se clica. */
.ligacao { color: var(--gold); text-decoration: none; border-bottom: 1px solid var(--gold-edge); }
.ligacao:hover { color: var(--gold-bright); border-bottom-color: var(--gold-deep); }


/* ===========================================================================
   A LINHA DE AÇÃO DE UM CARTÃO
   ===========================================================================
   Botão de salvar encostado na margem esquerda obriga o olho a voltar ao
   começo da linha depois de ler o cartão inteiro da esquerda para a direita.
   Na ponta direita ele está onde a leitura termina — e no mesmo lugar em
   todos os cartões e em todas as janelas, que é o que faz não precisar
   procurar. */
.pe-acoes {
  display: flex; align-items: center; justify-content: flex-end;
  gap: 12px; flex-wrap: wrap;
}
/* Quando o cartão tem conteúdo acima, a linha de ação se separa dele. */
.pe-acoes--linha {
  border-top: 1px solid var(--line); padding-top: 20px; margin-top: 22px;
}
/* Um texto explicativo do lado esquerdo da mesma linha. */
.pe-acoes__nota { margin: 0 auto 0 0; max-width: 72ch; text-align: left; }

/* ===========================================================================
   AS BARRAS DE ROLAGEM
   ===========================================================================
   O menu e a área de conteúdo já tinham a barra desenhada; o resto da página
   — textarea, tabela larga, corpo de janela — continuava com a barra branca
   do sistema operacional, que num fundo preto é a coisa mais clara da tela e
   puxa o olho para o lugar errado. Estas regras valem para tudo: o que não
   tiver regra própria herda esta. */
html { scrollbar-width: thin; scrollbar-color: #2B2620 transparent; }
*::-webkit-scrollbar { width: 10px; height: 10px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb {
  background: #2B2620; border-radius: 8px;
  border: 2px solid transparent; background-clip: padding-box;
}
*::-webkit-scrollbar-thumb:hover {
  background: #3A342A; border: 2px solid transparent; background-clip: padding-box;
}
*::-webkit-scrollbar-corner { background: transparent; }

/* ===========================================================================
   ARRASTAR PARA ORDENAR
   ===========================================================================
   O punho é discreto de propósito: ele só aparece quando o ponteiro passa
   pelo item. Visível o tempo todo, seis pontinhos ao lado de cada aula viram
   sujeira numa lista de vinte. */
.puxador {
  display: inline-flex; align-items: center; justify-content: center;
  flex: 0 0 auto; width: 20px; height: 24px;
  color: var(--faint-2); cursor: grab;
  opacity: 0; transition: opacity .18s, color .18s;
}
.puxador:active { cursor: grabbing; }
[data-ordem-id]:hover .puxador,
.puxador:focus-visible { opacity: 1; }
.puxador:hover { color: var(--gold); }

/* No cartão da vitrine ele fica sobre a capa, que é onde há espaço vazio. */
.trilha-cartao { position: relative; }
.trilha-cartao .puxador {
  position: absolute; top: 8px; left: 8px; z-index: 2;
  width: 26px; height: 26px; border-radius: var(--raio);
  background: rgba(10,9,7,.8); border: 1px solid var(--line-3);
}

/* O item que está na mão fica apagado: o lugar dele na lista é o que
   interessa enquanto se arrasta, não o conteúdo. */
.arrastando { opacity: .35; }

/* Gravou. Um pisca-pisca discreto no grupo inteiro — sem recado, sem recarga:
   a lista já está na ordem nova, e o aviso serve só para dizer que o servidor
   também está. */
.ordenando { opacity: .7; }
.ordenou { animation: lb-ordenou .9s ease-out; }
@keyframes lb-ordenou {
  0%   { box-shadow: inset 0 0 0 1px var(--gold-deep); }
  100% { box-shadow: inset 0 0 0 1px transparent; }
}
@media (prefers-reduced-motion: reduce) { .ordenou { animation: none; } }

/* Em tela de toque o arrasto de HTML não existe: o punho some e a ordem fica
   como está — nenhuma tela some por causa disso. */
@media (hover: none) { .puxador { display: none; } }

/* ===========================================================================
   O MENU NO CELULAR E NO TABLET — A GAVETA
   ===========================================================================
   Abaixo de 860 px a barra lateral não cabe ao lado do conteúdo. A solução
   antiga era `display:none`: o menu sumia e mais nada tomava o lugar dele.
   Quem abria o painel pelo telefone ficava preso na tela em que caiu — sem
   trilhas, sem peças, sem plano, sem saída a não ser digitar o endereço.

   Agora ela é gaveta: continua sendo o MESMO menu, com os mesmos itens e o
   mesmo marcador da tela atual; só entra por cima do conteúdo quando se pede,
   e sai quando se escolhe algo ou se toca fora. */

.menu-botao { display: none; }
.menu-fundo { display: none; }
/* O símbolo só existe no telefone: no computador a marca já está no alto da
   coluna da esquerda, e repetir seria ruído. */
.marca-cel { display: none; }

@media (max-width: 860px) {
  /* No computador quem rola é o <main>, dentro de uma casca de altura fixa.
     No telefone isso briga com a barra de endereço, que aparece e some e
     muda a altura da tela no meio da rolagem. Aqui rola a PÁGINA, como em
     qualquer site. */
  .app { display: block; height: auto; min-height: 100vh; overflow: visible; }
  .app > main { height: auto; min-height: 0; overflow: visible; }

  .menu-botao {
    display: inline-grid; place-items: center; flex: 0 0 auto;
    width: 42px; height: 42px; margin-left: -6px;
    background: none; border: 1px solid var(--line-3); border-radius: var(--raio);
    color: var(--muted); cursor: pointer;
    transition: color .18s, border-color .18s;
  }
  .menu-botao:hover, .menu-botao[aria-expanded="true"] {
    color: var(--gold); border-color: var(--gold-edge);
  }

  /* A marca, em 32 px, entre o puxador do menu e a trilha. É o único lugar
     da tela do telefone onde ela cabe sem disputar espaço com o caminho da
     página — e sem ela a tela não se identifica em lugar nenhum. */
  /* A arte tem 32 px; a ÁREA DE TOQUE tem 42, que é a medida mínima para o
     dedo. Sem isso o símbolo vira um alvo que só acerta quem mira. */
  .marca-cel {
    display: inline-flex; flex: 0 0 auto;
    align-items: center; justify-content: center;
    min-width: 42px; min-height: 42px;
  }
  .marca-cel img {
    display: block; width: 32px; height: 32px; border-radius: var(--raio);
  }
  .saldo-mais { min-width: 42px; }

  .lateral {
    display: flex; position: fixed; top: 0; bottom: 0; left: 0; z-index: 81;
    width: min(84vw, 300px); height: 100vh;
    transform: translateX(-102%);
    transition: transform .3s var(--mola);
    box-shadow: 0 0 60px rgba(0, 0, 0, .65);
  }
  html.menu-aberto .lateral { transform: none; }

  .menu-fundo {
    display: block; position: fixed; inset: 0; z-index: 80;
    background: rgba(6, 5, 4, .76);
    opacity: 0; pointer-events: none; transition: opacity .28s;
  }
  html.menu-aberto .menu-fundo { opacity: 1; pointer-events: auto; }
  html.menu-aberto, html.menu-aberto body { overflow: hidden; }

  /* Com a página rolando, a barra do topo precisa ficar: é onde mora o
     puxador do menu, e procurá-lo rolando até o começo é o mesmo que não
     ter menu. */
  .barra { position: sticky; top: 0; z-index: 40; padding-block: 12px; }
  .barra .trilha { font-size: 12px; min-width: 0; overflow: hidden; }
  .barra .trilha .pai { display: none; }
  .barra .trilha svg { display: none; }
  .barra .trilha span { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

  /* Dedo, não ponteiro: nada com que se interage fica abaixo de 40 px de
     altura, que é a medida que a Apple e o Google recomendam. */
  .conteudo .btn, .conteudo button:not(.baixinha):not(.modal__x):not(.janela__x):not(.jm__aba),
  .barra .btn { min-height: 42px; }
  .conteudo .baixinha { min-height: 40px; min-width: 40px; }
  .lateral a.item { padding-block: 12px; }

  /* Tabela larga rola sozinha dentro da própria moldura, em vez de empurrar
     a página inteira para o lado. */
  .pc-tabela-rola, .tabela-rola, .rolagem { -webkit-overflow-scrolling: touch; }

  /* Uma linha de dois botões lado a lado não cabe em 390 px. Em vez de
     empurrar a tela, ela ocupa a largura inteira e os botões se espalham. */
  .pe-acoes { width: 100%; justify-content: flex-start; }
  .pe-acoes > * { flex: 1 1 auto; }
  .pe-acoes .btn { width: 100%; }
}

@media (prefers-reduced-motion: reduce) {
  .lateral, .menu-fundo { transition: none; }
}

/* Um bloco de convite: tudo no eixo do meio, inclusive o botão. Serve a
   cartões curtos — rótulo, um parágrafo e um caminho. Não serve a formulário
   nem a lista: texto longo centrado é mais difícil de ler, e por isso a
   medida do parágrafo continua limitada. */
.centrado { align-items: center; text-align: center; }
.centrado > p { margin-inline: auto; }

/* A PONTE DA AULA PARA O GERADOR.
   A coluna de texto pedia `flex:1` e `min-width:0`: num espaço estreito isso
   faz ela ENCOLHER até cinco palavras por linha em vez de quebrar para baixo
   do botão. Uma base mínima obriga a quebra, que é o que se quer no celular. */
.ponte > :first-child { flex: 1 1 280px; }
@media (max-width: 640px) {
  .ponte { flex-direction: column; align-items: stretch; text-align: left; }
  .ponte .btn { width: 100%; }
}

/* ===========================================================================
   O BOTÃO QUE APAGA
   ===========================================================================
   Não é vermelho o tempo todo: vermelho permanente vira paisagem e deixa de
   avisar. Ele é discreto como qualquer botão calmo e só acende quando está
   armado — que é o momento em que o próximo clique não tem volta. */
.btn.btn--perigo {
  border: 1px solid var(--alto-line); color: #B0736A; background: none; font-weight: 400;
}
.btn.btn--perigo:hover { border-color: var(--alto); color: var(--alto); background: var(--alto-bg); }
.btn.btn--perigo--armado {
  border-color: var(--alto); color: #12100D; background: var(--alto);
  animation: lb-pulsa-perigo 1.1s ease-in-out infinite;
}
.btn.btn--perigo--armado:hover { color: #12100D; background: var(--alto); }
@keyframes lb-pulsa-perigo { 50% { opacity: .72; } }
@media (prefers-reduced-motion: reduce) { .btn--perigo--armado { animation: none; } }

/* ===========================================================================
   O AR ENTRE OS CARTÕES
   ===========================================================================
   Um cartão colado no botão de cima, ou no cartão de baixo, lê como se fossem
   a mesma coisa — e a pessoa clica no que não queria. Estas medidas são a
   distância mínima entre blocos que NÃO se pertencem. */
.conteudo > .painel + .painel,
.conteudo > .painel + .pc-sec,
.conteudo > .pc-sec + .painel { margin-top: 22px; }

/* Dentro da janela, o mesmo: o grupo de caixas de marcar não encosta no campo
   de cima nem no bloco de baixo. */
.jm__corpo > .linha + .linha,
.jm__corpo > .form-grade + .linha { margin-top: 4px; }
.jm__corpo > :last-child { margin-bottom: 6px; }

/* A aba do vídeo e a dos materiais começam logo abaixo das abas: sem esta
   folga o primeiro bloco fica encostado na linha que as separa. */
.jm__abas + .jm__corpo { padding-top: 22px; }
/* Cada aba é um corpo irmão do outro. A regra de corpos empilhados zera o
   topo; aqui devolvemos o respiro, senão o primeiro cartão da aba encosta
   na régua das abas. */
.jm__corpo + .jm__corpo[data-pane] { padding-top: 22px; }

/* Caixa de marcar: o quadrado e o texto ficavam colados na borda do cartão
   vizinho quando duas apareciam lado a lado. */
.caixinha + .caixinha { margin-left: 2px; }

/* ===========================================================================
   A FAIXA DO QUE ESTÁ NA MÁQUINA
   ===========================================================================
   Envio e conversão acontecem fora da tela: o arquivo sobe da janela e o
   ffmpeg trabalha no servidor por até quinze minutos. Sem um lugar fixo que
   diga isso, a única pista era um selo cinza na linha da aula — e quem
   fechou a janela ficava sem saber se o arquivo chegou. */
.fila-faixa {
  display: flex; align-items: center; gap: 14px;
  margin-top: 22px; padding: 13px 18px;
  border: 1px solid var(--aviso-line); border-radius: var(--raio);
  background: linear-gradient(100deg, rgba(217,164,65,.07) 0%, transparent 60%), var(--panel);
}
.fila-faixa[hidden] { display: none; }
.fila-faixa__marca { color: var(--aviso); font-size: 15px; animation: lb-gira 2.4s linear infinite; }
@keyframes lb-gira { to { transform: rotate(360deg); } }
.fila-faixa__tit { font-size: 13px; color: var(--ink); font-weight: 400; }
.fila-faixa .nota {
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
@media (prefers-reduced-motion: reduce) { .fila-faixa__marca { animation: none; } }

/* ===========================================================================
   A TABELA DA PLATAFORMA, ARRUMADA
   ===========================================================================
   Uma tabela existe para COMPARAR linhas. Quando uma linha tem duas etiquetas
   e a outra tem seis, as alturas ficam diferentes, o olho perde a régua
   horizontal e a comparação — que era o motivo da tabela — deixa de ser
   possível. Estas regras cuidam das três coisas que quebravam isso: a marca
   que empurrava o texto, a lista de etiquetas que crescia sem limite, e o
   número que ficava alinhado pelo topo em vez de pelo meio. */

/* Célula alinhada pelo MEIO. `top` só serve quando a célula tem parágrafo. */
.pc-tab td { vertical-align: middle; }
.pc-tab td.cima { vertical-align: top; }

/* O `.selo` do menu lateral usa `margin-left:auto` para encostar à direita.
   Dentro de uma célula isso o jogava para longe do nome a que pertence. */
.pc-tab .selo { margin-left: 0; }

.pc-tab__nome { display: block; color: var(--ink); line-height: 1.35; }
.pc-tab__selos { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 4px; min-height: 16px; }
.pc-tab__chave {
  display: block; margin-top: 3px;
  font-size: 10.5px; color: var(--faint-2);
}
/* As etiquetas de recurso numa linha só, com o excesso contado num "+2". */
.pc-tab__etiqs { display: flex; gap: 5px; flex-wrap: wrap; align-items: center; }
.etiq--mudo { color: var(--faint); border-style: dashed; cursor: help; }

/* Coluna de número não quebra no meio de "R$ 1.234,00". */
.pc-tab td.num, .pc-tab th.num { white-space: nowrap; }

/* Na horizontal apertada a tabela rola dentro da moldura, e uma largura
   mínima garante que as colunas não virem uma letra por linha. */
.pc-tabela-rola > .pc-tab { min-width: 720px; }
@media (max-width: 760px) { .pc-tabela-rola > .pc-tab { min-width: 640px; } }

/* ===========================================================================
   36. A PÁGINA DE PLANOS E CRÉDITOS — e a largura que ela usa
   ===========================================================================

   O texto de abertura ocupava uma coluna estreita à esquerda e a outra metade
   da tela ficava em branco. Numa página de preço isso lê como rascunho. Aqui
   a abertura é um par: título de um lado, explicação do outro, e os dois
   somados usam a largura inteira. Abaixo de 900px vira uma coluna só — em
   tela estreita duas colunas dariam sete palavras por linha. */
.abertura {
  display: grid; grid-template-columns: minmax(0, 1fr);
  gap: 18px; margin-bottom: 52px;
}
/* TÍTULO EM CIMA, DESCRIÇÃO EMBAIXO, os dois na largura inteira.
   Era um par lado a lado — título à esquerda, texto à direita. Ficava com a
   cara de duas colunas de jornal e deixava o título preso numa medida curta.
   Empilhado, o título abre no tamanho que a fonte pede e a descrição corre
   por toda a faixa. A entrelinha sobe junto: linha longa com entrelinha
   apertada é o que cansa o olho, não o comprimento em si. */
.abertura h2 { max-width: none; }
.abertura .dek,
.abertura .nota,
.abertura p { max-width: none; line-height: 1.72; }
@media (max-width: 900px) {
  .abertura { gap: 14px; }
  .abertura h2 br { display: none; }
}

/* O PAR DE BOTÕES QUE FECHA UMA PÁGINA.
   Centralizado, e com o convite mais forte à direita: quem lê da esquerda
   para a direita encontra primeiro o "experimente de graça" e termina no
   "crie a conta". Em tela estreita empilha, e aí o principal vem em cima. */
.par-fecho {
  display: flex; justify-content: center; align-items: center;
  gap: 12px; flex-wrap: wrap; margin-top: 44px;
}
@media (max-width: 520px) {
  .par-fecho { flex-direction: column-reverse; align-items: stretch; }
  .par-fecho .btn { width: 100%; }
}

/* ===========================================================================
   OS GERADORES DE INICIAL

   Um bloco por tese, e dentro dele a mesma ordem sempre: o que é, como
   funciona, o que entra, o que volta, e quando NÃO serve. A última é a que
   faz o resto valer — advogado que descobre o limite depois de assinar
   cancela; o que descobre antes assina sabendo o que comprou.
   =========================================================================== */
.gerador {
  display: flex; flex-direction: column; gap: 18px;
  padding: 30px 32px;
  border: 1px solid var(--line-2); border-radius: var(--raio);
  background: var(--panel);
}
.gerador__alto {
  display: flex; align-items: flex-start; justify-content: space-between;
  gap: 20px; flex-wrap: wrap;
}
.gerador__nome { font-size: 24px; line-height: 1.1; margin: 0; }
.gerador__chamada { font-size: 13px; color: var(--gold-deep); line-height: 1.5; }
.gerador__como { margin: 0; max-width: none; }
.gerador__par {
  display: grid; gap: 14px;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
}
.gerador__caixa {
  display: flex; flex-direction: column; gap: 10px;
  padding: 18px 20px; border-radius: var(--raio);
  border: 1px solid var(--line); background: var(--field);
}
.gerador__caixa--sai { border-color: var(--gold-deep); background: var(--raised); }
.gerador__lista { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.gerador__lista li {
  position: relative; padding-left: 18px;
  font-size: 13px; line-height: 1.55; color: var(--muted);
}
.gerador__lista li::before {
  content: '·'; position: absolute; left: 4px; top: -2px;
  color: var(--faint); font-size: 16px;
}
.gerador__lista--ok li::before { content: '✓'; font-size: 11px; top: 1px; color: var(--gold); }
.gerador__nao {
  margin: 0; line-height: 1.65; padding-top: 16px;
  border-top: 1px solid var(--line);
}
@media (max-width: 720px) { .gerador { padding: 24px 20px; } }

/* Os quatro passos de uso. O número é a âncora visual; o resto é texto.

   CLASSE PRÓPRIA, E POR UM MOTIVO. Isto se chamava .passo e ficava no fim da
   folha; como a folha é uma só e o seletor tem o mesmo peso do lá de cima,
   quem vinha depois ganhava o display. Resultado: os cinco passos da tela de
   análise, desenhados para sair em LINHA, apareciam empilhados em cartões
   altos e centralizados — e não havia nada de errado com o desenho deles.
   Nome de classe genérico em folha única é colisão esperando acontecer. */
.passo-uso {
  display: flex; flex-direction: column; gap: 9px;
  padding: 22px 22px 24px;
  border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--panel);
}
.passo-uso__n {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 50%;
  border: 1px solid var(--gold-edge, var(--line-2)); background: var(--raised);
  font-family: var(--f-mono); font-size: 13px; color: var(--gold);
}
.passo-uso__t { font-size: 14.5px; font-weight: 400; color: var(--ink); }

/* O cartão de fecho de /recursos: largura inteira e texto em corpo maior.
   A medida de leitura continua existindo, mas no PARÁGRAFO, não no cartão —
   é o que mantém a linha legível sem deixar meia faixa em branco ao lado. */
.garantia { padding: 34px 36px; }
.garantia__texto { font-size: 16px; max-width: 92ch; margin-inline: auto; }
@media (max-width: 720px) { .garantia { padding: 26px 20px; } }

/* O cabeçalho de seção: o nome à esquerda, a ressalva à direita, na mesma
   linha de base. Separa dois assuntos sem gastar um título inteiro. */
.sec-cab {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 18px; flex-wrap: wrap;
  padding-bottom: 12px; margin-bottom: 22px;
  border-bottom: 1px solid var(--line-2);
}

/* Os planos. Cartões de largura igual, quantos forem: um escritório que
   vende três planos não pode ter o terceiro menor que os outros dois. O
   destacado sobe com sombra em vez de mudar de tamanho — cartão maior que o
   vizinho desalinha a fileira inteira e o olho perde a comparação. */
.planos-site {
  display: grid; gap: 16px; align-items: stretch;
  grid-template-columns: repeat(auto-fit, minmax(225px, 1fr));
}
@media (min-width: 561px) and (max-width: 1100px) {
  .planos-site--par { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
.plano-cartao {
  position: relative; display: flex; flex-direction: column; gap: 16px;
  padding: 28px 24px 24px;
  border: 1px solid var(--line-2); border-radius: var(--raio);
  background: var(--panel);
}
.plano-cartao--destaque {
  border-color: var(--gold-deep); background: var(--raised);
  box-shadow: 0 20px 60px rgba(0, 0, 0, .5);
}
.plano-cartao__selo {
  position: absolute; top: -10px; left: 22px;
  padding: 3px 11px; border-radius: 99px;
  background: var(--gold); color: #17140E;
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase;
}
.plano-cartao__nome {
  font-family: var(--f-serif); font-size: 22px; line-height: 1.1;
  color: var(--ink-hi); font-weight: 400;
}
/* A chamada de cada plano tem altura mínima para que os preços dos quatro
   cartões caiam na mesma linha mesmo quando uma chamada dobra e a outra não. */
.plano-cartao__chamada { line-height: 1.5; min-height: 34px; }
.plano-cartao__preco {
  display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap;
  padding-bottom: 16px; border-bottom: 1px solid var(--line);
}
.plano-cartao__preco .serif { font-size: 36px; line-height: 1; color: var(--ink-hi); }
.plano-cartao--destaque .plano-cartao__preco .serif { color: var(--gold-bright); }
.plano-cartao__cr {
  display: flex; flex-direction: column; gap: 3px;
  padding: 11px 13px; border-radius: var(--raio);
  border: 1px solid var(--line); background: var(--field);
  font-size: 12.5px; color: var(--muted);
}
/* O NÚMERO E A UNIDADE NA MESMA LINHA: "1.200 créditos por mês". Antes o
   número ficava sozinho numa linha e "créditos por mês" na de baixo, o que
   lia como dois dados em vez de um. A quebra só acontece se a linha não
   couber — e aí quebra depois do número, nunca no meio dele. */
.plano-cartao__cr-linha { font-size: 12.5px; color: var(--muted); }
.plano-cartao__cr b {
  color: var(--gold); font-family: var(--f-mono); font-weight: 400; font-size: 15px;
  margin-right: 2px;
}
.plano-cartao__lista { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.plano-cartao__lista li {
  position: relative; padding-left: 18px;
  font-size: 12.5px; line-height: 1.5; color: var(--muted);
}
.plano-cartao__lista li::before {
  content: ''; position: absolute; left: 3px; top: 7px;
  width: 5px; height: 5px; border-radius: 50%; background: var(--gold-deep);
}
.plano-cartao--destaque .plano-cartao__lista li::before { background: var(--gold); }
.plano-cartao__pe {
  margin-top: auto; display: flex; flex-direction: column; gap: 11px;
  font-size: 11px;
}

/* ===========================================================================
   A FAIXA DO CRÉDITO

   Uma moldura só, embaixo dos planos: a escada de preço à esquerda, os
   pacotes à direita e o consumo típico no rodapé da mesma borda. Antes eram
   duas colunas soltas (tabela de um lado, pacotes do outro) e a pessoa tinha
   de costurar as duas com o olho para descobrir quantas peças o pacote dava.
   =========================================================================== */
.banda-cr {
  border: 1px solid var(--line-2); border-radius: var(--raio);
  background: var(--panel); overflow: hidden;
}
.banda-cr__topo {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.15fr);
  gap: 36px; align-items: start;
  padding: 30px 32px; border-bottom: 1px solid var(--line-2);
}
/* A escada: o preço de onde parte, a seta, e onde chega. O primeiro número
   fica riscado porque é o que a pessoa deixa de pagar comprando mais. */
.banda-cr__escada { display: flex; align-items: baseline; gap: 12px; flex-wrap: wrap; }
.banda-cr__de {
  font-family: var(--f-serif); font-size: 26px; line-height: 1;
  color: var(--faint); text-decoration: line-through; text-decoration-thickness: 1px;
}
.banda-cr__seta { font-family: var(--f-mono); font-size: 15px; color: var(--gold-deep); }
.banda-cr__ate {
  font-family: var(--f-serif); font-size: 44px; line-height: 1; color: var(--gold-bright);
}
.banda-cr__pacotes {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 14px;
}
.pac-tile {
  position: relative; display: flex; flex-direction: column; gap: 6px;
  padding: 16px 18px 18px;
  border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--field);
}
.pac-tile--destaque { border-color: var(--gold-deep); background: var(--raised); }
.pac-tile__off {
  position: absolute; top: -9px; right: 14px;
  padding: 2px 9px; border-radius: 99px;
  background: var(--gold); color: #17140E;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .06em;
}
.pac-tile__cr { font-family: var(--f-mono); font-size: 19px; color: var(--ink-hi); }
.pac-tile--destaque .pac-tile__cr { color: var(--gold-bright); }
.pac-tile__p { font-family: var(--f-serif); font-size: 24px; line-height: 1; color: var(--ink-hi); }
.pac-tile__un { font-family: var(--f-mono); font-size: 12px; color: var(--gold); }
.pac-tile .btn { margin-top: 10px; }

/* O consumo típico: uma grade de itens dentro da mesma moldura, separada por
   linhas finas em vez de caixas soltas. */
.banda-cr__baixo { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.banda-cr__item {
  display: flex; flex-direction: column; gap: 4px;
  padding: 15px 20px;
  border-right: 1px solid var(--line); border-bottom: 1px solid var(--line);
}
.banda-cr__item:nth-child(3n) { border-right: 0; }
/* A mesma grade de consumo, mas solta dentro de uma coluna em vez de rente às
   bordas da moldura: duas colunas, com moldura própria e cantos. */
.banda-cr__baixo--solto {
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  border: 1px solid var(--line); border-radius: var(--raio); overflow: hidden;
}
.banda-cr__baixo--solto .banda-cr__item { border-right: 1px solid var(--line); }
.banda-cr__baixo--solto .banda-cr__item:nth-child(3n) { border-right: 1px solid var(--line); }
.banda-cr__baixo--solto .banda-cr__item:nth-child(2n) { border-right: 0; }
.banda-cr__baixo--solto .banda-cr__item:nth-last-child(-n+2):nth-child(2n+1),
.banda-cr__baixo--solto .banda-cr__item:last-child { border-bottom: 0; }
.banda-cr__item b { font-weight: 400; font-size: 13.5px; color: var(--ink); }
.banda-cr__pe { padding: 16px 22px; }

@media (max-width: 900px) {
  .banda-cr__topo { grid-template-columns: minmax(0, 1fr); gap: 24px; padding: 24px 20px; }
  .banda-cr__baixo { grid-template-columns: minmax(0, 1fr); }
  .banda-cr__item { border-right: 0; }
  .banda-cr__ate { font-size: 38px; }
}

/* As duas colunas de crédito: a tabela de consumo é a que carrega texto, e
   por isso é a mais larga. */
.creditos-par {
  display: grid; gap: 26px; align-items: start;
  grid-template-columns: minmax(0, 1.15fr) minmax(0, 1fr);
}
@media (max-width: 900px) { .creditos-par { grid-template-columns: minmax(0, 1fr); } }

/* O DOCUMENTO LONGO — política de privacidade, termos.
   Prosa jurídica continua com medida de leitura: linha de 1140px não se lê,
   se varre. O que usa a largura é a PÁGINA — o índice fica ao lado, preso na
   rolagem, e o texto ao lado dele. Em tela estreita o índice vira um bloco
   antes do texto. */
.documento {
  display: grid; gap: 44px; align-items: start;
  grid-template-columns: 230px minmax(0, 1fr);
}
.documento__indice { position: sticky; top: 28px; }
.documento__indice nav a {
  font-size: 12.5px; line-height: 1.45; color: var(--faint);
  padding-left: 11px; border-left: 1px solid var(--line-2);
  transition: color .2s, border-color .2s;
}
.documento__indice nav a:hover { color: var(--gold); border-left-color: var(--gold-deep); }
.documento__corpo { max-width: 78ch; }
.documento__corpo h3 { scroll-margin-top: 24px; }
@media (max-width: 900px) {
  .documento { grid-template-columns: minmax(0, 1fr); gap: 26px; }
  .documento__indice { position: static; }
  .documento__corpo { max-width: none; }
}

/* ==========================================================================
   APOSTILAS — a vitrine, a página e a estante
   O desenho escolhido: uma apostila em destaque no alto e a lista embaixo,
   na mesma leitura de Minhas peças. A capa é tipográfica — nome, assunto e a
   revisão —, e não uma imagem: vinte títulos não pedem vinte capas.
   ========================================================================== */
.so-leitor { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
.apo-rotulo { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; text-transform: uppercase; color: var(--gold-deep); }
.apo-sobre { font-family: var(--f-mono); font-size: 11px; letter-spacing: .18em; text-transform: uppercase; color: var(--gold-deep); }
.apo-h2 { margin: 0; font-family: var(--f-serif); font-weight: 400; font-size: 40px; line-height: 1.1; color: var(--ink-hi); letter-spacing: -.015em; }
.apo-dek { max-width: 78ch; line-height: 1.6; font-size: 13.5px; margin: 0; }
.apo-form { margin: 0; display: inline-flex; }

.apo-topo { display: flex; align-items: flex-end; justify-content: space-between; gap: 24px; flex-wrap: wrap; }
.apo-plano { display: flex; flex-direction: column; align-items: flex-end; gap: 9px; flex-shrink: 0; }
.apo-plano__chip {
  display: inline-flex; align-items: center; gap: 8px; padding: 9px 14px;
  border: 1px solid var(--gold-edge); border-radius: var(--raio); background: var(--raised);
  font-size: 13px; color: var(--gold-bright);
}
.apo-plano__chip i { width: 1px; height: 13px; background: var(--line-4); }
.apo-plano__chip .mono { font-size: 12px; }

/* ---------------------------------------------------------------- o destaque */
.apo-destaque {
  display: grid; grid-template-columns: 200px minmax(0, 1fr); gap: 28px; margin-top: 26px;
  padding: 24px; border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: linear-gradient(150deg, #16120A 0%, #100E0B 62%);
}
.apo-capa {
  box-sizing: border-box; min-height: 420px; padding: 32px 28px; text-decoration: none;
  display: flex; flex-direction: column; justify-content: space-between; gap: 22px;
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: linear-gradient(160deg, #1C1509 0%, #0C0B09 100%);
  transition: border-color .22s, transform .24s var(--mola);
}
a.apo-capa:hover { border-color: var(--gold-deep); transform: translateY(-2px); }
.apo-capa--media { min-height: 300px; padding: 26px 22px; }
.apo-capa__marca { font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .2em; text-transform: uppercase; color: var(--gold-deep); }
.apo-capa__fio { width: 34px; height: 1px; background: var(--gold-deep); margin-top: 8px; }
.apo-capa__nome { font-family: var(--f-serif); font-size: 44px; line-height: 1.02; color: var(--gold-bright); overflow-wrap: anywhere; }
.apo-capa--media .apo-capa__nome { font-size: 34px; }
.apo-capa__assunto { font-size: 13.5px; line-height: 1.5; color: var(--muted); }
.apo-capa__rev { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; text-transform: uppercase; color: var(--faint); }

.apo-destaque__corpo { display: flex; flex-direction: column; gap: 14px; min-width: 0; }
/* O destaque é uma faixa, não uma página: a capa do tamanho de um livro em
   pé (sem o piso de 420px da capa grande), o texto em duas linhas e o relógio
   no alto, ao lado do título. */
.apo-destaque .apo-capa { min-height: 0; aspect-ratio: 3 / 4; padding: 20px 18px; gap: 12px; align-self: start; }
.apo-destaque .apo-capa--foto { padding: 0; }
.apo-destaque .apo-capa__nome { font-size: 26px; }
.apo-destaque .apo-capa__assunto { font-size: 12px; }
.apo-destaque__cab { display: flex; justify-content: space-between; align-items: flex-start; gap: 14px 24px; flex-wrap: wrap; }
.apo-destaque__cab > .pilha { flex: 1 1 260px; }
.apo-selo {
  align-self: flex-start; padding: 5px 10px; border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: var(--raised); font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .14em;
  text-transform: uppercase; color: var(--gold-bright);
}
.apo-destaque__tit { margin: 0; font-family: var(--f-serif); font-weight: 400; font-size: 27px; line-height: 1.15; color: var(--ink-hi); }
.apo-destaque__txt {
  margin: 0; font-size: 13.5px; line-height: 1.6; color: var(--muted); max-width: 78ch;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.apo-destaque .apo-itens { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: 6px 26px; }
.apo-destaque .apo-preco__final { font-size: 30px; }
.apo-itens { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px 26px; }
.apo-itens--caixa { padding: 18px 22px; border: 1px solid var(--line-2); background: var(--panel); }
.apo-item { display: flex; align-items: flex-start; gap: 10px; font-size: 13px; line-height: 1.5; color: var(--muted); }
.apo-item__v { color: var(--ok); flex-shrink: 0; }
.apo-destaque__pe {
  margin-top: auto; display: flex; align-items: center; gap: 16px 24px; flex-wrap: wrap;
  padding-top: 16px; border-top: 1px solid var(--line-2);
}
.apo-destaque__botoes { display: flex; gap: 10px; margin-left: auto; flex-wrap: wrap; }
.apo-btn-grande { padding: 15px 30px; font-size: 12.5px; }

/* O preço: o cheio riscado, o chip do plano e o número grande. */
.apo-preco { display: flex; flex-direction: column; gap: 4px; }
.apo-preco__linha { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; }
.apo-preco__cheio { font-family: var(--f-mono); font-size: 12px; color: var(--faint-2); text-decoration: line-through; }
.apo-preco__chip {
  padding: 3px 8px; border: 1px solid var(--gold-edge); border-radius: var(--raio); background: var(--raised);
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .1em; color: var(--gold-bright); white-space: nowrap;
}
.apo-preco__final { font-family: var(--f-mono); font-size: 34px; line-height: 1; color: var(--gold-bright); }
.apo-preco__nota { font-size: 12px; color: var(--muted-2); }
.apo-preco__economia { font-size: 12px; color: var(--ok); }

/* ------------------------------------------------------------------ a lista */
.apo-barra { display: flex; align-items: center; gap: 12px; margin-top: 30px; margin-bottom: 14px; flex-wrap: wrap; }
.apo-barra__tit { font-family: var(--f-serif); font-size: 22px; color: var(--ink); flex-shrink: 0; }
.apo-barra__fio { flex: 1 1 40px; height: 1px; background: var(--line); }
/* Presas pela barra: `.entrada` é largura cheia por padrão, e aqui ela
   empurrava o seletor de tema para uma linha só dele. */
.apo-barra .apo-barra__busca { flex: 0 1 300px; width: 300px; min-width: 0; height: 38px; }
.apo-barra .apo-barra__tema { flex: 0 1 200px; width: 200px; min-width: 0; height: 38px; }

.apo-lista { border: 1px solid var(--line); border-radius: var(--raio); overflow: hidden; }
.apo-linha {
  display: grid; grid-template-columns: 56px minmax(0, 1fr) 150px 130px 150px 165px;
  align-items: center; gap: 18px; padding: 16px 20px;
  border-top: 1px solid var(--line); background: var(--panel); transition: background .2s;
}
.apo-linha[hidden] { display: none; }
.apo-linha:first-child { border-top: 0; }
.apo-linha:not(.apo-linha--cab):hover { background: #12100C; }
.apo-linha--cab {
  padding: 12px 20px; background: var(--carbon);
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--faint);
}
.apo-linha--preparo { background: var(--carbon); }
.apo-linha--preparo .apo-linha__nome { color: var(--muted-2); }
.apo-linha--vazia { display: block; padding: 22px 20px; text-align: center; }
.apo-linha--vazia[hidden] { display: none; }
.apo-dir { text-align: right; }

.apo-mini {
  width: 40px; height: 52px; display: flex; align-items: center; justify-content: center;
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: linear-gradient(160deg, #191308 0%, #100E0B 100%);
  font-family: var(--f-serif); font-size: 17px; color: var(--gold-bright);
}
.apo-mini--ok { border-color: var(--ok-line); background: linear-gradient(160deg, #0E1410 0%, #100E0B 100%); color: var(--ok); }
.apo-mini--preparo { border: 1px dashed var(--line-3); background: none; color: var(--faint-2); }
.apo-mini--peq { width: 30px; height: 39px; font-size: 13px; }

.apo-linha__meio { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.apo-linha__titulo { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; }
.apo-linha__nome { font-size: 14.5px; color: var(--ink); text-decoration: none; }
.apo-linha__nome:hover { color: var(--gold-bright); }
.apo-linha__sub { font-size: 12px; color: var(--muted-2); line-height: 1.5; }
.apo-linha__mono { font-family: var(--f-mono); font-size: 11px; color: var(--muted-2); }
.apo-linha__nova { font-family: var(--f-mono); font-size: 10px; color: var(--aviso); }
.apo-linha__preco { display: flex; flex-direction: column; align-items: flex-end; gap: 2px; text-align: right; }
.apo-linha__valor { font-family: var(--f-mono); font-size: 17px; color: var(--gold-bright); }
.apo-linha__gratis { font-size: 12.5px; color: var(--ok); }
.apo-linha__ok { font-size: 12.5px; color: var(--ok); line-height: 1.45; }
.apo-linha__acao { display: flex; justify-content: flex-end; }
.apo-linha__acao .btn { width: 100%; }
.apo-linha__acao .apo-form { width: 100%; }

.apo-tag {
  padding: 3px 8px; border: 1px solid var(--line-3); border-radius: var(--raio);
  font-family: var(--f-mono); font-size: 9px; letter-spacing: .1em; color: var(--faint); white-space: nowrap;
}
.apo-tag--ok { border-color: var(--ok-line); background: var(--ok-bg); color: var(--ok); }
.apo-tag--nova { border-color: var(--aviso-line); background: var(--aviso-bg); color: var(--aviso); }

.btn.btn--ok { color: var(--ok); background: var(--ok-bg); border: 1px solid var(--ok-line); }
.btn.btn--ok:hover { color: #9CCBA7; border-color: var(--ok); filter: none; }

/* -------------------------------------------------------------- a estante */
.apo-estante { border: 1px solid var(--line); border-radius: var(--raio); overflow: hidden; margin-top: 26px; }
.apo-estante__linha {
  display: grid; grid-template-columns: 56px minmax(0, 1fr) 170px auto; align-items: center; gap: 20px;
  padding: 18px 22px; border-top: 1px solid var(--line); background: var(--panel);
}
.apo-estante__linha:first-child { border-top: 0; }
.apo-estante__meio { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.apo-estante__nota { font-size: 12.5px; color: var(--muted); line-height: 1.55; }
.apo-estante__versao { display: flex; flex-direction: column; gap: 4px; }
.apo-estante__versao .mono { font-size: 12px; color: var(--ink); }
.apo-estante__acoes { display: flex; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }

.apo-faltam { display: grid; grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); gap: 14px; }
.apo-falta {
  display: flex; flex-direction: column; gap: 8px; padding: 18px 20px;
  border: 1px solid var(--line-2); background: var(--panel);
}
.apo-falta__nome { font-family: var(--f-serif); font-size: 20px; line-height: 1.2; color: var(--ink-hi); text-decoration: none; }
.apo-falta__nome:hover { color: var(--gold-bright); }
.apo-falta__pe { margin-top: auto; padding-top: 10px; display: flex; align-items: flex-end; justify-content: space-between; gap: 12px; }

/* --------------------------------------------------------------- a página */
.apo-pagina { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 30px; align-items: start; margin-top: 20px; }
.apo-cabeca { display: grid; grid-template-columns: 230px minmax(0, 1fr); gap: 28px; align-items: start; }
.apo-fatos { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 4px; }
.apo-sumario { border: 1px solid var(--line-2); background: var(--panel); }
.apo-sumario__cab {
  display: flex; justify-content: space-between; align-items: baseline; gap: 14px; flex-wrap: wrap;
  padding: 14px 22px; border-bottom: 1px solid var(--line);
}
.apo-cap, .apo-rev {
  display: grid; grid-template-columns: 40px minmax(0, 1fr) auto; gap: 16px; align-items: baseline;
  padding: 15px 22px; border-top: 1px solid var(--line);
}
.apo-sumario__cab + .apo-cap, .apo-sumario__cab + .apo-rev { border-top: 0; }
.apo-rev { align-items: center; }
.apo-cap__n { font-family: var(--f-mono); font-size: 12px; color: var(--gold-deep); }
.apo-cap__t { font-size: 14px; color: var(--ink); }
.apo-cap__d { font-size: 12.5px; color: var(--muted-2); line-height: 1.55; }
.apo-cap__p { font-family: var(--f-mono); font-size: 11px; color: var(--faint); white-space: nowrap; }

.apo-caixa {
  display: flex; flex-direction: column; gap: 16px; padding: 22px;
  border: 1px solid var(--line-2); background: var(--panel);
}
.apo-caixa--ouro { border-color: var(--gold-edge); background: linear-gradient(160deg, #15110A 0%, #0F0D0B 100%); }
.apo-caixa--ok { border-color: var(--ok-line); }
.apo-caixa__cab { display: flex; justify-content: space-between; align-items: center; gap: 12px; flex-wrap: wrap; }
.apo-garantias { display: flex; flex-direction: column; gap: 8px; font-size: 12.5px; color: var(--muted); line-height: 1.5; }
.apo-garantias > span { display: flex; gap: 10px; }
.apo-planos { display: flex; flex-direction: column; }
.apo-planos__linha {
  display: flex; justify-content: space-between; align-items: baseline; gap: 12px;
  padding: 10px 0; border-top: 1px solid var(--line); font-size: 13px; color: var(--muted);
}
.apo-planos__linha:first-child { border-top: 0; }
.apo-planos__linha .mono { color: var(--ink); }
.apo-planos__linha--aqui, .apo-planos__linha--aqui .mono { color: var(--gold-bright); }
.apo-planos__pct { font-family: var(--f-mono); font-size: 11px; color: var(--gold-deep); margin-left: 6px; }
.apo-planos__voce {
  margin-left: 8px; padding: 2px 6px; border: 1px solid var(--gold-edge); border-radius: var(--raio);
  font-family: var(--f-mono); font-size: 9px; letter-spacing: .1em; text-transform: uppercase; color: var(--gold);
}

/* A trilha vendida à parte, no alto da página da trilha. */
.apo-trilha {
  display: grid; grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; gap: 26px;
  margin-top: 22px; padding: 20px 24px;
  border: 1px solid var(--gold-edge); background: linear-gradient(150deg, #16120A 0%, #100E0B 62%);
}
.apo-preco--linha { align-items: flex-end; }
.trilha-cartao__preco { font-family: var(--f-mono); font-size: 12.5px; color: var(--gold-bright); white-space: nowrap; }
.trilha-cartao__preco s { color: var(--faint-2); font-size: 11px; margin-right: 6px; }

/* Até 1360px o tema e a data saem da linha: com eles a coluna do material
   ficava estreita demais para o relógio do prazo caber numa linha só. */
@media (max-width: 1360px) {
  .apo-linha { grid-template-columns: 48px minmax(0, 1fr) 130px 150px; }
  .apo-col-tema, .apo-col-data, .apo-linha--cab > :nth-child(3), .apo-linha--cab > :nth-child(4) { display: none; }
}
@media (max-width: 1180px) {
  .apo-pagina { grid-template-columns: minmax(0, 1fr) 330px; }
}
@media (max-width: 980px) {
  .apo-destaque { grid-template-columns: 160px minmax(0, 1fr); gap: 22px; padding: 20px; }
  .apo-capa { min-height: 260px; }
  .apo-pagina { grid-template-columns: minmax(0, 1fr); }
  .apo-trilha { grid-template-columns: minmax(0, 1fr); gap: 16px; }
  .apo-trilha .apo-preco { align-items: flex-start; }
  .apo-estante__linha { grid-template-columns: 48px minmax(0, 1fr); }
  .apo-estante__versao, .apo-estante__acoes { grid-column: 2; justify-content: flex-start; }
}
@media (max-width: 720px) {
  .apo-h2 { font-size: 32px; }
  .apo-plano { align-items: flex-start; }
  .apo-itens { grid-template-columns: minmax(0, 1fr); }
  .apo-destaque { grid-template-columns: minmax(0, 1fr); gap: 18px; padding: 18px; }
  .apo-destaque__tit { font-size: 23px; }
  .apo-destaque__botoes { margin-left: 0; width: 100%; }
  .apo-destaque__botoes > * { flex: 1 1 auto; }
  .apo-destaque__botoes .apo-form .btn { width: 100%; }
  .apo-linha { grid-template-columns: 40px minmax(0, 1fr); gap: 12px 14px; padding: 14px 16px; }
  .apo-linha--cab { display: none; }
  .apo-linha__preco, .apo-linha__acao { grid-column: 2; align-items: flex-start; text-align: left; justify-content: flex-start; }
  .apo-linha__acao .btn, .apo-linha__acao .apo-form { width: auto; }
  .apo-cabeca { grid-template-columns: minmax(0, 1fr); }
  .apo-capa--media { min-height: 200px; }
  .apo-barra .apo-barra__busca, .apo-barra .apo-barra__tema { flex: 1 1 100%; width: 100%; }
  .apo-cap, .apo-rev { padding: 13px 16px; gap: 12px; }
}
@media (prefers-reduced-motion: reduce) { .apo-capa, .apo-linha { transition: none; } }

/* ==========================================================================
   O DESCONTO DE ASSINANTE no admin — igual na trilha e na apostila.
   As caixas do desconto próprio só valem no modo próprio; nos outros dois
   ficam apagadas, lendo qual opção está marcada, sem JavaScript.
   ========================================================================== */
.desc-bloco { display: flex; flex-direction: column; gap: 14px; }
.desc-bloco__topo { display: grid; grid-template-columns: 210px minmax(0, 1fr); gap: 20px; align-items: start; }
.desc-bloco__topo:not(:has(.desc-bloco__preco)) { grid-template-columns: minmax(0, 1fr); }
.desc-bloco__preco .campo { margin: 0; }
.desc-bloco__escolha { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.desc-bloco__rot {
  font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--muted-2);
  line-height: 1.4; min-height: 15px;
}
.desc-bloco__modos { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.desc-opcao {
  position: relative; display: flex; align-items: flex-start; gap: 10px; cursor: pointer;
  padding: 11px 12px; min-height: 48px; box-sizing: border-box;
  border: 1px solid var(--line-3); border-radius: var(--raio); background: var(--field);
  transition: border-color .18s, background .18s;
}
.desc-opcao:hover { border-color: var(--line-4); }
.desc-opcao input { position: absolute; opacity: 0; pointer-events: none; }
.desc-opcao__marca {
  flex: 0 0 14px; width: 14px; height: 14px; margin-top: 2px; border-radius: 50%;
  border: 1px solid var(--line-4); box-sizing: border-box; transition: border-color .18s, box-shadow .18s;
}
.desc-opcao__texto { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.desc-opcao__texto b { font-size: 12.5px; font-weight: 500; color: var(--ink); line-height: 1.3; }
.desc-opcao__texto small { font-size: 11px; line-height: 1.4; color: var(--faint); }
.desc-opcao:has(input:checked) { border-color: var(--gold-edge); background: rgba(214,178,94,.06); }
.desc-opcao:has(input:checked) .desc-opcao__marca { border-color: #D6B25E; box-shadow: inset 0 0 0 3px var(--field), inset 0 0 0 8px #D6B25E; }
.desc-opcao:has(input:focus-visible) { outline: 2px solid var(--gold-deep); outline-offset: 2px; }

.desc-bloco__tabela { border: 1px solid var(--line-2); }
.desc-bloco__cab, .desc-bloco__linha {
  display: grid; grid-template-columns: minmax(0, 1fr) 130px 150px; gap: 14px; align-items: center; padding: 10px 14px;
}
.desc-bloco__cab {
  background: var(--carbon); border-bottom: 1px solid var(--line);
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--faint);
}
.desc-bloco__linha { border-top: 1px solid var(--line); font-size: 13px; color: var(--ink); }
.desc-bloco__cab + .desc-bloco__linha { border-top: 0; }
.desc-bloco__linha .mono { color: var(--muted); font-size: 12px; }
.desc-bloco__caixa { display: flex; align-items: center; gap: 8px; }
.desc-bloco__caixa .entrada { width: 64px; height: 34px; padding: 0 10px; text-align: right; }
.desc-bloco__nota { margin: 0; font-size: 11.5px; line-height: 1.6; }
/* Sem desconto: a tabela nem aparece. Padrão: aparece só o padrão de cada
   plano. Próprio: aparecem as caixas. Tudo lendo o rádio marcado, sem JS. */
.desc-bloco:has(input[value="nenhum"]:checked) .desc-bloco__tabela,
.desc-bloco:has(input[value="nenhum"]:checked) .desc-bloco__nota { display: none; }
.desc-bloco:has(input[value="padrao"]:checked) .desc-bloco__col-proprio { visibility: hidden; }
@media (max-width: 900px) {
  .desc-bloco__topo { grid-template-columns: minmax(0, 1fr); }
  .desc-bloco__preco { max-width: 260px; }
}
@media (max-width: 640px) {
  .desc-bloco__modos { grid-template-columns: minmax(0, 1fr); }
  .desc-bloco__cab, .desc-bloco__linha { grid-template-columns: minmax(0, 1fr) 70px 100px; gap: 10px; }
}
/* A seta de ordem da lista do admin é <button> dentro de formulário: sem
   isto ela herda o fundo cinza do navegador. */
button.baixinha { background: transparent; cursor: pointer; }
button.baixinha:disabled { opacity: .3; cursor: default; transform: none; }
.desc-bloco__modos .caixinha { margin: 0; }
.desc-bloco__modos .caixinha input { margin: 0; }

/* ==========================================================================
   O PRAZO DE VENDA — a data e a contagem, na trilha e na apostila
   ========================================================================== */
/* A etiqueta é um relógio de verdade: o rótulo que esquenta com o fim
   chegando, a contagem em casas (dias, horas, minutos, segundos) e a data.
   Âmbar quando ainda há dias; vermelho e pulsando nas últimas 24 horas. */
.prazo {
  --pz: var(--aviso); --pz-bg: var(--aviso-bg); --pz-line: var(--aviso-line); --pz-casa: rgba(217, 164, 65, .1);
  display: inline-flex; flex-direction: column; gap: 7px;
  align-self: flex-start; padding: 10px 14px 11px; margin-top: 6px;
  border: 1px solid var(--pz-line); border-left: 3px solid var(--pz); border-radius: var(--raio);
  background: var(--pz-bg); line-height: 1.35;
}
.prazo--urgente {
  --pz: var(--alto); --pz-bg: #1F0F0C; --pz-line: #5A2A22; --pz-casa: rgba(232, 132, 111, .13);
  box-shadow: 0 0 0 1px rgba(232, 132, 111, .08), 0 10px 30px -12px rgba(232, 132, 111, .35);
}
.prazo__topo {
  display: flex; align-items: center; gap: 8px;
  font-family: var(--f-mono); font-size: 10px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase;
  color: var(--pz);
}
.prazo__ponto {
  flex: 0 0 auto; width: 7px; height: 7px; border-radius: 50%; background: var(--pz);
  animation: lb-prazo-pulso 1.6s ease-out infinite;
}
.prazo--urgente .prazo__ponto { animation-duration: 1s; }
@keyframes lb-prazo-pulso {
  0% { box-shadow: 0 0 0 0 var(--pz); opacity: 1; }
  70% { box-shadow: 0 0 0 7px transparent; opacity: .75; }
  100% { box-shadow: 0 0 0 0 transparent; opacity: 1; }
}
.prazo__falta { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.prazo__casa { display: inline-flex; align-items: baseline; gap: 3px; }
.prazo__casa b {
  display: inline-block; min-width: 2ch; padding: 3px 6px; text-align: center;
  border: 1px solid var(--pz-line); border-radius: var(--raio); background: var(--pz-casa);
  font-family: var(--f-mono); font-size: 19px; font-weight: 600; line-height: 1.1;
  font-variant-numeric: tabular-nums; color: var(--ink-hi);
}
.prazo__casa i { font-style: normal; font-family: var(--f-mono); font-size: 10.5px; color: var(--pz); }
.prazo__ate { font-size: 11.5px; color: #C9A24F; }
.prazo--urgente .prazo__ate { color: #D99A8C; }
.prazo--fim { border-left-width: 1px; border-color: var(--alto-line); background: var(--alto-bg); padding: 6px 10px; }
.prazo--fim .prazo__ate { color: #B0736A; }

/* Na caixa do preço (página da apostila) e ao lado do botão da trilha ela
   ocupa a largura toda — mesma medida do botão de compra. */
.apo-caixa .prazo, .trilha-heroi__acoes .prazo { align-self: stretch; }

/* No destaque da vitrine: no alto, à direita do título. */
.prazo--destaque { margin-top: 0; flex: 0 0 auto; }

/* Pequena, dentro da linha da lista e do cartão da trilha: o ponto, a
   contagem sem as caixinhas e a data logo abaixo. */
.prazo--linha, .prazo--cartao {
  display: inline-grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 2px 8px;
  padding: 6px 10px; margin-top: 6px; max-width: 100%;
}
.prazo--linha .prazo__rot, .prazo--cartao .prazo__rot { display: none; }
.prazo--linha .prazo__falta, .prazo--cartao .prazo__falta { gap: 2px 7px; }
.prazo--linha .prazo__casa, .prazo--cartao .prazo__casa { gap: 1px; }
.prazo--linha .prazo__casa b, .prazo--cartao .prazo__casa b {
  min-width: 0; padding: 0; border: 0; background: none; font-size: 13.5px;
}
.prazo--linha .prazo__casa i, .prazo--cartao .prazo__casa i { font-size: 9.5px; }
.prazo--linha .prazo__ate, .prazo--cartao .prazo__ate { grid-column: 2; font-size: 10.5px; }
.prazo--linha.prazo--fim, .prazo--cartao.prazo--fim { display: inline-flex; }
.prazo--cartao { margin-top: 2px; }

@media (prefers-reduced-motion: reduce) { .prazo__ponto { animation: none; } }

/* A trilha e a apostila encerradas, para quem não comprou: à vista, sem clique. */
.trilha-cartao--encerrada { cursor: pointer; opacity: .62; }
.trilha-cartao--encerrada:hover { transform: none; border-color: var(--line-3); opacity: .8; }
.apo-linha--encerrada { opacity: .7; }
.apo-linha--encerrada:hover { background: var(--carbon); }
.btn[aria-disabled="true"] { pointer-events: none; opacity: .6; }

/* ==========================================================================
   O CADASTRO DE APOSTILA — o formulário e, ao lado, como ela vai aparecer
   A pré-visualização é a marcação da vitrine em escala (zoom), e não um
   desenho à parte: muda o CSS da vitrine, muda a prévia junto.
   ========================================================================== */
.modal__caixa--extra { max-width: 1420px; }
.apo-cad { display: grid; grid-template-columns: minmax(0, 1fr) 500px; gap: 30px; align-items: start; }
.apo-cad [hidden] { display: none !important; }
.apo-cad__form { min-width: 0; }
.apo-cad__form > .secao-form:first-child { border-top: 0; padding-top: 0; margin-top: 0; }
.apo-cad__marcar { display: flex; align-items: flex-start; padding-top: 27px; }
/* A prévia fica PARADA ao lado enquanto o formulário rola — e rola sozinha,
   quando é mais alta que a janela. Sem isso, preencher o preço lá embaixo
   deixava a prévia do preço fora da vista. */
.apo-cad__previa {
  position: sticky; top: 0; min-width: 0;
  max-height: calc(100vh - 290px); overflow-y: auto; overscroll-behavior: contain;
  scrollbar-width: thin; scrollbar-color: var(--line-4) transparent;
}

.apo-previa {
  display: flex; flex-direction: column; gap: 18px; padding: 18px;
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: linear-gradient(160deg, #12100A 0%, var(--carbon) 70%);
}
.apo-previa__cab { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.apo-previa__situacao {
  padding: 3px 9px; border: 1px solid var(--line-3); border-radius: var(--raio);
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--muted);
}
.apo-previa__situacao[data-estado="publicada"] { border-color: var(--ok-line); background: var(--ok-bg); color: var(--ok); }
.apo-previa__situacao[data-estado="em_preparo"] { border-color: var(--aviso-line); background: var(--aviso-bg); color: var(--aviso); }
.apo-previa__aviso { margin: -8px 0 0; font-size: 11.5px; line-height: 1.55; color: var(--faint); }
.apo-previa__bloco { display: flex; flex-direction: column; gap: 8px; }
.apo-previa__nome {
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--faint);
}
.apo-previa__palco {
  --k: .46;
  overflow: hidden; border: 1px solid var(--line-2); border-radius: var(--raio);
  background: var(--panel); pointer-events: none;
}
.apo-previa__tela { zoom: var(--k); }
.apo-previa__tela .apo-destaque { border: 0; }
.apo-previa__tela .apo-lista { border: 0; }
.apo-previa__legenda { font-size: 11px; line-height: 1.5; color: var(--faint); }
.apo-previa__planos { padding: 4px 14px; border: 1px solid var(--line-2); background: var(--panel); }
.apo-previa__sumario { border: 1px solid var(--line-2); background: var(--panel); max-height: 260px; overflow: hidden; }
.apo-previa__sumario .apo-cap { padding: 11px 14px; }
.apo-previa__sumario .apo-cap:first-child { border-top: 0; }
.apo-previa__sumario .apo-cap__t { font-size: 13px; }
.apo-previa__sumario .apo-cap__d { font-size: 11.5px; }
.apo-previa__mais { display: block; padding: 9px 14px; font-size: 11.5px; border-top: 1px solid var(--line); }

@media (max-width: 1180px) {
  .apo-cad { grid-template-columns: minmax(0, 1fr); }
  .apo-cad__previa { position: static; order: -1; max-height: none; overflow: visible; }
}
@media (max-width: 640px) {
  .apo-previa { padding: 14px; }
}

/* ==========================================================================
   A CAPA E O BANNER DA APOSTILA — as imagens enviadas no cadastro
   Sem imagem, nada disto entra em jogo: a capa de letras e o destaque sem
   faixa continuam exatamente como eram.
   ========================================================================== */

/* A capa em foto: a imagem ocupa a capa inteira, em pé, na proporção de livro. */
.apo-capa--foto {
  position: relative; padding: 0; min-height: 0; overflow: hidden;
  aspect-ratio: 3 / 4; background: #0C0B09;
}
.apo-capa--foto > :not(.apo-capa__foto) { display: none !important; }
.apo-capa__foto { display: block; width: 100%; height: 100%; object-fit: cover; }

/* A capa pequenininha da lista e da estante. */
.apo-mini { overflow: hidden; }
.apo-mini--foto { padding: 0; background: #0C0B09; }
.apo-mini--foto > span { display: none; }
.apo-mini img { display: block; width: 100%; height: 100%; object-fit: cover; }
.apo-mini--foto.apo-mini--preparo img { opacity: .55; filter: grayscale(.5); }

/* O banner no destaque da vitrine: a faixa de ponta a ponta no alto, e a capa
   subindo por cima dela — o livro apoiado na vitrine. */
/* justify-self: item de grade com aspect-ratio não estica sozinho — sem isto
   a faixa encolhia para caber na altura máxima e deixava um vão à direita. */
.apo-destaque__banner {
  grid-column: 1 / -1; justify-self: stretch; margin: -24px -24px 0;
  aspect-ratio: 40 / 11; max-height: 170px; min-height: 96px; overflow: hidden;
  border-bottom: 1px solid var(--gold-edge); border-radius: var(--raio) var(--raio) 0 0;
  background: #0C0B09;
}
.apo-destaque__banner img { display: block; width: 100%; height: 100%; object-fit: cover; }
.apo-destaque--banner > .apo-capa {
  position: relative; z-index: 1; margin-top: -96px;
  box-shadow: 0 22px 48px rgba(0, 0, 0, .55);
}

/* No cadastro: o aviso da imagem recusada, logo abaixo da prévia do destaque. */
.apo-previa__alerta {
  margin: 0; padding: 8px 10px; border: 1px solid var(--alto-line); border-radius: var(--raio);
  background: var(--alto-bg); font-size: 11.5px; line-height: 1.5; color: #D08A7E;
}
.apo-cad__imagens .caixinha { align-self: flex-start; }

@media (max-width: 980px) {
  .apo-destaque__banner { margin: -20px -20px 0; }
  .apo-destaque--banner > .apo-capa { margin-top: -64px; }
}
@media (max-width: 720px) {
  /* No celular a faixa tem pouco mais de cem pixels: a capa sobe só um pouco,
     para não cobrir o banner inteiro. */
  /* Em uma coluna a capa teria a largura toda — e três vezes a altura da
     tela. Fica do tamanho de um livro pequeno, à esquerda. */
  .apo-destaque__banner { margin: -18px -18px 0; }
  /* A capa pequena à esquerda do selo e do título; o relógio, o texto, os
     itens e o preço embaixo, na largura toda. O corpo e a cabeça "somem" da
     grade (display: contents) para os filhos se encaixarem nela. */
  .apo-destaque { grid-template-columns: 100px minmax(0, 1fr); gap: 14px 16px; }
  .apo-destaque__corpo, .apo-destaque__cab { display: contents; }
  .apo-destaque__cab > .pilha { grid-column: 2; align-self: center; }
  .apo-destaque__txt, .apo-destaque .apo-itens, .apo-destaque__pe, .prazo--destaque { grid-column: 1 / -1; }
  .apo-destaque__pe { margin-top: 0; }
  .apo-destaque .apo-capa { width: 100px; grid-column: 1; justify-self: start; padding: 10px 9px; gap: 6px; }
  .apo-destaque .apo-capa--foto { padding: 0; }
  .apo-destaque .apo-capa__nome { font-size: 14px; }
  .apo-destaque .apo-capa__marca { font-size: 6.5px; }
  .apo-destaque .apo-capa__assunto, .apo-destaque .apo-capa__rev { display: none; }
  .apo-destaque--banner > .apo-capa { margin-top: -44px; }
  .apo-destaque--banner .apo-destaque__cab > .pilha { align-self: end; }
  .apo-destaque .apo-selo { font-size: 8.5px; padding: 4px 8px; }
  .prazo--destaque { align-self: stretch; }
}

/* ==========================================================================
   A CABEÇA DA PÁGINA DA APOSTILA (e da trilha) — banner, capa e título
   O banner de ponta a ponta, com o escuro subindo de baixo para o texto ler
   bem sobre qualquer imagem; a capa sobe sobre ele. Sem banner, é o mesmo
   cartão sem a faixa.
   ========================================================================== */
.apo-heroi {
  position: relative; margin-top: 18px; overflow: hidden;
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: linear-gradient(150deg, #16120A 0%, #100E0B 62%);
}
.apo-heroi__banner { position: relative; height: clamp(150px, 21vw, 300px); background: #0C0B09; }
.apo-heroi__banner img { display: block; width: 100%; height: 100%; object-fit: cover; }
.apo-heroi__banner::after {
  content: ''; position: absolute; inset: 0; pointer-events: none;
  background: linear-gradient(180deg, rgba(16,14,11,0) 38%, rgba(16,14,11,.55) 72%, #120F0B 100%);
}
.apo-heroi__corpo {
  position: relative; display: grid; grid-template-columns: 200px minmax(0, 1fr);
  gap: 30px; align-items: end; padding: 26px 32px 30px;
}
.apo-heroi .apo-capa { aspect-ratio: 3 / 4; min-height: 0; padding: 22px 18px; }
.apo-heroi .apo-capa--foto { padding: 0; }
.apo-heroi .apo-capa__nome { font-size: 27px; }
.apo-heroi--banner .apo-heroi__corpo > .apo-capa {
  position: relative; z-index: 1; margin-top: -128px;
  box-shadow: 0 24px 50px rgba(0, 0, 0, .6);
}
.apo-heroi__info { display: flex; flex-direction: column; gap: 10px; min-width: 0; padding-bottom: 4px; }
.apo-heroi__tit {
  margin: 0; font-family: var(--f-serif); font-weight: 400; font-size: clamp(28px, 3.2vw, 42px);
  line-height: 1.08; color: var(--ink-hi); overflow-wrap: anywhere;
}
.apo-heroi__sub { margin: 0; font-size: 15px; line-height: 1.55; color: var(--muted); max-width: 70ch; }
.apo-pagina__texto { margin: 0; font-size: 14.5px; line-height: 1.75; color: #CFC8BA; max-width: 78ch; }

/* O PDF já enviado, no cadastro, e a coluna do PDF na lista do admin. */
.apo-cad__pdf {
  display: flex; align-items: center; gap: 14px; padding: 12px 14px;
  border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--field);
}
.apo-cad__pdf b { font-size: 13px; font-weight: 500; color: var(--ink); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.apo-cad__pdf .btn { margin-left: auto; flex-shrink: 0; }
.apo-cad__pdf-ico {
  flex: 0 0 38px; height: 46px; display: grid; place-items: center; border-radius: 3px;
  border: 1px solid var(--alto-line); background: var(--alto-bg);
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .08em; color: #D08A7E;
}
.pc-tab__pdf { color: var(--ink); text-decoration: none; font-size: 13px; }
.pc-tab__pdf:hover { color: var(--gold-bright); }

@media (max-width: 720px) {
  .apo-heroi__corpo { grid-template-columns: minmax(0, 1fr); gap: 18px; padding: 20px 18px 22px; align-items: start; }
  .apo-heroi .apo-capa { width: min(100%, 170px); justify-self: start; }
  .apo-heroi--banner .apo-heroi__corpo > .apo-capa { margin-top: -96px; }
}

/* A cabeça da página da trilha: o banner (ou a capa) atrás do título. */
.trilha-heroi {
  position: relative; margin-top: 18px; overflow: hidden; isolation: isolate;
  border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: linear-gradient(150deg, #16120A 0%, #100E0B 62%);
}
.trilha-heroi__fundo { position: absolute; inset: 0; z-index: -1; }
.trilha-heroi__fundo img { display: block; width: 100%; height: 100%; object-fit: cover; }
.trilha-heroi__fundo::after {
  content: ''; position: absolute; inset: 0;
  background: linear-gradient(90deg, rgba(14,12,9,.96) 0%, rgba(14,12,9,.82) 42%, rgba(14,12,9,.35) 100%),
              linear-gradient(0deg, rgba(14,12,9,.7) 0%, rgba(14,12,9,0) 55%);
}
.trilha-heroi__corpo {
  display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; flex-wrap: wrap;
  padding: 34px 36px; min-height: 150px;
}
.trilha-heroi--imagem .trilha-heroi__corpo { min-height: clamp(220px, 24vw, 320px); }
.trilha-heroi__texto { display: flex; flex-direction: column; gap: 10px; min-width: 0; max-width: 760px; }
.trilha-heroi__tit {
  margin: 0; font-family: var(--f-serif); font-weight: 400; font-size: clamp(30px, 3.4vw, 46px);
  line-height: 1.06; color: var(--ink-hi); overflow-wrap: anywhere;
}
.trilha-heroi__sub { margin: 0; font-size: 15px; line-height: 1.6; color: #CFC8BA; max-width: 62ch; }
.trilha-heroi__acoes { display: flex; flex-direction: column; align-items: flex-end; gap: 10px; }
@media (max-width: 720px) {
  .trilha-heroi__corpo { padding: 24px 20px; flex-direction: column; align-items: stretch; }
  .trilha-heroi__acoes { align-items: stretch; }
  .trilha-heroi__acoes .btn { width: 100%; }
  .trilha-heroi__fundo::after {
    background: linear-gradient(0deg, rgba(14,12,9,.97) 0%, rgba(14,12,9,.82) 55%, rgba(14,12,9,.45) 100%);
  }
}

/* A ficha do escritório no admin: dar apostila ou trilha de presente. */
.presente { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.presente__campo { flex: 1 1 360px; min-width: 0; }
.presente__lista { display: flex; flex-direction: column; border: 1px solid var(--line); }
.presente__linha { display: flex; align-items: center; gap: 14px; padding: 12px 16px; border-top: 1px solid var(--line); }
.presente__linha:first-child { border-top: 0; }

/* ==========================================================================
   RODAPÉ E CONTATOS no admin — listas que crescem e a prévia do rodapé
   ========================================================================== */
.rodape-adm__grade { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 0 34px; }
.rep { display: flex; flex-direction: column; gap: 10px; margin-top: 12px; }
.rep__lista { display: flex; flex-direction: column; gap: 8px; }
.rep__linha { display: grid; grid-template-columns: 150px minmax(0, 1fr) 36px; gap: 8px; align-items: center; }
.rep__linha .entrada { height: 42px; }
.rep__tirar {
  width: 36px; height: 42px; border: 1px solid var(--line-3); border-radius: var(--raio);
  background: transparent; color: var(--faint); font-size: 18px; cursor: pointer; transition: color .18s, border-color .18s;
}
.rep__tirar:hover { color: var(--alto); border-color: var(--alto-line); }
.rep__mais { align-self: flex-start; }
.rodape-adm__previa { margin-top: 40px; padding-top: 24px; border-top: 1px solid var(--line); }
.rodape-adm__tela { border: 1px solid var(--line-2); border-radius: var(--raio); overflow: hidden; background: var(--bg, #0A0907); }
.rodape-adm__tela .rodape { margin-top: 0; }
.rodape-adm__tela .faixa { padding-inline: 28px; }
@media (max-width: 980px) {
  .rodape-adm__grade { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 560px) {
  .rep__linha { grid-template-columns: minmax(0, 1fr) 36px; }
  .rep__linha > :nth-child(2) { grid-column: 1; grid-row: 2; }
  .rep__linha > .rep__tirar { grid-row: 1 / span 2; grid-column: 2; height: 100%; }
}
.rodape-adm__grade > .secao-form { margin-top: 0; padding-top: 24px; border-top: 1px solid var(--line); }
.rodape-adm__grade > .secao-form:nth-child(-n+2) { padding-top: 0; border-top: 0; }
@media (max-width: 980px) {
  .rodape-adm__grade > .secao-form:nth-child(2) { padding-top: 24px; border-top: 1px solid var(--line); }
}

/* ==========================================================================
   O SITE — a home e as vitrines públicas (apostilas, cursos, lives)
   ========================================================================== */
.site-heroi { padding-top: 84px; padding-bottom: 72px; }
.site-secao { padding-top: 84px; }
.site-selos { display: flex; gap: 10px 22px; flex-wrap: wrap; }
.site-selos span { position: relative; padding-left: 16px; font-size: 12.5px; color: var(--faint); }
.site-selos span::before { content: ''; position: absolute; left: 0; top: 7px; width: 6px; height: 6px; border-radius: 50%; background: var(--gold-deep); }
.site-veredito__url { font-size: 11px; color: var(--faint); margin-left: 10px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.site-numeros {
  display: grid; grid-template-columns: repeat(4, minmax(0, 1fr));
  border-top: 1px solid var(--line-2); border-bottom: 1px solid var(--line-2);
}
.site-numeros > div { padding: 26px 28px; border-left: 1px solid var(--line); }
.site-numeros > div:first-child { padding-left: 0; border-left: 0; }

/* A faixa da live, colada no topo: ao vivo em vermelho, agendada em ouro. */
.site-faixa-live {
  display: flex; align-items: center; gap: 12px 16px; flex-wrap: wrap;
  padding: 12px max(var(--respiro), calc((100% - var(--largura)) / 2));
  border-bottom: 1px solid var(--gold-edge); background: linear-gradient(90deg, #17120A, #0F0D0A);
  font-size: 13px; color: var(--muted); text-decoration: none;
}
.site-faixa-live b { font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .14em; font-weight: 400; color: var(--gold-bright); }
.site-faixa-live__tit { color: var(--ink); }
.site-faixa-live__quando { color: var(--faint); }
.site-faixa-live__acao { margin-left: auto; color: var(--gold-bright); white-space: nowrap; }
.site-faixa-live--ar { border-bottom-color: rgba(214, 84, 70, .5); background: linear-gradient(90deg, #1E0E0B, #0F0D0A); }
.site-faixa-live--ar b { color: #F0A095; }
.site-faixa-live__ponto { width: 9px; height: 9px; border-radius: 50%; background: #E0584A; box-shadow: 0 0 0 0 rgba(224, 88, 74, .6); animation: lb-pulso 1.6s infinite; }
@keyframes lb-pulso { 0% { box-shadow: 0 0 0 0 rgba(224, 88, 74, .6); } 70% { box-shadow: 0 0 0 9px rgba(224, 88, 74, 0); } 100% { box-shadow: 0 0 0 0 rgba(224, 88, 74, 0); } }

/* Os seis módulos: cartões que levam para a página de cada coisa. */
.site-modulos { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; background: var(--line); border: 1px solid var(--line); }
.site-modulo {
  display: flex; flex-direction: column; gap: 12px; padding: 30px 30px 26px; min-height: 250px;
  background: var(--bg, #0A0907); text-decoration: none; transition: background .2s;
}
.site-modulo:hover { background: #100E0A; }
.site-modulo h3 { font-size: 25px; color: var(--ink-hi); }
.site-modulo p { margin: 0; font-size: 13.5px; line-height: 1.65; color: var(--muted); }
.site-modulo__acao { margin-top: auto; font-size: 12px; letter-spacing: .06em; text-transform: uppercase; color: var(--gold); }

/* O cabeçalho de cada vitrine: título à esquerda, "ver todos" à direita. */
.site-cab { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px 30px; flex-wrap: wrap; margin-bottom: 26px; }
.site-cab__txt { margin: 0; font-size: 14.5px; line-height: 1.65; color: var(--muted); max-width: 70ch; }

/* O cartão da apostila. */
.site-grade-apo { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 20px; }
.site-apo {
  display: flex; flex-direction: column; min-width: 0; overflow: hidden;
  border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--panel);
  transition: border-color .2s, transform .25s var(--mola, ease);
}
.site-apo:hover { border-color: var(--gold-edge); transform: translateY(-3px); }
.site-apo--destaque { border-color: var(--gold-edge); box-shadow: 0 0 0 1px rgba(214, 178, 94, .12), 0 20px 40px rgba(0, 0, 0, .35); }
.site-apo__capa { position: relative; aspect-ratio: 3 / 4; overflow: hidden; background: linear-gradient(160deg, #1C1509 0%, #0C0B09 100%); }
.site-apo__capa img { display: block; width: 100%; height: 100%; object-fit: cover; }
.site-apo--breve .site-apo__capa img { opacity: .55; filter: grayscale(.4); }
.site-apo__letras { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: space-between; padding: 22px 20px; }
.site-apo__nome { font-family: var(--f-serif); font-size: 28px; line-height: 1.04; color: var(--gold-bright); overflow-wrap: anywhere; }
.site-apo__selo {
  position: absolute; left: 12px; top: 12px; padding: 5px 9px; border-radius: var(--raio);
  border: 1px solid var(--gold-edge); background: rgba(14, 12, 9, .88);
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--gold-bright);
}
.site-apo--breve .site-apo__selo { color: var(--muted); border-color: var(--line-3); }
.site-apo__corpo { display: flex; flex-direction: column; gap: 7px; flex: 1; padding: 18px 18px 20px; }
.site-apo__tema { font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--gold-deep); }
.site-apo__tit { font-size: 21px; line-height: 1.15; color: var(--ink-hi); }
.site-apo__sub { margin: 0; font-size: 12.5px; line-height: 1.55; color: var(--muted-2); }
.site-apo__fatos { font-size: 11.5px; color: var(--faint); }
.site-apo__pe { margin-top: auto; padding-top: 12px; display: flex; align-items: flex-end; justify-content: space-between; gap: 10px; border-top: 1px solid var(--line); }
.site-apo__preco { font-family: var(--f-mono); font-size: 18px; color: var(--gold-bright); }
.site-apo__assina { font-size: 11.5px; line-height: 1.45; color: var(--ok); }
.site-apo__breve { font-size: 12px; color: var(--faint); }
.site-apo__prazo {
  flex-shrink: 0; padding: 3px 7px; border: 1px solid var(--aviso-line); border-radius: var(--raio);
  background: var(--aviso-bg); font-size: 10.5px; color: var(--aviso); white-space: nowrap;
}

/* O cartão da trilha: a capa é deitada. */
.site-grade-trilha { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 20px; }
.site-trilha {
  display: flex; flex-direction: column; min-width: 0; overflow: hidden;
  border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--panel);
  transition: border-color .2s, transform .25s var(--mola, ease);
}
.site-trilha:hover { border-color: var(--gold-edge); transform: translateY(-3px); }
.site-trilha__capa { position: relative; aspect-ratio: 16 / 9; overflow: hidden; background: linear-gradient(150deg, #16120A 0%, #100E0B 62%); display: grid; place-items: center; }
.site-trilha__capa img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.site-trilha__corpo { display: flex; flex-direction: column; gap: 7px; flex: 1; padding: 18px 20px 20px; }
.site-trilha__tit { font-size: 23px; line-height: 1.15; color: var(--ink-hi); }

/* Os cartões são links inteiros: sem sublinhado, com foco visível. */
a.site-apo, a.site-trilha, a.site-live { color: inherit; text-decoration: none; }
a.site-apo:focus-visible, a.site-trilha:focus-visible, a.site-live:focus-visible { outline: 2px solid var(--gold); outline-offset: 3px; }
a.site-live { transition: border-color .2s, background .2s; }
a.site-live:hover { border-color: var(--gold-edge); background: #13100B; }

/* A live agendada: a data em bloco, o título e a capa. */
.site-lista-live { display: flex; flex-direction: column; gap: 12px; }
.site-live {
  display: grid; grid-template-columns: 74px minmax(0, 1fr) auto; gap: 20px; align-items: center;
  padding: 16px 18px; border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--panel);
}
.site-live__data {
  display: flex; flex-direction: column; align-items: center; justify-content: center; height: 74px;
  border: 1px solid var(--gold-edge); border-radius: var(--raio); background: var(--raised);
}
.site-live__data b { font-family: var(--f-serif); font-weight: 400; font-size: 30px; line-height: 1; color: var(--gold-bright); }
.site-live__data span { font-family: var(--f-mono); font-size: 10px; letter-spacing: .14em; color: var(--gold-deep); }
.site-live__corpo { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.site-live__quando { font-size: 12px; color: var(--aviso); }
.site-live__tit { font-size: 21px; line-height: 1.2; color: var(--ink-hi); }
.site-live__capa { width: 160px; aspect-ratio: 16 / 9; overflow: hidden; border-radius: var(--raio); border: 1px solid var(--line-2); }
.site-live__capa img { display: block; width: 100%; height: 100%; object-fit: cover; }

.site-consumo { display: grid; grid-template-columns: 1.25fr 1fr; gap: 28px; align-items: start; }
.site-fecho { display: flex; align-items: center; justify-content: space-between; gap: 32px 48px; flex-wrap: wrap; padding: 56px; }
@media (max-width: 640px) {
  /* A tabela do consumo vira lista: o nome em cima, a regra e o custo embaixo.
     Três colunas não cabem no celular sem rolar de lado. */
  .site-consumo .rolagem { overflow: visible; }
  .site-consumo__tab, .site-consumo__tab tbody { display: block; width: 100%; }
  .site-consumo__tab thead { display: none; }
  .site-consumo__tab tr {
    display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 5px 12px; align-items: baseline;
    padding: 14px 16px; border-bottom: 1px solid var(--line); background: var(--carbon);
  }
  .site-consumo__tab tr:last-child { border-bottom: 0; }
  .site-consumo__tab td { display: block; padding: 0 !important; border: 0 !important; background: none !important; text-align: left !important; white-space: normal; }
  .site-consumo__tab td:first-child { grid-column: 1 / -1; font-size: 14px; color: var(--ink); }
  .site-consumo__tab td:nth-child(2) { font-size: 11.5px; }
  .site-consumo__tab td:nth-child(3) { text-align: right !important; font-size: 12.5px; white-space: nowrap; }
}

@media (max-width: 1100px) {
  .site-grade-apo { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .site-modulos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 860px) {
  .site-heroi { padding-top: 48px; padding-bottom: 48px; }
  .site-secao { padding-top: 60px; }
  .site-numeros { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .site-numeros > div { padding: 20px 18px; border-left: 0; border-top: 1px solid var(--line); }
  .site-numeros > div:nth-child(-n+2) { border-top: 0; }
  .site-numeros > div:nth-child(odd) { padding-left: 0; border-right: 1px solid var(--line); }
  .site-grade-apo { gap: 14px; }
  .site-grade-trilha { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; }
  .site-consumo { grid-template-columns: minmax(0, 1fr); }
  .site-fecho { padding: 32px 22px; }
  .site-faixa-live { padding-inline: 20px; }
  .site-faixa-live__acao { margin-left: 0; }
}
@media (min-width: 480px) and (max-width: 860px) {
  /* Os três números do veredito cabem lado a lado no tablet. */
  .site-veredito__nums.blocos { grid-template-columns: repeat(3, minmax(0, 1fr)) !important; }
}
@media (max-width: 640px) {
  .site-grade-apo { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .site-grade-trilha { grid-template-columns: minmax(0, 1fr); }
  .site-modulos { grid-template-columns: minmax(0, 1fr); }
  .site-modulo { min-height: 0; padding: 24px 22px; }
  .site-live { grid-template-columns: 60px minmax(0, 1fr); gap: 14px; }
  .site-live__data { height: 60px; }
  .site-live__data b { font-size: 24px; }
  .site-live__capa { display: none; }
  .site-apo__corpo { padding: 14px 14px 16px; }
  .site-apo__tit { font-size: 18px; }
  .site-apo__nome { font-size: 21px; }
  .site-veredito .pilha[style*="padding:30px"] { padding: 22px 18px 24px !important; }
}
@media (max-width: 560px) {
  /* No celular a apostila deita: capa pequena à esquerda, texto à direita.
     Uma capa 3:4 na largura toda passaria de meia tela por cartão. */
  .site-grade-apo { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .site-apo { display: grid; grid-template-columns: 100px minmax(0, 1fr); align-items: start; padding: 12px 0 0 12px; }
  .site-apo:hover { transform: none; }
  /* A capa fica em pé, inteira, como um livro na estante: sem cortar. */
  .site-apo__capa { aspect-ratio: 3 / 4; border-radius: 3px; border: 1px solid var(--line-2); }
  .site-apo__corpo { align-self: stretch; }
  .site-apo__letras { padding: 12px 10px; }
  .site-apo__letras .apo-capa__marca { font-size: 7px; }
  .site-apo__nome { font-size: 16px; }
  .site-apo__selo { left: 5px; right: 5px; top: auto; bottom: 5px; padding: 3px 5px; font-size: 7.5px; text-align: center; }
  .site-apo__corpo { padding: 0 14px 14px; gap: 5px; }
  .site-apo__tit { font-size: 17px; }
  .site-apo__sub { font-size: 12px; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
  .site-apo__pe { padding-top: 9px; flex-wrap: wrap; }
  .site-apo__preco { font-size: 16px; }
}
/* O herói do Aprender: título à esquerda, as capas em leque à direita. */
.site-heroi__grade { display: grid; grid-template-columns: minmax(0, 1fr) 400px; gap: 40px 56px; align-items: center; }
.site-heroi__grade--so { grid-template-columns: minmax(0, 1fr); }
.site-leque { position: relative; height: 380px; }
.site-leque__capa {
  position: absolute; top: 50%; left: 50%; width: 200px; aspect-ratio: 3 / 4; object-fit: cover;
  border: 1px solid var(--line-3); border-radius: 4px; box-shadow: 0 24px 50px rgba(0, 0, 0, .55);
  transform: translate(-50%, -50%);
}
.site-leque--2 .site-leque__capa { transform: translate(calc(-50% + (var(--i) * 2 - 1) * 58px), -50%) rotate(calc((var(--i) * 2 - 1) * 6deg)); }
.site-leque--3 .site-leque__capa { transform: translate(calc(-50% + (var(--i) - 1) * 92px), -50%) rotate(calc((var(--i) - 1) * 8deg)); }
.site-leque--3 .site-leque__capa:nth-child(2) { z-index: 2; transform: translate(-50%, -54%) scale(1.06); }
@media (max-width: 1100px) {
  .site-heroi__grade { grid-template-columns: minmax(0, 1fr) 300px; }
  .site-leque { height: 300px; }
  .site-leque__capa { width: 150px; }
  .site-leque--3 .site-leque__capa { transform: translate(calc(-50% + (var(--i) - 1) * 66px), -50%) rotate(calc((var(--i) - 1) * 8deg)); }
}
@media (max-width: 860px) {
  .site-heroi__grade { grid-template-columns: minmax(0, 1fr); }
  .site-leque { display: none; }
}
/* A próxima live, em destaque no herói da página de lives. */
.site-proxima {
  display: flex; flex-direction: column; overflow: hidden; text-decoration: none; color: inherit;
  border: 1px solid var(--gold-edge); border-radius: var(--raio); background: linear-gradient(160deg, #19140B, #0E0C09);
  box-shadow: 0 24px 50px rgba(0, 0, 0, .45); transition: transform .25s var(--mola, ease);
}
.site-proxima:hover { transform: translateY(-3px); }
.site-proxima__capa { display: block; aspect-ratio: 16 / 9; overflow: hidden; border-bottom: 1px solid var(--line-2); }
.site-proxima__capa img { display: block; width: 100%; height: 100%; object-fit: cover; }
.site-proxima__corpo { display: flex; flex-direction: column; gap: 14px; padding: 22px 24px 24px; }
.site-proxima__rot { display: inline-flex; align-items: center; gap: 8px; font-family: var(--f-mono); font-size: 10px; letter-spacing: .16em; text-transform: uppercase; color: var(--gold-bright); }
.site-proxima__ponto { width: 7px; height: 7px; border-radius: 50%; background: var(--gold); box-shadow: 0 0 0 4px rgba(214, 178, 94, .15); }
.site-proxima__tit { font-family: var(--f-serif); font-size: 25px; line-height: 1.2; color: var(--ink-hi); }
.site-proxima__quando { display: flex; align-items: center; gap: 14px; padding-top: 14px; border-top: 1px solid var(--line-2); font-size: 13px; line-height: 1.45; color: var(--ink); }
.site-proxima__quando b { font-family: var(--f-serif); font-weight: 400; font-size: 40px; line-height: 1; color: var(--gold-bright); }
.site-proxima__quando small { font-size: 12px; color: var(--aviso); }
/* Três passos: ficam lado a lado até o celular. */
.site-passos.site-passos--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
@media (max-width: 860px) {
  .site-proxima { display: none; }
}
.site-passos { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; background: var(--line); border: 1px solid var(--line); }
.site-passo { display: flex; flex-direction: column; gap: 8px; padding: 24px 24px 26px; background: var(--bg, #0A0907); }
.site-passo b { font-size: 15px; font-weight: 500; color: var(--ink); }
.site-passo p { margin: 0; font-size: 13px; line-height: 1.6; color: var(--muted); }
.site-passo__n {
  width: 30px; height: 30px; display: grid; place-items: center; border-radius: 50%;
  border: 1px solid var(--gold-edge); font-family: var(--f-mono); font-size: 12px; color: var(--gold-bright);
}
.site-aovivo {
  display: flex; align-items: center; gap: 18px; flex-wrap: wrap; padding: 22px 26px; text-decoration: none;
  border: 1px solid rgba(214, 84, 70, .5); border-radius: var(--raio); background: linear-gradient(90deg, #1E0E0B, #0F0D0A);
}
.site-aovivo b { font-family: var(--f-mono); font-size: 11px; letter-spacing: .14em; font-weight: 400; color: #F0A095; }
.site-aovivo__tit { font-family: var(--f-serif); font-size: 26px; line-height: 1.15; color: var(--ink-hi); }
.site-aovivo .btn { margin-left: auto; }
@media (max-width: 860px) {
  .site-passos { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .site-passos.site-passos--3 { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 520px) {
  .site-passos { grid-template-columns: minmax(0, 1fr); }
  .site-aovivo .btn { margin-left: 0; width: 100%; }
}

/* ==================================================================
   TELAS DE ACESSO EM PASSOS — entrar, criar conta, recuperar a senha
   ================================================================== */
.acesso__caixa { max-width: 468px; }
.acesso__marca { display: flex; justify-content: center; margin-bottom: 26px; }
.acesso__marca .marca__img { height: 68px; width: auto; }
.acesso__cab { text-align: center; margin-bottom: 24px; }
.acesso__cab .titulo { margin-bottom: 8px; }
.acesso__cab .texto { margin: 0 auto; max-width: 40ch; line-height: 1.6; }

/* A régua de etapas. */
.passos-acesso {
  list-style: none; margin: -4px 0 24px; padding: 0 0 20px; display: flex; gap: 6px;
  border-bottom: 1px solid var(--line);
}
.passos-acesso li {
  flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 7px;
  position: relative; font-size: 10.5px; line-height: 1.3; text-align: center; color: var(--faint-2);
}
.passos-acesso li + li::before {
  content: ""; position: absolute; top: 12px; right: calc(50% + 17px); width: calc(100% - 28px);
  height: 1px; background: var(--line-3);
}
.passos-acesso li.feito + li::before, .passos-acesso li.feito + li.atual::before { background: var(--gold-deep); }
.passos-acesso__n {
  width: 25px; height: 25px; border-radius: 50%; display: grid; place-items: center; position: relative; z-index: 1;
  border: 1px solid var(--line-3); background: var(--panel); font-family: var(--f-mono); font-size: 11px; color: var(--faint);
}
.passos-acesso li.atual { color: var(--gold-bright); }
.passos-acesso li.atual .passos-acesso__n { border-color: var(--gold); color: var(--gold-bright); box-shadow: 0 0 0 4px rgba(214, 178, 94, .12); }
.passos-acesso li.feito { color: var(--muted-2); }
.passos-acesso li.feito .passos-acesso__n { border-color: transparent; background: var(--gold-grad); color: #12100D; }
.passos-acesso__nome { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* A escolha do canal: cartões grandes, com o destino à vista. */
.canais { display: grid; gap: 10px; }
.canal {
  position: relative; display: grid; grid-template-columns: 42px minmax(0, 1fr) 20px; align-items: center; gap: 14px;
  padding: 14px 16px; border: 1px solid var(--line-3); border-radius: var(--raio); background: var(--field);
  cursor: pointer; transition: border-color .18s, background .18s;
}
.canal:hover { border-color: var(--line-4); background: var(--raised); }
.canal input { position: absolute; opacity: 0; width: 0; height: 0; }
.canal__ico { width: 42px; height: 42px; border-radius: 50%; display: grid; place-items: center; border: 1px solid var(--line-3); color: var(--gold); background: var(--panel); }
.canal__ico--whatsapp { color: #6FBF7F; }
.canal__txt { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.canal__txt b { font-size: 14px; font-weight: 600; color: var(--ink); }
.canal__txt span { font-size: 12.5px; color: var(--muted-2); overflow-wrap: anywhere; }
.canal__marca { width: 20px; height: 20px; border-radius: 50%; border: 1px solid var(--line-4); position: relative; }
.canal__marca::after {
  content: ""; position: absolute; inset: 4px; border-radius: 50%; background: var(--gold-grad);
  transform: scale(0); transition: transform .18s var(--mola, ease);
}
.canal:has(input:checked) { border-color: var(--gold-deep); background: linear-gradient(90deg, rgba(214, 178, 94, .07), transparent 70%), var(--field); }
.canal:has(input:checked) .canal__marca { border-color: var(--gold); }
.canal:has(input:checked) .canal__marca::after { transform: scale(1); }
.canal:has(input:checked) .canal__txt b { color: var(--gold-bright); }
.canal:has(input:focus-visible) { outline: 2px solid var(--gold); outline-offset: 2px; }
.canal--off { opacity: .5; cursor: not-allowed; }
.canal--off:hover { border-color: var(--line-3); background: var(--field); }

/* A lista das regras da senha, que vai ficando verde. */
.senha-nova { display: flex; flex-direction: column; gap: 14px; }
.senha-regras {
  list-style: none; margin: -2px 0 4px; padding: 12px 14px; display: grid; grid-template-columns: 1fr 1fr; gap: 7px 14px;
  border: 1px solid var(--line); border-radius: var(--raio); background: var(--carbon);
}
.senha-regras li { display: flex; align-items: center; gap: 8px; font-size: 12px; line-height: 1.35; color: var(--faint); transition: color .2s; }
.senha-regras li[data-regra="especial"], .senha-regras li[data-regra="igual"] { grid-column: 1 / -1; }
.senha-regras__marca {
  flex: 0 0 auto; width: 15px; height: 15px; border-radius: 50%; border: 1px solid var(--line-4); position: relative;
  transition: background .2s, border-color .2s;
}
.senha-regras li.ok { color: var(--ok); }
.senha-regras li.ok .senha-regras__marca { border-color: var(--ok); background: var(--ok); }
.senha-regras li.ok .senha-regras__marca::after {
  content: ""; position: absolute; left: 4.5px; top: 2px; width: 4px; height: 7px;
  border: solid #0E0C09; border-width: 0 1.6px 1.6px 0; transform: rotate(45deg);
}
.senha-regras li.ruim { color: #D08A7E; }
.senha-regras li.ruim .senha-regras__marca { border-color: #D08A7E; }
.senha-regras--completa { border-color: var(--ok-line); }

/* O olho que mostra a senha. */
.senha-olho { position: relative; display: block; }
.senha-olho .entrada { width: 100%; padding-right: 46px; }
.senha-olho__botao {
  position: absolute; right: 4px; top: 50%; transform: translateY(-50%); width: 38px; height: 38px;
  display: grid; place-items: center; border: 0; border-radius: var(--raio); background: none;
  color: var(--faint); cursor: pointer;
}
.senha-olho__botao:hover, .senha-olho__botao:focus-visible { color: var(--gold); }

/* O código de seis dígitos. */
.codigo-campo { display: flex; flex-direction: column; align-items: center; gap: 10px; }
.codigo-campo .rotulo { font-size: 10px; }
.codigo-campo__entrada {
  width: 100%; max-width: 300px; padding: 16px 10px; text-align: center;
  font-family: var(--f-mono); font-size: 30px; letter-spacing: .42em; text-indent: .42em;
  color: var(--gold-bright); background: var(--field); border: 1px solid var(--line-3); border-radius: var(--raio);
  transition: border-color .18s, box-shadow .18s;
}
.codigo-campo__entrada::placeholder { color: var(--line-4); }
.codigo-campo__entrada:focus { outline: none; border-color: var(--gold-deep); box-shadow: 0 0 0 4px rgba(214, 178, 94, .1); }
.codigo-campo__entrada--cheio { border-color: var(--gold); }

/* Reenviar e as ações secundárias. */
.link-botao {
  background: none; border: 0; padding: 0; cursor: pointer; font: inherit; font-size: 13px;
  color: var(--gold-bright); text-decoration: underline; text-underline-offset: 3px; text-decoration-color: rgba(214, 178, 94, .4);
}
.link-botao:hover { color: var(--gold); text-decoration-color: currentColor; }
.link-botao:disabled { color: var(--faint); text-decoration: none; cursor: default; font-variant-numeric: tabular-nums; }
.reenvio {
  display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap;
  margin-top: 20px; padding: 12px; border: 1px dashed var(--line-3); border-radius: var(--raio); font-size: 13px;
}
.reenvio__txt { color: var(--faint); }
.acesso__volta { display: flex; justify-content: center; margin-top: 18px; padding-top: 18px; border-top: 1px solid var(--line); }
.acesso__form-link { display: inline; margin: 0; }
.acesso__nota { margin: 18px 0 0; line-height: 1.6; text-align: center; }

/* Entrar: o "esqueci", o "ou" e o convite para criar conta. */
.acesso__esqueci { align-self: flex-end; font-size: 12.5px; color: var(--gold); text-decoration: none; }
.acesso__esqueci:hover { color: var(--gold-bright); text-decoration: underline; text-underline-offset: 3px; }
.acesso__ou { display: flex; align-items: center; gap: 14px; margin: 24px 0 18px; font-family: var(--f-mono); font-size: 10px; letter-spacing: .16em; text-transform: uppercase; color: var(--faint-2); }
.acesso__ou::before, .acesso__ou::after { content: ""; flex: 1; height: 1px; background: var(--line); }
.acesso-convite {
  display: flex; align-items: center; justify-content: space-between; gap: 14px; padding: 16px 18px;
  border: 1px solid var(--line-3); border-radius: var(--raio); text-decoration: none;
  background: linear-gradient(120deg, rgba(214, 178, 94, .06), transparent 60%);
  transition: border-color .18s, transform .2s var(--mola, ease);
}
.acesso-convite:hover { border-color: var(--gold-deep); transform: translateY(-1px); }
.acesso-convite__txt { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.acesso-convite__txt b { font-size: 14px; font-weight: 600; color: var(--ink); }
.acesso-convite__txt span { font-size: 12px; color: var(--faint); }
.acesso-convite__ir {
  flex: 0 0 auto; display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 600;
  letter-spacing: .06em; text-transform: uppercase; color: var(--gold-bright);
}
.acesso-convite:hover .acesso-convite__ir svg { transform: translateX(2px); }
.acesso-convite__ir svg { transition: transform .2s; }
.acesso__rodape-link {
  margin-top: 24px; padding-top: 20px; border-top: 1px solid var(--line); text-align: center;
  font-size: 13.5px; color: var(--faint);
}
.acesso__rodape-link a { color: var(--gold-bright); font-weight: 600; text-decoration: none; margin-left: 4px; }
.acesso__rodape-link a:hover { text-decoration: underline; text-underline-offset: 3px; }
.acesso__ja-tem { display: flex; flex-direction: column; gap: 6px; margin-bottom: 18px; font-size: 13px; line-height: 1.5; }
.acesso__ja-tem span a { color: var(--gold-bright); font-weight: 600; }
.acesso__dupla { display: grid; grid-template-columns: minmax(0, 1fr) 118px; gap: 14px; }

/* A tela de "tudo certo". */
.acesso-ok { display: flex; flex-direction: column; align-items: center; gap: 12px; text-align: center; }
.acesso-ok__icone {
  width: 66px; height: 66px; border-radius: 50%; display: grid; place-items: center; margin-bottom: 6px;
  color: var(--ok); background: var(--ok-bg); border: 1px solid var(--ok-line);
  box-shadow: 0 0 0 8px rgba(111, 169, 125, .06); animation: lb-ok-surge .5s var(--mola, ease) both;
}
.acesso-ok__traco { stroke-dasharray: 24; stroke-dashoffset: 24; animation: lb-ok-traco .45s .25s ease forwards; }
.acesso-ok .texto { margin: 0 auto 6px; max-width: 36ch; }
.acesso-ok__barra { width: 100%; height: 3px; border-radius: 3px; background: var(--line); overflow: hidden; margin: 4px 0 10px; }
.acesso-ok__barra span { display: block; width: 0; height: 100%; background: var(--gold-grad); transition: width 2.6s linear; }
@keyframes lb-ok-surge { from { transform: scale(.6); opacity: 0; } to { transform: scale(1); opacity: 1; } }
@keyframes lb-ok-traco { to { stroke-dashoffset: 0; } }

.btn--esperando { opacity: .7; cursor: progress; }

@media (max-width: 520px) {
  .acesso { padding: 20px 12px 28px; justify-content: flex-start; }
  .acesso__caixa { padding: 26px 18px 24px; }
  .acesso__marca { margin-bottom: 20px; }
  .acesso__marca .marca__img { height: 58px; }
  .passos-acesso { gap: 2px; }
  .passos-acesso li { font-size: 9.5px; }
  .senha-regras { grid-template-columns: minmax(0, 1fr); }
  .acesso-convite { flex-direction: column; align-items: flex-start; }
  .codigo-campo__entrada { font-size: 26px; }
}
@media (prefers-reduced-motion: reduce) {
  .acesso-ok__icone, .acesso-ok__traco { animation: none; stroke-dashoffset: 0; }
}
.acesso__caixa.acesso__caixa--largo { max-width: 860px; }
/* A caixa desenhada do .marcar esconde a caixa nativa. A regra geral de
   input[type="checkbox"] vem depois na folha e empurrava o texto 36 px
   para a direita, com um quadrado invisível ocupando lugar. */
.marcar input[type="checkbox"], .marcar input[type="radio"] { position: absolute; opacity: 0; width: 0; height: 0; margin: 0; border: 0; }
/* O verde da lista da senha precisa se ler de relance no fundo escuro. */
.senha-regras li.ok { color: #8FD19E; }
.senha-regras li.ok .senha-regras__marca { border-color: #6CC382; background: #6CC382; }
.acesso__dupla { grid-template-columns: minmax(0, 1fr) 132px; }

/* ==================================================================
   A JANELA DE COMPRA DE CRÉDITOS (o "+" do saldo)
   ================================================================== */
.fundo .caixa.janela-cr__caixa {
  max-width: 540px; padding: 0; overflow: hidden; background: var(--panel); border-color: var(--line-3);
  box-shadow: 0 30px 80px rgba(0, 0, 0, .6); max-height: calc(100vh - 40px); overflow-y: auto;
}
.janela-cr__cab {
  display: flex; align-items: center; justify-content: space-between; gap: 16px;
  padding: 16px 22px; border-bottom: 1px solid var(--line-2);
  background: linear-gradient(90deg, rgba(214, 178, 94, .08), transparent 70%);
}
.janela-cr__saldo { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.janela-cr__saldo .rotulo { font-size: 9.5px; color: var(--gold-deep); margin-right: 4px; }
.janela-cr__saldo b { font-family: var(--f-mono); font-size: 20px; font-weight: 500; color: var(--gold-bright); }
.janela-cr__saldo span:last-child { font-size: 12px; color: var(--faint); }
.janela-cr__passo { padding: 22px 22px 24px; }
.janela-cr__tit { font-family: var(--f-serif); font-weight: 400; font-size: 26px; line-height: 1.15; color: var(--ink-hi); margin: 0 0 6px; }
.janela-cr__nota { margin: 0 0 18px; font-size: 13px; line-height: 1.6; color: var(--muted-2); }
.janela-cr__nota b { color: var(--ink); font-weight: 600; }
.janela-cr__rodape { margin: 12px 0 0; font-size: 11.5px; line-height: 1.55; color: var(--faint); text-align: center; }
.janela-cr__ir { margin-top: 16px; }

.jcr-pacotes { display: grid; gap: 8px; }
.jcr-pacote {
  position: relative; display: grid; grid-template-columns: 20px minmax(0, 1fr) auto; grid-template-rows: auto auto;
  column-gap: 14px; row-gap: 2px; align-items: center; padding: 13px 16px;
  border: 1px solid var(--line-3); border-radius: var(--raio); background: var(--field); cursor: pointer;
  transition: border-color .18s, background .18s;
}
.jcr-pacote:hover { border-color: var(--line-4); background: var(--raised); }
.jcr-pacote input { position: absolute; opacity: 0; width: 0; height: 0; }
.jcr-pacote__marca { grid-row: 1 / 3; width: 20px; height: 20px; border-radius: 50%; border: 1px solid var(--line-4); position: relative; }
.jcr-pacote__marca::after { content: ""; position: absolute; inset: 4px; border-radius: 50%; background: var(--gold-grad); transform: scale(0); transition: transform .18s var(--mola, ease); }
.jcr-pacote__n { font-size: 14px; color: var(--ink); display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.jcr-pacote__n b { font-family: var(--f-mono); font-size: 17px; font-weight: 500; color: var(--gold-bright); }
.jcr-pacote__n em {
  font-style: normal; padding: 2px 7px; border-radius: 999px; border: 1px solid var(--gold-edge);
  font-family: var(--f-mono); font-size: 9px; letter-spacing: .1em; text-transform: uppercase; color: var(--gold);
}
.jcr-pacote__eq { grid-column: 2; font-size: 11.5px; color: var(--faint); }
.jcr-pacote__preco {
  grid-column: 3; grid-row: 1 / 3; display: flex; flex-direction: column; align-items: flex-end; gap: 2px;
  font-family: var(--f-mono); font-size: 15px; color: var(--ink); white-space: nowrap;
}
.jcr-pacote__preco small { font-size: 10.5px; color: var(--ok); }
.jcr-pacote:has(input:checked) { border-color: var(--gold-deep); background: linear-gradient(90deg, rgba(214, 178, 94, .08), transparent 75%), var(--field); }
.jcr-pacote:has(input:checked) .jcr-pacote__marca { border-color: var(--gold); }
.jcr-pacote:has(input:checked) .jcr-pacote__marca::after { transform: scale(1); }
.jcr-pacote:has(input:focus-visible) { outline: 2px solid var(--gold); outline-offset: 2px; }

.janela-cr__espera, .janela-cr__ok { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 4px; }
.janela-cr__espera[hidden], .janela-cr__ok[hidden] { display: none; }
.janela-cr__espera .btn, .janela-cr__ok .btn { margin-top: 6px; }
.janela-cr__espera .link-botao { margin-top: 14px; }
.janela-cr__roda {
  width: 46px; height: 46px; margin-bottom: 12px; border-radius: 50%;
  border: 2px solid var(--line-3); border-top-color: var(--gold); animation: lb-gira 1s linear infinite;
}
@keyframes lb-gira { to { transform: rotate(360deg); } }
.janela-cr__mais { font-family: var(--f-mono); color: var(--ok); }
.janela-cr__novo { display: flex; flex-direction: column; align-items: center; gap: 4px; margin: 4px 0 16px; padding: 14px 26px; border: 1px solid var(--line-2); border-radius: var(--raio); }
.janela-cr__novo .rotulo { font-size: 9.5px; }
.janela-cr__novo b { font-family: var(--f-serif); font-weight: 400; font-size: 34px; line-height: 1; color: var(--gold-bright); }
.janela-cr__ok .acesso-ok__icone { margin-bottom: 10px; }
.saldo--pulou { animation: lb-pulou .8s var(--mola, ease); }
@keyframes lb-pulou { 0% { transform: scale(1); } 35% { transform: scale(1.25); color: #8FD19E; } 100% { transform: scale(1); } }
.pc-comprar { gap: 7px; }

@media (max-width: 560px) {
  .fundo:has(.janela-cr__caixa) { padding: 10px; align-items: end; }
  .fundo .caixa.janela-cr__caixa { max-height: calc(100vh - 20px); }
  .janela-cr__passo { padding: 18px 16px 20px; }
  .janela-cr__cab { padding: 14px 16px; }
  .jcr-pacote { padding: 12px 12px; column-gap: 10px; }
  .janela-cr__tit { font-size: 23px; }
}

/* O convite da equipe como janela sobre a tela. */
.janela.janela--modal {
  position: fixed; inset: 0; z-index: 150; margin: 0; padding: 24px 16px; border: 0;
  display: grid; grid-template-columns: minmax(0, 1fr); place-items: center; overflow-y: auto; overscroll-behavior: contain;
  background: rgba(6, 5, 4, .78); backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px);
  animation: lb-fade .22s ease-out;
}
.janela.janela--modal[hidden] { display: none; }
.janela-modal__caixa {
  width: 100%; max-width: 720px; margin: auto; padding: 24px 26px 26px;
  background: var(--panel); border: 1px solid var(--line-3); border-top: 2px solid var(--gold-deep); border-radius: var(--raio);
  box-shadow: 0 30px 80px rgba(0, 0, 0, .6); animation: lb-sobe .3s var(--mola) both;
}
.janela-modal__tit { font-family: var(--f-serif); font-weight: 400; font-size: 24px; line-height: 1.2; color: var(--ink-hi); }
.janela-modal__caixa .janela__cab { align-items: flex-start; }
.janela-modal__caixa .modal__x { flex: 0 0 auto; }
html:has(.janela--modal:not([hidden])), html:has(.fundo.abre) { overflow: hidden; }
@media (max-width: 560px) {
  .janela.janela--modal { padding: 10px; align-items: end; }
  .janela-modal__caixa { padding: 18px 16px 20px; }
  .janela-modal__tit { font-size: 21px; }
}

/* ==================================================================
   A AULA — o alto organizado, o progresso real e a coluna "Na trilha"
   ================================================================== */
.aula-cab {
  position: relative; display: flex; flex-direction: column; gap: 10px; padding: 22px 26px 22px;
  border: 1px solid var(--line-2); border-radius: var(--raio);
  background: radial-gradient(600px 220px at 0% 0%, rgba(214, 178, 94, .09), transparent 70%), var(--panel);
}
.aula-cab__topo { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; margin-bottom: 4px; }
.aula-cab__volta {
  display: inline-flex; align-items: center; gap: 8px; min-width: 0; max-width: 100%;
  font-size: 12.5px; color: var(--muted-2); text-decoration: none;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.aula-cab__volta:hover { color: var(--gold); }
.aula-cab__pos {
  flex: 0 0 auto; padding: 4px 10px; border: 1px solid var(--line-3); border-radius: 999px;
  font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .08em; color: var(--muted-2);
}
.aula-cab__modulo { font-family: var(--f-mono); font-size: 10.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--gold-deep); }
.aula-cab__tit { margin: 0; font-family: var(--f-serif); font-weight: 400; font-size: clamp(26px, 3vw, 36px); line-height: 1.12; color: var(--ink-hi); }
.aula-cab__fatos { display: flex; align-items: center; gap: 8px 16px; flex-wrap: wrap; }
.aula-cab__fato { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--muted-2); }
.aula-cab__fato svg { color: var(--gold-deep); }
.aula-cab__feita {
  display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; border-radius: 999px;
  border: 1px solid var(--ok-line); background: var(--ok-bg); font-size: 11.5px; color: #8FD19E;
}
.aula-cab__feita[hidden] { display: none; }
.aula-cab__prog {
  display: flex; align-items: center; gap: 14px 22px; flex-wrap: wrap;
  margin-top: 6px; padding-top: 14px; border-top: 1px solid var(--line);
}
.aula-prog { flex: 1 1 280px; display: flex; flex-direction: column; gap: 7px; min-width: 0; }
.aula-prog__barra { position: relative; height: 6px; border-radius: 6px; background: var(--line-2); }
.aula-prog__barra span { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 6px; background: var(--gold-grad); transition: width .5s ease; }
.aula-prog__meta { position: absolute; left: 90%; top: -3px; bottom: -3px; width: 2px; border-radius: 2px; background: var(--ink-hi); opacity: .35; }
.aula-prog__txt { font-size: 12px; color: var(--muted-2); }
.aula-marcar { gap: 8px; }
.aula-marcar::before {
  content: ""; width: 14px; height: 14px; border-radius: 50%; border: 1.5px solid currentColor; opacity: .7; flex: 0 0 auto;
}
.aula-marcar--feita { color: #8FD19E; border-color: var(--ok-line); }
.aula-marcar--feita::before { background: #6CC382; border-color: #6CC382; opacity: 1; }

.aula-tela { margin-top: 20px; }
.aula-sobre { display: flex; flex-direction: column; gap: 8px; padding: 18px 22px; border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--panel); }
.aula-sobre .rotulo { font-size: 10px; color: var(--gold-deep); }

/* O fim do vídeo: a próxima aula por cima do player. */
.palco__fim {
  position: absolute; inset: 0; z-index: 3; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 10px; padding: 20px; text-align: center; background: rgba(8, 7, 5, .86); backdrop-filter: blur(2px);
  animation: lb-fade .3s ease both;
}
.palco__fim[hidden] { display: none; }
.palco__fim b { font-family: var(--f-serif); font-weight: 400; font-size: 26px; color: var(--ink-hi); }
.palco__fim-ok { width: 46px; height: 46px; border-radius: 50%; display: grid; place-items: center; color: #8FD19E; background: var(--ok-bg); border: 1px solid var(--ok-line); }
.palco__fim-prox { font-size: 13px; color: var(--muted-2); max-width: 46ch; margin-bottom: 6px; }

/* A coluna "Na trilha". */
.na-trilha { display: flex; flex-direction: column; gap: 14px; padding: 18px 18px 18px; }
.na-trilha__cab { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
.na-trilha__conta { font-size: 11.5px; color: var(--faint); }
.na-trilha__barra { height: 4px; border-radius: 4px; background: var(--line-2); overflow: hidden; margin-top: -6px; }
.na-trilha__barra span { display: block; height: 100%; background: var(--gold-grad); }
.na-trilha__prox {
  display: flex; flex-direction: column; gap: 5px; padding: 14px 16px; text-decoration: none;
  border: 1px solid var(--gold-deep); border-radius: var(--raio);
  background: linear-gradient(120deg, rgba(214, 178, 94, .12), transparent 70%), var(--carbon);
  transition: transform .2s var(--mola, ease), border-color .2s;
}
.na-trilha__prox:hover { transform: translateY(-2px); border-color: var(--gold); }
.na-trilha__prox-rot {
  display: inline-flex; align-items: center; gap: 6px; font-family: var(--f-mono); font-size: 10px;
  letter-spacing: .14em; text-transform: uppercase; color: var(--gold-bright);
}
.na-trilha__prox:hover .na-trilha__prox-rot svg { transform: translateX(3px); }
.na-trilha__prox-rot svg { transition: transform .2s; }
.na-trilha__prox-tit { font-family: var(--f-serif); font-size: 19px; line-height: 1.2; color: var(--ink-hi); }
.na-trilha__prox-pe { font-size: 11.5px; color: var(--faint); }
.na-trilha__fim { display: flex; flex-direction: column; gap: 4px; padding: 12px 14px; border: 1px dashed var(--line-3); border-radius: var(--raio); }
.na-trilha__fim b { font-size: 13.5px; color: var(--ink); font-weight: 500; }
.na-trilha__lista { display: flex; flex-direction: column; gap: 2px; padding-top: 12px; border-top: 1px solid var(--line); }
.na-trilha__modulo { font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--faint-2); margin-bottom: 6px; }
.na-trilha__aula {
  display: flex; align-items: center; gap: 10px; padding: 7px 8px; border-radius: var(--raio);
  font-size: 12.5px; line-height: 1.35; color: var(--muted-2); text-decoration: none;
}
.na-trilha__aula:hover { background: rgba(255, 255, 255, .03); color: var(--ink); }
.na-trilha__aula--aqui { background: rgba(214, 178, 94, .08); color: var(--gold-bright); }
.na-trilha__marca {
  flex: 0 0 auto; width: 16px; height: 16px; border-radius: 50%; border: 1px solid var(--line-4);
  display: grid; place-items: center; color: #0E0C09;
}
.na-trilha__marca i { width: 6px; height: 6px; border-radius: 50%; background: var(--gold); }
.na-trilha__aula--aqui .na-trilha__marca { border-color: var(--gold); }
.na-trilha__aula--feita .na-trilha__marca { background: #6CC382; border-color: #6CC382; }
.na-trilha__aula-tit { min-width: 0; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
.na-trilha__ant { font-size: 12px; color: var(--faint); text-decoration: none; padding-top: 12px; border-top: 1px solid var(--line); }
.na-trilha__ant:hover { color: var(--gold); }

@media (max-width: 980px) {
  /* No celular e no tablet a "próxima aula" sobe para logo depois do player:
     as duas colunas se desfazem e cada bloco ganha a sua vez. */
  .aula-tela { display: flex; flex-direction: column; align-items: stretch; gap: 20px; }
  .aula-principal, .aula-lado { display: contents; }
  .aula-principal > .palco { order: 1; }
  .aula-lado > .na-trilha { order: 2; }
  .aula-principal > .aula-sobre { order: 3; }
  .aula-lado > .aula-materiais { order: 4; }
  .aula-principal > .ponte { order: 5; }
  .aula-principal > .aula-duvidas { order: 6; }
}
@media (max-width: 640px) {
  .aula-cab { padding: 18px 16px; }
  .aula-cab__prog { flex-direction: column; align-items: stretch; }
  .aula-prog { flex: 0 0 auto; }
  .aula-cab__marcar .btn { width: 100%; justify-content: center; }
  .palco__fim b { font-size: 21px; }
  .palco__fim-prox { display: none; }
}

/* ==========================================================================
   O QUE CADA PLANO DÁ — recursos, cursos incluídos e desconto de assinante
   (app/beneficios-do-plano.php). O mesmo miolo na vitrine do site e no Meu
   plano do painel.
   ========================================================================== */
.plano-ben { display: flex; flex-direction: column; gap: 16px; }
.plano-ben__lista { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.plano-ben__lista li {
  position: relative; padding-left: 18px;
  font-size: 12.5px; line-height: 1.5; color: var(--muted);
}
.plano-ben__lista li::before {
  content: ''; position: absolute; left: 3px; top: 7px;
  width: 5px; height: 5px; border-radius: 50%; background: var(--gold-deep);
}
.plano-cartao--destaque .plano-ben__lista li::before,
.plano--atual .plano-ben__lista li::before { background: var(--gold); }
.plano-ben__bloco {
  display: flex; flex-direction: column; gap: 8px;
  padding-top: 13px; border-top: 1px dashed var(--line-2);
}
.plano-ben__rot {
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .16em; text-transform: uppercase;
  color: var(--gold-deep);
}
.plano-ben__cursos, .plano-ben__desc { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; }
.plano-ben__cursos li {
  display: flex; align-items: flex-start; gap: 8px;
  font-size: 12.5px; line-height: 1.45; color: var(--ink);
}
.plano-ben__cursos svg { flex: 0 0 auto; margin-top: 2px; color: var(--gold); }
.plano-ben__desc li {
  display: flex; align-items: flex-start; gap: 9px;
  font-size: 12.5px; line-height: 1.45; color: var(--muted);
}
.plano-ben__desc small { font-size: 11px; color: var(--faint); line-height: 1.4; }
.plano-ben__pct {
  flex: 0 0 auto; display: inline-flex; align-items: baseline; gap: 3px;
  min-width: 44px; justify-content: center; padding: 2px 7px;
  border: 1px solid var(--ok-line, #2A3B24); border-radius: var(--raio);
  background: var(--ok-bg, #0F150C);
  font-family: var(--f-mono); font-size: 12px; font-weight: 600; color: var(--ok, #8FBF6A);
}
.plano-ben__pct small { font-size: 9px; font-weight: 400; color: inherit; opacity: .8; }

/* No Meu plano o cartão é mais estreito e mais seco: o miolo segue a régua dele. */
.plano .plano-ben { gap: 14px; }

/* ==========================================================================
   USUÁRIOS E PERMISSÕES DA ADMINISTRAÇÃO
   ========================================================================== */
.op-tab { min-width: 820px; }
.op-pessoa { display: flex; align-items: center; gap: 12px; min-width: 0; }
.op-pessoa__sigla {
  flex: 0 0 auto; display: grid; place-items: center; width: 34px; height: 34px;
  border: 1px solid var(--gold-edge); border-radius: var(--raio); background: var(--raised);
  font-family: var(--f-mono); font-size: 11px; color: var(--gold-bright);
}
.op-pessoa__mail { font-size: 11.5px; overflow-wrap: anywhere; }
.op-total {
  display: inline-flex; padding: 4px 10px; border: 1px solid var(--gold-deep); border-radius: var(--raio);
  background: var(--raised); font-family: var(--f-mono); font-size: 10px; letter-spacing: .12em;
  text-transform: uppercase; color: var(--gold-bright);
}
.op-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.op-chip {
  display: inline-flex; align-items: baseline; gap: 5px; padding: 3px 8px;
  border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--field);
  font-size: 11.5px; color: var(--muted); white-space: nowrap;
}
.op-chip small { font-family: var(--f-mono); font-size: 9.5px; color: var(--faint); }
.op-chip--cheio { border-color: var(--gold-edge); color: var(--ink); }

.op-nova-conta { margin: 16px 0 10px; font-size: 12px; }
.op-nova-conta b { color: var(--ink); font-weight: 500; }

/* Total ou escolhido — as duas opções lado a lado. */
.op-modo { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; margin-bottom: 16px; }
.op-modo__op {
  display: flex; align-items: flex-start; gap: 10px; padding: 12px 14px; cursor: pointer;
  border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--field);
}
.op-modo__op:has(input:checked) { border-color: var(--gold-deep); background: var(--raised); }
.op-modo__op input { margin-top: 3px; accent-color: var(--gold); }
.op-modo__op b { display: block; font-size: 13px; font-weight: 500; color: var(--ink); }
.op-modo__op small { display: block; margin-top: 2px; font-size: 11.5px; color: var(--faint); line-height: 1.4; }
.op-modo__op--fora { cursor: not-allowed; opacity: .55; }

.op-grade { display: flex; flex-direction: column; gap: 10px; transition: opacity .2s; }
.op-grade[data-op-desligada] { opacity: .35; pointer-events: none; }
.op-grade__grupo { margin-top: 8px; }
.op-grade__grupo:first-child { margin-top: 0; }
.op-grade__mods { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; }
.op-mod { border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--panel); min-width: 0; }
.op-mod:has(input[data-op-perm]:checked) { border-color: var(--gold-edge); }
.op-mod__cab {
  display: flex; align-items: flex-start; gap: 10px; padding: 11px 12px;
  border-bottom: 1px solid var(--line);
}
.op-mod__cab b { font-size: 13px; font-weight: 500; color: var(--ink); }
.op-mod__cab small { font-size: 11px; color: var(--faint); line-height: 1.4; }
.op-mod__ico { flex: 0 0 auto; margin-top: 1px; }
.op-mod__tudo {
  margin-left: auto; flex: 0 0 auto; display: inline-flex; align-items: center; gap: 5px;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .08em; color: var(--faint); cursor: pointer;
}
.op-mod__tudo input { accent-color: var(--gold); }
.op-mod__acoes { display: flex; flex-direction: column; padding: 6px 4px; }
.op-acao {
  display: flex; align-items: flex-start; gap: 9px; padding: 6px 8px; border-radius: var(--raio); cursor: pointer;
}
.op-acao:hover { background: var(--field); }
.op-acao input { margin-top: 3px; flex: 0 0 auto; accent-color: var(--gold); }
.op-acao__txt { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.op-acao__txt b { font-size: 12.5px; font-weight: 400; color: var(--ink); }
.op-acao__txt small { font-size: 11px; color: var(--faint); line-height: 1.4; }
.op-acao--fora { cursor: not-allowed; opacity: .45; }

.op-catalogo > summary { cursor: pointer; list-style: none; }
.op-catalogo > summary::-webkit-details-marker { display: none; }
.op-catalogo > summary .pc-sec__tit::after { content: ' +'; color: var(--gold-deep); }
.op-catalogo[open] > summary .pc-sec__tit::after { content: ' −'; }
.op-cat { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 18px 26px; }
.op-cat__mod { display: flex; flex-direction: column; gap: 4px; }
.op-cat__mod > b { font-size: 13.5px; font-weight: 500; color: var(--ink); }
.op-cat__mod ul { margin: 6px 0 0; padding-left: 16px; display: grid; gap: 4px; }
.op-cat__mod li { font-size: 12px; line-height: 1.5; color: var(--muted); }
.op-cat__mod li b { font-weight: 500; color: var(--ink); }

/* A porta de entrada de quem não tem a visão geral: o mapa do acesso. */
.op-mapa { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 14px; margin-top: 22px; }
.op-mapa__item {
  display: flex; flex-direction: column; gap: 6px; padding: 18px 18px 16px;
  border: 1px solid var(--line-2); border-radius: var(--raio); background: var(--panel);
  text-decoration: none; color: inherit; transition: border-color .2s, transform .2s var(--mola);
}
.op-mapa__item:hover { border-color: var(--gold-edge); transform: translateY(-2px); }
.op-mapa__item b { font-size: 15px; font-weight: 400; color: var(--ink-hi); }
.op-mapa__ico { display: inline-flex; }
.op-mapa__pode { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 6px; }
.op-atalhos { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 4px; }

/* SÓ LEITURA: o formulário à vista, nada se envia. */
.so-leitura { display: contents; border: 0; margin: 0; padding: 0; min-width: 0; }
.so-leitura button[type="submit"], .so-leitura .btn[type="submit"] { display: none; }
.so-leitura .entrada, .so-leitura input, .so-leitura select, .so-leitura textarea { opacity: .8; }
.so-leitura button:disabled, .so-leitura .btn:disabled { opacity: .35; cursor: not-allowed; }
.so-leitura__aviso { margin: 18px 0 0; }
.so-leitura__nota { margin: 0; font-size: 12px; color: var(--aviso); }
.jm__so-leitura { padding: 12px 26px 0; }
.jm--so-leitura .jm__corpo { pointer-events: none; }
.jm--so-leitura .jm__corpo .entrada, .jm--so-leitura .jm__corpo input { opacity: .8; }
.jm--so-leitura .jm__pe [type="submit"], .jm--so-leitura [data-apagar],
.jm--so-leitura [data-video-apagar], .jm--so-leitura [data-video-arquivo] { display: none; }
.so-ver .puxador { display: none; }

@media (max-width: 760px) {
  .op-modo, .op-grade__mods { grid-template-columns: minmax(0, 1fr); }
}

/* O erro do formulário em janela sai DENTRO da janela, no alto do corpo —
   e, quando a janela não é das padrão, flutuando por cima de tudo. */
.jm__recado { margin: 0; }
.jm__recado + .secao-form { border-top: 0; padding-top: 0; margin-top: 0; }
.recado--flutua {
  position: fixed; top: 18px; left: 50%; transform: translateX(-50%); z-index: 400;
  width: max-content; max-width: min(640px, calc(100% - 32px));
  box-shadow: 0 18px 50px rgba(0, 0, 0, .6);
}


/* ==================================================================
   "SEM ACESSO" — a janela que a vitrine abre quando alguém tenta entrar
   no que não é seu (app/sem-acesso.php). A capa do material no alto, o
   motivo em uma frase, e o que dá para fazer: comprar, assinar, ou saber
   quando as vendas acabaram.
   ================================================================== */
.fundo.sa.abre { animation: lb-fade .25s ease-out; }
.fundo .caixa.sa__caixa {
  position: relative; max-width: 560px; padding: 0; overflow: hidden auto; max-height: calc(100vh - 40px);
  background: var(--panel); border: 1px solid var(--line-3); border-radius: var(--raio);
  box-shadow: 0 40px 110px rgba(0, 0, 0, .7), 0 0 0 1px rgba(214, 178, 94, .05);
  animation: lb-sa-entra .42s var(--mola) both;
}
@keyframes lb-sa-entra { from { opacity: 0; transform: translateY(18px) scale(.97); } to { opacity: 1; transform: none; } }
.fundo.abre .caixa.sa__caixa { transform: none; opacity: 1; }

.sa__capa {
  position: relative; height: 196px; overflow: hidden; isolation: isolate;
  background:
    radial-gradient(120% 90% at 50% 115%, rgba(214, 178, 94, .20), transparent 60%),
    repeating-linear-gradient(135deg, rgba(214, 178, 94, .035) 0 1px, transparent 1px 14px),
    #0B0A08;
}
.sa__capa::before {
  content: ""; position: absolute; inset: 0 0 auto; height: 2px; z-index: 3;
  background: linear-gradient(90deg, transparent, var(--gold) 30%, var(--gold-bright) 50%, var(--gold) 70%, transparent);
}
.sa__capa::after {
  content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: linear-gradient(180deg, rgba(15, 13, 11, .05) 0%, rgba(15, 13, 11, .35) 48%, var(--panel) 100%);
}
.sa__capa--foto > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.sa__capa--retrato .sa__borrao {
  position: absolute; inset: -30px; width: calc(100% + 60px); height: calc(100% + 60px); object-fit: cover;
  filter: blur(22px) brightness(.42) saturate(1.15);
}
.sa__capa--retrato .sa__livro {
  position: relative; z-index: 2; display: block; height: 128px; width: auto; margin: 24px auto 0;
  border: 1px solid rgba(255, 255, 255, .08); border-radius: 2px;
  box-shadow: 0 22px 44px rgba(0, 0, 0, .65), 0 0 0 1px rgba(0, 0, 0, .4);
}
.sa__marca {
  position: absolute; inset: 0; display: grid; place-items: center; color: var(--gold-deep); z-index: 2;
}
.sa__marca svg { width: 54px; height: 54px; opacity: .9; filter: drop-shadow(0 6px 18px rgba(214, 178, 94, .25)); }
.sa__selo {
  position: absolute; top: 16px; left: 18px; z-index: 3;
  display: inline-flex; align-items: center; gap: 7px; padding: 6px 11px 6px 9px;
  font-family: var(--f-mono); font-size: 10px; font-weight: 600; letter-spacing: .15em; text-transform: uppercase;
  color: var(--gold-bright); background: rgba(12, 11, 9, .74); border: 1px solid var(--gold-edge); border-radius: 999px;
  backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
}
.sa__selo svg { color: var(--gold); }
.sa__selo--fim { color: #F0B2A4; border-color: #5A2A22; }
.sa__selo--fim svg { color: var(--alto); }
.sa__x { position: absolute; top: 12px; right: 12px; z-index: 3; background: rgba(12, 11, 9, .66); backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }

.sa__corpo { position: relative; z-index: 2; margin-top: -30px; padding: 0 28px 26px; }
.sa__sobre {
  display: block; font-family: var(--f-mono); font-size: 10px; letter-spacing: .16em; text-transform: uppercase; color: var(--gold-deep);
}
.sa__tit {
  margin: 8px 0 0; font-family: var(--f-serif); font-weight: 400; font-size: 34px; line-height: 1.06; color: var(--ink-hi);
  text-wrap: balance;
}
.sa__sub { margin: 6px 0 0; font-size: 13px; color: var(--muted-2); }
.sa__lead { margin: 12px 0 18px; font-size: 13.5px; line-height: 1.65; color: var(--muted); }

.sa__estado {
  display: grid; grid-template-columns: 46px minmax(0, 1fr); gap: 14px; align-items: start; padding: 16px 18px;
  border: 1px solid var(--line-3); border-radius: var(--raio);
  background: linear-gradient(95deg, rgba(214, 178, 94, .07), transparent 70%), var(--field);
}
.sa__estado-ico {
  width: 46px; height: 46px; display: grid; place-items: center; border-radius: 50%;
  color: var(--gold); border: 1px solid var(--gold-edge); background: rgba(214, 178, 94, .07);
}
.sa__estado-txt { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.sa__estado-rot {
  font-family: var(--f-mono); font-size: 9.5px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; color: var(--gold-deep);
}
.sa__estado-txt b { font-family: var(--f-serif); font-weight: 400; font-size: 25px; line-height: 1.15; color: var(--ink-hi); }
.sa__estado-txt > span:not(.sa__estado-rot):not(.prazo) { font-size: 12.5px; line-height: 1.55; color: var(--muted-2); }
.sa__estado--fim {
  border-color: var(--alto-line);
  background: linear-gradient(95deg, rgba(232, 132, 111, .08), transparent 70%), var(--field);
}
.sa__estado--fim .sa__estado-ico { color: var(--alto); border-color: #5A2A22; background: rgba(232, 132, 111, .07); }
.sa__estado--fim .sa__estado-rot { color: #C77F70; }

.sa__oferta {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 18px; align-items: center; padding: 18px 18px 18px 20px;
  border: 1px solid var(--gold-edge); border-left: 3px solid var(--gold); border-radius: var(--raio);
  background: linear-gradient(115deg, rgba(214, 178, 94, .10), transparent 62%), var(--field);
}
.sa__oferta-txt { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.sa__oferta-txt > span:not(.sa__estado-rot):not(.prazo) { font-size: 12.5px; line-height: 1.55; color: var(--muted-2); }
.sa__preco { display: flex; flex-direction: column; align-items: flex-end; gap: 5px; text-align: right; }
.sa__preco-linha { display: inline-flex; align-items: center; gap: 8px; }
.sa__preco-linha s { font-family: var(--f-mono); font-size: 12px; color: var(--faint); }
.sa__chip {
  padding: 2px 7px; border: 1px solid var(--gold-edge); border-radius: 999px;
  font-family: var(--f-mono); font-size: 9.5px; letter-spacing: .08em; color: var(--gold);
}
.sa__valor {
  font-family: var(--f-serif); font-weight: 400; font-size: 38px; line-height: 1; white-space: nowrap;
  background: var(--gold-grad); -webkit-background-clip: text; background-clip: text; color: transparent;
}
.prazo.prazo--janela { margin-top: 8px; padding: 8px 12px 9px; gap: 6px; }
.prazo--janela .prazo__casa b { font-size: 16px; padding: 2px 5px; }
.prazo--janela .prazo__ate { font-size: 11px; }

.sa__ou {
  display: flex; align-items: flex-start; gap: 10px; margin: 14px 2px 0; font-size: 12.5px; line-height: 1.55; color: var(--muted-2);
}
.sa__ou svg { flex: 0 0 auto; width: 18px; height: 18px; color: var(--gold); margin-top: 1px; }
.sa__ou b { color: var(--ink); font-weight: 600; }
.sa__nota { margin: 12px 0 0; font-size: 11.5px; color: var(--faint); }
.sa__acoes { display: flex; align-items: center; justify-content: flex-end; gap: 10px; flex-wrap: wrap; margin-top: 22px; }
.sa__acoes form { margin: 0; }
.sa__rodape {
  margin: 18px 0 0; padding-top: 14px; border-top: 1px solid var(--line-2);
  font-size: 11.5px; line-height: 1.55; color: var(--faint); text-align: center;
}

@media (max-width: 560px) {
  .fundo.sa { padding: 10px; align-items: end; }
  .fundo .caixa.sa__caixa { max-height: calc(100vh - 20px); }
  .sa__capa { height: 150px; }
  .sa__capa--retrato .sa__livro { height: 80px; margin-top: 50px; }
  .sa__corpo { padding: 0 18px 20px; margin-top: -24px; }
  .sa__tit { font-size: 28px; }
  .sa__oferta { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .sa__preco { align-items: flex-start; text-align: left; }
  .sa__acoes { flex-direction: column-reverse; align-items: stretch; }
  .sa__acoes > .btn, .sa__acoes form, .sa__acoes form .btn { width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
  .fundo .caixa.sa__caixa, .fundo.sa.abre { animation: none; }
}


/* ==================================================================
   CONCLUIR O CADASTRO — a janela obrigatória do primeiro acesso da conta
   importada (app/completar-cadastro.php). Não fecha: sem X, sem Esc e sem
   clique fora. O painel atrás fica apagado e desfocado até o envio.
   ================================================================== */
.fundo.cc {
  z-index: 700; overflow-y: auto; padding: 20px;
  background: rgba(5, 4, 3, .8); backdrop-filter: blur(9px); -webkit-backdrop-filter: blur(9px);
}
.fundo.cc.abre { animation: lb-fade .3s ease-out; }
body:has(.fundo.cc.abre) { overflow: hidden; }
.fundo .caixa.cc__caixa {
  position: relative; max-width: 540px; padding: 0; overflow: hidden auto; max-height: calc(100vh - 40px);
  background: var(--panel); border: 1px solid var(--line-3); border-radius: var(--raio);
  box-shadow: 0 40px 110px rgba(0, 0, 0, .75), 0 0 0 1px rgba(214, 178, 94, .06);
  animation: lb-sa-entra .5s var(--mola) both;
}
.fundo.abre .caixa.cc__caixa { transform: none; opacity: 1; }

.cc__topo {
  position: relative; height: 132px; display: grid; place-items: center; overflow: hidden; isolation: isolate;
  background:
    radial-gradient(80% 130% at 50% 0%, rgba(214, 178, 94, .24), transparent 62%),
    repeating-linear-gradient(135deg, rgba(214, 178, 94, .04) 0 1px, transparent 1px 14px),
    #0B0A08;
}
.cc__topo::before {
  content: ""; position: absolute; inset: 0 0 auto; height: 2px; z-index: 3;
  background: linear-gradient(90deg, transparent, var(--gold) 30%, var(--gold-bright) 50%, var(--gold) 70%, transparent);
}
.cc__topo::after {
  content: ""; position: absolute; inset: 0; z-index: 1; pointer-events: none;
  background: linear-gradient(180deg, transparent 45%, var(--panel) 100%);
}
.cc__anel {
  position: relative; z-index: 2; width: 78px; height: 78px; margin-top: 18px; border-radius: 50%;
  display: grid; place-items: center;
  background: radial-gradient(circle at 50% 35%, #1D1A13, #0C0B09 70%);
  border: 1px solid var(--gold-edge);
  box-shadow: 0 0 0 6px rgba(214, 178, 94, .05), 0 0 44px rgba(214, 178, 94, .22), 0 14px 30px rgba(0, 0, 0, .55);
}
.cc__anel::after {
  content: ""; position: absolute; inset: -9px; border-radius: 50%;
  border: 1px solid rgba(214, 178, 94, .3); animation: cc-halo 2.8s ease-out infinite;
}
@keyframes cc-halo { from { transform: scale(.88); opacity: .9; } to { transform: scale(1.32); opacity: 0; } }
/* O símbolo vem num quadrado de fundo quase preto; `lighten` apaga o
   quadrado contra o anel e deixa só o ouro. */
.cc__anel img { width: 50px; height: 50px; object-fit: contain; border-radius: 50%; mix-blend-mode: lighten; }
.cc__selo {
  position: absolute; top: 16px; left: 18px; z-index: 3;
  display: inline-flex; align-items: center; gap: 7px; padding: 6px 11px 6px 9px;
  font-family: var(--f-mono); font-size: 10px; font-weight: 600; letter-spacing: .15em; text-transform: uppercase;
  color: var(--gold-bright); background: rgba(12, 11, 9, .74); border: 1px solid var(--gold-edge); border-radius: 999px;
}
.cc__selo svg { color: var(--gold); }

.cc__corpo { position: relative; z-index: 2; padding: 8px 30px 24px; }
.cc__sobre {
  display: block; text-align: center;
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .16em; text-transform: uppercase; color: var(--gold-deep);
}
.cc__tit {
  margin: 8px 0 0; text-align: center; text-wrap: balance;
  font-family: var(--f-serif); font-weight: 400; font-size: 34px; line-height: 1.06; color: var(--ink-hi);
}
.cc__lead {
  margin: 12px auto 16px; max-width: 44ch; text-align: center;
  font-size: 13.5px; line-height: 1.65; color: var(--muted);
}
.cc__conta {
  display: flex; align-items: center; gap: 8px; width: fit-content; max-width: 100%; margin: 0 auto 20px;
  padding: 7px 14px; border: 1px solid var(--line-3); border-radius: 999px; background: var(--field);
  font-size: 12px; color: var(--muted-2);
}
.cc__conta svg { flex: 0 0 auto; color: var(--gold); }
.cc__conta span { min-width: 0; overflow-wrap: anywhere; }
.cc__conta b { color: var(--ink); font-weight: 600; }

.cc__ja {
  display: grid; grid-template-columns: 42px minmax(0, 1fr); gap: 14px; align-items: center;
  margin-bottom: 20px; padding: 14px 16px;
  border: 1px solid var(--ok-line); border-left: 3px solid var(--ok); border-radius: var(--raio);
  background: linear-gradient(95deg, rgba(111, 169, 125, .09), transparent 70%), var(--field);
}
.cc__ja-ico {
  width: 42px; height: 42px; display: grid; place-items: center; border-radius: 50%;
  color: var(--ok); border: 1px solid var(--ok-line); background: rgba(111, 169, 125, .08);
}
.cc__ja-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.cc__ja-rot {
  font-family: var(--f-mono); font-size: 9.5px; font-weight: 600; letter-spacing: .16em; text-transform: uppercase; color: var(--ok);
}
.cc__ja-txt b { font-family: var(--f-serif); font-weight: 400; font-size: 21px; line-height: 1.2; color: var(--ink-hi); margin-top: 2px; }
.cc__ja-tipo { font-size: 11.5px; color: var(--faint); }

.cc__erro { margin-bottom: 18px; }
.cc__form { display: flex; flex-direction: column; gap: 20px; }
.cc__bloco { display: flex; flex-direction: column; gap: 14px; padding-top: 18px; border-top: 1px solid var(--line-2); }
.cc__passo { display: flex; align-items: center; gap: 12px; }
.cc__n {
  flex: 0 0 auto; width: 26px; height: 26px; border-radius: 50%; display: grid; place-items: center;
  font-family: var(--f-mono); font-size: 12px; font-weight: 700; color: #12100D;
  background: var(--gold-grad); box-shadow: 0 0 0 4px rgba(214, 178, 94, .08);
}
.cc__passo-txt { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.cc__passo-txt b { font-size: 14px; font-weight: 600; color: var(--ink); }
.cc__passo-txt span { font-size: 12px; line-height: 1.45; color: var(--muted-2); }
.cc__aceite { padding: 14px 16px; border: 1px solid var(--line-3); border-radius: var(--raio); background: var(--field); }
/* A caixinha de marcar também se chama `.caixa` — e dentro de um `.fundo`
   ela herdava o desenho da caixa do diálogo inteiro. */
.fundo .marcar .caixa {
  width: 20px; max-width: none; height: 20px; padding: 0; transform: none; opacity: 1; transition: none;
  border: 1px solid var(--line-4); border-radius: var(--raio); background: var(--carbon); box-shadow: none; animation: none;
}
.cc__aceite > span:last-child { font-size: 13px; line-height: 1.55; color: var(--muted-2); }
.cc__ir { margin-top: 2px; }
.cc__rodape {
  display: flex; align-items: center; justify-content: center; gap: 6px; flex-wrap: wrap;
  margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--line-2);
  font-size: 12px; color: var(--faint);
}
.cc__rodape form { margin: 0; }
.cc__sair {
  padding: 0; border: 0; background: none; cursor: pointer; font: inherit;
  color: var(--muted-2); text-decoration: underline; text-underline-offset: 3px;
}
.cc__sair:hover { color: var(--ink); }

@media (max-width: 560px) {
  .fundo.cc { padding: 10px 0 0; align-items: end; }
  .fundo .caixa.cc__caixa {
    max-height: calc(100dvh - 10px); border-bottom: 0; border-radius: var(--raio) var(--raio) 0 0;
  }
  .cc__topo { height: 146px; }
  .cc__selo { left: 50%; transform: translateX(-50%); top: 14px; white-space: nowrap; }
  .cc__anel { width: 66px; height: 66px; margin-top: 50px; }
  .cc__anel img { width: 42px; height: 42px; }
  .cc__corpo { padding: 6px 18px 20px; }
  .cc__tit { font-size: 28px; }
  .cc__lead { font-size: 13px; }
}
@media (prefers-reduced-motion: reduce) {
  .fundo.cc.abre, .fundo .caixa.cc__caixa, .cc__anel::after { animation: none; }
}

/* ==========================================================================
   A LISTA QUE SE CLICA, A FICHA EM JANELA E O CONTADOR DE ONLINE
   ==========================================================================

   Três peças que nasceram juntas e resolvem a mesma queixa: saber quem é o
   cliente custava sair da lista, abrir uma página, rolar até o fim e voltar
   perdendo o lugar. Agora a linha inteira é o botão, a ficha vem por cima, e
   quem está com o site aberto agora aparece no alto de qualquer tela. */

/* A LINHA COMO BOTÃO. O cursor e o realce dizem que ela responde — sem isso,
   uma tabela que abre janela ao ser clicada é uma armadilha: ninguém tenta
   clicar no que parece texto. O foco desenhado é o mesmo caminho pelo
   teclado, que aqui não é enfeite: a linha anuncia-se como link. */
/* MAIS COLUNAS PEDEM MENOS ESPAÇO EM CADA UMA. A lista de escritórios
   passou de sete colunas para onze, e com o respiro de antes o saldo — que é
   o que mais se olha — caía fora da tela. Apertar aqui é o que faz caber sem
   esconder nada atrás de rolagem horizontal. */
.tabela--clicavel thead th { padding: 10px 13px; }
.tabela--clicavel tbody td { padding: 11px 13px; font-size: 12.5px; }
.tabela--clicavel tbody tr { cursor: pointer; transition: background .12s ease; }
.tabela--clicavel tbody tr:hover td { background: var(--line); }
.tabela--clicavel tbody tr:focus-visible {
  outline: 1px solid var(--gold-edge); outline-offset: -1px;
}
.tabela--clicavel tbody tr:focus-visible td { background: var(--line); }
/* O que tem destino próprio dentro da linha não herda o cursor da linha. */
.tabela--clicavel tbody tr a, .tabela--clicavel tbody tr button { cursor: pointer; }

.lin-nome { display: flex; align-items: center; gap: 9px; min-width: 0; }
.lin-nome__t { font-size: 13.5px; color: var(--ink); font-weight: 500; }
.lin-sub { font-size: 11px; color: var(--faint); }
.lin-corta {
  display: block; max-width: 19ch; overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap;
}
/* O PONTINHO DE ONLINE. Verde e parado seria mais um enfeite na tabela; o
   pulso lento é o que faz o olho achar as linhas vivas sem procurar. */
.lin-on {
  flex: none; width: 7px; height: 7px; border-radius: 50%;
  background: var(--ok); box-shadow: 0 0 0 3px rgba(111,169,125,.14);
  animation: lin-pulso 2.4s ease-in-out infinite;
}
@keyframes lin-pulso { 50% { box-shadow: 0 0 0 5px rgba(111,169,125,.05); } }
.lin-agora { color: var(--ok); font-size: 12px; }

/* --------------------------------------------------- o alto da ficha
   Cinco números para ler de relance, antes do formulário: é o que responde
   "quem é esse cliente" sem ninguém precisar interpretar campo por campo. */
.fx-topo {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(118px, 1fr));
  gap: 1px; background: var(--line); border: 1px solid var(--line);
}
.fx-topo__item {
  display: flex; flex-direction: column; gap: 6px;
  padding: 13px 16px; background: var(--panel);
}
.fx-topo__val {
  font-family: var(--f-mono); font-size: 15px; color: var(--gold-bright);
  line-height: 1.3; word-break: break-word;
}
.fx-topo__val--alto  { color: var(--alto); }
.fx-topo__val--calmo { color: var(--muted); font-size: 13px; }
.fx-topo__val--vivo  { color: var(--ok); font-size: 13px; }

/* ------------------------------------------------- a equipe dentro da ficha */
.fx-equipe { display: flex; flex-direction: column; gap: 1px; background: var(--line); }
.fx-pessoa {
  display: flex; align-items: center; gap: 12px; padding: 11px 14px;
  background: var(--panel); text-decoration: none; min-width: 0;
  transition: background .12s ease;
}
.fx-pessoa:hover { background: var(--field); }
.fx-pessoa__sigla {
  flex: none; width: 32px; height: 32px; border-radius: 50%;
  display: grid; place-items: center; position: relative;
  background: var(--field); border: 1px solid var(--line-3);
  font-family: var(--f-mono); font-size: 11px; color: var(--muted-2);
}
/* O anel verde na sigla é o mesmo sinal do pontinho da lista, no lugar onde
   o olho já está quando lê um nome. */
.fx-pessoa__sigla--on {
  border-color: var(--ok-line); color: var(--ok);
  box-shadow: 0 0 0 2px rgba(111,169,125,.10);
}
.fx-pessoa__quem { display: flex; flex-direction: column; gap: 3px; min-width: 0; flex: 1; }
.fx-pessoa__nome {
  font-size: 13px; color: var(--ink); display: flex; align-items: center;
  gap: 7px; flex-wrap: wrap;
}
.fx-pessoa__mail {
  font-size: 11.5px; color: var(--faint); overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap;
}
.fx-pessoa__fim { flex: none; text-align: right; font-size: 11.5px; }

.fx-selo {
  font-family: var(--f-mono); font-size: 9px; letter-spacing: .1em;
  text-transform: uppercase; padding: 2px 6px; border-radius: var(--raio);
  border: 1px solid var(--line-3); color: var(--muted-2); white-space: nowrap;
}
.fx-selo--ouro { border-color: var(--gold-edge); color: var(--gold); }
.fx-selo--frio { border-style: dashed; color: var(--faint); }

.fx-agora { display: inline-flex; align-items: center; gap: 6px; color: var(--ok); }
.fx-agora__ponto {
  width: 6px; height: 6px; border-radius: 50%; background: var(--ok);
  animation: lin-pulso 2.4s ease-in-out infinite;
}

/* ====================================================== QUEM ESTÁ ONLINE
   No alto de toda tela da administração. Fechado é um número; aberto, a
   lista de quem são e em que tela cada um está. */
.on { position: relative; }
.on__botao {
  display: inline-flex; align-items: center; gap: 7px;
  padding: 6px 12px; border-radius: var(--raio);
  background: var(--field); border: 1px solid var(--line-3);
  color: var(--muted-2); font-size: 12px; cursor: pointer;
  font-family: inherit; transition: border-color .15s ease, color .15s ease;
}
.on__botao:hover { border-color: var(--line-4); color: var(--ink); }
.on__botao[aria-expanded="true"] { border-color: var(--gold-edge); color: var(--ink); }
.on__ponto {
  width: 7px; height: 7px; border-radius: 50%; background: var(--faint-2);
  flex: none; transition: background .2s ease;
}
.on__ponto--vivo {
  background: var(--ok); box-shadow: 0 0 0 3px rgba(111,169,125,.14);
  animation: lin-pulso 2.4s ease-in-out infinite;
}
.on__n { font-family: var(--f-mono); font-size: 13px; color: var(--gold-bright); font-weight: 400; }
.on__rot { letter-spacing: .02em; }

.on__bolha {
  position: absolute; top: calc(100% + 9px); right: 0; z-index: 60;
  width: min(380px, calc(100vw - 32px));
  background: var(--panel); border: 1px solid var(--line-3);
  border-radius: var(--raio); box-shadow: 0 18px 50px rgba(0,0,0,.6);
  overflow: hidden;
}
.on__bolha[hidden] { display: none; }
.on__cab {
  display: flex; align-items: baseline; justify-content: space-between; gap: 12px;
  padding: 12px 16px; border-bottom: 1px solid var(--line);
  background: var(--field);
}
.on__cab__nota { font-size: 10.5px; }
/* A lista rola dentro da bolha: sessenta pessoas online não podem empurrar a
   bolha para fora da tela. */
.on__corpo { max-height: min(56vh, 460px); overflow-y: auto; }
.on__vazio { padding: 22px 16px; margin: 0; text-align: center; color: var(--faint); font-size: 12.5px; }

.on__linha {
  display: flex; align-items: center; gap: 11px; padding: 10px 16px;
  text-decoration: none; border-bottom: 1px solid var(--line);
  transition: background .12s ease;
}
.on__linha:last-child { border-bottom: 0; }
.on__linha:hover { background: var(--field); }
.on__sigla {
  flex: none; width: 30px; height: 30px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--carbon); border: 1px solid var(--ok-line);
  font-family: var(--f-mono); font-size: 10.5px; color: var(--ok);
}
.on__quem { display: flex; flex-direction: column; gap: 2px; min-width: 0; flex: 1; }
.on__nome {
  font-size: 12.5px; color: var(--ink); display: flex; align-items: center; gap: 6px;
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
/* A TELA EM QUE A PESSOA ESTÁ é a informação que se veio buscar: fica em
   dourado, acima do nome do escritório, que é contexto. */
.on__onde {
  font-size: 11.5px; color: var(--gold); overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap;
}
.on__esc {
  font-size: 10.5px; color: var(--faint); overflow: hidden;
  text-overflow: ellipsis; white-space: nowrap;
}
.on__selo {
  font-family: var(--f-mono); font-size: 8.5px; letter-spacing: .1em;
  text-transform: uppercase; padding: 1px 5px; border-radius: var(--raio);
  border: 1px solid var(--gold-edge); color: var(--gold); flex: none;
}
.on__quando {
  flex: none; font-family: var(--f-mono); font-size: 10.5px; color: var(--faint);
}

.op-pessoa__sigla--on {
  border-color: var(--ok-line); color: var(--ok);
  box-shadow: 0 0 0 2px rgba(111,169,125,.10);
}

/* No telefone o contador some: a barra tem o menu, a trilha e o botão de
   sair, e um quarto item espremeria os três. Quem administra pelo telefone
   vê o online abrindo a lista de escritórios. */
@media (max-width: 720px) {
  .on { display: none; }
  .fx-topo { grid-template-columns: repeat(2, 1fr); }
  .lin-corta { max-width: 18ch; }
}

/* O ESTADO DO SEGREDO DO WEBHOOK, ao lado do campo que não mostra nada.
   Campo de senha em branco não distingue "não gravei" de "está lá, só não
   aparece" — e o segredo é justamente a parte que ninguém lembra de
   configurar, porque o pagamento funciona sem ele (sem conferência nenhuma,
   que é o problema). */
.mp-estado { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; margin-top: -4px; }
.mp-selo {
  font-family: var(--f-mono); font-size: 10px; letter-spacing: .08em;
  text-transform: uppercase; padding: 3px 8px; border-radius: var(--raio);
  border: 1px solid var(--line-3); white-space: nowrap;
}
.mp-selo--ok    { border-color: var(--ok-line); color: var(--ok); background: var(--ok-bg); }
.mp-selo--falta { border-color: var(--aviso-line); color: var(--aviso); background: var(--aviso-bg); }

/* ==========================================================================
   A FICHA QUE AGE — as ações dentro da janela do escritório e da pessoa

   Antes a janela era um formulário de cadastro e nada mais: para dar um
   curso, liberar um plano ou suspender a conta era preciso sair dela, abrir
   a página inteira do escritório e perder o lugar na lista. O pedido que
   chega no suporte é sempre sobre a linha que acabou de ser clicada.

   Cada bloco é uma ação fechada, com o estado atual escrito no cabeçalho —
   "hoje: Escritório · ativa · até 12/10" —, os campos dela e o botão. Em
   duas colunas quando há largura, uma quando não há.
   ========================================================================== */
.fx-bloco { display: contents; border: 0; margin: 0; padding: 0; min-width: 0; }

.fx-acoes {
  display: grid; gap: 1px; background: var(--line);
  border: 1px solid var(--line); grid-template-columns: repeat(2, minmax(0, 1fr));
}
.fx-acao {
  display: flex; flex-direction: column; gap: 12px;
  padding: 18px 20px; background: var(--panel); min-width: 0;
}
/* Na ficha da pessoa o bloco vem sozinho, fora da grade — e sem a moldura
   de caixa ao lado de outra ele precisa da borda inteira. */
.fx-acao--reto { border: 1px solid var(--line); margin-top: 22px; }

.fx-acao__cab {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 12px; flex-wrap: wrap;
}
.fx-acao__cab b { font-size: 13.5px; color: var(--ink); }
.fx-acao__cab .nota { font-size: 11.5px; }
.fx-acao__pe { display: flex; gap: 10px; flex-wrap: wrap; align-items: center; }
/* Os campos dentro do bloco são menores: o bloco tem metade da janela. */
.fx-acao .form-grade { gap: 12px; }

/* O material já liberado, para marcar e retirar. Rádio em vez de um botão
   por linha: um botão por linha dentro de um formulário só significaria um
   `name` por linha, e a janela inteira é um formulário. */
.fx-mat { display: flex; flex-direction: column; gap: 1px; background: var(--line); }
.fx-mat__linha {
  display: flex; align-items: center; gap: 10px;
  padding: 9px 12px; background: var(--panel); cursor: pointer; min-width: 0;
}
.fx-mat__linha:hover { background: var(--field); }
.fx-mat__tit {
  flex: 1; min-width: 0; font-size: 12.5px; color: var(--ink);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.fx-mat__quando { flex: none; font-size: 11px; }

@media (max-width: 900px) {
  .fx-acoes { grid-template-columns: minmax(0, 1fr); }
}

/* "opcional" some dos campos estreitos. Numa grade de doze, um campo de duas
   ou três colunas tem largura para o rótulo e mais nada: a palavra empurrava
   "LIMITE DE USUÁRIOS" para duas linhas e desalinhava a fileira inteira. Nos
   campos largos ela continua, que é onde a informação cabe. */
.campo--c1 .campo__opc,
.campo--c2 .campo__opc,
.campo--c3 .campo__opc { display: none; }

/* ==========================================================================
   O AVISO POR CIMA DA JANELA

   A janela deixou de fechar quando se age dentro dela. Isso é o certo — quem
   dá um plano normalmente quer dar um crédito em seguida —, mas cria um
   problema novo: uma janela que reaparece igual não conta o que aconteceu.

   Este aviso é a resposta. Entra por cima do cabeçalho, diz o que foi feito e
   sai sozinho quando é boa notícia. Erro não sai sozinho: erro se lê com
   calma, e some no × ou na próxima ação.
   ========================================================================== */
.modal__caixa { position: relative; }

.jm__aviso {
  position: absolute; z-index: 6; top: 14px; left: 22px; right: 22px;
  display: flex; align-items: flex-start; gap: 11px;
  padding: 13px 14px 13px 16px; border-radius: var(--raio);
  border: 1px solid var(--ok-line); background: var(--ok-bg);
  box-shadow: 0 18px 44px rgba(0, 0, 0, .55);
  animation: jm-aviso-entra .28s var(--mola) both;
}
.jm__aviso--erro { border-color: var(--alto-line); background: var(--alto-bg); }
.jm__aviso--saindo { animation: jm-aviso-sai .38s var(--saida) both; }
@keyframes jm-aviso-entra {
  from { opacity: 0; transform: translateY(-10px); }
  to   { opacity: 1; transform: none; }
}
@keyframes jm-aviso-sai {
  from { opacity: 1; transform: none; }
  to   { opacity: 0; transform: translateY(-8px); }
}
.jm__aviso__marca { flex: none; font-size: 13px; line-height: 1.5; color: var(--ok); }
.jm__aviso--erro .jm__aviso__marca { color: var(--alto); }
.jm__aviso__txt {
  flex: 1; min-width: 0; font-size: 12.5px; line-height: 1.55; color: var(--ink);
}
.jm__aviso__x {
  flex: none; width: 22px; height: 22px; line-height: 1; padding: 0;
  background: none; border: 0; color: var(--faint); font-size: 16px; cursor: pointer;
}
.jm__aviso__x:hover { color: var(--ink); }

@media (prefers-reduced-motion: reduce) {
  .jm__aviso, .jm__aviso--saindo { animation: none; }
}

/* A aba com conteúdo rolável: o corpo da janela rola, o cabeçalho, as abas e
   o pé ficam. Com cinco abas, a mais longa (o extrato) não pode empurrar a
   janela para fora da tela. */
.jm__corpo[data-pane] { max-height: none; }

/* ==========================================================================
   O FINANCEIRO DO CLIENTE — app/paginas/painel/financeiro.php
   ==========================================================================

   Esta tela é lida por quem fecha o mês da banca, e não por quem está
   comprando. A ordem visual obedece a isso: primeiro os quatro números que
   respondem "quanto saiu", depois o que ainda falta pagar (a única parte com
   algo a fazer), e só então a lista. Uma tabela de cinquenta linhas no alto
   não responde pergunta nenhuma — ela adia todas. */

.fin-kpis {
  display: grid; gap: 14px; margin-top: 24px;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
}
.fin-kpi {
  display: flex; flex-direction: column; gap: 6px;
  padding: 18px 20px; background: var(--field);
  border: 1px solid var(--line-2); border-radius: var(--raio);
}
.fin-kpi--ouro { border-color: var(--gold-edge); background: rgba(214, 178, 94, .05); }
.fin-kpi--espera { border-color: var(--gold); background: rgba(214, 178, 94, .07); }

.fin-kpi__rot {
  font-size: 10.5px; letter-spacing: .12em; text-transform: uppercase; color: var(--muted-2);
}
.fin-kpi__val {
  font-size: 26px; line-height: 1.1; letter-spacing: -0.02em; color: var(--ink-hi);
  font-variant-numeric: tabular-nums;
}
.fin-kpi--ouro .fin-kpi__val, .fin-kpi--espera .fin-kpi__val { color: var(--gold); }
.fin-kpi__pe { font-size: 11.5px; line-height: 1.5; color: var(--muted-2); }

/* ------------------------------------------------------- o que falta pagar

   Em destaque e ANTES da lista, porque é a única parte acionável da tela. Um
   boleto gerado e esquecido no meio de quarenta linhas pagas é um boleto que
   vence. */

.fin-pendentes {
  display: flex; flex-direction: column; gap: 12px; margin-top: 22px;
  padding: 18px 20px; border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: rgba(214, 178, 94, .04);
}
.fin-pend {
  display: flex; gap: 16px; align-items: center; justify-content: space-between;
  flex-wrap: wrap;
  padding: 13px 15px; background: var(--field);
  border: 1px solid var(--line-3); border-radius: var(--raio);
}
.fin-pend__nome { font-size: 14.5px; line-height: 1.35; color: var(--ink-hi); font-weight: 600; }
.fin-pend__val {
  font-size: 17px; color: var(--gold); font-variant-numeric: tabular-nums;
}

/* ---------------------------------------------------- o gráfico e o plano */

.fin-grade {
  display: grid; gap: 20px; margin-top: 22px; align-items: start;
  grid-template-columns: minmax(0, 1.5fr) minmax(0, 1fr);
}
@media (max-width: 860px) { .fin-grade { grid-template-columns: minmax(0, 1fr); } }

/* Barras e não linha: o gasto de uma banca é um evento por mês, não uma
   curva. Linha entre dois pontos distantes inventa um caminho que não
   existiu. */
.fin-barras {
  display: grid; gap: 6px; grid-auto-flow: column; grid-auto-columns: minmax(0, 1fr);
  align-items: end; height: 148px;
}
.fin-barra { display: flex; flex-direction: column; gap: 7px; height: 100%; min-width: 0; }
.fin-barra__tubo {
  flex: 1; display: flex; align-items: flex-end;
  background: var(--line); border-radius: var(--raio);
}
.fin-barra__cheio {
  width: 100%; border-radius: var(--raio);
  background: var(--gold-grad);
}
.fin-barra__cheio--zero { background: var(--line-3); }
.fin-barra__rot {
  font-size: 9.5px; letter-spacing: .04em; color: var(--muted-2); text-align: center;
  white-space: nowrap;
}

.fin-plano__nome { font-size: 20px; line-height: 1.2; color: var(--ink-hi); }

.fin-lista { display: flex; flex-direction: column; gap: 0; margin: 0; }
.fin-lista > div {
  display: flex; gap: 14px; justify-content: space-between; align-items: baseline;
  padding: 9px 0; border-bottom: 1px solid var(--line);
}
.fin-lista > div:last-child { border-bottom: 0; }
.fin-lista dt { font-size: 12px; color: var(--muted-2); margin: 0; }
.fin-lista dd { font-size: 12.5px; color: var(--ink); margin: 0; text-align: right; }

/* --------------------------------------------------------------- a tabela */

.fin-cab {
  display: flex; gap: 16px; align-items: flex-start; justify-content: space-between;
  flex-wrap: wrap;
}
.fin-filtros { display: flex; gap: 6px; flex-wrap: wrap; align-items: center; }
.fin-fil {
  font-size: 11.5px; padding: 5px 11px; color: var(--muted-2);
  border: 1px solid var(--line-3); border-radius: var(--raio); background: var(--field);
  transition: color .16s, border-color .16s;
}
.fin-fil:hover { color: var(--ink); border-color: var(--line-4); }
.fin-fil--viva { color: var(--gold); border-color: var(--gold-edge); background: rgba(214, 178, 94, .07); }
.fin-fil__risco { width: 1px; height: 18px; background: var(--line-3); margin: 0 4px; }

/* Numa tabela de dinheiro, a rolagem lateral no telefone é melhor do que
   empilhar: a coluna do valor precisa ficar alinhada com a de cima para o
   olho somar sozinho. */
.tabela-rolo { overflow-x: auto; -webkit-overflow-scrolling: touch; }

.fin-tabela { border-left: 0; border-right: 0; min-width: 620px; }
.fin-quando { white-space: nowrap; display: flex; flex-direction: column; gap: 2px; }
.fin-oque { font-size: 13.5px; color: var(--ink); line-height: 1.35; }
.fin-forma { font-size: 12.5px; color: var(--muted); white-space: nowrap; }
.fin-dir { text-align: right; }
.fin-valor { font-variant-numeric: tabular-nums; color: var(--ink-hi); white-space: nowrap; }

.fin-selo {
  display: inline-block; font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase;
  padding: 3px 9px; border-radius: 999px; border: 1px solid transparent; white-space: nowrap;
}
.fin-selo--ok { color: var(--ok); border-color: rgba(111, 169, 125, .4); background: rgba(111, 169, 125, .09); }
.fin-selo--espera { color: var(--gold); border-color: var(--gold-edge); background: rgba(214, 178, 94, .09); }
.fin-selo--nao { color: var(--alto); border-color: rgba(232, 132, 111, .4); background: rgba(232, 132, 111, .08); }
.fin-selo--frio { color: var(--muted-2); border-color: var(--line-3); background: var(--field); }

.fin-acao { font-size: 12px; color: var(--gold); white-space: nowrap; }
.fin-acao:hover { color: var(--gold-bright); }

/* O cartão que o emissor ainda está analisando. Sem botão de propósito: a
   única coisa errada que a pessoa pode fazer aqui é passar o cartão de novo. */
.fin-analise {
  display: flex; gap: 12px; align-items: flex-start; margin-top: 22px;
  padding: 14px 16px; border: 1px solid var(--line-3); border-radius: var(--raio);
  background: var(--field); font-size: 12.5px; line-height: 1.65; color: var(--muted);
}

/* NO TELEFONE, DOZE RÓTULOS NÃO CABEM — eles se encavalam e viram uma tira
   ilegível de "out/25nov/25dez/25". Um a cada três basta para situar o olho
   na linha do tempo, e as barras continuam todas lá. */
@media (max-width: 700px) {
  .fin-barra:not(:nth-child(3n + 1)) .fin-barra__rot { visibility: hidden; }
}

/* ==========================================================================
   A JANELA DE PAGAR — app/paginas/pagamento/pagar.php
   ==========================================================================

   Pagar é um parêntese: começa, acaba, e devolve a pessoa onde ela estava.
   Por isso é JANELA e não página — o painel fica atrás, escurecido, dizendo
   sem palavras que ninguém saiu do lugar.

   E a janela não fecha sozinha. Não fecha por clique fora, não fecha por Esc,
   não tem X no canto. A única saída é o "Cancelar e voltar" do rodapé. Perder
   a tela no meio de um pagamento é o pior defeito que ela poderia ter: a
   pessoa não sabe se pagou, o pedido fica pendurado, e alguém precisa
   descobrir isso pelo extrato. */

/* ==========================================================================
   A PALETA DA JANELA — CARVÃO
   ==========================================================================

   O site é dourado sobre quase-preto, e a janela de pagar era dourada junto.
   Aqui ela deixa de ser: preto, branco e cinza, e nada mais.

   O motivo não é gosto. Ouro é a cor com que este site diz "isto é seu, isto
   é valor" — o saldo, o plano, o crédito. Numa tela em que a pessoa entrega
   um número de cartão, a mesma cor vira insistência: tudo brilha, e o que
   brilha parece estar pedindo. Em carvão, a única coisa clara da tela é o
   botão de pagar, e é para ele que o olho vai depois de preencher.

   A TROCA É FEITA NOS PRÓPRIOS SÍMBOLOS, e não regra por regra. Redefinidos
   aqui dentro, eles valem para tudo o que a janela contém — inclusive para
   `.btn`, que monta o botão a partir de `--gold-grad` sem saber de nada
   disto. Fora da janela, o dourado do site continua exatamente como era. */

.pg-fundo {
  --gold:        #FFFFFF;
  --gold-bright: #FFFFFF;
  --gold-deep:   #8E8E8E;
  --gold-edge:   #2C2C2C;
  --gold-grad:   linear-gradient(160deg, #FFFFFF 0%, #F2F2F2 55%, #DEDEDE 100%);

  --raised:  #0D0D0D;
  --panel:   #0D0D0D;
  --field:   #070707;
  --carbon:  #0A0A0A;

  --line:    #161616;
  --line-2:  #1F1F1F;
  --line-3:  #242424;
  --line-4:  #2C2C2C;

  --ink:     #E8E8E8;
  --ink-hi:  #FFFFFF;
  --muted:   #8E8E8E;
  --muted-2: #7A7A7A;
  --faint:   #5E5E5E;

  background: rgba(3, 3, 3, .9);
  backdrop-filter: blur(3px);
  align-items: start;
  /* A MARGEM DE BAIXO NÃO É ENFEITE. Com a janela alta, o rodapé encostava no
     fim da tela e o "Cancelar e voltar" ficava colado na borda — no telefone,
     em cima da barra de gestos do sistema. Os 40 px embaixo são o respiro que
     faz o pé da janela existir. */
  padding: 32px 20px 40px;
  overflow-y: auto;
  overscroll-behavior: contain;
}
.pg-fundo .caixa.pg-caixa {
  /* DUAS COLUNAS PEDEM LARGURA. Empilhado, o cartão desenhado empurrava o
     botão de pagar para baixo da dobra num notebook — e botão abaixo da dobra
     é botão que não existe. Com 860, o desenho fica de um lado e os campos do
     outro, e a janela inteira cabe na tela. */
  width: min(960px, 100%);
  max-width: 960px;
  padding: 0;
  overflow: hidden;
  position: relative;
  margin-bottom: 8px;
  border-color: var(--gold-edge);
  box-shadow: 0 32px 80px rgba(0, 0, 0, .6);
}
@media (max-width: 620px) {
  .pg-fundo { padding: 0 0 28px; }
  .pg-fundo .caixa.pg-caixa { min-height: 100vh; border: 0; border-radius: 0; margin-bottom: 0; }
}

/* O PAINEL ATRÁS NÃO ROLA JUNTO. Sem isto, girar a roda sobre a janela rolava
   a tela de trás — e quem estava no meio de um Pix via o painel passar por
   baixo, o que parece defeito mesmo quando não é. */
html.pg-travado, html.pg-travado body { overflow: hidden; }

/* ------------------------------------------------------------------ o alto */

.pg-cab {
  display: flex; gap: 18px; align-items: flex-start; justify-content: space-between;
  padding: 22px 26px 18px;
  border-bottom: 1px solid var(--line-2);
  background: #121212;
}
.pg-cab__oque { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
.pg-cab__item {
  font-size: 19px; line-height: 1.25; color: var(--ink-hi); margin: 0;
  font-family: inherit; letter-spacing: 0;
}
.pg-cab__valor { display: flex; flex-direction: column; align-items: flex-end; flex: none; }
.pg-cab__num {
  font-size: 27px; line-height: 1.1; letter-spacing: -0.02em; color: var(--gold);
  font-variant-numeric: tabular-nums; white-space: nowrap;
}
.pg-cab__pe { font-size: 11px; color: var(--muted-2); }

.pg-aviso {
  margin: 16px 24px 0;
  font-size: 12.5px; line-height: 1.6; color: var(--muted);
  padding: 11px 13px; border: 1px solid var(--gold-edge); border-radius: var(--raio);
  background: rgba(214, 178, 94, .05);
}
.pg-aviso b { color: var(--ink); }

/* ---------------------------------------------------------------- as portas */

.pg-abas {
  display: grid; gap: 8px; padding: 18px 26px 0;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
}
.pg-aba {
  display: flex; gap: 9px; align-items: center; text-align: left;
  padding: 11px 12px; cursor: pointer;
  background: var(--field); color: var(--muted);
  border: 1px solid var(--line-3); border-radius: var(--raio);
  transition: border-color .18s, color .18s, background .18s;
}
.pg-aba:hover { border-color: var(--line-4); color: var(--ink); }
.pg-aba--viva {
  border-color: var(--gold); color: var(--ink-hi);
  background: rgba(255, 255, 255, .06);
}
.pg-aba__ic { flex: none; display: flex; color: currentColor; opacity: .75; }
.pg-aba--viva .pg-aba__ic { color: var(--gold); opacity: 1; }
.pg-aba__txt { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.pg-aba__nome { font-size: 13.5px; font-weight: 600; line-height: 1.25; }
.pg-aba__pe { font-size: 10.5px; line-height: 1.3; color: var(--muted-2); }
.pg-aba--viva .pg-aba__pe { color: var(--gold-deep); }

.pg-corpo { padding: 20px 26px 4px; }
.pg-painel { display: block; }

/* ----------------------------------------------- o cartão de um lado, os
   campos do outro */

.pg-dois {
  display: grid; gap: 24px; align-items: start;
  grid-template-columns: 300px minmax(0, 1fr);
}
.pg-dois__lado { position: sticky; top: 0; }
.pg-dois__campos { min-width: 0; display: flex; flex-direction: column; }
@media (max-width: 760px) {
  .pg-dois { grid-template-columns: minmax(0, 1fr); gap: 16px; }
  .pg-dois__lado { position: static; }
}

.pg-recado {
  font-size: 13px; line-height: 1.6; color: var(--alto);
  padding: 11px 13px; margin-bottom: 16px;
  border: 1px solid var(--alto); border-radius: var(--raio);
  background: rgba(232, 132, 111, .07);
}

.pg-miudo { font-size: 12.5px; line-height: 1.65; margin: 0 0 16px; }
.pg-campos { display: flex; flex-direction: column; gap: 14px; margin-bottom: 18px; }
.pg-linha2 { display: grid; gap: 14px; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }

/* NÚMERO, VALIDADE E CÓDIGO NA MESMA LINHA. Um abaixo do outro, os três
   somavam mais de duzentos pixels de altura e empurravam o botão de pagar
   para fora da tela. É a ordem em que eles estão impressos no cartão, e é a
   ordem em que a mão os digita. */
.pg-linha3 {
  display: grid; gap: 12px;
  grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr) minmax(0, 1.05fr);
  align-items: end;
}
.pg-linha3 > .campo { min-width: 0; }

/* OS RÓTULOS DESTA JANELA NÃO QUEBRAM LINHA.
   "Nome como está no cartão" e "Código de segurança" viravam duas linhas e
   empurravam a caixa de baixo, deixando os campos em degrau. São três coisas
   somadas que resolvem: a linha única obrigatória, o espaçamento entre letras
   reduzido de .13em para .09em, e a coluna do código de segurança alargada —
   nenhuma delas basta sozinha. O corte com reticências é a rede: numa fonte
   que não veio, o rótulo encurta em vez de escapar da caixa. */
.pg-caixa .campo > label {
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
  letter-spacing: .09em; line-height: 1.3;
}
/* NO CELULAR, O NÚMERO OCUPA A LINHA INTEIRA e validade e código dividem a de
   baixo — é a ordem em que a mão digita. Nome e documento ficam um embaixo do
   outro: lado a lado virariam duas caixas de 160 px, estreitas demais para um
   nome inteiro e para um CNPJ formatado. */
@media (max-width: 760px) {
  .pg-linha3 { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .pg-linha3 > .campo:first-child { grid-column: 1 / -1; }
  .pg-linha2 { grid-template-columns: minmax(0, 1fr); }
}

.pg-pagar { width: 100%; justify-content: center; margin-top: 2px; }
.pg-pagar:disabled { opacity: .45; cursor: not-allowed; filter: grayscale(.4); }

.pg-carregando,
.pg-esperando {
  display: flex; gap: 10px; align-items: center;
  font-size: 12.5px; line-height: 1.5; color: var(--muted-2);
}
.pg-carregando { padding: 14px 0 0; }

.pg-girando {
  flex: none; width: 13px; height: 13px; border-radius: 50%;
  border: 2px solid var(--line-4); border-top-color: var(--gold);
  animation: pg-gira .8s linear infinite;
}
@keyframes pg-gira { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .pg-girando { animation-duration: 3s; } }

/* ==========================================================================
   O DESENHO DO CARTÃO
   ==========================================================================

   Ele mostra o que a página REALMENTE sabe: a bandeira, os primeiros dígitos
   e o nome do titular. O resto do número fica em bolinhas — não por enfeite,
   mas porque esses dígitos nunca chegam até aqui. Eles são digitados dentro
   de um enquadramento do Mercado Pago e saem de lá como fichinha.

   O que falta no desenho é exatamente a garantia que o rodapé promete. */

.crt {
  perspective: 1100px;
  margin: 0 auto 14px;
  width: 100%; max-width: 300px; aspect-ratio: 1.586;
}

/* ==========================================================================
   A TIRA — o cartão desenhado, no celular
   ==========================================================================

   No computador o cartão inteiro cabe ao lado dos campos e não custa nada. No
   celular ele custa: cento e noventa pixels de altura empilhados em cima do
   formulário, que jogam o botão de pagar para baixo da dobra. Botão abaixo da
   dobra é botão que metade das pessoas não encontra.

   A tira guarda o que o desenho tinha de informativo — a bandeira e os
   primeiros dígitos, que são tudo o que esta página chega a saber do cartão —
   e devolve a altura. Os dois nunca aparecem juntos. */

.crt-faixa { display: none; }

@media (max-width: 760px) {
  .crt { display: none; }
  .crt-faixa {
    display: flex; align-items: center; gap: 12px;
    padding: 12px 14px; margin-bottom: 14px;
    border: 1px solid var(--line-4); border-radius: 8px;
    background:
      radial-gradient(120% 140% at 12% 8%, rgba(255, 255, 255, .06), transparent 55%),
      linear-gradient(145deg, #1E1E1E 0%, #131313 55%, #0A0A0A 100%);
  }
  .crt-faixa__chip {
    flex: none; width: 30px; height: 22px; border-radius: 3px;
    background: linear-gradient(140deg, #D2D2D2, #858585 45%, #E8E8E8 75%, #6A6A6A);
    box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .35);
  }
  .crt-faixa__num {
    flex: 1; min-width: 0;
    font-family: var(--f-mono); font-size: 13.5px; letter-spacing: .04em;
    color: var(--faint); white-space: nowrap; overflow: hidden;
  }
  .crt-faixa__num .crt-faixa__real { color: var(--ink-hi); }
  .crt-faixa__band {
    flex: none; font-size: 10.5px; letter-spacing: .06em; text-transform: uppercase;
    color: var(--muted); min-height: 14px;
  }
}
.crt__giro {
  position: relative; width: 100%; height: 100%;
  transform-style: preserve-3d; -webkit-transform-style: preserve-3d;
  transition: transform .55s cubic-bezier(.2, .7, .2, 1);
}
.crt--verso .crt__giro { transform: rotateY(180deg); }
@media (prefers-reduced-motion: reduce) { .crt__giro { transition: none; } }

/* A VIRADA NÃO PODE DEPENDER SÓ DE `backface-visibility`.
   Em parte dos navegadores — e no que tira as capturas de tela desta base —
   a face de trás vaza pela da frente, e a tarja preta do verso aparece
   atravessada no meio do cartão. Trocar a visibilidade na metade da virada
   resolve em todos eles, e não muda nada onde a propriedade já funcionava. */
.crt__frente { visibility: visible; }
.crt__verso { visibility: hidden; }
.crt--verso .crt__frente { visibility: hidden; }
.crt--verso .crt__verso { visibility: visible; }
.crt__face { transition: visibility 0s linear .28s; }
@media (prefers-reduced-motion: reduce) { .crt__face { transition: none; } }

.crt__face {
  position: absolute; inset: 0;
  backface-visibility: hidden; -webkit-backface-visibility: hidden;
  border-radius: 12px; padding: 18px 20px;
  display: flex; flex-direction: column;
  border: 1px solid var(--line-4);
  /* O CARTÃO TAMBÉM É CARVÃO. O desenho nasceu com um brilho dourado no
     canto e um marrom quente no fundo — bonito ao lado do painel, estranho
     dentro de uma janela onde tudo o mais é preto e branco. */
  background:
    radial-gradient(120% 140% at 12% 8%, rgba(255, 255, 255, .07), transparent 55%),
    linear-gradient(145deg, #1E1E1E 0%, #131313 55%, #0A0A0A 100%);
  box-shadow: 0 16px 36px rgba(0, 0, 0, .5), inset 0 1px 0 rgba(255, 255, 255, .04);
}
.crt__verso { transform: rotateY(180deg); justify-content: flex-start; }

.crt__topo { display: flex; align-items: center; justify-content: space-between; }
.crt__chip {
  width: 38px; height: 28px; border-radius: 5px;
  background: linear-gradient(140deg, #D2D2D2, #858585 45%, #E8E8E8 75%, #6A6A6A);
  box-shadow: inset 0 0 0 1px rgba(0, 0, 0, .3);
  position: relative;
}
.crt__chip::after {
  content: ''; position: absolute; inset: 5px 7px;
  border: 1px solid rgba(0, 0, 0, .28); border-radius: 2px;
  border-left-width: 2px; border-right-width: 2px;
}
.crt__bandeira {
  font-size: 12px; letter-spacing: .06em; text-transform: uppercase;
  color: var(--muted-2); min-height: 16px;
  transition: color .25s;
}
.crt__bandeira--visa, .crt__bandeira--debvisa { color: #E4E9F5; }
.crt__bandeira--master, .crt__bandeira--debmaster { color: #F0A05A; }
.crt__bandeira--elo, .crt__bandeira--debelo { color: #E8D48A; }
.crt__bandeira--amex { color: #8FC7E8; }
.crt__bandeira--hipercard { color: #E8846F; }

.crt__numero {
  display: flex; gap: 14px; margin: auto 0 14px;
  font-family: var(--f-mono);
  font-size: 17px; letter-spacing: .06em; color: var(--faint);
  transition: color .25s;
}
.crt__numero span { transition: color .3s; }
.crt__grupo--real { color: var(--ink-hi); }

.crt__pe { display: flex; gap: 16px; align-items: flex-end; justify-content: space-between; }
.crt__campo { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.crt__campo--val { flex: none; text-align: right; }
.crt__rot {
  font-size: 8.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--faint);
}
.crt__val {
  font-size: 12px; letter-spacing: .05em; color: var(--ink);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis; max-width: 200px;
}
.crt__val--vazio { color: var(--faint); }

/* O campo em foco acende a região correspondente do cartão. É o que faz o
   desenho parecer ligado ao formulário, e não um adesivo em cima dele. */
.crt[data-foco="numero"] .crt__numero { color: var(--muted); }
.crt[data-foco="numero"] .crt__grupo--real { color: var(--ink-hi); }
.crt[data-foco="validade"] .crt__campo--val .crt__val { color: var(--ink-hi); }
.crt[data-foco="validade"] .crt__campo--val .crt__rot { color: var(--muted); }

.crt__tarja { height: 42px; margin: 14px -20px 16px; background: #0A0806; }
.crt__cvv { display: flex; flex-direction: column; gap: 4px; align-items: flex-end; }
.crt__cvvcaixa {
  font-family: var(--f-mono); font-size: 13px; letter-spacing: .2em;
  color: #12100D; background: #D9D3C6; border-radius: 3px; padding: 5px 12px;
}
.crt__nota {
  margin: auto 0 0; font-size: 9.5px; line-height: 1.5; color: var(--faint);
}

/* Os enquadramentos do gateway: por fora, um campo nosso; por dentro, deles. */
.pg-seguro {
  height: 46px; padding: 0 13px;
  background: var(--field); border: 1px solid var(--line-3); border-radius: var(--raio);
  transition: border-color .18s, box-shadow .18s;
}
.pg-seguro iframe { height: 100%; width: 100%; display: block; }
.pg-seguro:focus-within { border-color: var(--gold); box-shadow: 0 0 0 3px rgba(255, 255, 255, .10); }

.campo__dica--erro { color: var(--alto); }

/* ---------------------------------------------------------------------- pix */

.pg-pix { display: grid; gap: 20px; grid-template-columns: 208px minmax(0, 1fr); align-items: start; }
@media (max-width: 560px) { .pg-pix { grid-template-columns: minmax(0, 1fr); justify-items: center; } }

.pg-pix__qr {
  padding: 12px; background: #FFFFFF; border-radius: var(--raio);
  border: 1px solid var(--line-3); line-height: 0; width: 100%; max-width: 208px;
}
.pg-pix__qr img { width: 100%; height: auto; display: block; }
.pg-pix__lado { display: flex; flex-direction: column; gap: 10px; min-width: 0; width: 100%; }

.pg-codigo {
  font-family: var(--f-mono); font-size: 11px; line-height: 1.5;
  resize: none; word-break: break-all;
}
.pg-relogio { font-size: 12px; color: var(--gold); font-variant-numeric: tabular-nums; }

.pg-boleto { display: flex; flex-direction: column; gap: 10px; }

/* O BOLETO ABRE AQUI DENTRO. Em outra aba, o navegador tratava a abertura
   como pop-up — porque ela vinha depois de uma resposta de rede — e a
   bloqueava sem avisar: do lado de quem clicou, um botão que não fazia nada. */
.pg-boleto__quadro {
  position: relative;
  border: 1px solid var(--line-3); border-radius: var(--raio);
  background: #FFFFFF; overflow: hidden; height: 460px;
}
.pg-boleto__quadro iframe { position: relative; z-index: 1; width: 100%; height: 100%; border: 0; display: block; }
.pg-boleto__recado {
  position: absolute; inset: 0; z-index: 0; margin: 0;
  display: flex; align-items: center; justify-content: center; text-align: center;
  padding: 24px; font-size: 12.5px; line-height: 1.7; color: #4A4335;
}
.pg-boleto__recado b { color: #12100D; }
@media (max-width: 620px) { .pg-boleto__quadro { height: 320px; } }

.pg-pix__semqr {
  margin: 0; font-size: 11.5px; line-height: 1.5; color: #4A4335; text-align: center;
}

/* ------------------------------------------------------------- o endereço */

.pg-endereco { display: flex; flex-direction: column; gap: 12px; }
.pg-link {
  background: none; border: 0; padding: 0; cursor: pointer;
  color: var(--gold); font-size: inherit; font-family: inherit; text-decoration: underline;
}
.pg-link:hover { color: var(--gold-bright); }

/* ------------------------------------------------------------------- o pé */

.pg-pe {
  display: flex; gap: 14px; align-items: center; justify-content: space-between;
  flex-wrap: wrap;
  padding: 16px 26px; margin-top: 18px;
  border-top: 1px solid var(--line-2); background: #121212;
}

/* A ÚNICA SAÍDA DA JANELA. Por isso é um alvo de verdade — com moldura, com
   área de clique, e não um link perdido no canto. */
.pg-voltar {
  display: inline-flex; align-items: center; gap: 7px;
  font-size: 12.5px; color: var(--muted); padding: 8px 13px;
  border: 1px solid var(--line-3); border-radius: var(--raio);
  transition: color .18s, border-color .18s, background .18s;
}
.pg-voltar:hover { color: var(--ink); border-color: var(--line-4); background: var(--raised); }
.pg-voltar--pisca {
  animation: pg-pisca .45s ease-in-out 2;
  border-color: var(--gold); color: var(--gold);
}
@keyframes pg-pisca {
  50% { box-shadow: 0 0 0 4px rgba(255, 255, 255, .16); }
}
@media (prefers-reduced-motion: reduce) { .pg-voltar--pisca { animation: none; } }

.pg-selo {
  display: inline-flex; align-items: center; gap: 6px;
  font-size: 10.5px; color: var(--faint);
}

/* -------------------------------------------------------------- confirmado */

.pg-pronto {
  position: absolute; inset: 0; z-index: 3;
  display: flex; flex-direction: column; gap: 14px;
  align-items: center; justify-content: center; text-align: center;
  padding: 40px 32px;
  background: var(--raised);
  animation: lb-fade .3s ease-out;
}
.pg-pronto__marca {
  width: 54px; height: 54px; border-radius: 50%;
  display: flex; align-items: center; justify-content: center;
  font-size: 26px; color: #12100D; background: var(--ok);
}
