/* ===========================================================================
   LABORATÓRIO VISUAL — cópia LEGO

   ISTO AQUI DIZIA QUE A FOLHA "não existe na página original". Não é mais
   verdade, e não era em 2026-09-08: o `index.html` desta pasta carrega ela na
   linha 28, e é dela que saem a paleta cappuccino, a tipografia da página
   inteira e o desenho do botão da oferta. Ela nasceu como cópia de laboratório
   e virou a folha que manda. Comentário que descreve um passado vira armadilha
   para quem lê procurando o que pode mexer.
   =========================================================================== */

/* AS FONTES SAIRAM DAQUI EM 2026-09-08, e o motivo esta medido.

   Aqui havia um `@import` do Google Fonts. Duas coisas erradas com ele.

   1. A PASTA DEIXAVA DE SER AUTOCONTIDA. Medido abrindo o `index.html` pelo
      arquivo, com a internet desligada: ZERO regras de `@font-face` carregadas,
      e "Prata" e "Rozha One" medindo a mesma largura da fonte de reserva —
      quer dizer, nenhuma das duas apareceu. A pagina que o Arthur vende
      dependia de um servidor de terceiro para ter a propria letra.

   2. `@import` NO TOPO DE UMA FOLHA E O PIOR LUGAR PARA UMA FONTE. O navegador
      precisa baixar os 149 kB desta folha inteira, so entao descobrir o
      `@import`, e so entao ir buscar o CSS do Google e, depois dele, os
      arquivos de letra. Sao tres viagens em fila. Um `<link>` no `index.html`
      comeca junto com o resto.

   As quatro familias foram para `vendor/fontes/`, com a licenca OFL junto, e
   entram pelo `<link>` do `index.html`. Quicksand e Comic Neue estavam no
   endereco antigo e NAO foram junto: medido na rede, a pagina nunca pediu
   nenhuma das duas. */

:root{
  --fundo:#0b1020 !important;
  --texto:#f5f6ff !important;
  --destaque:#c8ff66 !important;
  --quente:#ff7db6 !important;
  --suave:#b7bdd3 !important;
  --papel:#151c31 !important;
  --borda:#303a5b !important;
  --borda-forte:#6977a4 !important;
  --lab-vidro:rgba(23,31,56,.58);
  --lab-linha:rgba(225,231,255,.18);
  --lab-sombra:0 22px 70px -34px rgba(0,0,0,.88);
}

body{
  background:
    radial-gradient(circle at 8% 6%, rgba(130,92,255,.28), transparent 28rem),
    radial-gradient(circle at 96% 25%, rgba(79,221,183,.18), transparent 26rem),
    radial-gradient(circle at 48% 80%, rgba(255,125,182,.13), transparent 34rem),
    var(--fundo);
  font-family:"Manrope",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
}

/* Bolhas de cor muito grandes, atrás da página. Não têm imagem e não ocupam
   espaço no documento; deixam o vidro pegar cores diferentes ao rolar. */
body::before,
body::after{
  content:"";
  position:fixed;
  z-index:0;
  width:44vmax;
  aspect-ratio:1;
  border-radius:50%;
  filter:blur(10px);
  pointer-events:none;
}
body::before{
  top:-24vmax;
  left:-17vmax;
  background:radial-gradient(circle, rgba(173,126,255,.31), rgba(173,126,255,0) 68%);
}
body::after{
  right:-22vmax;
  bottom:-27vmax;
  background:radial-gradient(circle, rgba(90,243,194,.2), rgba(90,243,194,0) 68%);
}

#rolagem-externa{ position:relative; z-index:1; }

/* O desenho antigo vira uma textura leve de traço, não o centro visual. */
#fundo{ opacity:.18; mix-blend-mode:screen; }
#fundo path,
#fundo circle,
#fundo ellipse{ stroke:#b7a0ff; }
#fundoCamadaPerto path,
#fundoCamadaPerto circle{ stroke:#8ff0c6; }

h1,h2,h3{
  font-family:"DM Serif Display",Georgia,serif;
  font-weight:400;
  letter-spacing:-.035em;
}
h1{ line-height:.99; }
h2{ line-height:1.02; }

section{ padding-block:clamp(42px,7.5cqw,94px); }
.env{ max-width:1120px; }

/* ------------------------------------------------------------ abertura -- */
#topo{
  min-height:100svh;
  align-items:center;
  padding-block:clamp(42px,8cqw,90px);
  /* O bloco interno pode descer no Mover. A seção deixa de recortá-lo e o
     espaço abaixo impede que ele invada o começo da receita. Como é margem,
     a centralização visual do bloco não muda. */
  overflow:visible;
  margin-bottom:80px;
}
#topo .env{
  isolation:isolate;
  overflow:hidden;
  max-width:1080px;
  /* A FOLGA DE BAIXO É IGUAL À DAS LATERAIS, e isso já foi zero uma vez.

     Em 2026-09-05 de manhã o Arthur pediu o cartão sem buraco embaixo do
     subtítulo (*"redimensiona para que não fique esse buraco"* — eram 109px no
     computador e 53 no celular). O `padding-bottom` foi a zero e o
     `encolherPeDoTopo` passou a fechar a altura rente ao conteúdo.

     Os dois juntos foram longe demais: a folga do pé virou os 10px da moldura,
     o quadrado do subtítulo passou a encostar nela e, como ele é greige — a
     MESMA cor da listra de 5px que corre por fora do cartão —, o olho lê como
     se o quadrado atravessasse a moldura. O Arthur mandou a foto com o
     defeito.

     O que fecha o buraco continua sendo o `encolherPeDoTopo`, e ele soma este
     padding na conta da folga: o cartão termina no pé do subtítulo MAIS este
     respiro, nunca na altura natural do desenho. Por isso os 109px não voltam
     — o que volta é só a folga que as laterais já tinham. */
  padding:clamp(32px,7cqw,84px);
  border:1px solid var(--lab-linha);
  border-radius:clamp(28px,5cqw,52px);
  background:
    linear-gradient(118deg, rgba(255,255,255,.12), rgba(255,255,255,.025) 34%, rgba(136,107,255,.14)),
    var(--lab-vidro);
  -webkit-backdrop-filter:blur(28px) saturate(135%);
  backdrop-filter:blur(28px) saturate(135%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.2), var(--lab-sombra);
}
#topo .env::before{ content:none; }
#topo .env::after{
  content:"";
  position:absolute;
  z-index:-1;
  width:min(58cqw,680px);
  aspect-ratio:1;
  right:-18cqw;
  top:50%;
  translate:0 -50%;
  border:1px solid rgba(218,211,255,.42);
  border-radius:50%;
  box-shadow:
    0 0 0 24px rgba(180,160,255,.045),
    0 0 0 62px rgba(180,160,255,.03),
    0 0 90px rgba(160,130,255,.2);
}

/* ---------------------------------------------------- ponte para receita --
   A receita foi deslocada para baixo pelo editor, deixando um respiro entre
   os dois vidros. O gesto ocupa esse respiro de forma absoluta: nao empurra o
   topo, nao mexe na receita e nao altera nenhuma posicao salva. */
#previadodia{ position:relative; }
.arraste-receita-posicao{
  position:absolute;
  z-index:4;
  top:clamp(18px,4svh,38px);
  left:50%;
  translate:-50% 0;
}
/* BOTAO HORIZONTAL DE APERTAR — 2026-09-05, pedido do Arthur. Era um cartao
   vertical de 260px de largura fixa, com trilho, bolinha e setas dentro.

   A largura agora sai do texto (`width:auto`), que e o que faz o botao ficar
   deitado em vez de em pe: com largura fixa e o rotulo curto, sobrava caixa
   vazia dos dois lados. O `max-width` continua para o texto longo nao encostar
   na borda da tela no celular. */
.arraste-receita{
  position:relative;
  isolation:isolate;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  width:auto;
  max-width:calc(100vw - 32px);
  min-width:0;
  padding:16px 30px;
  border:1px solid rgba(255,255,192,.34);
  border-radius:999px;
  color:var(--texto);
  background:linear-gradient(145deg,rgba(255,255,192,.11),rgba(37,57,60,.5));
  -webkit-backdrop-filter:blur(14px) saturate(125%);
  backdrop-filter:blur(14px) saturate(125%);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.17),0 18px 42px -28px rgba(9,18,24,.88);
  font:600 10px/1.15 ui-monospace,Consolas,monospace;
  letter-spacing:.18em;
  text-transform:uppercase;
  cursor:pointer;
  /* `manipulation` no lugar de `none`: o `none` existia para o arrasto poder
     comer o gesto de rolagem. Sem arrasto, ele so atrapalharia — a pessoa nao
     conseguiria rolar a pagina com o dedo em cima do botao. */
  touch-action:manipulation;
  user-select:none;
  -webkit-user-select:none;
  transition:transform .16s ease-out, box-shadow .16s ease-out;
}
/* O afundar ao apertar e o que diz "isto e um botao" sem escrever nada. */
.arraste-receita:active{
  transform:translateY(2px) scale(.985);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.17),0 10px 24px -22px rgba(9,18,24,.9);
}

/* ---- A BORDA DE METAL LÍQUIDO --------------------------------------------
   Pedido do Arthur em 2026-09-05, com o componente `liquid-metal-button` do
   Joly UI (MIT) na mão: *"pega esse efeito de borda de caixa e aplica na caixa
   de aperte o botão"*.

   O TRUQUE DO ORIGINAL, e é só isso: o metal preenche o botão INTEIRO, e um
   miolo opaco recuado 2px cobre o centro. O que sobra à vista é uma faixa de
   2px de metal correndo em volta — não existe "borda animada", existe um
   fundo animado quase todo tapado.

   Aqui o miolo é o `::before`, que ficou com o gradiente que era do botão. O
   botão em si passa a ser transparente **só quando o metal monta**
   (`[data-metal]`): sem WebGL, sem módulo, ou com movimento reduzido, nada
   disso acontece e o botão continua exatamente como era. */
.arraste-receita__metal{
  position:absolute;
  inset:0;
  z-index:0;
  border-radius:inherit;
  overflow:hidden;
  pointer-events:none;
}
.arraste-receita[data-metal]{
  background:transparent;
  border-color:transparent;
  -webkit-backdrop-filter:none;
          backdrop-filter:none;
}
.arraste-receita[data-metal]::before{
  content:"";
  position:absolute;
  inset:2px;
  z-index:1;
  border-radius:inherit;
  background:linear-gradient(145deg,rgba(255,255,192,.11),rgba(37,57,60,.5));
  -webkit-backdrop-filter:blur(14px) saturate(125%);
          backdrop-filter:blur(14px) saturate(125%);
  pointer-events:none;
}
/* O rótulo por cima das duas camadas. */
.arraste-receita__rotulo{ position:relative; z-index:2; }
.arraste-receita:focus-visible{
  outline:2px solid var(--destaque);
  outline-offset:5px;
}
.arraste-receita__rotulo,
.arraste-receita__destino{
  display:block;
  width:100%;
  max-width:100%;
  text-align:center;
  white-space:normal;
  overflow-wrap:anywhere;
  line-height:1.35;
}
/* Pedido do Arthur: essa frase e leitura de instrucao, nao rotulo curto tipo
   ".olho" — usa a fonte do corpo da pagina em vez do mono/maiusculo herdado de
   ".arraste-receita", que destoava do resto do texto.

   A FONTE DO CORPO MUDOU DEBAIXO DESTA REGRA, e por isso ela voltou em
   2026-09-08. Em 2026-09-04 a Manrope entrou aqui porque a Manrope ERA o corpo
   da pagina. A paleta Cappuccino trocou o corpo para a Prata (linha 1122) e
   esta linha ficou para tras: sobrou a unica frase sem-serifa numa pagina toda
   serifada, e foi o que o Arthur viu — *"a fonte desse primeiro botao ela ta
   padrao, quero que fique condizente com a pagina"*. O pedido dele de 04/09 e
   o de hoje sao o mesmo pedido; o que mudou foi a resposta.

   A Prata so tem um peso (400), entao o `font-weight` desce de 600 para 400 —
   pedir 600 de uma fonte sem esse peso faz o navegador engrossar o traco na
   mao, e serifada engordada artificialmente fica borrada. O tamanho sobe de 16
   para 17px porque a Prata tem altura-x menor que a Manrope, e o pouco de
   espacamento e para a CAIXA ALTA respirar — em maiuscula, letra colada le como
   bloco. */
.arraste-receita__rotulo{
  color:var(--texto);
  font-family:"Prata",Georgia,serif;
  text-transform:none;
  letter-spacing:.02em;
  font-weight:400;
  /* O TAMANHO CAIU PARA CABER, e o numero saiu de medir. O rotulo tem
     `max-width:178,6px` gravado pelo Arthur no editor, e o editor tambem guarda
     um multiplicador de letra de 1,209 para ele. A Prata e mais larga que a
     Manrope na mesma altura: a 17px de base a frase pedia ~200px e quebrava em
     duas linhas — justamente o que ele mandou nao acontecer em 2026-09-05.
     Medido no navegador: "APERTE O BOTAO" em Prata mede 165px a 17px, entao a
     conta que fecha e 14,5 x 1,209 = 17,5px, que pede ~170px. Sobram 8px.

     Mexer no `posicoes.json` resolveria tambem, e foi descartado: aquele arquivo
     e o trabalho do Arthur, e a largura dali ele escolheu com o dedo.

     O tamanho vive so aqui: os 10px da regra ".arraste-receita" continuam sendo
     a base dos "em" da alavanca abaixo. */
  font-size:14.5px;
  line-height:1.35;
  /* A FRASE CABE EM UMA LINHA, e é o botão que cresce para isso — pedido do
     Arthur em 2026-09-05: *"aumente de forma que a frase fique somente em uma
     linha"*. "APERTE O BOTÃO" quebrava em duas.

     Quem quebrava não era o `max-width` que ele gravou pelo editor (178px no
     celular, contra 158 que a frase pede): era o `width:100%` da regra acima,
     que resolve contra o miolo do botão. Com ele, o rótulo pedia 145px e o
     botão nascia do tamanho de um rótulo que já tinha quebrado — pescoço que
     aperta a si mesmo. `max-content` faz o rótulo pedir a linha inteira, e o
     botão, sendo `inline-flex` de largura automática, acompanha.

     NÃO É `white-space:nowrap`: com `max-content` o texto continua podendo
     quebrar quando não couber mesmo (frase mais longa, letra maior no editor,
     tela estreita). Com `nowrap` ele vazaria para fora da borda. */
  width:max-content;
}
.arraste-receita__destino{ color:var(--destaque); font-size:9px; opacity:.9; }
/* O trilho, a bolinha e as duas setas saíram daqui em 2026-09-05, junto com as
   `@keyframes arrastePonto` e `arrasteSetas` que as moviam: com o botão de
   apertar não há mais nada a demonstrar com desenho. */
@media (max-width:620px){
  .arraste-receita-posicao{ top:10px; }
  .arraste-receita{ padding:15px 24px; }
}
#tituloTopo{
  max-width:18ch;
  font-size:clamp(48px,6.8cqw,76px);
  text-shadow:0 12px 44px rgba(0,0,0,.38);
}
.topo__sub{
  max-width:58ch;
  margin-top:28px;
  margin-bottom:26px;
  padding:18px 20px;
  border:1px solid rgba(226,232,255,.17);
  border-radius:18px;
  background:rgba(10,15,31,.32);
  color:#dde2f5;
  -webkit-backdrop-filter:blur(14px);
  backdrop-filter:blur(14px);
}
.topo__sub::before{
  background:linear-gradient(112deg,transparent 31%,rgba(255,255,255,.16) 48%,transparent 65%);
}
/* O destaque veio da página original em vermelho. Na cópia, ele acompanha a
   paleta rosa clara e continua legível sobre o vidro. */
#subTopo,
#subTopo b{ color:#edf0ff !important; }
#subTopo b{ color:#ff9bc8 !important; }
.topo__acoes{ gap:12px; }
.btn{
  border-radius:14px;
  background:linear-gradient(135deg, #caff68, #8aefc8);
  color:#0b1020;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.52), 0 16px 36px -18px rgba(121,245,190,.7);
}
.btn--vazio{
  border-color:rgba(231,237,255,.3);
  background:rgba(17,24,45,.38);
  color:var(--texto);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.1);
}
.btn--vazio .btn__brilho{ display:none; }

.topo__arte{
  right:-6%;
  width:min(600px,56cqw);
  opacity:.28;
}
.topo__arte path,
.topo__arte circle,
.topo__arte ellipse{ stroke:#d8cbff; }
#poeira i{ background:#a9ff8a; }

/* ----------------------------------------------------------- seções -- */
.olho{
  width:fit-content;
  /* A PÍLULA SE CENTRALIZA SOZINHA. O `estilo.css` já mandava `width:100%` com
     `justify-content:center`, mas o `fit-content` desta linha vence por vir
     depois — e aí a pílula, sendo bloco, encostava na esquerda. O Arthur
     compensava isso arrastando cada rótulo à mão, de 57 a 145px, e o
     deslocamento em pixel não acompanha mudança de largura nem de texto: era
     por isso que eles saíam do centro. Com `margin-inline:auto` o centro deixa
     de depender de arrasto. Os sete deslocamentos foram zerados no
     `posicoes.json` em 2026-09-05. */
  margin-inline:auto;
  padding:7px 11px;
  border:1px solid rgba(200,255,102,.25);
  border-radius:999px;
  color:var(--destaque);
  background:rgba(200,255,102,.06);
  font-family:"Manrope",sans-serif;
  /* 11px, E NÃO OS 10px DE ANTES. Medido na página montada em 2026-09-08: os
     rótulos saíam a 10px no computador e a 9px no celular, em CAIXA ALTA e com
     `letter-spacing` de .15em. Letra funcional abaixo de 11px falha em tela
     densa e em tela pequena, e caixa alta com espacejamento piora — some a
     forma da palavra, que é por onde se lê rápido. 11px é o piso, não um gosto.
     A pílula cresce 2px de altura; o `padding` continua o mesmo. */
  font-size:11px;
  letter-spacing:.15em;
}
.olho::before,
.olho::after{ display:none; }
.sub{ color:var(--suave); }

#problema .env,
#trocas .env,
#livre .env,
#umdia .env,
#rigor .env,
#entrega .env,
#oferta .env{
  padding:clamp(24px,4.8cqw,56px);
  border:1px solid rgba(225,231,255,.13);
  border-radius:28px;
  background:linear-gradient(140deg, rgba(255,255,255,.075), rgba(255,255,255,.018) 54%, rgba(157,137,255,.08));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.1), var(--lab-sombra);
}
#refeicoes .env,
#entrega .env,
#perguntas .env{ padding-inline:clamp(22px,4.8cqw,56px); }

#problemaTexto,
.balao,
.troca,
.dia,
.moderado{
  border-color:rgba(225,231,255,.15);
  background:linear-gradient(140deg, rgba(255,255,255,.085), rgba(255,255,255,.026) 55%, rgba(118,255,205,.055));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.14), 0 20px 42px -28px rgba(0,0,0,.9);
}
.balao{ border-left-color:var(--quente); }
.balao::before{ background:var(--quente); }

.grade{ gap:16px; }
.card{
  min-height:100%;
  border-color:rgba(224,232,255,.15);
  border-radius:20px;
  background:linear-gradient(150deg, rgba(30,41,74,.95), rgba(16,23,43,.92));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.09), 0 18px 38px -28px rgba(0,0,0,.85);
}
.card__hora,
.card__kcal,
.bloco__kcal,
.dia__et{ color:var(--destaque); }
.card__kcal{ background:rgba(200,255,102,.1); }
.card__n{ color:#d9d4ff; opacity:.05; }

#livre{ background:linear-gradient(180deg, transparent, rgba(255,125,182,.075), transparent); }
#livre .olho{ border-color:rgba(255,125,182,.34); background:rgba(255,125,182,.08); color:#ffb0d2; }
.livre__item{ border-color:rgba(255,125,182,.35); background:rgba(255,125,182,.08); color:#ffd4e5; }
.moderado{ border-color:rgba(255,125,182,.34); }
.moderado__t{ color:#ffb0d2; }

.fonte,
.ent{
  border:1px solid rgba(225,231,255,.13);
  background:linear-gradient(150deg, rgba(28,38,69,.88), rgba(17,24,45,.9));
}
.entrega{ gap:10px; padding:10px; border-color:rgba(225,231,255,.12); background:rgba(225,231,255,.05); }
.ent{ border-radius:14px; }
.ent__i{ background:rgba(200,255,102,.1); color:var(--destaque); }

.faq{ border-top:0; display:grid; gap:10px; }
.faq__i{
  border:1px solid rgba(225,231,255,.13);
  border-radius:16px;
  background:rgba(18,26,49,.62);
  overflow:hidden;
}
.faq__b{
  /* O texto pode ser movido no editor. Esta faixa direita fica reservada
     para o sinal de mais, para ele nunca encostar nas frases já deslocadas. */
  position:relative;
  justify-content:center;
  gap:0;
  padding:19px 89px 19px 20px;
}
.faq__r p{ padding:0 20px 22px; }
.faq__mais{
  position:absolute;
  right:20px;
  top:50%;
  transform:translateY(-50%);
}
.faq__mais::before,
.faq__mais::after{ background:var(--destaque); }

#oferta .env{
  border-color:rgba(200,255,102,.26);
  background:
    radial-gradient(circle at 50% 0, rgba(200,255,102,.13), transparent 38%),
    linear-gradient(140deg, rgba(255,255,255,.1), rgba(255,255,255,.024) 60%, rgba(106,255,199,.08));
}
.preco__por{ color:var(--destaque); text-shadow:0 0 58px rgba(200,255,102,.28); }
.selo{ border-color:rgba(225,231,255,.19); background:rgba(225,231,255,.045); }

footer{ border-top-color:rgba(225,231,255,.12); background:rgba(8,12,25,.42); }

@media (max-width: 620px){
  #topo{ min-height:auto; padding-block:28px 42px; margin-bottom:145px; }
  /* O zero de baixo vem do mesmo pedido da regra de cima. Ele precisa ser
     repetido aqui porque esta linha reescreve o `padding` inteiro. */
  /* O pé repete os 23px das laterais, pelo motivo escrito na regra de cima. */
  #topo .env{ padding:30px 23px 23px; border-radius:26px; }
  #topo .env::after{ width:82cqw; right:-38cqw; top:67%; }
  #tituloTopo{ max-width:none; font-size:clamp(34px,9.4cqw,38px); line-height:1.04; }
  .topo__sub{ margin-top:22px; padding:15px 16px; }
  .topo__acoes{ flex-direction:column; }
  .topo__acoes .btn{ width:100%; }
  .topo__arte{ width:122cqw; right:-48cqw; bottom:-16%; opacity:.14; }
  #problema .env,
  #trocas .env,
  #livre .env,
  #umdia .env,
  #rigor .env,
  #oferta .env{ padding:24px 19px; border-radius:22px; }
  #refeicoes .env,
  #entrega .env,
  #perguntas .env{ padding-inline:20px; }
  /* ERA 9px. Piso de 11px para letra funcional — o mesmo motivo escrito na
     regra base, e no celular ele pesa mais, não menos. */
  .olho{ font-size:11px; }
}

@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{ scroll-behavior:auto !important; }
}

/* -------------------------------------------------------- leitura no sol --
   Azul acinzentado no fundo, cartões petróleo e vermelho concentrado no
   botão: uma paleta viva sem comprometer o contraste do texto. */
:root{
  --fundo:#48586f !important;
  --texto:#ffffc0 !important;
  --destaque:#ffffc0 !important;
  --quente:#d62e2e !important;
  --suave:#d6c496 !important;
  --papel:#283d3e !important;
  --borda:#48586f !important;
  --borda-forte:#d6c496 !important;
  --lab-vidro:rgba(40,61,62,.56);
  --lab-linha:rgba(255,255,192,.38);
  --lab-sombra:0 18px 42px -28px rgba(9,18,24,.7);
}
body{
  background:
    radial-gradient(circle at 8% 6%, rgba(214,196,150,.17), transparent 28rem),
    radial-gradient(circle at 96% 25%, rgba(214,46,46,.13), transparent 26rem),
    var(--fundo);
}
body::before,
body::after{ opacity:.36; filter:blur(14px); }
body::before{ background:radial-gradient(circle, rgba(214,196,150,.26), rgba(214,196,150,0) 68%); }
body::after{ background:radial-gradient(circle, rgba(214,46,46,.19), rgba(214,46,46,0) 68%); }
#fundo{ opacity:.54; mix-blend-mode:normal; }
#fundo path,#fundo circle,#fundo ellipse{ stroke:#d6c496; }
#fundoCamadaPerto path,#fundoCamadaPerto circle{ stroke:#d62e2e; }
#topo .env,
#problema .env,
#trocas .env,
#livre .env,
#umdia .env,
#rigor .env,
#entrega .env,
#oferta .env{
  /* A moldura nunca encosta na borda física do telefone. Sem esta folga, o
     raio dos cantos parecia sair para fora da página em telas estreitas. */
  width:calc(100% - clamp(28px,6cqw,72px));
  margin-inline:auto;
  background:linear-gradient(135deg, rgba(255,255,192,.14), rgba(40,61,62,.56) 44%, rgba(214,46,46,.09));
  border-color:rgba(255,255,192,.4);
  -webkit-backdrop-filter:blur(18px) saturate(130%);
  backdrop-filter:blur(18px) saturate(130%);
  box-shadow:inset 0 1px 0 rgba(255,255,192,.26), inset 0 -1px 0 rgba(9,18,24,.26), var(--lab-sombra);
}
#entrega .env{ overflow:hidden; }
#topo .env::after{ border-color:rgba(255,255,192,.38); box-shadow:0 0 0 24px rgba(255,255,192,.05),0 0 0 62px rgba(214,46,46,.04),0 0 90px rgba(214,196,150,.16); }
#tituloTopo{ text-shadow:none; }
.topo__sub,
#problemaTexto,
.balao,
.troca,
.dia,
.moderado{
  background:linear-gradient(135deg, rgba(255,255,192,.12), rgba(40,61,62,.48) 52%, rgba(214,46,46,.065));
  border-color:rgba(255,255,192,.34);
  color:var(--texto);
  -webkit-backdrop-filter:blur(14px) saturate(125%);
  backdrop-filter:blur(14px) saturate(125%);
  box-shadow:inset 0 1px 0 rgba(255,255,192,.2), 0 12px 28px -20px rgba(9,18,24,.68);
}
/* A receita e longa. Este vidro mais firme preserva a leitura durante a
   rolagem sem voltar a falhar no telefone. */
#topoPrevia .dia{
  isolation:isolate;
  background:linear-gradient(135deg,rgba(255,255,192,.13),rgba(40,61,62,.72) 52%,rgba(214,46,46,.08));
  -webkit-backdrop-filter:blur(6px) saturate(118%);
  backdrop-filter:blur(6px) saturate(118%);
  border-radius:18px;
}
/* O último prato fecha o card. Sem uma borda interna sobrando e com um pouco
   de respiro, ele termina igual aos demais blocos de vidro da página. */
#topoPrevia .dia .bloco:last-child{
  border-bottom:0;
  padding-bottom:clamp(26px,5.6cqw,34px);
}
#subTopo,#subTopo b{ color:var(--texto) !important; }
#subTopo b{ color:#d62e2e !important; }
.btn{ background:linear-gradient(135deg,rgba(214,46,46,.94),rgba(185,31,39,.7)); color:#ffffc0; border-color:rgba(255,255,192,.38); -webkit-backdrop-filter:blur(12px) saturate(135%); backdrop-filter:blur(12px) saturate(135%); box-shadow:inset 0 1px 0 rgba(255,255,192,.28),0 12px 28px -17px rgba(214,46,46,.42); }
.btn--vazio{ border-color:rgba(255,255,192,.38); background:rgba(40,61,62,.4); color:var(--texto); box-shadow:inset 0 1px 0 rgba(255,255,192,.16); }
.olho{ border-color:rgba(255,255,192,.36); background:rgba(40,61,62,.32); color:var(--destaque); -webkit-backdrop-filter:blur(10px) saturate(125%); backdrop-filter:blur(10px) saturate(125%); }
/* O titulo e o paragrafo do rigor entram nesta mesma lista a pedido do Arthur
   (2026-08-31): ele quis o vidro dos cartoes "Tabela TACO" e "USDA FoodData"
   tambem neles. Entrar na lista, e nao copiar a receita para outro lugar,
   garante que os quatro continuem iguais quando um dia a cor mudar. A caixa
   em si — recuo, borda e canto — fica no estilo.css, junto da .fonte. */
.card,
.fonte,
.ent,
#rigorTitulo,
#rigorTexto,
.faq__i{ border-color:rgba(255,255,192,.3); background:linear-gradient(145deg, rgba(255,255,192,.11), rgba(40,61,62,.43) 58%, rgba(214,46,46,.055)); -webkit-backdrop-filter:blur(12px) saturate(120%); backdrop-filter:blur(12px) saturate(120%); box-shadow:inset 0 1px 0 rgba(255,255,192,.17),0 10px 24px -18px rgba(9,18,24,.62); }
.card__n{ color:#ffffc0; opacity:.06; }
.card__kcal{ background:rgba(255,255,192,.1); }
#livre{ background:linear-gradient(180deg,transparent,rgba(214,46,46,.08),transparent); }
#livre .olho{ border-color:rgba(214,196,150,.34); background:rgba(214,196,150,.1); color:#ffffc0; }
.livre__item{ border-color:rgba(255,255,192,.34); background:rgba(40,61,62,.38); color:#ffffc0; -webkit-backdrop-filter:blur(10px); backdrop-filter:blur(10px); }
.moderado__t{ color:#ffffc0; }
.entrega{ border-color:rgba(255,255,192,.28); background:rgba(255,255,192,.08); }
.ent__i{ background:rgba(255,255,192,.1); color:var(--destaque); }
#oferta .env{ border-color:rgba(214,196,150,.44); }
.preco__por{ color:var(--destaque); text-shadow:none; }
.selo{ border-color:rgba(255,255,192,.3); background:rgba(40,61,62,.35); -webkit-backdrop-filter:blur(10px); backdrop-filter:blur(10px); }
footer{ border-top-color:rgba(255,255,192,.24); background:rgba(40,61,62,.42); -webkit-backdrop-filter:blur(14px) saturate(120%); backdrop-filter:blur(14px) saturate(120%); }




/* ===========================================================================
   PALETA DO DOMINGO LIVRE — quarta versao, 2026-08-31

     #F6D877  ouro claro, a superficie do vidro e dos baloes
     #C8AD59  ouro medio, a caixa do modo moderado
     #99823B  ouro escuro, as bordas
     #6B571E  bronze, a sombra e o fio de baixo
     #3C2C00  quase preto, TODO o texto

   Mesma arrumacao da versao anterior, que foi a que funcionou: superficie
   clara e quase opaca, texto no escuro. O escuro NAO volta para o fundo — ja
   se tentou duas vezes, e vidro escuro amarelado sobre a pagina azul da
   verde-oliva em qualquer opacidade. O que muda aqui e so a familia: era
   creme quase branco, agora e ouro de verdade.

   Tudo comeca em #livre. Nenhuma regra alcanca outra secao da pagina.
   =========================================================================== */

/* brilho de fundo da secao */
#livre{
  background:linear-gradient(180deg,transparent,rgba(246,216,119,.13),transparent);
}

/* O vidro da secao. Desfoque ligado: o fundo ainda passa de leve nas bordas. */
#livre .env{
  border-color:rgba(60,44,0,.38);
  background:linear-gradient(135deg,rgba(255,225,49,.60),rgba(255,225,49,.52) 52%,rgba(255,225,49,.56));
  box-shadow:
    inset 0 1px 0 rgba(255,244,205,.85),
    inset 0 -1px 0 rgba(60,44,0,.22),
    0 18px 42px -28px rgba(60,44,0,.8);
}

/* rotulo "RESTRICOES": selo escuro sobre o ouro */
#livre .olho{
  border-color:rgba(60,44,0,.6);
  background:rgba(60,44,0,.93);
  color:#F6D877;
}

/* titulo e paragrafo */
#livre h2{ color:#3C2C00; }
#livre .sub{ color:#3C2C00; }

/* os pratos do domingo */
#livre .livre__item{
  border-color:rgba(107,87,30,.6);
  background:linear-gradient(145deg,rgba(255,240,190,.95),rgba(246,216,119,.9));
  color:#3C2C00;
  box-shadow:inset 0 1px 0 rgba(255,247,214,.9), 0 10px 24px -18px rgba(60,44,0,.7);
}

/* a caixa do MODO MODERADO, um degrau mais escura que o cartao */
#livre .moderado{
  background:linear-gradient(145deg,rgba(200,173,89,.97),rgba(153,130,59,.94));
  border-color:rgba(60,44,0,.5);
  color:#3C2C00;
}
/* A faixa do titulo com o risco embaixo, igual ao topo do cartao da receita
   ("DIA 1 · 2.051 kcal no dia"). La a regra e `.dia__topo`: um pouco de cor
   de fundo na faixa e um fio de 1px embaixo, de ponta a ponta do cartao.

   Aqui o titulo estava no meio do recuo da caixa, entao o fio pararia antes
   da borda. As margens negativas puxam a faixa ate o limite da caixa, e o
   recuo volta por dentro dela — assim o fio atravessa inteiro, como no
   original. O `overflow:hidden` que a caixa ja tinha e o que impede a faixa
   de vazar pelos cantos arredondados. */
#livre .moderado{ --recuo-caixa:clamp(22px,4.4cqw,32px); }
#livre .moderado__t{
  color:#3C2C00;
  margin:calc(-1 * var(--recuo-caixa)) calc(-1 * var(--recuo-caixa)) 20px;
  padding:16px var(--recuo-caixa);
  border-bottom:1px solid rgba(60,44,0,.42);
  background:rgba(60,44,0,.07);
}
#livre .moderado p{ color:#3C2C00; }

/* O vao entre a lista de pratos e a caixa "MAS ISSO NAO AFETA A DIETA?".

   O que se ve na tela e a soma de DUAS coisas, e essa e a pegadinha:
   esta margem, mais os 12px de arrasto que o #moderado tem guardado no
   posicoes.json (aplicado como top:12px, que desce o bloco sem empurrar
   ninguem). Eram 28 + 12 = 40px. Ficaram 8 + 12 = 20px, a pedido do
   Arthur em 2026-09-02.

   Mexido so aqui. O arrasto e escolha dele e fica onde esta — quem zerar
   o 12px do posicoes.json some com o vao quase todo. */
#livre .moderado{
  margin-top:20px;
  /* O arrasto de 12px guardado para o #moderado no posicoes.json (top:12px)
     descia a caixa sem empurrar ninguem: o vao de cima crescia 12px e a folga
     do rodape do vidro encolhia os mesmos 12px — 36px em cima contra 27px
     embaixo, medido. Anulado aqui para o quadrado dourado voltar a fechar
     igual dos dois lados. O valor continua gravado no posicoes.json: apagar
     esta linha devolve o deslocamento. Mesma solucao, e pelo mesmo motivo,
     que os .livre__item ja usam mais abaixo neste arquivo. */
  top:0 !important;
}


/* ===========================================================================
   BLOCO ÚNICO COM DIVISÓRIA — pedido do Arthur em 2026-09-01

   Três lugares, a mesma ideia: em vez de várias caixas soltas, uma caixa só
   com uma linha separando o que está dentro.

   1. A prévia do dia já era uma caixa só, e `.bloco` já trazia
      `border-bottom:1px solid var(--borda)`. A linha não aparecia porque
      `--borda` é #48586f — exatamente a cor de fundo da página. Aqui ela
      ganha cor própria.
   2. A entrega ("O que cai no seu e-mail") era seis cartões de vidro. Vira
      uma lista dentro de um cartão, um item por linha.
   3. Os pratos do domingo livre eram pastilhas espalhadas. Viram a mesma
      lista, na paleta dourada da seção.
   =========================================================================== */

/* 1. PRÉVIA DO DIA — a linha entre as refeições */
#topoPrevia .dia .bloco{
  border-bottom:1px solid rgba(255,255,192,.24);
}

/* 2. ENTREGA — seis cartões viram um só
   A grade tinha `gap:2px` sobre um fundo da cor da borda: era esse vão que
   desenhava a separação. Com um cartão só, a separação passa a ser a linha
   de cima de cada item, e o vão fecha. */
#entGrade{
  grid-template-columns:1fr;
  gap:0;
  border:1px solid rgba(255,255,192,.3);
  border-radius:16px;
  overflow:hidden;
  background:linear-gradient(145deg, rgba(255,255,192,.11), rgba(40,61,62,.43) 58%, rgba(214,46,46,.055));
  -webkit-backdrop-filter:blur(12px) saturate(120%);
  backdrop-filter:blur(12px) saturate(120%);
  box-shadow:inset 0 1px 0 rgba(255,255,192,.17), 0 10px 24px -18px rgba(9,18,24,.62);
}
#entGrade .ent{
  background:none;
  border:0;
  border-top:1px solid rgba(255,255,192,.22);
  border-radius:0;
  box-shadow:none;
  -webkit-backdrop-filter:none;
  backdrop-filter:none;
}
#entGrade .ent:first-child{ border-top:0; }

/* Imagens colocadas pelo editor. A largura escolhida fica numa variável para
   continuar cabendo no telefone mesmo quando foi ajustada numa tela maior. */
.imagem-adicionada{
  display:block;
  width:min(var(--imagem-largura,280px),calc(100% - 24px));
  max-width:100%;
  height:auto;
  margin:24px auto;
  border-radius:18px;
  object-fit:contain;
  box-shadow:0 18px 42px -24px rgba(9,18,24,.78);
}

/* Imagem colocada dentro de uma resposta do FAQ: participa da altura da
   resposta aberta e fica inteiramente cortada pelo overflow quando fechada. */
.faq__r > .imagem-adicionada{
  width:min(var(--imagem-largura,280px),calc(100% - 40px));
  margin:0 auto 22px;
}

/* 3. DOMINGO LIVRE — os pratos viram uma lista só
   O `overflow:hidden` é o que segura os cantos arredondados: sem ele, o
   primeiro e o último item passam por cima da curva da borda. */
#livre #livreItens{
  display:grid;
  grid-template-columns:1fr;
  gap:0;
  border:1px solid rgba(60,44,0,.6);
  border-radius:16px;
  overflow:hidden;
  background:linear-gradient(145deg,rgba(255,240,190,.95),rgba(246,216,119,.9));
  box-shadow:inset 0 1px 0 rgba(255,247,214,.9), 0 10px 24px -18px rgba(60,44,0,.7);
  cursor:auto;
}
#livre #livreItens .livre__item{
  background:none;
  border:0;
  border-top:1px solid rgba(60,44,0,.32);
  border-radius:0;
  box-shadow:none;
  -webkit-backdrop-filter:none;
  backdrop-filter:none;
  color:#3C2C00;
  text-align:center;
  padding:15px 20px;
}
#livre #livreItens .livre__item:first-child{ border-top:0; }

/* Os pratos tinham arrasto salvo do tempo em que eram pastilhas espalhadas
   (`.livre__item[0]` a `[5]` no posicoes.json, de -181px a +328px). Dentro de
   uma lista com `overflow:hidden`, esse deslocamento empurrava a "Feijoada
   completa" para fora da caixa e ela sumia da tela sem nada acusar. Numa
   lista, posição é ordem: o deslocamento perde o sentido e é anulado aqui.
   Os valores continuam gravados no posicoes.json — tirar estas duas linhas
   devolve tudo. */
#livre #livreItens .livre__item{ top:auto !important; left:auto !important;
  /* o "Milk-shake" tinha `max-width:296px` salvo do editor: dentro da lista
     isso encurtava a linha divisoria dele. Largura, numa lista, e a da caixa. */
  max-width:none !important; width:auto !important; }

/* A prévia estava cortada no computador, e não era de hoje: o `posicoes.json`
   guarda `largura: 396` para o `#diaCaixa` (redimensionado no celular), mas o
   `estilo.css` manda o corpo virar DUAS colunas quando a *página* passa de
   860px. Duas colunas de ~350px dentro de uma caixa de 396px com
   `overflow:hidden` = a segunda coluna some. No celular nada disso acontece,
   por isso passou despercebido.

   Aqui quem decide o número de colunas passa a ser a largura da PRÓPRIA
   caixa, não a da página. Estreita, uma coluna; larga, as duas de volta. */
#topoPrevia .dia{ container-type:inline-size; container-name:receita; }
@container receita (max-width:719px){
  #topoPrevia .dia__corpo{ grid-template-columns:1fr; }
}


/* ===========================================================================
   O CARTÃO "37 REFEIÇÕES PREMIUM" NA PALETA DOURADA — pedido do Arthur em
   2026-09-02

   Ele é o único item da entrega que fala do domingo livre, e agora usa a
   mesma superfície dos pratos daquela seção: o ouro claro #F6D877 com texto
   #3C2C00. Os valores abaixo são cópia literal de `#livre #livreItens`, para
   os dois combinarem de verdade — mudou lá, mudar aqui.

   O selo do número é o contrário: fundo quase preto com o número em ouro,
   igual ao rótulo "DIA com refeição LIVRE". O amarelo-claro que ele tinha
   sumiria por cima do dourado.

   Por que `:has()` e não `:nth-child(4)`: o Arthur pôs uma imagem dentro da
   lista da entrega, então o quarto filho de `#entGrade` é a imagem, não o
   cartão. O `data-campo` vem do índice no `conteudo.js` e não se confunde.
   Trocar este item de lugar na lista muda o número dentro dos colchetes.
   =========================================================================== */
#entGrade .ent:has([data-campo="entrega.itens[3].titulo"]){
  background:linear-gradient(145deg,#FFFDD0 0%,#F9E076 62%,#FFC107 100%);
  border-top-color:rgba(137,81,41,.52);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.82),0 10px 24px -18px rgba(137,81,41,.72);
}
#entGrade .ent:has([data-campo="entrega.itens[3].titulo"]) .ent__t,
#entGrade .ent:has([data-campo="entrega.itens[3].titulo"]) .ent__x{
  color:#895129;
}
#entGrade .ent:has([data-campo="entrega.itens[3].titulo"]) .ent__i{
  background:#895129;
  color:#FFC107;
}
/* O item seguinte encosta neste: a linha clara que os separa fica pálida
   sobre o ouro. Ela passa a ser escura, como as divisórias da lista dourada. */
#entGrade .ent:has([data-campo="entrega.itens[3].titulo"]) + .ent{
  border-top-color:rgba(137,81,41,.52);
}

/* O cartão dourado encostando no vidro — pedido do Arthur em 2026-09-02

   Ele estava com as quatro pontas quadradas, boiando numa moldura escura de
   10px: o `#entGrade` tem `padding:10px`, e o cartão parava ali. Como este é o
   último item que aparece, o pé dele tinha de acompanhar a curva do vidro.

   Tirar o padding do `#entGrade` resolveria — e mexeria nos cartões 01 e 02,
   que o Arthur mandou não tocar. Então o cartão é que se estica: 10px de
   margem negativa nos dois lados e embaixo, e os mesmos 10px devolvidos ao
   recuo interno, para o texto continuar exatamente onde estava. A borda de
   1px do vidro fica de fora de propósito: é o fio que desenha o contorno.

   O raio de baixo é 15px, e não 16: o `border-radius` do vidro é medido por
   fora, e por dentro da borda de 1px sobra 15. Os cantos de cima ficam retos,
   porque ali encosta o cartão de cima. */
#entGrade .ent:has([data-campo="entrega.itens[3].titulo"]){
  margin:0 -10px -10px;
  padding:22px 30px 32px;
  border-radius:0 0 15px 15px;
}

/* ================= O PREÇO EM DOIS TEMPOS — pedido do Arthur em 2026-09-03

   Os dois preços dividiam o mesmo instante: na linha do tempo da oferta o
   "R$ 97,00" entrava em -=0.4 e o "R$ 47,00" logo atrás, em -=0.25, então
   quem olhava via os dois surgirem juntos. O Arthur pediu o contrário — o 97
   chega sozinho e grande, é riscado, vira poeira e some, e só
   depois o 47 aparece no lugar de destaque.

   O risco não pode ser o `text-decoration:line-through`: não há como animar o
   traço crescendo. Aqui ele vira um `::after` de 2px que cresce da esquerda
   para a direita, comandado pela variável `--risco`, que o GSAP move de 0 a 1.

   A classe `preco--doisTempos` é posta pelo JavaScript. Sem JavaScript nada
   disto vale, e o risco nativo do CSS continua onde sempre esteve. */
.preco--doisTempos .preco__de{
  text-decoration:none;
  position:relative;
}
.preco--doisTempos .preco__de::after{
  content:"";
  position:absolute;
  left:-1px; right:-1px;
  top:52%;
  height:2px;
  border-radius:2px;
  background:currentColor;
  transform:scaleX(var(--risco,0));
  transform-origin:left center;
  pointer-events:none;
}

/* A poeira do 97 — pedido do Arthur em 2026-09-03: ele não recua para o canto,
   ele deixa de existir. O texto é copiado para um canvas do tamanho da caixa
   do preço, com folga em volta para os grãos terem para onde ir, e o elemento
   de verdade some do fluxo no mesmo quadro — é isso que deixa o 47 se
   centralizar sozinho. O canvas é absoluto, então precisa da âncora aqui. */
.preco--doisTempos{ position:relative; }
.preco__poeira{
  position:absolute;
  pointer-events:none;
  z-index:0;              /* a poeira passa POR TRAS do 47 que esta chegando */
}

/* O balão “E QUAL O PREÇO?” nasce de grãos antes da entrada do 97. O canvas
   fica preso ao cartão; no fim, uma onda revela o balão real por baixo dele. */
#oferta .env{ position:relative; }
.rotulo-preco__poeira{
  position:absolute;
  pointer-events:none;
  z-index:3;
}
#oferta .olho.rotulo-preco--formando{
  position:relative;
  z-index:4;
  -webkit-mask-image:linear-gradient(90deg,
    #000 calc(var(--revela-rotulo,-20%) - 15%),
    transparent calc(var(--revela-rotulo,-20%) + 7%));
          mask-image:linear-gradient(90deg,
    #000 calc(var(--revela-rotulo,-20%) - 15%),
    transparent calc(var(--revela-rotulo,-20%) + 7%));
}
/* A revelacao do 47 — pedido do Arthur em 2026-09-03: a troca por fade seco
   ficava dura. Agora o numero se solidifica da esquerda para a direita, na
   mesma direcao em que os graos vieram, e a poeira apaga atras dessa onda.
   Quem move a variavel e o proprio desenho da poeira, entao as duas coisas
   nao podem sair de sincronia. Em 100% a mascara ja revela tudo; o JavaScript
   ainda a remove no fim, para nao deixar uma camada de composicao de graca. */
.preco--doisTempos .preco__por{
  position:relative; z-index:1;
  -webkit-mask-image:linear-gradient(90deg,
    #000 calc(var(--revela,100%) - 15%),
    transparent calc(var(--revela,100%) + 7%));
          mask-image:linear-gradient(90deg,
    #000 calc(var(--revela,100%) - 15%),
    transparent calc(var(--revela,100%) + 7%));
}

/* ================= PALETA DA OFERTA — pedido do Arthur em 2026-09-03

   A paleta vale **somente dentro do cartão do preço**. Ela entra redefinindo as
   variáveis dentro de `#oferta .env`: tudo ali dentro herda as cores novas, e
   nada fora do cartão é tocado. Apagar este bloco devolve o cartão à paleta da
   página.

   TESTE COM A PALETA DE CINZAS — e o aviso que vem junto.

     #FFFFFF  branco       fundo do cartão
     #848484  cinza médio  todos os textos, o preço e o botão
     #A2A2A2  cinza        bordas
     #C1C1C1  cinza claro  o 97 riscado
     #E0E0E0  quase branco fundo dos selos

   **NENHUM PAR DESTA PALETA CHEGA AO MÍNIMO DE CONTRASTE PARA TEXTO.** Medidos
   os 25 pares possíveis: o melhor é o mais escuro sobre o mais claro, e dá
   **3,74:1**. O mínimo da régua para texto normal é 4,50:1. Só texto grande
   passa, e por pouco — o preço, e nada mais.

   O que reprova, com o número:
     textos de apoio  #848484 sobre branco   3,74:1   precisa de 4,50
     o 97 riscado     #C1C1C1 sobre branco   1,80:1
     texto do botão   branco sobre #848484   3,74:1   precisa de 4,50

   A paleta não tem nenhum tom escuro, e é disso que ela precisa: um sexto tom
   perto do preto resolveria tudo de uma vez, sem mexer nos cinco. O arranjo
   abaixo é o melhor possível usando só os cinco. */

#oferta .env{
  --destaque:#848484;
  --texto:#848484;
  --suave:#848484;
  --quente:#848484;
  --borda:#A2A2A2;

  background:#FFFFFF;
  border-color:#A2A2A2;
  color:#848484;
}

/* ===== O BRANCO QUE ABRAÇA O CONTEÚDO — pedido do Arthur em 2026-09-05 =====

   O cartão nascia do tamanho da coluna, com um vazio grande dentro enquanto a
   cena do preço ainda não tinha tocado. Agora o branco começa em volta do
   número e vai abrindo conforme cada peça aparece.

   Quem cresce é o FUNDO, não a caixa: o `.env` mantém o tamanho de layout de
   sempre, e o branco, a borda e o vidro passam para um `::before` que recebe
   quatro recuos por variável. Mexer na largura do próprio `.env` reposicionaria
   os dois canvases de poeira, que são filhos dele e ficam presos em px, e ainda
   mudaria onde cada texto quebra de linha.

   Sem JavaScript os quatro recuos ficam em zero e o desenho é o mesmo de antes.

   **`z-index:-1` não serve aqui, e foi medido:** com ele o branco desaparecia
   por completo no começo da cena — ia parar atrás do fundo da própria página.
   O jeito que funciona é o fundo em `z-index:0` e o conteúdo em `z-index:1`,
   já que `::before` posicionado seria pintado ACIMA de texto não posicionado. */
#oferta .env{
  background:transparent;
  border-color:transparent;
  box-shadow:none;
  -webkit-backdrop-filter:none;
          backdrop-filter:none;
}
#oferta .env > *{ position:relative; z-index:1; }
#oferta .env::before{
  content:"";
  position:absolute;
  z-index:0;
  top:var(--fundo-t,0px);
  right:var(--fundo-r,0px);
  bottom:var(--fundo-b,0px);
  left:var(--fundo-l,0px);
  background:#FFFFFF;
  border:1px solid #A2A2A2;
  border-radius:22px;
  -webkit-backdrop-filter:blur(18px) saturate(1.3);
          backdrop-filter:blur(18px) saturate(1.3);
  box-shadow:inset 0 1px 0 rgba(255,255,192,.26), inset 0 -1px 0 rgba(9,18,24,.26);
  /* A escrita dos recuos acontece uma vez por quadro, e só quando muda mais de
     um pixel. A transição curta costura os degraus sem atrasar a abertura. */
  transition:top .14s linear, right .14s linear, bottom .14s linear, left .14s linear;
}
@media (prefers-reduced-motion:reduce){
  #oferta .env::before{ transition:none; }
}

/* o preço é o único texto grande o bastante para o 3,74:1 servir */
/* o preco e o titulo da oferta ganham a mesma cor quente da paleta original.
   Sobre o branco da o 3,05:1, que passa para esses textos grandes. */
#oferta .preco__por{ color:#FF4000; text-shadow:none; }

/* o 97, que vai embora, no tom mais claro que ainda se enxerga */
#oferta .preco__de{ color:#C1C1C1; }

#oferta .preco__par,
/* A frase da garantia com a letra e a cor do "R$ 47,00" — pedido do Arthur em
   2026-09-04. Mesmo caminho dos selos e da parcela. */
#oferta .garantia{
  color:#FF4000;
  font-family:"Rozha One",Georgia,serif;
  font-weight:400;
}
#oferta #ofTitulo{ color:#FF4000; }

#oferta .olho{
  color:#848484;
  border-color:#A2A2A2;
  background:#E0E0E0;
}
/* A letra dos selos e a mesma do "R$ 47,00" — pedido do Arthur em 2026-09-04.
   A cor tambem: #FF4000, o mesmo laranja do 47 e da frase da pizza.
   A borda e o fundo da capsula ficam como estavam: o Arthur disse que vai
   escolher a cor dela depois. */
#oferta .selo{
  color:#FF4000;
  border-color:#C1C1C1;
  background:#E0E0E0;
  font-family:"Rozha One",Georgia,serif;
  font-weight:400;
  font-size:17px;
  letter-spacing:normal;
}

/* botão azul liso com letra rosa nítida, a pedido do Arthur em 2026-09-03.
   Azul chapado: sem o brilho branco por dentro, sem a faixa de luz que cruza
   e sem a auréola colorida em volta — é isso que deixava o cinza com cara de
   metal na foto dele.
   O azul é escuro de propósito. Rosa forte sobre ele dá 4,0:1, o que passa
   para o tamanho deste botão (18,5px em negrito). Sobre azul claro, o mesmo
   rosa reprovaria. */
#oferta #ofBtn{
  background:#0B2A75;
  color:#FF3D9A;
  border-color:#0B2A75;
  box-shadow:none;
}
#oferta #ofBtn .btn__txt{ color:#FF3D9A; }

/* A letra do botao da oferta e a mesma do "R$ 47,00" — pedido do Arthur em
   2026-09-04. A Rozha One so existe em peso 400: deixar o 800 que o .btn pede
   faria o navegador engordar o desenho por conta propria (negrito falso), que
   borra a serifa. Por isso o peso volta para 400 aqui.
   O tamanho subiu de 18,5px para 24px pela regra de contraste: o rosa sobre
   este azul da 4,0:1, que so passa como "texto grande" — e texto grande e
   18,5px EM NEGRITO ou 24px em peso normal. Tirar o negrito sem subir o
   tamanho reprovaria o botao. */
#oferta #ofBtn{
  font-family:"Rozha One",Georgia,serif;
  font-weight:400;
  font-size:24px;
  letter-spacing:normal;
}
#oferta #ofBtn .btn__brilho{ display:none; }

/* ===================== A LETRA DA PAGINA — 2026-09-04 =====================
   O Arthur mandou a foto da "The Seasons". Ela e paga (Elena Genova / My
   Creative Land) e a licenca de web e cobrada por visita, entao NAO entrou:
   pagina que ele vende nao pode carregar fonte sem licenca. A Prata e a mais
   proxima com licenca livre (Open Font License, no Google Fonts) — serifada
   de contraste alto, mesmo ar de revista.

   DUAS EXCECOES CAIRAM EM 2026-09-08, e as duas por pedido dele, com foto:
   a secao dourada (#livre) e o cartao dourado das refeicoes premium, na
   entrega — *"nessa primeira e segunda imagem eu preciso que voce altere as
   fontes para que fique igual da pagina"*. As duas eram Manrope no corpo e
   DM Serif Display no titulo, e agora seguem a Prata como o resto.

   A que ficou de fora e so uma: o cartao do preco (#oferta). Ele nao foi
   citado nas fotos, e as regras da Rozha One que vem antes mandam nele. */
body{ font-family:"Prata",Georgia,serif; }
h1,h2,h3{ font-family:"Prata",Georgia,serif; }

/* fora da troca: o cartao do preco inteiro. As regras da Rozha One que vem
   antes continuam valendo por serem mais especificas. */
#oferta{ font-family:"Manrope",ui-sans-serif,system-ui,sans-serif; }
#oferta h1,#oferta h2,#oferta h3{ font-family:"DM Serif Display",Georgia,serif; }

/* ===================== ZOOM NA IMAGEM — 2026-09-04 =======================
   A tela cheia que abre quando se toca numa imagem posta pelo editor.
   Nasce fora do fluxo e so aparece quando ganha a classe --visivel: assim ela
   nao ocupa espaco nem entra na conta de altura de nenhuma secao. */
.zoom-fundo{
  position:fixed;
  inset:0;
  z-index:9998;              /* abaixo do botao "Editar", que fica em 9999 */
  display:none;
  align-items:center;
  justify-content:center;
  padding:20px;
  background:rgba(9,14,24,.86);
  -webkit-backdrop-filter:blur(6px);
          backdrop-filter:blur(6px);
  cursor:zoom-out;
  overscroll-behavior:contain;
}
.zoom-fundo--visivel{ display:flex; }
.zoom-figura{
  max-width:100%;
  /* Altura em `dvh` e nao em `vh`: no telefone a barra de endereco entra e sai
     durante a rolagem, e o `vh` continua contando a tela inteira — a imagem
     ficava com o pe cortado. */
  max-height:92vh;   /* reserva, para navegador que nao conhece dvh */
  max-height:92dvh;
  width:auto;
  height:auto;
  border-radius:14px;
  box-shadow:0 30px 80px -30px rgba(0,0,0,.9);
  cursor:default;
}

/* ===== A ABERTURA DA RESPOSTA DO FAQ — 2026-09-04 =======================
   O Arthur reclamou que abrir a pergunta ficou arrastado depois que o bloco
   mudou de lugar. Duas coisas custam caro numa animacao de altura, e as duas
   estao aqui dentro:

   `contain:layout paint` diz ao navegador que nada dentro desta caixa muda o
   desenho de fora dela. Sem isso, cada quadro da abertura obriga a refazer a
   conta da secao inteira — e esta resposta carrega uma imagem de 1533px de
   altura no arquivo.

   `will-change:height` avisa que a altura vai mudar, para o navegador se
   preparar antes de o primeiro quadro chegar. Fica so no `.faq__i[aberto]`
   e nao na regra geral: `will-change` ligado o tempo todo em sete caixas
   consome memoria de video sem devolver nada. */
.faq__r{
  contain:layout paint;
}
.faq__i[aberto] > .faq__r{
  will-change:height;
}

/* ================= A RÉGUA DE EXPOSIÇÃO — 2026-09-04 ====================
   Refeita no mecanismo do aparelho, depois que o Arthur mandou analisar o
   exemplo do Motion e a comparação mostrou que a primeira versão estava
   invertida. O que o exemplo faz, medido lá:

   - 41 traços iguais, e NENHUM apaga com o progresso. A fila é sempre a mesma.
   - Todos ficam cortados ao meio (`clip-path`), menos o que está no centro:
     esse aparece inteiro. Não é um traço maior — é o mesmo traço com o corte
     aberto.
   - O marcador NÃO anda. Quem desliza é a fila, por trás dele.
   - As pontas somem por máscara, e é isso que dá a impressão de fila sem fim:
     some quem CHEGA na ponta, não quem já passou.
   - Marca mais visível de cinco em cinco, como numa fita métrica.

   Aqui a fila é vertical, então o corte é na largura em vez de na altura. */
.regua{
  position:fixed;
  right:3px;
  /* `svh` e não `%`: no telefone a barra de endereço entra e sai durante a
     rolagem, a altura da janela muda, e `50%` de uma altura que muda leva a
     régua junto. Medido: de 900px para 760px de janela, ela andava 70px.
     O `svh` é a altura da janela pequena — a que tem a barra visível — e não
     muda quando a barra some. */
  top:50%;          /* reserva, para navegador que não conhece svh */
  top:50svh;
  transform:translateY(-50%);
  z-index:60;                 /* acima da página, abaixo da barra de edição */
  /* Não recebe toque: é um aviso de leitura, não um controle. Encostar nela no
     telefone não pode roubar a rolagem nem o clique de nada que esteja atrás. */
  pointer-events:none;
  opacity:0;
  transition:opacity 420ms ease;
}
.regua--visivel{ opacity:1; }

/* A janela por onde se vê a fila. É ela que tem altura fixa e a máscara; a fila
   lá dentro é bem mais comprida e passa por aqui. */
.regua__janela{
  position:relative;
  height:190px;
  width:16px;
  overflow:hidden;
  -webkit-mask-image:linear-gradient(180deg,transparent 0,#000 20%,#000 80%,transparent 100%);
          mask-image:linear-gradient(180deg,transparent 0,#000 20%,#000 80%,transparent 100%);
}
/* A fila inteira. Move por `transform`, que o navegador anima sem refazer a
   conta do desenho. */
.regua__fila{
  position:absolute;
  top:0;
  right:0;
  display:flex;
  flex-direction:column;
  align-items:flex-end;
  /* O vao entre os tracos e o que faz a fila ser mais comprida que a janela.
     Sem ele os tracos ficam colados: 90 tracos de 2px dao 180px, menos que os
     190px da janela, e a regua praticamente nao desliza. Com 6px, a fila mede
     720px e corre 530px ao longo da pagina. */
  gap:6px;
  will-change:transform;
}
.regua__t{
  width:16px;
  height:2px;
  border-radius:1px;
  background:var(--texto,#ffffc0);
  opacity:.3;
  /* Cortado ao meio: sobra a metade da direita, encostada na borda. O traço do
     centro tem esse corte aberto e é o único que aparece inteiro. */
  -webkit-clip-path:inset(0 0 0 50%);
          clip-path:inset(0 0 0 50%);
  transition:clip-path 180ms ease, opacity 180ms ease, background-color 180ms ease;
}
/* De cinco em cinco, a marca graduada — mais visível que as do meio. */
.regua__t--marca{ opacity:.6; }
/* O traço que está passando pelo centro. */
.regua__t--agora{
  opacity:1;
  background:#ffffc0;
  -webkit-clip-path:inset(0);
          clip-path:inset(0);
}

/* Tela larga: a régua ganha corpo e afasta da borda. */
@media (min-width:900px){
  .regua{ right:26px; }
  .regua__janela{ height:240px; width:22px; }
  .regua__t{ width:22px; height:2px; }
}

/* ================= A CENA DE ENTRADA — 2026-09-05 =======================
   Pedido do Arthur: quem chega do anúncio vê primeiro um garfo espetando uma
   coxa de frango, uma bolha nasce atrás dele, gira meia volta, vira quadrado e
   cresce até virar o cartão do título. Os tempos e o comportamento foram
   medidos no exemplo "Pokopia: Modal" do Motion — o código de lá é do Motion+,
   pago, e não foi usado.

   A camada inteira é montada e apagada pelo `animacao.js`. Ela só existe
   durante a cena, e nunca no modo `?editar`.

   As três camadas são as mesmas do exemplo, de fora para dentro: a listra
   branca, a moldura vermelha e o miolo branco. As medidas (5px de listra,
   10px de moldura) são as mesmas do cartão de verdade, logo abaixo — é isso
   que faz a troca no último quadro não aparecer. */
/* ---- A ESPERA, ANTES DE A CENA EXISTIR ----
   A classe `cena-vem` entra no `html` já no `head` (o script está lá) e sai
   quando a cena assume o comando, dentro de `cenaDeEntrada`. Enquanto ela
   está posta, a página inteira fica invisível e o preto cobre a tela — é o
   mesmo preto do `.abertura__preto`, então a passagem de uma coisa para a
   outra não se vê. **AS DUAS CORES TÊM DE CONTINUAR IGUAIS**: divergindo, a
   tela troca de cor sozinha no meio do carregamento.

   Esconder por OPACIDADE, e não por `display`, é a mesma razão de sempre: o
   `display:none` mudaria o layout e o ScrollTrigger mediria a página errada.

   `#fundo` e `#barraProgresso` entram na lista porque moram fora do
   `#rolagem-externa` — sem eles nomeados, a arte de fundo aparecia sozinha na
   tela preta. */
html.cena-vem, html.cena-vem body{ background:#000; }
/* Os dois brilhos redondos do fundo moram em pseudo-elementos do `body`, e
   pintar o `body` de preto não os apaga: eles são camadas próprias, por cima.
   Sem esta linha ficava uma mancha clara no canto de cima e da esquerda antes
   da cena — pouca coisa, mas o pedido era tela limpa. */
html.cena-vem body::before,
html.cena-vem body::after{ opacity:0 !important; }
html.cena-vem #rolagem-externa,
html.cena-vem #fundo,
html.cena-vem #barraProgresso,
html.cena-vem #compraFixa,
html.cena-vem #btnModoEdicao{ opacity:0 !important; }

/* ---- O FUNDO DE SHADER ---------------------------------------------------
   O canvas do shader do 21st.dev, atrás da página inteira. O JavaScript o põe
   como PRIMEIRO filho do `body`; aqui ele só ganha lugar e ordem. Qual efeito
   está rodando é decisão do `animacao.js` (a ficha `FUNDO`) — este bloco serve
   a qualquer um deles.

   `z-index:0` o deixa na mesma camada do `#fundo` (o SVG dos riscos) e dos dois
   brilhos do `body`, e embaixo do `#rolagem-externa`, que é `z-index:1`. Como o
   empate de camada se resolve pela ordem do documento, ser o primeiro filho é o
   que o mantém atrás de todos eles.

   NASCE APAGADO e só acende quando o quadrado da abertura começa a abrir — a
   classe é posta pelo JavaScript. Sem a transição, ele apareceria de estalo
   por trás do furo. */
.fundo-shader{
  position:fixed;
  inset:0;
  z-index:0;
  display:block;
  opacity:0;
  pointer-events:none;
  transition:opacity .45s ease-out;
}
.fundo-shader--aceso{ opacity:1; }
/* O canvas é opaco e cobre o espresso do `body`. Os dois brilhos redondos e os
   riscos do `#fundo` continuam por cima dele, que é o que amarra o efeito à
   página em vez de deixá-lo solto. */
@media (prefers-reduced-motion: reduce){
  .fundo-shader{ transition:none; }
}

#abertura{
  position:fixed;
  inset:0;
  z-index:9000;
  pointer-events:none;
}
.abertura__forma{
  position:absolute;
  top:0; left:0;
  background:#C6C0B9;
  /* a forma muda de tamanho a cada quadro; o aviso poupa o navegador de
     descobrir isso sozinho */
  will-change:transform,width,height;
}
.abertura__moldura{ position:absolute; inset:5px; background:#422701; }
.abertura__miolo{ position:absolute; inset:10px; background:#D6B588; }

/* O preto cobre a página inteira enquanto a cena roda — pedido do Arthur: nada
   do fundo da página aparece antes da hora. Ele é a camada de baixo de tudo
   dentro da cena, e no fim é aberto pelo quadrado que cresce, revelando a
   página que já está pronta por trás.

   PRETO DE VERDADE, E NÃO O CAFÉ DA PALETA — pedido do Arthur em 2026-09-05:
   *"ele não tem que tá marrom, ele tem que tá todo preto, para quando o
   quadrado aparecer aí sim dar para perceber a diferença entre o preto e o
   marrom"*. Com o café `#2B1B0D` aqui, a camada e o fundo da página eram quase
   a mesma cor e o quadrado abria sem se ver. É o contraste que faz o efeito
   existir. */
.abertura__preto{
  position:absolute;
  inset:0;
  background:#000;
  will-change:opacity;
}

/* As duas fotos que se encontram. Elas entram de fora da tela, então precisam
   estar posicionadas pelo centro — daí o `xPercent/yPercent` de -50 no
   JavaScript, e não uma margem aqui. */
/* A fumaça da saída. Fica acima das fotos e abaixo de nada — ela é a última
   coisa que se vê da comida antes de a página aparecer. */
/* O quadrado que abre a página no fim da cena. Fica acima da fumaça, porque é
   a última coisa que cobre a tela: o café mora aqui dentro depois que o
   `.abertura__preto` sai, e é este canvas que vai sendo furado. */
.abertura__abre{
  position:absolute;
  inset:0;
  z-index:4;
  pointer-events:none;
}

.abertura__fumaca{
  position:absolute;
  pointer-events:none;
  /* Acima das duas fotos, e o número precisa estar escrito: quem tem `z-index`
     numérico fica por cima de quem tem `auto`, então sem esta linha o pó ficava
     ATRÁS do garfo e da coxa durante os 0,34s em que elas ainda estão saindo. */
  z-index:3;
}

/* AS FOTOS NASCEM APAGADAS, e isso conserta um defeito que o Arthur pegou: o
   garfo e a coxa piscavam no CANTO DE CIMA E DA ESQUERDA antes da cena.

   O motivo é a ordem das coisas. A camada entra no documento assim que
   `cenaDeEntrada` começa, mas quem manda as duas fotos para fora da tela é um
   `gsap.set` que só roda depois de `decode()` das imagens e da fonte do título
   chegarem. Nesse intervalo elas estavam em `top:0; left:0` — o canto — e
   visíveis. Apagadas aqui, o `gsap.set` as encontra já no lugar certo e é ele
   quem as acende.

   O mesmo vale para a forma: ela nasce sem tamanho, mas apagada é garantia. */
.abertura__forma{ opacity:0; }
.abertura__coxa,
.abertura__garfo{
  position:absolute;
  top:0; left:0;
  height:auto;
  opacity:0;
  will-change:transform,opacity;
  -webkit-user-select:none;
          user-select:none;
}
/* Em `vw`, e não em `cqw`: a camada da cena mora no `body`, fora do
   `#rolagem-externa`, então não tem container de consulta nenhum acima dela. */
/* Menores que a bolha de 200px de propósito: é ela que tem de abraçar o
   encontro, como o disco atrás do ícone no exemplo. Fotos maiores que a bolha
   deixavam a cena com cara de dois adesivos soltos na tela. */
.abertura__coxa{ width:clamp(92px,24vw,140px); }
.abertura__garfo{ width:clamp(110px,30vw,170px); }

/* O GARFO PASSA POR TRÁS DA COXA, e é isso que faz ele ENTRAR nela em vez de
   ficar deitado por cima — foi o que o Arthur viu. No mundo real, garfo que
   espeta some dentro da carne: com a coxa na frente, os dentes desaparecem
   atrás dela e só o cabo continua à vista. */
.abertura__garfo{ z-index:1; }
.abertura__coxa{ z-index:2; }

/* ---- O cartão do título, agora branco com moldura vermelha ----
   Ele é o ponto de chegada da cena, então tem de ser exatamente as três
   camadas dela: listra branca de 5px (o `box-shadow`), moldura vermelha de
   10px (a `border`) e miolo branco (o `background`).

   O texto muda de cor junto para manter contraste sobre a paleta Cappuccino. */
#topo .env{
  background:#D6B588;
  border:10px solid #422701;
  box-shadow:0 0 0 5px #C6C0B9;
  -webkit-backdrop-filter:none;
          backdrop-filter:none;
  color:#422701;
}
#tituloTopo{ color:#422701; }
.topo__sub{
  background:#C6C0B9;
  border-color:rgba(66,39,1,.28);
  color:#422701;
  -webkit-backdrop-filter:none;
          backdrop-filter:none;
  box-shadow:none;
}
/* As linhas de dentro sumiam no fundo claro, e `inherit` não bastou: existe um
   `#subTopo{color:var(--texto) !important}` mais acima nesta mesma folha, e ele
   ganhava de qualquer regra sem `!important`. Aqui a cor é forçada de volta.
   A primeira linha acompanha o espresso para não reintroduzir o vermelho antigo. */
#subTopo, #subTopo *{ color:#422701 !important; }
#subTopo b{ color:#422701 !important; }

/* ---- A LUZ QUE CORRE A MOLDURA DO CARTÃO DO TOPO — 2026-09-06 ------------
   Pedido do Arthur com o link: `21st.dev/@ibelick/components/border-trail`.

   DE ONDE VEIO: componente `BorderTrail` de Julien Thibeaut (@ibelick), do
   motion-primitives. O repositório é **MIT** (conferido na ficha do GitHub
   antes de usar), e o código está em
   `github.com/ibelick/motion-primitives/blob/main/components/core/border-trail.tsx`.
   Crédito visível também no `index.html`.

   O MECANISMO É O DELE, LINHA POR LINHA:

     1. uma caixa que cobre o cartão, com borda transparente e DUAS máscaras —
        uma recortada no `padding-box` e transparente, outra recortada no
        `border-box` e preta. Compostas por `intersect`, sobra só o anel da
        borda: é isso que transforma um borrão solto num traço de moldura;
     2. um quadrado do tamanho `--trilha-tamanho` correndo o
        `offset-path:rect(0 auto auto 0 round …)`, com o `offset-distance`
        indo de 0% a 100% em 5 segundos, linear, para sempre.

   O QUE MUDOU, E POR QUÊ:

   - React virou CSS puro. `motion.div` animando `offsetDistance` é o mesmo que
     um `@keyframes` de duas paradas, e esta página não tem React;
   - o raio do caminho é o do CARTÃO, e não o `size` do autor. No original os
     dois são o mesmo número porque o componente não sabe em que caixa vai
     entrar; aqui sabe-se, e o traço tem de acompanhar a curva da moldura;
   - o anel entra POR DENTRO da moldura, e é imposição do cartão: o
     `#topo .env` tem `overflow:hidden` (é ele quem faz o cartão da cena
     revelar o conteúdo enquanto cresce), então filho nenhum sobrevive do lado
     de fora da borda. O anel fica encostado na face interna dos 10px de
     espresso, que é o lugar mais próximo que existe.

   `inset:0` cobre a caixa de conteúdo mais o padding — que é justamente por
   dentro da moldura. O raio de dentro de uma borda é o de fora MENOS a
   espessura dela, e é essa conta que o `--trilha-raio` faz: sem ela o traço
   corta o canto em diagonal. */
.trilha{
  /* Sem `offset-path` não há caminho, e sem `mask-composite` o borrão apareceria
     inteiro dentro do cartão em vez de virar traço. Faltando qualquer um dos
     dois, a moldura fica como sempre foi. */
  display:none;
}
@supports ((offset-path:rect(0 auto auto 0 round 10px)) and
           ((mask-composite:intersect) or (-webkit-mask-composite:source-in))){
  .trilha{
    --trilha-raio:calc(clamp(28px,5cqw,52px) - 10px);
    /* O TAMANHO É O COMPRIMENTO DO RASTRO, e não a espessura: o anel tem 10px,
       então do quadrado de 60px do autor só se vê uma faixa de 10px de altura
       por 60 de largura. Em 60 o traço parece um respingo; aqui ele vale por um
       rastro que se enxerga entrando e saindo do canto. */
    --trilha-tamanho:170px;
    display:block;
    position:absolute;
    inset:0;
    z-index:3;
    pointer-events:none;
    border-radius:var(--trilha-raio);
    border:10px solid transparent;
    -webkit-mask-image:linear-gradient(transparent,transparent),linear-gradient(#000,#000);
            mask-image:linear-gradient(transparent,transparent),linear-gradient(#000,#000);
    -webkit-mask-clip:padding-box,border-box;
            mask-clip:padding-box,border-box;
    -webkit-mask-composite:source-in;
            mask-composite:intersect;
  }
  .trilha__ponto{
    position:absolute;
    width:var(--trilha-tamanho);
    aspect-ratio:1;
    /* Um brilho redondo que se apaga nas pontas, no lugar do quadrado chapado
       do autor: chapado, o traço entra e sai de estalo em cada volta.

       O NÚCLEO É BRANCO, e a primeira tentativa não foi. Em mel (`#FFE2A9`) o
       traço passava e não se via: o anel corre POR DENTRO da moldura, e o que
       está atrás dele é a areia `#D6B588` — dois tons quentes e claros, com
       diferença de luz perto de nenhuma. Fotografei três voltas para ter
       certeza de que era isso, e não a animação parada. O branco tem o dobro
       de luz da areia; o mel ficou no meio do brilho, que é onde ele acrescenta
       a cor sem custar a leitura. */
    background:radial-gradient(circle closest-side,
                               rgba(255,255,255,1),
                               rgba(255,226,169,.85) 40%,
                               rgba(255,226,169,0) 100%);
    offset-path:rect(0 auto auto 0 round var(--trilha-raio));
    animation:trilha-anda 5s linear infinite;
  }
}
@keyframes trilha-anda{
  from{ offset-distance:0%; }
  to  { offset-distance:100%; }
}
@media (max-width: 620px){
  .trilha{ --trilha-raio:16px; --trilha-tamanho:130px; }
}
/* Quem pediu silêncio não leva luz correndo em volta do título. */
@media (prefers-reduced-motion: reduce){
  .trilha{ display:none; }
}

/* ================= PALETA CAPPUCCINO — 2026-09-05 =======================
   Base enviada pelo Arthur:
     areia     #D6B588
     greige    #C6C0B9
     taupe     #705E46
     espresso  #422701

   A hierarquia repete sempre o mesmo contraste: superfície principal clara
   (areia + greige) e conteúdo interno escuro (taupe + espresso). O creme e o
   mel são apenas tints da própria paleta para texto legível. A seção dourada
   das refeições premium e o cartão do preço ficam fora deste bloco. */
:root{
  --cap-areia:#D6B588;
  --cap-greige:#C6C0B9;
  --cap-taupe:#705E46;
  --cap-espresso:#422701;
  --cap-creme:#F5E8D3;
  --cap-mel:#FFE2A9;

  /* ---- OS DEGRAUS DAS SUPERFÍCIES INTERNAS ----
     Todos os cartões de dentro usavam UM gradiente só (taupe → espresso), e o
     Arthur pegou: seção após seção, a mesma cor. Estes degraus abrem a mesma
     escala em cinco paradas, sem cor nova nenhuma — canela e mocha são pontos
     entre o taupe e o espresso que já existiam:

       taupe    #705E46  a cor da paleta          (o mais claro)
       canela   #5E482A  40% do taupe ao espresso
       mocha    #503715  70% do taupe ao espresso
       espresso #422701  a cor da paleta
       café     #2B1B0D  o fundo da página        (o mais escuro)

     A ordem acompanha a leitura: claro no rigor, logo abaixo do topo claro, e
     escurecendo até as perguntas no fim. Quem tem lista (entrega, perguntas)
     ainda alterna entre dois degraus vizinhos, senão são sete retângulos
     idênticos empilhados.

     O LIMITE DE ATÉ ONDE CLAREAR NÃO É GOSTO, É CONTRASTE. O texto miúdo
     desses cartões é greige (#C6C0B9): sobre o canela ele dá 4,8:1 e passa;
     sobre o taupe cai para 3,5:1 e não passa. Por isso o degrau taupe só
     aparece na seção do rigor, onde o texto miúdo (a descrição das fontes)
     foi passado para creme logo abaixo. Clarear mais que isto exige mexer no
     texto junto. */
  --cap-canela:#5E482A;
  --cap-mocha:#503715;

  --fundo:var(--cap-espresso) !important;
  --texto:var(--cap-creme) !important;
  --destaque:var(--cap-areia) !important;
  --quente:var(--cap-areia) !important;
  --suave:var(--cap-greige) !important;
  --papel:var(--cap-taupe) !important;
  --borda:var(--cap-areia) !important;
  --borda-forte:var(--cap-greige) !important;
  --lab-vidro:rgba(112,94,70,.68);
  --lab-linha:rgba(214,181,136,.55);
  --lab-sombra:0 20px 48px -30px rgba(43,27,13,.88);
}

body{
  background:
    radial-gradient(circle at 8% 6%,rgba(214,181,136,.23),transparent 28rem),
    radial-gradient(circle at 96% 25%,rgba(198,192,185,.13),transparent 26rem),
    radial-gradient(circle at 48% 80%,rgba(112,94,70,.24),transparent 34rem),
    var(--cap-espresso);
}
body::before{
  background:radial-gradient(circle,rgba(214,181,136,.28),rgba(214,181,136,0) 68%);
}
body::after{
  background:radial-gradient(circle,rgba(198,192,185,.18),rgba(198,192,185,0) 68%);
}
#fundo path,
#fundo circle,
#fundo ellipse{ stroke:var(--cap-areia); }
#fundoCamadaPerto path,
#fundoCamadaPerto circle{ stroke:var(--cap-greige); }

/* A abertura termina exatamente nas três camadas do cartão inicial.

   O fundo da cena fica de FORA da paleta de propósito, e é a segunda vez que
   ele muda: era branco, o Codex passou para o café `#2B1B0D` em 2026-09-05
   para casar com a página, e no mesmo dia o Arthur pediu preto — porque o
   quadrado que abre a página só se enxerga se a camada e o fundo tiverem cores
   diferentes. Casar as duas foi o que tirou o efeito da vista. */
.abertura__preto{ background:#000; }
.abertura__forma{ background:var(--cap-greige); }
.abertura__moldura{ background:var(--cap-espresso); }
.abertura__miolo{ background:var(--cap-areia); }
#topo .env{
  background:var(--cap-areia);
  border-color:var(--cap-espresso);
  box-shadow:0 0 0 5px var(--cap-greige),0 24px 58px -34px rgba(43,27,13,.9);
  color:var(--cap-espresso);
}
#topo .env::after{
  border-color:rgba(66,39,1,.28);
  box-shadow:0 0 0 24px rgba(112,94,70,.055),0 0 0 62px rgba(198,192,185,.075),0 0 90px rgba(66,39,1,.16);
}
#tituloTopo{ color:var(--cap-espresso); }
.topo__sub{
  background:var(--cap-greige);
  border-color:rgba(66,39,1,.28);
  color:var(--cap-espresso);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.32),0 14px 30px -24px rgba(66,39,1,.62);
}
#subTopo,
#subTopo *{ color:var(--cap-espresso) !important; }
#subTopo b{ color:var(--cap-espresso) !important; font-weight:700; }

/* Botão que leva à receita, e cartão da receita: cabeçalho claro, miolo café.
   As cores do trilho e da bolinha saíram junto com as peças, em 2026-09-05. */
.arraste-receita{
  background:linear-gradient(145deg,rgba(214,181,136,.96),rgba(198,192,185,.92));
  border-color:rgba(66,39,1,.56);
  color:var(--cap-espresso);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.3),0 16px 34px -26px rgba(43,27,13,.8);
}
/* Com o metal montado, o creme da paleta passa do botão para o miolo — senão
   ele cobriria a faixa de metal que devia ficar à mostra. */
.arraste-receita[data-metal]{ background:transparent; border-color:transparent; }
.arraste-receita[data-metal]::before{
  background:linear-gradient(145deg,rgba(214,181,136,.96),rgba(198,192,185,.92));
  -webkit-backdrop-filter:none;
          backdrop-filter:none;
}
.arraste-receita__rotulo{ color:var(--cap-espresso); }

/* Cartões grandes: o título vive no cappuccino claro. */
#problema .env,
#trocas .env,
#rigor .env,
#entrega .env,
#perguntas .env{
  background:linear-gradient(145deg,rgba(214,181,136,.96),rgba(198,192,185,.92) 58%,rgba(214,181,136,.9));
  border-color:rgba(66,39,1,.5);
  color:var(--cap-espresso);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.34),inset 0 -1px 0 rgba(66,39,1,.2),0 22px 48px -32px rgba(43,27,13,.82);
}
#perguntas .env{
  padding-block:clamp(24px,4.8cqw,56px);
  border:1px solid rgba(66,39,1,.5);
  border-radius:28px;
}

/* ---- VIDRO LÍQUIDO NAS CAIXAS DE PERGUNTA -------------------------------
   O Arthur pediu isto duas vezes. Em 2026-09-05 eu vesti o CARTÃO da seção, e
   em 2026-09-06 ele mandou a foto das sete caixas e corrigiu: *"foi aplicado no
   de fundo e não das perguntas de si"*. Hoje o vidro está em cada `.faq__i`, e
   o cartão da seção saiu da frente.

   O CARTÃO PRECISOU FICAR TRANSPARENTE, e não é enfeite: vidro só se enxerga
   pelo que passa por trás dele. Com o cappuccino opaco atrás — ou com o próprio
   cartão de vidro, que tem véu branco — a distorção e o desfoque das caixas
   trabalhariam contra uma superfície lisa e não apareceriam. Hoje o que passa
   por trás das sete caixas é o shader animado da página.

   O componente original empilha QUATRO camadas, e aqui elas viram três:

     1. a distorção  -> `::before`, com `backdrop-filter` e o filtro SVG;
     2. o véu branco -> o `background` do `::after`;
     3. o brilho     -> o `box-shadow` inset do MESMO `::after`;
     4. o conteúdo   -> os filhos da caixa, empurrados para a camada 3.

   Juntar a 2 com a 3 não muda o desenho: uma é fundo e a outra é sombra
   interna, e as duas cabem no mesmo elemento sem se atrapalhar.

   DO AUTOR FICARAM: `blur(3px)`, o filtro SVG inteiro, os dois `inset` de 2px e
   1px e as duas sombras de fora. Só duas coisas saíram do número dele, e as
   duas por medida de contraste — a tinta escura que entrou e o véu branco que
   desceu de 25% para 12%. O porquê está logo abaixo, na camada de baixo.

   ---- E ISTO TUDO SAIU DE CENA EM 2026-09-07 ----
   O Arthur mandou o link do acordeão do shadcn e disse para aplicar aquele
   modelo. O modelo não tem caixa nenhuma: cada pergunta é um fio divisório. Sem
   caixa não há onde pôr vidro, então o vidro líquido saiu junto, e o cartão da
   seção voltou a ser cappuccino opaco (ele só tinha ficado transparente para o
   vidro das caixas ter o que distorcer atrás).

   O bloco novo está no FIM deste arquivo, porque as regras de degrau espresso
   que vêm mais abaixo pintariam o fundo das caixas de novo. O que ficou aqui é
   só o texto acima, que explica o que existiu e por quê. Para trazer o vidro de
   volta: `laboratorio.css.antes-do-faq-shadcn`. */
/* Restos da versão anterior, quando o vidro morava aqui. Ficam desligados por
   escrito para ninguém procurar por que a seção tem duas camadas paradas. */
#perguntas .env::before,
#perguntas .env::after{ content:none; }
/* O conteúdo continua acima de qualquer camada que venha a existir aqui. */
#perguntas .env > *{ position:relative; z-index:2; }

/* As regras do vidro moravam aqui e saíram em 2026-09-07, com a troca para o
   modelo do acordeão do shadcn. As medidas que elas produziram estão guardadas
   no `CLAUDE-cardapio-anual.md`, seções 20.1 e 20.2 — a principal é a que vale
   para qualquer texto sobre fundo animado: medir por bloco de 16×16 px e em
   vários instantes, porque a média da caixa aprova o que o pior bloco reprova.

   O desenho novo está no FIM deste arquivo. */

/* O filtro mora num SVG que não desenha nada: ele só empresta o `id`. Continua
   declarado, e hoje ninguém o usa — o `<svg>` no `index.html` custa zero e fica
   à mão se o vidro voltar. */
.vidro-liquido__filtro{
  position:absolute;
  width:0;
  height:0;
  overflow:hidden;
}
#problemaTitulo,
#trocaTitulo,
#entTitulo,
#faqTitulo{ color:var(--cap-espresso); }
#trocaTexto{ color:var(--cap-espresso); }

section:not(#livre):not(#oferta) .olho{
  background:var(--cap-espresso);
  border-color:rgba(66,39,1,.72);
  color:var(--cap-areia);
}

/* Conteúdo interno: café escuro, diferente do título sem sair da família.

   A MOLDURA É COMUM A TODOS; A COR DE FUNDO É QUE MUDA DE SEÇÃO PARA SEÇÃO,
   nos quatro degraus declarados lá em cima. Borda, sombra e cor de texto
   continuam iguais em toda parte — é o que segura os cartões como uma família
   só enquanto o fundo varia. */
#problemaTexto,
.balao,
.troca,
#topoPrevia .dia,
.card,
.fonte,
#rigorTitulo,
#rigorTexto,
#entGrade .ent:not(:has([data-campo="entrega.itens[3].titulo"])),
.faq__i{
  background:linear-gradient(145deg,rgba(112,94,70,.98),rgba(66,39,1,.96));
  border-color:rgba(214,181,136,.55);
  color:var(--cap-creme);
  box-shadow:inset 0 1px 0 rgba(245,232,211,.17),0 16px 34px -26px rgba(43,27,13,.88);
}

/* Degrau TAUPE — o mais claro, na seção do rigor. Ela abre a página logo
   depois do cartão claro do topo, então é a que menos pode escurecer de
   repente. */
#rigorTitulo,
#rigorTexto,
.fonte{
  background:linear-gradient(145deg,rgba(112,94,70,.98),rgba(94,72,42,.96));
}
/* A descrição das fontes é o único texto miúdo que cai sobre o taupe. Em
   greige dava 3,5:1; em creme dá 5,2:1. */
.fonte .fonte__d{ color:var(--cap-creme); }

/* Degrau CANELA — as trocas e a receita do dia, que são as duas telas de
   dados. Fundo médio, para os números de caloria em areia continuarem a
   saltar. */
.troca,
#topoPrevia .dia,
.card{
  background:linear-gradient(145deg,rgba(94,72,42,.98),rgba(80,55,21,.96));
}

/* Degrau MOCHA — a seção do problema. Os dois cartões dela ficam em degraus
   VIZINHOS, e não no mesmo: o parágrafo da dor puxa mais escuro que os
   balões, e é isso que separa a frase de abertura das frases da lista. */
.balao{
  background:linear-gradient(145deg,rgba(94,72,42,.98),rgba(80,55,21,.95));
}
#problemaTexto{
  background:linear-gradient(145deg,rgba(80,55,21,.98),rgba(66,39,1,.96));
}

/* Degraus ESPRESSO e CAFÉ — o fim da página.

   As duas listas ALTERNAM entre os dois. Sete perguntas idênticas empilhadas
   era o que dava a parede de retângulos; com a troca a cada linha, o olho
   enxerga onde uma acaba e a outra começa antes mesmo de ler. A diferença é
   pequena de propósito — degrau, não listra.

   (Havia um fecha-comentário aqui no meio, e ele fechava o comentário cedo
   demais. As três linhas abaixo viravam seletor, e o navegador engolia com elas
   a regra que vinha em seguida — a dos cartões da entrega, que ficou sem o
   degrau espresso por dias. Achado em 2026-09-06. Comentário de CSS não aninha:
   escrever a marca de fechar dentro de um comentário fecha ele ali mesmo, e foi
   assim que eu repeti o defeito na primeira tentativa de explicá-lo.)

   A alternância troca de DEGRAU, e não o sentido do mesmo gradiente. Inverter
   o gradiente foi a primeira tentativa e não deu em nada: a cor média das duas
   linhas ficava igual, e na tela do celular a diferença sumia. */
#entGrade .ent:not(:has([data-campo="entrega.itens[3].titulo"])),
.faq__i{
  background:linear-gradient(145deg,rgba(80,55,21,.98),rgba(66,39,1,.96));
}
#entGrade .ent:nth-child(even):not(:has([data-campo="entrega.itens[3].titulo"])),
#faqLista .faq__i:nth-child(even){
  background:linear-gradient(145deg,rgba(66,39,1,.98),rgba(43,27,13,.96));
}
#problemaTexto,
#rigorTexto,
#rigorTexto *,
.balao,
.troca,
.card,
.fonte,
#entGrade .ent:not(:has([data-campo="entrega.itens[3].titulo"])),
.faq__i{ color:var(--cap-creme); }

#problemaTexto b[style*="color"],
.balao b[style*="color"],
.troca b[style*="color"],
#rigorTexto b[style*="color"],
#entGrade .ent:not(:has([data-campo="entrega.itens[3].titulo"])) b[style*="color"],
.faq__i b[style*="color"]{ color:var(--cap-mel) !important; }

.troca__linha,
.troca__kcal,
.fonte__n,
.ent__i,
.faq__mais::before,
.faq__mais::after{ color:var(--cap-areia); }
.troca__linha{ color:var(--cap-creme); border-top-color:rgba(214,181,136,.46); }
.troca__tipo,
.fonte__d,
#entGrade .ent:not(:has([data-campo="entrega.itens[3].titulo"])) .ent__x,
.faq__r p{ color:var(--cap-greige); }
.troca__nota{ color:var(--cap-espresso); }
#trocaTexto b[style*="color"],
#trocaNota b[style*="color"]{ color:var(--cap-espresso) !important; }

#topoPrevia .dia__topo{
  background:linear-gradient(135deg,var(--cap-areia),var(--cap-greige));
  border-bottom-color:rgba(66,39,1,.46);
  color:var(--cap-espresso);
}
#topoPrevia .dia__et,
#topoPrevia .dia__tot{ color:var(--cap-espresso); }
#topoPrevia .dia .bloco{ border-bottom-color:rgba(214,181,136,.34); }
#topoPrevia .bloco__nome,
#topoPrevia .bloco__prato{ color:var(--cap-creme); }
#topoPrevia .bloco__kcal{ color:var(--cap-mel); }
#topoPrevia .bloco__itens li,
#topoPrevia .dia__nota{ color:var(--cap-greige); }
#topoPrevia .pill{ border-color:rgba(214,181,136,.5); color:var(--cap-greige); }
#topoPrevia .pill b{ color:var(--cap-creme); }

.entrega{
  background:rgba(66,39,1,.16);
  border-color:rgba(66,39,1,.38);
}
#entGrade .ent:not(:has([data-campo="entrega.itens[3].titulo"])) .ent__i{
  background:rgba(214,181,136,.15);
  color:var(--cap-mel);
}

/* Ações fora do cartão de preço acompanham a nova paleta. */
#topo .btn,
#compraFixa .btn{
  background:linear-gradient(135deg,var(--cap-areia),var(--cap-greige));
  border-color:rgba(66,39,1,.55);
  color:var(--cap-espresso);
  text-shadow:none;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.34),0 14px 32px -22px rgba(43,27,13,.82);
}
#topo .btn .btn__txt,
#compraFixa .btn .btn__txt{ color:var(--cap-espresso); }

footer{
  background:rgba(43,27,13,.58);
  border-top-color:rgba(214,181,136,.42);
  color:var(--cap-greige);
}

/* ===========================================================================
   FAQ NO MODELO DO ACORDEÃO DO SHADCN — 2026-09-07
   ===========================================================================
   Pedido do Arthur, com o link: *"eu achei um layout novo aqui, vou te enviar o
   link dele e você vai aplicar esse modelo aí na página"* —
   `21st.dev/community/components/s/faq?preview=/@shadcn/components/accordion`.

   O QUE O MODELO É. Lido no `accordion.tsx` do repositório do shadcn, que é a
   fonte de verdade (a página do 21st.dev só mostra a prévia):

     item      `border-b last:border-b-0`   um fio embaixo, e nada mais
     gatilho   `flex items-start justify-between gap-4 py-4 text-left`
     ícone     chevron, `size-4`, gira 180° ao abrir, 200 ms
     resposta  `overflow-hidden`, miolo com `pt-0 pb-4`

   NÃO HÁ CAIXA. Não há borda em volta, fundo por item, raio, sombra nem vão
   entre um e outro. Quem separa uma pergunta da outra é o fio. É esse vazio que
   faz o desenho — meio caminho (fio novo mantendo a caixa velha) não seria nem
   um nem outro.

   TRÊS COISAS DA PÁGINA CAÍRAM COM AS CAIXAS, e as três por consequência:

   1. O VIDRO LÍQUIDO. Ele morava em cada `.faq__i` desde 2026-09-06. Sem corpo
      de caixa não há superfície para desfocar nem para distorcer. Saiu inteiro.
   2. O CARTÃO DA SEÇÃO VOLTOU A SER CAPPUCCINO OPACO. Ele só tinha ficado
      transparente para o vidro das caixas ter o fundo animado passando atrás.
      Sem vidro, a pergunta cairia direto no shader — e a medida de 2026-09-06
      diz o que dá ali: pior bloco 2,7, contra os 4,5 que texto de 17,5 px pede.
      Com o cappuccino de volta a seção reentra na família das outras quatro:
      cartão claro por fora, texto espresso por dentro.
   3. O DEGRAU ALTERNADO espresso/café das sete caixas. Ele existia para o olho
      achar onde uma caixa terminava e a outra começava. O fio faz isso melhor e
      com menos tinta.

   O bloco fica NO FIM DO ARQUIVO de propósito: as regras de degrau (`.faq__i`
   junto com os cartões da entrega, mais acima) pintariam o fundo de novo, e
   entre pesos parecidos ganha quem vem depois. Os seletores levam `#perguntas
   #faqLista` na frente pelo mesmo motivo.

   O HTML NÃO FOI TOCADO — nenhum id, nenhuma classe, nenhum `data-campo`. O
   `.faq__mais` continua sendo o mesmo elemento de sempre; o que mudou é o
   desenho dele, de sinal de mais para chevron. Isso importa por duas razões: o
   editor visual quebra em silêncio quando um id é renomeado, e o `mover.js`
   procura `.faq__i` pelo nome para deixar a caixa arrastável. */

/* A lista deixa de ser grade com vão e vira pilha. */
#perguntas #faqLista{
  display:block;
  gap:0;
  border-top:0;
}

/* O ITEM É UM FIO. `border-b last:border-b-0`, dito em CSS de verdade. */
#perguntas #faqLista .faq__i,
#perguntas #faqLista .faq__i:nth-child(even){
  position:relative;
  isolation:auto;
  background:none;
  border:0;
  border-bottom:1px solid rgba(66,39,1,.28);
  border-radius:0;
  box-shadow:none;
  -webkit-backdrop-filter:none;
          backdrop-filter:none;
  /* O recorte servia ao canto arredondado, que já não existe. Sem ele, peça
     arrastada para dentro de uma pergunta não some calada — foi o que o
     `overflow:hidden` fez com cinco blocos desta seção em 2026-09-05. Quem
     fecha a resposta é o `overflow:hidden` do próprio `.faq__r`. */
  overflow:visible;
  color:var(--cap-espresso);
}
#perguntas #faqLista .faq__i:last-child{ border-bottom:0; }
/* As duas camadas do vidro saem de cena. */
#perguntas #faqLista .faq__i::before,
#perguntas #faqLista .faq__i::after{ content:none; }

/* O GATILHO. `items-start justify-between gap-4 py-4 text-left`: o texto encosta
   na esquerda e o chevron fica na direita, alinhado com a PRIMEIRA linha da
   pergunta — não com o meio do bloco. Em pergunta de duas linhas a diferença se
   vê. O recuo da direita é a faixa reservada ao chevron: o texto pode ser
   arrastado no editor, e sem a faixa ele encostaria no ícone. */
#perguntas #faqLista .faq__b{
  position:relative;
  display:flex;
  align-items:flex-start;
  justify-content:flex-start;
  text-align:left;
  gap:16px;
  padding:16px 40px 16px 0;
  color:var(--cap-espresso);
}
/* `hover:underline` é do modelo. O deslocamento de 4px tira o risco de cima do
   pé das letras com acento — e esta página é cheia delas. */
#perguntas #faqLista .faq__b:hover{
  text-decoration:underline;
  text-underline-offset:4px;
}

/* O SINAL DE MAIS VIROU CHEVRON, e sem tocar no HTML.
   O elemento continua o `.faq__mais` de sempre. A barra deitada do `+` vira o
   próprio chevron (quadrado com duas bordas, girado 45°) e a barra em pé é
   desligada. Abrir gira o conjunto 180°, que é o que o modelo faz. */
#perguntas #faqLista .faq__mais{
  position:absolute;
  right:0;
  top:17px;
  transform:none;
  width:22px;
  height:22px;
  rotate:0deg;
  transition:rotate 200ms ease;
}
#perguntas #faqLista .faq__mais::before{
  content:"";
  position:absolute;
  left:50%;
  top:44%;
  width:9px;
  height:9px;
  border:0;
  border-right:1.8px solid rgba(66,39,1,.62);
  border-bottom:1.8px solid rgba(66,39,1,.62);
  background:none;
  translate:-50% -50%;
  rotate:45deg;
}
#perguntas #faqLista .faq__mais::after{ content:none; }
#perguntas #faqLista .faq__i[aberto] .faq__mais{ rotate:180deg; }

/* A RESPOSTA. `pt-0 pb-4`, largura inteira, alinhada à esquerda como a
   pergunta.

   A COR É ESPRESSO A 92%, E FOI MEDIDA QUE CHEGOU NESSE NÚMERO. O taupe
   (`#705E46`) seria o tom "calmo" natural da paleta para uma resposta, e mede
   3,2 sobre o cappuccino — a resposta tem 16,8 px, que pede 4,5, então ele
   reprovaria de saída. Espresso a 86% deu 4,73 no pior bloco de 14 instantes:
   passa, e passa raspando, que neste projeto já foi motivo de refazer.

   Ela é semitransparente, então COMPÕE com o cartão — e o cartão deixa passar
   4% do shader animado. É por isso que a conta é por bloco de 16×16 px e em
   vários instantes, e não uma média de uma foto só. A hierarquia entre pergunta
   e resposta passa a vir do peso da letra, como no modelo. */
#perguntas #faqLista .faq__r p{
  padding:0 0 16px;
  margin-inline:0;
  text-align:left;
  color:rgba(66,39,1,.92);
}

/* Grifo em cor dentro de pergunta ou resposta: o mel é para fundo escuro e
   sumiria no cappuccino. */
#perguntas #faqLista .faq__i b[style*="color"]{
  color:var(--cap-espresso) !important;
}

/* O TEXTO DA PERGUNTA VOLTA PARA A ESQUERDA DE VERDADE.
   As sete perguntas têm `left:34px` gravado no `posicoes.json`, do tempo em que
   a frase era centralizada — o arrasto entra como `position:relative`, que move
   sem mudar a caixa. Com o texto alinhado à esquerda, esses 34px empurram a
   frase para debaixo do chevron: medido a 390 px, a folga entre o fim do texto
   e o ícone ficava em **−16 px** em quatro das sete.

   Zerar aqui é o mesmo recurso, e pelo mesmo motivo, que os `.livre__item` e o
   `#moderado` já usam neste arquivo. O valor continua gravado no
   `posicoes.json`: apagando esta regra, o deslocamento volta.

   O `top` fica como está — é 0 em seis das sete, e 2 px na outra.
   O `max-width` também fica: aquele o Arthur escolheu no editor. */
#perguntas #faqLista .faq__b > span[style*="left"]{
  left:0 !important;
}

/* ===========================================================================
   O VIDRO LÍQUIDO VOLTA — AGORA NO CARTÃO DA SEÇÃO — 2026-09-07
   ===========================================================================
   Pedido do Arthur, com o link do componente de novo
   (`21st.dev/@suraj-xd/components/liquid-glass`): *"nessa parte de perguntas
   você vai aplicar a mesma definição de liquid glass que eu te mandei nesse
   link aí, por que você vai permanecer no mesmo layout, só para mudar o fundo
   mesmo para poder ficar transparente e ficar mais bonito"*.

   ELE MORA NO CARTÃO, E NÃO NAS CAIXAS, e desta vez isso é o certo. Em
   2026-09-06 ele me corrigiu justamente por eu ter vestido o cartão em vez das
   caixas — mas aquilo era o layout antigo, em que cada pergunta tinha corpo.
   O modelo do shadcn não tem corpo nenhum: é fio divisório. A única superfície
   que restou para receber vidro é o cartão da seção, e é o que ele está
   pedindo hoje ao dizer "só mudar o fundo para ficar transparente".

   A RECEITA É A DO AUTOR, INTEIRA E SEM UM NÚMERO MUDADO: `blur(3px)`, o filtro
   SVG, véu branco de 25%, os dois `inset` de 2px e 1px a 50%, e as duas sombras
   de fora. Nenhuma tinta escura por baixo.

   ISSO É DECISÃO DO ARTHUR, TOMADA DEPOIS DA MINHA OBJEÇÃO, e o número dela
   fica registrado aqui para ninguém "consertar" isto por engano.

   O vórtice parece quase todo preto, e quase é — mas os filamentos dele saturam
   em branco e são largos. Medido nas sete caixas, blocos de 16×16 px, texto
   escondido, em duas posições de rolagem:

     sem tinta, véu 25% (o de hoje)   pior bloco 2,78
     tinta espresso 45%, véu 12%      pior bloco 2,05
     tinta espresso 72%, véu 12%      pior bloco 3,68
     tinta espresso 82%, véu 12%      pior bloco 5,57

   A pergunta tem 17,5 px e pede 4,5. Custava 82% de tinta para passar, e a 82%
   o vidro deixava de parecer vidro. Perguntado, ele escolheu: *"fundo
   transparente para poder exibir o background"*. Seis das sete caixas ficam
   entre 4,9 e 7,3 mesmo sem tinta; quem reprova é o bloco onde a letra cai em
   cima do filamento, e isso dura os segundos em que ele passa.

   O QUE SEGURA A LEITURA NESSES SEGUNDOS É O HALO ESCURO ATRÁS DA LETRA, mais
   abaixo. Ele não entra na conta de contraste — a régua da WCAG mede cor de
   texto contra cor de fundo e não sabe o que é sombra —, mas é o que legenda
   de vídeo usa há décadas, e pelo mesmo motivo: o fundo se mexe e a letra
   precisa carregar o próprio contraste junto.

   NADA DE `overflow:hidden` AQUI. É o reflexo certo em qualquer outro cartão e
   o errado neste: cinco peças desta seção foram arrastadas para fora dele no
   editor, e a maior desce 250 px do pé. Com o recorte elas somem, e nada
   acusa. Quem segura o canto das camadas é o `border-radius:inherit` com
   `inset:0` — que é como o próprio autor as monta. */
/* A TINTA MORA AQUI, E NÃO NA CAMADA DISTORCIDA — corrigido em 2026-09-07 com
   a foto do Arthur e um traço vermelho na borda direita: *"tem uma falha ali,
   perto das bordas também ele meio que tá meio que comido, desgastado, esse
   efeito marrom que tem no liquid glass eu quero que você preencha todo o
   [vidro] mas permaneça o mesmo tom de marrom para que não afete a
   transparência"*.

   A CAUSA TEM NOME: `feDisplacementMap`. Ele empurra cada pixel para o lado
   segundo o ruído, e perto da borda o pixel que deveria vir de fora da caixa não
   existe — a região do filtro é a própria caixa (`filterUnits="objectBoundingBox"`,
   100% × 100%). O que entra no lugar é transparência, e é isso que se lê como
   borda roída. Não é falha de imagem nem de desenho.

   O CONSERTO É DE CAMADA, NÃO DE NÚMERO. A tinta saiu do `::before`, que é quem
   leva o filtro, e passou para o `::after`, que é a camada do véu e não leva
   filtro nenhum. O marrom cobre a caixa inteira, de borda a borda, e a mordida
   do deslocamento passa a acontecer numa camada coberta por outra da mesma cor.

   NÃO FOI PARA O FUNDO DO CARTÃO: a tinta continua nos pseudo-elementos para
   cobrir o vidro até os cantos sem receber a distorção que rói as bordas.

   O TOM É O MESMO, LETRA POR LETRA: `rgba(43,27,13,.55)`, o valor que já estava
   no `::before`. Nenhuma transparência foi trocada — a tinta continua deixando o
   fundo se mexer através dela, que é o que ele pediu para não perder. */
#perguntas .env{
  position:relative;
  isolation:isolate;
  background:transparent;
  border-color:transparent;
  box-shadow:0 6px 6px rgba(0,0,0,.2), 0 0 20px rgba(0,0,0,.1);
}
/* As duas camadas cobrem o cartão inteiro. Este cartão não tem animação de
   abertura; apenas as respostas internas continuam abrindo ao toque. */
#perguntas .env::before,
#perguntas .env::after{
  content:"";
  position:absolute;
  inset:0;
  border-radius:inherit;
  pointer-events:none;
}
/* Camada 1 — a distorção, com a tinta junto. Desfoque e filtro SVG são do
   autor; a tinta é a correção da medida.

   A TINTA VOLTOU QUANDO O FUNDO VOLTOU, e a razão é do fundo, não do vidro.
   Pela manhã o Arthur escolheu vidro sem tinta nenhuma — e naquela hora o que
   passava atrás era o vórtice, PRETO com filamentos claros de passagem. Sem
   tinta, o cartão ficava escuro quase o tempo todo e só reprovava nos segundos
   em que um filamento cruzava. À tarde ele mandou o halftone de volta, e o
   halftone é o contrário: claro e quente na área inteira, o tempo todo.

   Medido sem tinta sobre o halftone, 14 instantes, blocos de 16×16 px: pior
   bloco **2,72 nas SETE caixas** — de 2,72 a 2,75, sem variação. Não é um
   instante ruim, é o estado permanente. O cartão fica bege e o creme some nele.

   E INVERTER A COR DO TEXTO NÃO SALVA. Trocando o creme por espresso escuro, o
   bloco claro sobe para 4,19 e o bloco escuro cai para 1,33 — sob a mesma
   caixa o halftone passa de claro a escuro. Nenhuma cor de letra atende os
   dois; só um piso de tinta atende.

   Os 55% e o véu de 12% são os números medidos em 2026-09-06 contra este mesmo
   halftone: pior bloco 5,8 a 11,2. A tinta divide o elemento com o desfoque e a
   distorção, então o fundo continua se mexendo ATRAVÉS dela — é vidro fumê, e
   não vidro tapado. */
#perguntas .env::before{
  z-index:0;
  -webkit-backdrop-filter:blur(3px);
          backdrop-filter:blur(3px);
  filter:url(#glass-distortion);
  isolation:isolate;
  /* A TINTA SAIU DAQUI em 2026-09-07 e foi para o fundo do cartão — o porquê
     está escrito em cima da regra do `#perguntas .env`. Esta camada ficou só
     com o desfoque e a distorção, que é a receita do autor. */
}
/* Camadas 2 e 3 no mesmo elemento — o véu é `background` e o brilho da borda é
   `box-shadow` interna, e as duas cabem juntas sem se atrapalhar.

   O véu do autor é 25% e aqui é 12%, pelo mesmo motivo da tinta: era ele quem
   levantava o chão do claro. Os dois brilhos de borda ficam nos 50% do autor,
   porque é deles que vem o fio de luz do canto e eles pegam pouca área. */
/* A TINTA ENTROU AQUI em 2026-09-07, vinda do `::before` — o porquê está no
   comentário do `#perguntas .env`, mais acima. São dois fundos empilhados na
   mesma declaração: o véu branco por cima e o marrom por baixo, na ordem em
   que o CSS pinta (primeiro da lista fica na frente). */
#perguntas .env::after{
  z-index:1;
  background:linear-gradient(rgba(255,255,255,.12),rgba(255,255,255,.12)),
             rgba(43,27,13,.55);
  box-shadow:inset 2px 2px 1px 0 rgba(255,255,255,.5),
             inset -1px -1px 1px 1px rgba(255,255,255,.5);
}

/* ---- O TEXTO VOLTA A SER CLARO -----------------------------------------
   Com o cappuccino opaco, a pergunta era espresso. Sobre vidro com o vórtice
   escuro atrás, espresso some. Volta o creme, que é o mesmo par que as caixas
   usavam antes do modelo do shadcn — nenhuma cor nova entra na página. */
#perguntas #faqTitulo{ color:var(--cap-creme); }
#perguntas #faqLista .faq__i,
#perguntas #faqLista .faq__i:nth-child(even){
  border-bottom-color:rgba(245,232,211,.22);
  color:var(--cap-creme);
}
#perguntas #faqLista .faq__b{ color:var(--cap-creme); }
#perguntas #faqLista .faq__r p{ color:var(--cap-creme); }

/* ---- O HALO ESCURO, QUE É O QUE SEGURA A LEITURA -------------------------
   O vidro ficou sem tinta por decisão do Arthur, para o vórtice aparecer. Com
   isso o fundo por trás da letra deixa de ser confiável: na maior parte do
   tempo é escuro, e nos segundos em que um filamento branco passa ele vira
   claro. Cor de texto sozinha não resolve os dois casos.

   O que resolve é a letra carregar o próprio fundo: duas sombras, uma curta e
   fechada que dá a borda, e uma larga e aberta que apaga o entorno. É a receita
   de legenda de vídeo, e existe pelo mesmo motivo — lá embaixo também passa
   cena clara e cena escura sob o mesmo texto branco.

   AS DUAS SÃO PRETO-ESPRESSO, e não preto puro: preto puro sobre o creme dá um
   contorno cinza que se enxerga como borrão. O tom quente some no desenho.

   ISTO NÃO CONTA NA RÉGUA DA WCAG. Ela mede cor de texto contra cor de fundo e
   não sabe o que é sombra. O número medido sem o halo está lá em cima, na
   tabela: pior bloco 2,78. Quem quiser o número passando de verdade precisa da
   tinta de volta, e aí o vidro fecha. */
#perguntas #faqTitulo,
#perguntas #faqLista .faq__b,
#perguntas #faqLista .faq__r p{
  text-shadow:0 1px 2px rgba(20,10,4,.95),
              0 0 12px rgba(20,10,4,.8),
              0 0 24px rgba(20,10,4,.55);
}
/* O chevron é desenho, não letra: quem dá o corpo dele é `filter`. */
#perguntas #faqLista .faq__mais{
  filter:drop-shadow(0 1px 2px rgba(20,10,4,.95)) drop-shadow(0 0 8px rgba(20,10,4,.7));
}
#perguntas #faqLista .faq__mais::before{
  border-right-color:rgba(245,232,211,.7);
  border-bottom-color:rgba(245,232,211,.7);
}
/* Grifo em cor: sobre fundo escuro o mel volta a ser o certo. */
#perguntas #faqLista .faq__i b[style*="color"]{
  color:var(--cap-mel) !important;
}

/* SEM `backdrop-filter` NÃO HÁ VIDRO — só uma caixa transparente com o vórtice
   correndo por baixo do texto. Aí o cappuccino volta inteiro, e com ele o texto
   escuro, exatamente como estava antes deste bloco. */
@supports not ((backdrop-filter:blur(3px)) or (-webkit-backdrop-filter:blur(3px))){
  #perguntas .env{
    background:linear-gradient(145deg,rgba(214,181,136,.96),rgba(198,192,185,.92) 58%,rgba(214,181,136,.9));
    border-color:rgba(66,39,1,.5);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.34),inset 0 -1px 0 rgba(66,39,1,.2),0 22px 48px -32px rgba(43,27,13,.82);
  }
  #perguntas .env::before,
  #perguntas .env::after{ content:none; }
  #perguntas #faqTitulo{ color:var(--cap-espresso); }
  #perguntas #faqLista .faq__i,
  #perguntas #faqLista .faq__i:nth-child(even){
    border-bottom-color:rgba(66,39,1,.28);
    color:var(--cap-espresso);
  }
  #perguntas #faqLista .faq__b{ color:var(--cap-espresso); }
  #perguntas #faqLista .faq__r p{ color:rgba(66,39,1,.92); }
  #perguntas #faqLista .faq__mais::before{
    border-right-color:rgba(66,39,1,.62);
    border-bottom-color:rgba(66,39,1,.62);
  }
  #perguntas #faqLista .faq__i b[style*="color"]{ color:var(--cap-espresso) !important; }
  /* Sem vidro o cartão é cappuccino opaco e o texto é escuro: halo escuro atrás
     de letra escura vira borrão. */
  #perguntas #faqTitulo,
  #perguntas #faqLista .faq__b,
  #perguntas #faqLista .faq__r p{ text-shadow:none; }
  #perguntas #faqLista .faq__mais{ filter:none; }
}

/* ===========================================================================
   TRÊS ACERTOS PEDIDOS EM 2026-09-07, À TARDE
   ===========================================================================

   ---- 1. OS RISCOS DO FUNDO SAÍRAM ----------------------------------------
   Pedido do Arthur, com a foto e duas setas apontando para eles: *"remove
   essas imagens aí que tá de fundo"*. São os círculos de traço do `#fundo`, um
   SVG que fica preso na tela e desliza com a rolagem em duas camadas.

   `display:none` e não remoção do HTML: o `animacao.js` procura `#fundo` e as
   duas camadas dele pelo id para animar. Apagando do HTML, aquele trecho passa
   a mexer em nada — funciona, mas some sem deixar rastro para quem for ler
   depois. Assim o desenho fica no arquivo e basta apagar esta regra para ele
   voltar. */
#fundo{ display:none !important; }

/* ---- 2. OS CARTÕES DA ENTREGA ENCOSTAM NO VIDRO --------------------------
   Pedido do Arthur, com a foto dos cartões 01 e 02: *"na parte marrom os lados
   eles não estão ajustados com o liquid glass, está com uma falta de
   preenchimento, e lá em cima também você pode perceber que ele está meio
   pontiagudo, eu quero que fique igual essa parte da refeição premium"*.

   O QUE SOBRAVA ERA O `padding:10px` DO `#entGrade`. Os cartões paravam nele,
   e por isso apareciam duas coisas ao mesmo tempo: a moldura escura de 10px em
   volta ("falta de preenchimento") e as pontas retas do cartão de cima dentro
   do canto arredondado do vidro ("meio pontiagudo").

   Em 2026-09-02 o cartão dourado resolveu isso sozinho, com 10px de margem
   negativa e os mesmos 10px devolvidos ao recuo interno — porque naquele dia o
   Arthur mandou NÃO tocar em 01 e 02. Hoje ele mandou o contrário, e aí o
   caminho limpo é tirar o padding do container e devolver os 10px ao recuo de
   cada cartão. O truque da margem negativa some junto: ele existia só para
   furar um padding que já não existe.

   QUEM RECORTA O CANTO É O CONTAINER, e não cada cartão. O `#entGrade` já tem
   `overflow:hidden` com `border-radius:16px`, então o cartão de cima e o de
   baixo ganham a curva de graça, e a borda de 1px do vidro fica de fora — é o
   fio que desenha o contorno.

   `:first-child` FUNCIONA AQUI, e não é sorte: conferido no ar, o cartão "01" é
   mesmo o primeiro filho. O último visível NÃO é `:last-child` — três dos seis
   itens estão na gaveta (`display:none` inline) e dois deles vêm depois do
   dourado. Por isso o de baixo continua sendo apontado pelo `data-campo`. */
#entGrade{ padding:0; }
#entGrade .ent{ padding:22px 30px; }
#entGrade .ent:first-child{ padding-top:32px; }
#entGrade .ent:has([data-campo="entrega.itens[3].titulo"]){
  margin:0;
  padding:22px 30px 32px;
  border-radius:0;
}

/* ---- 3. O VIDRO PARA DE DISTORCER ENQUANTO O ACORDEÃO SE MEXE ------------
   Pedido do Arthur em 2026-09-07: *"a caixa para mostrar resposta tá abrindo de
   forma muito lenta, tá até travando"*.

   O motivo inteiro está no `animacao.js`, na seção 14, junto da função que põe
   e tira esta classe. Em uma linha: o `feDisplacementMap` do filtro cobre o
   cartão todo, e a altura do cartão muda a cada quadro enquanto a resposta
   abre — o navegador refaz o ruído e o deslocamento sessenta vezes por segundo.

   Sai só a distorção. Desfoque, véu e brilho de borda ficam: durante os quatro
   décimos de segundo do movimento, continua sendo vidro. */
#perguntas .env.env--acordeao-mexendo::before{
  filter:none;
}

/* O ARRASTO VERTICAL DOS CARTÕES SAI DE CENA, pelo mesmo motivo do `left` das
   perguntas: ele foi gravado quando havia padding em volta, e sem o padding
   passou a estorvar.

   Medido: os cartões 01 e 02 têm `top:-5px` no `posicoes.json`. Com os 10px do
   container isso não se via; sem eles, o cartão de cima passa 4px ACIMA do topo
   do vidro e o `overflow:hidden` come essa faixa — que é exatamente a "falta de
   preenchimento" que o Arthur fotografou. Entre um cartão e outro os 5px viram
   sobreposição, porque `position:relative` move sem empurrar o vizinho.

   O valor continua gravado: apagando esta regra, o deslocamento volta. A imagem
   do meio fica como está — o `top:-10px` dela só a aproxima do cartão de cima,
   não corta nada, e foi o Arthur que a pôs ali. */
#entGrade > .ent[style*="top"]{
  top:0 !important;
}

/* ==========================================================================
   AJUSTES PEDIDOS EM 2026-09-07
   ========================================================================== */

/* No editor o fundo é referência de composição, então não espera a transição
   da abertura. O JavaScript acende o shader no mesmo momento em que o monta. */
html.modo-edicao .fundo-shader{
  opacity:1;
  transition:none;
}

/* O contorno desenhado pelo Arthur media cerca de 300 × 86 px na largura de
   391 px. O botão cresce só no celular; a versão larga mantém o desenho atual. */
@media (max-width:620px){
  .arraste-receita{
    width:min(300px,calc(100vw - 48px));
    min-height:86px;
    padding:22px 26px;
  }
}

/* Quiet luxury enviado pelo Arthur. Todo seletor começa em #oferta: a paleta
   #F7E6CA, #E8D59E, #D9BBB0 e #AD9C8E não vaza para nenhuma outra seção.
   Os textos usam dois tons escuros derivados da mesma família para continuarem
   legíveis; o tom mais escuro da referência sozinho não tem contraste bastante. */
#oferta .env{
  --destaque:#6B4F43;
  --texto:#4C3A31;
  --suave:#705E46;
  --quente:#D9BBB0;
  --borda:#AD9C8E;
  color:#4C3A31;
}
#oferta .env::before{
  background:
    radial-gradient(circle at 50% 0,rgba(247,230,202,.9),rgba(247,230,202,0) 44%),
    linear-gradient(145deg,#F7E6CA 0%,#E8D59E 52%,#D9BBB0 100%);
  border-color:#AD9C8E;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.58),
             inset 0 -1px 0 rgba(107,79,67,.2),
             0 20px 42px -32px rgba(76,58,49,.72);
}
#oferta .olho{
  color:#4C3A31;
  border-color:#AD9C8E;
  background:#E8D59E;
}
/* O 47 VOLTOU AO VERMELHO em 2026-09-08, a pedido dele: *"nessa parte aí do 47
   eu quero que você bote o mesmo tom de vermelho que estava antes"*. É o
   `#FF4000` da linha 1042, o mesmo laranja-fogo que a página usava antes da
   paleta quiet luxury. Sobre o areia do cartão ele dá 3,05:1 — passa porque o
   número é enorme, e é a mesma conta que valia quando a cor era essa. O título
   da oferta continua no marrom da paleta; ele não pediu os dois. */
#oferta .preco__por{ color:#FF4000; }
/* O "3x" PEQUENO À ESQUERDA DO PREÇO — pedido do Arthur em 2026-10-05, com
   uma foto de referência: um terço do tamanho, na mesma linha de base.

   POR QUE A MARGEM NEGATIVA. O `::before` é inline-block, então assenta na
   linha de base do preço sem conta nenhuma. A `margin-left` igual à largura o
   pendura para fora da caixa do `#ofPor`: a caixa continua do tamanho exato
   de "R$ 31,16", e é ela que as partículas medem para pousar. Se o "3x"
   ocupasse espaço, o número formado pelo pó sairia deslocado do texto real.

   POR QUE SÓ APARECE NO FIM. Durante a revelação a máscara do preço recorta
   tudo fora da caixa, e a classe `parcela-espera` o mantém apagado até o
   `apagarPoeira` tirá-la — aí ele acende em meio segundo. */
#ofPor::before{
  content:attr(data-parcela);
  display:inline-block;
  box-sizing:border-box;
  width:2.6em;
  margin-left:-2.6em;
  padding-right:.35em;
  text-align:right;
  white-space:nowrap;
  font-size:.36em;
  transition:opacity .5s ease;
}
#ofPor.parcela-espera::before{ opacity:0; }
#oferta #ofTitulo{
  color:#6B4F43;
  text-shadow:none;
}
#oferta .preco__par,
#oferta .garantia{
  color:#4C3A31;
  text-shadow:none;
}
#oferta .preco__de{ color:#AD9C8E; }
#oferta .env b[style*="color"]{ color:#6B4F43 !important; }
#oferta .preco__par b[style*="color"]{ color:#4C3A31 !important; }
#oferta #ofBtn{
  background:linear-gradient(135deg,#D9BBB0,#AD9C8E);
  color:#422701;
  border-color:#AD9C8E;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.46),
             0 14px 28px -22px rgba(76,58,49,.7);
}
#oferta #ofBtn .btn__txt{ color:#422701; }
#oferta .selo{
  color:#4C3A31;
  border-color:#AD9C8E;
  background:rgba(232,213,158,.72);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.4);
}

/* ===========================================================================
   O BOTÃO DA OFERTA VIRA VIDRO LÍQUIDO COM BRILHO ATRÁS — 2026-09-07
   ===========================================================================
   Pedido do Arthur, com dois links:

     `21st.dev/@unlumen/components/glow`         — a auréola que gira atrás
     `21st.dev/@suraj-xd/components/liquid-glass` — o vidro

   Do segundo veio SÓ O VIDRO, na letra dele: *"esquece ícone, esquece
   background, use somente o liquid Glass"*. É o mesmo componente que já veste
   o cartão das perguntas desde 2026-09-05, e o filtro SVG `#glass-distortion`
   do `index.html` é reaproveitado inteiro — nada novo entra na página.

   O `glow` é do Unlumen UI (MIT), documentado em
   `ui.unlumen.com/docs/ui/buttons/glow`. Lá ele é React mais a biblioteca
   `motion`, e o que a biblioteca faz é uma coisa só: girar o ângulo de um
   `conic-gradient` desfocado, atrás do botão, em laço linear. Isso é uma
   `@keyframes` de quatro linhas, então nenhuma biblioteca nova foi baixada.
   As cores do autor (#FF5733, #33FF57, #3357FF, #F1C40F) ficaram de fora por
   escolha do Arthur: entrou a paleta cappuccino da própria página.

   POR QUE O BRILHO PRECISA EXISTIR PARA O VIDRO APARECER. O botão fica dentro
   do cartão do preço, e o fundo desse cartão é liso e claro — o gradiente
   cappuccino de `#oferta .env::before`, aqui em cima na linha 2426. Vidro
   sobre fundo liso não mostra nada: o desfoque não tem borda para borrar e a
   distorção não tem desenho para entortar; sobra um retângulo pálido. O brilho
   girando é o que pinta variação atrás do botão, e é ELE que o vidro refrata.
   Neste lugar as duas peças só funcionam juntas.

   O `overflow:hidden` do `.btn` (estilo.css:190) existe para recortar o
   `.btn__brilho`, que neste botão está desligado desde a linha 1105. Aqui ele
   sai, senão o halo morre rente à borda.

   A ORDEM DAS CAMADAS, DE TRÁS PARA A FRENTE:
     ::before      o brilho que gira        z-index 0
     .btn__vidro   desfoque + distorção     z-index 1
     ::after       véu + fio de luz         z-index 2
     .btn__txt     a letra                  z-index 3

   O PULSO DO BOTÃO SAIU JUNTO (animacao.js). Ele escalava o botão sem parar, e
   `backdrop-filter` com filtro SVG em cima de coisa que escala todo quadro faz
   o navegador refazer o desfoque do fundo inteiro 60 vezes por segundo — e
   esta página já tem um desses rodando no cartão das perguntas. Perguntado,
   ele escolheu: *"mantém só da animação nova"*. */
@property --ofbtn-ang{
  syntax:"<angle>";
  initial-value:0deg;
  inherits:false;
}
@keyframes ofbtnGira{ to{ --ofbtn-ang:360deg; } }

#oferta #ofBtn{
  background:transparent;
  border-color:transparent;
  overflow:visible;
  isolation:isolate;
  /* As duas sombras de fora são as do autor do vidro, sem número mudado. */
  box-shadow:0 6px 6px rgba(0,0,0,.2), 0 0 20px rgba(0,0,0,.1);
}

/* Camada 0 — o brilho.
   O `inset` negativo é o que faz o halo passar da borda; o `border-radius`
   maior que o do botão acompanha o vazamento e evita canto quadrado dentro do
   desfoque. `filter:blur` num gradiente parado é pintura de uma vez só: o que
   se anima é a variável do ângulo, e o navegador só repinta esta caixa. */
#oferta #ofBtn::before{
  content:"";
  position:absolute;
  inset:-26px;
  z-index:0;
  border-radius:26px;
  background:conic-gradient(from var(--ofbtn-ang) at 50% 50%,
             #D6B588, #FFE2A9, #705E46, #F5E8D3, #D6B588);
  filter:blur(18px);
  animation:ofbtnGira 6s linear infinite;
  pointer-events:none;
}

/* Camada 1 — a distorção. Desfoque e filtro SVG são a receita do autor do
   `liquid-glass`, com os mesmos números do cartão das perguntas
   (laboratorio.css:2205).

   A TINTA CLARA É A CORREÇÃO DA MEDIDA, e o número saiu de medir, não de gosto.
   Sem ela a letra espresso reprovava por um fio: pior bloco 4,49 contra a régua
   de 4,5. Medido com a letra escondida, blocos de 16 × 16 px sobre a faixa do
   texto, em seis instantes do giro — 4,49 / 4,62 / 4,80 / 4,94 / 9,31 / 9,33.
   Quem derrubava era o taupe #705E46 do brilho passando por baixo da letra: nos
   instantes em que ele cruza, o fundo escurece e o espresso some nele.

   Cor de letra não salva os dois casos, e é a mesma conclusão que o cartão das
   perguntas já tinha registrado na linha 2196: trocando por letra clara, quem
   reprova passa a ser o instante em que o areia claro cruza. O que salva é o
   piso de tinta.

   Com o creme a 34%, remedido em oito instantes: pior bloco 6,63, e nenhum
   instante abaixo de 6,6. É folga bastante para os ângulos que eu não
   fotografei. A tinta divide o elemento com o desfoque e a distorção, então o
   brilho continua se mexendo ATRAVÉS dela — é vidro fumê claro, não vidro
   tapado. */
#oferta #ofBtn .btn__vidro{
  position:absolute;
  inset:0;
  z-index:1;
  border-radius:inherit;
  pointer-events:none;
  -webkit-backdrop-filter:blur(3px);
          backdrop-filter:blur(3px);
  filter:url(#glass-distortion);
  isolation:isolate;
  background:rgba(245,232,211,.34);
}

/* Camadas 2 e 3 no mesmo elemento — o véu é `background` e o fio de luz da
   borda é `box-shadow` interna. Os três números são os do autor. */
#oferta #ofBtn::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:2;
  border-radius:inherit;
  pointer-events:none;
  background:rgba(255,255,255,.25);
  box-shadow:inset 2px 2px 1px 0 rgba(255,255,255,.5),
             inset -1px -1px 1px 1px rgba(255,255,255,.5);
}

#oferta #ofBtn .btn__txt{
  position:relative;
  z-index:3;
  color:#422701;
}

/* SEM `backdrop-filter` NÃO HÁ VIDRO — sobra um botão transparente com o
   cartão aparecendo por baixo da letra. Aí volta inteiro o rosé/greige da
   linha 2453, que é como o botão estava antes deste bloco.

   O BRILHO SAI JUNTO, E ISSO EU DESCOBRI NA TELA, NÃO NO ARQUIVO. A primeira
   escrita deste bloco deixava o brilho ligado, com o argumento de que ele não
   depende de `backdrop-filter`. Fotografado, o botão aparecia LAVADO: sem o
   vidro por cima, o `::before` desfocado cobre o gradiente sólido e apaga o
   botão inteiro.

   E `z-index:-1` no brilho NÃO conserta — testado também. O `#ofBtn` tem
   `isolation:isolate`, então ele é a raiz de um contexto de empilhamento, e a
   ordem de pintura dentro de um contexto começa pelo fundo da PRÓPRIA raiz e só
   depois pinta os filhos de índice negativo. Filho negativo fica acima do fundo
   do pai; não existe índice que o leve para trás sem tirar o `isolation`, e o
   `isolation` é o que segura as camadas do vidro no lugar.

   Como isto é o caminho de navegador velho, o certo é o botão de sempre: sólido,
   legível, sem efeito nenhum. */
@supports not ((backdrop-filter:blur(3px)) or (-webkit-backdrop-filter:blur(3px))){
  #oferta #ofBtn{
    background:linear-gradient(135deg,#D9BBB0,#AD9C8E);
    border-color:#AD9C8E;
    box-shadow:inset 0 1px 0 rgba(255,255,255,.46),
               0 14px 28px -22px rgba(76,58,49,.7);
  }
  #oferta #ofBtn::before{ content:none; }
  #oferta #ofBtn .btn__vidro{ display:none; }
  #oferta #ofBtn::after{ content:none; }
}

/* Movimento reduzido: o brilho PARA, não some. Botão sem halo nenhum perde a
   marca de onde se clica, e quem pede menos movimento não pediu menos página. */
@media (prefers-reduced-motion:reduce){
  #oferta #ofBtn::before{ animation:none; }
}

/* ===========================================================================
   OS DOIS EFEITOS TROCAM DE BOTÃO — 2026-09-07
   ===========================================================================
   Pedido do Arthur, na letra: *"o efeito que tá no 'aperte o botão' eu quero
   que você mande para o 'quero meu menu hoje' e o efeito que está no 'quero meu
   menu hoje' eu quero que você mande para o 'aperte o botão'"*.

   Então: o METAL LÍQUIDO (Joly UI / paper-shaders) sai do `.arraste-receita` e
   vai para o `#ofBtn`; o VIDRO LÍQUIDO com o brilho girando faz o caminho
   contrário. As duas receitas continuam inteiras, com as mesmas cores e os
   mesmos números — o que muda é em quem elas moram.

   O HTML acompanhou: o `<span>` que hospeda o canvas do shader agora se chama
   `.btn__metal` e mora dentro do `#ofBtn`; o `.arraste-receita` ganhou o
   `.arraste-receita__vidro` no lugar do `.arraste-receita__metal`. E o módulo
   no fim do `index.html` monta o shader no botão novo.

   ---- 1. O "QUERO MEU MENU HOJE" VIRA METAL ------------------------------- */
/* O brilho girando e as camadas de vidro saem daqui. O `::after`, que era o véu
   do vidro, é reaproveitado como o MIOLO do metal — é a mesma peça de sempre
   (uma caixa recuada 2px cobrindo o centro), só que agora com o gradiente do
   botão em vez do véu branco. */
#oferta #ofBtn::before{ content:none; }
.btn__metal{
  position:absolute;
  inset:0;
  z-index:0;
  border-radius:inherit;
  overflow:hidden;
  pointer-events:none;
}
/* Só quando o shader monta de verdade. Sem WebGL2, sem módulo ou com movimento
   reduzido o `data-metal` não entra e o botão continua o rosé/greige sólido. */
#oferta #ofBtn[data-metal]{
  background:transparent;
  border-color:transparent;
  overflow:hidden;          /* o metal é recortado pelo canto do botão */
  box-shadow:none;
}
#oferta #ofBtn[data-metal]::after{
  content:"";
  position:absolute;
  inset:2px;
  z-index:1;
  border-radius:inherit;
  background:linear-gradient(135deg,#D9BBB0,#AD9C8E);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.46);
  pointer-events:none;
}
/* Sem metal, o `::after` do vidro não deve sobrar por cima do botão sólido. */
#oferta #ofBtn:not([data-metal])::after{ content:none; }

/* ---- 1b. O METAL VIRA UM ANEL DE VERDADE — 2026-09-08 -------------------
   O Arthur mandou a foto do botão TOMADO PELO METAL: sem miolo, sem a frase
   "Quero meu menu hoje", só a mancha marrom e branca de ponta a ponta.

   O DESENHO ACIMA DEPENDIA DE ORDEM DE PINTURA, e é aí que ele quebra. O metal
   é um `<canvas>` de WebGL que o paper-shaders deixa em `z-index:-1` dentro do
   `.btn__metal`; ele ocupa o botão INTEIRO, e quem escondia o centro era o
   `::after` (camada 1) com a letra por cima (camada 3). Canvas de WebGL é
   camada de composição do navegador — no Safari do iPhone essa camada sobe
   acima de irmãos que não são compostos, e quando isso acontece o metal cobre
   o miolo E a frase. Foi o que ele fotografou. Aqui no Chrome, no computador e
   no celular emulado, a ordem se comporta e o botão sai certo — por isso o
   defeito não aparece toda vez.

   O CONSERTO TIRA A DEPENDÊNCIA, em vez de brigar com ela: o metal passa a
   EXISTIR só na moldura de 2px, recortado por máscara. Não sobra metal no
   centro para subir por cima de nada. Se a camada subir mesmo assim, ela só
   tem 2px de borda para cobrir, e a frase continua legível.

   A máscara são dois retângulos cheios — um do tamanho do elemento, outro
   recuado pelo `padding` — subtraídos um do outro. Sobra o anel.

   O `@supports` é obrigatório: navegador que entende `mask-image` mas não
   entende `mask-composite` somaria as duas máscaras e voltaria a pintar o
   botão inteiro de metal — exatamente o defeito. Fora do `@supports` nada
   muda, e o `::after` continua fazendo o serviço como fazia.

   E O FUNDO DO BOTÃO GANHOU O MESMO GRADIENTE DO MIOLO. Com o anel recortado,
   o centro passou a mostrar o que estiver embaixo; sem esta linha, seria o
   cartão areia aparecendo através da letra. É a mesma cor do `::after`, então
   o desenho não mudou em lugar nenhum. */
@supports ((-webkit-mask-composite:xor) or (mask-composite:exclude)){
  #oferta #ofBtn[data-metal]{
    background:linear-gradient(135deg,#D9BBB0,#AD9C8E);
  }
  #oferta #ofBtn[data-metal] .btn__metal{
    padding:2px;
    -webkit-mask-image:linear-gradient(#000,#000), linear-gradient(#000,#000);
            mask-image:linear-gradient(#000,#000), linear-gradient(#000,#000);
    -webkit-mask-clip:content-box, border-box;
            mask-clip:content-box, border-box;
    -webkit-mask-repeat:no-repeat, no-repeat;
            mask-repeat:no-repeat, no-repeat;
    -webkit-mask-composite:xor;
            mask-composite:exclude;
  }
}

/* ---- 2. O "APERTE O BOTÃO" VIRA VIDRO LÍQUIDO ---------------------------
   A receita é a mesma do `#ofBtn` de antes, e a mesma do cartão das perguntas:
   brilho cappuccino girando atrás, desfoque de 3px com o filtro SVG, piso de
   creme para a letra não sumir, e o véu com os dois fios de luz do autor.

   AQUI O PISO DE CREME NÃO SERVE, e a medida é que diz: a letra deste botão é
   `var(--texto)`, que é o creme claro — o contrário da letra espresso do botão
   da oferta. Piso claro sob letra clara apaga a frase. O piso aqui é ESPRESSO,
   pelo mesmo raciocínio do cartão das perguntas (laboratorio.css:2196): o que
   passa atrás é fundo animado, nenhuma cor de letra atende claro e escuro, e
   só um piso de tinta atende. O número está medido no comentário da regra. */
.arraste-receita{
  background:transparent;
  border-color:transparent;
  overflow:visible;
  -webkit-backdrop-filter:none;
          backdrop-filter:none;
  box-shadow:0 6px 6px rgba(0,0,0,.2), 0 0 20px rgba(0,0,0,.1);
}
.arraste-receita::before{
  content:"";
  position:absolute;
  inset:-22px;
  z-index:0;
  border-radius:999px;
  background:conic-gradient(from var(--ofbtn-ang) at 50% 50%,
             #D6B588, #FFE2A9, #705E46, #F5E8D3, #D6B588);
  filter:blur(16px);
  animation:ofbtnGira 6s linear infinite;
  pointer-events:none;
}
/* SEM TINTA NESTA CAMADA, e o motivo é o mesmo do cartão das perguntas: quem
   leva o `feDisplacementMap` fica com a borda roída, porque o pixel que deveria
   vir de fora da caixa não existe. A tinta mora no `::after`, logo abaixo. */
.arraste-receita__vidro{
  position:absolute;
  inset:0;
  z-index:1;
  border-radius:inherit;
  pointer-events:none;
  -webkit-backdrop-filter:blur(3px);
          backdrop-filter:blur(3px);
  filter:url(#glass-distortion);
  isolation:isolate;
}
.arraste-receita::after{
  content:"";
  position:absolute;
  inset:0;
  z-index:2;
  border-radius:inherit;
  pointer-events:none;
  background:linear-gradient(rgba(255,255,255,.12),rgba(255,255,255,.12)),
             rgba(43,27,13,.55);
  box-shadow:inset 2px 2px 1px 0 rgba(255,255,255,.5),
             inset -1px -1px 1px 1px rgba(255,255,255,.5);
}
/* A LETRA VIRA CREME, e não é escolha de gosto: com a tinta espresso a 55% por
   baixo, a letra espresso que estava aqui ficava escuro sobre escuro. É o mesmo
   par do cartão das perguntas — tinta escura, letra creme, halo escuro atrás —
   e por isso nenhuma cor nova entra na página. */
.arraste-receita__rotulo{
  position:relative;
  z-index:3;
  color:var(--cap-creme);
  /* o mesmo halo do cartão das perguntas, e pelo mesmo motivo: o fundo que
     passa por trás muda de claro para escuro e a letra carrega o próprio
     contraste junto */
  text-shadow:0 1px 2px rgba(20,10,4,.95),
              0 0 12px rgba(20,10,4,.8),
              0 0 24px rgba(20,10,4,.55);
}
.arraste-receita__destino{ position:relative; z-index:3; }
/* Sem `backdrop-filter` não há vidro: volta o botão de antes, sólido, e o
   brilho sai junto — pelo mesmo motivo medido no botão da oferta (filho de
   índice negativo não vai para trás do fundo do pai). */
@supports not ((backdrop-filter:blur(3px)) or (-webkit-backdrop-filter:blur(3px))){
  .arraste-receita{
    background:linear-gradient(145deg,rgba(255,255,192,.11),rgba(37,57,60,.5));
    border-color:rgba(255,255,192,.34);
  }
  .arraste-receita::before,
  .arraste-receita::after{ content:none; }
  .arraste-receita__vidro{ display:none; }
  .arraste-receita__rotulo{ text-shadow:none; }
}
@media (prefers-reduced-motion:reduce){
  .arraste-receita::before{ animation:none; }
}

/* ===========================================================================
   O VIDRO DAS PERGUNTAS PASSA A VESTIR TODOS OS BALÕES — 2026-09-07
   ===========================================================================
   Pedido do Arthur: *"esse mesmo padrão de liquid Glass que está na parte de
   perguntas, você deve aplicar em todos os liquid glass da página, eu gostei
   bastante desse efeito de transparência da aba de perguntas que dá para ver o
   background"*.

   A RECEITA É A MESMA, LETRA POR LETRA: desfoque de 3px, o filtro SVG
   `#glass-distortion`, tinta espresso a 55%, véu branco a 12%, os dois `inset`
   de luz do autor e as duas sombras de fora. Nada foi reajustado por seção.

   DUAS COISAS FICARAM DE FORA, E NÃO POR ESQUECIMENTO:

     - **o cartão do topo** é cappuccino sólido por escolha dele, de 2026-09-05,
       e é onde a abertura termina — vidro ali desmancharia a cena;
     - **o cartão da oferta** é a "quiet luxury" que ele mandou aplicar hoje de
       manhã, com o branco/areia que cresce em volta do preço. Trocar por vidro
       apaga aquele pedido, e um pedido não desfaz o outro sem ele dizer.

   AS PEÇAS PEQUENAS TAMBÉM NÃO ENTRARAM — `.selo`, `.olho`, `.livre__item`,
   `.ent`, `.card`, `.fonte`, `footer`. **É custo, e o custo já está medido neste
   projeto:** cada `filter:url(#glass-distortion)` é uma passada de deslocamento
   sobre a caixa inteira, e a seção 23.3 da ficha registra que UMA delas já
   custava quadros no celular. São mais de 40 dessas peças na página. Elas
   continuam com o vidro simples de desfoque, que é barato e do mesmo tom.

   ---- A ESTRUTURA, IGUAL À DAS PERGUNTAS -----------------------------------
   Camada 1 (`::before`)  desfoque + distorção, sem tinta — a distorção rói a
                          borda, e por isso ela fica na camada sem cor.
   Camada 2 (`::after`)   tinta espresso + véu branco + os dois fios de luz.
   O conteúdo             sobe para o `z-index` 2.

   As camadas cobrem o cartão inteiro e ficam estáticas. */
#rigor .env,
#trocas .env,
#livre .env,
#problema .env,
#entrega .env{
  position:relative;
  isolation:isolate;
  background:transparent;
  border-color:transparent;
  -webkit-backdrop-filter:none;
          backdrop-filter:none;
  box-shadow:0 6px 6px rgba(0,0,0,.2), 0 0 20px rgba(0,0,0,.1);
}
#rigor .env::before, #rigor .env::after,
#trocas .env::before, #trocas .env::after,
#livre .env::before, #livre .env::after,
#problema .env::before, #problema .env::after,
#entrega .env::before, #entrega .env::after{
  content:"";
  position:absolute;
  inset:0;
  border-radius:inherit;
  pointer-events:none;
}
#rigor .env::before,
#trocas .env::before,
#livre .env::before,
#problema .env::before,
#entrega .env::before{
  z-index:0;
  -webkit-backdrop-filter:blur(3px);
          backdrop-filter:blur(3px);
  filter:url(#glass-distortion);
  isolation:isolate;
}
#rigor .env::after,
#trocas .env::after,
#livre .env::after,
#problema .env::after,
#entrega .env::after{
  z-index:1;
  background:linear-gradient(rgba(255,255,255,.12),rgba(255,255,255,.12)),
             rgba(43,27,13,.55);
  box-shadow:inset 2px 2px 1px 0 rgba(255,255,255,.5),
             inset -1px -1px 1px 1px rgba(255,255,255,.5);
}
/* O conteúdo por cima das duas camadas. Sem isto o texto fica ATRÁS do véu:
   filho não posicionado é pintado antes de pseudo-elemento posicionado. */
#rigor .env > *,
#trocas .env > *,
#livre .env > *,
#problema .env > *,
#entrega .env > *{ position:relative; z-index:2; }

/* O `#entrega .env` tinha `overflow:hidden` para recortar a grade dos cartões.
   Ele sai: com ele, as peças que o Arthur arrastou para fora do cartão pelo
   editor somem — é a mesma armadilha escrita no comentário do cartão das
   perguntas. Quem segura o canto das camadas é o `border-radius:inherit`. */
#entrega .env{ overflow:visible; }

/* Sem `backdrop-filter` não há vidro: volta o cappuccino opaco que estes
   cartões tinham, e com ele as bordas e a sombra de sempre. */
@supports not ((backdrop-filter:blur(3px)) or (-webkit-backdrop-filter:blur(3px))){
  #rigor .env, #trocas .env, #livre .env, #problema .env, #entrega .env{
    background:linear-gradient(145deg,rgba(214,181,136,.96),rgba(198,192,185,.92) 58%,rgba(214,181,136,.9));
    border-color:rgba(66,39,1,.5);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.34),inset 0 -1px 0 rgba(66,39,1,.2),0 22px 48px -32px rgba(43,27,13,.82);
  }
  #rigor .env::before, #rigor .env::after,
  #trocas .env::before, #trocas .env::after,
  #livre .env::before, #livre .env::after,
  #problema .env::before, #problema .env::after,
  #entrega .env::before, #entrega .env::after{ content:none; }
}

/* ---- O HALO ESCURO ATRÁS DA LETRA, NOS BALÕES NOVOS ----------------------
   É a mesma receita do cartão das perguntas, e existe pelo mesmo motivo: o que
   passa atrás do vidro é o halftone, claro e quente, e a letra é creme. Medido
   com o texto escondido, blocos de 16 × 16 px, só a área interna do cartão da
   entrega (980 × 620 px, recuando 70px de cada lado para o canto arredondado
   não entrar na conta): **pior bloco 4,65, melhor 11,33, média 9,14**. A régua
   é 4,5 — passa, mas por pouco, e o halftone não é igual em toda a página.

   ARMADILHA DE MEDIÇÃO ANOTADA AQUI PORQUE CUSTOU UMA RODADA: medindo o cartão
   inteiro, o pior bloco dava 3,88 e subir a tinta de 55% para 70% não mudava
   nada (3,81 / 3,87 / 3,79). O bloco ruim estava no CANTO ARREDONDADO, fora do
   vidro, lendo o fundo da página. **Cartão com canto redondo tem de ser medido
   por dentro**, senão a medida acusa um defeito que não existe e esconde o que
   existe.

   O halo não conta na régua da WCAG — ela mede cor de texto contra cor de fundo
   e não sabe o que é sombra. Ele está aqui pelo mesmo motivo que a legenda de
   vídeo existe: sob o mesmo texto claro passa trecho claro e trecho escuro. */
#rigor .env h2, #rigor .env .sub, #rigor .env p,
#trocas .env h2, #trocas .env .sub, #trocas .env p,
#livre .env h2, #livre .env .sub, #livre .env p,
#problema .env h2, #problema .env .sub, #problema .env p,
#entrega .env h2, #entrega .env .sub, #entrega .env p{
  text-shadow:0 1px 2px rgba(20,10,4,.95),
              0 0 12px rgba(20,10,4,.8),
              0 0 24px rgba(20,10,4,.55);
}
/* Sem vidro o cartão é cappuccino opaco com texto escuro, e halo escuro atrás
   de letra escura vira borrão. */
@supports not ((backdrop-filter:blur(3px)) or (-webkit-backdrop-filter:blur(3px))){
  #rigor .env h2, #rigor .env .sub, #rigor .env p,
  #trocas .env h2, #trocas .env .sub, #trocas .env p,
  #livre .env h2, #livre .env .sub, #livre .env p,
  #problema .env h2, #problema .env .sub, #problema .env p,
  #entrega .env h2, #entrega .env .sub, #entrega .env p{ text-shadow:none; }
}

/* ===========================================================================
   PALETAS PEDIDAS PELO ARTHUR — 2026-09-07

   As três áreas usam o mesmo desenho de vidro, mas cada uma ganha a família
   cromática da referência enviada. O cartão 03 da entrega usa Honeycomb.
   =========================================================================== */

/* ---- INTOLERÂNCIA ALIMENTÍCIA — SPICED MOCHA ----------------------------
   #6F4E37 taupe, #D47E30 laranja, #F5F5DC creme e #6D3B07 espresso. */
#trocas .env{
  color:#6D3B07;
  border-color:rgba(109,59,7,.46);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.72),inset 0 -1px 0 rgba(109,59,7,.2),0 22px 48px -32px rgba(109,59,7,.58);
}
#trocas .env::after{
  background:linear-gradient(135deg,rgba(245,245,220,.8),rgba(245,245,220,.72) 58%,rgba(111,78,55,.24));
  box-shadow:inset 2px 2px 1px 0 rgba(255,255,255,.72),inset -1px -1px 1px 1px rgba(109,59,7,.22);
}
#trocas .env h2,
#trocas .env .sub,
#trocas .troca__nota{
  color:#6D3B07;
  text-shadow:none;
}
#trocas .olho{
  background:#6D3B07;
  border-color:rgba(109,59,7,.72);
  color:#D47E30;
}
#trocas #trocaCaixa{
  background:linear-gradient(145deg,#6F4E37,#6D3B07);
  border-color:rgba(245,245,220,.58);
  color:#F5F5DC;
  box-shadow:inset 0 1px 0 rgba(245,245,220,.2),0 16px 34px -26px rgba(109,59,7,.84);
}
#trocas .troca__linha{
  color:#F5F5DC;
  border-top-color:rgba(245,245,220,.45);
  text-shadow:none;
}
#trocas .troca__linha::before,
#trocas .troca__kcal{ color:#D47E30; }
#trocas .troca__tipo{ color:rgba(245,245,220,.8); }
#trocas #trocaTexto b[style*="color"],
#trocas #trocaNota b[style*="color"]{ color:#6D3B07 !important; }

/* ---- REFEIÇÃO LIVRE — FRESH PEACH ---------------------------------------
   #FFD3AC pêssego claro, #FFB5AB rosa, #E39A7B salmão e #DBB06B dourado. */
#livre .env{
  color:#5A2F26;
  border-color:rgba(219,176,107,.7);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.72),inset 0 -1px 0 rgba(90,47,38,.18),0 22px 48px -32px rgba(90,47,38,.58);
}
#livre .env::after{
  background:linear-gradient(135deg,rgba(255,211,172,.88),rgba(255,181,171,.8) 65%,rgba(227,154,123,.3));
  box-shadow:inset 2px 2px 1px 0 rgba(255,255,255,.72),inset -1px -1px 1px 1px rgba(90,47,38,.2);
}
#livre .olho{
  background:#DBB06B;
  border-color:rgba(90,47,38,.58);
  color:#5A2F26;
}
#livre h2,
#livre .sub,
#livre .moderado__t,
#livre .moderado p{
  color:#5A2F26;
  text-shadow:none;
}
#livre .sub b[style*="color"]{ color:#5A2F26 !important; }
#livre #livreItens{
  background:linear-gradient(145deg,#FFD3AC,#FFB5AB);
  border-color:rgba(90,47,38,.42);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.72),0 10px 24px -18px rgba(90,47,38,.68);
}
#livre #livreItens .livre__item{
  color:#5A2F26;
  border-top-color:rgba(90,47,38,.3);
  text-shadow:none;
}
#livre .moderado{
  background:linear-gradient(145deg,#E39A7B,#DBB06B);
  border-color:rgba(90,47,38,.46);
  color:#5A2F26;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.54),0 12px 28px -20px rgba(90,47,38,.64);
}
#livre .moderado__t{
  background:rgba(90,47,38,.08);
  border-bottom-color:rgba(90,47,38,.36);
}

/* ---- NÃO DESISTA DA SUA META — CAPPUCCINO --------------------------------
   Trocada em 2026-09-08 a pedido do Arthur, com a foto da seção e a foto da
   paleta lado a lado: era "Spiced Chai" (#DFDBD4, #D47E30, #8D5A2B, #825E34) e
   passou a ser a Cappuccino, que é a paleta que manda no resto da página:

     #D6B588 areia   #C6C0B9 greige   #705E46 taupe   #422701 espresso

   O GRIFO É MEL (#FFE2A9) E NÃO AREIA, e a diferença é medida: sobre o taupe
   das caixas, o areia dá 3,4:1 e o grifo é negrito de 19px, que pede 4,5. O mel
   dá 4,8. O areia continua na paleta, só não serve para letra sobre taupe. */
#problema .env{
  color:var(--cap-espresso);
  border-color:rgba(66,39,1,.46);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.76),inset 0 -1px 0 rgba(66,39,1,.2),0 22px 48px -32px rgba(66,39,1,.58);
}
#problema .env::after{
  background:linear-gradient(135deg,rgba(198,192,185,.96),rgba(198,192,185,.9) 58%,rgba(214,181,136,.34));
  box-shadow:inset 2px 2px 1px 0 rgba(255,255,255,.76),inset -1px -1px 1px 1px rgba(66,39,1,.22);
}
#problema #problemaTitulo{
  color:var(--cap-espresso);
  text-shadow:none;
}
#problema #problemaTexto,
#problema .balao{
  background:linear-gradient(145deg,#705E46,#5B4A36);
  border-color:rgba(245,232,211,.58);
  color:var(--cap-creme);
  box-shadow:inset 0 1px 0 rgba(245,232,211,.2),0 16px 34px -26px rgba(66,39,1,.84);
  text-shadow:none;
}
#problema .olho{
  background:var(--cap-espresso);
  border-color:rgba(66,39,1,.72);
  color:var(--cap-areia);
}
#problema #problemaTexto b[style*="color"],
#problema .balao b[style*="color"]{ color:var(--cap-mel) !important; }
#problema .balao::before{ background:var(--cap-areia); }

/* No cartão Honeycomb da entrega sai o halo que vinha da regra comum dos
   textos e deixava a frase com aspecto borrado. */
#entGrade .ent:has([data-campo="entrega.itens[3].titulo"]) .ent__t,
#entGrade .ent:has([data-campo="entrega.itens[3].titulo"]) .ent__x{
  text-shadow:none;
}

/* Com fundo claro, a sombra global das caixas novas não acrescenta contraste;
   apenas suja a letra. */
#trocas .env h2, #trocas .env p,
#livre .env h2, #livre .env p,
#problema .env h2, #problema .env p{ text-shadow:none; }
#livre .env .sub{ text-shadow:none; }

/* Fallback sem backdrop-filter: a mesma paleta continua visível sem vidro. */
@supports not ((backdrop-filter:blur(3px)) or (-webkit-backdrop-filter:blur(3px))){
  #trocas .env{ background:linear-gradient(135deg,#F5F5DC,#6F4E37); }
  #livre .env{ background:linear-gradient(135deg,#FFD3AC,#FFB5AB); }
  #problema .env{ background:linear-gradient(135deg,#C6C0B9,#705E46); }
}

/* ===========================================================================
   O BOTÃO FIXO GANHA A BORDA COM A BOLINHA QUE CORRE — 2026-09-08
   ===========================================================================
   Pedido do Arthur, com o link: *"nesse botão aí que fica disponível a partir
   de um determinado ponto da página eu quero que você aplique esse layout"* —
   `21st.dev/@minhxthanh/components/moving-dot-card`.

   DE ONDE VEIO. O código está atrás de login no 21st.dev; isto saiu do pacote
   público da prévia (`cdn.21st.dev/minhxthanh/moving-dot-card/default/
   bundle.1747715829045.html`), lido no navegador. É o mesmo caminho já anotado
   no projeto para o vidro líquido, e o carimbo de tempo do arquivo só aparece
   no `src` do `<iframe>` da página do componente.

   O TRUQUE DO AUTOR, e é só isso: a caixa de fora tem 1px de recuo e um fundo
   em gradiente — é ela que vira a "borda". O conteúdo é uma caixa própria por
   cima, cobrindo tudo menos esse 1px. E uma bolinha de 5px, com brilho, corre
   por dentro do recuo em laço de 6 segundos. **Não existe borda animada: existe
   um fundo aparecendo por 1px.**

   O QUE MUDOU DO ORIGINAL, e cada mudança tem motivo:

     - **as cores.** O original é branco sobre quase-preto. Aqui entram a areia,
       o mel e o espresso da paleta Cappuccino — nenhuma cor nova na página.
     - **os passos da bolinha.** O autor escreveu `35px` e `30px` para um cartão
       de 300 × 250. Este botão é uma barra larga e baixa, então os passos
       viraram recuos de 6px, medidos da borda, e o caminho é o mesmo.

   RESSALVA MEDIDA: a bolinha anda por `top`/`right`, e não por `transform`.
   É o que o autor faz, e cada quadro pede um cálculo de posição do navegador —
   o contrário da regra do resto deste arquivo, que só anima `transform` e
   `opacity`. Fica assim porque é UMA caixa de 5px e ela só existe enquanto a
   barra está na tela; se um dia isso pesar no celular, o caminho é trocar por
   `offset-path` com `offset-distance`, que anda no compositor. */
#compraFixa{
  padding:1px;
  border-radius:16px;
  background:radial-gradient(230px at 0 0, var(--cap-areia), var(--cap-espresso));
  /* recorta a bolinha no canto: sem isto ela some por baixo da barra ao dobrar */
  overflow:hidden;
}
#compraFixa .pontoCorrendo{
  position:absolute;
  z-index:2;
  width:5px;
  aspect-ratio:1/1;
  border-radius:100px;
  background:var(--cap-creme);
  box-shadow:0 0 10px var(--cap-mel), 0 0 20px rgba(255,226,169,.6);
  top:6px; right:6px;
  animation:pontoCorre 6s linear infinite;
  pointer-events:none;
}
@keyframes pontoCorre{
  0%,100%{ top:6px; right:6px; }
  25%    { top:6px; right:calc(100% - 11px); }
  50%    { top:calc(100% - 11px); right:calc(100% - 11px); }
  75%    { top:calc(100% - 11px); right:6px; }
}
/* O botão é a caixa de dentro: ele cobre tudo menos o 1px de recuo, e é esse
   1px que se lê como borda. O canto é 1px menor que o de fora, como no autor. */
#compraFixa .btn{
  position:relative;
  z-index:1;
  border-radius:15px;
  border:0;
}
/* Movimento reduzido: a bolinha para no canto de onde saiu. Ela some não —
   o fio de luz dela é parte do desenho da borda. */
@media (prefers-reduced-motion:reduce){
  #compraFixa .pontoCorrendo{ animation:none; }
}

/* A altura do FAQ varia durante cada clique. Manter o filtro SVG desligado
   evita desmontar/remontar a camada em toda abertura. O vidro continua aqui. */
#perguntas .env::before{
  filter:none;
}
/* No celular, seis grandes mapas de distorcao sobre o fundo animado custam
   demais. Preservar tinta, transparencia, bordas e um unico desfoque por bloco. */
@media (max-width:859px){
  :is(#rigor,#trocas,#livre,#problema,#entrega) .env::before{ filter:none; }
  #oferta .env::before{
    -webkit-backdrop-filter:none;
    backdrop-filter:none;
  }
  :is(#rigor,#trocas,#livre,#problema,#entrega,#perguntas) .env
    :is(.card,.fonte,.ent,.troca,.livre__item,.moderado,.faq__i){
    -webkit-backdrop-filter:none;
    backdrop-filter:none;
  }
}

/* ===========================================================================
   A BARRA DE COMPRA NO MODELO "GLASSMORPHISM CTA" — 2026-09-08
   ===========================================================================
   Pedido do Arthur, com o link na mão: *"esse botão de quero comprar hoje eu
   quero que você substitua pelo modelo do link
   https://21st.dev/@mengto/components/glassmorphism-cta"*.

   O CÓDIGO DO AUTOR NÃO ESTÁ PÚBLICO: o registro do 21st.dev responde
   `authentication required`, e a página do ThreeUI só mostra o exemplo de uso.
   O que existe aberto é a prévia — a foto e o vídeo de demonstração. Então isto
   não é cópia de arquivo nenhum: é o desenho lido no vídeo, quadro a quadro, e
   escrito aqui em CSS comum. Nada foi baixado e nenhuma biblioteca entrou.

   O QUE O MODELO TEM, e o que veio para cá:

   | peça do modelo            | aqui |
   |---|---|
   | pílula de vidro escuro    | sim — espresso a 78% com desfoque atrás |
   | selo redondo à esquerda   | sim — a coxa da abertura, que já é do site |
   | frase em negrito no meio  | sim, em Manrope 800 |
   | faísca redonda à direita  | sim, em SVG desenhado aqui |
   | halo difuso em volta      | sim, na sombra externa da caixa de fora |
   | luz correndo pela borda   | **já existia** — é a `.pontoCorrendo` |

   A LUZ DA BORDA NÃO FOI DUPLICADA, e é decisão, não esquecimento. O modelo tem
   um anel cônico girando; esta barra já tem a bolinha do `moving-dot-card`, que
   desde 2026-09-08 também é o indicador de rolagem da página. Duas luzes
   correndo na mesma borda brigam, e a que tem função fica.

   O HALO MORA NA SOMBRA DE `#compraFixa`, e não num filho com `filter:blur`:
   a caixa de fora tem `overflow:hidden` para não deixar a bolinha vazar no
   canto, então qualquer camada com `inset` negativo seria cortada. Sombra não é
   filho — ela passa por cima do recorte. */
#compraFixa{
  box-shadow:0 0 36px -6px rgba(214,181,136,.42),
             0 18px 40px -16px rgba(20,12,0,.9);
}
#compraFixa .btn--cta{
  /* selo | frase | faísca. A frase fica na coluna elástica, então ela continua
     centrada na barra mesmo com as duas peças de tamanhos diferentes. */
  display:grid;
  grid-template-columns:auto 1fr auto;
  align-items:center;
  gap:12px;
  padding:8px 10px;
  min-height:62px;
  background:transparent;
  border:0;
  overflow:visible;
  text-shadow:none;
  /* O fio claro por dentro e a sombra de assentar. O halo já saiu na caixa de
     fora, então aqui só ficam as duas de contato. */
  box-shadow:inset 0 1px 0 rgba(245,232,211,.26),
             inset 0 -1px 0 rgba(0,0,0,.42);
}

/* O vidro é um filho, e não o fundo do próprio link, por um motivo de ordem de
   pintura: o fundo do elemento sempre fica embaixo de todos os filhos, e o selo
   precisa de um `box-shadow` que se espalhe POR CIMA do vidro. Sendo os dois
   filhos, basta o `z-index`. */
#compraFixa .cta__vidro{
  position:absolute;
  inset:0;
  z-index:0;
  border-radius:inherit;
  pointer-events:none;
  background:rgba(66,39,1,.78);
  -webkit-backdrop-filter:blur(14px) saturate(1.3);
          backdrop-filter:blur(14px) saturate(1.3);
  box-shadow:inset 0 0 0 1px rgba(245,232,211,.2);
}

/* O selo. No modelo é uma foto de rosto; aqui é a coxa da abertura — a mesma
   imagem que a página já carrega, então não entra arquivo novo. O anel claro em
   cima e a sombra embaixo são o que dá o relevo de "botão dentro do botão". */
#compraFixa .cta__selo{
  position:relative;
  z-index:2;
  width:44px;
  height:44px;
  border-radius:50%;
  display:grid;
  place-items:center;
  overflow:hidden;
  background:radial-gradient(circle at 50% 32%, #6B4A12, #2A1900 72%);
  box-shadow:inset 0 0 0 1px rgba(245,232,211,.46),
             inset 0 7px 11px -7px rgba(255,255,255,.8),
             0 3px 7px rgba(0,0,0,.5);
}
#compraFixa .cta__selo img{
  width:32px;
  height:auto;
  display:block;
  /* a foto nasce com sombra própria; o filtro devolve o brilho dela sobre o
     fundo escuro do selo */
  filter:drop-shadow(0 1px 2px rgba(0,0,0,.55));
}

/* O SELO DA DIREITA É O GARFO DA ABERTURA, e não mais a faísca do modelo —
   ordem do Arthur em 2026-09-08: *"substitua esse brilho aí que tá do lado
   direito, coloca o mesmo garfo da introdução"*.

   Com isso os dois selos do botão passam a ser o par da cena de entrada: a coxa
   de um lado, o garfo do outro. A faísca era um desenho sem parentesco com nada
   da página; o garfo já é da casa.

   O CÍRCULO CONTINUA MAIS CLARO QUE O DA COXA, de propósito. O da esquerda é o
   selo principal, escuro e fundo; este é o eco dele. Fossem iguais, o botão
   ficaria com dois pesos disputando as pontas e a frase do meio perderia. */
#compraFixa .cta__faisca{
  position:relative;
  z-index:2;
  width:38px;
  height:38px;
  border-radius:50%;
  display:grid;
  place-items:center;
  overflow:hidden;
  background:rgba(245,232,211,.13);
  box-shadow:inset 0 0 0 1px rgba(245,232,211,.24);
}
/* O GARFO DO SELO É UM ARQUIVO PRÓPRIO, e não a foto da abertura direto.
   `imagens/abertura-garfo-selo.webp` — 52 × 344, 7,9 kB. É a MESMA foto: o que
   mudou foi recorte e giro, feitos uma vez com o ffmpeg em vez de a cada
   carregamento no navegador.

   POR QUE NÃO DEU PARA USAR A ORIGINAL. Ela é 480 × 373 e o garfo ocupa só
   240 × 277 dentro dela — medido pelo canal de transparência. Num círculo de
   38px, o resto vira margem vazia e o garfo sai com 15px de sliver, que foi o
   que apareceu na primeira tentativa: um risco no lugar de um talher.

   E O GIRO EM CSS PIORAVA. O eixo dentes→cabo da foto está a 50,1° (o mesmo
   número que a cena de entrada usa no `GIRO_GARFO`), então `rotate(-50deg)`
   deixava o garfo DEITADO — a conta certa era +39,9°, para o cabo apontar para
   baixo. Girar no arquivo resolve os dois de uma vez: o recorte fica justo
   DEPOIS do giro, e sobra imagem no lugar de margem. */
#compraFixa .cta__faisca img{
  width:auto;
  height:30px;
  display:block;
  /* NA DIAGONAL, E NÃO EM PÉ — ordem do Arthur em 2026-09-08. O arquivo nasceu
     em pé (o giro de +39,9° foi feito no próprio webp), então a diagonal é um
     giro a mais, e ele mora aqui: -32° levam os dentes para a esquerda e o cabo
     para baixo e para a direita. É o espelho da coxa do outro selo, que aponta
     de baixo-esquerda para cima-direita.

     CABE NO CÍRCULO, medido: a foto é 52 × 344 e sai com 4,5 × 30 na tela; a
     32°, a caixa girada mede 20,8 × 27,8 e o canto mais distante fica a 17,3px
     do centro, dentro do raio de 19. Passar de -40° começa a raspar o
     `overflow:hidden` do selo. */
  transform:rotate(-32deg);
  /* Um toque de brilho, e é para emparelhar com o outro selo: a coxa é laranja
     e salta sozinha, o garfo é prata escura sobre marrom escuro. Sem isto os
     dois selos têm pesos diferentes e o da direita some no vidro. */
  filter:brightness(1.14) drop-shadow(0 1px 2px rgba(0,0,0,.5));
}

/* A FRASE É MANROPE 800, E NÃO A PRATA DA PÁGINA. Aqui a serifada não serve:
   ela é a letra de leitura do site, e este é o único lugar em que a página
   grita. É a mesma escolha do modelo, que usa uma sem-serifa pesada.
   O `!important` existe por causa da regra de paleta da linha 1934, que pinta
   `#compraFixa .btn .btn__txt` de espresso — cor escura sobre vidro escuro. */
#compraFixa .btn--cta .btn__txt{
  position:relative;
  z-index:2;
  color:#F5E8D3 !important;
  font:800 17px/1.15 "Manrope",ui-sans-serif,system-ui,sans-serif;
  letter-spacing:-.005em;
  text-align:center;
}

/* Sem `backdrop-filter` não há vidro, e sobra um link transparente com a página
   passando por baixo da letra. Aí volta o botão sólido de sempre. */
@supports not ((backdrop-filter:blur(4px)) or (-webkit-backdrop-filter:blur(4px))){
  #compraFixa .cta__vidro{
    background:linear-gradient(135deg,#3A2200,#57370A);
  }
}

/* ===================================================================== */
/* UM BLOCO SÓ, COM FIO ENTRE AS PARTES — pedido do Arthur em 2026-09-08:
   *"nessa primeira e segunda imagem eu quero que você aplique o mesmo tipo de
   divisória que tá na terceira imagem, que no caso seria um bloco unificado
   porém com separações entre uma coisa e outra"*.

   A terceira imagem é o cartão da fonte ("Tabela TACO"): uma caixa só, o nome
   em cima, um fio de 1px atravessando de ponta a ponta e a descrição embaixo.
   O desenho já existia — o que faltava era apontá-lo para estas duas seções.

   AQUI NÃO ENTRA CAIXA NOVA NO HTML, e é de propósito: o `posicoes.json`
   guarda o que o Arthur arrastou no editor por elemento, e embrulhar dois
   irmãos num `<div>` mudaria de quem cada arrasto é. O bloco nasce só do
   acabamento: o primeiro pedaço arredonda em cima, o último embaixo, os do
   meio ficam retos, e o fio de cada divisória é a borda de baixo do pedaço de
   cima — nunca duas bordas encostadas, que dariam 2px e um degrau de cor.

   O QUE MUDA NA PINTURA. Cada cartão destes é vidro, e vidro tem um fio de luz
   no alto e uma sombra caindo por baixo. Empilhados sem folga, esses dois
   viram sujeira no meio do bloco: o fio de luz do de baixo aparece colado no
   fio da divisória, e a sombra do de cima cai dentro do vizinho translúcido.
   Então o fio de luz fica só no primeiro pedaço e a sombra externa só no
   último. Foi por isso que a lista do problema tinha 10px de folga, e a folga
   agora sai — a explicação antiga continua escrita lá no `estilo.css`. */

/* ---- o rigor: o título e o parágrafo viram um cartão só --------------- */
#rigorTitulo{
  border-radius:14px 14px 0 0;
}
#rigorTexto{
  margin-top:0;
  /* o fio da divisória é a borda de BAIXO do título; repetir a de cima aqui
     daria 2px */
  border-top:0;
  border-radius:0 0 14px 14px;
  /* sem o fio de luz do alto: ele nasceria colado na divisória */
  box-shadow:0 16px 34px -26px rgba(43,27,13,.88);
}

/* ---- o problema: o parágrafo e os três balões viram um cartão só ------- */
#problemaTexto{
  border-radius:14px 14px 0 0;
  /* a barra da esquerda dos balões tem 2px; sem igualar aqui, a lateral do
     bloco fica com um degrau de 1px na altura do parágrafo */
  border-left-width:2px;
  /* o `.sub` traz 17,5px de margem embaixo, e era essa a fresta que sobrava
     entre o parágrafo e o primeiro balão */
  margin-bottom:0;
}
.problema__lista{
  gap:0;
  margin-top:0;
  /* A LARGURA DO BLOCO É A DA LINHA DE LEITURA, e não a da coluna. O
     parágrafo é `.sub`, que para em `60ch` — 814px no computador —, e a lista
     não tinha limite nenhum: os dois pedaços saíam com larguras diferentes e o
     bloco lia como degrau, não como cartão. Medido a 1440: 814 contra 1006.
     A mesma conta entra aqui, e o `font-size` vem junto porque `ch` se mede na
     letra do próprio elemento — sem ele, 60ch daria outro número. Os balões
     têm tamanho próprio, então o texto de dentro não muda. */
  font-size:clamp(16.5px,4.3cqw,19.5px);
  max-width:60ch;
  margin-inline:auto;
}
#problemaLista .balao{
  border-radius:0;
  border-top:0;
  box-shadow:inset 0 -1px 0 rgba(0,0,0,.26);
}
/* O CANTO DE BAIXO VAI NO ULTIMO BALAO QUE SE ENXERGA, e nao no ultimo filho.
   Dois dos tres baloes estao guardados na gaveta (`oculto` no `posicoes.json`),
   e bloco guardado sai com `display:none` — continua sendo filho. Com
   `:last-child` o arredondamento ia para um balao invisivel e o cartao fechava
   em bico, que foi o que o Arthur circulou de vermelho em 2026-09-08. O
   `data-guardado` e escrito pelo `aplicarPosicoes` junto com o `display:none`,
   e a leitura aqui e "nao ha nenhum balao visivel depois de mim". */
#problemaLista .balao:not([data-guardado]):not(:has(~ .balao:not([data-guardado]))){
  border-radius:0 0 14px 14px;
  box-shadow:
    inset 0 -1px 0 rgba(0,0,0,.26),
    0 16px 36px -24px rgba(0,0,0,.85);
}
