
:root{
  --fundo:#f6f7f9; --papel:#fff; --texto:#1c1f24; --suave:#646b75;
  --borda:#e3e6ea; --linha:#eef0f3; --acento:#2d6cdf;
  --ok:#178a4a; --erro:#c0392b; --aviso:#b8860b; --lateral:#fff;
  /* O cinza da linha de resumo: entre a zebra das linhas e o escuro do
     cabecalho, para separar sem competir com o titulo. */
  /* A linha de somatória: mais escura que a zebra, para não se confundir
     com uma linha comum (dono, 21/09/2026). */
  --resumo:#ccd3de;
  --otimo:#1565c0;
  /* A listra da lista. Era #fafbfc — 1% de diferenca para o branco, o que
     na pratica nao separava uma linha da outra. Um tom abaixo resolve sem
     pesar: continua mais clara que a borda (--linha), entao a linha ainda
     manda no desenho da tabela.

     UM TOKEN SO, de proposito: as tres listas do sistema (tabela comum,
     tabela compacta e a lista de pedidos) leem daqui, entao o ajuste vale
     em todas de uma vez. */
  --zebra:#f1f3f6; --realce:#f1f5fd;
  /* Célula CALCULADA da Precificação: um verde claro, diferente da
     listra e do realce, para não se confundir com o que se digita. */
  --calc:#e3f4e9;
  /* A coluna que o dono destaca clicando no titulo (Envios Full): um tom
     claro o bastante para o numero continuar lendo em preto. */
  --coluna-marcada:#dcebff;
  /* A linha sob o mouse no Envios Full: mais escura que a zebra, para o
     olho nao pular de linha no meio de tanto numero. No cruzamento com a
     coluna destacada, um azul um tom abaixo. */
  --linha-foco:#dfe5ee; --coluna-marcada-foco:#c4dbfb;
  /* O cinza do cabecalho de tabela: escuro o bastante para a fonte
     branca passar em contraste, e sem puxar para o azul do acento. */
  --cabecalho:#3b424e; --cabecalho-realce:#4a5261; --cabecalho-texto:#fff;
  /* O mapa de vendas por estado: branco e "sem vendas"; quanto mais
     venda, mais perto da cor cheia. */
  --mapa:#1f5fbf; --mapa-vazio:#ffffff;
  /* Usados no estilo e nunca declarados até a auditoria de 18/09/2026 —
     no escuro, a faixa de andamento ficava creme com letra clara. */
  --fundo-aviso:#fff8e6; --cartao:#fff; --texto-fraco:#7a7a7a;
  --cor-serie:#2d6cdf;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme=light]){
    --fundo:#14171c; --papel:#1c2027; --texto:#e8eaed; --suave:#98a0ab;
    --borda:#2b313a; --linha:#242a32; --acento:#5b91f5;
    --ok:#4cc17e; --erro:#ef6b5e; --aviso:#d6a336; --lateral:#181c22;
    --resumo:#39414e;
    --otimo:#68b0f8;
    /* No escuro, "subir um tom" e o contrario: a listra tem que ficar
       mais CLARA que o papel para separar as linhas. Mesmo salto. */
    --zebra:#262d37; --realce:#232a34;
    --calc:#1c3326;
    --coluna-marcada:#223754;
    --linha-foco:#303947; --coluna-marcada-foco:#2c4670;
    --cabecalho:#333b47; --cabecalho-realce:#414a58;
    --cabecalho-texto:#f2f4f7;
    --mapa:#6aa2ff; --mapa-vazio:#262c35;
    --fundo-aviso:#2e2818; --cartao:#1c2027; --texto-fraco:#98a0ab;
    --cor-serie:#5b91f5;
  }
}
*{box-sizing:border-box}
body{margin:0;background:var(--fundo);color:var(--texto);
     font-family:system-ui,-apple-system,"Segoe UI",sans-serif;
     font-size:15px;line-height:1.55}
/* LINK SEM CARA DE LINK, em todo o sistema (dono, 18/09/2026: "todo lugar
   com link, nunca deixe com formatação com cores de links, deixe a
   formatação normal da página"). Seletor de elemento, o mais fraco que
   existe: botão, aba, chip e menu têm classe e continuam como são. Dentro
   de tabela e de texto, o passar do mouse sublinha — é o único sinal de
   que dá para clicar. */
a,a:visited{color:inherit;text-decoration:none}
table a:not(.botao):hover,.cartao p a:not(.botao):hover{
  text-decoration:underline;text-underline-offset:2px}
.layout{display:flex;min-height:100vh}

/* `sticky` + `align-self:flex-start` e o par que faz o menu ficar parado
   enquanto so o conteudo rola. Sem o align-self, o item flex estica ate a
   altura do irmao mais alto e nao sobra folga para ele grudar em lugar
   nenhum — o sticky vira enfeite. A altura de uma tela com `overflow-y`
   cobre o caso do menu crescer mais que o monitor. */
aside{width:236px;flex:0 0 236px;background:var(--lateral);
      border-right:1px solid var(--borda);padding:14px 0;
      display:flex;flex-direction:column;
      position:sticky;top:0;align-self:flex-start;
      height:100vh;overflow-y:auto}
aside .marca{padding:0 20px 14px;font-weight:700;font-size:1.12rem;
      line-height:1.2}
aside .marca span{display:block;font-size:.72rem;font-weight:400;
      color:var(--suave);letter-spacing:.02em}
/* Titulo de subgrupo com fundo proprio: sem ele, "Promoções" parecia mais
   um item clicavel da lista, e nao o rotulo do que vem abaixo. */
/* FUNDO ESCURO, LETRA BRANCA — a mesma cor dos cabecalhos de tabela.
   O menu passou de cinco para nove secoes, e com o cinza claro de antes
   as faixas deixaram de separar coisa nenhuma. O dono, em 10/09/2026:
   "ja tem muitos e esta dificil de ler... talvez a mesma cor dos titulos
   de tabelas, com fonte branca". E a mesma variavel, entao os dois lugares
   continuam iguais sozinhos. */
aside .grupo{margin:12px 0 4px;padding:5px 20px;font-size:.66rem;
      font-weight:700;letter-spacing:.09em;text-transform:uppercase;
      color:var(--cabecalho-texto);background:var(--cabecalho)}
aside .grupo + a{margin-top:2px}
aside .marca{display:flex;align-items:center;gap:10px}
aside .marca img{width:34px;height:34px;flex:0 0 34px;border-radius:8px;
      object-fit:contain}
/* A MARCA VIROU LINK para o Dashboard (22/09/2026): ela precisa continuar
   parecendo o cabecalho do menu, e nao mais um item da lista. */
aside a.marca{border-left:0;padding:0 20px 14px;color:var(--texto)}
/* O ALFINETE, ao lado da marca (05/10/2026). */
aside .marca-linha{display:flex;align-items:flex-start;justify-content:space-between}
aside .marca-linha a.marca{flex:1;min-width:0;padding-right:4px}
.fixar-menu{flex:0 0 auto;margin:4px 10px 0 0;width:28px;height:28px;
  display:inline-flex;align-items:center;justify-content:center;padding:0;
  border:1px solid var(--borda);border-radius:7px;background:var(--papel);
  color:var(--acento);cursor:pointer}
.fixar-menu[aria-pressed="false"]{color:var(--suave);transform:rotate(45deg)}
.fixar-menu:hover{border-color:var(--acento)}
/* O MENU RECOLHIDO (dono, 05/10/2026: "desabilitado o menu fica retrátil e
   se esconde na esquerda, e quando passo o mouse na barra com os ícones ele
   aparece"). Vira uma faixa com o logo e o ícone de cada grupo; ao passar o
   mouse abre inteiro POR CIMA do conteúdo, sem empurrar a página. Só em
   tela larga: no celular o menu já vai para o topo. */
@media (min-width:761px){
  html.menu-solto aside{position:fixed;left:0;top:0;bottom:0;height:100vh;
    width:58px;flex:none;z-index:70;overflow:hidden;transition:width .15s}
  html.menu-solto main{margin-left:58px}
  html.menu-solto aside:hover{width:236px;overflow-y:auto;
    box-shadow:6px 0 24px rgba(0,0,0,.18)}
  html.menu-solto aside:not(:hover) > a,
  html.menu-solto aside:not(:hover) .quem,
  html.menu-solto aside:not(:hover) .fixar-menu,
  html.menu-solto aside:not(:hover) .marca div{display:none}
  html.menu-solto aside:not(:hover) a.marca{padding:0 12px 14px}
  html.menu-solto aside:not(:hover) .grupo{font-size:0;letter-spacing:0;
    padding:7px 0;justify-content:center;background:transparent;margin:6px 0}
  html.menu-solto aside:not(:hover) .grupo svg{width:22px;height:22px;
    flex:0 0 22px}
}
aside a.marca:hover{background:transparent}
aside a.marca:hover div{color:var(--acento)}
/* O TITULO DO GRUPO COM A MARCA DO MARKETPLACE ao lado do nome. */
aside .grupo.com-marca{display:flex;align-items:center;gap:7px}
aside .grupo.com-marca svg{flex:0 0 16px;border-radius:3.5px}
aside a{display:block;padding:6px 20px;color:var(--texto);
      text-decoration:none;font-size:.92rem;border-left:3px solid transparent}
aside a:hover{background:var(--linha)}
aside a.ativo{border-left-color:var(--acento);color:var(--acento);
      font-weight:600;background:var(--linha)}
/* Sub-item: uma tela QUE PERTENCE a de cima. O recuo diz isso sem custar
   um nivel de navegacao.

   A CLASSE SE CHAMA `subitem`, E NAO `sub`, POR UM DEFEITO REAL.
   -------------------------------------------------------------
   Ela se chamava `sub`. Mais abaixo neste mesmo arquivo existe
   `.sub{color:...;margin:0 0 24px;...}`, que e o SUBTITULO da pagina. Sao
   dois assuntos sem relacao nenhuma com o mesmo nome de classe.

   `aside a.sub` tem especificidade maior, entao vencia no que declarava —
   recuo, tamanho, cor. Mas ela nao declarava `margin`, e o `margin:0 0
   24px` do subtitulo escorria para dentro do menu: 24 pixels de vao
   depois de "Sincronizacao", que ninguem pediu e que fazia "Produtos"
   parecer de outro grupo. Foi o que o dono viu na tela em 02/09/2026.

   Consertar com `margin:0` aqui esconderia a colisao ate a proxima
   propriedade nova no subtitulo. Renomear a classe faz as duas nunca mais
   se encontrarem. */
aside a.subitem{padding-left:36px;font-size:.86rem;color:var(--suave)}
aside a.subitem:hover{color:var(--texto)}
aside a.subitem.ativo{color:var(--acento)}

/* Bloco de acao destrutiva. Vermelho e visivel de proposito: estava
   escondido dentro de um <details> em letra pequena, e acao que nao volta
   atras nao pode ficar mais discreta que um botao comum. */
.cartao.perigo{border-left:4px solid var(--erro)}
.cartao.perigo h2{color:var(--erro)}
button.perigo{background:var(--erro);border-color:var(--erro);color:#fff}
/* O LINK que leva a remover tambem e vermelho, e discreto: ele nao pode
   competir com os botoes que a pessoa usa todo dia, mas tem de ser
   inconfundivel quando ela procurar por ele. */
a.botao.perigo{color:var(--erro);border-color:var(--erro);background:none}
a.botao.perigo:hover{background:var(--erro);color:#fff}
.form-remover{margin-top:16px;padding-top:14px;
  border-top:1px solid var(--borda);display:grid;gap:6px;max-width:340px}
.form-remover label{font-size:.8rem;color:var(--texto);font-weight:600}
button.perigo:hover:not(:disabled){filter:brightness(1.08)}

/* Quem esta logado, no pe do menu. `margin-top:auto` empurra para baixo
   sem depender da altura do menu: com ou sem o grupo de Administracao, o
   bloco fica colado no rodape. */
aside .quem{margin-top:auto;padding:10px 20px 8px;
      border-top:1px solid var(--borda);font-size:.82rem}
aside .quem .nome{font-weight:600;line-height:1.3}
aside .quem .papel{color:var(--suave);font-size:.72rem;margin-bottom:6px}
aside .quem a{display:inline;padding:0;font-size:.78rem;color:var(--suave);
      border:0;text-decoration:none}
aside .quem a:hover{background:none;color:var(--texto)}
/* SO UM dos dois pode ter `margin-top:auto`. Dois filhos com auto na mesma
   coluna flex DIVIDEM o espaco livre entre si: medido, o bloco do usuario
   ficava com 190px de vao ate o botao, boiando no meio da barra em vez de
   colado no rodape. Quando nao ha usuario, o botao mantem o auto dele e
   continua no lugar certo. */
aside .quem + .atualizar-tudo{margin-top:0}

/* ------------------------------------------------------------------
   Tela de entrada. Sem menu, sem rodape, sem link que leve para fora:
   a unica coisa que da para fazer aqui e entrar. Cada elemento a mais
   nesta pagina e uma pergunta a mais para quem so quer ver as vendas.
   ------------------------------------------------------------------ */
.entrada{min-height:100vh;display:flex;align-items:center;
      justify-content:center;padding:28px 20px;
      /* Um brilho quente atras da marca, na cor da propria logo. */
      background:
        radial-gradient(900px 520px at 50% -6%, rgba(245,197,24,.10), transparent 62%),
        var(--fundo)}
.entrada .caixa{width:100%;max-width:392px}
.entrada .marca{display:flex;flex-direction:column;align-items:center;
      text-align:center;gap:12px;margin-bottom:22px}
.entrada .marca img{width:112px;height:112px;border-radius:26px;
      object-fit:contain;
      /* Sombra na cor da logo: assenta a imagem no fundo escuro sem
         precisar de moldura nem de borda. */
      box-shadow:0 12px 34px rgba(245,197,24,.16)}
.entrada .marca .nome{font-size:1.62rem;font-weight:700;letter-spacing:-.015em;
      line-height:1.1}
.entrada .marca .sub{color:var(--suave);font-size:.84rem;margin-top:3px}

.entrada form.cartao{padding:22px 22px 20px}
.entrada h2{font-size:1.02rem;margin:0 0 4px}
.entrada .passo{color:var(--suave);font-size:.85rem;margin:0 0 14px}
.entrada label{display:block;font-size:.79rem;color:var(--suave);
      margin:13px 0 5px;font-weight:600;letter-spacing:.01em}
.entrada input{width:100%;box-sizing:border-box;padding:11px 12px;
      border:1px solid var(--borda);border-radius:9px;font-size:.96rem;
      font-family:inherit;background:var(--fundo);color:var(--texto)}
.entrada input:focus{outline:none;border-color:var(--acento);
      box-shadow:0 0 0 3px rgba(245,197,24,.14)}
.entrada button[type=submit]{width:100%;margin-top:20px;padding:11px;
      font-size:.96rem;font-weight:600}
/* Ajuda embaixo do campo: as regras da senha, o aviso de forca. */
.entrada .dica{font-size:.76rem;color:var(--suave);margin:6px 0 0;
      line-height:1.45}

/* Os dois caminhos alternativos, lado a lado embaixo do cartao. Fora do
   cartao de proposito: quem chega aqui quer ENTRAR, e recuperar senha ou
   criar conta sao a excecao, nao a escolha do dia. */
.entrada .outros{display:flex;justify-content:space-between;gap:14px;
      margin-top:15px;font-size:.85rem}
.entrada .outros a{color:var(--suave);text-decoration:none}
.entrada .outros a:hover{color:var(--acento);text-decoration:underline}
.entrada .voltar{display:block;text-align:center;margin-top:16px;
      font-size:.85rem;color:var(--suave);text-decoration:none}
.entrada .voltar:hover{color:var(--acento)}

@media (max-width:420px){
  .entrada .marca img{width:88px;height:88px;border-radius:21px}
  .entrada .marca .nome{font-size:1.42rem}
  .entrada .outros{flex-direction:column;gap:9px;text-align:center}
}

/* Lista de CNPJs com caixa de marcar, no cadastro de usuario. Em coluna,
   e nao em linha: com cinco CNPJs em linha o nome quebra no meio e fica
   impossivel saber qual caixa e de qual empresa. */
.marcaveis{display:flex;flex-direction:column;gap:6px;margin:4px 0 10px}
label.marcavel{display:flex;align-items:center;gap:8px;font-size:.9rem;
      color:var(--texto);margin:6px 0 0;cursor:pointer}
label.marcavel input{width:auto;margin:0}

main{flex:1;min-width:0;padding:28px 34px 60px}
h1{font-size:1.4rem;margin:0 0 3px}
.sub{color:var(--suave);margin:0 0 24px;font-size:.92rem}
h2{font-size:1.02rem;margin:0 0 12px}

.cartao{background:var(--papel);border:1px solid var(--borda);
        border-radius:11px;padding:18px 20px;margin-bottom:18px}
.ok{border-left:4px solid var(--ok)}
.erro{border-left:4px solid var(--erro)}
/* Aguardando o Mercado Livre / sem confirmação — nem ok, nem erro. */
.cartao.espera{border-left:4px solid #d99a2b}
.aviso{border-left:4px solid var(--aviso)}
/* A FAIXA DO RASCUNHO RESTAURADO. Ela nasce pelo JavaScript, quando o
   que foi digitado e nao chegou a salvar volta para os campos. Amarela e
   nao vermelha de proposito: nada deu errado agora — o trabalho foi
   devolvido, e o que se pede e conferir antes de mandar. */
.aviso-rascunho{background:var(--cartao);border:1px solid var(--aviso);
  border-left:4px solid var(--aviso);border-radius:8px;
  padding:9px 12px;margin:0 0 10px;font-size:.86rem;
  display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.aviso-rascunho button{margin-left:auto}

table{border-collapse:collapse;width:100%}
th{text-align:left;font-size:.7rem;text-transform:uppercase;
   letter-spacing:.05em;color:var(--suave);padding:6px 10px;font-weight:600}
td{padding:9px 10px;border-top:1px solid var(--linha);font-size:.9rem;
   vertical-align:top}
.rotulo{color:var(--suave);width:40%}
.num{text-align:right;font-variant-numeric:tabular-nums}

button:disabled{opacity:.6;cursor:not-allowed}
/* Bolinha girando ao lado do botao: enquanto o sistema fala com o Mercado
   Livre, o usuario precisa ver que ALGO esta acontecendo — senao a tela
   parece travada e ele clica de novo. */
.girando{display:inline-block;width:15px;height:15px;vertical-align:-3px;
  margin-left:9px;border:2px solid var(--borda);border-top-color:var(--acento);
  border-radius:50%;animation:girar .8s linear infinite}
.processando{display:inline-flex;align-items:center;gap:0;color:var(--suave);
  font-size:.8rem}
.carregando{display:flex;align-items:center;justify-content:center;gap:12px;
  padding:26px 12px;color:var(--suave);font-size:.86rem}
.girando.grande{width:26px;height:26px;border-width:3px;margin:0}
@keyframes girar{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.girando{animation-duration:2.4s}}
a.botao,button{display:inline-block;padding:8px 15px;border-radius:8px;
   background:var(--acento);color:#fff;border:0;text-decoration:none;
   font-size:.88rem;cursor:pointer;font-family:inherit}
a.botao.secundario,button.botao.secundario{background:transparent;
   color:var(--texto);border:1px solid var(--borda)}
button.perigo{background:var(--erro)}
button.perigo:disabled{opacity:.5;cursor:not-allowed}
.acoes{display:flex;gap:9px;flex-wrap:wrap;margin-top:14px}

label{display:block;font-size:.8rem;color:var(--suave);margin:14px 0 5px}
input[type=text]{width:100%;padding:9px 11px;border-radius:8px;
   border:1px solid var(--borda);background:var(--fundo);color:var(--texto);
   font-size:.9rem;font-family:inherit}
.linha{display:flex;gap:16px;flex-wrap:wrap}
.linha>div{flex:1;min-width:170px}

pre{white-space:pre-wrap;word-break:break-word;font-size:.8rem;
    background:var(--linha);padding:11px;border-radius:8px;margin:0}
.pequeno{font-size:.8rem;color:var(--suave)}
.etiqueta{display:inline-block;padding:2px 8px;border-radius:99px;
   font-size:.72rem;border:1px solid var(--borda);color:var(--suave)}
.vazio{color:var(--suave);font-size:.9rem}
.filtros{display:flex;gap:12px;flex-wrap:wrap;align-items:flex-end}
.filtros>div{flex:0 0 auto}
.filtros label{margin-top:0}
.filtros input,.filtros select{padding:8px 10px;border-radius:8px;
  border:1px solid var(--borda);background:var(--fundo);color:var(--texto);
  font-size:.88rem;font-family:inherit}
/* Os cartoes de numero. Tres andares fixos — titulo em cima, valor no
   meio, nota embaixo — e altura igual em toda a fileira: a nota existe
   sempre, mesmo vazia, senao o cartao sem nota encolhe e o olho le a
   diferenca de altura como diferenca de importancia. */
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(158px,1fr));
  gap:12px;margin-bottom:12px;align-items:stretch}
.kpis.contagem{grid-template-columns:repeat(auto-fit,minmax(158px,1fr));
  margin-bottom:18px}
.kpi{background:var(--papel);border:1px solid var(--borda);border-radius:11px;
  padding:12px 15px;display:flex;flex-direction:column;min-height:96px}
.kpi .titulo{font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;
  color:var(--suave);line-height:1.25;min-height:2.5em}
.kpi .valor{font-size:1.16rem;font-weight:650;margin:auto 0;
  font-variant-numeric:tabular-nums}
.kpi .nota{font-size:.74rem;color:var(--suave);margin-top:auto;
  min-height:1.15em;line-height:1.25}
.kpi.destaque{border-left:4px solid var(--ok)}
/* A PROJEÇÃO DO MÊS: tracejada e tingida, para nunca ser lida como venda. */
.kpi.projecao{border:1.5px dashed var(--acento);
  background:linear-gradient(0deg,rgba(45,108,223,.07),rgba(45,108,223,.07)),
  var(--papel)}
.kpi.projecao .valor{color:var(--acento)}
/* A correção de SKU na própria linha da lista de SKUs sem cadastro. */
form.linha-correcao{display:flex;gap:6px;margin:0;align-items:center}
form.linha-correcao input{width:170px;padding:4px 8px}
form.linha-correcao button{padding:4px 12px}
/* A variação contra o período anterior, na nota dos cartões. */
.kpi .nota .var{font-weight:650;font-variant-numeric:tabular-nums;
  white-space:nowrap}
.kpi .nota .var.bom{color:var(--ok)}
.kpi .nota .var.ruim{color:var(--erro)}
.kpi .nota .var-vs,.kpi .nota .var-nada{color:var(--suave)}
/* A EVOLUÇÃO DO PERÍODO, entre os cartões e as roscas. */
.evolucao{border:1px solid var(--borda);border-radius:11px;padding:12px 15px;
  margin:4px 0 16px;background:var(--papel)}
.ev-topo{display:flex;justify-content:space-between;gap:10px 20px;
  flex-wrap:wrap;align-items:flex-start}
.ev-topo h3{margin:0 0 2px;font-size:.98rem}
.ev-topo p{margin:0}
.ev-comparar{font-size:.82rem;display:flex;gap:6px;align-items:center;
  cursor:pointer;flex-wrap:wrap}
.ev-legenda{display:flex;gap:4px 14px;flex-wrap:wrap;margin:8px 0 0}
.ev-leg{background:none;border:0;color:var(--texto);font:inherit;
  font-size:.78rem;cursor:pointer;display:flex;align-items:center;gap:6px;
  padding:2px 4px;border-radius:6px}
.ev-leg:focus-visible{outline:2px solid var(--acento)}
.ev-leg[aria-pressed="false"]{opacity:.38;text-decoration:line-through}
/* Quadradinho com a cor da linha antes do nome (dono, 25/09/2026): mais facil de relacionar que o traco fino. */
.ev-leg i{width:11px;height:11px;border-radius:3px;display:inline-block;flex:0 0 11px}
.ev-caixa{position:relative}
.ev-caixa svg{width:100%;height:auto;display:block}
.ev-grade{stroke:var(--linha);stroke-width:1}
.ev-base{stroke:var(--borda);stroke-width:1}
.ev-eixo{fill:var(--suave);font-size:12px;font-variant-numeric:tabular-nums}
.ev-linha{fill:none;stroke-width:2.4;stroke-linejoin:round;
  stroke-linecap:round}
.ev-anterior{stroke-dasharray:7 6;opacity:.55;stroke-width:2}
.ev-area{opacity:.08}
.ev-ponto{stroke:var(--papel);stroke-width:1.5}
.ev-alvo{fill:transparent;cursor:crosshair}
.ev-guia{stroke:var(--suave);stroke-dasharray:3 3;stroke-width:1}
.ev-dica{position:absolute;top:6px;background:var(--papel);
  border:1px solid var(--borda);border-radius:8px;padding:8px 10px;
  font-size:.78rem;box-shadow:0 4px 14px rgba(0,0,0,.14);
  pointer-events:none;min-width:200px;z-index:3;line-height:1.5;
  font-variant-numeric:tabular-nums}
.ev-dica i{display:inline-block;width:10px;height:3px;margin-right:6px;
  vertical-align:3px}
.ev-dica hr{border:0;border-top:1px dashed var(--borda);margin:6px 0}
.rolagem{overflow-x:auto;border-radius:11px;border:1px solid var(--borda);
  background:var(--papel)}
/* O TÍTULO DAS COLUNAS SEMPRE À VISTA (dono, 02/10/2026: "quando tiver
   barra de rolagem vertical, faça os títulos ficarem fixos em cima pra
   sabermos qual coluna é qual"). O `sticky` do cabeçalho (logo abaixo) só
   gruda dentro de quem ROLA — e a caixa só rolava na horizontal, então ele
   nunca grudava. Com altura máxima a tabela longa rola dentro do quadro,
   como no Excel (o mesmo da Precificação), e o título fica parado. A
   segunda linha de títulos ganha o `top` certo em `SCRIPT_CABECALHO_FIXO`. */
.rolagem{max-height:calc(100vh - 110px);overflow:auto}
.rolagem table{min-width:1000px}
/* SO O CABECALHO gruda e ganha o fundo escuro. Com `.rolagem th` a regra
   pegava tambem os `th` de LINHA — a coluna de UF em "Vendas por estado" —
   e pintava a primeira coluna de escuro com a fonte cinza por cima, ilegivel.
   Achado pelo dono em 06/09/2026, no dia seguinte a padronizacao. */
.rolagem thead th{position:sticky;top:0;background:var(--cabecalho);z-index:1}
/* `th` de linha e cabecalho de LINHA, e nao de tabela: fundo do corpo,
   como qualquer celula, so que em negrito. */
tbody th{background:transparent;color:var(--texto);
  border-top:1px solid var(--linha)}
.rolagem td{border-top:1px solid var(--linha);white-space:nowrap}
.produto{display:flex;gap:9px;align-items:flex-start;min-width:290px;
  white-space:normal}
.produto img{width:38px;height:38px;object-fit:contain;border-radius:6px;
  background:var(--linha);flex:0 0 38px}
.produto .txt{font-size:.85rem;line-height:1.3}
.produto .meta{font-size:.72rem;color:var(--suave)}
.neg{color:var(--erro)} .pos{color:var(--ok)} .bom{font-weight:600}

/* ------------------------------------------------------------------
   As quatro cores da margem.
     azul     acima do planejado
     verde    conforme planejado
     amarelo  atencao
     vermelho verificar
   Os limites sao POR CNPJ (Configuracoes -> a empresa), porque 20% e otimo
   em ferramenta e ruim em eletronico.

   `!important` aqui e proposital, e nao preguica: estes valores aparecem
   dentro de tabelas e cartoes que ja tem regra de cor propria e mais
   especifica (`.numeros-pedido .conta b`, `td.num.mc .mc-pct`). Sem isto a
   cor da margem perde para a cor do contexto — foi exatamente o que
   aconteceu quando o verde e o vermelho do pedido nao apareciam. */
.mc-azul{color:var(--otimo)!important}
.mc-verde{color:var(--ok)!important}
.mc-amarelo{color:var(--aviso)!important}
.mc-vermelho{color:var(--erro)!important}

/* A TELA DE PROMOCOES DA SHOPEE: tres campos que dizem a mesma coisa.

   O campo de MC nasce colorido pela faixa do CNPJ — a mesma cor que a
   margem tem em toda tela do sistema. Uma margem preta aqui e colorida na
   de Pedidos obrigaria a reaprender a ler ao trocar de tela. */
table.promo-shopee input{font-variant-numeric:tabular-nums;
  text-align:right;font-weight:600}
table.promo-shopee input.mc-campo.mc-azul{color:var(--otimo)}
table.promo-shopee input.mc-campo.mc-verde{color:var(--ok)}
table.promo-shopee input.mc-campo.mc-amarelo{color:var(--aviso)}
table.promo-shopee input.mc-campo.mc-vermelho{color:var(--erro)}
/* PRECO ACIMA DO CHEIO: promocao nao aumenta preco. O campo diz isso
   antes de a pessoa clicar em salvar, e o motivo aparece embaixo. */
table.promo-shopee input.campo-ruim{border-color:var(--erro);
  background:color-mix(in srgb,var(--erro) 8%,transparent);
  color:var(--erro)}
table.promo-shopee .meta{display:flex;align-items:center;gap:5px;
  flex-wrap:wrap}

/* O NOME DA PROMOCAO NA LISTA. Era link azul que virava roxo depois de
   clicado — a cor dizia "ja visitei", que nao e informacao nenhuma aqui, e
   competia com o resto da tabela. Agora e o titulo da linha, escuro e
   forte, e o azul aparece so quando o mouse passa. */
a.nome-promo{color:var(--texto);text-decoration:none;font-weight:650;
  font-size:.95rem;letter-spacing:-.01em}
a.nome-promo:visited{color:var(--texto)}
a.nome-promo:hover{color:var(--acento);text-decoration:underline}

/* O TITULO QUE ABRE A LOJA. Mesma ideia do nome da promocao: e o titulo
   da linha, e nao um link azul — o azul aparece no hover, e a setinha
   diz que sai daqui. */
a.titulo.abre-fora{color:var(--texto);text-decoration:none}
/* O SKU que abre a Análise individual, SEM CARA DE LINK (dono, 15/09/2026). */
a.sku-ficha,a.sku-ficha:visited{color:inherit;text-decoration:none}
/* O "≈" do valor ESTIMADO, até a plataforma liquidar (dono, 15/09/2026). */
.estimado{color:#b7791f;font-weight:700;cursor:help;margin-right:3px}
.selo-afiliado{display:inline-block;font-size:10px;line-height:16px;
  font-weight:700;color:#fff;background:#c2185b;border-radius:8px;
  padding:0 6px;margin-left:5px;vertical-align:middle;cursor:help}
/* O QUADRO COM FAIXA DE TITULO (dono, 16/09/2026): "uma faixa de titulo
   em outra cor pra destacar, com um titulo em negrito". A cor e a dos
   cabecalhos de tabela, para o painel falar uma lingua so. */
.cartao.com-faixa{padding:0;overflow:hidden}
.com-faixa > .faixa-titulo{background:var(--cabecalho);
  color:var(--cabecalho-texto);padding:10px 20px}
.com-faixa > .faixa-titulo h2{margin:0;color:inherit;font-weight:700;
  font-size:1.05rem}
.com-faixa > .miolo{padding:18px 20px}
.com-faixa > .miolo > .linha > .cartao{margin-bottom:0}
.grade-custos{display:grid;gap:14px;align-items:start;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,380px),1fr))}
.grade-custos > .cartao{margin:0;min-width:0}
/* A tabela de custos cabe no cartão: o texto quebra, só o valor não. */
.grade-custos table.densa{width:100%;min-width:0}
.grade-custos table.densa td{white-space:normal}
.grade-custos table.densa td.num{white-space:nowrap;width:1%}
.grade-custos table.densa td.rotulo{width:auto}
/* OS QUATRO GRÁFICOS DO DASHBOARD, num padrão só (17/09/2026). */
/* DOIS POR LINHA (dono: faturamento e marketplace em cima, logística e
   pedidos embaixo); um só quando a tela é estreita. */
.grade-graficos{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}
@media(max-width:1100px){.grade-graficos{grid-template-columns:1fr}}
.grade-graficos > .cartao{margin:0;min-width:0}
/* Quando a tabela desce para baixo da rosca, a rosca fica no meio do
   cartao em vez de sozinha num canto. Lado a lado nao muda nada: a
   tabela ja ocupa a sobra. */
.qp-corpo{display:flex;gap:18px;align-items:center;flex-wrap:wrap;
  justify-content:center}
.qp-corpo .rosca.padrao{flex:0 0 150px}
.qp-corpo .rosca.padrao svg{flex:0 0 150px}
/* 330px e a largura em que a tabela ainda mostra todas as colunas com a
   comparacao (21/09/2026): abaixo disso ela desce para baixo da rosca e
   usa o cartao inteiro, em vez de cortar o valor. */
.qp-tabela{flex:1 1 330px;min-width:0;overflow-x:auto}
/* Sem barra de rolagem: a tabela ocupa o espaço que tem, colunas justas. */
.qp-tabela table.densa{width:100%;min-width:0}
.qp-tabela table.densa th,.qp-tabela table.densa td{padding:1px 3px}
.qp-tabela table.densa .tipo{max-width:7.5rem;white-space:normal;
  line-height:1.15}
.qp-tabela table.densa td.cor-col{width:14px;padding-right:0}
.qp-tabela .ponto{display:inline-block;width:11px;height:11px;
  border-radius:3px;vertical-align:middle}
.qp-tabela tr.total td{border-top:1px solid var(--borda);background:var(--resumo)}
.kpis.contagem.seis{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.rosca.grande svg{flex:0 0 225px}
/* Saldos em estoque (17/09/2026). */
.saldos-acao{display:flex;gap:16px;align-items:center;flex-wrap:wrap;
  justify-content:space-between}
.saldos-acao p{margin:0;flex:1 1 420px}
.grafico-saldos{position:relative;margin:4px 0 12px}
.grafico-saldos svg{width:100%;height:auto;display:block}
.grafico-saldos .grade{stroke:var(--linha);stroke-width:1}
.grafico-saldos text{font-size:10px;fill:var(--suave);
  font-variant-numeric:tabular-nums}
.grafico-saldos .eixo-y{text-anchor:end}
.grafico-saldos .eixo-x{text-anchor:middle}
.legenda-saldos{display:flex;gap:14px;flex-wrap:wrap;font-size:.76rem;
  color:var(--suave)}
.legenda-saldos i{display:inline-block;width:12px;height:3px;border-radius:2px;
  margin-right:5px;vertical-align:middle}
table.tabela-saldos td.sku-inteiro{white-space:nowrap;font-weight:600}
table.tabela-saldos tr.total td{border-top:2px solid var(--borda);
  background:var(--resumo)}
table.tabela-saldos th.grupo{text-align:center}
table.tabela-saldos tr.negativo td{color:var(--erro)}
.grafico-saldos .topo-barra{text-anchor:middle;font-weight:600;
  fill:var(--texto)}
.grafico-saldos .alvo-barra{fill:transparent}
.grafico-saldos .alvo-barra:hover{fill:color-mix(in srgb,var(--texto) 6%,transparent)}
.legenda-saldos i{height:10px!important;width:10px!important;border-radius:2px}
ul.lista-skus{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;
  gap:4px 6px}
ul.lista-skus li{font-size:.76rem;font-weight:600;white-space:nowrap;
  background:var(--linha);border-radius:4px;padding:0 6px}
table.tabela-avisos td:first-child{width:38%}
/* A EXPERIENCIA DE COMPRA (22/09/2026): a outra nota do painel do Meli.
   A cor vem DELE — verde, laranja, vermelho. */
.exp-nivel{display:flex;align-items:center;gap:10px;margin:2px 0 8px;
  font-size:1.05rem}
.exp-nivel .exp-valor{display:inline-flex;align-items:center;
  justify-content:center;min-width:42px;height:42px;border-radius:50%;
  font-weight:700;font-size:1rem;background:var(--linha)}
.exp-nivel.exp-boa .exp-valor{background:var(--ok);color:#fff}
.exp-nivel.exp-media .exp-valor{background:var(--aviso);color:#fff}
.exp-nivel.exp-ruim .exp-valor{background:var(--erro);color:#fff}
.exp-problema{border-left:3px solid var(--borda);padding:4px 0 4px 10px;
  margin:8px 0}
.exp-problema .solucao{color:var(--suave)}
/* O SELO DE CATALOGO no titulo do anuncio (22/09/2026): ao abrir a
   pagina ja se ve que e catalogo E em que posicao estamos. */
.selo-catalogo{display:inline-block;vertical-align:middle;margin-right:8px;
  padding:3px 9px;border-radius:6px;font-size:.68rem;font-weight:700;
  letter-spacing:.06em;background:var(--linha);color:var(--texto)}
/* AZUL GANHANDO, LARANJA PERDENDO (dono, 22/09/2026: "coloque tags
   colorido pra falar se está ganhando ou perdendo, tipo azul ganhando e
   laranja perdendo"). Dividir o primeiro lugar fica entre os dois. */
.selo-catalogo.cat-ganha{background:var(--acento);color:#fff}
.selo-catalogo.cat-divide{background:#7c5cd6;color:#fff}
.selo-catalogo.cat-perde{background:#e0821a;color:#fff}
.selo-catalogo.cat-fora{background:var(--suave);color:#fff}
/* A MESMA COR no cartao da posicao, dentro do quadro. */
.kpi.pos-ganha{border-left-color:var(--acento)}
.kpi.pos-divide{border-left-color:#7c5cd6}
.kpi.pos-perde{border-left-color:#e0821a}
.kpi.pos-fora{border-left-color:var(--suave)}
.cartao.com-faixa.faixa-catalogo > .faixa-titulo{background:#2d3277}
/* A LISTA DE QUEM MAIS VENDE O PRODUTO (22/09/2026). */
table.concorrentes-cat td .tag{margin-left:6px}
/* O PEDIDO VENDIDO NO ATACADO (28/10/2026), antes do título do produto. */
/* PAUSADO NO MELI COM ESTOQUE NO ERP (29/10/2026). */
.alerta-pausado{display:inline-block;padding:1px 6px;border-radius:4px;
  font-weight:600;color:#fff;background:var(--erro);white-space:nowrap;
  cursor:help}
/* A MARGEM NO PREÇO MELI+ (30/10/2026). */
.mc-meli{font-size:.64rem;font-weight:700;line-height:1.3;color:var(--acento)}
.mc-no-meli{cursor:help}
.selo-atacado{flex:none;padding:0 6px;border-radius:4px;font-size:.68rem;
  font-weight:700;line-height:1.6;color:#fff;background:#6d28d9;
  text-transform:uppercase;letter-spacing:.03em;cursor:help}
table.concorrentes-cat .ganhador-cat{background:var(--acento);color:#fff}
/* A NOSSA LINHA (28/10/2026): bem marcada, com a borda do acento e
   negrito; os outros anúncios nossos num tom abaixo. */
table.concorrentes-cat tr.linha-foco > td{font-weight:700;
  background:color-mix(in srgb,var(--acento) 22%,var(--cartao))}
table.concorrentes-cat tr.linha-foco > td:first-child{
  box-shadow:inset 4px 0 0 var(--acento)}
table.concorrentes-cat tr.linha-nossa > td{
  background:color-mix(in srgb,var(--acento) 9%,var(--cartao))}
table.comparativo-boost td.b-bom{color:var(--ok);font-weight:600}
table.comparativo-boost td.b-falta{color:var(--erro);font-weight:600}
table.comparativo-boost td.b-neutro{color:var(--suave)}
/* OS BOTOES DA LINHA DA PROMOCAO (22/09/2026): duplicar e ferramenta, e
   nao texto escondido; encerrar e excluir tem cores proprias porque nao
   voltam atras. */
td.acoes-linha{white-space:nowrap;text-align:right}
td.acoes-linha .botao,td.acoes-linha form,
td.acoes-linha .vazio-col{display:inline-block;
  margin-left:8px;vertical-align:middle}
.botao.pequeno{padding:3px 10px;font-size:.76rem;font-weight:600}
.botao.perigo-leve{background:var(--aviso);border-color:var(--aviso);
  color:#fff}
.botao.perigo-leve:hover{filter:brightness(1.08)}
/* VERMELHO CLARO com texto em negrito: tirar uma linha da lista nao e a
   mesma coisa que apagar uma promocao, e a cor precisa dizer isso. */
.botao.perigo-claro{background:color-mix(in srgb,var(--erro) 14%,transparent);
  border-color:color-mix(in srgb,var(--erro) 35%,transparent);
  color:var(--erro);font-weight:700}
.botao.perigo-claro:hover{background:color-mix(in srgb,var(--erro) 22%,
  transparent)}
table#tabela-escolhidos td.marca-col,
table#tabela-escolhidos th.marca-col{width:26px;text-align:center}
table#tabela-escolhidos tr.bloqueado td{opacity:.75}
/* A COLUNA "vs anterior" das tabelas dos graficos (21/09/2026): a seta
   e do numero, a cor e do significado — custo, devolucao e cancelamento
   que crescem sobem em vermelho. */
.qp-tabela th.vs,.qp-tabela td.vs{white-space:nowrap}
.qp-tabela td.vs .variacao{margin-left:0}
.var-bom{color:var(--ok)}
.var-mau{color:var(--erro)}
/* Resultado final: cartoes em duas colunas e a rosca ao lado. */
.resultado-corpo{display:grid;grid-template-columns:minmax(0,1.15fr) minmax(0,1fr);
  gap:18px;align-items:start;margin-bottom:14px}
.resultado-corpo .kpis{margin-bottom:0}
.resultado-rosca .rosca .legenda{min-width:220px}
/* A rosca do resultado final divide a coluna com a tabela — a mesma das
   tabelas dos graficos de cima (dono, 21/09/2026). */
.resultado-rosca.qp-corpo .rosca.grande{flex:0 0 225px}
.resultado-lado > p.pequeno{margin-top:.4rem}
@media(max-width:980px){.resultado-corpo{grid-template-columns:1fr}}
/* Estados e horarios lado a lado quando cabe; um embaixo do outro quando
   nao. */
.dupla-analise{display:grid;gap:18px;margin-bottom:18px;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,620px),1fr))}
.dupla-analise > .cartao{margin:0;min-width:0}
/* DOIS QUADROS LADO A LADO, metade da tela cada (Promoções Shopee,
   09/10/2026); um embaixo do outro em tela estreita. */
.lado-a-lado{display:grid;gap:14px;margin-bottom:14px;
  grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr))}
.lado-a-lado > .cartao{margin:0;min-width:0}
.lado-a-lado > .cartao.acoes-promo{display:flex;align-items:center;gap:12px}
.promo-aberta .busca-na-promo .filtros{margin:6px 0 0}
.estados-corpo{display:flex;gap:16px;flex-wrap:wrap;align-items:flex-start}
.mapa-uf{position:relative;flex:1 1 300px;max-width:470px}
.mapa-uf svg{width:100%;height:auto;display:block}
.uf-mapa{stroke:var(--borda);stroke-width:.6;cursor:default}
.uf-mapa:hover{stroke:var(--texto);stroke-width:1.2}
.escala-mapa{display:flex;align-items:center;gap:6px;font-size:.7rem;
  color:var(--suave);margin-top:4px}
.escala-mapa i{flex:1;height:8px;border-radius:4px;border:1px solid var(--borda);
  background:linear-gradient(90deg,var(--mapa-vazio),var(--mapa))}
/* A lista inteira, sem rolagem: linhas baixas e as tres colunas justas. */
.lista-uf{flex:0 1 auto;min-width:0}
.lista-uf table.estados{width:auto;min-width:0}
.lista-uf table.estados th,.lista-uf table.estados td{padding:1px 8px;
  font-size:.8rem;line-height:1.35;white-space:nowrap}
.horarios{position:relative}
.horarios svg{width:100%;height:auto;display:block}
.horarios text{font-size:10px;fill:var(--suave);
  font-variant-numeric:tabular-nums}
.horarios text.hora{text-anchor:middle}
.horarios text.soma{text-anchor:end;fill:var(--texto);font-weight:600}
.horarios text.dia{fill:var(--texto);font-size:11px}
.horarios .fundo-eixo{fill:var(--linha)}
.horarios .fundo-total{fill:var(--resumo)}
.bolha.sem{fill:var(--borda)}
.bolha.baixa{fill:color-mix(in srgb,var(--mapa) 35%,var(--mapa-vazio))}
.bolha.media{fill:color-mix(in srgb,var(--mapa) 68%,var(--mapa-vazio))}
.bolha.alta{fill:var(--mapa)}
.alvo-bolha{fill:transparent}
.alvo-bolha:hover{fill:color-mix(in srgb,var(--mapa) 10%,transparent)}
.legenda-bolhas{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:.74rem;
  color:var(--suave);margin:2px 0 6px}
.legenda-bolhas span{display:inline-flex;align-items:center;gap:3px}
.kpis.quatro{grid-template-columns:repeat(auto-fit,minmax(130px,1fr))}
a.titulo.abre-fora:visited{color:var(--texto)}
a.titulo.abre-fora:hover{color:var(--acento);text-decoration:underline}
a.titulo.abre-fora::after{content:" ↗";color:var(--suave);
  font-size:.8em}

/* ZERO DE DESCONTO E UM NUMERO, e nao uma lacuna: a coluna de preco
   promocional mostra 0,00 no anuncio que nao esta em campanha, apagado
   para nao competir com os que estao. */
.zerado{color:var(--suave);font-variant-numeric:tabular-nums}

/* NECESSIDADE DE COMPRA.

   A tela e uma lista para decidir dinheiro: o que precisa de acao tem de
   saltar sem ninguem procurar. Duas cores fazem esse trabalho — a seta da
   tendencia e a coluna de quanto comprar — e o resto fica quieto. */
.seta{font-size:.72rem;margin-left:5px;vertical-align:1px}
.seta.sobe{color:var(--ok)}
.seta.desce{color:var(--erro)}
.ok-cor{color:var(--ok)}
/* DIFERENCA POSITIVA e azul: entrou mais do que se esperava. Nao e erro
   nem acerto — e algo para entender, e por isso nao usa nem o verde do
   "esta certo" nem o vermelho do "faltou". */
.azul-cor{color:var(--otimo)}
.aviso-cor{color:var(--aviso)}
table.compras td.compra{color:var(--suave);font-variant-numeric:tabular-nums}
table.compras td.compra.precisa{color:var(--texto);font-weight:650}

/* A LINHA DE TITULOS COM CARA DE TITULO. Pedido do dono em 04/09/2026:
   cinza escuro e fonte branca. Nasceu so na tela de Necessidade de
   compra e virou o padrao de TODAS as tabelas em 05/09/2026 — "use como
   padrao as da necessidade de compra". Cabecalho que muda de cara de uma
   tela para outra faz o sistema parecer costurado de pedacos. */
thead th{background:var(--cabecalho);
  color:var(--cabecalho-texto);border-bottom:0;font-weight:700;
  letter-spacing:.01em}
thead th:first-child{border-top-left-radius:7px}
thead th:last-child{border-top-right-radius:7px}
thead th.ordena:hover{color:#fff;background:var(--cabecalho-realce)}
/* Texto pequeno DENTRO do cabecalho — "atual", a data do mes, a legenda
   de uma coluna. Sem isto ele herdava a cor de `.pequeno`, que e cinza
   sobre claro: cinza sobre o cinza escuro do cabecalho some. */
thead th .pequeno{color:var(--cabecalho-texto);opacity:.72}

/* OS MESES DE CALENDARIO. O mes corrente esta em curso e nao pode ser
   lido de igual para igual com os fechados ao lado — ele fica separado
   por uma borda e com o numero mais apagado. */
table.compras td.mes{font-variant-numeric:tabular-nums;color:var(--texto)}
table.compras td.mes-atual,table.compras th.mes-atual{
  border-left:1px solid var(--borda)}
table.compras td.mes-atual{color:var(--suave)}
table.compras th.mes-atual .pequeno{color:var(--cabecalho-texto);opacity:.7;
  font-weight:400}
/* O SKU E O QUE SE COPIA E O QUE SE PROCURA: ele vem em negrito, e o
   nome do anuncio fica de apoio. Pedido do dono em 04/09/2026. */
table.compras .produto-col .sku-forte{font-weight:700;color:var(--texto)}
table.compras td.sku-col{white-space:nowrap}
/* MEU PEDIDO DE COMPRA: o campo digitável e o valor ao lado. O TÍTULO
   fica igual ao dos outros (dono, 21/09/2026: "o fundo do título das duas
   últimas está com outra cor, deixe na mesma da tabela"); o tom claro é
   só das células. */
table.compras td.compra-real{
  background:color-mix(in srgb,var(--acento) 6%,transparent)}
table.compras thead th.compra-real{background:var(--cabecalho)}
table.compras td.divisao,table.compras th.divisao{
  border-left:2px solid var(--borda)}
table.compras input.a-comprar{width:4.2rem;font:inherit;font-size:.78rem;
  text-align:right;padding:1px 3px;border:1px solid var(--borda);
  border-radius:3px;background:var(--papel);color:inherit}
table.compras tr.tem-compra td.compra-real{
  background:color-mix(in srgb,var(--ok) 12%,transparent)}
.total-compra{display:flex;flex-wrap:wrap;gap:10px;align-items:center;
  justify-content:flex-start;
  background:var(--papel);border:1px solid var(--borda);border-radius:10px;
  padding:8px 12px;margin:10px 0}
.total-compra .limpar-compra,.total-compra .botao{padding:4px 10px;
  font-size:.78rem}
.total-compra .total-dinheiro{color:var(--acento)}
table.compras td.sku-col .sku-forte{font-weight:700;color:var(--texto)}
/* O SKU LEVA A ANALISE DO PRODUTO (dono, 23/09/2026) — e e la que se
   preenche a caixa do fornecedor. Sem cara de link para nao competir com
   o nome do produto ao lado; sublinha no passar do mouse. */
table.compras td.sku-col a.sku-forte{text-decoration:none}
table.compras td.sku-col a.sku-forte:hover{color:var(--acento);
  text-decoration:underline}
/* QUANTAS PECAS VEM NA CAIXA: compacto, porque a tabela ja e larga. A
   barra fica apagada — ela separa dois numeros, nao e um deles. */
table.compras td.caixa-col{white-space:nowrap;font-variant-numeric:tabular-nums}
.barra-caixa{color:var(--suave);opacity:.6;margin:0 1px}
/* A CAIXA DO FORNECEDOR, na analise do produto: uma linha por CNPJ. */
.linha-embalagem{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;
  margin:0 0 10px}
.linha-embalagem label{display:flex;flex-direction:column;gap:3px;
  font-size:.78rem;color:var(--suave);margin:0}
.linha-embalagem input{width:110px;margin:0}
.linha-embalagem button{padding:6px 14px}
.linha-embalagem + .linha-embalagem{padding-top:10px;
  border-top:1px solid var(--linha)}
/* PRODUTO E SKU PARADOS À ESQUERDA na Necessidade de compra (dono,
   21/09/2026: "coloque a coluna de nome e SKU fixa na lateral esquerda,
   pra não rolar com a tabela"), do mesmo jeito que em Envios Full. A
   primeira tem largura fixa para a segunda saber onde começar. */
table.compras td.fixa-1,table.compras th.fixa-1{
  position:sticky;left:0;z-index:2;width:250px;min-width:250px;
  max-width:250px;background:var(--papel)}
/* A CURVA, entre o produto e o SKU (28/10/2026), também travada. */
table.compras td.fixa-c,table.compras th.fixa-c{
  position:sticky;left:250px;z-index:2;width:46px;min-width:46px;
  max-width:46px;background:var(--papel)}
table.compras td.fixa-2,table.compras th.fixa-2{
  position:sticky;left:296px;z-index:2;width:160px;min-width:160px;
  max-width:160px;background:var(--papel);
  box-shadow:2px 0 0 var(--borda)}
/* A SEGUNDA LINHA DE TÍTULOS passa POR BAIXO das duas colunas travadas
   quando a tabela rola para o lado (dono, 21/09/2026: "a linha de
   subtítulo não tá travada, ela sobrepõe as duas primeiras travadas"). */
table.compras thead th.fixa-1,table.compras thead th.fixa-c,table.compras thead th.fixa-2{
  z-index:6;background:var(--cabecalho)}
table.compras thead tr:nth-child(2) th{z-index:1}
table.compras td.fixa-1,table.compras td.fixa-c,table.compras td.fixa-2{z-index:2}
table.compras tbody tr:nth-child(even) td.fixa-1,
table.compras tbody tr:nth-child(even) td.fixa-c,
table.compras tbody tr:nth-child(even) td.fixa-2{background:var(--zebra)}
table.compras tbody tr:hover td.fixa-1,
table.compras tbody tr:hover td.fixa-c,
table.compras tbody tr:hover td.fixa-2{background:var(--linha-foco)}
/* O TITULO MESCLADO que cobre um grupo de colunas — "QTDs vendidas"
   sobre os quatro meses, "Sugestao de compra" sobre os pares de peca e
   dinheiro. Pedido do dono em 04/09/2026, nas duas telas de suprimentos.
   Ele nao ordena nada: e rotulo, e por isso nao tem a setinha. */
thead th.grupo{font-size:.62rem;letter-spacing:.08em;
  text-transform:uppercase;font-weight:600;text-align:center;
  cursor:default;padding-top:2px;padding-bottom:2px;position:relative}
/* CADA GRUPO COM O SEU PROPRIO TRACO, e nao um risco de fora a fora.
   O `border-bottom` de dois `th` vizinhos se emenda num traco unico, e
   dois grupos lado a lado passavam a parecer um so — "parece que e tudo
   a mesma coisa", em 07/09/2026. Com o traco recuado nas pontas sobra um
   vao entre eles, e o desenho vira o que ele sempre quis ser: uma chave
   por cima de cada trio de colunas. */
thead th.grupo::after{content:"";position:absolute;bottom:0;
  left:12px;right:12px;height:1px;background:rgba(255,255,255,.4)}
/* DENTRO DA TABELA QUE ROLA o título do grupo também gruda (02/10/2026):
   `sticky` serve de base para o traço de baixo tanto quanto `relative`. */
.rolagem thead th.grupo{position:sticky}
/* O CABECALHO MAIS BAIXO. Ele tem duas linhas desde os titulos
   mesclados, e duas linhas com o espacamento de uma cada custavam altura
   que a tabela precisa para mostrar produto. Pedido do dono em
   04/09/2026: "creio que da pra cair pela metade da altura". */
thead th{padding-top:3px;padding-bottom:3px;
  line-height:1.15}
thead th .pequeno{line-height:1;font-size:.6rem}

/* A SOMATORIA, no alto e alinhada com as colunas. Ela fica no cabecalho
   de proposito: dentro do corpo, a ordenacao a embaralharia junto com os
   produtos, e um total no meio da lista nao e um total.

   (E o comentario nao escreve as tags por extenso: esta folha de estilo e
   embutida na pagina, entao qualquer coisa parecida com marcacao aqui
   dentro vira texto procuravel no HTML — foi assim que um comentario meu
   virou o primeiro "corpo de tabela" da pagina e enganou um teste.) */
/* A LINHA DE RESUMO precisa se separar das linhas de produto sem virar
   um segundo cabecalho. Ela era `--zebra`, a mesma faixa das linhas
   alternadas, e sumia no meio delas. Pedido do dono em 06/09/2026: mais
   escura que as linhas, menos que o cabecalho. */
/* As duas primeiras células da somatória ficam TRAVADAS como as
   colunas (dono, 21/09/2026: "ao arrastar a barra de rolagem, essa linha
   das somatórias passa reto sobre as colunas fixas, dá sensação de
   erro"). */
table.compras thead tr.totais td.fixa-1,
table.compras thead tr.totais td.fixa-c,
table.compras thead tr.totais td.fixa-2{
  position:sticky;z-index:4;background:var(--resumo)}
table.compras thead tr.totais td{background:var(--resumo);
  font-weight:650;font-size:.82rem;padding:5px 9px;
  font-variant-numeric:tabular-nums;
  border-bottom:2px solid var(--borda)}
table.compras thead tr.totais td:first-child{color:var(--suave);
  font-weight:600;font-size:.76rem;text-transform:uppercase;
  letter-spacing:.04em}

/* O INVESTIMENTO fica mais apagado que a quantidade: a decisao e quantas
   pecas comprar, e o dinheiro e a consequencia dela. */
/* O INVESTIMENTO fica mais apagado que a quantidade: a decisao e quantas
   pecas comprar, e o dinheiro e a consequencia dela. So ganha contraste
   cheio quando a quantidade ao lado e uma compra de verdade.

   (Aqui havia um `:has(+ td)` que casava com QUALQUER celula seguida de
   outra — ou seja, todas menos a ultima — e anulava a regra de cima. Foi
   removido na auditoria de 04/09/2026.) */
table.compras td.investimento{color:var(--suave);
  font-variant-numeric:tabular-nums}
table.compras td.compra.precisa + td.investimento{color:var(--texto)}
/* Treze colunas nao cabem nos 1180 padrao: a tabela pede a rolagem
   horizontal do proprio container em vez de espremer o nome do produto. */
.rolagem table.compras{min-width:1320px}
.rolagem table.full-meli{min-width:1400px}

/* LINHAS BAIXAS COM MINIATURA. O dono pediu as duas coisas juntas em
   04/09/2026 — "coloque miniaturas dos produtos no inicio da linha,
   altura das linhas bem compactas" e, na tela de compra, "de modo que a
   linha nao fique mais alta do que ja e hoje".

   As duas so convivem se a foto for MENOR que a altura que a linha ja
   tinha: 26px cabe dentro das duas linhas de texto (titulo + meta) que
   a celula ja mostrava, e a linha nao cresce um pixel. */
table.compras .produto{gap:7px;align-items:center;min-width:0}
table.compras .produto img,table.compras .semfoto{width:26px;height:26px;
  flex:0 0 26px;border-radius:5px;object-fit:contain;background:var(--linha)}
table.compras td{padding-top:4px;padding-bottom:4px}
/* O NOME EM DUAS LINHAS, e nao numa so cortada.
   O dono, em 09/09/2026: "preciso saber o nome completo do anuncio pois
   tenho alguns com nomes parecidos, e pelo SKU e dificil". O corte de 80
   caracteres e feito em Python; aqui a regra so precisa NAO cortar antes
   disso — com `nowrap` e 250px o texto morria por volta do 35o caractere,
   e o limite de 80 nao servia para nada. */
table.compras .produto .titulo{font-size:.81rem;line-height:1.25;
  max-width:340px;overflow:hidden;white-space:normal;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
table.compras .produto{align-items:flex-start}
/* Promoções da Amazon: o título em DUAS linhas e a coluna com 80% da
   largura de antes (dono, 18/09/2026), para a tabela caber sem rolar. */
table.promo-amazon td.produto-amz{min-width:200px;max-width:340px}
table.promo-amazon .titulo-2l{font-size:.8rem;line-height:1.25;
  overflow:hidden;white-space:normal;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
table.full-meli .produto .titulo{max-width:230px}
/* Nas colunas de mes do Full, as duas origens empilhadas ficam menores
   que o normal: sao quatro colunas assim, e o peso somado esticaria a
   linha justamente onde ela precisa ser baixa. */
table.full-meli .estoques{gap:0}
table.full-meli .onde-estoque{font-size:.72rem}
table.full-meli .onde-estoque .lugar{font-size:.58rem}

/* A COLUNA MAIS ESTREITA QUE COUBER.

   O dono pediu em 04/09/2026: o rotulo NAO estica — ele ocupa so o que a
   maior palavra pede ("Necessidade", "Deposito") e o numero vem logo em
   seguida, encostado a direita. O `min-width` saiu de cena: era ele que
   abria a coluna muito alem do texto.

   E O ROTULO ENCOLHEU PELA METADE, no segundo pedido do mesmo dia:
   "diminua a altura da fonte das palavras FULL, DEPOSITO, NECESSIDADE e
   REAL pela metade, assim destacamos os valores e nao o titulo". Ele
   esta certo — a palavra se repete em toda linha e toda coluna; quem
   muda de linha para linha e o numero. */
/* OS TRÊS BLOCOS DE ENVIO (11/09/2026): quatro colunas compactas de
   necessidade, quatro de envio possível e o envio real. Uma linha mais
   forte separa um bloco do outro. */
table.full-meli td.envio-col,table.full-meli th.envio-col{padding-left:6px;
  padding-right:6px;min-width:38px}
table.full-meli td.envio-col b{font-size:.84rem}
table.full-meli .divisao{border-left:2px solid var(--borda)}
table.full-meli thead th.divisao{border-left:2px solid var(--cabecalho-realce)}
/* A COLUNA DESTACADA POR CLIQUE, em qualquer tabela que pedir
   (23/09/2026). Nasceu em Envios Full e o dono pediu o mesmo em
   Necessidade de compra: clicar no FUNDO do titulo pinta a coluna
   inteira, clicar no TEXTO ordena. Duas acoes no mesmo cabecalho so
   funcionam porque cada uma tem a sua area — e a seta de ordenar
   mora no texto, onde o clique ordena. */
thead th.marcavel{cursor:cell;user-select:none}
thead th.marcavel.ordena:after{content:none}
thead th.marcavel .rotulo-dia,thead th.marcavel .rotulo-col{
  display:inline-block;padding:2px 4px;border-radius:4px;
  cursor:pointer}
thead th.marcavel .rotulo-dia:hover,
thead th.marcavel .rotulo-col:hover{background:rgba(255,255,255,.18)}
thead th.marcavel .rotulo-dia:after,
thead th.marcavel .rotulo-col:after{content:"\2195";
  opacity:.35;margin-left:3px;font-size:.8em}
thead th.marcavel.asc .rotulo-dia:after,
thead th.marcavel.asc .rotulo-col:after{content:"\2191";
  opacity:.9}
thead th.marcavel.desc .rotulo-dia:after,
thead th.marcavel.desc .rotulo-col:after{content:"\2193";
  opacity:.9}
thead th.marcavel.coluna-marcada{box-shadow:inset 0 -3px 0 var(--acento)}
tbody td.coluna-marcada{background:var(--coluna-marcada) !important}
tbody tr:hover td.coluna-marcada{
  background:var(--coluna-marcada-foco) !important}
.total-envio .baixar-planilha{padding:4px 12px;margin-left:8px}
table.full-meli thead .soma-envio{display:inline-block;margin-top:4px;
  padding:2px 8px;border-radius:10px;background:var(--acento);color:#fff;
  font-size:.78rem;font-weight:600;text-transform:none;letter-spacing:0}
table.full-meli thead .soma-envio b{font-size:.9rem}
.recarga-pendente{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.recarga-pendente .botao{padding:4px 12px}
.estoque-olist{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  margin:0 0 8px}
.estoque-olist .botao{padding:4px 10px}
table.full-meli input.a-enviar{width:64px;text-align:right;padding:3px 5px;
  font:inherit;font-weight:650;border:1px solid var(--borda);border-radius:6px;
  background:var(--papel);color:var(--texto)}
table.full-meli td.deposito-apos{min-width:62px}
/* ZERA: amarelo. FALTA PEÇA: os dois em vermelho — pedido do dono. */
table.full-meli .zera{background:#fff3c4 !important;color:#6b5200}
table.full-meli .falta{background:#fde2e0 !important;color:var(--erro);
  border-color:var(--erro) !important}
.total-envio{display:flex;gap:8px;align-items:center;flex-wrap:wrap;
  margin:4px 0 8px;font-size:.88rem}
/* OS BOTÕES JUNTO DA INFORMAÇÃO, à esquerda (dono, 21/09/2026) — antes
   o "limpar" era empurrado para a outra ponta da faixa. */
.total-envio .limpar-envio{padding:4px 10px;font-size:.78rem}
/* ESCOLHER AS COLUNAS (dono, 02/10/2026), à direita, em cima da tabela. */
.colunas-escolha{margin-left:auto;display:flex;gap:6px;position:relative}
.colunas-escolha button{padding:4px 10px;font-size:.78rem}
.total-compra .colunas-escolha button{padding:4px 10px;font-size:.78rem}
.colunas-painel{position:absolute;right:0;top:calc(100% + 6px);z-index:30;
  background:var(--papel);border:1px solid var(--borda);border-radius:10px;
  box-shadow:0 8px 24px rgba(0,0,0,.18);padding:12px 14px;min-width:300px;
  max-height:70vh;overflow:auto;font-size:.82rem}
.colunas-painel h4{margin:10px 0 4px;font-size:.7rem;text-transform:uppercase;
  letter-spacing:.05em;color:var(--suave)}
.colunas-painel h4:first-child{margin-top:0}
.colunas-painel label{display:flex;gap:8px;align-items:center;padding:3px 0;
  cursor:pointer;white-space:nowrap}
.colunas-painel label.fixa{color:var(--suave);cursor:default}

/* PRODUTO E SKU PARADOS À ESQUERDA, o resto rola — pedido do dono em
   11/09/2026: com os blocos de envio a tabela ficou larga, e sem o nome
   fixo não se sabe de que produto é o número lá no fim. A primeira coluna
   tem largura fixa para a segunda saber onde começar. */
table.full-meli td.produto-col,table.full-meli thead tr:first-child th:first-child{
  position:sticky;left:0;z-index:2;width:270px;min-width:270px;
  max-width:270px;background:var(--papel)}
/* A CURVA (28/10/2026) entre os dois, travada também. */
table.full-meli td.curva-col,table.full-meli thead tr:first-child th:nth-child(2){
  position:sticky;left:270px;z-index:2;background:var(--papel);
  width:46px;min-width:46px;max-width:46px}
table.full-meli td.sku-col,table.full-meli thead tr:first-child th:nth-child(3){
  position:sticky;left:316px;z-index:2;background:var(--papel);
  width:175px;min-width:175px;max-width:175px;
  box-shadow:2px 0 0 var(--borda)}
table.full-meli thead tr:first-child th:first-child,
table.full-meli thead tr:first-child th:nth-child(2),
table.full-meli thead tr:first-child th:nth-child(3){
  z-index:3;background:var(--cabecalho)}
table.full-meli tbody tr:nth-child(even) td.produto-col,
table.full-meli tbody tr:nth-child(even) td.curva-col,
table.full-meli tbody tr:nth-child(even) td.sku-col{background:var(--zebra)}
/* A LINHA SOB O MOUSE, inteira — inclusive Produto e SKU, que por serem
   fixas tem fundo proprio e nao herdavam o realce da linha. Pedido do
   dono em 11/09/2026. Vem depois da zebra para ganhar dela. */
table.full-meli tbody tr:hover td,
table.full-meli tbody tr:hover td.produto-col,
table.full-meli tbody tr:hover td.sku-col{background:var(--linha-foco)}
table.full-meli tbody tr:hover td.coluna-marcada{
  background:var(--coluna-marcada-foco) !important}
table.full-meli td.estoque-col{text-align:left}
table.full-meli .onde-estoque{gap:3px}
table.full-meli .onde-estoque .lugar{flex:0 0 auto;white-space:nowrap;
  font-size:.5rem;letter-spacing:.02em;opacity:.75}
table.full-meli .onde-estoque b{margin-left:auto;text-align:right;
  font-size:.8rem}

/* NECESSIDADE na cor do texto, REAL em vermelho claro. Sao duas leituras
   diferentes: a primeira e a decisao, a segunda e o limite de hoje. */
table.full-meli .onde-estoque.real b,
table.full-meli .onde-estoque.real .lugar{color:var(--erro);opacity:.7}
table.full-meli td.envio.precisa .onde-estoque:first-child b{
  color:var(--texto);font-weight:700}

/* O TRAVESSAO DO ZERO quase nao aparece: ele existe para MANTER O
   ALINHAMENTO, e nao para ser lido. Pedido do dono em 04/09/2026 —
   "para nao ter tanto destaque". */
table.full-meli .onde-estoque .pequeno,
table.compras td .vazio-col{color:var(--suave);opacity:.55}

/* A MARGEM MEDIA, AO LADO DO NUMERO e nao embaixo dele. Embaixo, ela
   empurrava a linha e quebrava a comparacao entre colunas — o dono
   desfez em 04/09/2026. Ela responde se aquelas vendas foram boas ou
   queima de estoque, e por isso segue a mesma cor de faixa do resto do
   sistema. */
.mc-mes{font-size:.64rem;margin-left:4px;font-weight:600;
  font-variant-numeric:tabular-nums}
/* No Full ela fica DEPOIS do numero, e o numero perde o "encostar a
   direita" — sao dois valores por linha agora, e o alinhamento passa a
   ser do par. */
table.full-meli .onde-estoque b{margin-left:auto}
table.full-meli .onde-estoque .mc-mes{flex:0 0 auto;min-width:46px;
  text-align:right}
/* A COLUNA DE 30 DIAS e a decisao de hoje: ela ganha peso, e as de 60 e
   90 ficam de apoio. Sem isso as tres competem, e a tela para de
   responder "o que eu compro agora". */
table.compras td.compra:nth-last-child(3).precisa{color:var(--erro);
  font-size:1.02rem}
/* Com o cabecalho branco no escuro, o destaque da coluna de 30 dias nao
   pode mais ser cor: vira peso. */
table.compras thead th:nth-last-child(3){font-weight:750}
.depositos{display:flex;flex-wrap:wrap;align-items:center;gap:12px;
  margin-top:12px}
.depositos .rot{font-size:.8rem;color:var(--suave)}
label.caixa-deposito{display:inline-flex;align-items:center;gap:6px;
  margin:0;font-size:.84rem;color:var(--texto);cursor:pointer}
label.caixa-deposito input{width:15px;height:15px}

/* ENTRAR E SAIR DE UMA PROMOCAO.

   A janela e um <dialog> do proprio navegador: foco presoENTER, ESC que
   fecha e fundo inerte vem de graça, sem biblioteca e sem imitar isso
   mal em JavaScript. O CSS aqui so veste o que ja funciona. */
/* DESCONTO E MARGEM, CADA UM COM A SUA COR.

   Sao dois caminhos para o mesmo numero, e lado a lado pareciam o mesmo
   campo repetido. O dono pediu a distincao em 04/09/2026: "um amarelo no
   desconto e um verde na margem, que e pro usuario ver que tem diferenca
   nos dois".

   A cor vai na BORDA e num fundo de leve — nao no texto — para o numero
   digitado continuar com o contraste normal de leitura. */
input.campo-desconto{border-color:var(--aviso);
  background:color-mix(in srgb, var(--aviso) 7%, var(--papel))}
input.campo-margem{border-color:var(--ok);
  background:color-mix(in srgb, var(--ok) 7%, var(--papel))}
input.campo-desconto:focus{outline:2px solid var(--aviso);outline-offset:1px}
input.campo-margem:focus{outline:2px solid var(--ok);outline-offset:1px}
label.rot-desconto{color:var(--aviso);font-weight:600}
label.rot-margem{color:var(--ok);font-weight:600}

.acoes-promo{display:flex;flex-wrap:wrap;align-items:center;gap:10px;
  margin:2px 0 14px}
.acoes-promo .pequeno{color:var(--suave)}
button.botao.perigo{background:var(--erro);border-color:var(--erro);
  color:#fff}
button.botao.perigo:hover:not(:disabled){filter:brightness(1.07)}
button.botao.perigo:disabled{background:var(--linha);color:var(--suave);
  border-color:var(--borda);cursor:not-allowed}
td.marca-col,th.marca-col{width:34px;text-align:center;padding-right:0}
.marca-item,#marca-todos{width:16px;height:16px;cursor:pointer}

/* A JANELA DE POR UM ANUNCIO NA CAMPANHA PELO PRECO. Pedido do dono em
   06/09/2026: ate entao o candidato de campanha de preco digitavel nao
   tinha botao nenhum — so dava para entrar em lote, pelo campo de margem.
   A janela e uma so na pagina; o botao da linha carrega os numeros dela. */
.sobreposto.oculto{display:none}
.sobreposto-caixa.janela-preco{max-width:470px;position:relative}
.janela-preco .fecha-janela{position:absolute;top:10px;right:12px;
  background:transparent;color:var(--suave);border:0;font-size:1.5rem;
  line-height:1;padding:0 5px;cursor:pointer}
.janela-preco .fecha-janela:hover{color:var(--texto)}
.janela-preco .linha-cheio{display:flex;justify-content:space-between;
  align-items:baseline;padding:8px 0;border-bottom:1px solid var(--linha);
  color:var(--suave);font-size:.82rem}
.janela-preco .linha-cheio b{color:var(--texto);font-size:1rem}
/* A faixa que a campanha aceita: informacao de apoio, nao o numero
   principal — por isso nao ganha o mesmo peso do preco cheio. */
.janela-preco .faixa-campanha b{font-size:.82rem;font-weight:600}
.janela-preco .tres-campos{display:grid;
  grid-template-columns:1fr 1fr 1fr;gap:10px;margin:14px 0 4px}
.janela-preco .tres-campos label{display:block;font-size:.62rem;
  text-transform:uppercase;letter-spacing:.05em;color:var(--suave);
  font-weight:700;margin-bottom:3px}
.janela-preco .tres-campos input{width:100%;
  font-variant-numeric:tabular-nums}
/* A MARGEM EM DESTAQUE: e ela que decide, e nao o preco. */
.janela-preco .resultado-mc{display:flex;justify-content:space-between;
  align-items:baseline;gap:10px;padding:9px 11px;margin-top:8px;
  background:var(--zebra);border-radius:8px;font-size:.82rem;
  color:var(--suave)}
.janela-preco .resultado-mc b{font-size:1.05rem;
  font-variant-numeric:tabular-nums}
.janela-preco .bloco-plus{margin-top:14px;padding-top:12px;
  border-top:1px solid var(--linha)}
.janela-preco .liga-plus{display:flex;align-items:flex-start;gap:8px;
  font-size:.84rem;cursor:pointer}
.janela-preco .liga-plus input{margin-top:2px;width:16px;height:16px;
  cursor:pointer}
.janela-preco .acoes{margin-top:16px;display:flex;gap:9px}
.janela-preco .campo-ruim{border-color:var(--erro)}

/* A CLASSE E `janela-lote`, E NAO `janela`.

   `.janela` JA EXISTIA nesta folha, mais abaixo: e a linha de datas da
   campanha, e ela e `display:flex`. Como vinha depois, vencia — e o
   `<dialog>` virava um container flex, o que faz do `<form>` de dentro um
   ITEM flex. Item flex tem `min-width:auto`: ele nao encolhe abaixo do
   conteudo. Resultado: a janela de 602px com um formulario de 882px
   dentro, titulos sem cortar e barra de rolagem horizontal — o que o dono
   viu em 04/09/2026.

   E a segunda vez que um nome de classe generico morde este projeto (a
   primeira foi `.selo`). Nome de classe e nome: quando dois lugares
   diferentes usam o mesmo, um deles quebra em silencio.

   FECHADA E FECHADA, aconteca o que acontecer.

   O navegador esconde `dialog` sem `open` pela folha dele, mas isso vale
   se ele CONHECER o elemento. Num navegador que nao conheca, ou depois de
   uma volta pelo botao "voltar" (que restaura o DOM com o `open` de
   antes), a janela reaparecia no meio da pagina, fora de lugar e sem
   saida — foi o que o dono viu em 04/09/2026: "apareceu uma tela de
   incluir itens sem eu clicar em nada... nao consigo sair dela".

   Estas duas regras tiram a duvida: sem `open`, nao existe; com `open`,
   ela flutua no meio da tela e o resto fica atras — mesmo quando o
   `showModal()` nao pode ser usado. */
dialog.janela-lote:not([open]){display:none!important}
dialog.janela-lote{border:1px solid var(--borda);border-radius:12px;padding:0;
  width:min(960px,96vw);max-height:88vh;background:var(--papel);
  color:var(--texto);box-shadow:0 18px 48px rgba(0,0,0,.22);
  position:fixed;inset:0;margin:auto;z-index:60}
dialog.janela-lote::backdrop{background:rgba(15,18,22,.45)}
/* O escurecido de tras, para quando a janela abre SEM `showModal` — ali
   nao existe `::backdrop`, e sem isto a pagina de tras parece clicavel. */
.fundo-lote{position:fixed;inset:0;background:rgba(15,18,22,.45);
  z-index:59}
dialog.janela-lote form{display:flex;flex-direction:column;max-height:88vh;
  padding:18px 20px;gap:12px}
.lote-topo{display:flex;align-items:flex-start;justify-content:space-between;
  gap:12px}
.lote-topo h2{margin:0;font-size:1.05rem}
button.fechar-janela{background:none;border:0;font-size:1.5rem;line-height:1;
  color:var(--suave);cursor:pointer;padding:0 4px}
button.fechar-janela:hover{color:var(--texto)}
.lote-pe{display:flex;flex-wrap:wrap;align-items:center;
  justify-content:space-between;gap:10px;border-top:1px solid var(--linha);
  padding-top:12px}
.lote-pe .acoes{display:flex;gap:8px}

.lista-elegiveis{overflow-y:auto;overflow-x:hidden;flex:1;min-height:140px;
  max-height:46vh;border:1px solid var(--linha);border-radius:8px}
.lista-elegiveis > p{padding:16px;margin:0}
/* O TITULO CORTA, e nao empurra.

   Titulo de anuncio de marketplace tem oitenta caracteres — "Interruptor
   Cortina Wifi Persiana Rele Inteligente Alexa Google Siri Tuya Smartlife
   App Automacao Residencial". Sem o corte, cada linha empurrava a janela
   para o lado e nascia uma barra de rolagem horizontal: o dono viu isso
   em 04/09/2026. Quem escolhe reconhece o produto pelo comeco do titulo e
   pelo SKU embaixo; o resto e ruido.

   `min-width:0` nos dois niveis e o que permite o corte: sem ele, um item
   flex nao encolhe abaixo do tamanho do conteudo, e o `text-overflow` nao
   tem onde agir. */
label.linha-elegivel{display:flex;align-items:center;gap:10px;min-width:0;
  padding:8px 12px;border-bottom:1px solid var(--linha);cursor:pointer}
label.linha-elegivel:last-child{border-bottom:0}
label.linha-elegivel:hover{background:var(--realce)}
label.linha-elegivel:has(input:checked){background:var(--realce)}
label.linha-elegivel input{width:16px;height:16px}
label.linha-elegivel img,label.linha-elegivel .semfoto{width:34px;height:34px;
  object-fit:contain;border-radius:6px;background:var(--zebra);flex:none}
label.linha-elegivel .txt{flex:1 1 0;min-width:0;display:flex;
  flex-direction:column;overflow:hidden}
label.linha-elegivel .titulo,label.linha-elegivel .meta{display:block;
  max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
label.linha-elegivel .titulo{font-size:.86rem;font-weight:500}
label.linha-elegivel .meta{font-size:.74rem;color:var(--suave)}
label.linha-elegivel .num{text-align:right;font-size:.86rem;flex:none;
  font-variant-numeric:tabular-nums;display:flex;flex-direction:column;
  gap:2px;white-space:nowrap}
label.linha-elegivel .num .pequeno{color:var(--suave)}
@media (max-width:560px){
  dialog.janela-lote{width:96vw}
  label.linha-elegivel .num{font-size:.8rem}
}
/* A LISTA DE ELEGIVEIS VIROU TABELA (11/09/2026): estoque, marca e a
   promocao em que o anuncio ja esta, cada um na sua coluna, e todas
   ordenando pelo titulo. O titulo ficou com metade da largura que tinha. */
dialog#janela-adicionar{width:min(1180px,96vw)}
table.tabela-elegiveis{width:100%;border-collapse:collapse;font-size:.84rem}
table.tabela-elegiveis thead th{position:sticky;top:0;z-index:1;
  background:var(--cabecalho);color:var(--cabecalho-texto);font-size:.72rem;
  text-transform:uppercase;letter-spacing:.03em;padding:7px 8px;
  text-align:left;white-space:nowrap}
table.tabela-elegiveis thead th.num,table.tabela-elegiveis td.num{
  text-align:right;font-variant-numeric:tabular-nums}
table.tabela-elegiveis thead th.ord{cursor:pointer;user-select:none}
table.tabela-elegiveis thead th.ord:after{content:"\2195";opacity:.35;
  margin-left:4px;font-size:.8em}
table.tabela-elegiveis thead th.ord.asc:after{content:"\2191";opacity:.9}
table.tabela-elegiveis thead th.ord.desc:after{content:"\2193";opacity:.9}
table.tabela-elegiveis td{padding:6px 8px;border-bottom:1px solid var(--linha);
  vertical-align:middle}
table.tabela-elegiveis tbody tr{cursor:pointer}
table.tabela-elegiveis tbody tr:hover{background:var(--realce)}
table.tabela-elegiveis tbody tr:has(input:checked){background:var(--realce)}
table.tabela-elegiveis tbody tr.bloqueado{cursor:default;opacity:.62}
table.tabela-elegiveis td.sel,table.tabela-elegiveis th.sel{width:28px}
table.tabela-elegiveis .anuncio-cel{display:flex;align-items:center;gap:8px;
  width:330px;max-width:330px;min-width:0}
table.tabela-elegiveis .anuncio-cel img,
table.tabela-elegiveis .anuncio-cel .semfoto{width:30px;height:30px;
  object-fit:contain;border-radius:6px;background:var(--zebra);flex:none}
table.tabela-elegiveis .anuncio-cel .txt{min-width:0;display:flex;
  flex-direction:column}
table.tabela-elegiveis .anuncio-cel .titulo,
table.tabela-elegiveis .anuncio-cel .meta{overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
table.tabela-elegiveis .anuncio-cel .meta{font-size:.72rem;
  color:var(--suave)}
table.tabela-elegiveis td.promo-atual{max-width:190px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}

/* A SITUACAO DA PROMOCAO, colorida pelo que ela PERMITE fazer: verde no
   que esta no ar (a unica em que um preco novo vale hoje), azul na
   agendada, apagada na encerrada. */
.tag.selo-viva{background:color-mix(in srgb,var(--ok) 16%,transparent);
  color:var(--ok);border-color:color-mix(in srgb,var(--ok) 42%,transparent);
  font-weight:650}
.tag.selo-vindo{background:color-mix(in srgb,var(--otimo) 14%,transparent);
  color:var(--otimo);
  border-color:color-mix(in srgb,var(--otimo) 40%,transparent);
  font-weight:650}
.tag.selo-fim{color:var(--suave);opacity:.85}

/* Tarja de "tem tarefa rodando em OUTRA tela". Discreta de proposito: ela
   informa, nao impede — a cortina fica reservada para a tarefa que a
   propria tela disparou. */
.tarja-outra{display:flex;align-items:center;gap:9px;font-size:.85rem;
  padding:10px 14px;margin-bottom:14px}
.tarja-outra .girando{width:13px;height:13px;flex:0 0 13px;border-radius:50%;
  border:2px solid var(--borda);border-top-color:var(--acento);
  animation:girar .8s linear infinite}

/* ------------------------------------------------------------------
   Faixa de ANDAMENTO: aparece em toda tela de numeros enquanto os dados
   ainda estao chegando.

   E chamativa de proposito. O defeito que ela conserta nao e a demora —
   e a tela mostrar frete zerado e margem inflada como se fossem apurados,
   quando o frete daquele mes ainda nem foi coletado. Numero provisorio com
   cara de definitivo e o pior defeito deste sistema, e quem le a tela sem
   ter acompanhado a importacao nao tem como saber.

   (O comentario evita escrever o valor zerado por extenso: este bloco
   viaja dentro do <style> da pagina, e o teste_fase16c varre o HTML
   inteiro atras desse texto para garantir que preco ausente nunca vire
   zero na tela. Foi ele quem pegou esta prosa aqui.)

   Duas barras porque sao duas perguntas: "quanto falta para a rodada
   acabar" e "aquele passo esta andando ou travado".
   ------------------------------------------------------------------ */
.andamento{border-left:4px solid var(--aviso,#c98a00);
  background:var(--fundo-aviso,#fff8e6);padding:14px 16px;margin-bottom:16px}
.andamento h3{margin:0 0 4px;font-size:1rem}
.andamento .linha{display:flex;justify-content:space-between;
  font-size:.82rem;margin:10px 0 4px;gap:12px}
.andamento .barra{height:8px;border-radius:99px;background:rgba(0,0,0,.09);
  overflow:hidden}
.andamento .barra > i{display:block;height:100%;border-radius:99px;
  background:var(--acento);transition:width .4s ease}
.andamento .barra.passo > i{background:var(--ok,#2e9e5b)}
.andamento ul{margin:10px 0 0;padding-left:18px;font-size:.85rem}
.andamento li{margin:3px 0}
/* A versao CURTA, a que aparece em toda tela: so o que esta rodando e o
   que espera a vez, sem barra e sem lista de pendencia. */
.andamento.curta{padding:10px 14px}
.andamento ul.rodando{list-style:none;padding-left:0;margin:8px 0 0}
.andamento ul.rodando li{display:flex;align-items:center;gap:6px;
  flex-wrap:wrap;margin:4px 0}
.andamento ul.rodando li.esperando{opacity:.72}
/* OS AVISOS EM CARTÕES PEQUENOS, lado a lado (dono, 20/10/2026). A faixa
   deixa de ser um quadro amarelo da largura da tela: cada tarefa é um
   cartão da largura de dois campos, e eles se enfileiram — só quebram de
   linha quando não cabem. */
.cartao.andamento.faixa-mini{background:transparent;border:0;box-shadow:none;
  padding:0;margin:0 0 14px;display:flex;flex-wrap:wrap;gap:8px}
.aviso-mini{width:300px;box-sizing:border-box;
  background:var(--fundo-aviso,#fff8e6);border:1px solid var(--borda);
  border-left:3px solid var(--aviso,#c98a00);border-radius:8px;
  padding:7px 10px;font-size:.74rem;line-height:1.3}
.aviso-mini.esperando{opacity:.78}
.aviso-mini .am-topo{display:flex;align-items:center;gap:6px;min-width:0;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600}
.aviso-mini .am-topo .origem-mkt{display:inline-block;font-size:.6rem;
  padding:1px 6px;flex:0 0 auto}
.aviso-mini .am-nome{font-weight:700;margin:3px 0 1px;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.andamento .aviso-mini .linha{font-size:.66rem;margin:5px 0 2px;gap:8px}
.andamento .aviso-mini .linha span:first-child{white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.andamento .aviso-mini .barra{height:5px}
.andamento .aviso-mini ul{margin:4px 0 0;padding-left:14px;font-size:.66rem}
.aviso-mini .am-nota{font-size:.66rem;margin-top:4px}
/* NADA GIRA: o andamento é a faixa (dono, 20/10/2026). */
.girando{display:none!important}

/* ------------------------------------------------------------------
   Sincronizacao: uma linha por conta, recolhida.

   Com um CNPJ a tela ja era longa. Com tres marketplaces e cinco CNPJs
   seria rolagem infinita para responder uma pergunta que cabe numa
   linha: esta tudo em dia? O detalhe fica a um clique.
   ------------------------------------------------------------------ */
.bloco-canal > summary{cursor:pointer;list-style:none;display:flex;
  align-items:center;gap:10px;flex-wrap:wrap;font-size:1.05rem;
  padding:2px 0 2px 22px;position:relative;user-select:none}
.bloco-canal > summary::-webkit-details-marker{display:none}
.bloco-canal > summary::before{content:"";position:absolute;left:2px;
  top:50%;width:0;height:0;border:5px solid transparent;
  border-left-color:var(--texto-fraco,#7a7a7a);
  transform:translateY(-50%);transition:transform .15s ease}
.bloco-canal[open] > summary::before{transform:translateY(-50%) rotate(90deg);
  transform-origin:35% 50%}
.bloco-canal > summary:hover::before{border-left-color:var(--acento)}
.bloco-canal > summary .pequeno{margin-left:auto;text-align:right}

/* ------------------------------------------------------------------
   Selecao em lote nas promocoes.

   Os botoes ficam DEPOIS da lista e alinhados a esquerda, na mesma
   direcao das caixinhas: quem marcou de cima para baixo termina o olhar
   exatamente onde esta o botao.

   As cores sao CLARAS de proposito. O verde e o vermelho fortes ja sao
   dos botoes por linha, que agem num anuncio so; o lote mexe em varios de
   uma vez e nao pode competir visualmente com eles.
   ------------------------------------------------------------------ */
.acoes-lote{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  margin:12px 0 0}
.acoes-lote .pequeno{margin-left:6px}
.acoes-lote button{border:1px solid transparent;border-radius:8px;
  padding:8px 16px;font-weight:600;cursor:pointer}
.acoes-lote .lote-entrar{background:#e6f5ea;border-color:#a8d8b9;
  color:#1d6b39}
.acoes-lote .lote-entrar:hover{background:#d7eede}
.acoes-lote .lote-sair{background:#fdeaea;border-color:#f0b4b4;
  color:#93231f}
.acoes-lote .lote-sair:hover{background:#f9dada}
/* O TERCEIRO BOTAO DE LOTE — o preco exclusivo do Meli+. Azul porque nao
   e nem entrar nem sair: ele mexe num preco de quem ja esta dentro. */
.acoes-lote .lote-meli{background:#e8f0fd;border-color:#a9c6ef;
  color:#154a9c}
.acoes-lote .lote-meli:hover{background:#d8e6fb}
td.marca-lote,th.marca-lote{width:28px;text-align:center;padding-right:0}
/* ------------------------------------------------------------------
   Barra horizontal do grafico por UF.
   (O titulo do cartao NAO se escreve aqui: comentario de CSS viaja
   dentro do <style> e apareceria na busca por texto de toda pagina.)

   Sao 25 UFs com cauda longa — as tres primeiras somam metade e as doze
   ultimas ficam abaixo de 1%. Rosca nao serve: fatia de 0,19% e invisivel
   e a legenda com 25 entradas nao se le. Comprimento e a codificacao mais
   precisa para magnitude, e a barra ainda deixa espaco na linha para os
   tres numeros.
   ------------------------------------------------------------------ */
table.estados th.uf{text-align:left;font-weight:700;width:44px;
  white-space:nowrap}
table.estados td.barra-uf{width:100%;padding:0 10px}
table.estados td.barra-uf span{display:block;height:11px;border-radius:99px;
  background:var(--acento);min-width:3px}
table.estados td.pedidos{color:var(--suave);white-space:nowrap}
table.estados td.pct{white-space:nowrap}

td.marca-lote input,th.marca-lote input{cursor:pointer;width:15px;
  height:15px}
/* O tracinho do "parcialmente marcado" vem do proprio navegador quando o
   `indeterminate` esta ligado; so garantimos que ele nao fique apagado. */
th.marca-lote input:indeterminate{opacity:1}

/* ------------------------------------------------------------------
   Anuncios: o titulo cede espaco para a coluna de Status.

   Sobrava vao entre o nome e o SKU — espaco que nao dizia nada. O status
   diz: um anuncio "Inativo" com margem bonita nao vende nada, e sem a
   coluna nao havia como saber olhando a lista.
   ------------------------------------------------------------------ */
/* O NOME NAO PODE INVADIR A COLUNA DO SKU.

   O DEFEITO, visto pelo dono em 04/09/2026: "quando a tela esta menor, a
   coluna SKU sobrepoe a do anuncio". `max-width` num <td> e uma sugestao
   que o navegador ignora quando a tabela e `layout:auto` — o texto
   crescia por cima da celula vizinha. Quem obedece max-width e o DIV de
   dentro, e e nele que o limite passa a viver. O `min-width:0` e o que
   permite o flex encolher; sem ele o filho recusa e volta a estourar. */
table.estreita .produto-col{max-width:320px;overflow:hidden}
table.estreita .produto-col .produto{min-width:0}
table.estreita .produto-col .txt{min-width:0;max-width:286px}
table.estreita .produto-col .titulo{overflow:hidden;text-overflow:ellipsis;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
/* O SKU numa linha so: quebrado no meio ele deixa de servir para copiar
   e para comparar de cima a baixo. */
table.estreita td.sku-col{white-space:nowrap}

/* ------------------------------------------------------------------
   Tela de Integracoes: um quadro por CNPJ, compacto.

   O CNPJ manda no titulo porque e ele que identifica a empresa — o nome
   e apelido e muda; o CNPJ amarra os pedidos, os custos e a nota.
   ------------------------------------------------------------------ */
.cnpj-quadro{background:var(--papel);border:1px solid var(--borda);
  border-radius:11px;padding:15px 17px 16px;margin-bottom:16px}
.cnpj-quadro > h2{display:flex;align-items:baseline;gap:10px;margin:0 0 2px;
  font-size:1.12rem;letter-spacing:-.01em}
.cnpj-quadro > h2 .apelido{font-size:.84rem;font-weight:500;
  color:var(--suave)}

/* A linha editavel: quatro campos e o botao, tudo numa altura so. Antes
   era uma tabela de leitura mais um "Editar percentuais" que levava para
   outra tela — dois cliques e uma navegacao para trocar um numero. */
.cnpj-linha{display:grid;
  grid-template-columns:minmax(150px,1.6fr) 92px 92px minmax(170px,1.1fr) auto;
  gap:9px;align-items:end;margin:11px 0 4px}
.cnpj-linha label{display:block;font-size:.68rem;text-transform:uppercase;
  letter-spacing:.045em;color:var(--suave);margin:0 0 3px;font-weight:600}
.cnpj-linha input,.cnpj-linha select{width:100%;box-sizing:border-box;
  padding:6px 8px;font-size:.87rem;border:1px solid var(--borda);
  border-radius:7px;background:var(--fundo);color:var(--texto);
  font-family:inherit;margin:0}
.cnpj-linha button{padding:7px 15px;font-size:.87rem;white-space:nowrap}
@media (max-width:900px){
  .cnpj-linha{grid-template-columns:1fr 1fr;align-items:start}
  .cnpj-linha button{grid-column:1/-1;width:100%}
}

/* ------------------------------------------------------------------
   As integracoes de um CNPJ, empilhadas.

   Faixa horizontal e nao grade de cartoes: cada integracao tem um punhado
   de numeros e dois ou tres botoes, e numa grade estreita isso vira texto
   quebrado em tres linhas. A borda esquerda colorida diz de qual sistema
   e a faixa sem precisar de logo nem legenda.
   ------------------------------------------------------------------ */
.integra-lista{display:flex;flex-direction:column;gap:10px;margin-top:13px}
.integra-faixa{background:var(--papel);border:1px solid var(--borda);
  border-radius:10px;padding:12px 15px;
  /* As duas primeiras colunas tem largura FIXA de proposito: cada faixa e
     um grid proprio, e com colunas em fr o Apelido e o Aplicar de uma
     faixa paravam num x diferente da faixa de cima — conteudo diferente,
     conta diferente. Fixas, as colunas batem verticalmente entre elas. */
  display:grid;grid-template-columns:190px 300px
    minmax(200px,1fr) auto;gap:14px;align-items:center}
.integra-faixa .cabeca{display:flex;flex-direction:column;gap:1px;
  min-width:0}
/* O TIPO VIRA UMA BARRA DE TITULO, com as cores do cabecalho de tabela.
   Pedido do dono em 06/09/2026: "fica mais facil de dividir qual e qual".
   Eram tres integracoes empilhadas com a mesma cara — ERP, marketplace e
   loja propria — e a unica diferenca era uma palavra em cinza claro,
   perdida no canto de cada cartao.

   A barra e posicionada por CSS em vez de mover o `<span>` no HTML: ela
   pertence ao cartao inteiro, e nao a primeira coluna do grid onde o
   texto mora. */
.integra-faixa{position:relative;padding-top:28px}
.integra-faixa .tipo{position:absolute;top:0;left:0;right:0;
  background:var(--cabecalho);color:var(--cabecalho-texto);
  border-radius:9px 9px 0 0;padding:3px 15px;
  font-size:.62rem;text-transform:uppercase;letter-spacing:.06em;
  font-weight:700}
.integra-faixa .marca{font-size:.98rem;font-weight:700;line-height:1.2}
.integra-faixa .conta{font-size:.76rem;color:var(--suave);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

.integra-faixa .apelido{display:flex;align-items:flex-end;gap:7px;
  flex-wrap:wrap}
.integra-faixa .apelido label{font-size:.62rem;text-transform:uppercase;
  letter-spacing:.05em;color:var(--suave);font-weight:700;
  width:100%;margin:0 0 3px}
.integra-faixa .apelido input{flex:1;min-width:120px;padding:5px 8px;
  font-size:.85rem;border:1px solid var(--borda);border-radius:7px;
  background:var(--fundo);color:var(--texto);font-family:inherit;margin:0}
.integra-faixa .apelido button{padding:5px 11px;font-size:.79rem}

.integra-faixa .corpo{display:flex;flex-wrap:wrap;gap:4px 14px;
  font-size:.82rem;align-items:baseline}
.integra-faixa .corpo .pequeno{font-size:.72rem}
.integra-faixa .acoes{display:flex;flex-wrap:wrap;gap:6px;
  justify-content:flex-end}
.integra-faixa .acoes .botao,.integra-faixa .acoes button{font-size:.79rem;
  padding:5px 11px}
.integra-faixa .acoes form{margin:0}
@media (max-width:1100px){
  .integra-faixa{grid-template-columns:1fr 1fr}
  .integra-faixa .acoes{grid-column:1/-1;justify-content:flex-start}
}
@media (max-width:640px){.integra-faixa{grid-template-columns:1fr}}

.cartao.andamento .tarefa-faixa + .tarefa-faixa{border-top:1px solid var(--borda);
  margin-top:12px;padding-top:12px}
.cartao.andamento ul.rodando li + li{border-top:1px solid var(--borda);
  margin-top:6px;padding-top:6px}
.conexao-nova{grid-column:1/-1;font-size:.8rem;line-height:1.5;
  border-top:1px dashed var(--borda);padding-top:8px;margin-top:4px}
.conexao-nova form{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 0}
.conexao-nova input{flex:1;min-width:160px;padding:5px 8px}
.conexao-nova button{font-size:.79rem;padding:5px 11px}
.conexao-nova code{font-size:.78rem;user-select:all}
.conexao-nova form.chaves-v3{align-items:flex-end}
.conexao-nova .chaves-v3 label{display:flex;flex-direction:column;gap:2px;
  flex:1;min-width:180px;font-size:.66rem;text-transform:uppercase;
  letter-spacing:.04em;color:var(--suave)}
.conexao-nova .chaves-v3 input{font-size:.8rem;text-transform:none;
  letter-spacing:0}
.conexao-nova .mascarado{-webkit-text-security:disc;text-security:disc}
.integra-nova{display:block;text-align:center;padding:11px;
  border:1px dashed var(--borda);border-radius:10px;color:var(--suave);
  text-decoration:none;font-size:.87rem;font-weight:600;
  transition:border-color .12s,color .12s}
.integra-nova:hover{border-color:var(--acento);color:var(--acento)}
.vazio-integra{margin:12px 0 8px}

/* A tela de escolher qual integracao conectar. As que ainda nao existem
   ficam cinzas e desligadas — um botao que leva a "em breve" gasta o
   clique e a expectativa de quem tinha um CNPJ para conectar hoje. */
.conectar-lista{display:flex;flex-direction:column;gap:9px;margin:14px 0 4px}
.conectar-opcao{display:flex;align-items:center;gap:16px;padding:13px 16px;
  border:1px solid var(--borda);border-radius:10px;text-decoration:none;
  color:var(--texto);background:var(--papel);
  transition:border-color .12s,background .12s}
a.conectar-opcao:hover{border-color:var(--acento);background:var(--realce)}
.conectar-opcao .cabeca{display:flex;flex-direction:column;gap:1px;
  flex:0 0 190px}
.conectar-opcao .tipo{font-size:.62rem;text-transform:uppercase;
  letter-spacing:.06em;color:var(--suave);font-weight:700}
.conectar-opcao .marca{font-size:1rem;font-weight:700}
.conectar-opcao .resumo{margin:0;font-size:.82rem;color:var(--suave);
  flex:1;line-height:1.45}
.conectar-opcao .seta{font-size:.82rem;font-weight:600;white-space:nowrap;
  color:var(--acento)}
.conectar-opcao.apagada{opacity:.5;background:var(--linha);cursor:default}
.conectar-opcao.apagada .seta{color:var(--suave);font-weight:500;
  font-style:italic}
.passos{margin:8px 0 16px;padding-left:20px;line-height:1.7}
.passos li{margin-bottom:5px}

/* A pergunta "qual CNPJ?", quando ha mais de um e nenhum foi escolhido.
   Carregar o CNPJ errado antes de perguntar custa minutos e um pedaco da
   cota do Mercado Livre, que e por aplicacao e vale para todos juntos. */
.cnpj-opcoes{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));
  gap:10px;margin-top:12px}
.cnpj-opcao{display:flex;align-items:center;gap:10px;padding:13px 15px;
  border:1px solid var(--borda);border-radius:10px;text-decoration:none;
  color:var(--texto);background:var(--papel);
  transition:border-color .12s,background .12s}
.cnpj-opcao:hover{border-color:var(--acento);background:var(--realce)}
.cnpj-opcao .ponto{width:11px;height:11px;flex:0 0 11px;border-radius:50%}
.cnpj-opcao .nome{font-weight:650}
.cnpj-opcao .canal{margin-left:auto;font-size:.76rem;color:var(--suave)}
.escolha-cnpj{padding:12px 16px;margin-bottom:14px}
/* Com UM CNPJ nao ha o que escolher, mas ha o que SABER: a tela diz de
   qual empresa ela e, em vez de deixar a pessoa deduzir. */
.escolha-cnpj.so-um{display:flex;align-items:center;gap:9px;
  padding:9px 15px;font-size:.9rem}
.escolha-cnpj.so-um .ponto{width:10px;height:10px;flex:0 0 10px;
  border-radius:50%}
.escolha-cnpj.so-um .rot{font-size:.68rem;text-transform:uppercase;
  letter-spacing:.05em;color:var(--suave);font-weight:600}

/* Quando a campanha corre, embaixo do nome dela. Sem isto a margem
   decidia sozinha, e ela nao basta: entrar numa campanha que acaba amanha
   e diferente de entrar numa que corre o mes inteiro. */
.janela{font-size:.72rem;color:var(--suave);margin-top:2px;
  display:flex;flex-wrap:wrap;align-items:center;gap:6px}
.janela .prazo{padding:0 6px;border-radius:99px;font-weight:600;
  font-size:.68rem;border:1px solid currentColor}
.janela .prazo.apertado{color:var(--aviso)}
.janela .prazo.vencido{color:var(--erro)}

/* Os quatro campos das faixas, lado a lado. Em coluna no celular: com
   quatro campos numericos em linha num telefone, cada um fica com espaco
   para dois digitos e o rotulo quebra no meio. */
.faixas-margem{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;
  margin:10px 0 4px}
.faixas-margem label{display:flex;align-items:center;gap:6px}
.faixas-margem .bolinha{font-size:.9rem;line-height:1}
.faixas-margem .pequeno{display:block;margin-top:3px}
.faixas-margem input[disabled]{opacity:.55;font-style:italic}
@media (max-width:760px){.faixas-margem{grid-template-columns:1fr 1fr}}
@media (max-width:420px){.faixas-margem{grid-template-columns:1fr}}
/* Zebra tambem na tela de pedidos: com 200 linhas, e o que segura o olho na
   horizontal. */
table.lista tbody tr:nth-child(even){background:var(--zebra)}
/* Pedido cancelado continua visivel, mas apagado: ele nao entra no
   resultado, e a cor diz isso sem precisar de etiqueta. */
tr.desconsiderada td,
tr.desconsiderada td *:not(.tag):not(.pub):not(svg):not(path){
  color:var(--suave)!important;font-weight:400!important}
.tag.personalizavel{background:color-mix(in srgb,var(--acento) 14%,transparent);
  color:var(--acento);margin-left:5px;cursor:help;font-weight:700}
.tag{display:inline-block;padding:1px 7px;border-radius:99px;font-size:.7rem;
  border:1px solid var(--borda);color:var(--suave)}
.tag.ruim{border-color:var(--erro);color:var(--erro)}
.tag.ok{border-color:var(--ok);color:var(--ok)}
/* OS CARIMBOS A, B, C E X (dono, 28/10/2026): "A azul escuro com fundo
   azul claro e borda azul escura, B da mesma forma em tons verdes, C em
   tons amarelos, e X em tons vermelhos". Ver `curvas`. */
.carimbo{display:inline-flex;align-items:center;justify-content:center;
  min-width:1.35em;height:1.35em;padding:0 3px;border:1.5px solid;
  border-radius:4px;font-size:.72rem;font-weight:800;line-height:1;
  vertical-align:middle;margin-right:5px;cursor:help;
  font-variant-numeric:tabular-nums}
.cartao.ficha-topo.destacado .curvas-mp{color:var(--cabecalho-texto);opacity:.85}
.carimbo.grande{min-width:1.6em;height:1.6em;font-size:1.7rem;
  border-width:2.5px;border-radius:7px;margin:0 10px 0 0}
.carimbo.pequeno-mp{font-size:.66rem}
td.curva-col,th.curva-col{text-align:center;white-space:nowrap}
td.curva-col .carimbo{margin-right:0}
.carimbo-a{color:#1e3a8a;background:#dbeafe;border-color:#1e3a8a}
.carimbo-b{color:#14532d;background:#dcfce7;border-color:#166534}
.carimbo-c{color:#713f12;background:#fef9c3;border-color:#a16207}
.carimbo-x{color:#7f1d1d;background:#fee2e2;border-color:#b91c1c}
.curvas-mp{display:inline-flex;gap:10px;align-items:center;flex-wrap:wrap;
  font-size:.78rem;color:var(--suave)}
.curvas-mp span.mp{display:inline-flex;align-items:center}
.form-x{display:inline-flex;gap:8px;align-items:center;margin:0}
.form-x button{padding:3px 10px;font-size:.78rem}
.form-x button.tirar-x{background:transparent;color:var(--erro);
  border:1px solid var(--erro)}
.form-x button.por-x{background:var(--erro);border-color:var(--erro);color:#fff}
.titulo-desconsiderados{margin:22px 0 6px}
/* A SITUACAO DO ANUNCIO, uma cor para cada (dono, 25/09/2026). Fundo
   tingido e texto na mesma cor, legivel nos dois temas; vermelho so para
   o que e problema (ativo sem estoque). */
.tag.status-active{color:var(--acento);border-color:color-mix(in srgb,var(--acento) 45%,transparent);
  background:color-mix(in srgb,var(--acento) 10%,transparent)}
.tag.status-paused{color:#a16207;border-color:rgba(202,138,4,.5);background:rgba(234,179,8,.14)}
.tag.status-under_review{color:#c2410c;border-color:rgba(234,88,12,.5);background:rgba(249,115,22,.12)}
.tag.status-payment_required{color:#7c3aed;border-color:rgba(124,58,237,.45);background:rgba(124,58,237,.1)}
.tag.status-closed,.tag.status-inactive{color:var(--suave);border-color:var(--borda);background:var(--fundo)}
.tag.status-sem-estoque{color:var(--erro);border-color:color-mix(in srgb,var(--erro) 45%,transparent);
  background:color-mix(in srgb,var(--erro) 9%,transparent)}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]) .tag.status-paused{color:#facc15}
  :root:not([data-theme="light"]) .tag.status-under_review{color:#fb923c}
  :root:not([data-theme="light"]) .tag.status-payment_required{color:#a78bfa}
}
:root[data-theme="dark"] .tag.status-paused{color:#facc15}
:root[data-theme="dark"] .tag.status-under_review{color:#fb923c}
:root[data-theme="dark"] .tag.status-payment_required{color:#a78bfa}
.tag.atencao{border-color:var(--aviso);color:var(--aviso)}
/* AS CORES DO STATUS DO PEDIDO. Pedido do dono em 07/09/2026: "coloque
   cores nos tags de status, fica mais facil". Fundo tenue em vez de so
   borda — numa tabela de 250 linhas a borda colorida some, e o que se
   quer aqui e achar o cancelado de relance. As quatro familias dizem o
   que fazer, e nao so o que aconteceu:
     verde   terminou bem       amarelo  esperando alguma coisa
     azul    a caminho          vermelho nao vai render dinheiro */
.tag.st-bom{background:color-mix(in srgb,var(--ok) 16%,transparent);
  border-color:color-mix(in srgb,var(--ok) 45%,transparent);
  color:var(--ok);font-weight:600}
.tag.st-espera{background:color-mix(in srgb,var(--aviso) 18%,transparent);
  border-color:color-mix(in srgb,var(--aviso) 45%,transparent);
  color:var(--aviso);font-weight:600}
.tag.st-andando{background:color-mix(in srgb,var(--otimo) 14%,transparent);
  border-color:color-mix(in srgb,var(--otimo) 40%,transparent);
  color:var(--otimo);font-weight:600}
.tag.st-morto{background:color-mix(in srgb,var(--erro) 14%,transparent);
  border-color:color-mix(in srgb,var(--erro) 42%,transparent);
  color:var(--erro);font-weight:600}

/* TABELA DENSA. O dono trabalha esta tela em meia janela de um monitor
   de 32 polegadas, e pediu "sem tantos espacamentos entre as colunas".
   So o respiro horizontal encolhe: a altura da linha continua legivel,
   porque e ela que separa uma venda da outra. */
/* A TABELA DENSA SE MEDE PELO CONTEUDO, e nao pela largura da tela.
   
   O DEFEITO, visto pelo dono em 08/09/2026: "quando ela comeca a aparecer
   a barra de rolagem, ainda sobra mto espaco nas colunas PEDIDO, CLIENTE,
   STATUS". Ele viu certo, e a causa nao era o conteudo — era CSS:
   `table{width:100%}` mais `.rolagem table{min-width:1180px}` obrigavam a
   tabela a 1180px e depois a estica-la para preencher. A sobra ia toda
   para as colunas de texto, que sao as unicas elasticas. Dava barra de
   rolagem E espaco vazio ao mesmo tempo, que parece contradicao e nao e.

   `max-content` faz cada coluna pedir o que precisa e nada mais; o
   `min-width:100%` mantem a tabela preenchendo a caixa quando o conteudo
   e menor que ela. Nada e cortado — o texto que ja cabia continua
   cabendo. */
table.densa{width:max-content;min-width:100%}
.rolagem table.densa{min-width:100%}
/* O CABECALHO PODE QUEBRAR EM DUAS LINHAS. "TOTAL DA COMPRA" numa linha
   so reservava ~140px para uma coluna cujos numeros ocupam metade disso.
   Quebrar o titulo nao custa altura nenhuma: a linha do cabecalho ja tem
   duas, por causa dos titulos agrupados. */
table.densa th{white-space:normal}
table.densa th, table.densa td{padding:1px 5px;font-size:.78rem;
  line-height:1.3;vertical-align:middle}
table.densa td{white-space:nowrap}
/* A COLUNA DO CLIENTE NAO PODE MANDAR NA LARGURA DA TABELA.
   Pedido do dono em 08/09/2026: "diminua a coluna cliente para 40% do que
   esta hj, a tabela esta ficando muito larga por causa disso". Nomes como
   "40.468.432 LUCAS BATISTA DE PA 40.468.432 LUCAS BATISTA DE PA"
   empurravam as colunas de dinheiro para fora da tela — e sao as de
   dinheiro que a pessoa veio ver.
   O nome inteiro NAO se perde: fica na dica do mouse e no botao de
   copiar, que continua do lado de fora do corte. */
table.densa td.cliente-col{max-width:9.5rem}
table.densa td.cliente-col .corta{display:inline-block;max-width:8rem;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  vertical-align:middle}
table.densa .tag{font-size:.66rem;padding:0 6px;line-height:1.5}
/* A LINHA TEM DE SER A MAIS BAIXA POSSIVEL. O dono opera esta tela em
   meia janela de um monitor de 32 e pediu: "tem muito espaco em branco
   ai". O que ocupava altura era a segunda linha de cada celula — o
   numero da transacao e a tag de reclamacao — desenhada como bloco com
   margem propria. Aqui ela vira uma linha rente, de 11px. */
table.densa .sub, table.densa .linha2{margin:0;padding:0;
  line-height:1.15;font-size:.64rem}
table.densa .linha2 .tag{font-size:.6rem;padding:0 5px}
table.densa .copiar{padding:0;margin-left:3px;vertical-align:baseline}
/* O PERCENTUAL FICA AO LADO DO VALOR, menor e mais claro: ele e leitura
   de apoio, e nao um segundo numero disputando atencao com o primeiro. */
table.densa .pct-lado{font-size:.66rem;color:var(--suave);
  margin-left:5px;font-weight:400}
table.densa .copiar{opacity:.35}
table.densa tr:hover .copiar{opacity:1}
/* O NUMERO DO PEDIDO E O DO LANCAMENTO SAO LINKS SEM TRACO.
   Pedido do dono em 08/09/2026: "não coloque um traço embaixo do número,
   deixe ele com a mesma formatação atual, mas em link". Numa tabela de
   numeros, o pontilhado embaixo de cada linha vira listra e cansa a
   vista; a cor no hover ja diz que da para clicar. */
table.densa a.pedido{font-weight:600;color:var(--texto);
  text-decoration:none}
table.densa a.pedido:hover{color:var(--otimo)}
/* O TITULO QUE ORDENA PELA LISTA INTEIRA: e um link, e tem de parecer
   clicavel sem virar link azul no meio do cabecalho escuro. */
th a.ordena-link{color:inherit;text-decoration:none;display:inline-block}
th a.ordena-link:hover{text-decoration:underline}
th a.ordena-link .seta{font-size:.6em;opacity:.85;margin-left:2px}
/* O lancamento do Mercado Pago: link com a MESMA cara do texto que ele
   substituiu — mesma cor apagada, mesmo tamanho, sem traco. */
table.densa .sub a.cru{color:inherit;text-decoration:none}
table.densa .sub a.cru:hover{color:var(--otimo)}
table.densa .sub{font-size:.66rem;color:var(--suave);
  display:block;line-height:1.25}
/* VALOR QUE TEM CONTA POR TRAS. O pontilhado convida a parar o mouse —
   sem ele, ninguem descobre que a composicao da deducao esta ali. */
table.densa .tem-conta{border-bottom:1px dotted var(--suave);cursor:help}
/* O QUE AINDA NAO CAIU sai apagado. O numero continua a vista — saber
   quanto vem e util —, mas com peso de informacao de apoio, para nunca
   ser lido como dinheiro em caixa. */
table.densa .suave-col{color:var(--suave);font-weight:400}
/* A COLUNA DA DIFERENCA e a razao da tela existir: ela fica separada do
   resto por uma linha, para o olho achar sem procurar. */
table.densa td:last-child, table.densa th:last-child{
  border-left:1px solid var(--borda)}
/* O PADRAO DE TODA TABELA (dono, 11/09/2026): uma linha de cada cor, um
   tom mais ESCURO sob o mouse — o mesmo do Envios Full, que ele aprovou —
   e o cabecalho escuro com texto branco em negrito. As tres familias
   (lista, compacta, densa) dividem a mesma regra: hover que muda de tela
   para tela e o mesmo que nao ter padrao nenhum. */
table.densa tbody tr:nth-child(even){background:var(--zebra)}
table.lista tbody tr:hover,
table.compacta tbody tr:hover,
table.densa tbody tr:hover{background:var(--linha-foco)}
/* ---- grafico de rosca e logistica ----------------------------------- */
.rosca{display:flex;gap:22px;align-items:center;flex-wrap:wrap}
.rosca svg{flex:0 0 150px}
.rosca .legenda{flex:1;min-width:250px;display:grid;gap:5px}
.rosca .fatia{display:grid;grid-template-columns:12px 1fr auto auto;gap:9px;
  align-items:center;font-size:.82rem}
.rosca .ponto{width:11px;height:11px;border-radius:3px}
.rosca .pct{font-weight:600}
.rosca .val{color:var(--suave);font-size:.78rem;min-width:88px;
  text-align:right}
.rosca .fatia.total{border-top:1px solid var(--linha);padding-top:5px;
  margin-top:3px;font-weight:600}
.rosca .fatia.prejuizo .rot,.rosca .fatia.prejuizo .pct,
.rosca .fatia.prejuizo .val{color:var(--erro);font-weight:600}
/* A rosca a esquerda e os quadros a direita. Como o numero de logisticas
   nao e fixo (Flex e entrega direta entram quando aparecerem), a grade se
   ajusta sozinha e o grafico acompanha. */
.logistica-corpo{display:flex;gap:18px;align-items:flex-start;flex-wrap:wrap}
.logistica-corpo .rosca.miuda{flex:0 0 auto}
.logistica-corpo .logistica-grade{flex:1;min-width:230px}
.logistica-grade{display:grid;gap:10px;
  grid-template-columns:repeat(auto-fill,minmax(184px,1fr))}
.logistica-item{padding:9px 11px;border:1px solid var(--borda);
  border-radius:9px}
.logistica-item.total{border-color:var(--acento)}
.logistica-item .rot{font-size:.72rem;color:var(--suave);
  text-transform:uppercase;letter-spacing:.04em}
/* A ORIGEM em cima, menor. Sem isso "Olist (direto) · Sem transportadora"
   ocupava duas linhas de texto grande e empurrava o valor para fora. */
.logistica-item .rot .origem{display:block;font-size:.63rem;font-weight:600;
  letter-spacing:.06em;opacity:.62;margin-bottom:1px}
.logistica-item .val{font-size:1rem;font-weight:600;margin-top:2px}
.logistica-item .nota{font-size:.7rem;color:var(--suave);margin-top:2px}

/* ---- abas e cartoes de campanha ------------------------------------- */
.abas{display:flex;gap:4px;border-bottom:1px solid var(--borda);
  margin-bottom:16px;flex-wrap:wrap}
.abas a{padding:9px 16px;text-decoration:none;color:var(--suave);
  font-size:.88rem;border:1px solid transparent;border-bottom:none;
  border-radius:9px 9px 0 0;margin-bottom:-1px}
.abas a.ativo{color:var(--texto);font-weight:600;background:var(--papel);
  border-color:var(--borda)}
.abas a:hover{color:var(--texto)}
/* Campanhas em cartoes pequenos e lado a lado: com dez campanhas abertas,
   uma lista vertical empurraria a tabela para fora da tela. */
.campanhas{display:grid;gap:8px;margin-bottom:16px;
  grid-template-columns:repeat(auto-fill,minmax(240px,1fr))}
.campanha{display:block;padding:9px 11px;border:1px solid var(--borda);
  border-radius:9px;background:var(--papel);text-decoration:none;
  color:var(--texto);border-left:3px solid var(--borda)}
.campanha:hover{border-color:var(--acento)}
.campanha.ativa{border-color:var(--acento);border-left-color:var(--acento);
  background:var(--realce)}
.campanha .nome{font-size:.82rem;font-weight:600;line-height:1.2;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.campanha .tipo{font-size:.7rem;color:var(--suave);margin-top:2px}
.campanha .prazo{font-size:.68rem;color:var(--suave);margin-top:2px}
.campanha .prazo b{color:var(--acento)}
.filtro-situacao{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:12px}
.filtro-situacao a{padding:5px 12px;border:1px solid var(--borda);
  border-radius:99px;text-decoration:none;color:var(--suave);font-size:.78rem}
.filtro-situacao a.ativo{border-color:var(--acento);color:var(--acento);
  font-weight:600}
.ficha{display:flex;gap:12px;align-items:center;flex-wrap:wrap;
  padding-bottom:10px;border-bottom:1px solid var(--linha);margin-bottom:10px}
.ficha img{width:46px;height:46px;object-fit:contain;border-radius:7px;
  background:var(--linha)}
.ficha .dados{flex:1;min-width:240px}
.ficha .nome{font-size:.92rem;font-weight:600;line-height:1.25}
.ficha .meta{display:flex;align-items:center;gap:6px;font-size:.74rem;
  color:var(--suave);margin-top:3px;flex-wrap:wrap}
.ficha .numeros{display:flex;gap:18px}
.ficha .numeros div{text-align:right}
.ficha .rot{font-size:.68rem;color:var(--suave);text-transform:uppercase;
  letter-spacing:.04em}
.ficha .val{font-size:.95rem;font-weight:600}
.ficha .mc-ficha{position:relative}

/* ---- tabela compacta das promocoes ---------------------------------- */
/* Linhas baixas e alternadas: com 200 anuncios na tela, altura de linha e
   contraste zebrado sao o que deixa acompanhar a leitura na horizontal. */
table.compacta td{padding:5px 9px;font-size:.82rem;line-height:1.25}
table.compacta th{padding:6px 9px}
table.compacta tbody tr:nth-child(even){background:var(--zebra)}
/* Coluna do anuncio mais estreita (para caber em meio monitor): o titulo
   corta com "..." e o nome completo aparece ao passar o mouse (title). */
table.compacta .produto{min-width:115px;gap:7px;align-items:center}
table.compacta .produto img,table.compacta .semfoto{width:28px;height:28px;
  flex:0 0 28px;border-radius:5px;object-fit:contain;background:var(--linha)}
table.compacta .produto .titulo{font-size:.82rem;line-height:1.2;
  max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
table.compacta .produto .titulo a{color:var(--texto);text-decoration:none}
table.compacta .produto .titulo a:hover{text-decoration:underline}
table.compacta .produto .meta{display:flex;align-items:center;gap:4px;
  font-size:.7rem;color:var(--suave);margin-top:1px}
/* O CABECALHO DE GRUPO E O RECUO DA VARIACAO FORAM REMOVIDOS em
   04/09/2026, pelo proprio dono, olhando a tela pronta: "remover a linha
   do pai, colocar o nome dele nas variacoes e no final branco... assim
   fica apenas uma linha normal com o SKU correto".

   Ele estava certo por um motivo que o CSS nao resolvia: uma tabela com
   dois tipos de linha nao ordena, nao filtra e nao se le em diagonal — e
   o cabecalho gastava uma linha inteira por grupo para repetir um nome
   que a variacao ja carrega no titulo dela. */
/* Explicacao nao e erro: o motivo do anuncio-pai diz onde esta o que se
   vende, e em vermelho ele ensinaria a ignorar o vermelho. */
table.compacta .motivo.neutro{color:var(--suave)}
table.compacta .motivo{font-size:.7rem;color:var(--erro);white-space:normal;
  max-width:430px;margin-top:1px}
table.compacta .selo{width:26px;padding-right:0}
table.compacta .tag{padding:0 5px;font-size:.72rem}
/* Situacao do anuncio na campanha, em bolinhas para nao confundir:
   candidato = bolinha de fundo BRANCO com borda e certo verdes;
   participante = bolinha PREENCHIDA de verde com o certo branco;
   pendente = ampulheta ambar (aceito, comeca na data). */
.selo-cand,.selo-part{display:inline-flex;align-items:center;
  justify-content:center;width:17px;height:17px;border-radius:50%;
  font-size:10px;line-height:1;font-weight:700;vertical-align:middle}
.selo-cand{background:#fff;border:2px solid #23a55e;color:#23a55e}
.selo-part{background:#0e7a3d;border:2px solid #0e7a3d;color:#fff}
.selo-pend{color:#d6a336;font-weight:700}
.selo-neutro{color:var(--suave);font-weight:700}
/* Tabelas "justas": a largura vem do CONTEUDO, nao da tela — o espaco
   que sobra fica FORA da tabela, e nao esticando as colunas (era o que
   deixava um vao depois de SKU, preco promo e MC promo). */
.rolagem.justa{width:fit-content;max-width:100%}
.rolagem.justa table{width:auto;min-width:0}
table.compacta .sku{font-size:.78rem}
/* Tela de Anuncios: so 5 colunas — sem a largura minima das tabelas
   largas, os numeros encostam no conteudo e o titulo fica com a sobra.
   Cabe em meia tela de monitor sem barra de rolagem horizontal. */
.rolagem table.estreita{min-width:0}
table.estreita th.num,table.estreita td.num{width:1%}
table.estreita th:nth-child(2),table.estreita td:nth-child(2){width:1%}
table.estreita .produto .titulo{max-width:340px}
/* Quadro "Promocoes do anuncio": nome da campanha em negrito e coluna
   curta; o tipo vira legenda miuda embaixo. Colunas de numero encostadas
   para a barra de rolagem horizontal nao aparecer a toa. */
.rolagem table.quadro-campanhas{min-width:0}
table.quadro-campanhas .titulo{font-weight:700;max-width:160px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
table.quadro-campanhas .meta{font-size:.66rem;color:var(--suave)}
table.quadro-campanhas th{white-space:normal}
/* Veu da conferencia de desconto: cobre a lista inteira (que fica opaca
   atras) enquanto o sistema confere anuncio por anuncio. */
.lista-promo{position:relative;width:fit-content;max-width:100%;
  min-width:min(720px,100%)}
.lista-promo.velada > .rolagem,.lista-promo.velada > .rodape-lista{
  opacity:.35;pointer-events:none}
.veu{position:absolute;inset:0;z-index:5;display:flex;
  align-items:flex-start;justify-content:center;padding-top:60px}
.veu-caixa{background:var(--papel);border:1px solid var(--borda);
  border-radius:11px;padding:22px 26px;max-width:420px;text-align:center;
  box-shadow:0 8px 30px rgba(0,0,0,.12);display:flex;flex-direction:column;
  align-items:center;gap:8px}
/* ---- Pedidos por CARRINHO -------------------------------------------
   Tres colunas numa linha so: QUEM comprou (com os numeros de venda e
   carrinho), O QUE comprou e QUANTO deu. Compacto de proposito — a tela
   costuma ter 50 pedidos, e cada folga a mais vira rolagem. */
.lista-pedidos{border:1px solid var(--borda);border-radius:11px;
  overflow:hidden;background:var(--papel)}
.pedido{border-bottom:1px solid var(--linha)}
.pedido:last-child{border-bottom:0}
.pedido:nth-child(even){background:var(--zebra)}
.pedido:hover{background:var(--realce)}
/* `stretch` alinha a altura das tres colunas: a borda da coluna dos
   numeros acompanha o cartao inteiro em vez de parar no meio. */
.pedido-linha{display:flex;gap:16px;align-items:stretch;
  padding:8px 14px}
.pedido-linha .quem{flex:0 0 232px;min-width:0;font-size:.76rem;
  line-height:1.45;color:var(--suave)}
.pedido-linha .nome{font-weight:600;font-size:.84rem;color:var(--texto);
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pedido-linha .apelido{font-size:.72rem}
.pedido-linha .chave{display:flex;align-items:center;gap:4px;
  white-space:nowrap}
.pedido-linha .chave span{opacity:.75}
.pedido-linha .chave b{color:var(--texto);font-weight:500;
  font-variant-numeric:tabular-nums}
.pedido-linha .onde,.pedido-linha .data{white-space:nowrap}
.pedido-linha .estados{display:flex;gap:5px;flex-wrap:wrap;margin-top:4px}
.pedido-linha .marcas{margin-top:4px}
/* A ABA RESUMO DE PEDIDOS: uma linha e uma linha — foto, tags e texto
   cabem na altura de uma linha de texto (pedido do dono, 14/09/2026). */
/* A TABELA CABE NA CAIXA, e nao na largura do proprio conteudo.
   `table.densa` usa `width:max-content`, que nunca deixa um titulo quebrar:
   medido em 14/09/2026 numa tela de 2000 px, a tabela tinha 2029 px para
   1637 visiveis, e as colunas de valor — as que importam — ficavam fora.
   Com a largura da caixa, os titulos quebram e as colunas encolhem ate o
   tamanho do numero; so se nem assim couber e que aparece a rolagem. */
table.densa.resumo-pedidos{width:100%}
table.resumo-pedidos th,table.resumo-pedidos td{padding:1px 3px;
  font-size:.74rem}
table.resumo-pedidos td{vertical-align:top}
/* O RESULTADO E O PAR MARGEM + MC % (dono, 30/09/2026): a linha que separa
   fica antes da Margem, e nao entre as duas. */
table.resumo-pedidos td:last-child,table.resumo-pedidos th:last-child{
  border-left:0}
table.resumo-pedidos td:nth-last-child(2),
table.resumo-pedidos th:nth-last-child(2){border-left:1px solid var(--borda)}
/* A MESMA LARGURA para toda coluna de valor, a da coluna Desconto. O
   titulo que nao cabe ("Preco cheio", "Custo extra") quebra em duas
   linhas — o dono preferiu assim. */
table.resumo-pedidos th.val,table.resumo-pedidos td.val{width:4.4rem;
  min-width:4.4rem}
/* LINK SEM CARA DE LINK: preto, sem sublinhado, e sem o roxo de
   "visitado" — pedido do dono em 14/09/2026. O passar do mouse sublinha,
   que e o que diz que abre. */
table.resumo-pedidos td a,table.resumo-pedidos td a:visited{
  color:var(--texto);text-decoration:none}
table.resumo-pedidos td a:hover{text-decoration:underline}
/* O TITULO PODE QUEBRAR EM DUAS LINHAS ("Preco / cheio"): so o
   cabecalho fica mais alto, e as colunas de valor param de ocupar a
   largura do titulo. Com 23 colunas, era isso que empurrava a margem
   para fora da tela. */
table.resumo-pedidos th{white-space:normal;line-height:1.15;
  vertical-align:bottom}
table.resumo-pedidos th a{color:inherit;text-decoration:none}
table.resumo-pedidos th a.ativa{text-decoration:underline}
table.resumo-pedidos .uma{white-space:nowrap;height:18px;line-height:18px;
  overflow:hidden}
table.resumo-pedidos img,table.resumo-pedidos .semfoto{width:16px;
  height:16px;object-fit:cover;border-radius:3px;vertical-align:middle;
  margin-right:4px;display:inline-block;background:var(--linha)}
/* O NOME DO PRODUTO COM 60% DA LARGURA de antes (dono, 13/10/2026: 7,5
   para 4,5 rem) — o nome inteiro está no passar do mouse. */
table.resumo-pedidos .corta{display:inline-block;max-width:4.5rem;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  vertical-align:bottom}
table.resumo-pedidos .corta.cli{max-width:6rem}
/* O SKU NUNCA E CORTADO (dono, 16/09/2026): varios sao kits, e o final do
   codigo e justamente o que diz quantas pecas vao. A coluna cresce; para
   caber, o cabecalho do marketplace virou M.PLACE e a logistica encolheu. */
table.resumo-pedidos .corta.sku{max-width:none;overflow:visible}
/* O numero da venda sem negrito: e a coluna mais larga de texto fixo, e o
   negrito so a alargava. */
table.resumo-pedidos td:nth-child(2) b{font-weight:500}
table.resumo-pedidos .estado{max-width:5rem;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap;vertical-align:middle}
table.resumo-pedidos .catalogo.curto{padding:0 3px;margin-left:2px}
/* O TRAÇO DE CAMPO ZERADO, mais claro ainda (dono, 13/10/2026: "em um
   cinza mais claro pra ficar sem foco"). */
table.resumo-pedidos .vazio-col{opacity:.32}
/* PRECIFICAÇÃO (18/09/2026): a planilha de preços, editável na linha. */
table.precificacao{min-width:1400px}
table.precificacao.poucos,table.precificacao.visao-precos{min-width:0}
table.precificacao td.calc{background:var(--calc)}
table.precificacao th.calc{text-decoration:underline dotted;
  text-underline-offset:3px}
.calc-amostra{background:var(--calc);padding:0 4px;border-radius:3px}
table.precificacao td.col-marca,table.precificacao td.col-ean{
  font-size:.74rem;white-space:nowrap}
table.precificacao.visao-precos td.num{min-width:5.2rem}
.prec-canais{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center;
  margin-top:12px}
.prec-chk{display:inline-flex;align-items:center;gap:5px;font-size:.82rem;
  cursor:pointer;white-space:nowrap}
.prec-chk i{display:inline-block;width:10px;height:10px;border-radius:2px;
  background:var(--cor);border:1px solid var(--borda)}
.prec-chip{display:inline-block;width:10px;height:10px;border-radius:2px;
  margin-right:6px;vertical-align:-1px;border:1px solid var(--borda)}
.prec-chip.fundo-azul{background:var(--otimo)}
.prec-chip.fundo-verde{background:var(--ok)}
.prec-chip.fundo-amarelo{background:var(--aviso)}
.prec-lado{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:16px;align-items:start}
.prec-lado > .cartao{margin:0}
/* PARÂMETROS (dono, 28/10/2026): Geral e Acréscimo empilhados à esquerda,
   Peso da embalagem à direita, as duas colunas da mesma altura. */
.prec-topo{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:16px;align-items:stretch;margin-bottom:16px}
.prec-topo > .cartao{margin:0}
.prec-pilha{display:flex;flex-direction:column;gap:16px}
.prec-pilha > .cartao{margin:0}
.prec-pilha > .cartao:last-child{flex:1}
.prec-custos{margin-bottom:10px}
.prec-custos label{margin-top:0}
/* Campo digitável é branco; o travado (imposto da conta) fica cinza. */
.prec-quadro input.prec-param{background:var(--cartao);color:var(--texto)}
.prec-quadro input.prec-param:disabled{background:var(--linha);
  color:var(--suave);cursor:not-allowed}
table.precificacao th{white-space:nowrap}
/* SKU E PRODUTO SEMPRE À VISTA, e o cabeçalho também (dono, 19/09/2026:
   "deixe a linha de titulo da coluna sempre visivel, se não fica ruim pra
   ver"). A rolagem é do quadro, não da página: assim o `sticky` funciona
   nos dois sentidos, como no Excel. */
.prec-rolagem{max-height:calc(100vh - 210px);overflow:auto}
/* LINHAS SEMPRE SIMPLES (dono, 27/10/2026): nada quebra em duas; o texto
   que não cabe vira reticências, e o inteiro fica no passar do mouse. */
table.precificacao td{white-space:nowrap}
table.precificacao td.col-sel,table.precificacao th.col-sel{
  position:sticky;left:0;z-index:3;background:var(--papel);
  min-width:1.8rem;max-width:1.8rem;text-align:center}
table.precificacao td.col-sku,table.precificacao th.col-sku{
  position:sticky;left:1.8rem;z-index:3;background:var(--papel);
  min-width:9.5rem;max-width:9.5rem;overflow:hidden;text-overflow:ellipsis}
table.precificacao td.col-selo,table.precificacao th.col-selo{
  position:sticky;left:11.3rem;z-index:3;background:var(--papel);
  min-width:2.9rem;max-width:2.9rem;text-align:center}
/* O PRODUTO NÃO INVADE A MARCA (dono, 27/10/2026): largura fixa, corta
   com reticências. */
table.precificacao td.col-nome,table.precificacao th.col-nome{
  position:sticky;left:14.2rem;z-index:3;background:var(--papel);
  min-width:15rem;max-width:15rem;overflow:hidden;text-overflow:ellipsis;
  box-shadow:1px 0 0 var(--borda)}
table.precificacao td.col-marca{max-width:8rem;overflow:hidden;
  text-overflow:ellipsis}
table.precificacao thead th{position:sticky;top:0;z-index:4}
table.precificacao thead tr:nth-child(2) th{top:var(--prec-topo2,26px)}
table.precificacao thead th.col-sel,table.precificacao thead th.col-sku,
table.precificacao thead th.col-selo,table.precificacao thead th.col-nome{
  z-index:6;background:var(--cabecalho)}
table.precificacao tbody tr:nth-child(even) td.col-sel,
table.precificacao tbody tr:nth-child(even) td.col-sku,
table.precificacao tbody tr:nth-child(even) td.col-selo,
table.precificacao tbody tr:nth-child(even) td.col-nome{
  background:var(--zebra)}
/* TRÊS REALCES, TRÊS CORES: SKU amarelo, produto azul, EAN verde. A linha
   marcada pela caixinha ganha uma borda à esquerda. */
.prec-realces{margin-top:8px}
.prec-realces .prec-chk input[type=checkbox]{width:auto;margin:0}
.prec-realces .prec-chk{flex-direction:row;padding-top:6px}
.prec-realce-campo.realce-sku input{border-left:4px solid #e0b100}
.prec-realce-campo.realce-nome input{border-left:4px solid #3b82f6}
.prec-realce-campo.realce-ean input{border-left:4px solid #16a34a}
table.precificacao tbody tr.realce-ean td{background:rgba(22,163,74,.16)}
table.precificacao tbody tr.realce-nome td{background:rgba(59,130,246,.16)}
table.precificacao tbody tr.realce-sku td{background:rgba(224,177,0,.22)}
table.precificacao tbody tr.marcada td.col-sel{box-shadow:inset 3px 0 0 var(--acento)}
table.precificacao tbody tr.marcada td{background-image:linear-gradient(
  rgba(127,127,127,.08),rgba(127,127,127,.08))}
/* O SELO DA OLIST */
.prec-selo{display:inline-block;min-width:1.9rem;padding:0 4px;
  border-radius:8px;font-size:.62rem;font-weight:700;line-height:16px;
  text-align:center;cursor:help}
.prec-selo.ok{background:var(--ok);color:#fff}
.prec-selo.diverge{background:var(--erro);color:#fff;
  box-shadow:0 0 0 2px rgba(220,38,38,.25)}
.prec-selo.cinza{background:var(--borda);color:var(--texto)}
.prec-selo.fora{background:var(--aviso);color:#1c1f24}
.prec-selo .dica table{margin-top:4px}
.prec-selo .dica td,.prec-selo .dica th{padding:1px 6px;font-weight:400;
  white-space:nowrap;text-align:left}
.prec-selo.diverge .dica{display:none}
.prec-voltar{margin:0 0 10px}
.prec-quadro-topo{display:flex;align-items:center;justify-content:space-between;
  gap:12px;margin-bottom:6px}
.prec-quadro-topo h2{margin:0}
.prec-quadro.mudou{box-shadow:0 0 0 2px var(--aviso)}
.prec-fonte{opacity:.85}
/* A COTAÇÃO (27/10/2026) */
table.cotacao td{white-space:nowrap}
table.cotacao td.calc{background:var(--calc)}
table.cotacao td.cot-final{font-size:.86rem}
.cot-campo{font:inherit;font-size:.76rem;text-align:right;padding:1px 3px;
  border:1px solid var(--borda);border-radius:3px;background:transparent;
  color:inherit;font-variant-numeric:tabular-nums}
.cot-campo.p,.cot-campo.m{width:4.1rem}
/* TODAS AS COLUNAS DE VALOR COM A MESMA LARGURA (30/10/2026). */
table.cotacao thead th{white-space:normal;line-height:1.15}
table.cotacao thead th.val{width:4.6rem;min-width:4.6rem;max-width:4.6rem}
table.cotacao td{padding-left:3px;padding-right:3px}
table.cotacao td.cot-motivo{color:var(--erro);font-weight:700}
table.cotacao td.cot-negativo,table.cotacao td .cot-negativo,
.cot-campo.cot-negativo{color:var(--erro);font-weight:700}
.cot-campo.cot-negativo{border-color:var(--erro)}
.cot-faixas{margin-top:12px}
.cot-faixas h3{margin:0 0 6px;font-size:.86rem}
.cot-faixas input{width:5rem}
.cot-faixa-meio > span{display:block;padding:8px 0;font-size:.82rem;
  color:var(--texto-fraco)}
.cot-amostra{display:inline-block;width:10px;height:10px;margin-right:4px;
  border-radius:2px}
.cot-amostra.azul{background:#1d4ed8}.cot-amostra.verde{background:var(--ok)}
.cot-amostra.amarelo{background:#ca8a04}
.cot-amostra.vermelho{background:var(--erro)}
.cot-campo.cot-sku,.cot-campo.cot-desc{box-sizing:border-box;width:100%;
  text-align:left}
/* AS COLUNAS DE PRODUTO FICAM PARADAS na rolagem (dono, 30/10/2026): cada uma
   tem largura fixa para a seguinte saber onde começar. */
table.cotacao{--cot-sku:calc(10.35rem + 6px);--cot-desc:calc(19.5rem + 6px)}
table.cotacao .cot-f0,table.cotacao .cot-f1,table.cotacao .cot-f2,
table.cotacao .cot-f3,table.cotacao .cot-f4,table.cotacao .cot-t0,
table.cotacao .cot-t1{position:sticky;z-index:2;background:var(--papel);
  box-sizing:border-box}
table.cotacao tbody tr:nth-child(even) td.cot-f0,
table.cotacao tbody tr:nth-child(even) td.cot-f1,
table.cotacao tbody tr:nth-child(even) td.cot-f2,
table.cotacao tbody tr:nth-child(even) td.cot-f3,
table.cotacao tbody tr:nth-child(even) td.cot-f4{background:var(--zebra)}
table.cotacao thead th.cot-f0,table.cotacao thead th.cot-f1,
table.cotacao thead th.cot-f2,table.cotacao thead th.cot-f3,
table.cotacao thead th.cot-f4{z-index:3;background:var(--cabecalho)}
table.cotacao thead tr:first-child th:first-child{left:0;z-index:4}
table.cotacao .cot-f0,table.cotacao .cot-t0{left:0}
table.cotacao .cot-f0{width:34px;min-width:34px;max-width:34px}
table.cotacao .cot-f1{left:34px;width:22px;min-width:22px;max-width:22px}
table.cotacao .cot-f2{left:56px;width:64px;min-width:64px;max-width:64px;
  text-align:center}
table.cotacao .cot-f3,table.cotacao .cot-t1{left:120px}
table.cotacao .cot-f3{width:var(--cot-sku);min-width:var(--cot-sku);
  max-width:var(--cot-sku)}
table.cotacao .cot-f4{left:calc(120px + var(--cot-sku));width:var(--cot-desc);
  min-width:var(--cot-desc);max-width:var(--cot-desc)}
table.cotacao .cot-f4,table.cotacao .cot-t1{box-shadow:2px 0 0 var(--borda)}
.cot-campo.salvando{opacity:.5}.cot-campo.falhou{outline:2px solid var(--erro)}
.cot-campo[disabled]{border-color:transparent}
.cot-apagar{font:inherit;cursor:pointer;border:0;padding:0 5px;
  border-radius:3px;background:var(--erro);color:#fff}
table.cotacao tfoot td{font-weight:600;border-top:2px solid var(--borda)}
/* A RELAÇÃO (30/10/2026): azul muito viável, verde viável, amarelo não tão
   viável, vermelho nada viável. */
table.cotacao td.rel-otimo,table.cotacao td.rel-bom,table.cotacao td.rel-medio,
table.cotacao td.rel-ruim{font-weight:700;color:#fff}
table.cotacao td.rel-otimo{background:#1d4ed8}
table.cotacao td.rel-bom{background:var(--ok)}
table.cotacao td.rel-medio{background:#ca8a04}
table.cotacao td.rel-ruim{background:var(--erro)}
/* OS GRUPOS DA TABELA (30/10/2026): linha vertical e o título mesclado. */
table.cotacao .cot-div{border-left:2px solid var(--cabecalho)}
table.cotacao th.cot-grupo{text-align:center;letter-spacing:.04em}
table.cotacao .cot-div-th,
table.cotacao thead tr:first-child th.grupo + th.grupo{
  border-left:2px solid rgba(255,255,255,.55)}
table.cotacao th.cot-marca,table.cotacao td.cot-marca{width:14px;padding:0 2px;
  text-align:center}
.cot-ponto{display:inline-block;width:9px;height:9px;vertical-align:middle;
  cursor:help}
.cot-ponto.existe{border-radius:50%;background:var(--ok)}
.cot-ponto.novo{background:#ca8a04}
/* OS DOIS QUADROS DO TOPO (30/10/2026): a proposta e o pagamento. */
.cot-dois{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;
  align-items:stretch;margin-bottom:12px}
.cot-dois > *{margin:0;min-width:0}
@media (max-width:1100px){.cot-dois{grid-template-columns:1fr}}
.cot-proposta{display:grid;grid-template-columns:1fr auto;gap:16px}
.cot-proposta form.filtros{margin:0}
.cot-etiquetas{margin-top:14px}
.cot-etiquetas > label{display:block;margin-bottom:4px}
.cot-botoes{display:flex;flex-direction:column;gap:6px;min-width:170px}
.cot-botoes .cot-acao{display:block}
.cot-botoes button,.cot-botoes button.sair{width:100%;padding:8px 14px;
  font-size:.86rem;line-height:1.3}
button.cot-descartar{background:#ca8a04}
.cot-divisa{border:0;border-top:1px solid var(--borda);margin:14px 0}
.kpis.contagem.cot-resumo{grid-template-columns:repeat(auto-fit,minmax(125px,1fr));
  gap:8px;margin:0}
.cot-resumo .kpi{padding:8px 10px;min-height:0}
.cot-resumo .kpi .titulo{min-height:0;margin-bottom:4px}
.cot-resumo .kpi .valor{font-size:1rem}
.cot-pago{color:var(--ok);font-weight:600}
.resumo-chips.filtros a.chip.cot-aba-comprada{border-color:var(--ok);
  color:var(--ok);background:color-mix(in srgb,var(--ok) 12%,transparent)}
.resumo-chips.filtros a.chip.cot-aba-comprada[aria-pressed="true"]{
  background:var(--ok);color:#fff}
.cot-forma-prazo{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  gap:8px}
/* AS PARCELAS (30/10/2026): pagou, a linha inteira fica verde clarinha. */
table.cot-parcelas{width:100%;margin:0 0 8px;border-collapse:collapse;
  font-size:.8rem}
table.cot-parcelas th{text-align:left;font-weight:600;font-size:.72rem;
  padding:2px 4px}
table.cot-parcelas td{padding:2px 4px;vertical-align:middle}
table.cot-parcelas input{display:block;box-sizing:border-box;margin:0;
  width:100%;padding:4px 6px;border:1px solid var(--borda);
  border-radius:6px;background:var(--fundo);color:var(--texto);font:inherit}
table.cot-parcelas input.num{text-align:right}
table.cot-parcelas tr.paga td{
  background:color-mix(in srgb,var(--ok) 18%,transparent)}
table.cot-parcelas tr.paga input{background:transparent}
table.cot-parcelas td:first-child,table.cot-parcelas td:last-child{width:1%;
  white-space:nowrap}
.cot-pagar{display:block;margin:0;padding:4px 8px;font-size:.72rem}
.cot-pagar.feito{background:var(--ok)}
.cot-soma{margin:0 0 8px;font-size:.8rem}
.cot-soma button{margin-left:6px;padding:2px 8px;font-size:.76rem}
.cot-pagamentos .campo{margin-bottom:8px}
.cot-pagamentos .campo label{display:block}
.cot-pagamentos .campo input,.cot-pagamentos .campo select{width:100%;
  padding:8px 10px;border:1px solid var(--borda);border-radius:8px;
  background:var(--fundo);color:var(--texto);font:inherit}
.cot-situacao{display:inline-block;padding:0 6px;border-radius:8px;
  font-size:.7rem;font-weight:600}
.cot-situacao.aberta{background:var(--fundo-aviso)}
.cot-situacao.aprovada{background:var(--ok);color:#fff}
.cot-situacao.descartada{background:var(--borda)}
.cot-acao{display:inline}
/* A LISTA (30/10/2026): Nº colado no fornecedor; a sobra fica na situação. */
table.cot-lista td,table.cot-lista th{white-space:nowrap}
table.cot-lista th:not(.cot-sobra){width:1%}
table.cot-lista th:nth-child(2),table.cot-lista td:nth-child(2){
  padding-left:4px}
.cot-tag{display:inline-block;margin-right:3px;padding:0 6px;border-radius:4px;
  font-size:.68rem;font-weight:700;letter-spacing:.03em;color:#fff;
  background:#475569}
.cot-tag.reposicao{background:#1d4ed8}.cot-tag.primeira{background:#6d28d9}
.cot-tag.estudo{background:#64748b}.cot-tag.oportunidade{background:#0e7a3d}
.cot-tag.urgente{background:var(--erro)}
.cot-marcas{display:flex;flex-wrap:wrap;gap:4px 12px;align-items:center}
.cot-marcas label{display:inline-flex;align-items:center;gap:4px;margin:0}
.cot-marcas input{width:auto;height:auto}
.cot-seq{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.cot-seq input{width:auto;height:auto}
.cot-apagar-lista{padding:0 6px;font-size:.74rem;line-height:1.4}
.cot-obs input{min-width:18rem}
table.tabela-markup td,table.tabela-markup th{white-space:nowrap}
/* O título segue o alinhamento da coluna (dono, 19/09/2026). */
table.precificacao th.num{text-align:right}
table.precificacao th.ordena{cursor:pointer}
table.precificacao th.ordena:hover{text-decoration:underline}
table.precificacao .prec-nome-canal{display:block}
table.precificacao .prec-fora{display:inline-block;font-size:.58rem;
  padding:0 5px;margin-left:4px;border-radius:8px;line-height:15px;
  background:var(--aviso);color:#1c1f24;font-weight:600;cursor:help}
table.precificacao .prec-calculado{color:var(--suave);font-size:.74rem}
.prec-igual,.prec-lote,.prec-apagar{font:inherit;cursor:pointer;
  border:1px solid var(--borda);border-radius:3px;background:transparent;
  color:inherit}
.prec-igual{font-size:.66rem;line-height:1.1;padding:0 3px;margin-left:2px;
  opacity:.45}
table.precificacao tr:hover .prec-igual{opacity:1}
.prec-lote{font-size:.62rem;padding:0 4px;margin:2px auto 0;display:block;
  background:rgba(255,255,255,.22);border-color:transparent;color:inherit}
.prec-lote:hover{background:rgba(255,255,255,.4)}
.prec-apagar{font-size:.7rem;line-height:1;padding:0 4px;margin-left:3px;
  color:var(--erro);opacity:.5}
table.precificacao tr:hover .prec-apagar{opacity:1}
.prec-oculto{display:none}
.prec-realce-campo{display:flex;flex-direction:column}
.prec-realce-campo input{min-width:15rem}
#prec-realce-conta{color:var(--suave)}
#prec-form-kit .p{width:3.4rem}
table.precificacao th.grupo{text-align:center;border-left:2px solid var(--borda)}
table.precificacao td.prec-ini,table.precificacao th.prec-ini{
  border-left:2px solid var(--borda)}
table.precificacao td{vertical-align:middle}

table.precificacao .prec-aviso{display:inline-block;font-size:.62rem;
  font-weight:700;color:#fff;background:var(--erro);border-radius:8px;
  padding:0 5px;margin-right:4px;cursor:help}
table.precificacao .prec-kit{display:inline-block;font-size:.6rem;
  padding:0 5px;margin-right:4px;border-radius:8px;line-height:15px;
  background:var(--fundo-aviso);color:var(--texto);font-weight:600;
  cursor:help}
table.precificacao .prec-origem{font-size:.62rem;color:var(--suave);
  margin-left:3px}
table.precificacao .prec-motivo{font-size:.66rem;color:var(--suave);
  display:inline-block;max-width:7.5rem;overflow:hidden;
  text-overflow:ellipsis;vertical-align:middle;cursor:help}
table.precificacao .prec-sugerido{font-weight:600;white-space:nowrap}
table.precificacao tr.salvo td{background:var(--fundo-aviso);
  transition:background .8s}
.prec-campo,.prec-param{font:inherit;font-size:.76rem;text-align:right;
  padding:1px 3px;border:1px solid var(--borda);border-radius:3px;
  background:transparent;color:inherit;font-variant-numeric:tabular-nums}
.prec-campo::placeholder{color:var(--suave);opacity:.8}
.prec-campo.p,.prec-param.p{width:3.4rem}
.prec-campo.m,.prec-param.m{width:5.2rem}
.prec-campo.g{width:5.6rem;font-weight:600}
.prec-campo.salvando{opacity:.5}
.prec-campo.falhou{outline:2px solid var(--erro)}
.prec-medidas{white-space:nowrap}
.prec-medidas .prec-campo{margin-right:2px}
.prec-acoes{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.prec-botao{margin:0}
table.prec-params{width:auto}
table.prec-params td{white-space:nowrap}
table.prec-params.grade .prec-param.p{width:3.8rem}
.ajuste-campo{width:4.2rem;font:inherit;font-size:.74rem;text-align:right;
  padding:0 2px;border:1px solid var(--borda);border-radius:3px;
  background:transparent;color:inherit}
.ajuste-campo.pos{color:var(--ok);border-color:var(--ok);font-weight:600}
.ajuste-campo.neg{color:var(--erro);border-color:var(--erro);font-weight:600}
.ajuste-campo.salvando{opacity:.55}
.ajuste-campo.falhou{outline:2px solid var(--erro)}
.numeros-pedido .conta.ajuste .ajuste-campo{width:6rem}
table.resumo-pedidos .estado,table.resumo-pedidos .logis,
table.resumo-pedidos .catalogo{font-size:.62rem;padding:0 5px;
  line-height:16px}
table.resumo-pedidos .logis{padding:0 3px}
table.resumo-pedidos .origem-linha{white-space:nowrap}
table.resumo-pedidos .origem-cnpj,table.resumo-pedidos .origem-mkt{
  display:inline-block;font-size:.6rem;padding:0 5px;line-height:16px;
  margin-right:2px}
.pedido-linha .estados + .estados{margin-top:3px}
/* O MOTIVO DA RECLAMACAO: a frase do Meli pode ser longa, entao a tag
   quebra linha em vez de estourar a coluna — e perde o formato de pilula,
   que numa frase de duas linhas parece um balao. */
.tag.tag-motivo{white-space:normal;border-radius:6px;line-height:1.35;
  text-align:left;background:var(--linha);color:var(--texto);max-width:100%}
.tag.tag-motivo b{font-weight:600;color:var(--suave)}
/* HABILITADO NO FULL DA SHOPEE, antes do SKU na tela de envio. */
.selo-full{display:inline-block;font-size:.62rem;font-weight:700;
  color:#fff;background:#1a9e55;border-radius:4px;padding:0 4px;
  margin-right:4px;line-height:15px;vertical-align:middle;
  white-space:nowrap}
.pedido-linha .produtos{flex:1 1 340px;min-width:0;display:grid;gap:7px}
.pedido-linha .numeros-pedido{flex:0 0 210px;display:grid;gap:1px;
  align-content:start;padding-left:14px;
  border-left:1px solid var(--linha)}
.produto-pedido{display:flex;gap:9px;align-items:flex-start}
.produto-pedido img,.produto-pedido .semfoto{width:38px;height:38px;
  object-fit:contain;border-radius:6px;background:var(--linha);flex:0 0 38px}
.produto-pedido .txt{flex:1;min-width:0;font-size:.8rem;line-height:1.35}
.produto-pedido .titulo{overflow:hidden;text-overflow:ellipsis;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.produto-pedido .titulo a{color:var(--texto);text-decoration:none}
.produto-pedido .titulo a:hover{color:var(--acento);text-decoration:underline}
.produto-pedido .meta{font-size:.7rem;color:var(--suave);
  display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.produto-pedido .qtd{font-size:.74rem;color:var(--suave)}
.produto-pedido .qtd b{color:var(--texto);font-variant-numeric:tabular-nums}
/* As parcelas em letra menor, o que o comprador pagou e a margem em
   destaque: sao esses dois que se procura primeiro. */
.numeros-pedido .conta{display:flex;justify-content:space-between;gap:10px;
  font-size:.71rem;color:var(--suave);line-height:1.42}
.numeros-pedido .conta b{color:var(--texto);font-weight:500;
  font-variant-numeric:tabular-nums}
.numeros-pedido .conta.forte{font-size:.79rem}
.numeros-pedido .conta.forte b{font-weight:600}
/* O DETALHE DO CUSTO no passar do mouse. So aparece com mais de um
   produto: com um so, o custo ja e o do item e a caixa nao diria nada
   novo. Sem JavaScript — hover puro, que nao depende de nada carregar. */
.numeros-pedido .conta.comdetalhe{position:relative;cursor:help}
.numeros-pedido .conta.comdetalhe>span{border-bottom:1px dotted var(--suave)}
.numeros-pedido .detalhe{display:none;position:absolute;right:0;top:100%;
  z-index:40;margin-top:3px;padding:7px 9px;background:var(--papel);
  border:1px solid var(--borda);border-radius:7px;
  box-shadow:0 6px 20px rgba(0,0,0,.16);white-space:nowrap}
.numeros-pedido .conta.comdetalhe:hover .detalhe{display:block}
.numeros-pedido .detalhe table{border-collapse:collapse;font-size:.73rem}
.numeros-pedido .detalhe td{padding:2px 5px;color:var(--suave);
  font-variant-numeric:tabular-nums;text-align:right}
.numeros-pedido .detalhe td:first-child{text-align:left;color:var(--texto);
  max-width:200px;overflow:hidden;text-overflow:ellipsis}
.numeros-pedido .detalhe td.q{color:var(--texto)}
.numeros-pedido .detalhe b{color:var(--texto);font-weight:600}
.numeros-pedido .conta.total{border-top:1px solid var(--borda);
  margin-top:3px;padding-top:4px;font-size:.82rem;color:var(--texto);
  align-items:baseline}
/* A PORCENTAGEM e o numero grande, e o valor em reais vem menor embaixo.
   E o percentual que se compara entre pedidos de tamanhos diferentes: um
   pedido de R$ 64 de margem pode ser otimo ou pessimo dependendo de quanto
   ele faturou, e so o percentual responde isso de bater o olho. */
.numeros-pedido .conta.total b{display:flex;flex-direction:column;
  align-items:flex-end;line-height:1.15;gap:1px}
.numeros-pedido .conta.total .pct{font-weight:700;font-size:1.02rem;
  margin:0}
.numeros-pedido .conta.total .reais{font-weight:500;font-size:.76rem;
  color:inherit;opacity:.72}
/* A cor da margem tem de VENCER a regra generica de cima — sem isto ela
   nunca aparecia, porque `.numeros-pedido .conta b` e mais especifico que
   a classe de cor sozinha. Vale para a % e para os reais. */
.numeros-pedido .conta.total b.mc-azul,
.numeros-pedido .conta.total b.mc-azul .pct{color:var(--otimo)}
.numeros-pedido .conta.total b.mc-verde,
.numeros-pedido .conta.total b.mc-verde .pct{color:var(--ok)}
.numeros-pedido .conta.total b.mc-amarelo,
.numeros-pedido .conta.total b.mc-amarelo .pct{color:var(--aviso)}
.numeros-pedido .conta.total b.mc-vermelho,
.numeros-pedido .conta.total b.mc-vermelho .pct{color:var(--erro)}
.numeros-pedido .conta.total b.zero,
.numeros-pedido .conta.total b.zero .pct{color:var(--suave)}
.numeros-pedido .conta b.neg{color:var(--erro)}
/* Etiqueta do estado: a cor faz o trabalho de leitura. Ambar e o que
   depende de voce (postar); verde ja chegou; vermelho deu errado. */
.estado{display:inline-block;padding:1px 8px;border-radius:5px;
  font-size:.7rem;font-weight:600;border:1px solid}
.estado.ok{background:#e7f6ec;border-color:#9fd7b4;color:#12572f}
.estado.andando{background:#e8f0fd;border-color:#a9c4f2;color:#1a4a99}
.estado.espera{background:#fdf4e3;border-color:#eccf9a;color:#7a5410}
.estado.ruim{background:#fdeaea;border-color:#f0b4b4;color:#8a1f1f}
.estado.neutro{background:var(--linha);border-color:var(--borda);
  color:var(--suave)}
.logis{display:inline-block;padding:1px 7px;border-radius:5px;
  font-size:.7rem;border:1px solid var(--borda);color:var(--suave)}
.logis.full{border-color:#4a9d5f;color:#2c7a45;font-weight:600}
.logis.places{border-color:#8b6fd0;color:#6a4fb0}
.catalogo{display:inline-block;padding:1px 7px;border-radius:5px;
  font-size:.7rem;border:1px solid #d0a23a;color:#8a6410;font-weight:600}
@media (max-width:980px){
  .pedido-linha{flex-wrap:wrap}
  .pedido-linha .quem{flex:1 1 100%}
  .pedido-linha .numeros-pedido{flex:1 1 100%;padding-left:0;border-left:0;
    border-top:1px solid var(--linha);padding-top:7px;margin-top:4px}}
/* ---- De onde veio a venda -------------------------------------------
   Com dois CNPJs vendendo em tres marketplaces, a cor e o que permite
   varrer a lista com o olho sem ler identificador nenhum. Em cima o
   CNPJ, embaixo o marketplace: "de qual loja e esta venda" vem antes
   de "em qual canal ela saiu". */
.pedido-linha .origem{flex:0 0 auto;display:flex;flex-direction:column;
  gap:3px;padding-top:1px}
.origem-mkt,.origem-cnpj{display:block;padding:2px 7px;border-radius:5px;
  font-size:.66rem;font-weight:700;color:#fff;text-align:center;
  letter-spacing:.02em;white-space:nowrap;
  text-shadow:0 1px 1px rgba(0,0,0,.25)}
.origem-cnpj{font-weight:700;font-size:.62rem}
@media (max-width:980px){.pedido-linha .origem{flex-direction:row}}
/* Aviso do canto: a resposta dos botoes verde e vermelho. Fica sobre a
   pagina, no canto de baixo a direita, e some sozinho. Verde deu certo,
   vermelho nao deu, ambar e "o Mercado Livre aceitou e ainda processa". */
.aviso-canto{position:fixed;right:18px;bottom:18px;z-index:60;
  display:flex;align-items:flex-start;gap:10px;max-width:min(420px,92vw);
  padding:12px 14px;border-radius:10px;font-size:.86rem;line-height:1.35;
  border:1px solid;box-shadow:0 10px 28px rgba(0,0,0,.16);
  animation:aviso-entra .18s ease-out}
.aviso-canto.ok{background:#e7f6ec;border-color:#9fd7b4;color:#12572f}
.aviso-canto.erro{background:#fdeaea;border-color:#f0b4b4;color:#8a1f1f}
.aviso-canto.espera{background:#fdf4e3;border-color:#eccf9a;color:#7a5410}
.aviso-canto button{background:none;border:0;padding:0 2px;cursor:pointer;
  color:inherit;opacity:.55;font-size:.9rem;line-height:1}
.aviso-canto button:hover{opacity:1}
.aviso-canto.saindo{opacity:0;transform:translateY(8px);
  transition:opacity .5s ease,transform .5s ease}
@keyframes aviso-entra{from{opacity:0;transform:translateY(10px)}
  to{opacity:1;transform:translateY(0)}}
@media (max-width:620px){.aviso-canto{right:10px;left:10px;bottom:10px;
  max-width:none}}
/* Tela de resultado (fase 29-B): cobre a PAGINA inteira, com o fundo
   desfocado atras. Diferente do `.veu`, que cobre so a lista: aqui a
   pessoa acabou de mandar algo para a conta dela e a unica coisa que
   importa na tela e o que aconteceu. So informa; o OK fecha. */
.sobreposto{position:fixed;inset:0;z-index:50;display:flex;
  align-items:flex-start;justify-content:center;padding:40px 16px;
  overflow:auto;background:rgba(17,24,39,.45);
  backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px)}
.sobreposto-caixa{background:var(--papel);border:1px solid var(--borda);
  border-radius:12px;padding:24px 26px;width:min(860px,100%);
  box-shadow:0 18px 50px rgba(0,0,0,.28)}
.sobreposto-caixa h2{margin-top:0}
.sobreposto-caixa.estreita{width:min(430px,100%);text-align:center}
.sobreposto-caixa h3{margin:18px 0 6px;font-size:.95rem}
.sobreposto-caixa .rolagem{max-height:38vh}
@media (max-width:620px){.sobreposto{padding:16px 8px}
  .sobreposto-caixa{padding:18px 14px}}
/* Confirmacao de escrita: tabela chave-valor, botao verde grande e
   titulo cortado com reticencias na lista de aplicacao. */
table.chaves{width:auto;margin:8px 0 12px}
table.chaves td{padding:4px 14px 4px 0;font-size:.88rem}
table.chaves td:first-child{color:var(--suave)}
button.entrar-grande{background:#0e7a3d}
/* Lote geral: laranja, e nao azul nem verde.
   Cor diferente para alcance diferente — verde e o "entrar" de uma linha,
   azul e a campanha que esta aberta na tela, e este alcanca a conta
   inteira. Duas acoes de peso tao diferente nao podem ter a mesma cara
   lado a lado. */
/* `button.todas` e nao so `.todas`: com uma classe so, a regra generica
   de `button` (azul) vinha depois na folha e ganhava por ordem — o botao
   nascia laranja no CSS e aparecia azul na tela. */
/* O numero final embaixo do campo de tolerancia. Pequeno, mas e ele que
   decide quem entra na campanha. */
/* O piso, embaixo do campo de tolerancia.
   `absolute` sobre um pai `relative`: assim ele NAO empurra a linha e os
   campos continuam alinhados com o botao ao lado. Fora do fluxo, o texto
   pode crescer sem desarrumar nada. */
.filtros > div{position:relative}
/* Atalho de % no fim da linha de Anuncios: abre as campanhas daquele
   anuncio numa aba nova. Discreto ate o mouse chegar — a coluna existe em
   todas as linhas, e um botao chamativo repetido 90 vezes competiria com
   os numeros, que sao o assunto da tela. */
a.atalho-promo{display:inline-block;width:22px;height:22px;line-height:22px;
  text-align:center;border:1px solid var(--borda);border-radius:5px;
  color:var(--suave);text-decoration:none;font-size:.8rem;font-weight:600}
a.atalho-promo:hover{border-color:var(--acento);color:var(--acento);
  background:var(--linha)}
/* Filtros menores, iguais nas tres faixas: promocao, tipo e situacao. */
.filtro-situacao a{padding:3px 10px;font-size:.78rem}
.sob-campo{position:absolute;left:0;top:100%;white-space:nowrap;
  font-size:.74rem;color:var(--suave);margin-top:3px;line-height:1.3}
/* O MÍNIMO SOB A TOLERÂNCIA, centrado na largura do campo (dono,
   20/10/2026: "com exatamente a mesma largura do campo acima pra ficar
   alinhado pelo centro"). A largura vem no próprio elemento. */
.sob-campo.centro{text-align:center;white-space:normal;font-size:.64rem;
  line-height:1.2}
/* O espaço que o texto sob o campo ocupa, para a linha de baixo não
   encostar nele. */
.filtros.com-sob-campo{padding-bottom:16px}
/* NÚMERO SE ALINHA À DIREITA, digitável ou não (dono, 20/10/2026). */
input.campo-num{text-align:right}
/* O RODAPÉ DA PÁGINA: informação de consulta, depois de todo o conteúdo,
   sem cartão e sem cor. */
.rodape-pagina{margin:22px 0 4px;padding-top:10px;
  border-top:1px solid var(--borda);font-size:.74rem;color:var(--suave)}
button.todas,a.botao.todas{background:#c2620f;border-color:#c2620f;
  color:#fff;font-weight:700}
a.botao.todas{text-decoration:none;display:inline-block}
button.todas:hover:not(:disabled),a.botao.todas:hover{filter:brightness(1.08)}
button.todas:disabled{opacity:.4;cursor:not-allowed}
a.botao.secundario{background:transparent;color:var(--suave);
  border:1px solid var(--borda);text-decoration:none}
td.apara{max-width:340px;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}
.acoes-escrita{font-size:.8rem}
.acoes-escrita td{padding:4px 9px}
.acoes-escrita .ok{color:var(--ok)} .acoes-escrita .erro{color:var(--erro)}
/* Botoes de entrar (verde forte) e sair (vermelho) da promocao. */
.acao-linha{display:inline}
.acoes-col{width:34px;text-align:center;white-space:nowrap}
button.entrar,button.sair{padding:2px 9px;font-size:.8rem;line-height:1.4;
  border-radius:6px}
button.entrar{background:#0e7a3d}
button.sair{background:var(--erro)}
button.entrar:disabled,button.sair:disabled{opacity:.35;cursor:not-allowed}
/* O PRECO EXCLUSIVO DO MELI+, por linha. AZUL poe, VERMELHO CLARO tira —
   pedido do dono em 06/09/2026. O verde ficou reservado ao botao de
   ENTRAR na campanha, que e a acao vizinha: dois verdes lado a lado, um
   entrando na promocao e outro mexendo no preco, mandavam a mesma
   mensagem para coisas diferentes.
   
   O vermelho e mais CLARO que o do botao de sair da campanha (`--erro`),
   e de proposito: tirar o preco exclusivo mexe num preco, tirar da
   campanha tira o anuncio da promocao inteira. A menor das duas acoes nao
   pode gritar igual a maior. */
button.meli-poe,button.meli-tira{padding:2px 7px;font-size:.68rem;
  line-height:1.4;border-radius:6px;margin-left:4px;font-weight:600}
button.meli-poe{background:#1e5fbf}
button.meli-tira{background:#e0736c}
button.meli-poe:disabled,button.meli-tira:disabled{opacity:.35;
  cursor:not-allowed}
/* OS BOTOES DA LINHA ALINHADOS A ESQUERDA. O verde de entrar e o
   vermelho de sair sao excludentes — a linha tem um ou outro — e com a
   celula centralizada eles paravam em x diferentes conforme a linha
   tivesse ou nao o botao do Meli+ ao lado. Pedido do dono em 06/09/2026:
   "deixe alinhado a esquerda com o botao vermelho, so o do Meli+ que
   fica a direita". */
.acoes-col{width:auto;text-align:left;white-space:nowrap}
/* Os dois primeiros tem a mesma largura, entao o Meli+ comeca sempre no
   mesmo ponto, tenha a linha o verde ou o vermelho. */
td.acoes-col button.entrar,td.acoes-col button.sair{min-width:30px}
.sku{display:inline-flex;align-items:center;gap:4px;font-size:.78rem}
.mc-pct{font-weight:600;font-size:.85rem}
.mc-valor{font-size:.7rem;color:var(--suave)}
/* Quando a linha tem faixa de cor, o valor em reais segue a mesma cor, so
   mais apagado — senao a linha de baixo ignoraria a regra de cor. */
td.mc:has(.mc-pct.mc-azul) .mc-valor{color:var(--otimo);opacity:.72}
td.mc:has(.mc-pct.mc-verde) .mc-valor{color:var(--ok);opacity:.72}
td.mc:has(.mc-pct.mc-amarelo) .mc-valor{color:var(--aviso);opacity:.72}
td.mc:has(.mc-pct.mc-vermelho) .mc-valor{color:var(--erro);opacity:.72}
.pct{font-size:.76rem;color:var(--suave)}
.pct.forte{color:var(--texto);font-weight:600}
.limites{font-size:.68rem;color:var(--suave);font-weight:400}
.riscado{color:var(--suave);text-decoration:line-through;font-size:.74rem}
.promo-agora{font-weight:600;color:var(--texto)}
th a.ordenar{color:inherit;text-decoration:none}
th a.ordenar:hover{color:var(--acento)}
.pub{display:inline-flex;align-items:center}
.pub.premium{color:#d4a017}
.pub.classico{color:#3483fa}
.copiar{background:none;border:0;padding:0 2px;cursor:pointer;
  color:var(--suave);display:inline-flex;align-items:center;line-height:1;
  box-shadow:none}
.copiar:hover{color:var(--texto)}
.copiar.feito{color:var(--ok)}
th.ordena{cursor:pointer;user-select:none}
th.ordena:after{content:"\2195";opacity:.35;margin-left:4px;font-size:.8em}
th.ordena.asc:after{content:"\2191";opacity:.9}
th.ordena.desc:after{content:"\2193";opacity:.9}
th.travada{cursor:help}
th.travada:after{content:"\2195";opacity:.12;margin-left:4px;font-size:.8em}
/* Caixa de composicao da margem. Ela e MOVIDA para o fim da pagina pelo
   script: dentro da tabela com rolagem, o proprio recorte da rolagem cortava
   a caixa e sobrava so um pedaco. Solta na pagina, ela aparece inteira e
   sempre do lado que couber. */
td.mc .dica,.ficha .mc-ficha .dica{display:none}
.dica-flutuante{position:fixed;z-index:9999;min-width:250px;
  max-width:min(340px,92vw);max-height:min(70vh,520px);overflow:auto;
  padding:10px 12px;border-radius:9px;text-align:left;background:#2b3038;
  color:#f2f4f7;box-shadow:0 10px 26px rgba(0,0,0,.32);font-size:.76rem;
  line-height:1.5;font-weight:400}
.dica-flutuante table{min-width:0;width:100%;border-collapse:collapse;
  background:none}
.dica-flutuante tr{background:none!important}
.dica-flutuante td{border:0!important;padding:2px 0!important;
  white-space:nowrap;color:#f2f4f7!important;font-size:.76rem!important;
  background:none!important}
.dica-flutuante td:first-child{text-align:left}
.dica-flutuante td:last-child{text-align:right;padding-left:22px!important;
  font-weight:600}
.dica-flutuante .total td{border-top:1px solid rgba(255,255,255,.25)!important;
  padding-top:5px!important}
.dica-flutuante .nota{margin-top:7px;color:#c3c9d2;white-space:normal;
  font-size:.72rem}

/* Tres zonas: contagem a esquerda, troca de pagina no CENTRO, "por pagina"
   a direita. Grid em vez de flex para o centro ficar centrado de verdade,
   independente da largura dos vizinhos. */
.atualizar-tudo{margin-top:auto;padding:12px 14px 16px}
.atualizar-tudo button{width:100%;background:transparent;
  border:1px dashed var(--borda);color:var(--suave);font-size:.78rem;
  padding:7px 10px}
.atualizar-tudo button:hover{color:var(--acento);border-color:var(--acento)}
.rodape-lista{display:grid;grid-template-columns:1fr auto 1fr;
  align-items:center;gap:12px;margin-top:12px;font-size:.8rem;
  color:var(--suave)}
.rodape-lista > :first-child{justify-self:start}
.rodape-lista > :last-child{justify-self:end}
.por-pagina{display:flex;gap:5px;align-items:center}
.por-pagina a{padding:3px 9px;border:1px solid var(--borda);border-radius:7px;
  text-decoration:none;color:var(--suave)}
.por-pagina a.ativo{border-color:var(--acento);color:var(--acento);
  font-weight:600}
.paginacao{display:flex;gap:6px;align-items:center;justify-content:center;
  font-size:.85rem}
.paginacao a{padding:5px 10px;border:1px solid var(--borda);border-radius:7px;
  text-decoration:none;color:var(--texto)}
.paginacao .atual{background:var(--acento);color:#fff;border-color:var(--acento)}
.topo{display:flex;justify-content:space-between;align-items:flex-start;gap:16px}
.sino{position:relative}
.sino summary{list-style:none;cursor:pointer;padding:8px 12px;border-radius:9px;
  border:1px solid var(--borda);background:var(--papel);font-size:.88rem;
  display:flex;align-items:center;gap:7px;white-space:nowrap}
.sino summary::-webkit-details-marker{display:none}
.sino .contador{background:var(--erro);color:#fff;border-radius:99px;
  padding:1px 7px;font-size:.72rem;font-weight:600}
.sino .painel{position:absolute;right:0;top:calc(100% + 6px);width:360px;
  max-height:440px;overflow-y:auto;background:var(--papel);
  border:1px solid var(--borda);border-radius:11px;z-index:20;
  box-shadow:0 12px 30px rgba(0,0,0,.16)}
.sino .cabeca{padding:13px 16px;border-bottom:1px solid var(--linha);
  display:flex;justify-content:space-between;align-items:center;gap:10px}
.sino .cabeca b{font-size:.95rem}
.aviso-item{padding:12px 16px;border-bottom:1px solid var(--linha);
  display:flex;gap:10px;align-items:flex-start;text-decoration:none;
  color:inherit}
.aviso-item:hover{background:var(--linha)}
.aviso-item .marca{width:8px;height:8px;border-radius:99px;margin-top:6px;
  flex:0 0 8px;background:var(--suave)}
.aviso-item.ok .marca{background:var(--ok)}
.aviso-item.erro .marca{background:var(--erro)}
.aviso-item.aviso .marca{background:var(--aviso)}
.aviso-item.nova{background:rgba(45,108,223,.06)}
.aviso-item .txt{font-size:.86rem;line-height:1.35}
.aviso-item .quando{font-size:.74rem;color:var(--suave);margin-top:3px}
/* Aba Produtos do Dashboard: curvas lado a lado, listas curtas. */
.curvas{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.quadro-curva{border:1px solid var(--borda);border-radius:8px;padding:12px}
.quadro-curva h3{margin:0 0 2px;font-size:1rem}
/* A TAG QUE E O TITULO DO QUADRO, no dobro do tamanho — pedido do dono em
   10/09/2026. As outras tags do sistema continuam do tamanho de sempre. */
.quadro-curva h3 .tag.tag-titulo{font-size:1.4rem;padding:3px 14px;
  font-weight:700}
/* O "Ver mais" e a janela da lista inteira, sobre a pagina. */
.quadro-curva .ver-mais{margin-top:8px}
.janela-lista-caixa{max-width:760px;width:94vw;max-height:86vh;
  display:flex;flex-direction:column}
.janela-lista-caixa .topo-janela{display:flex;align-items:center;
  justify-content:space-between;gap:1rem;margin-bottom:.5rem}
.janela-lista-caixa .topo-janela h2{margin:0}
.janela-lista-caixa .fecha-janela{border:0;background:transparent;
  font-size:1.6rem;line-height:1;cursor:pointer;color:var(--suave)}
.janela-lista-caixa .fecha-janela:hover{color:var(--texto)}
.janela-lista-caixa .rolagem-janela{overflow:auto;flex:1 1 auto;
  min-height:0}
/* O NÚMERO DA NOTA EM TRÂNSITO abre os itens dela (02/10/2026). */
.nota-link{border:0;background:transparent;padding:0;color:var(--acento);
  cursor:pointer;font:inherit;text-decoration:underline dotted}
table.itens-nota tr.total td{border-bottom:2px solid var(--borda)}
.quadro-curva .nota-curva{font-size:.8rem;color:var(--suave);
  margin-bottom:8px}
/* AS LISTAS CURTAS EM GRADE: produto + N colunas de valor, alinhadas de
   linha para linha por `subgrid`. Folga de 3 caracteres entre colunas e
   numeros a direita (ver `.col`). */
.lista-mini{margin:0;padding:0;list-style:none;font-size:.85rem;
  display:grid;column-gap:3ch;grid-template-columns:minmax(0,1fr) max-content}
.lista-mini.colunas-2{grid-template-columns:minmax(0,1fr) max-content max-content}
.lista-mini.colunas-3{grid-template-columns:minmax(0,1fr) repeat(3,max-content)}
.lista-mini li{display:grid;grid-column:1/-1;grid-template-columns:subgrid;
  align-items:baseline;padding:3px 0;border-bottom:1px solid var(--linha)}
/* NUMEROS A DIREITA — as virgulas ficam uma embaixo da outra, e com as
   mesmas casas decimais a coluna se le de cima a baixo. O dono corrigiu o
   proprio pedido em 10/09/2026: "como sao numeros com a mesma quantidade
   de casas decimais, fica melhor alinhado a direita". O cabecalho de cada
   coluna de valor acompanha; so o do produto fica a esquerda. */
.lista-mini li .col{text-align:right;white-space:nowrap;
  font-variant-numeric:tabular-nums}
.lista-mini li.cab span:not(:first-child){text-align:right}
.lista-mini li.cab{font-size:.66rem;text-transform:uppercase;
  letter-spacing:.05em;color:var(--suave);border-bottom:1px solid var(--borda)}
.lista-mini li.mais{display:block}
.lista-mini li:last-child{border-bottom:0}
/* O SKU inteiro sempre; quem encolhe e o titulo ao lado. */
.lista-mini .ident{min-width:0;display:flex;gap:.3em;align-items:baseline;
  white-space:nowrap}
.lista-mini .ident .sku{flex:none}
.lista-mini .ident .tit{min-width:0;overflow:hidden;text-overflow:ellipsis}
.lista-mini .ident .sku{font-weight:600}
.lista-mini .ident .tit{color:var(--suave)}
.lista-mini .num{white-space:nowrap;font-variant-numeric:tabular-nums}
.lista-mini .mais{color:var(--suave);border-bottom:0;padding-top:6px}
.curvas.duas{grid-template-columns:repeat(2,1fr)}
.curvas.quatro{grid-template-columns:repeat(4,1fr)}
@media(max-width:1300px){.curvas.quatro{grid-template-columns:repeat(2,1fr)}}
@media(max-width:900px){.curvas,.curvas.duas{grid-template-columns:1fr}}
@media(max-width:760px){
  .layout{flex-direction:column}
  /* NO CELULAR O MENU NÃO FICA PRESO: preso e com a altura da tela, ele
     cobria o conteúdo inteiro (auditoria de 18/09/2026). Vai para cima,
     e a página rola por baixo dele como uma página comum. */
  aside{width:100%;flex:none;position:static;height:auto;
        overflow:visible;max-height:none}
  main{padding:14px 16px}
}

/* ---------------------------------------------- raio-x de um anuncio */
/* A NOTA. Numero grande porque e a primeira pergunta ("esse anuncio esta
   bom?"), e a barra logo abaixo porque 62 sozinho nao diz se e perto ou
   longe. As tres cores sao as do proprio Meli: Basica, Satisfatoria,
   Profissional. */
/* O SELO DE PENDENCIA OBRIGATORIA ao lado da nota (22/09/2026): o que o
   Meli EXIGE, separado do que e so oportunidade de melhora. */
.aviso-nota{display:inline-block;margin-left:4px;min-width:16px;
  padding:0 4px;border-radius:8px;background:var(--erro);color:#fff;
  font-size:.66rem;font-weight:700;line-height:16px;text-align:center}
.nota-meli{display:flex;gap:22px;align-items:center;flex-wrap:wrap}
.nota-meli .valor{font-size:2.6rem;line-height:1;font-weight:700;
  font-variant-numeric:tabular-nums}
.nota-meli .de100{font-size:.9rem;color:var(--suave);font-weight:400}
.nota-meli .corpo{flex:1;min-width:220px}
.nota-meli .trilho{height:9px;border-radius:99px;background:var(--linha);
  overflow:hidden;margin:8px 0 6px}
.nota-meli .trilho i{display:block;height:100%;border-radius:99px;
  background:var(--acento)}
.nota-meli.n-baixa .valor,.nota-meli.n-baixa .trilho i{color:var(--erro)}
.nota-meli.n-baixa .trilho i{background:var(--erro)}
.nota-meli.n-media .valor{color:var(--aviso)}
.nota-meli.n-media .trilho i{background:var(--aviso)}
.nota-meli.n-alta .valor{color:var(--ok)}
.nota-meli.n-alta .trilho i{background:var(--ok)}

/* AS PENDENCIAS. Cada linha e uma acao com um botao que leva a tela de
   correcao do proprio Meli — a lista so vale se der para agir nela. */
.pendencia{display:flex;gap:14px;align-items:flex-start;padding:12px 0;
  border-top:1px solid var(--linha)}
.pendencia:first-child{border-top:0}
.pendencia .txt{flex:1;min-width:0}
.pendencia .assunto{font-size:.76rem;color:var(--suave);margin-bottom:2px}
.pendencia .frase{font-size:.9rem}
.pendencia .acao{white-space:nowrap}
/* WARNING e OPPORTUNITY nao sao a mesma coisa: um e "falta o que o Meli
   exige", o outro e "da para melhorar". Cor igual apagaria a diferenca. */
/* DESALINHADO porque era `inline-block` com o texto na linha de base do
   paragrafo: a pilula subia e descia conforme a altura da linha ao lado.
   `inline-flex` com `align-items:center` prende o texto no meio dela. */
.selo-modo{display:inline-flex;align-items:center;justify-content:center;
  line-height:1.15;padding:3px 9px;border-radius:99px;
  font-size:.68rem;text-transform:uppercase;letter-spacing:.04em;
  white-space:nowrap;border:1px solid currentColor}
/* CHEIAS, e nao so contorno. Eram tres pilulas de contorno fino com a
   cor so no texto: numa lista de vinte linhas, "exigido" e "feito" tinham
   o mesmo peso visual e era preciso LER cada uma para saber por onde
   comecar. Agora a cor chega antes do texto — que e o unico motivo de
   existir cor aqui. Mesmo tratamento do selo da ficha: texto escuro sobre
   fundo claro da mesma familia, com borda escura. */
.selo-modo.exige{color:#8c1c13;background:#fdecea;border-color:#8c1c13;
  font-weight:700}
.selo-modo.melhora{color:#7a5b00;background:#fdf6e3;border-color:#a37f10;
  font-weight:700}
.selo-modo.feito{color:#12603a;background:#e9f7ef;border-color:#178a4a;
  font-weight:600}
@media (prefers-color-scheme:dark){
  .selo-modo.exige{color:#ffb3ab;background:#3a1512;border-color:#c0392b}
  .selo-modo.melhora{color:#f0d492;background:#332a10;border-color:#a37f10}
  .selo-modo.feito{color:#8fe0b4;background:#0f2a1d;border-color:#178a4a}
}

/* AS FOTOS, com o diagnostico embaixo de cada uma. */
.fotos{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));
  gap:14px}
.fotos figure{margin:0;border:1px solid var(--borda);border-radius:10px;
  overflow:hidden;background:var(--fundo)}
.fotos img{width:100%;height:132px;object-fit:contain;display:block;
  background:#fff}
.fotos figcaption{padding:8px 10px;font-size:.76rem}
.fotos .principal{font-weight:600}
.fotos .ruim{color:var(--erro)}
.fotos .limpa{color:var(--ok)}

/* A FICHA. `vazio` marca o que falta; `exigido` marca o que falta E o
   Meli cobra. Cor de fundo, e nao so texto: a tela existe para achar
   buraco batendo o olho. */
table.ficha td.campo{width:38%}
table.ficha tr.vazio td{background:var(--zebra)}
table.ficha tr.exigido td{background:color-mix(in srgb,var(--erro) 9%,transparent)}
table.ficha .marca{font-size:.68rem;color:var(--suave);margin-left:6px;
  white-space:nowrap}
table.ficha tr.exigido .marca{color:var(--erro)}
table.ficha .sem{color:var(--suave);font-style:italic}

/* Custo extra e base do imposto de UMA integracao. Mesma faixa do
   apelido, logo abaixo: e a mesma natureza — coisa que se ajusta nesta
   conta e vale so para ela. */
/* SEGUNDA LINHA da faixa, e nao uma quinta coluna.
   A faixa e um grid de quatro colunas (identidade, apelido, estado,
   acoes). Entrando como filho comum, este formulario virava um quinto
   item e quebrava para a coluna 1 da linha de baixo — aparecia colado na
   marca, ANTES do estado da conta, o que le errado. Ocupando a largura
   toda, ele vira o que e: o ajuste fiscal DESTA integracao, embaixo do
   que ela e. */
.regras-canal{grid-column:1 / -1;display:flex;gap:10px;align-items:flex-end;
  flex-wrap:wrap;margin-top:2px;padding-top:10px;
  border-top:1px solid var(--linha)}
.regras-canal label{margin:0 0 3px;font-size:.72rem}
.regras-canal input,.regras-canal select{padding:5px 8px;border-radius:6px;
  border:1px solid var(--borda);background:var(--fundo);color:var(--texto);
  font-size:.82rem;font-family:inherit}
.regras-canal input{width:120px}
.regras-canal button{padding:5px 11px;font-size:.8rem}

.resumo-chips{display:flex;gap:8px;flex-wrap:wrap;margin:2px 0 14px}
.resumo-chips .chip{display:inline-flex;align-items:center;gap:6px;
  padding:4px 11px;border-radius:99px;border:1px solid var(--borda);
  font-size:.78rem}
.resumo-chips .chip b{font-variant-numeric:tabular-nums}
.resumo-chips .chip.mau{color:var(--erro);border-color:currentColor}
.resumo-chips .chip.bom{color:var(--ok);border-color:currentColor}

/* OS NUMEROS DA FICHA VIRARAM FILTRO. Eram so contagem, e contagem que
   nao leva a lugar nenhum obriga a ler as 94 linhas para achar as tres
   que importam. */
.resumo-chips.filtros .chip{cursor:pointer;background:var(--papel);
  color:inherit;font-family:inherit}
.resumo-chips.filtros .chip:hover{border-color:var(--acento)}
.resumo-chips.filtros .chip[aria-pressed="true"]{background:var(--acento);
  border-color:var(--acento);color:#fff}
.resumo-chips.filtros .chip[aria-pressed="true"] b{color:#fff}
/* O CHIP QUE E LINK — na tela de Pedidos o filtro vai ao servidor, entao
   ele e <a> e nao <button>. Sem isto o navegador o pintaria de azul e
   sublinhado, e o chip escolhido ficaria com texto azul sobre o acento. */
.resumo-chips.filtros a.chip{text-decoration:none;color:inherit}
.resumo-chips.filtros a.chip[aria-pressed="true"]{color:#fff}
.resumo-chips .chip.mau[aria-pressed="true"]{background:var(--erro);
  border-color:var(--erro);color:#fff}

/* Some as linhas que nao sao do filtro escolhido. */
.ficha-filtrada[data-filtro="exigido"] tr:not([data-tipo="exigido"]),
.ficha-filtrada[data-filtro="abranco"] tr:not([data-tipo="abranco"]),
.ficha-filtrada[data-filtro="ok"] tr:not([data-tipo="ok"]){display:none}
.ficha-filtrada .nada-no-filtro{display:none;color:var(--suave);
  font-size:.82rem;padding:10px 2px}
.ficha-filtrada.vazia .nada-no-filtro{display:block}

/* O SELO. Vermelho escuro sobre vermelho claro com borda escura para o
   que precisa de mao, verde para o que esta resolvido. A cor faz o
   trabalho de longe; o texto confirma de perto. */
.ficha td.selo-col{width:1%;white-space:nowrap;text-align:right}
/* SELO-ESTADO, e nao `.selo`: `.selo` JA EXISTIA como classe de CELULA
   (`<td class="selo">`) nas telas de promocoes, e uma regra generica com
   esse nome virava aquele `<td>` em `inline-flex` com borda — os icones da
   esquerda sairam do lugar nas duas telas. O dono viu em 02/09/2026. E a
   segunda vez nesta base que um nome generico colide (a primeira foi
   `.sub`, subtitulo contra sub-item do menu).

   QUEBRAVA NO MEIO, tambem: sem `white-space:nowrap`, "dá para preencher"
   partia em duas linhas e a borda ficava so em volta do "dá". */
.selo-estado{display:inline-flex;align-items:center;justify-content:center;
  white-space:nowrap;line-height:1.2;padding:2px 8px;border-radius:5px;
  font-size:.68rem;font-weight:600;letter-spacing:.01em;border:1px solid}
.selo-estado.corrigir{color:#8c1c13;background:#fdecea;border-color:#8c1c13}
.selo-estado.preencher{color:#7a5b00;background:#fdf6e3;border-color:#a37f10}
.selo-estado.pronto{color:#12603a;background:#e9f7ef;border-color:#178a4a}
.selo-estado.neutro{color:var(--suave);background:transparent;
  border-color:var(--borda)}
@media (prefers-color-scheme:dark){
  .selo-estado.corrigir{color:#ffb3ab;background:#3a1512;border-color:#c0392b}
  .selo-estado.preencher{color:#f0d492;background:#332a10;border-color:#a37f10}
  .selo-estado.pronto{color:#8fe0b4;background:#0f2a1d;border-color:#178a4a}
}

/* ====================================================================
   A TELA DE ANALISE DE ANUNCIO
   --------------------------------------------------------------------
   O dono olhou a tela em 02/09/2026 e disse: "esta muito tudo branco,
   ruim de achar os detalhes necessarios". Estava certo — titulo, valor,
   nota e conteudo tinham todos o mesmo peso e a mesma cor, e a unica
   pista de hierarquia era o tamanho da fonte.

   A regra que passa a valer nesta tela, e so ela decide a cor:

     TITULO de bloco  -> tarja de cor na borda esquerda + fundo levissimo
     ROTULO de campo  -> --suave, minusculo, maiusculas espacadas
     VALOR            -> --texto, peso 600, tabular
     NOTA explicativa -> --suave, italico nao, fundo levemente tingido
     ESTADO           -> vermelho = arrumar, verde = ok, ambar = da para

   Cor nunca decora aqui: ela responde "o que eu faco com isto".
   ==================================================================== */

/* O TITULO DO BLOCO ganha tarja. Sem ela, oito cartoes brancos empilhados
   viram uma parede, e achar onde um acaba e o outro comeca custa tempo. */
.cartao h2{position:relative}
.cartao h3.sub-bloco{font-size:.9rem;margin:18px 0 8px;color:var(--texto);
  padding-bottom:5px;border-bottom:1px solid var(--borda)}

/* DUAS COLUNAS. O que anda junto fica junto, e a tela para de ter um
   metro de branco a direita de cada cartao. Abaixo de 1100px vira uma
   coluna so — em tela estreita, duas colunas viram duas colunas magras. */
.par-analise{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:14px;align-items:start;margin-bottom:14px}
.par-analise > *{margin-bottom:0}
.coluna-analise{display:grid;gap:14px;align-content:start}
.coluna-analise .cartao{margin-bottom:0}
@media (max-width:1100px){.par-analise{grid-template-columns:1fr}}

/* COMPACTO: o cartao de identificacao nao precisa do respiro de um
   cartao de leitura — ele e uma etiqueta, e se le de relance. */
.cartao.compacto{padding:14px 16px}
.titulo-anuncio{font-size:1rem;margin:0 0 3px;line-height:1.3}
.cabeca-com-curva{display:flex;align-items:center;gap:4px}
.kpis.apertado{display:grid;
  grid-template-columns:repeat(auto-fit,minmax(115px,1fr));
  gap:9px 12px;margin:11px 0 8px}
.kpis.apertado > div{padding:0;border:0;background:none}
.kpis.apertado .pequeno{font-size:.64rem;text-transform:uppercase;
  letter-spacing:.06em}
.kpis.apertado b{font-size:.85rem}
.cartao.compacto .acoes{margin-top:10px;gap:6px}
.cartao.compacto .acoes .botao{padding:5px 10px;font-size:.78rem}

/* LOGISTICA E ESTOQUE NA MESMA CELULA. Eram duas colunas — "Full /
   Deposito" numa e "7 / 78" na outra —, e mesmo com a ordem fixa era
   preciso alinhar as duas com o olho para saber qual numero era de qual
   lugar. */
/* O LUGAR ENCOSTADO A ESQUERDA, A QUANTIDADE A DIREITA.

   Pedido do dono em 04/09/2026, para as duas telas: "a palavra alinhada
   a esquerda, e o XX pcs alinhado a direita, assim fica muito mais facil
   de ler". Ele esta certo — com tudo colado a esquerda, "FULL 8" e
   "DEPOSITO 263" comecavam em colunas diferentes e os numeros nao se
   comparavam de cima a baixo. Agora as duas pontas ficam fixas e os
   algarismos se alinham sozinhos. */
td.estoque-col{text-align:left}
td.data-col{white-space:nowrap;font-size:.74rem;color:var(--suave);
  font-variant-numeric:tabular-nums}
.estoques{display:flex;flex-direction:column;gap:2px;
  align-items:stretch}
/* O NUMERO ENCOSTADO NO ROTULO (dono, 23/09/2026: "deixe os numeros bem
   proximos da palavra do deposito, longe assim fica ruim de ver"). O
   rotulo tem largura fixa, entao os rotulos alinham entre si E os
   numeros tambem — sem jogar um para cada ponta da celula. */
.onde-estoque{display:flex;align-items:baseline;gap:6px;
  white-space:nowrap;font-size:.8rem}
.onde-estoque .lugar{font-size:.62rem;text-transform:uppercase;
  letter-spacing:.06em;color:var(--suave);min-width:56px;
  display:inline-block}
.onde-estoque b{font-variant-numeric:tabular-nums}
/* O TRAVESSAO DA ORIGEM VAZIA, em qualquer tela. As duas origens
   aparecem sempre para a coluna se ler em diagonal, e o travessao esta
   ali para segurar o alinhamento — nao para ser lido. Antes esta regra
   so valia dentro de `table.compras`, e nas telas de Anuncios o zero
   saia na cor do texto, competindo com os numeros de verdade. */
/* O TRAVESSAO DO VALOR QUE NAO EXISTE, com a mesma cara em toda tela.
   Eram quatro variacoes ate 05/09/2026 — hifen curto e travessao, ora na
   cor do texto, ora na cor da borda. Ele existe para SEGURAR O
   ALINHAMENTO da coluna, e nao para ser lido: por isso a cor da borda. */
.vazio-col{color:var(--suave);opacity:.55}
/* NA TELA DE PROMOCOES o estoque tem COLUNA PROPRIA. Ele ja morou
   embaixo do SKU, na mesma celula, e o dono desfez no mesmo dia: duas
   informacoes empilhadas faziam a linha crescer, e uma tabela de cem
   anuncios paga essa altura cem vezes. Menor que na tela de Anuncios
   porque ali e a coluna principal e aqui e apoio a decisao. */
table.ordenavel td.estoque-col .estoques{min-width:86px}
table.ordenavel td.estoque-col .onde-estoque{font-size:.7rem}
table.ordenavel td.estoque-col .onde-estoque .lugar{font-size:.54rem}

/* A CELULA DA NOTA: balões à esquerda, nota à direita (23/09/2026).
   A nota encostada na borda direita alinha com as outras colunas de
   numero; os balões ficam do lado de dentro, onde o olho passa antes. */
td.nota-col{text-align:right}
/* Os icones de video e fiscal da lista: coluna estreita, a cor e' o estado. */
th.icone-col,td.icone-col{width:1%;text-align:center;padding-left:4px;
  padding-right:4px;white-space:nowrap}
.icone-estado{display:inline-flex;vertical-align:middle;line-height:0}
.icone-estado.ok{color:var(--ok)}
.icone-estado.atencao{color:var(--aviso)}
.icone-estado.erro{color:var(--erro)}
.icone-estado.nada{color:var(--suave);line-height:1}
.caixa-nota{display:inline-flex;align-items:center;justify-content:flex-end;
  gap:5px}
.balao-nota{display:inline-flex;align-items:center;justify-content:center;
  min-width:19px;height:19px;padding:0 5px;border-radius:99px;
  font-size:.66rem;font-weight:700;color:#fff}
.balao-nota.exige{background:var(--erro)}
.balao-nota.melhora{background:var(--aviso)}

/* A NOTA DO MELI, com semaforo. As faixas sao NOSSAS, e o title diz isso:
   o Mercado Livre publica os tres niveis mas nao publica o corte entre
   eles, e inventar o corte apresentando-o como deles seria dar ao numero
   uma autoridade que ele nao tem. */
.nota-meli{display:inline-flex;align-items:center;justify-content:center;
  min-width:34px;padding:2px 7px;border-radius:5px;font-weight:700;
  font-size:.78rem;font-variant-numeric:tabular-nums;border:1px solid}
.nota-meli.boa{color:#12603a;background:#e9f7ef;border-color:#178a4a}
.nota-meli.meia{color:#7a5b00;background:#fdf6e3;border-color:#a37f10}
.nota-meli.ruim{color:#8c1c13;background:#fdecea;border-color:#8c1c13}
@media (prefers-color-scheme:dark){
  .nota-meli.boa{color:#8fe0b4;background:#0f2a1d;border-color:#178a4a}
  .nota-meli.meia{color:#f0d492;background:#332a10;border-color:#a37f10}
  .nota-meli.ruim{color:#ffb3ab;background:#3a1512;border-color:#c0392b}
}

/* O NUMERO DENTRO DO CHIP de filtro. Um filtro sem numero obriga a
   clicar em cada um para descobrir se vale a pena — e o numero e
   justamente o que diz se ha problema. */
.filtro-situacao .quantos-chip{font-variant-numeric:tabular-nums;
  font-weight:700;opacity:.75;margin-left:2px}
.filtro-situacao a.ativo .quantos-chip{opacity:1}

/* O CALENDARIO DE MESES. Um ano cabe inteiro num quadro de doze, e ai
   da para VER em que meses houve venda e comparar os volumes de relance —
   coisa que a lista suspensa nao permitia. Sem dias: o periodo aqui e
   sempre o mes fechado. */
.barra-periodo{margin-bottom:14px;align-items:center}
.calendario-mes{position:relative;display:inline-block}
.calendario-mes > summary{list-style:none;cursor:pointer;padding:6px 13px;
  border:1px solid var(--borda);border-radius:8px;font-size:.85rem;
  background:var(--papel);user-select:none;white-space:nowrap}
.calendario-mes > summary::-webkit-details-marker{display:none}
/* A SETINHA COM DUAS BARRAS. Com UMA so, o escape virava OCTAL
   do Python (0x15, caractere de controle) e o CSS recebia lixo. O
   `teste_fase11` pegou — ele existe desde que a seta de ordenar
   caiu neste mesmo buraco. */
.calendario-mes > summary::after{content:" \25be";color:var(--suave)}
.calendario-mes > summary:hover{border-color:var(--acento)}
.calendario-mes[open] > summary{border-color:var(--acento);
  color:var(--acento)}
.calendario-corpo{position:absolute;z-index:50;top:calc(100% + 5px);left:0;
  background:var(--papel);border:1px solid var(--borda);border-radius:10px;
  box-shadow:0 8px 26px rgba(0,0,0,.18);padding:12px;min-width:250px}
/* UM ANO POR VEZ, com setas para os lados (02/10/2026). */
.ano-topo{display:flex;align-items:center;justify-content:space-between;
  margin-bottom:8px}
.ano-rotulo{font-size:.9rem;font-weight:700;color:var(--texto)}
.ano-seta{width:28px;height:28px;display:inline-flex;align-items:center;
  justify-content:center;border:1px solid var(--borda);border-radius:7px;
  background:var(--papel);color:var(--texto);font-size:1.1rem;
  line-height:1;padding:0;cursor:pointer}
span.ano-seta{border-color:transparent;cursor:default}
button.ano-seta:hover{border-color:var(--acento);color:var(--acento)}
.calendario-corpo .meses{display:grid;grid-template-columns:repeat(4,1fr);
  gap:4px}
.calendario-corpo .mes{display:flex;flex-direction:column;align-items:center;
  gap:1px;padding:8px 2px;border-radius:7px;font-size:.8rem;
  text-decoration:none;color:var(--texto);border:1px solid transparent}
.calendario-corpo a.mes:hover{background:var(--fundo);
  border-color:var(--borda)}
.calendario-corpo .mes b{font-size:.66rem;font-weight:600;color:var(--suave);
  font-variant-numeric:tabular-nums}
.calendario-corpo .mes.escolhido{background:var(--acento);color:#fff;
  border-color:var(--acento);font-weight:700}
.calendario-corpo .mes.escolhido b{color:#fff;opacity:.85}
/* MES SEM VENDA fica na grade, apagado: a ausencia tambem e informacao, e
   some-lo faria parecer que o mes nao existiu. */
.calendario-corpo .mes.vazio{color:var(--suave);opacity:.38;cursor:default}
.limpar-mes{display:block;margin-top:10px;padding-top:9px;
  border-top:1px solid var(--linha);font-size:.76rem;color:var(--suave);
  text-decoration:none}
.limpar-mes:hover{color:var(--acento)}

/* AS FILEIRAS DA TELA DE ANALISE (22/09/2026). Todos os quadros da
   mesma fileira terminam na mesma linha: `stretch` no grid e altura
   inteira no cartao. Sem isso, tres quadros de conteudo diferente
   terminam em tres alturas, e a tela parece montada no olho. */
.fileira-analise{display:grid;gap:14px;align-items:stretch;margin-bottom:14px}
.fileira-analise > *{margin-bottom:0;height:100%}
.fileira-analise.col-2{grid-template-columns:repeat(2,minmax(0,1fr))}
/* TRES IGUAIS, e nao um maior (dono, 23/09/2026: "nos graficos de pizzas
   individuais, os 3 quadros devem ter exatamente sempre a mesma
   largura"). Rosca ao lado de rosca so se compara quando o desenho tem o
   mesmo tamanho nos tres. */
.fileira-analise.col-3{grid-template-columns:repeat(3,minmax(0,1fr))}
@media (max-width:1250px){
  .fileira-analise.col-3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:900px){
  .fileira-analise.col-2,.fileira-analise.col-3{grid-template-columns:1fr}}
.cabeca-anuncio{margin-bottom:14px}
/* LARGURA DE LEITURA (dono, 23/09/2026: "tabela dos dados fiscais deve
   ficar com largura menor, igual ao quadro da ficha tecnica; quadro de
   descricao tbm deixe menor"). Uma tabela de duas colunas esticada por
   1900px poe o rotulo num canto e o valor no outro, e o olho perde a
   linha no meio do caminho. */
.bloco-estreito table,.bloco-estreito pre,.bloco-estreito > p{
  max-width:900px}
.bloco-estreito pre{white-space:pre-wrap;word-break:break-word}
/* A BARRA DE PERIODO da tela de um anuncio: ela manda no grafico e
   nas tres roscas logo abaixo, e por isso encosta neles. */
.periodo-anuncio{margin:0 0 14px;flex-wrap:wrap;align-items:center}
.rotulo-periodo{font-size:.66rem;text-transform:uppercase;
  letter-spacing:.07em;color:var(--suave);margin-right:4px}
/* OS DOIS CALENDARIOS, para qualquer periodo fora dos atalhos. */
.periodo-datas{display:inline-flex;align-items:center;gap:6px;margin:0}
.periodo-datas input[type=date]{width:auto;padding:5px 8px;
  font-size:.82rem;margin:0}
.periodo-datas .ate{font-size:.78rem;color:var(--suave)}

/* A FICHA E A CONTA DA MARGEM, LADO A LADO DENTRO DO MESMO QUADRO.
   Eram dois quadros dizendo a mesma coisa em formatos diferentes; o dono
   pediu um so, em tabela, em 22/09/2026. */
.bloco-numeros .numeros-do-anuncio{display:grid;gap:8px 22px;
  align-items:start;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
@media (max-width:1250px){
  .bloco-numeros .numeros-do-anuncio{grid-template-columns:1fr}}
.numeros-do-anuncio .conta-ao-lado > .sub-bloco{margin-top:0}

/* LINHA BAIXA, NUMERO A DIREITA, DUAS CASAS (dono, 22/09/2026: "diminua
   um pouco a altura das linhas... alinhe os numeros a direita com 2
   casas decimais"). `tabular-nums` e o que faz a virgula de uma linha
   cair embaixo da virgula da outra. */
/* `table-layout:fixed` porque a tabela mora dentro de uma coluna de
   grid: sem isso o nome da familia estica a tabela alem da coluna e o
   valor de cada linha vai parar EM CIMA do quadro do lado. Foi o defeito
   que o dono viu em 22/09/2026 ("a janela que tem o publicado em esta
   ficando em cima do anuncio em numeros"). */
table.conta-margem{width:100%;border-collapse:collapse;table-layout:fixed}
table.conta-margem td{padding:3px 0;font-size:.82rem;
  border-bottom:1px solid var(--linha);vertical-align:baseline}
table.conta-margem tr:last-child td{border-bottom:0}
table.conta-margem td:first-child{width:47%;color:var(--suave);
  padding-right:10px}
table.conta-margem td.num{text-align:right;overflow-wrap:anywhere;
  font-variant-numeric:tabular-nums;color:var(--texto);font-weight:600}
table.conta-margem tr.total td{border-top:2px solid var(--borda);
  border-bottom:0;padding-top:6px;font-weight:700}
table.conta-margem tr.total td:first-child{color:var(--texto)}
table.conta-margem a{color:var(--acento);text-decoration:none}
table.conta-margem a:hover{text-decoration:underline}
table.conta-margem .copiar{margin-left:5px}
table.conta-margem .pub{margin-right:4px}
/* O PESO DA PARCELA entre parenteses: mesma linha, peso menor. Ele
   explica o numero, e nao compete com ele. */
.peso-pct{color:var(--suave);font-weight:400;font-size:.76rem}
/* Na margem, o % acompanha a cor do valor: a faixa e' sobre ele. */
.mc-pct .peso-pct{color:inherit;font-weight:inherit}
.caminho-curto{font-size:.72rem;color:var(--suave);line-height:1.3;margin-top:2px;text-align:right}
a.peso-pct{text-decoration:none}
a.peso-pct:hover{color:var(--acento);text-decoration:underline}
.rotulo-preco{font-size:.64rem;text-transform:uppercase;letter-spacing:.06em;
  color:var(--suave);margin-right:-4px}

/* O QUE REVISAR: a primeira coisa da tela, e a unica em vermelho. */
.lista-revisar ul{margin:6px 0 0;padding:0;list-style:none}
.lista-revisar li{position:relative;padding:5px 0 5px 20px;font-size:.84rem;
  line-height:1.45;border-bottom:1px solid var(--linha)}
.lista-revisar li:last-child{border-bottom:0}
.lista-revisar li::before{position:absolute;left:0;top:5px;font-weight:700}
.lista-revisar li.grave::before{content:"\2715";color:var(--erro)}
.lista-revisar li.aviso::before{content:"\26A0";color:var(--aviso)}
.cartao.faixa-ok{border-left:4px solid var(--ok)}
/* AS TAGS DO MERCADO LIVRE (28/10/2026): vermelho ruim, verde boa, cinza
   neutra — na análise do anúncio e no selo da lista de Anúncios. */
.tags-anuncio{list-style:none;margin:6px 0 0;padding:0;display:flex;
  flex-direction:column;gap:5px}
.tag-anuncio{display:flex;flex-direction:column;gap:1px;padding:5px 9px;
  border-radius:6px;border-left:4px solid var(--borda);font-size:.84rem}
.tag-anuncio .pequeno{font-size:.74rem}
.tag-anuncio.ruim{border-left-color:var(--erro);
  background:color-mix(in srgb,var(--erro) 12%,transparent)}
.tag-anuncio.boa{border-left-color:var(--ok);
  background:color-mix(in srgb,var(--ok) 11%,transparent)}
.tag-anuncio.neutra{background:var(--linha)}
.selo-tag-ruim{display:inline-block;margin-left:4px;padding:0 6px;
  border-radius:4px;font-size:.7rem;font-weight:600;line-height:1.5;
  color:#fff;background:var(--erro);white-space:nowrap;cursor:help}
a.selo-tag-ruim{cursor:pointer;text-decoration:none}

/* O ANUNCIO EM NUMEROS */
.faixa-preco{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;
  margin:2px 0 14px}
.faixa-preco .preco-forte{font-size:1.5rem;font-weight:700;
  color:var(--texto);font-variant-numeric:tabular-nums}
.faixa-preco .riscado{text-decoration:line-through;color:var(--suave);
  font-size:.92rem}
/* O DESCONTO EM CINZA, com os numeros em negrito (dono, 29/09/2026: "coloque
   o quadro em um cinza, e destaque bem os numeros deixando em negrito, e o
   quadro ou barra menos destacados"). */
.faixa-preco .corte{color:var(--texto);font-weight:700;font-size:.86rem;
  background:rgba(127,140,160,.08);border:1px solid rgba(127,140,160,.22);
  border-radius:5px;padding:1px 7px;font-variant-numeric:tabular-nums}

/* A NOTA EXPLICATIVA nao e paragrafo comum: e o rodape que conta a regra
   do bloco. Tingida de leve, ela para de competir com o conteudo. */
.nota-explicativa{font-size:.78rem;color:var(--suave);line-height:1.5;
  background:rgba(127,140,160,.07);border-left:3px solid var(--borda);
  border-radius:0 7px 7px 0;padding:8px 11px;margin:12px 0 0}
.nota-explicativa b{color:var(--texto)}

/* AS AVALIACOES */
.nota-grande{display:flex;align-items:baseline;gap:10px;margin-bottom:12px}
.nota-grande b{font-size:2rem;font-weight:700;line-height:1;
  color:var(--texto)}
.nota-grande span{color:var(--suave);font-size:.82rem}
.barra-nota{display:flex;align-items:center;gap:9px;margin:3px 0}
.barra-nota .estrelas{width:26px;font-size:.76rem;color:var(--suave);
  text-align:right}
.barra-nota .trilho{flex:1;height:8px;background:var(--borda);
  border-radius:99px;overflow:hidden}
.barra-nota .preenche{display:block;height:100%;border-radius:99px}
.barra-nota .preenche.boa{background:var(--ok)}
.barra-nota .preenche.meia{background:var(--aviso)}
.barra-nota .preenche.ruim{background:var(--erro)}
.barra-nota .quantos{width:38px;font-size:.76rem;color:var(--suave);
  font-variant-numeric:tabular-nums}

/* A ARVORE: familia > variacao > anuncio.
   Eram dois cartoes dizendo a mesma coisa. Agora e um so, e o recuo faz o
   trabalho que antes dependia de ler o texto de cada quadro. */
.arvore{list-style:none;margin:0;padding:0;display:grid;gap:8px}
.arvore .ramo-cabeca{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.arvore .nivel-tipo{font-size:.62rem;text-transform:uppercase;
  letter-spacing:.09em;color:#fff;background:var(--suave);padding:2px 7px;
  border-radius:4px;font-weight:700}
.arvore .codigo{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:.86rem;font-weight:600;color:var(--texto)}
.arvore a.codigo{color:var(--acento);text-decoration:none}
.arvore a.codigo:hover{text-decoration:underline}
.arvore .nome,.arvore .nome-familia{font-size:.86rem;color:var(--texto)}
.arvore .nome{color:var(--suave)}
.ramo-familia{border:1px solid var(--borda);border-left:4px solid var(--suave);
  border-radius:9px;padding:10px 12px;background:rgba(127,140,160,.05)}
.ramo-variacao{border:1px solid var(--borda);border-left:4px solid var(--acento);
  border-radius:9px;padding:10px 12px;margin-left:18px}
.ramo-variacao.este{background:rgba(31,111,235,.05)}
.ramo-anuncios{list-style:none;margin:8px 0 0;padding:0 0 0 16px;
  display:grid;gap:5px;border-left:1px dashed var(--borda)}
.ramo-anuncio{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  padding:4px 0 4px 10px;position:relative}
.ramo-anuncio::before{content:"";position:absolute;left:0;top:50%;width:8px;
  height:1px;background:var(--borda)}
.ramo-anuncio.este .codigo{font-weight:700;color:var(--texto)}
.ramo-anuncio.vazio{color:var(--suave);font-size:.8rem}
.voce-esta-aqui{font-size:.66rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.05em;color:#0b4a91;background:#e3f0ff;
  border:1px solid #0b4a91;border-radius:5px;padding:1px 7px}
.ramo-anuncio .ir-meli{font-size:.72rem;color:var(--suave)}

/* A LISTA DE ACHADOS da busca. Com foto e titulo: procurar por "16a" e
   receber uma lista de codigos MLB nao ajuda a reconhecer o anuncio. */
.achados{list-style:none;margin:10px 0 0;padding:0;display:grid;gap:6px}
.achado-link{display:flex;align-items:center;gap:11px;padding:7px 9px;
  border:1px solid var(--borda);border-radius:9px;text-decoration:none;
  color:inherit;background:var(--papel)}
.achado-link:hover{border-color:var(--acento);background:rgba(31,111,235,.04)}
.achado-link img,.achado-link .semfoto{width:44px;height:44px;flex:0 0 44px;
  object-fit:contain;border-radius:6px;background:var(--fundo)}
.achado-texto{display:flex;flex-direction:column;gap:2px;min-width:0}
.achado-texto b{font-size:.86rem;font-weight:600;color:var(--texto)}
.achado-texto{flex:1 1 auto}
/* STATUS E ESTOQUE EM COLUNAS (dono, 25/09/2026), alinhadas pelo
   cabecalho: larguras fixas nos dois lados. */
.achado-situacao{flex:0 0 110px;text-align:center}
.achado-estoque{flex:0 0 130px}
.achados-cabeca{display:flex;gap:11px;padding:10px 9px 0 64px;
  font-size:.7rem;text-transform:uppercase;letter-spacing:.04em;
  color:var(--suave);font-weight:600}
.achados-cabeca > span:first-child{flex:1 1 auto}

/* AS FOTOS: mesmo selo da ficha, e a imagem abre no tamanho original. */
.fotos figure.com-problema{border-color:#8c1c13}
.abrir-foto{position:relative;display:block}
.abrir-foto .lupa{position:absolute;right:5px;bottom:5px;font-size:.66rem;
  font-weight:600;background:rgba(20,23,28,.82);color:#fff;padding:2px 7px;
  border-radius:5px;opacity:0;transition:opacity .12s}
.abrir-foto:hover .lupa{opacity:1}
.fotos figcaption .principal{display:flex;align-items:center;gap:6px;
  flex-wrap:wrap}
@media (prefers-reduced-motion:reduce){.abrir-foto .lupa{transition:none}}

.caminho-categoria{font-size:.78rem;color:var(--suave);margin-top:3px}
.caminho-categoria b{color:var(--texto);font-weight:600}

/* ANALISE GERAL — o Pareto, a matriz ABC x margem e as tags de decisao.
   Entraram em 09/09/2026, a pedido do dono: "sempre com tags coloridas
   pra ficar facil de identificar os detalhes, nada de tela so branca
   cheio de texto, crie graficos onde for possivel". */

/* A comparacao com o periodo anterior, ao lado do numero. Um numero
   sozinho nao se le: R$ 56.253 e bom ou ruim? */
.variacao{font-size:.72rem;font-weight:600;margin-left:.35rem;
  white-space:nowrap}
.var-sobe{color:var(--ok)}
.var-cai{color:var(--erro)}

/* A MATRIZ. A cor de fundo e a MESMA da margem no resto do sistema, so
   que diluida — a celula precisa ser lida como area, e o texto por cima
   dela tem de continuar legivel nos dois temas. */
table.matriz-abc{width:100%;border-collapse:collapse;margin:.6rem 0}
table.matriz-abc th{font-size:.78rem;color:var(--suave);font-weight:600;
  padding:.35rem .5rem;text-align:center}
table.matriz-abc th:first-child{text-align:right;width:5.5rem}
table.matriz-abc td{text-align:center;padding:.5rem;border-radius:6px;
  border:1px solid var(--borda)}
table.matriz-abc td b{display:block;font-size:1.25rem;line-height:1.1}
table.matriz-abc td .pequeno{display:block;color:inherit;opacity:.75}
table.matriz-abc td.vazia{color:var(--suave);border-style:dashed}
table.matriz-abc td.mc-azul{background:color-mix(in srgb,var(--otimo) 12%,transparent)}
table.matriz-abc td.mc-verde{background:color-mix(in srgb,var(--ok) 12%,transparent)}
table.matriz-abc td.mc-amarelo{background:color-mix(in srgb,var(--aviso) 14%,transparent)}
table.matriz-abc td.mc-vermelho{background:color-mix(in srgb,var(--erro) 12%,transparent)}

/* O CABECALHO DA COLUNA nos quadros de acao. Sem ele eram oito numeros
   sem rotulo, e cada quadro mostrava uma grandeza diferente: quem lia via
   "628,10" sem saber se era margem, faturamento ou estoque. */
.cabecalho-coluna{display:flex;justify-content:space-between;
  gap:.5rem;font-size:.68rem;text-transform:uppercase;
  letter-spacing:.03em;color:var(--suave);margin:.55rem 0 .1rem;
  padding-bottom:.2rem;border-bottom:1px solid var(--borda)}

/* AS TAGS DE DECISAO. Uma cor por acao, e a mesma cor em toda a tela. */
.tag.tag-vermelha{background:color-mix(in srgb,var(--erro) 16%,transparent);
  color:var(--erro)}
.tag.tag-laranja{background:color-mix(in srgb,var(--aviso) 18%,transparent);
  color:var(--aviso)}
.tag.tag-azul{background:color-mix(in srgb,var(--otimo) 15%,transparent);
  color:var(--otimo)}
.tag.tag-verde{background:color-mix(in srgb,var(--ok) 15%,transparent);
  color:var(--ok)}
/* EM RUPTURA: laranja forte, para chamar atencao sem virar o vermelho do
   prejuizo. Sao urgencias diferentes — uma perde dinheiro em cada venda,
   a outra deixou de vender. */
.tag.tag-ruptura{background:color-mix(in srgb,#e2600c 18%,transparent);
  color:#c4520a;font-weight:600}
.tag.tag-roxa{background:color-mix(in srgb,#7b4fbf 16%,transparent);
  color:#7b4fbf}
.tag.tag-ocre{background:color-mix(in srgb,#a0672a 16%,transparent);
  color:#a0672a}
.tag.tag-cinza{background:var(--linha);color:var(--suave)}

/* A FICHA DE UM PRODUTO — analise individual.
   A barra de participacao e a "cascata" da margem achatada numa barra so:
   a pergunta aqui e de PROPORCAO ("o custo come quanto?"), e proporcao se
   le melhor em area contigua do que em degraus soltos. */
.barra-participacao{display:flex;height:26px;border-radius:6px;
  overflow:hidden;margin:.6rem 0;background:var(--linha)}
.barra-participacao .fatia{display:block;min-width:2px}
.legenda-participacao{list-style:none;padding:0;margin:.5rem 0 0;
  display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));
  gap:.25rem .9rem;font-size:.82rem}
.legenda-participacao li{display:flex;align-items:baseline;gap:.4rem}
.legenda-participacao b{margin-left:auto;font-variant-numeric:tabular-nums}
.legenda-participacao .ponto{width:9px;height:9px;border-radius:2px;
  flex:0 0 9px}

/* Barras horizontais de canal, logistica e mes. Proporcionais ao MAIOR da
   lista, e nao ao total: com um canal fazendo 93%, barras sobre o total
   deixariam todas as outras rentes a zero. */
ul.mini-barras{list-style:none;padding:0;margin:.4rem 0 0;font-size:.83rem}
ul.mini-barras li{display:flex;align-items:center;gap:.55rem;
  padding:.22rem 0}
ul.mini-barras .rot{flex:0 0 8.5rem;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap}
ul.mini-barras .trilho{flex:1 1 auto;height:9px;border-radius:5px;
  background:var(--linha);overflow:hidden;min-width:40px}
ul.mini-barras .cheio{display:block;height:100%;background:var(--acento);
  opacity:.7;border-radius:5px}
ul.mini-barras .num{flex:0 0 auto;font-variant-numeric:tabular-nums;
  white-space:nowrap}

/* A ROSCA de "para onde foi cada real": grafico de um lado, valores do
   outro. Era uma barra que ocupava a largura inteira e empurrava a
   legenda para baixo — o olho tinha de ir e voltar entre a cor e o nome. */
/* `position:relative` E OBRIGATORIO: a caixa de valores e absoluta e, sem
   um ancestral posicionado, ela se ancorava na pagina inteira e aparecia
   fora da tela. Era por isso que a dica da rosca "nao funcionava". */
.rosca-participacao{display:flex;gap:1.2rem;align-items:center;
  flex-wrap:wrap;margin-top:.5rem;position:relative}
/* A ROSCA CABE NA ALTURA DA LEGENDA, e nao o contrario: com 150px ela
   estourava o quadro em produto de poucas parcelas. */
.rosca-participacao svg{width:132px;height:132px;flex:0 0 132px;
  align-self:center;overflow:visible}
.fatia-rosca{transition:opacity .12s}
.rosca-participacao svg:hover .fatia-rosca{opacity:.45}
.rosca-participacao svg .fatia-rosca:hover{opacity:1}
ul.legenda-rosca{list-style:none;padding:0;margin:0;flex:1 1 300px;
  font-size:.82rem;min-width:260px}
ul.legenda-rosca li{display:flex;align-items:baseline;gap:.45rem;
  padding:.12rem 0}
ul.legenda-rosca .ponto{width:9px;height:9px;border-radius:2px;flex:0 0 9px}
/* Quebra linha em vez de cortar: na legenda de SKUs, o rotulo E o SKU. */
ul.legenda-rosca .rot{flex:1 1 auto;min-width:0;overflow-wrap:anywhere}
ul.legenda-rosca b{font-variant-numeric:tabular-nums}
ul.legenda-rosca .extra{color:var(--suave);font-size:.8rem;white-space:nowrap;
  font-variant-numeric:tabular-nums;min-width:4.5rem;text-align:right}
ul.legenda-rosca .pct{color:var(--suave);flex:0 0 3.2rem;text-align:right;
  font-variant-numeric:tabular-nums}
.cartao.meia{max-width:640px}
/* OS QUATRO QUADROS DE ROSCA, do mesmo tamanho e alinhados.
   Pedido do dono em 10/09/2026: "todos os graficos devem mostrar a parte
   circular completa, com o mesmo tamanho e alinhamento nos 4 quadros".
   O `align-items:start` mantem os quadros do mesmo topo mesmo quando um
   tem tres fatias e o outro sete; a rosca em si nao muda de tamanho
   porque o `flex-basis` dela e fixo. */
/* OS QUATRO DO MESMO TAMANHO, na horizontal e na vertical — pedido do
   dono em 10/09/2026, depois de ver as duas linhas com alturas diferentes.
   `grid-auto-rows:1fr` iguala as linhas pela mais alta, e o rodape desce
   para o pe de cada quadro. */
/* A MESMA FOLGA DOS OUTROS CARTOES, por fora da grade: dentro dela os
   quadros perdem a margem (quem separa e o `gap`), e sem esta linha o
   cartao seguinte encostava — "bem mais curto", em 10/09/2026. */
.grade-roscas{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
  grid-auto-rows:1fr;gap:18px;align-items:stretch;margin-bottom:18px}
.grade-roscas > .cartao{margin:0;max-width:none;display:flex;
  flex-direction:column}
.grade-roscas > .cartao > p.pequeno:last-child{margin-top:auto}
.grade-roscas .rosca-participacao{flex-wrap:nowrap}
.grade-roscas ul.legenda-rosca{min-width:0;flex:1 1 auto}
@media (max-width:900px){.grade-roscas{grid-template-columns:1fr}}

/* O GRAFICO DO PRODUTO: UM PAINEL POR MEDIDA.
   Foram duas tentativas de empilhar seis medidas num eixo so, e as duas
   ficaram ilegiveis: faturamento em milhares e conversao em unidades nao
   cabem juntos, e normalizando cada linha pelo proprio maximo elas cabem
   mas deixam de significar alguma coisa. Um painel por medida resolve a
   raiz — cada um com a escala escrita nas pontas. */
.paineis-medida{display:grid;
  grid-template-columns:repeat(auto-fit,minmax(330px,1fr));gap:.9rem 1.4rem;
  margin-top:.5rem}
/* A MOLDURA DE CADA PAINEL. Sem ela os cinco pareciam um desenho so, e
   nao dava para saber onde um terminava. O dono, em 10/09/2026: "os
   graficos parecem estar unidos, coloque uma moldura clara nele so pra
   sabermos quais sao os limites". */
.painel-medida{border:1px solid var(--borda);border-radius:8px;
  padding:.55rem .75rem .35rem;background:var(--lateral);min-width:0}
.painel-medida .cabeca{display:flex;align-items:baseline;gap:.4rem;
  font-size:.79rem;color:var(--suave);margin-bottom:.1rem}
/* O NUMERO DO PERIODO, embaixo do titulo — para nao precisar olhar em
   dois lugares. */
.total-medida{margin:0 0 .35rem;font-size:.78rem;color:var(--suave)}
.total-medida b{font-size:1.02rem;color:var(--texto);
  font-variant-numeric:tabular-nums;margin-right:.2rem}
/* AS DATAS EMBAIXO DAS COLUNAS, em HTML: o SVG estica na largura e texto
   dentro dele esticaria junto. */
.datas-medida{position:relative;height:15px;margin:2px 58px 0 0;
  font-size:.62rem;color:var(--suave);font-variant-numeric:tabular-nums}
.datas-medida span{position:absolute;top:0;transform:translateX(-50%);
  white-space:nowrap}

.painel-medida .cabeca b{margin-left:auto;color:var(--texto);
  font-variant-numeric:tabular-nums}
.painel-medida .cabeca .pequeno{flex:0 0 auto}
.painel-medida .cabeca .ponto{width:9px;height:9px;border-radius:2px;
  flex:0 0 9px;align-self:center}
/* O EIXO ESCRITO FORA DO DESENHO. O maior e o menor valor ficavam por
   cima das ultimas barras — o dono viu em 10/09/2026: "os limites min e
   max do grafico estao sobrepondo as barras". Agora ha uma calha a
   direita so para eles, e as datas embaixo respeitam a mesma calha para
   continuar alinhadas com as colunas. */
.tela-medida{position:relative;padding-right:58px}
.legenda-linhas{display:flex;flex-wrap:wrap;gap:.25rem 1rem;
  margin:0 0 .35rem;font-size:.78rem;color:var(--suave)}
.chave-linha{display:inline-flex;align-items:baseline;gap:.3rem}
.chave-linha i{width:10px;height:10px;border-radius:2px;display:inline-block;
  align-self:center}
.chave-linha b{color:var(--texto);font-size:.95rem;
  font-variant-numeric:tabular-nums}
.sem-linha{font-size:.78rem;color:var(--suave);padding:1.6rem 0;
  text-align:center}
.tela-medida svg{width:100%;height:84px;display:block}
.tela-medida .teto,.tela-medida .piso{position:absolute;right:0;
  width:54px;text-align:left;font-size:.66rem;color:var(--suave);
  pointer-events:none;font-variant-numeric:tabular-nums;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis}
.tela-medida .teto{top:0}
.tela-medida .piso{bottom:3px}
.barra-medida{opacity:.75}
/* A barra da margem na cor da regua da conta — as mesmas variaveis do
   texto, para a barra e o numero nunca discordarem. */
/* OS CUSTOS NO FIM DO DASHBOARD, compactos — pedido do dono em
   10/09/2026: "esses custos podem ficar bem compactos no fim da pagina". */
.cartao.compacto{padding:12px 16px}
.cartao.compacto h2{font-size:.95rem;margin:0 0 .4rem}
.cartao.compacto table td{padding:3px 6px;font-size:.84rem}
.cartao.compacto p.pequeno,.cartao.compacto ul.pequeno{font-size:.74rem;
  margin:.4rem 0 0}
/* OS ATALHOS da ficha: cor propria, para se destacar do Voltar. */
a.botao.atalho{background:color-mix(in srgb,var(--acento) 12%,transparent);
  color:var(--acento);border:1px solid color-mix(in srgb,var(--acento) 45%,transparent)}
a.botao.atalho:hover{background:color-mix(in srgb,var(--acento) 22%,transparent)}
/* LINK DISCRETO: leva a algum lugar, mas se le como texto — sem azul e
   sem sublinhado. O hover sublinha, para quem passar o mouse saber. */
a.link-discreto{color:var(--texto);text-decoration:none}
a.link-discreto:hover{text-decoration:underline}
td.codigo-anuncio{white-space:nowrap}
td.codigo-anuncio .pub,td.codigo-anuncio .catalogo{margin-right:4px}
/* O ponto da margem, na linha: o SVG estica, entao o traco nao escala. */
.ponto-margem{vector-effect:non-scaling-stroke}
/* O preco da promocao vigente, na tabela de anuncios da ficha. */
td.preco-promo{font-weight:600}
.barra-mc-azul{fill:var(--otimo)}
.barra-mc-verde{fill:var(--ok)}
.barra-mc-amarelo{fill:var(--aviso)}
.barra-mc-vermelho{fill:var(--erro)}
.eixo-zero{stroke:var(--suave);stroke-width:1;stroke-dasharray:3 3;
  vector-effect:non-scaling-stroke}
.grafico-produto svg{width:100%;height:240px;display:block}
.linha-medida{fill:none;stroke-width:2;vector-effect:non-scaling-stroke}
/* Um ponto so vira PONTO: uma medida que existe num unico dia do periodo
   nao pode sumir da tela por nao formar linha. */
.ponto-medida{vector-effect:non-scaling-stroke}
.eixo-produto{stroke:var(--borda);stroke-width:1;
  vector-effect:non-scaling-stroke}
.marca-dia{font-size:11px;fill:var(--suave)}
.dia-alvo{fill:transparent}
.dia-alvo:hover{fill:color-mix(in srgb,var(--acento) 8%,transparent)}
/* A CAIXA DE VALORES, desenhada por nos: o `title` do navegador demora
   quase um segundo, e a leitura de um grafico tem de ser imediata. */
.grafico-produto{position:relative}
.dica-grafico{position:absolute;z-index:5;pointer-events:none;
  background:var(--lateral);border:1px solid var(--borda);border-radius:8px;
  padding:.45rem .6rem;font-size:.76rem;box-shadow:0 4px 14px rgba(0,0,0,.12);
  min-width:170px;display:flex;flex-direction:column;gap:.1rem}
/* E O `hidden` PRECISA VALER MAIS QUE O `display` ACIMA.
   `[hidden]{display:none}` mora na folha do NAVEGADOR, e qualquer regra
   nossa ganha dela — entao `caixa.hidden = true` escondia coisa nenhuma
   e a caixa ficava presa na tela depois que o mouse saia. Era isso que o
   dono via: "ela nao some depois que tiro o mouse do grafico". A regra
   geral cobre a tela inteira, e nao so este componente. */
[hidden]{display:none !important}
.dica-grafico span{display:flex;justify-content:space-between;gap:.8rem}
.dica-grafico span.so{display:block}
.dica-grafico b{display:block}
/* A rosca do Dashboard ganha a mesma caixa, e o mesmo realce da fatia. */
.rosca{position:relative}
.rosca svg:hover .fatia-rosca{opacity:.45}
.rosca svg .fatia-rosca:hover{opacity:1}
.dica-grafico i{font-style:normal;color:var(--suave)}
/* O GRAFICO DE ADS — todas as medidas num desenho so, como o do Meli. Os
   cartoes em cima sao botoes que ligam e desligam cada serie. */
.grafico-ads{position:relative;margin-top:6px}
.grafico-ads svg{width:100%;height:236px;display:block}
.grafico-ads .grade-ads{stroke:var(--linha);stroke-width:1;
  vector-effect:non-scaling-stroke}
.grafico-ads .linha-ads{fill:none;stroke-width:2.2;stroke-linejoin:round;
  stroke-linecap:round;vector-effect:non-scaling-stroke}
.grafico-ads .dia-alvo{fill:transparent}
.datas-medida.datas-ads{margin-right:0}
.legenda-ads{display:flex;flex-wrap:wrap;gap:4px 16px;font-size:.76rem;
  color:var(--suave);margin:6px 0 2px;justify-content:center}
.legenda-ads i{display:inline-block;width:10px;height:10px;border-radius:2px;
  margin-right:5px;vertical-align:-1px}
/* `leg-linha`, e nao `linha`: `.linha` e a fileira flex do layout, e o
   nome repetido abria um vao de 16px entre o traco e o nome. */
.legenda-ads .leg-linha i{width:14px;height:3px;vertical-align:2px}
/* OITO QUADROS, QUATRO POR FILEIRA: seis e dois deixavam a segunda
   fileira com um buraco do tamanho de quatro. */
.kpis.series{grid-template-columns:repeat(4,minmax(0,1fr))}
@media (max-width:900px){.kpis.series{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* O BLOCO DE ADS DO DASHBOARD: os cinco cartoes a esquerda (tres em cima,
   ROAS e TACOS embaixo) e as duas roscas ao lado. */
.ads-topo{display:grid;grid-template-columns:minmax(0,1.35fr) repeat(2,minmax(0,1fr));
  gap:16px;align-items:stretch;margin-bottom:12px}
.ads-topo .kpis{margin-bottom:12px}
.ads-topo .kpis.tres{grid-template-columns:repeat(3,minmax(0,1fr))}
.ads-topo .kpis.dois{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:0}
.rosca-ads{border:1px solid var(--borda);border-radius:11px;padding:10px 14px;
  background:var(--papel)}
.rosca-ads h3{font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;
  color:var(--suave);font-weight:600;margin:0}
.rosca-ads .rosca-participacao svg{width:112px;height:112px;flex-basis:112px}
.rosca-ads ul.legenda-rosca{min-width:0;flex-basis:100%;font-size:.78rem}
@media (max-width:1180px){.ads-topo{grid-template-columns:1fr 1fr}
  .ads-topo .ads-cartoes{grid-column:1/-1}}
@media (max-width:720px){.ads-topo{grid-template-columns:1fr}}
button.kpi.kpi-serie{font:inherit;text-align:left;cursor:pointer;
  color:var(--texto);background:var(--papel);border:1px solid var(--borda);
  border-top:4px solid var(--cor-serie);padding:10px 14px 12px;
  border-radius:11px;transition:opacity .12s}
button.kpi.kpi-serie:hover{box-shadow:0 2px 10px rgba(0,0,0,.07)}
button.kpi.kpi-serie.desligada{border-top-color:var(--linha);opacity:.55}
button.kpi.kpi-serie:focus-visible{outline:2px solid var(--acento);
  outline-offset:2px}
button.kpi.kpi-serie .nota b{color:var(--texto);font-weight:600}
/* O VALOR NA MESMA ALTURA EM TODOS: com `margin:auto` ele flutuava no
   meio, e o quadro com tres notas o levava para cima dos vizinhos. */
button.kpi.kpi-serie .valor{margin:.3rem 0 .3rem}
button.kpi.kpi-serie .nota{margin-top:0}
.kpi .valor .neg,.kpi .valor.neg{color:var(--erro)}
.kpi .valor.com-parte{display:flex;align-items:center;gap:.35em;
  flex-wrap:wrap}
.kpi .valor .parte{font-weight:650;font-size:calc(1em - 2pt);
  white-space:nowrap}
/* A TABELA DE ANUNCIOS DA FICHA CABE NO QUADRO. Com o piso de 1180px de
   `.rolagem table`, Devolucoes, Cancelados, Visitas e Situacao ficavam
   atras de uma rolagem lateral numa tela de 1400px (visto em 11/09/2026).
   O titulo ja vem cortado em 46 letras; o resto encolhe.
   E OCUPA A LARGURA INTEIRA: so com `min-width:0` ela encolhia ate o
   conteudo e ficava espremida num canto do quadro (dono, 11/09/2026). */
.rolagem table.tabela-anuncios-ficha{min-width:0;width:100%}
/* O TITULO E A 3a COLUNA desde 12/09/2026, quando Conta passou para a
   frente (pedido do dono). Era a 2a, e a regra tinha ficado apontando para
   o Codigo — que e curto e nao precisa de corte nenhum. */
.tabela-anuncios-ficha td:nth-child(3){max-width:300px;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
/* O Meli cobra outro preco agora — ver `preco_venda`. */
.aviso-preco{font-size:.72rem;color:var(--erro);font-weight:600;
  margin-top:2px;cursor:help;white-space:nowrap}
.legenda-medidas{display:flex;gap:.4rem;flex-wrap:wrap;margin:.4rem 0 .2rem}
.chave-medida{font-size:.75rem;padding:.16rem .55rem;border-radius:12px;
  border:1px solid var(--borda);background:transparent;cursor:pointer;
  color:var(--suave);display:inline-flex;align-items:center;gap:.35rem}
.chave-medida::before{content:"";width:9px;height:9px;border-radius:2px;
  background:var(--cor);opacity:.25}
.chave-medida.ligada{color:var(--texto);border-color:var(--cor)}
.chave-medida.ligada::before{opacity:1}

/* O caminho de volta, no topo da ficha: quem chega aqui vem de uma lista
   e sem isto a unica saida era o botao do navegador. */
.acoes.voltar-topo{margin:0 0 .7rem}

/* TRES QUADROS DA MESMA LARGURA. Com `duas` o terceiro quebrava linha e
   ficava com o dobro da largura dos outros dois. */
.curvas.tres{display:grid;grid-template-columns:repeat(3,1fr);
  gap:.9rem;align-items:start}
@media (max-width:1100px){.curvas.tres{grid-template-columns:1fr}}

/* NUNCA VENDEU tem simbolo proprio, e nao um numero grande: parado ha 200
   dias ja girou e parou; nunca ter girado e outro problema. */
.nunca-vendeu{color:var(--erro);font-size:.95rem;line-height:1;
  font-weight:700}

/* O NOME DO PRODUTO NA FICHA, em destaque: e a resposta a "qual produto
   estou olhando", e ela nao pode competir com o resto do cartao. */
.cartao.ficha-topo.destacado{background:var(--cabecalho);
  border-color:var(--cabecalho)}
.cartao.ficha-topo.destacado h2{color:var(--cabecalho-texto)}
.cartao.ficha-topo.destacado .sku-forte{color:var(--cabecalho-texto)}
.cartao.ficha-topo.destacado .chip-canal{background:var(--cabecalho-realce);
  color:var(--cabecalho-texto)}
.cartao.ficha-topo.destacado .tag{background:var(--cabecalho-realce);
  color:var(--cabecalho-texto)}

.ficha-topo .ficha-ident h2{margin:0 0 .3rem}
.ficha-topo .meta{display:flex;align-items:center;gap:.45rem;flex-wrap:wrap}
.ficha-topo .chips{margin-top:.45rem;display:flex;gap:.35rem;flex-wrap:wrap;
  align-items:center}
.ficha-topo .rotulo-chips{font-size:.74rem;opacity:.85}
/* Na faixa escura o rotulo herdava o texto escuro da pagina e sumia —
   "esta muito escuro com esse novo fundo", o dono em 10/09/2026. */
.cartao.ficha-topo.destacado .rotulo-chips{color:var(--cabecalho-texto)}
/* A FOTO quadrada, na altura inteira da faixa escura: a largura sai da
   altura (`aspect-ratio`), e a altura sai do texto ao lado (`stretch`). */
/* A FOTO NA ALTURA DO TEXTO, e nao o contrario. A primeira versao
   esticava a foto pela faixa e a foto, pelo tamanho natural da imagem,
   esticava a faixa de volta — um quadrado de 500 px. O dono, em
   10/09/2026: "a altura do retangulo cinza deve ser apenas a altura dos
   textos + uma pequena margem". Tamanho fixo, do bloco de tres linhas de
   texto: titulo, SKU com as tags, e os canais. */
.cartao.ficha-topo{display:flex;gap:1rem;align-items:flex-start}
.ficha-topo .foto-ficha{flex:none;width:86px;height:86px;border-radius:8px;
  overflow:hidden;background:#fff}
.ficha-topo .foto-ficha img{width:100%;height:100%;object-fit:contain;
  display:block}
.ficha-topo .ficha-ident{flex:1 1 auto;min-width:0}
/* O produto base do kit: foto, nome e SKU, levando a ficha dele. */
.lista-base{display:flex;flex-direction:column;gap:.6rem;margin-top:.4rem}
a.produto-base{display:flex;gap:.8rem;align-items:center;padding:.5rem;
  border:1px solid var(--borda);border-radius:8px;color:var(--texto);
  text-decoration:none}
a.produto-base:hover{border-color:var(--acento)}
a.produto-base img,a.produto-base .semfoto{width:96px;height:96px;
  flex:none;object-fit:contain;border-radius:6px;background:#fff}
a.produto-base .dados-base{display:flex;flex-direction:column;gap:.2rem}
.chip-canal{font-size:.72rem;padding:.1rem .45rem;border-radius:10px;
  background:var(--linha);color:var(--suave)}

/* Os atalhos de quando nenhum SKU foi escolhido: tela vazia com caixa de
   busca obriga a saber o codigo de cor antes de olhar. */
.atalhos-sku{display:grid;
  grid-template-columns:repeat(auto-fill,minmax(215px,1fr));gap:.5rem;
  margin-top:.5rem}
.atalho-sku{display:flex;flex-direction:column;gap:.2rem;padding:.5rem .6rem;
  border:1px solid var(--borda);border-radius:8px;text-decoration:none;
  color:inherit;background:var(--lateral)}
.atalho-sku:hover{border-color:var(--acento)}
.atalho-sku b{font-size:.84rem}
.atalho-sku .tag{align-self:flex-start}

/* O SKU DA LISTA DE ACAO leva aos pedidos que o venderam. Fica com cara
   de link so no hover: sublinhar oito linhas de uma vez viraria ruido. */
.lista-mini a.ident{color:inherit;text-decoration:none;display:flex;
  gap:.35rem;align-items:baseline;min-width:0}
.lista-mini a.ident:hover .sku{color:var(--acento);text-decoration:underline}
/* O REALCE DA LINHA SOB O MOUSE, PARA TODA TABELA — e por ultimo, de
   proposito. A regra vinha antes das zebras (`nth-child(even)`), e regra
   de mesma forca que vem depois ganha: o realce so aparecia nas linhas
   IMPARES. O dono viu isso em 11/09/2026 na Necessidade de compra e em
   Pedidos. Aqui embaixo ela ganha de todas, e vale tambem para a lista de
   pedidos, que nao e <table>. A cor e a do Envios Full, que ele aprovou. */
/* A JANELA DO LOTE: as colunas cabem na caixa em vez de rolar para o lado.
   Com largura fixa as tres dividem o espaco e o texto quebra — o dono
   pediu metade da largura em 11/09/2026, e o efeito e esse. */
.sobreposto-caixa table{width:100%;table-layout:fixed}
.sobreposto-caixa table td,.sobreposto-caixa table th{white-space:normal;
  overflow-wrap:anywhere;font-size:.8rem;padding:5px 7px}
.sobreposto-caixa .rolagem{overflow-x:hidden}
.sobreposto-caixa table.tabela-resultado{min-width:0;width:100%}
.sobreposto-caixa table.tabela-resultado td.num{white-space:nowrap}

table tbody tr:hover > td,
table tbody tr:hover > th,
.pedido:hover{background:var(--linha-foco)}


/* A FICHA EDITAVEL, em colunas (25/09/2026). O dono: "o tipo do campo,
   coloque em uma coluna antes", "as linhas tem que ter todas a mesma
   altura, o mais compacto possivel". Altura fixa por linha, texto longo
   cortado com reticencias e inteiro no passar do mouse. */
/* `.ficha` e' tambem a classe do cartao de anuncio (display:flex).
   Na tabela, isso soltava o cabecalho das colunas. */
table.ficha{display:table;padding-bottom:0;border-bottom:0;margin-bottom:0}
table.ficha.editavel{table-layout:fixed;width:100%}
table.ficha.editavel th{font-size:.7rem;text-transform:uppercase;
  letter-spacing:.04em;opacity:.6;text-align:left;padding:4px 6px}
table.ficha.editavel td{height:32px;padding:2px 6px;vertical-align:middle}
table.ficha.editavel td.campo{white-space:nowrap;overflow:hidden;
  text-overflow:ellipsis;font-size:.88rem}
/* As larguras moram no <colgroup>: com table-layout fixed o navegador le a
   PRIMEIRA linha, e sem isto as colunas saiam repartidas por igual — as
   caixas ficavam com metade do tamanho (dono, 25/09/2026). O valor fica
   com o que sobra, que e' o maior pedaco. */
/* A CAIXA DO VALOR TEM LARGURA FIXA, o dobro da primeira versao (~190
   px): no monitor grande ela esticava ate 1.100 px e ficava ruim de ler
   (dono, 25/09/2026). O quadro tem largura maxima, e o nome do campo fica
   com o que sobra. */
table.ficha.editavel{max-width:1180px}
table.ficha.editavel col.c-valor{width:400px}
table.ficha.editavel col.c-nivel{width:72px}
table.ficha.editavel col.c-tipo{width:122px}
table.ficha.editavel col.c-na{width:40px}
table.ficha.editavel col.c-selo{width:128px}
@media (max-width:900px){
  table.ficha.editavel col.c-valor{width:auto}
  table.ficha.editavel col.c-campo{width:30%}
}
/* O tipo encostado no campo, alinhado a direita. */
table.ficha.editavel .col-tipo{text-align:right;padding-right:4px}
table.ficha.editavel .col-na{text-align:center}
/* MARGEM SEM CUSTO (dono, 25/09/2026): a conta com custo zero continua,
   mas riscada e em vermelho, com a etiqueta vermelha ao lado. */
.tag-sem-custo{display:inline-block;margin-right:5px;padding:0 6px;
  border-radius:4px;background:var(--erro);color:#fff;font-size:.62rem;
  font-weight:700;letter-spacing:.03em;text-transform:uppercase;
  vertical-align:2px;cursor:help;line-height:1.6}
td.mc-sem-custo{background:color-mix(in srgb,var(--erro) 7%,transparent);
  cursor:help}
td.mc-sem-custo .mc-irreal{color:var(--erro);text-decoration:line-through;
  text-decoration-thickness:1.5px;opacity:.85}
/* O QUADRO DO PRECO (25/09/2026). */
.bloco-preco .linha-preco{display:flex;flex-wrap:wrap;align-items:center;
  gap:10px 18px;margin:6px 0}
.bloco-preco label{display:inline-flex;align-items:center;gap:6px;
  font-size:.86rem}
.bloco-preco input{height:30px;padding:2px 8px;border:1px solid var(--borda);
  border-radius:6px;background:var(--fundo);color:var(--texto);
  font-size:.92rem;text-align:right;font-variant-numeric:tabular-nums}
.bloco-preco .caixa-preco{width:120px}
.bloco-preco .caixa-pct{width:64px}
.bloco-preco .aviso-promo-preco{margin:8px 0 4px;padding:8px 11px;border-radius:7px;
  font-size:.84rem;background:rgba(234,179,8,.14);color:var(--texto);
  border:1px solid rgba(202,138,4,.45)}
.mc-no-preco.neg{color:var(--erro)}
/* A PROMOÇÃO ATIVA no quadro do Preço (28/10/2026). */
.bloco-preco .promo-ativa{display:flex;flex-wrap:wrap;align-items:baseline;
  gap:6px 18px;margin:8px 0;padding:8px 11px;border-radius:7px;
  font-size:.88rem;background:var(--realce);border:1px solid var(--borda)}
.bloco-preco .promo-ativa.sem{color:var(--texto-fraco)}
.bloco-preco .promo-ativa .rot{font-size:.72rem;text-transform:uppercase;
  letter-spacing:.04em;color:var(--texto-fraco)}
.bloco-preco .promo-ativa .item-promo{font-variant-numeric:tabular-nums}
.bloco-preco .caixa-meli input{height:auto;width:auto}
.bloco-preco button.sair{padding:6px 12px;font-size:.86rem}
/* O QUADRO DO ATACADO (27/10/2026), ao lado do Preço. */
.bloco-atacado .rolagem-atacado{overflow-x:auto}
.tabela-atacado{width:100%;border-collapse:collapse;font-size:.86rem}
.tabela-atacado th{text-align:left;font-weight:600;font-size:.74rem;
  padding:4px 5px;white-space:nowrap}
.tabela-atacado td{padding:3px 5px;white-space:nowrap}
.tabela-atacado th.num,.tabela-atacado td.num{text-align:right;
  font-variant-numeric:tabular-nums}
.tabela-atacado tr.obs-faixa td{padding:0 5px 6px;white-space:normal;
  font-size:.72rem}
.tabela-atacado .mc-reais{display:inline-block;min-width:58px;
  text-align:right;font-variant-numeric:tabular-nums}
.tabela-atacado .obs.neg{color:var(--erro)}
.bloco-atacado input[type=text]{height:28px;padding:2px 6px;
  border:1px solid var(--borda);border-radius:6px;background:var(--fundo);
  color:var(--texto);font-size:.88rem;text-align:right;
  font-variant-numeric:tabular-nums}
.bloco-atacado input:disabled{opacity:.45}
.bloco-atacado .caixa-qtd{width:44px}
.bloco-atacado .caixa-pct{width:58px}
.bloco-atacado .caixa-preco{width:84px}
.destaque-atacado{margin:4px 0 8px;padding:8px 11px;border-radius:7px;
  font-size:.86rem;line-height:1.5;
  background:color-mix(in srgb,var(--acento) 8%,transparent);
  border:1px solid color-mix(in srgb,var(--acento) 28%,transparent)}
.destaque-atacado.neg{color:var(--erro)}
.gravadas-atacado{margin:0 0 6px}
.aviso-atacado{margin:0 0 8px;padding:8px 11px;border-radius:7px;
  font-size:.86rem;background:rgba(234,179,8,.14);
  border:1px solid rgba(202,138,4,.45)}
/* Quem mais usa os mesmos dados fiscais — o aviso azul da tela do Meli. */
.aviso-irmaos-fiscal{margin:6px 0 10px;padding:7px 11px;border-radius:7px;
  font-size:.82rem;border:1px solid color-mix(in srgb,var(--acento) 30%,transparent);
  background:color-mix(in srgb,var(--acento) 7%,transparent)}
.na-travado{color:var(--suave);opacity:.6;cursor:help}
/* O EAN no quadro escuro do produto e o quadro de custo e compras. */
.ean-ficha{margin-left:12px;font-size:.82rem;opacity:.9}
.cartao.ficha-topo.destacado .ean-ficha,
.cartao.ficha-topo.destacado .ean-ficha b{color:var(--cabecalho-texto)}
.custo-e-compras{display:grid;grid-template-columns:minmax(220px,1fr) 2.2fr;
  gap:18px;align-items:start}
@media (max-width:800px){.custo-e-compras{grid-template-columns:1fr}}
.custo-e-compras .sub-quadro{font-size:.8rem;margin:0 0 6px;color:var(--suave);
  text-transform:uppercase;letter-spacing:.04em}
.custo-e-compras table+.sub-quadro{margin-top:14px}
.custo-e-compras > div:first-child .rolagem{max-height:240px;overflow-y:auto}
/* O que a tela nao deixou entrar pisca em vermelho, com o motivo no mouse. */
.etiquetas-caixa.recusou,.fotos-editaveis figure.recusou{
  outline:2px solid var(--erro);outline-offset:1px}
.fotos-recusadas{color:var(--erro)}
/* A GRAVACAO EM CURSO, em amarelo, acima da ficha e ao lado do botao. */
.gravando-anuncio{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  background:rgba(234,179,8,.16);border:1px solid rgba(202,138,4,.5);
  color:var(--texto);font-size:.88rem;padding:10px 14px}
.gravando-anuncio.pronta{background:color-mix(in srgb,var(--ok) 10%,transparent);
  border-color:color-mix(in srgb,var(--ok) 45%,transparent)}
.gravando-anuncio .girando{width:14px;height:14px;border-radius:50%;
  border:2px solid rgba(202,138,4,.35);border-top-color:#ca8a04;
  animation:gira 0.9s linear infinite;flex:0 0 14px}
@keyframes gira{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion: reduce){.gravando-anuncio .girando{animation:none}}
.aviso-enviando{display:inline-block;margin-left:10px;padding:4px 10px;
  border-radius:6px;font-size:.8rem;color:var(--texto);
  background:rgba(234,179,8,.16);border:1px solid rgba(202,138,4,.5)}
/* O TITULO DE CADA GRUPO DA FICHA, na ordem do Meli (25/09/2026). Some
   sozinho quando um filtro esta ligado (a linha nao tem data-tipo). */
table.ficha.editavel tr.grupo-ficha td{height:auto;padding:12px 6px 4px;
  font-size:.72rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.05em;color:var(--acento);background:var(--papel);
  border-bottom:1px solid var(--borda)}
/* Nivel centralizado, titulo e etiqueta (dono, 25/09/2026). */
table.ficha.editavel .col-nivel{text-align:center}
table.ficha.editavel .selo-col{text-align:right}
/* Numero digitado alinha a direita, como numero. */
.campo-edicao input[data-numero]{text-align:right}
/* O olho: fechado e cinza = o comprador nao ve; aberto e azul = ve. */
.olho-campo{display:inline-flex;vertical-align:-2px;margin-right:6px;
  cursor:help}
.olho.oculto{color:var(--suave);opacity:.65}
.olho.aparece{color:var(--acento)}
.sinal{font-size:.72rem;opacity:.55;margin-left:4px;cursor:help}
.sinal.exige{color:var(--mau,#c0392b);opacity:1;font-weight:700}
.tipo-campo{display:inline-block;font-size:.66rem;opacity:.62;
  border:1px solid var(--borda);border-radius:99px;padding:1px 6px;
  white-space:nowrap}
.nivel-campo{display:inline-block;font-size:.66rem;font-weight:600;
  border-radius:99px;padding:1px 7px;white-space:nowrap;cursor:help}
.nivel-campo.familia{background:rgba(124,58,237,.14);color:#7c3aed}
.nivel-campo.variacao{background:rgba(13,148,136,.14);color:#0d9488}
.campo-edicao{display:flex;align-items:center;gap:6px;min-width:0}
.campo-edicao > input[type=text],.campo-edicao > select{flex:1 1 auto;
  min-width:0;height:26px;padding:2px 7px;border:1px solid var(--borda);
  border-radius:6px;background:var(--fundo);color:var(--texto);
  font-size:.85rem}
.campo-edicao input[disabled],.campo-edicao select[disabled]{opacity:.62;
  cursor:not-allowed}
.com-unidade{display:flex;flex:1 1 auto;gap:4px;min-width:0}
.com-unidade input{flex:1 1 auto;min-width:0;height:26px;padding:2px 7px;
  border:1px solid var(--borda);border-radius:6px;background:var(--fundo);
  color:var(--texto);font-size:.85rem}
.com-unidade select{flex:0 0 auto;height:26px;padding:0 4px;
  border:1px solid var(--borda);border-radius:6px;background:var(--fundo);
  color:var(--texto);font-size:.82rem}
.conta-letras{flex:0 0 auto;font-size:.68rem;opacity:.5;
  font-variant-numeric:tabular-nums}
.conta-letras.estourou{color:var(--mau,#c0392b);opacity:1;font-weight:600}
/* Etiquetas DENTRO da caixa, como no Meli: a virgula fecha o valor. Uma
   linha so; o que nao couber rola para o lado. */
.etiquetas-caixa{flex:1 1 auto;min-width:0;height:26px;display:flex;
  align-items:center;gap:4px;padding:0 4px;overflow-x:auto;
  overflow-y:hidden;border:1px solid var(--borda);border-radius:6px;
  background:var(--fundo);scrollbar-width:thin}
.etiquetas-caixa.desligada{opacity:.62}
.etiquetas-caixa .chip{flex:0 0 auto;display:inline-flex;align-items:center;
  gap:3px;font-size:.76rem;border:1px solid var(--borda);border-radius:99px;
  padding:0 3px 0 8px;background:var(--fundo-suave,rgba(0,0,0,.05));
  white-space:nowrap}
.etiquetas-caixa .chip button{border:0;background:none;color:inherit;
  cursor:pointer;font-size:.85rem;line-height:1;padding:0 3px;opacity:.6}
.etiquetas-caixa .chip button:hover{opacity:1}
.etiquetas-caixa .entrada{flex:1 0 90px;min-width:90px;border:0;
  outline:0;background:none;color:var(--texto);font-size:.85rem;height:24px}
tr.apagando .campo-edicao{opacity:.35}
/* FOTOS EDITAVEIS (25/09/2026): arrastar para reordenar, x para remover. */
.fotos-editaveis figure{position:relative}
.fotos-editaveis figure[draggable=true]{cursor:grab}
.fotos-editaveis figure.arrastando{opacity:.35}
.fotos-editaveis figure.removida{opacity:.35}
.fotos-editaveis figure.removida img{filter:grayscale(1)}
.fotos-editaveis figure.nova{outline:2px dashed var(--acento)}
.remover-foto{position:absolute;top:6px;right:6px;width:26px;height:26px;
  padding:0;display:flex;align-items:center;justify-content:center;
  border-radius:50%;border:0;background:rgba(0,0,0,.62);color:#fff;
  cursor:pointer}
.remover-foto:hover{background:var(--erro,#c0392b)}
.fotos-editaveis figure.removida .remover-foto{background:var(--acento)}
.acoes-ficha button:disabled{opacity:.45;cursor:not-allowed}
.remover-foto:disabled{display:none}
.adicionar-fotos{cursor:pointer}
.adicionar-fotos.desligado{opacity:.5;pointer-events:none}
/* Fotos e descricao na MESMA largura da ficha e dos dados fiscais (dono,
   25/09/2026) — as fotos quebram em mais linhas, e tudo alinha. */
.form-fotos,.form-descricao{max-width:1180px}
.form-descricao textarea{width:100%;box-sizing:border-box;padding:10px;
  border:1px solid var(--borda);border-radius:8px;background:var(--fundo);
  color:var(--texto);font:inherit;font-size:.9rem;line-height:1.5;
  resize:vertical}
.aviso-descricao{margin:0 0 8px}

.acoes-ficha{display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  margin-top:12px;padding-top:10px;border-top:1px solid var(--borda)}

/* LISTA DE SKUs E MC (20/10/2026): seleção, Produto e SKU parados à
   esquerda — com os meses e os preços a tabela rola de lado, e sem o nome
   fixo não se sabe de quem é o número. Títulos parados em cima pela
   `.rolagem`; o resto do desenho (meses com Full e Depósito, divisões) é o
   do Envios Full, pela classe `compras`. */
table.skus-mc td.marca-col,table.skus-mc th.marca-col{
  position:sticky;left:0;z-index:2;width:34px;min-width:34px;
  max-width:34px;background:var(--papel);text-align:center}
table.skus-mc td.produto-col,table.skus-mc th.produto-col{
  position:sticky;left:34px;z-index:2;width:250px;min-width:250px;
  max-width:250px;background:var(--papel)}
table.skus-mc td.sku-col,table.skus-mc th.sku-col{
  position:sticky;left:284px;z-index:2;width:165px;min-width:165px;
  max-width:165px;background:var(--papel);box-shadow:2px 0 0 var(--borda)}
table.skus-mc thead th.marca-col,table.skus-mc thead th.produto-col,
table.skus-mc thead th.sku-col{z-index:4;background:var(--cabecalho)}
table.skus-mc tbody tr:nth-child(even) td.marca-col,
table.skus-mc tbody tr:nth-child(even) td.produto-col,
table.skus-mc tbody tr:nth-child(even) td.sku-col{background:var(--zebra)}
table.skus-mc tbody tr:hover td,table.skus-mc tbody tr:hover td.marca-col,
table.skus-mc tbody tr:hover td.produto-col,
table.skus-mc tbody tr:hover td.sku-col{background:var(--linha-foco)}
table.skus-mc td.produto-col .titulo{display:block;overflow:hidden;
  text-overflow:ellipsis;white-space:nowrap}
table.skus-mc td.status-col{white-space:nowrap}
table.skus-mc .st{display:block;font-size:.68rem;line-height:1.45;
  font-weight:600}
table.skus-mc .st::before{content:"";display:inline-block;width:7px;
  height:7px;border-radius:50%;margin-right:5px;vertical-align:middle;
  background:currentColor}
table.skus-mc .st-ok{color:var(--ok)}
table.skus-mc .st-pausa{color:var(--aviso)}
table.skus-mc .st-revisao{color:var(--aviso)}
table.skus-mc .st-ruim{color:var(--erro)}
table.skus-mc input.alvo-sku{width:64px}
table.skus-mc input.alvo-sku.invalido{border-color:var(--erro)}
table.skus-mc input.alvo-sku.salvo{border-color:var(--acento)}
table.skus-mc td.acoes-sku{white-space:nowrap}
table.skus-mc td.acoes-sku button{margin-left:3px}
.nota-lote{margin:10px 0 0}
/* A PÁGINA NA LARGURA DA TABELA (dono, 20/10/2026: "se diminuiu o quadro
   debaixo, os de cima devem acompanhar"). Nunca mais larga que a tela. */
.pagina-justa{width:fit-content;max-width:100%;min-width:min(100%,900px)}
.acoes-lote.em-linha{margin:0;display:flex;flex-wrap:wrap;gap:8px;
  align-items:center}
.bloco-relatorio + .bloco-relatorio{margin-top:18px;padding-top:14px;
  border-top:1px solid var(--borda)}
/* JUSTA (dono, 20/10/2026: "tem muito espaço entre as colunas"): a tabela
   tem a largura do que mostra, e não a da tela. */
table.skus-mc{width:max-content}
.rolagem table.compras.skus-mc{min-width:0}
table.skus-mc td.id-col{white-space:nowrap}
table.skus-mc .id-linha{display:flex;align-items:center;gap:4px;
  font-size:.74rem}
table.skus-mc .id-linha a{color:var(--texto);text-decoration:none}
table.skus-mc .id-linha a:hover{color:var(--acento);text-decoration:underline}
table.skus-mc td.id-col .st{display:inline-block;margin-top:2px}
/* UM GRUPO POR SKU: o primeiro anúncio de cada SKU abre com uma linha
   mais marcada. */
table.skus-mc tbody tr.novo-sku td{border-top:2px solid var(--borda)}
/* O ALERTA DA LINHA: anúncio sem custo (ou com outro problema na margem).
   Vermelho e piscando devagar, para chamar o olho; a frase vem no passar do
   mouse. Quem pediu menos movimento no sistema vê ele parado. */
.alerta-linha{flex:0 0 auto;display:inline-flex;align-items:center;
  justify-content:center;width:16px;height:16px;border-radius:50%;
  background:var(--erro);color:#fff;font-weight:800;font-size:.7rem;
  cursor:help;animation:alerta-pisca 1.2s ease-in-out infinite}
@keyframes alerta-pisca{50%{opacity:.35}}
@media (prefers-reduced-motion:reduce){.alerta-linha{animation:none}}
