/* =====================================================================
   RAF — Radar de Afiliados
   Tokens em HSL, três temas por data-theme no <html>, mesma convenção do HIF.
   Fonte: Archivo (corpo) + Archivo Narrow (dados densos e rótulos).
   ===================================================================== */

:root {
  --radius: 0.75rem;
  --fonte-corpo: "Archivo", system-ui, sans-serif;
  --fonte-dados: "Archivo Narrow", "Archivo", sans-serif;
}

/* Navy Executivo — padrão */
html[data-theme="navy"] {
  --fundo: 218 42% 9%;
  --superficie: 218 34% 13%;
  --superficie-alta: 218 30% 17%;
  --borda: 218 24% 24%;
  --texto: 210 30% 94%;
  --texto-fraco: 214 16% 64%;
  --acento: 199 89% 54%;
  --acento-texto: 218 42% 9%;
  --alta: 152 58% 48%;
  --baixa: 4 72% 60%;
  --neutro: 214 14% 52%;
}

/* Claro Executivo */
html[data-theme="claro"] {
  --fundo: 210 24% 97%;
  --superficie: 0 0% 100%;
  --superficie-alta: 210 28% 94%;
  --borda: 214 20% 84%;
  --texto: 218 38% 14%;
  --texto-fraco: 216 12% 44%;
  --acento: 205 84% 38%;
  --acento-texto: 0 0% 100%;
  --alta: 152 62% 32%;
  --baixa: 4 66% 46%;
  --neutro: 214 12% 46%;
}

/* Grafite */
html[data-theme="grafite"] {
  --fundo: 220 6% 11%;
  --superficie: 220 5% 15%;
  --superficie-alta: 220 5% 19%;
  --borda: 220 5% 26%;
  --texto: 220 8% 92%;
  --texto-fraco: 220 6% 62%;
  --acento: 38 92% 56%;
  --acento-texto: 220 6% 11%;
  --alta: 152 46% 52%;
  --baixa: 8 68% 60%;
  --neutro: 220 5% 52%;
}

* { box-sizing: border-box; }

/* `hidden` é regra do navegador com a menor prioridade que existe: qualquer
   `display` daqui vence (o `label { display: flex }` mostrava "Seu nome" no
   login comum, campo que só existe no primeiro acesso). */
[hidden] { display: none !important; }

body {
  margin: 0;
  font-family: var(--fonte-corpo);
  background: hsl(var(--fundo));
  color: hsl(var(--texto));
  font-size: 15px;
  line-height: 1.5;
}

/* ------------------------------------------------------------- cabeçalho */
.topo {
  display: flex;
  align-items: center;
  gap: 1.5rem;
  flex-wrap: wrap;
  padding: 0.9rem 1.5rem;
  background: hsl(var(--superficie));
  border-bottom: 1px solid hsl(var(--borda));
  position: sticky;
  top: 0;
  z-index: 20;
}

.topo-marca { display: flex; align-items: center; gap: 0.7rem; }
.marca-simbolo { width: 34px; height: 34px; color: hsl(var(--acento)); }
.marca-texto { display: flex; flex-direction: column; line-height: 1.1; }
.marca-texto strong {
  font-family: var(--fonte-dados);
  font-size: 1.35rem;
  letter-spacing: 0.14em;
}
.marca-texto span {
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: hsl(var(--texto-fraco));
}

.abas { display: flex; gap: 0.25rem; flex: 1; flex-wrap: wrap; }
.aba {
  background: none;
  border: none;
  color: hsl(var(--texto-fraco));
  font-family: var(--fonte-corpo);
  font-size: 0.9rem;
  font-weight: 500;
  padding: 0.5rem 0.85rem;
  border-radius: var(--radius);
  cursor: pointer;
}
.aba:hover { background: hsl(var(--superficie-alta)); color: hsl(var(--texto)); }
.aba.ativa { background: hsl(var(--superficie-alta)); color: hsl(var(--acento)); }
.aba:focus-visible { outline: 2px solid hsl(var(--acento)); outline-offset: 2px; }

.topo-acoes { display: flex; gap: 0.5rem; align-items: center; }

/* ------------------------------------------------------------- controles */
.botao {
  font-family: var(--fonte-corpo);
  font-size: 0.88rem;
  font-weight: 600;
  padding: 0.5rem 0.95rem;
  border-radius: var(--radius);
  border: 1px solid hsl(var(--borda));
  background: hsl(var(--superficie-alta));
  color: hsl(var(--texto));
  cursor: pointer;
}
.botao:hover { border-color: hsl(var(--acento)); }
.botao.primario {
  background: hsl(var(--acento));
  color: hsl(var(--acento-texto));
  border-color: hsl(var(--acento));
}
.botao.fantasma { background: none; border-color: transparent; }
/* Ação destrutiva: a cor é o aviso que vem antes do diálogo de confirmação. */
.botao.perigo { border-color: hsl(0 60% 45%); color: hsl(0 75% 72%); }
.botao.perigo:hover { border-color: hsl(0 70% 58%); background: hsl(0 45% 18%); }
.botao:focus-visible { outline: 2px solid hsl(var(--acento)); outline-offset: 2px; }
.botao[disabled] { opacity: 0.55; cursor: progress; }

input, select {
  font-family: var(--fonte-corpo);
  font-size: 0.88rem;
  padding: 0.45rem 0.6rem;
  border-radius: calc(var(--radius) - 0.25rem);
  border: 1px solid hsl(var(--borda));
  background: hsl(var(--fundo));
  color: hsl(var(--texto));
  width: 100%;
}
input:focus-visible, select:focus-visible {
  outline: 2px solid hsl(var(--acento));
  outline-offset: 1px;
}

label {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  font-family: var(--fonte-dados);
  font-size: 0.72rem;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: hsl(var(--texto-fraco));
}

/* ---------------------------------------------------------------- layout */
main { padding: 1.5rem; max-width: 1500px; margin: 0 auto; }

.faixa {
  padding: 0.6rem 1.5rem;
  background: hsl(var(--acento) / 0.14);
  border-bottom: 1px solid hsl(var(--acento) / 0.4);
  font-size: 0.85rem;
  color: hsl(var(--texto));
}

.painel { display: none; }
.painel.ativo { display: block; }
.oculto { display: none !important; }

.cartao {
  background: hsl(var(--superficie));
  border: 1px solid hsl(var(--borda));
  border-radius: var(--radius);
  padding: 1.25rem;
  margin-bottom: 1.25rem;
}
.cartao h2 { margin: 0 0 0.25rem; font-size: 1.05rem; }
.nota { color: hsl(var(--texto-fraco)); font-size: 0.85rem; margin: 0 0 1rem; }

.filtros, .formulario {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 0.75rem;
  align-items: end;
  margin-bottom: 1.25rem;
}
.formulario { margin-bottom: 0; }
.campos-credencial {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 0.75rem;
  grid-column: 1 / -1;
}

/* ----------------------------------------------------------- indicadores */
.indicadores {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 0.75rem;
  margin-bottom: 1.5rem;
}
.indicador {
  background: hsl(var(--superficie));
  border: 1px solid hsl(var(--borda));
  border-radius: var(--radius);
  padding: 0.85rem 1rem;
}
.indicador .valor {
  font-family: var(--fonte-dados);
  font-size: 1.7rem;
  font-weight: 700;
  line-height: 1.1;
}
.indicador .rotulo {
  font-family: var(--fonte-dados);
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: hsl(var(--texto-fraco));
}

/* --------------------------------------------------------------- tabelas */
.tabela-caixa {
  background: hsl(var(--superficie));
  border: 1px solid hsl(var(--borda));
  border-radius: var(--radius);
  overflow: auto;
}
table { width: 100%; border-collapse: collapse; font-size: 0.86rem; }
th {
  font-family: var(--fonte-dados);
  font-size: 0.7rem;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: hsl(var(--texto-fraco));
  text-align: left;
  padding: 0.7rem 0.85rem;
  border-bottom: 1px solid hsl(var(--borda));
  white-space: nowrap;
  position: sticky;
  top: 0;
  background: hsl(var(--superficie));
}
td {
  padding: 0.65rem 0.85rem;
  border-bottom: 1px solid hsl(var(--borda) / 0.5);
  vertical-align: middle;
}
tbody tr:hover { background: hsl(var(--superficie-alta)); }
.num { font-family: var(--fonte-dados); text-align: right; font-variant-numeric: tabular-nums; }
.titulo-produto {
  display: block;
  max-width: 340px;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.sub { color: hsl(var(--texto-fraco)); font-size: 0.75rem; }
.vazio { padding: 2.5rem 1rem; text-align: center; color: hsl(var(--texto-fraco)); }

.etiqueta {
  display: inline-block;
  font-family: var(--fonte-dados);
  font-size: 0.68rem;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  padding: 0.15rem 0.5rem;
  border-radius: 999px;
  border: 1px solid currentColor;
}
.etiqueta.alta { color: hsl(var(--alta)); }
.etiqueta.baixa { color: hsl(var(--baixa)); }
.etiqueta.neutra { color: hsl(var(--neutro)); }

.etiqueta.publicado { color: hsl(var(--acento)); }

/* ---------------------------------------------------------------
   O radar como tela de decisão.

   Cada linha passou a mostrar a PEÇA — foto, nome, selos — ao lado dos
   números, porque o que vai ao ar é uma mensagem e não uma planilha. As
   células ficam com alinhamento ao topo: uma linha agora tem três alturas
   diferentes de conteúdo, e centralizar deixava o nome do produto flutuando
   longe da foto.
   --------------------------------------------------------------- */
#tabela-radar td { vertical-align: top; }

.peca-radar { display: flex; gap: 0.6rem; align-items: flex-start; min-width: 16rem; }
.peca-radar .mini {
  width: 46px;
  height: 46px;
  flex: none;
  object-fit: cover;
  border-radius: calc(var(--radius) - 0.35rem);
  background: hsl(var(--superficie-alta));
  border: 1px solid hsl(var(--borda));
}
.peca-radar .mini.vazia {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  font-size: 0.58rem;
  line-height: 1.1;
  color: hsl(var(--texto-fraco));
}
.peca-texto { display: flex; flex-direction: column; gap: 0.15rem; min-width: 0; }
.selos { display: flex; flex-wrap: wrap; gap: 0.25rem; margin-top: 0.1rem; }

/* O bloco de preço imita a linha do anúncio: riscado em cima, preço
   cobrado em destaque, e os dois percentuais lado a lado. */
.preco-radar {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  font-family: var(--fonte-dados);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}
.preco-radar .riscado {
  text-decoration: line-through;
  color: hsl(var(--texto-fraco));
  font-size: 0.78rem;
}
.preco-radar .preco-agora { font-size: 1rem; font-weight: 700; }
.preco-radar .descontos { display: flex; flex-wrap: wrap; gap: 0.25rem; margin: 0.1rem 0; }

/* Duas ou três linhas curtas na mesma célula: rendimento, confiança, envios. */
.coluna-dupla {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  font-family: var(--fonte-dados);
  font-variant-numeric: tabular-nums;
}
/* O rótulo ao lado do número volta à fonte de corpo: Archivo Narrow é para
   dado denso, e em texto curto ela só aparece como letra apertada. */
.coluna-dupla .sub { font-family: var(--fonte-corpo); }

.acoes-linha { display: flex; flex-direction: column; gap: 0.25rem; }

/* O campo de busca que nasce acima de uma lista grande. Menor e mais
   discreto que o próprio <select>: ele é ferramenta de chegar até a
   escolha, não a escolha. */
.busca-lista {
  width: 100%;
  margin-bottom: 0.25rem;
  font-size: 0.78rem;
  padding: 0.3rem 0.45rem;
  border-radius: calc(var(--radius) - 0.35rem);
  border: 1px dashed hsl(var(--borda));
  background: hsl(var(--fundo));
  color: hsl(var(--texto));
}
.busca-lista:focus-visible {
  outline: 2px solid hsl(var(--acento));
  outline-offset: 1px;
  border-style: solid;
}

/* O aviso que acompanha um produto liberado que ainda não pode sair. Fica
   em tom de alerta sem virar erro: a decisão está certa, falta um passo. */
.alerta-sutil { color: hsl(var(--baixa)); }

/* A prévia, lado a lado, com a foto que vai junto na mensagem. */
.previa-par { display: grid; grid-template-columns: 1fr 1fr; gap: 1rem; }
@media (max-width: 56rem) { .previa-par { grid-template-columns: 1fr; } }
.previa-foto {
  width: 100%;
  max-height: 170px;
  object-fit: contain;
  border-radius: calc(var(--radius) - 0.3rem);
  border: 1px solid hsl(var(--borda));
  background: hsl(var(--fundo));
  margin-bottom: 0.5rem;
}
.aviso-previa {
  margin: 0 0 0.8rem;
  padding: 0.6rem 0.8rem;
  border: 1px solid hsl(var(--baixa) / 0.5);
  border-radius: var(--radius);
  background: hsl(var(--baixa) / 0.1);
  color: hsl(var(--baixa));
  font-size: 0.85rem;
  font-weight: 600;
}

/* ---------------------------------------------------------------
   Assinatura visual: a escada de comissão.
   Cada degrau é uma mudança real detectada. Sobe à direita quando o
   vendedor está aumentando a comissão. Não é decoração — é o dado.
   --------------------------------------------------------------- */
.escada { display: flex; align-items: flex-end; gap: 2px; height: 22px; }
.escada .degrau {
  width: 5px;
  background: hsl(var(--neutro));
  border-radius: 1px;
}
.escada .degrau.alta { background: hsl(var(--alta)); }
.escada .degrau.baixa { background: hsl(var(--baixa)); }

/* --------------------------------------------------------- publicação */

/* Rótulo de seção reaproveitando a tipografia dos cabeçalhos de tabela. */
h2.rotulo, h3.rotulo {
  font-family: var(--fonte-dados);
  font-size: 0.72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.1em;
  color: hsl(var(--texto-fraco));
  margin: 0 0 0.6rem;
}

/* Campo que ocupa a linha inteira do formulário em grade (tom de voz). */
.formulario .largo { grid-column: 1 / -1; }

code {
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  font-size: 0.82em;
  padding: 0.05rem 0.3rem;
  border-radius: 4px;
  background: hsl(var(--superficie-alta));
  color: hsl(var(--texto));
}

/* Explicação do fluxo de sessão, na tela de Conexões. */
.caixa-sessao {
  margin-top: 1.25rem;
  padding: 0.9rem 1.1rem;
  border: 1px solid hsl(var(--acento) / 0.4);
  border-radius: var(--radius);
  background: hsl(var(--acento) / 0.08);
  font-size: 0.85rem;
  line-height: 1.6;
}
.caixa-sessao ul { margin: 0.5rem 0; padding-left: 1.1rem; }
.caixa-sessao li { margin-bottom: 0.2rem; }
.caixa-sessao .sub { display: block; margin-top: 0.5rem; }

textarea {
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  font-size: 0.8rem;
  line-height: 1.5;
  padding: 0.5rem 0.6rem;
  border-radius: calc(var(--radius) - 0.25rem);
  border: 1px solid hsl(var(--borda));
  background: hsl(var(--fundo));
  color: hsl(var(--texto));
  width: 100%;
  resize: vertical;
}
textarea:focus-visible { outline: 2px solid hsl(var(--acento)); outline-offset: 1px; }

/* Prévia do anúncio: o texto exatamente como sai no canal. */
.previa {
  margin: 0;
  padding: 0.9rem 1rem;
  border: 1px solid hsl(var(--borda));
  border-radius: var(--radius);
  background: hsl(var(--fundo));
  font-family: ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  font-size: 0.8rem;
  line-height: 1.55;
  white-space: pre-wrap;
  word-break: break-word;
  overflow-x: auto;
}

/* ------------------------------------------------ WhatsApp e Telegram */
#painel-conectar { max-width: 1100px; margin: 0 auto; }
/* Os blocos daqui têm display próprio, que venceria o [hidden] do navegador. */
#painel-conectar [hidden] { display: none !important; }

.guia {
  display: flex;
  align-items: flex-start;
  gap: 0.9rem;
  flex-wrap: wrap;
  padding: 1rem 1.1rem;
  margin-bottom: 1.25rem;
  border: 1px solid hsl(var(--alta) / 0.45);
  border-radius: var(--radius);
  background: hsl(var(--alta) / 0.08);
}
.guia-icone {
  flex: none;
  display: grid;
  place-items: center;
  width: 1.8rem;
  height: 1.8rem;
  border-radius: 50%;
  background: hsl(var(--alta) / 0.18);
  color: hsl(var(--alta));
  font-weight: 700;
}
.guia-texto { display: flex; flex-direction: column; gap: 0.15rem; flex: 1; min-width: 16rem; }
.guia-rotulo {
  font-family: var(--fonte-dados);
  font-size: 0.72rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.09em;
  color: hsl(var(--alta));
}
.guia-acoes { display: flex; gap: 0.5rem; flex-wrap: wrap; }

.cartao.conectar { padding: 1.5rem; }

.segmentos {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 0.25rem;
  padding: 0.25rem;
  margin-bottom: 1.1rem;
  border-radius: var(--radius);
  background: hsl(var(--fundo));
  border: 1px solid hsl(var(--borda));
}
.segmento {
  font: 600 0.92rem var(--fonte-corpo);
  padding: 0.6rem;
  border: none;
  border-radius: calc(var(--radius) - 0.2rem);
  background: none;
  color: hsl(var(--texto-fraco));
  cursor: pointer;
}
.segmento.ativo { background: hsl(var(--superficie-alta)); color: hsl(var(--texto)); }
.segmento:focus-visible { outline: 2px solid hsl(var(--acento)); outline-offset: 2px; }

.status-linha {
  display: flex;
  align-items: center;
  gap: 0.9rem;
  flex-wrap: wrap;
  padding: 1rem 1.1rem;
  border: 1px solid hsl(var(--borda));
  border-radius: var(--radius);
  background: hsl(var(--fundo) / 0.6);
}
.status-texto { display: flex; flex-direction: column; flex: 1; min-width: 12rem; line-height: 1.3; }
.status-texto strong { font-size: 1.05rem; }
.status-acoes { display: flex; gap: 0.5rem; flex-wrap: wrap; }

/* O ícone é o estado: cinza parado, âmbar girando, verde no ar. */
.status-icone {
  --cor: var(--neutro);
  flex: none;
  position: relative;
  width: 2.4rem;
  height: 2.4rem;
  border-radius: 50%;
  background: hsl(var(--cor) / 0.16);
  color: hsl(var(--cor));
}
.status-icone::before, .status-icone::after {
  content: "";
  position: absolute;
  inset: 0;
  margin: auto;
}
.status-icone[data-estado="offline"]::before,
.status-icone[data-estado="offline"]::after {
  width: 0.95rem; height: 2px; background: currentColor; transform: rotate(45deg);
}
.status-icone[data-estado="offline"]::after { transform: rotate(-45deg); }
.status-icone[data-estado="conectando"] { --cor: 38 92% 56%; }
.status-icone[data-estado="conectando"]::before {
  width: 1.1rem; height: 1.1rem; border-radius: 50%;
  border: 2px solid currentColor; border-right-color: transparent;
  animation: girar 0.9s linear infinite;
}
.status-icone[data-estado="online"] { --cor: var(--alta); }
.status-icone[data-estado="online"]::before {
  width: 0.45rem; height: 0.85rem;
  border: solid currentColor; border-width: 0 2px 2px 0;
  transform: translateY(-0.1rem) rotate(45deg);
}
.status-icone[data-estado="erro"] { --cor: var(--baixa); }
.status-icone[data-estado="erro"]::before {
  content: "!"; display: grid; place-items: center; font-weight: 700;
}
@keyframes girar { to { transform: rotate(360deg); } }

.metodos { display: flex; gap: 0.5rem; flex-wrap: wrap; margin: 1rem 0; }
label.metodo {
  flex-direction: row;
  align-items: center;
  gap: 0.5rem;
  padding: 0.55rem 0.8rem;
  border-radius: var(--radius);
  border: 1px solid transparent;
  font: 500 0.92rem var(--fonte-corpo);
  text-transform: none;
  letter-spacing: 0;
  color: hsl(var(--texto));
  cursor: pointer;
}
label.metodo:has(input:checked) { background: hsl(var(--superficie-alta)); border-color: hsl(var(--borda)); }
label.metodo input { width: auto; accent-color: hsl(var(--alta)); }
.recomendado { font-size: 0.72rem; color: hsl(var(--alta)); }

/* O QR fica sobre fundo branco em qualquer tema: câmera lê contraste. */
.pareamento {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.6rem;
  padding: 1.6rem 1rem;
  margin-bottom: 1rem;
  border-radius: var(--radius);
  background: #fff;
  color: #1c2430;
  text-align: center;
}
.pareamento h3 { margin: 0; font-size: 1.05rem; }
.pareamento ol { margin: 0; padding-left: 1.2rem; text-align: left; line-height: 1.7; font-size: 0.92rem; }
.pareamento.escuro {
  align-items: stretch;
  background: hsl(var(--fundo) / 0.6);
  border: 1px solid hsl(var(--borda));
  color: hsl(var(--texto));
  text-align: left;
  margin: 1rem 0 0;
}
.qr-moldura {
  display: grid;
  place-items: center;
  width: 16rem;
  max-width: 100%;
  aspect-ratio: 1;
  margin-top: 0.4rem;
  padding: 0.9rem;
  border: 1px solid #dde2ea;
  border-radius: var(--radius);
}
.qr-moldura img { width: 100%; height: 100%; object-fit: contain; }
.qr-moldura img:not([src]) { visibility: hidden; }
.pareamento-rodape { font-size: 0.8rem; color: #6b7585; }
.codigo-form { display: flex; gap: 0.5rem; width: min(24rem, 100%); }
.codigo-form input { background: #fff; color: #1c2430; border-color: #cfd6e0; }
.codigo-valor {
  font: 700 2rem/1 ui-monospace, "SF Mono", Menlo, Consolas, monospace;
  letter-spacing: 0.18em;
  padding: 0.7rem 1.1rem;
  border: 1px dashed #b9c2cf;
  border-radius: var(--radius);
  user-select: all;
}

.destinos { margin-bottom: 1rem; }
.destinos-cabecalho { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.4rem; }
.destinos-cabecalho h3 { margin: 0; }
#destinos-ocultos { margin: 0 0 0.6rem; }
.destinos-filtros { grid-template-columns: minmax(0, 3fr) minmax(10rem, 1fr); margin-bottom: 0.75rem; }
.destinos-cadastro {
  padding: 0.75rem 0.9rem;
  border: 1px solid hsl(var(--borda));
  border-radius: var(--radius);
  background: hsl(var(--fundo) / 0.6);
  margin-bottom: 0.75rem;
}
.destinos-cadastro #wa-selecao { align-self: center; }
#tabela-destinos td:first-child, #tabela-destinos th:first-child { width: 2.2rem; }
#tabela-destinos input[type="checkbox"] { width: auto; accent-color: hsl(var(--alta)); }
@media (max-width: 720px) { .destinos-filtros { grid-template-columns: 1fr; } }

/* Números de WhatsApp: quem divulga, e qual deles o pareamento está olhando. */
.numeros-bloco {
  padding: 0.9rem 1rem;
  margin-bottom: 1rem;
  border: 1px solid hsl(var(--borda));
  border-radius: var(--radius);
  background: hsl(var(--fundo) / 0.6);
}
.numeros-bloco .destinos-cabecalho { align-items: flex-start; gap: 1rem; flex-wrap: wrap; }
.numeros-bloco .destinos-cabecalho .sub { display: block; max-width: 44rem; margin-top: 0.2rem; }
.numero-form { margin: 0.75rem 0 1rem; }
.linha-marcar { display: flex; align-items: center; gap: 0.5rem; margin: 0.75rem 0; cursor: pointer; }
.linha-marcar input { width: auto; }
.linha-marcar.interruptor { margin: 0; white-space: nowrap; }
#modal-publicar-corpo .linha-marcar { margin: 0.3rem 0; }
#modal-publicar-corpo .rotulo { margin-top: 0.9rem; }

/* O interruptor geral da transmissão (aba Fila). */
.transmissao { margin-bottom: 1rem; border-left: 4px solid hsl(var(--alta)); }
.transmissao.desligada { border-left-color: hsl(var(--baixa)); background: hsl(var(--baixa) / 0.06); }
.transmissao .guia-acoes { align-items: center; }
.transmissao input { max-width: 16rem; }

/* Contraprova do preço no log de captura. */
tr.linha-alerta td { background: hsl(var(--baixa) / 0.10); }
.texto-bruto { max-height: 14rem; max-width: 28rem; overflow: auto; white-space: pre-wrap; font-size: 0.78rem; }
details > summary { cursor: pointer; }

/* Grid com busca, ordenação e paginação no servidor (`grade()` em app.js). */
.grade-barra { display: flex; align-items: center; gap: 0.75rem; margin: 0.5rem 0; flex-wrap: wrap; }
.grade-busca { max-width: 22rem; }
.grade-corpo.carregando { opacity: 0.55; transition: opacity 0.15s; }
th.ordenavel { cursor: pointer; user-select: none; white-space: nowrap; }
th.ordenavel:hover { text-decoration: underline; }
th.ordenavel .seta { opacity: 0.35; font-size: 0.8em; }
th.ordenavel.ativa .seta { opacity: 1; }
.grade-paginas { display: flex; align-items: center; gap: 0.5rem; margin: 0.5rem 0 1rem; flex-wrap: wrap; }
.grade-paginas select { width: auto; margin-left: 0.3rem; }
/* Usuário final (pedido 16): o que é da administração some da tela. A API
   recusa de qualquer jeito; isto é só não oferecer o que daria 403. */
.usuario-restrito .so-administracao { display: none !important; }
.numero-escolhido { margin-bottom: 0.75rem; max-width: 24rem; }
.chips { display: flex; flex-wrap: wrap; gap: 0.3rem; }
.numero-linha td { vertical-align: top; }
.lista-vinculos { display: grid; gap: 0.4rem; margin-bottom: 1rem; }
.lista-vinculos label {
  display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap;
  padding: 0.5rem 0.7rem;
  border: 1px solid hsl(var(--borda));
  border-radius: var(--radius);
}
.lista-vinculos input[type="checkbox"] { width: auto; accent-color: hsl(var(--alta)); }
.lista-vinculos .botao { margin-left: auto; }

/* Horários da coleção: uma linha por dia, as faixas lado a lado. */
.horarios-dias { display: grid; gap: 0.35rem; margin-bottom: 1rem; }
.dia-horario {
  display: flex; align-items: center; gap: 0.6rem; flex-wrap: wrap;
  padding: 0.45rem 0.7rem;
  border: 1px solid hsl(var(--borda));
  border-radius: var(--radius);
}
.dia-horario > b { width: 5.5rem; }
.dia-horario .faixas { display: flex; flex-wrap: wrap; gap: 0.4rem; flex: 1; }
.faixa-horario { display: inline-flex; align-items: center; gap: 0.25rem; }
.faixa-horario input { width: 4.2rem; text-align: center; }
.lista-resultado { margin: 0; padding-left: 1.1rem; display: grid; gap: 0.5rem; }
.lista-resultado ul { margin: 0.2rem 0 0; padding-left: 1rem; }
#modal-alvos { width: min(60rem, 95vw); }

/* Login: cobre o painel inteiro até existir sessão. */
.tela-login {
  position: fixed; inset: 0; z-index: 50;
  display: grid; place-items: center;
  padding: 1rem;
  background: hsl(var(--fundo));
}
.tela-login[hidden] { display: none; }
.login-cartao { width: min(26rem, 100%); margin: 0; }
.login-form { grid-template-columns: 1fr; }
#login-erro { color: hsl(var(--baixa)); min-height: 1.2em; margin: 0; }
.topo-acoes { display: flex; align-items: center; gap: 0.6rem; }

.dicas {
  padding: 1rem 1.2rem;
  border: 1px solid hsl(var(--alta) / 0.4);
  border-radius: var(--radius);
  background: hsl(var(--alta) / 0.05);
}
.dicas h3 { margin: 0 0 0.6rem; font-size: 0.95rem; }
.dicas ol {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(20rem, 100%), 1fr));
  gap: 0.6rem 1.6rem;
  margin: 0;
  padding-left: 1.2rem;
  font-size: 0.84rem;
  color: hsl(var(--texto-fraco));
}
.dicas li::marker { color: hsl(var(--alta)); font-weight: 700; }
.dicas b { color: hsl(var(--texto)); }

/* ----------------------------------------------------------------- modal */
dialog {
  border: 1px solid hsl(var(--borda));
  border-radius: var(--radius);
  background: hsl(var(--superficie));
  color: hsl(var(--texto));
  max-width: 900px;
  width: 92vw;
  padding: 1.25rem;
}
dialog::backdrop { background: hsl(220 20% 4% / 0.65); }
.modal-cabecalho {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 1rem;
  margin-bottom: 1rem;
}
.modal-cabecalho h2 { margin: 0; font-size: 1rem; }

/* ----------------------------------------------------------------- aviso */
.aviso {
  position: fixed;
  bottom: 1.25rem;
  right: 1.25rem;
  z-index: 60;
  max-width: 380px;
  padding: 0.8rem 1rem;
  border-radius: var(--radius);
  background: hsl(var(--superficie-alta));
  border: 1px solid hsl(var(--borda));
  font-size: 0.86rem;
  box-shadow: 0 10px 30px hsl(220 30% 3% / 0.35);
}
.aviso.erro { border-color: hsl(var(--baixa)); }
.aviso.ok { border-color: hsl(var(--alta)); }

@media (max-width: 720px) {
  .topo { gap: 0.75rem; }
  .abas { order: 3; width: 100%; }
  main { padding: 1rem; }
  .titulo-produto { max-width: 190px; }
}

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