/* ==========================================================================
   Protocolo IA para Médicos · MEDUX · Página de vendas
   Recriação de produção do handoff "design_handoff_protocolo_ia_medica"
   ========================================================================== */

/* ---------- Tokens ---------- */
:root{
  /* Fundos */
  --bg:#180f08;
  --bg-card:#20150c;
  --bg-alt:#160d06;
  --bg-dark:#0a0806;

  /* Ouro */
  --gold-deep:#b5771e;
  --gold-honey:#ecc45f;
  --gold-mid:#d69a3c;
  --gold-mid2:#d99a3a;
  --gold-dark:#6e4a12;
  --champagne:#f3d98f;
  --champagne-2:#f7e3a8;
  --label-gold:#e8cf95;
  --label-gold-2:#f0d78c;

  /* Texto */
  --ink-title:#f8eed9;
  --ink-hi:#efe6d2;
  --ink-soft:#e4dcc8;
  --ink-check:#e0d7c0;
  --ink-list:#d8cdb2;
  --ink-lede:#d3c4a6;
  --ink-body:#bdaf90;
  --ink-mut:#a89e83;
  --ink-dim:#8a7f63;
  --ink-faint:#6f6549;
  --ink-footer:#5e5540;
  --on-gold:#1a1206;

  /* Bordas douradas translúcidas */
  --line-12:rgba(214,154,60,0.12);
  --line-15:rgba(214,154,60,0.15);
  --line-20:rgba(214,154,60,0.2);
  --line-22:rgba(214,154,60,0.22);
  --line-25:rgba(214,154,60,0.25);
  --line-28:rgba(214,154,60,0.28);
  --line-30:rgba(214,154,60,0.3);
  --line-40:rgba(214,154,60,0.4);
  --line-45:rgba(214,154,60,0.45);

  /* Gradiente-assinatura */
  --grad-cta:linear-gradient(135deg,#b5771e,#ecc45f);
  --grad-num:linear-gradient(135deg,#f7e3a8,#d99a3a);

  /* Tipografia */
  --font-display:'Saira Condensed',sans-serif;
  --font-body:'Saira',sans-serif;
  --font-mono:'JetBrains Mono',monospace;

  /* Layout */
  --pad-x:clamp(18px,4vw,44px);
  --ease-out:cubic-bezier(.16,.8,.3,1);

  /* Sistema de ritmo vertical (diagramação) — respiro "AR v2" (28/07/2026,
     calibrado nas referências Framer do dono: seções banham em espaço) */
  --space-section:clamp(140px,17vw,250px); /* respiro padrão entre seções */
  --space-act:clamp(190px,24vw,340px);     /* viradas de ato */
  --title-gap:clamp(54px,6.4vw,86px);      /* título → conteúdo */
  --measure:65ch;                          /* medida máxima de leitura */
}

/* ---------- Reset / base ---------- */
*,*::before,*::after{box-sizing:border-box}
html{scroll-behavior:smooth;overflow-x:clip}
body{
  margin:0;
  background:var(--bg);
  color:var(--ink-mut);
  font-family:var(--font-body);
  font-size:16px;
  line-height:1.6;
  min-height:100vh;
  overflow-x:hidden;
  overflow-x:clip; /* não cria scroll container: preserva position:sticky das cenas */
  -webkit-font-smoothing:antialiased;
}
::selection{background:rgba(214,154,60,0.35);color:var(--on-gold)}
img{max-width:100%;display:block}
a{color:inherit}
button{font:inherit}

/* ---------- Keyframes ---------- */
@keyframes pulseRing{0%{transform:scale(1);opacity:.55}70%{transform:scale(1.7);opacity:0}100%{opacity:0}}
@keyframes shimmer{0%{background-position:0% 50%}100%{background-position:200% 50%}}
@keyframes sheen{0%{transform:translateX(-170%) skewX(-18deg)}55%,100%{transform:translateX(240%) skewX(-18deg)}}
@keyframes glowPulse{0%,100%{opacity:.45;transform:translate(-50%,-50%) scale(1)}50%{opacity:.85;transform:translate(-50%,-50%) scale(1.06)}}
@keyframes borderSpin{to{transform:rotate(360deg)}}

/* ---------- Utilitários ---------- */
/* Sistema de 3 larguras: 1180 padrão · 1400 vitrine de posters · 1120 oferta */
.container{width:100%;max-width:1180px;margin:0 auto;padding:0 var(--pad-x)}
.container--1180{max-width:1180px}
.container--1120{max-width:1120px}

/* Canto chanfrado (forma-assinatura). Ajuste com --cut. */
.cut{clip-path:polygon(var(--cut,18px) 0,100% 0,100% calc(100% - var(--cut,18px)),calc(100% - var(--cut,18px)) 100%,0 100%,0 var(--cut,18px))}

/* Moldura com borda em gradiente (wrapper 1px + mesmo chanfro no filho) */
.gframe{background:linear-gradient(160deg,rgba(214,154,60,0.55),rgba(110,74,18,0.2));padding:1px}
.gframe>.gframe-inner{background:var(--bg-card);overflow:hidden}
.gframe,.gframe>.gframe-inner{clip-path:polygon(var(--cut,20px) 0,100% 0,100% calc(100% - var(--cut,20px)),calc(100% - var(--cut,20px)) 100%,0 100%,0 var(--cut,20px))}

/* Texto em gradiente ouro */
.gold-text{
  background:var(--grad-num);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 22px rgba(236,196,95,0.22));
}
.gold-shimmer{
  background:linear-gradient(100deg,#f3d98f,#ecc45f 45%,#f3d98f);
  background-size:220% auto;
  -webkit-background-clip:text;background-clip:text;color:transparent;
  animation:shimmer 6s linear 3; /* brilha na chegada, descansa depois (infinito só no preço) */
  filter:drop-shadow(0 0 20px rgba(236,196,95,0.28));
}
.gold-accent{color:var(--gold-honey)}

/* Rótulos mono / eyebrows */
.mono{font-family:var(--font-mono)}
.eyebrow-pill{
  display:inline-flex;align-items:center;gap:10px;padding:8px 15px;
  border:1px solid var(--line-30);background:rgba(214,154,60,0.06);
  --cut:8px;
}
.eyebrow-pill .dot{width:6px;height:6px;border-radius:50%;background:var(--gold-honey);box-shadow:0 0 10px var(--gold-honey)}
.eyebrow-pill span:not(.dot){font-family:var(--font-mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--label-gold);white-space:nowrap}

/* Botão CTA dourado */
.btn{
  position:relative;overflow:hidden;
  display:inline-flex;align-items:center;justify-content:center;gap:10px;
  padding:18px 38px;
  background:var(--grad-cta);color:var(--on-gold);
  font-family:var(--font-display);font-weight:700;font-size:16px;
  letter-spacing:.07em;text-transform:uppercase;text-decoration:none;
  border:none;cursor:pointer;
  --cut:15px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  box-shadow:0 16px 44px -14px rgba(214,154,60,0.75),0 0 0 1px rgba(214,154,60,0.4),0 0 0 6px rgba(214,154,60,0.07),inset 0 1px 0 rgba(255,255,255,0.3);
  transition:transform .25s,box-shadow .25s;
}
.btn:hover{
  transform:translateY(-2px);
  box-shadow:0 24px 60px -14px rgba(214,154,60,0.95),0 0 0 1px rgba(214,154,60,0.5),0 0 0 8px rgba(214,154,60,0.1),inset 0 1px 0 rgba(255,255,255,0.4);
}
.btn-mag:hover{transform:none} /* o JS magnético é o único dono do transform */
.btn:active{transform:translateY(0) scale(.97);transition-duration:.12s}
.vsl-play:active{transform:scale(.99)}
.btn::after{
  content:"";position:absolute;top:0;left:0;height:100%;width:55%;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.5),transparent);
  transform:translateX(-170%) skewX(-18deg);
  pointer-events:none;z-index:1;
}
/* Sheen: contínuo só nos 2 CTAs de decisão (dessincronizados); nos demais, no hover */
.btn:hover::after{animation:sheen 1.2s ease-in-out 1}
.btn--full::after{animation:sheen 4.2s ease-in-out infinite}
.final-cta .btn::after{animation:sheen 4.2s ease-in-out infinite;animation-delay:2.1s}
.btn--sm{padding:13px 20px;font-size:13px;letter-spacing:.08em;--cut:9px;box-shadow:none}
.btn--sm:hover{transform:translateY(-1px);box-shadow:none}
.btn--md{padding:16px 30px;font-size:15px;letter-spacing:.06em;--cut:13px;box-shadow:none}
.btn--md:hover{transform:translateY(-2px);box-shadow:none}
.btn--full{width:100%;padding:19px 34px;font-size:17px;box-shadow:0 16px 44px -14px rgba(214,154,60,0.85),inset 0 1px 0 rgba(255,255,255,0.3)}
.btn-row{display:flex;justify-content:center}

/* Marca (logo + wordmark) */
.brand{display:flex;align-items:center;gap:11px}
.brand-mark{
  width:32px;height:32px;display:flex;align-items:center;justify-content:center;
  background:var(--grad-cta);color:var(--on-gold);
  font-family:var(--font-display);font-weight:800;font-size:19px;
  --cut:7px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.brand-mark--sm{width:28px;height:28px;font-size:16px;--cut:6px}
.brand-name{font-family:var(--font-display);font-weight:800;letter-spacing:.12em;font-size:19px;color:var(--ink-title)}
.brand-name--sm{font-size:18px}

/* Placeholder de arte final (trocar por <img> na produção) */
.slot{
  position:relative;width:100%;height:100%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  background-color:var(--bg-alt);
  background-image:
    radial-gradient(120% 120% at 50% 0,rgba(181,119,30,0.18),transparent 65%),
    linear-gradient(rgba(214,154,60,0.06) 1px,transparent 1px),
    linear-gradient(90deg,rgba(214,154,60,0.06) 1px,transparent 1px);
  background-size:auto,44px 44px,44px 44px;
}
.slot::before{
  content:"◇";
  font-family:var(--font-display);font-size:30px;color:rgba(236,196,95,0.5);
  text-shadow:0 0 22px rgba(236,196,95,0.35);
}
.slot::after{
  content:attr(data-label);
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.18em;text-transform:uppercase;
  color:var(--ink-faint);text-align:center;padding:0 14px;
}

/* ---------- Fundo global (overlays fixos) ---------- */
.bg-glow{
  position:fixed;inset:0;pointer-events:none;z-index:0;
  background:
    radial-gradient(85% 55% at 50% -8%,rgba(214,154,60,0.16),transparent 60%),
    radial-gradient(120% 90% at 50% 118%,rgba(120,80,20,0.20),transparent 72%);
}
.bg-grid{
  position:fixed;inset:0;pointer-events:none;z-index:1;
  background-image:
    linear-gradient(rgba(214,154,60,0.05) 1px,transparent 1px),
    linear-gradient(90deg,rgba(214,154,60,0.05) 1px,transparent 1px);
  background-size:52px 52px;
  -webkit-mask-image:radial-gradient(130% 100% at 50% 0,#000,transparent 70%);
  mask-image:radial-gradient(130% 100% at 50% 0,#000,transparent 70%);
}

/* ---------- Header fixo + barra de progresso ---------- */
.site-header{
  position:fixed;top:0;left:0;right:0;z-index:60;
  display:flex;align-items:center;justify-content:space-between;
  padding:14px var(--pad-x);
  border-bottom:1px solid transparent;
  transition:background .35s,backdrop-filter .35s,border-color .35s;
}
.site-header.is-scrolled{
  background:rgba(10,8,6,0.85);
  border-bottom-color:var(--line-15);
  -webkit-backdrop-filter:blur(14px);
  backdrop-filter:blur(14px);
}
.progress-bar{
  position:fixed;top:0;left:0;height:2px;width:100%;z-index:70;
  background:linear-gradient(90deg,#b5771e,#f7e3a8);
  box-shadow:0 0 12px rgba(236,196,95,0.75);
  transform:scaleX(0);transform-origin:left center;
  transition:transform .12s linear;
}

/* ---------- Seções (ritmo unificado) ---------- */
.section{position:relative;padding-block:calc(var(--space-section)/2);z-index:2}
.section-title{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(26px,3.8vw,46px);line-height:1.08;
  text-transform:uppercase;color:var(--ink-title);
  text-align:center;margin:0 auto var(--title-gap);max-width:840px;
}
[id]{scroll-margin-top:72px}
#oferta{scroll-margin-top:66px}

/* ---------- Hero ---------- */
.hero{
  position:relative;z-index:3;isolation:isolate;
  min-height:clamp(640px,94vh,980px);
  display:flex;align-items:center;overflow:hidden;
  padding:clamp(116px,15vh,168px) 0 clamp(60px,8vh,110px);
}
.hero-bg{
  position:absolute;inset:0;z-index:0;
  background-image:url("../assets/banner-topo.webp");
  background-size:cover;background-position:74% center;
  background-repeat:no-repeat;
  transform-origin:74% 40%;
  animation:heroZoom 3.2s var(--ease-out) .1s both;
  /* dissolvência na base: começa mais alto e esvai com curva suave,
     uniforme em toda a largura do hero */
  -webkit-mask-image:linear-gradient(to bottom,#000 0%,#000 58%,rgba(0,0,0,.88) 70%,rgba(0,0,0,.6) 80%,rgba(0,0,0,.3) 89%,rgba(0,0,0,.08) 95%,transparent 99%);
  mask-image:linear-gradient(to bottom,#000 0%,#000 58%,rgba(0,0,0,.88) 70%,rgba(0,0,0,.6) 80%,rgba(0,0,0,.3) 89%,rgba(0,0,0,.08) 95%,transparent 99%);
}
/* Em telas 16:9 ou mais largas, mostra a arte inteira (sem corte vertical),
   ancorada à direita — o lado esquerdo escuro funde com o fundo/scrim */
@media (min-aspect-ratio:16/9){
  .hero-bg{background-size:auto 100%;background-position:right center}
}
@keyframes heroZoom{from{scale:1.07}to{scale:1}}
/* Blur progressivo (profundidade de campo): uma cópia desfocada do banner
   dentro de um wrapper com máscara horizontal — cobre só o lado do texto,
   a médica fica nítida à direita. A camada em si herda a dissolvência de
   base do .hero-bg, então some junto com a imagem nítida.
   (filter em camada própria é cacheado; muito mais leve que backdrop-filter) */
.hero-blur-wrap{
  position:absolute;inset:0;z-index:1;
  -webkit-mask-image:linear-gradient(90deg,#000 0%,#000 26%,rgba(0,0,0,.55) 42%,transparent 60%);
  mask-image:linear-gradient(90deg,#000 0%,#000 26%,rgba(0,0,0,.55) 42%,transparent 60%);
}
.hero-bg--blur{filter:blur(9px) saturate(1.03)}
@media (max-width:760px){
  .hero-blur-wrap{
    -webkit-mask-image:linear-gradient(90deg,#000 0%,rgba(0,0,0,.5) 34%,transparent 52%);
    mask-image:linear-gradient(90deg,#000 0%,rgba(0,0,0,.5) 34%,transparent 52%);
  }
  .hero-bg--blur{filter:blur(6px) saturate(1.03)}
}
.hero-scrim-x{
  position:absolute;inset:0;z-index:1;
  background:linear-gradient(90deg,#180f08 0%,rgba(24,15,8,0.9) 18%,rgba(24,15,8,0.46) 40%,rgba(24,15,8,0.06) 58%,rgba(24,15,8,0) 68%);
}
.hero .container{position:relative;z-index:2}
.hero-content{max-width:620px}
.hero-content .eyebrow-pill{margin-bottom:26px}
.hero-title{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(38px,5.6vw,68px);line-height:1.02;letter-spacing:.005em;
  text-transform:uppercase;color:var(--ink-title);
  margin:0 0 24px;text-shadow:0 2px 28px rgba(0,0,0,0.6);
}
.hero-lede{
  font-size:clamp(15px,1.6vw,18px);line-height:1.65;color:var(--ink-lede);
  max-width:520px;margin:0 0 34px;text-shadow:0 1px 14px rgba(0,0,0,0.6);
}
/* Entrada em cascata (aplicada via JS) */
.hero-pre{opacity:0;transform:translateY(26px);filter:blur(6px);
  transition:opacity 1s var(--ease-out),transform 1s var(--ease-out),filter 1s var(--ease-out)}
.hero-pre.hero-in{opacity:1;transform:none;filter:none}

/* ---------- Credibilidade (contadores) ---------- */
.stats-section{position:relative;z-index:3;padding:clamp(24px,4vw,52px) 0}
.stats{
  border:1px solid var(--line-22);
  --cut:20px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  background:linear-gradient(120deg,rgba(181,119,30,0.12),#160d06 62%);
  display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
}
.stat{padding:clamp(26px,3vw,42px) 26px;text-align:center;box-shadow:inset -1px 0 0 var(--line-12)}
.stat:last-child{box-shadow:none}
.stat-num{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(42px,5vw,66px);line-height:1;
}
.stat-label{font-size:13.5px;line-height:1.5;color:var(--ink-mut);margin:12px auto 0;max-width:240px}

/* ---------- VSL ---------- */
.vsl-section{position:relative;padding-block:calc(var(--space-section)/2);z-index:2}
.vsl-eyebrow{display:flex;justify-content:center;margin-bottom:34px}
.vsl-eyebrow span{
  padding:9px 22px;border:1px solid var(--line-40);
  --cut:11px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  font-family:var(--font-display);font-weight:700;font-size:14px;
  letter-spacing:.2em;text-transform:uppercase;color:var(--label-gold);
}
.vsl-wrap{max-width:1080px;margin:0 auto;display:grid;gap:26px}
.vsl-frame{
  background:linear-gradient(160deg,rgba(214,154,60,0.8),rgba(110,74,18,0.3));
  padding:1.5px;--cut:24px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  box-shadow:0 40px 110px -40px rgba(181,119,30,0.6);
}
.vsl-player{
  position:relative;aspect-ratio:16/9;overflow:hidden;
  clip-path:polygon(24px 0,100% 0,100% calc(100% - 24px),calc(100% - 24px) 100%,0 100%,0 24px);
  background:radial-gradient(120% 130% at 50% 0,rgba(181,119,30,0.22),#160d06 60%);
}
.vsl-badge{
  position:absolute;top:16px;left:18px;
  display:inline-flex;align-items:center;gap:8px;padding:6px 12px;
  background:rgba(0,0,0,0.42);border:1px solid var(--line-30);
}
.vsl-badge .dot{width:7px;height:7px;border-radius:50%;background:var(--gold-honey);box-shadow:0 0 8px var(--gold-honey)}
.vsl-badge span:not(.dot){font-family:var(--font-mono);font-size:11px;color:var(--label-gold)}
.vsl-center{position:absolute;inset:0;display:flex;align-items:center;justify-content:center}
.vsl-play{
  position:relative;width:88px;height:88px;border-radius:50%;
  border:1px solid rgba(243,217,143,0.55);background:var(--grad-cta);
  cursor:pointer;display:flex;align-items:center;justify-content:center;
  box-shadow:0 14px 44px -8px rgba(214,154,60,0.8);
  transition:transform .3s;
}
.vsl-play:hover{transform:scale(1.07)}
.vsl-play .ring{position:absolute;inset:-1px;border-radius:50%;border:1px solid rgba(236,196,95,0.6);animation:pulseRing 2.6s ease-out infinite}
.vsl-play .tri{width:0;height:0;border-top:12px solid transparent;border-bottom:12px solid transparent;border-left:21px solid var(--on-gold);margin-left:5px}
.vsl-notes{display:flex;justify-content:space-between;flex-wrap:wrap;gap:18px}
.vsl-notes span{display:inline-flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:11.5px;letter-spacing:.08em;color:var(--ink-dim)}
.vsl-notes b{color:var(--gold-honey);font-weight:400}

/* ---------- Grades de cards ---------- */
/* Colunas explícitas: 3 no desktop, 1 no mobile — nunca 2+1 com card órfão */
.grid,.grid--280{display:grid;gap:22px;grid-template-columns:repeat(3,1fr)}
@media (max-width:939px){.grid,.grid--280{grid-template-columns:1fr}}

/* Cards "Nova era" — arte em retrato 3:3.4 (as imagens já vêm recortadas
   nessa proporção, com o assunto centrado; ver Imagens/ para os originais) */
.era-card .gframe-inner .art{aspect-ratio:3/3.4;overflow:hidden}
.era-card .art img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .6s var(--ease-out)}
@media (hover:hover){.era-card:hover .art img{transform:scale(1.04)}}
.era-card .era-caption{
  padding:22px 22px 20px;border-top:2px solid var(--gold-mid);
  background:linear-gradient(180deg,rgba(214,154,60,0.12),transparent);
}
.era-card .era-caption span{
  font-family:var(--font-display);font-weight:700;font-size:20px;
  text-transform:uppercase;color:var(--ink-title);line-height:1.1;display:block;
}

/* Cards "Por que fazer parte" */
.parte-card{
  border:1px solid var(--line-28);background:var(--bg-card);overflow:hidden;
  --cut:18px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.parte-card .art{aspect-ratio:16/10}
.parte-card .parte-caption{padding:24px}
.parte-card .parte-caption span{
  font-family:var(--font-display);font-weight:700;font-size:19px;
  text-transform:uppercase;color:var(--ink-title);line-height:1.15;display:block;
}

/* Cards "Conquistar" */
.conq-card{
  border:1px solid var(--line-28);background:var(--bg-card);
  --cut:22px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  padding:14px 14px 30px;height:100%;
  transition:border-color .35s,transform .35s;
}
.conq-card:hover{border-color:rgba(236,196,95,0.6)}
.conq-card .art-wrap{
  overflow:hidden;margin-bottom:22px;
  clip-path:polygon(16px 0,100% 0,100% calc(100% - 16px),calc(100% - 16px) 100%,0 100%,0 16px);
}
.conq-card .art{aspect-ratio:16/10}
.conq-card .conq-body{padding:0 14px}
.conq-card h3{
  font-family:var(--font-display);font-weight:800;font-size:23px;
  text-transform:uppercase;color:var(--ink-title);margin:0 0 10px;
}
.conq-card p{font-size:15px;line-height:1.6;color:var(--ink-mut);margin:0}

/* ---------- Urgência ---------- */
.urgencia-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:clamp(30px,4vw,56px);align-items:center;
}
.urgencia-grid h2{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(28px,4vw,52px);line-height:1.02;
  text-transform:uppercase;color:var(--ink-title);margin:0 0 24px;
}
.urgencia-grid p{font-size:16px;line-height:1.65;color:var(--ink-body);margin:0 0 16px}
.urgencia-grid p:last-of-type{margin-bottom:34px}
.urgencia-visual{position:relative}
.urgencia-visual .halo{
  position:absolute;inset:-30px;z-index:0;
  background:radial-gradient(50% 50% at 60% 50%,rgba(181,119,30,0.28),transparent 70%);
}
.urgencia-visual .art{position:relative;z-index:1;aspect-ratio:16/11}

/* ---------- Futuro ---------- */
.futuro-section{position:relative;padding-block:calc(var(--space-section)/2);overflow:hidden;z-index:2}
.futuro-section .halo{
  position:absolute;inset:0;z-index:0;
  background:radial-gradient(50% 70% at 50% 50%,rgba(181,119,30,0.16),transparent 70%);
}
.futuro-stage{position:relative;display:flex;flex-direction:column;align-items:center}
.futuro-hero{
  position:relative;width:100%;display:flex;justify-content:center;align-items:flex-end;
  min-height:clamp(380px,54vw,680px);
}
.futuro-word{
  position:absolute;top:42%;left:50%;
  transform:translate(-50%,calc(-50% + var(--fy,0px)));
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(120px,21vw,320px);line-height:.9;letter-spacing:.02em;
  color:transparent;-webkit-text-stroke:2px rgba(236,196,95,0.5);
  text-shadow:0 0 60px rgba(214,154,60,0.4),0 0 150px rgba(236,196,95,0.16);
  white-space:nowrap;z-index:1;
  transition:letter-spacing 1.5s var(--ease-out),opacity 1.5s var(--ease-out);
}
html.js .futuro-stage:not(.futuro-in) .futuro-word{letter-spacing:.28em;opacity:.35}
.futuro-photo{
  position:relative;z-index:2;width:clamp(320px,48vw,560px);height:auto;
  transform:translateY(var(--py,0px));
  -webkit-mask-image:linear-gradient(to bottom,#000 82%,transparent 99%);
  mask-image:linear-gradient(to bottom,#000 82%,transparent 99%);
  filter:drop-shadow(0 24px 50px rgba(0,0,0,0.5)) drop-shadow(0 0 64px rgba(214,154,60,0.2));
}
.futuro-caption{
  position:relative;z-index:3;margin-top:clamp(-18px,-1.8vw,-6px);
  display:inline-flex;justify-content:center;padding:15px 36px;
  border:1px solid rgba(214,154,60,0.42);
  background:linear-gradient(180deg,rgba(32,21,12,0.92),rgba(24,15,8,0.92));
  --cut:15px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  box-shadow:0 22px 54px -22px rgba(0,0,0,0.75),0 0 44px -12px rgba(214,154,60,0.32);
}
.futuro-caption span{
  font-family:var(--font-mono);font-size:11.5px;letter-spacing:.17em;
  text-transform:uppercase;color:var(--label-gold-2);text-align:center;
}
.futuro-tools{
  position:relative;z-index:3;margin-top:30px;
  display:flex;flex-wrap:wrap;justify-content:center;gap:12px 26px;
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(15px,1.8vw,21px);letter-spacing:.06em;
  text-transform:uppercase;color:#ded3b8;
}
.futuro-tools i{font-style:normal;color:var(--ink-faint)}

/* (vitrine de pôsteres unificada na linha do tempo dos módulos) */

/* ---------- Accordions ---------- */
/* ---------- Mapa dos módulos: cards-pôster expansíveis ----------
   Fechado = a legenda do pôster (título + MÓDULO XX).
   Aberto  = o pôster completo se desdobra por cima: imagem de ponta a
   ponta, título, a frase nova e o rótulo, na anatomia do letreiro. */
/* ---------- Vitrine de pôsteres (tira horizontal navegável) ---------- */
/* Trilho: a tira corre sozinha em loop; as setas dão o controle manual */
.mods-rail{position:relative;margin-bottom:clamp(26px,3.4vw,44px)}
.mods-strip{
  position:relative;z-index:1;
  display:flex;align-items:flex-start;gap:14px;
  overflow-x:auto;overscroll-behavior-x:contain;
  padding:6px 2px 8px;
  scrollbar-width:none;-ms-overflow-style:none;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 5%,#000 95%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 5%,#000 95%,transparent);
}
.mods-strip::-webkit-scrollbar{display:none}
/* A máscara de fade recorta qualquer outline externo: o foco vira anel interno */
.mods-strip:focus-visible{outline:none;box-shadow:inset 0 0 0 2px rgba(236,196,95,0.85)}
@media (hover:hover) and (pointer:fine){
  .mods-strip{cursor:grab}
  .mods-strip.is-dragging{cursor:grabbing;user-select:none}
  .mods-strip.is-dragging .mshot{transition:none}
}
.mods-nav{
  position:absolute;top:calc(50% - 34px);z-index:4;
  width:46px;height:46px;display:flex;align-items:center;justify-content:center;
  background:linear-gradient(160deg,rgba(181,119,30,0.5),rgba(24,15,8,0.94));
  border:1px solid rgba(236,196,95,0.45);color:var(--gold-honey);
  --cut:12px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  cursor:pointer;
  box-shadow:0 14px 34px -14px rgba(0,0,0,0.8);
  transition:border-color .3s,color .3s,transform .3s var(--ease-out);
}
.mods-nav .ic{width:18px;height:18px}
.mods-nav--prev{left:-10px}
.mods-nav--prev .ic{transform:scaleX(-1)}
.mods-nav--next{right:-10px}
@media (hover:hover){
  .mods-nav:hover{border-color:rgba(236,196,95,0.9);color:var(--champagne-2);transform:scale(1.06)}
}
.mods-nav:focus-visible{outline-offset:-4px}
@media (max-width:760px){
  .mods-nav{width:38px;height:38px;top:calc(50% - 40px)}
  .mods-nav--prev{left:-4px}
  .mods-nav--next{right:-4px}
}
.mshot{
  position:relative;flex:0 0 clamp(148px,17vw,206px);scroll-snap-align:center;
  transition:transform .4s var(--ease-out);
}
.mshot img{
  width:100%;height:auto;aspect-ratio:2/3;object-fit:cover;display:block;
  border:1px solid var(--line-25);
  --cut:14px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  transition:border-color .4s,filter .4s;
  filter:saturate(.92) brightness(.92);
}
.mshot-cap{
  display:block;margin-top:11px;
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--gold-honey);
}
.mshot-name{
  display:block;margin-top:3px;
  font-family:var(--font-display);font-weight:700;font-size:13.5px;
  text-transform:uppercase;color:var(--ink-soft);line-height:1.15;
}
@media (hover:hover){
  .mshot:hover{transform:translateY(-6px)}
  .mshot:hover img{border-color:rgba(236,196,95,0.6);filter:none}
}
/* ---------- Índice dos 12 módulos em 3 colunas ---------- */
.mods-index{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;align-items:start}
@media (max-width:979px){.mods-index{grid-template-columns:repeat(2,1fr)}}
@media (max-width:660px){.mods-index{grid-template-columns:1fr}}
.mcol{display:flex;flex-direction:column;gap:14px}
.mrow{
  position:relative;background:var(--bg-card);border:1px solid var(--line-22);
  --cut:12px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  transition:border-color .3s,background .3s;
}
.mrow:hover{border-color:rgba(236,196,95,0.5)}
.mrow[data-open]{border-color:rgba(236,196,95,0.6)}
/* Altura fixa: as 4 linhas de cada coluna batem entre si e as 3 colunas
   ficam alinhadas, independente de o nome ocupar 1 ou 2 linhas */
.mrow .acc-head{padding:0 16px;gap:12px;align-items:center;min-height:70px}
.mrow .ic{width:19px;height:19px}
.mrow-num{
  font-family:var(--font-mono);font-size:10px;letter-spacing:.13em;
  color:var(--gold-honey);flex-shrink:0;
}
.mrow-name{
  flex:1;font-family:var(--font-body);font-size:13.5px;line-height:1.3;
  color:var(--ink-soft);
}
.mrow .acc-chev{font-size:19px}
.mrow .acc-inner p{margin:0;padding:0 16px 16px 47px;font-size:13px;line-height:1.55;color:var(--ink-mut)}
.acc-col{display:flex;flex-direction:column;gap:11px}
.acc-item{border:1px solid var(--line-22);background:var(--bg-card);transition:border-color .3s}
.acc-item:hover{border-color:rgba(236,196,95,0.5)}
.acc-head{
  width:100%;display:flex;align-items:center;justify-content:space-between;gap:14px;
  padding:18px 22px;background:transparent;border:none;cursor:pointer;text-align:left;
}
.acc-q{
  font-family:var(--font-display);font-weight:700;font-size:16px;
  text-transform:uppercase;color:var(--ink-hi);letter-spacing:.02em;
}
.acc-chev{
  flex-shrink:0;color:var(--gold-honey);
  font-family:var(--font-display);font-weight:700;font-size:22px;line-height:1;
  transition:transform .35s ease;
}
.acc-item[data-open] .acc-chev{transform:rotate(45deg)}
/* Accordions colapsados só com JS (html.js): sem JS, tudo aberto e legível */
html.js .acc-wrap{display:grid;grid-template-rows:0fr;transition:grid-template-rows .45s var(--ease-out)}
html.js .acc-item[data-open] .acc-wrap{grid-template-rows:1fr}
.acc-inner{overflow:hidden;min-height:0}
html.js .acc-inner{
  opacity:0;transform:translateY(-8px);
  transition:opacity .45s ease,transform .45s ease;
}
html.js .acc-item[data-open] .acc-inner{opacity:1;transform:none}
.acc-inner p{margin:0;padding:0 22px 20px;font-size:14.5px;line-height:1.6;color:var(--ink-mut)}

.section-subtitle{text-align:center;font-size:15px;color:var(--ink-mut);max-width:600px;margin:0 auto var(--title-gap)}
.trilhas-note{
  margin:22px auto 0;max-width:720px;
  display:flex;align-items:center;justify-content:center;gap:12px;
  padding:16px 24px;border:1px dashed rgba(214,154,60,0.35);
  --cut:14px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  background:rgba(214,154,60,0.05);
}
.trilhas-note b{color:var(--gold-honey);font-size:18px;font-weight:400}
.trilhas-note span{font-size:14.5px;color:var(--ink-list)}
.trilhas-note strong{color:var(--ink-title)}

/* ---------- Bônus ---------- */
.bonus-section{
  position:relative;padding-block:calc(var(--space-section)/2);z-index:2;
  background:radial-gradient(60% 80% at 50% 40%,rgba(181,119,30,0.12),transparent 70%);
}
.bonus-eyebrow{display:flex;justify-content:center;margin-bottom:20px}
.bonus-eyebrow span{
  padding:8px 20px;border:1px solid var(--line-40);
  --cut:10px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--label-gold);
}
.bonus-title{
  text-align:center;font-family:var(--font-display);font-weight:800;
  font-size:clamp(28px,4vw,50px);text-transform:uppercase;
  color:var(--ink-title);margin:0 auto var(--title-gap);
}
.bonus-title .gold-shimmer{
  background-image:linear-gradient(100deg,#ecc45f,#f7e3a8,#d99a3a);
  background-size:200% auto;filter:none;
}
.bonus-grid{margin-bottom:44px}
.bonus-card{
  border:1px solid var(--line-30);background:var(--bg-card);
  --cut:20px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  padding:14px 14px 28px;height:100%;
}
.bonus-card .art-wrap{
  overflow:hidden;margin-bottom:22px;
  clip-path:polygon(14px 0,100% 0,100% calc(100% - 14px),calc(100% - 14px) 100%,0 100%,0 14px);
}
.bonus-card .art{aspect-ratio:3/3.6}
.bonus-card .bonus-body{text-align:center}
.bonus-tag{
  display:inline-block;padding:5px 16px;border:1px solid var(--line-40);
  font-family:var(--font-display);font-weight:700;font-size:12px;
  letter-spacing:.18em;text-transform:uppercase;color:var(--label-gold);margin-bottom:14px;
}
.bonus-cat{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;color:var(--gold-honey);margin-bottom:6px}
.bonus-name{font-family:var(--font-display);font-weight:800;font-size:22px;text-transform:uppercase;color:var(--ink-title)}

/* ---------- Oferta ---------- */
.oferta-section{position:relative;padding-block:calc(var(--space-section)/2);overflow:hidden;z-index:2}
.oferta-glow-1{
  position:absolute;top:50%;left:50%;width:min(820px,120vw);height:640px;z-index:0;
  background:radial-gradient(50% 50% at 50% 50%,rgba(181,119,30,0.22),transparent 70%);
  animation:glowPulse 6s ease-in-out infinite;
}
/* (glow secundário e halo cônico removidos na dieta de animações:
   o border-beam é o efeito protagonista da oferta) */
/* Assimetria 5/7: garantia coadjuvante, oferta protagonista */
.oferta-grid{
  position:relative;z-index:2;
  display:grid;grid-template-columns:minmax(280px,5fr) minmax(340px,7fr);
  gap:22px;align-items:stretch;
}
@media (max-width:899px){
  .oferta-grid{grid-template-columns:1fr}
  .oferta-card{order:-1} /* mobile vê o produto e o preço antes da garantia */
}
.garantia-card{
  position:relative;background:var(--bg-card);
  --cut:22px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  padding:clamp(28px,4vw,44px);
  display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;
}
.garantia-seal{
  width:130px;height:130px;border-radius:50%;
  border:2px solid rgba(236,196,95,0.4);
  display:flex;align-items:center;justify-content:center;
  margin-bottom:24px;position:relative;
  box-shadow:0 0 40px -8px rgba(236,196,95,0.35);
}
.garantia-seal .ring{
  position:absolute;inset:9px;border-radius:50%;
  border:1px dashed rgba(236,196,95,0.45);
  animation:borderSpin 24s linear infinite;
}
.garantia-seal .num{
  font-family:var(--font-display);font-weight:800;font-size:48px;line-height:1;
  background:linear-gradient(120deg,#ecc45f,#f7e3a8,#d99a3a);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 14px rgba(236,196,95,0.4));
}
.garantia-seal .dias{font-family:var(--font-mono);font-size:9px;letter-spacing:.14em;color:var(--gold-honey)}
.garantia-card h3{
  font-family:var(--font-display);font-weight:800;font-size:24px;
  text-transform:uppercase;color:var(--ink-title);margin:0 0 14px;
}
.garantia-card p{font-size:14.5px;line-height:1.6;color:var(--ink-mut);margin:0}

.oferta-card{
  --cut:26px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  background:linear-gradient(160deg,rgba(181,119,30,0.22),#20150c 60%);
  padding:clamp(28px,4vw,46px);
  box-shadow:0 40px 120px -44px rgba(214,154,60,0.55),0 0 0 1px rgba(236,196,95,0.18),0 0 90px -30px rgba(236,196,95,0.32);
}
.oferta-card .brand{margin-bottom:22px}
.oferta-card h3{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(22px,2.8vw,30px);text-transform:uppercase;
  color:var(--ink-title);line-height:1.08;margin:0 0 12px;
}
.oferta-list{list-style:none;margin:0 0 26px;padding:0;display:flex;flex-direction:column;gap:10px}
.oferta-list li{display:flex;gap:11px;font-size:15px;color:var(--ink-check)}
.oferta-list li::before{content:"✓" / "";color:var(--gold-honey)}
.oferta-preco-box{padding-top:24px;border-top:1px solid var(--line-25)}
.oferta-preco-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;color:var(--label-gold);margin-bottom:8px}
.oferta-preco{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(34px,5vw,52px);line-height:1;color:var(--ink-title);
}
.oferta-preco .gold-shimmer{
  background-image:linear-gradient(100deg,#ecc45f,#f7e3a8 50%,#d99a3a);
  background-size:200% auto;
  animation:shimmer 7s linear infinite;
  filter:drop-shadow(0 0 22px rgba(236,196,95,0.3));
}
.oferta-card .btn--full{margin-top:26px}
.oferta-micro{
  margin-top:16px;text-align:center;
  font-family:var(--font-mono);font-size:12px;letter-spacing:.07em;color:var(--ink-mut);
}

/* ---------- A instrutora ---------- */
.instrutora-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));
  gap:clamp(30px,4vw,60px);align-items:center;
}
.instrutora-foto{
  background:linear-gradient(160deg,rgba(214,154,60,0.9),rgba(110,74,18,0.35));
  padding:1.5px;--cut:24px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  box-shadow:0 40px 100px -44px rgba(181,119,30,0.6);
}
.instrutora-foto .art{
  aspect-ratio:4/4.6;
  clip-path:polygon(24px 0,100% 0,100% calc(100% - 24px),calc(100% - 24px) 100%,0 100%,0 24px);
}
.instrutora-tag{
  display:inline-block;padding:7px 16px;border:1px solid var(--line-40);
  --cut:9px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--label-gold);margin-bottom:22px;
}
.instrutora-copy h2{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(30px,4.4vw,54px);text-transform:uppercase;
  color:var(--ink-title);margin:0 0 22px;line-height:1.02;
}
.instrutora-copy p{font-size:15.5px;line-height:1.7;color:var(--ink-body);margin:0 0 16px}
.instrutora-copy p:last-of-type{margin-bottom:26px}
.crm-box{
  padding:14px 18px;border:1px solid var(--line-20);
  --cut:11px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  background:rgba(214,154,60,0.04);
  font-family:var(--font-mono);font-size:12px;line-height:1.7;color:var(--ink-dim);
}

/* ---------- FAQ ---------- */
.faq-grid{
  display:grid;grid-template-columns:minmax(280px,5fr) minmax(320px,7fr);
  gap:clamp(30px,4vw,56px);align-items:start;
}
@media (max-width:899px){.faq-grid{grid-template-columns:1fr}}
@media (min-width:900px){.faq-card{position:sticky;top:96px}}
.faq-card{
  border:1px solid var(--line-25);
  --cut:22px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  background:linear-gradient(160deg,rgba(181,119,30,0.12),#20150c 60%);
  padding:clamp(28px,4vw,44px);
}
.faq-card h2{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(26px,3.4vw,42px);text-transform:uppercase;
  color:var(--ink-title);margin:0 0 18px;line-height:1.05;
}
.faq-card p{font-size:15px;line-height:1.6;color:var(--ink-body);margin:0 0 28px}

/* ---------- Rodapé ---------- */
.site-footer{
  position:relative;z-index:2;
  padding:clamp(50px,7vw,80px) 0 40px;
  border-top:1px solid var(--line-15);
}
.footer-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:34px;align-items:start}
.footer-tagline{font-size:14px;color:var(--ink-dim);max-width:250px}
.footer-label{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;color:var(--ink-dim);margin-bottom:14px}
.footer-resp{font-size:14px;line-height:1.75;color:var(--ink-body)}
.footer-links{display:flex;flex-direction:column;gap:9px}
.footer-links a{font-size:14px;color:var(--ink-mut);text-decoration:none;transition:color .25s}
.footer-links a:hover{color:var(--gold-honey)}
.footer-legal{margin-top:42px;padding-top:26px;border-top:1px solid var(--line-12)}
.footer-legal p{font-size:13px;line-height:1.75;color:var(--ink-dim);max-width:var(--measure);margin:0}

/* ==========================================================================
   Camada da copy V8 (novos elementos de conteúdo)
   ========================================================================== */

/* Micro-texto sob o CTA do hero */
.hero-micro{
  margin-top:16px;
  font-family:var(--font-mono);font-size:12px;letter-spacing:.07em;
  color:var(--ink-mut);text-shadow:0 1px 10px rgba(0,0,0,0.6);
}

/* (o bloco pós-VSL da V8 foi substituído pelas seções 4-6 da V8.1:
   protocolo em 3 passos → demonstração → improviso vs protocolo) */

/* Corpo nos cards "Nova era" e "Exclusividade" */
.era-caption p{margin:9px 0 0;font-size:14px;line-height:1.55;color:var(--ink-mut)}
.parte-caption p{margin:9px 0 0;font-size:14px;line-height:1.55;color:var(--ink-mut)}

/* Lista de deveres da CFM 2.454 (seção Conformidade) */
.cfm-list{list-style:none;margin:0 0 18px;padding:0;display:flex;flex-direction:column;gap:10px}
.cfm-list li{display:flex;gap:11px;font-size:15.5px;line-height:1.55;color:var(--ink-check)}
.cfm-list li::before{content:"✓" / "";color:var(--gold-honey);flex-shrink:0}

/* Descrição nos cards de bônus */
.bonus-desc{margin:10px auto 0;font-size:14px;line-height:1.55;color:var(--ink-mut);max-width:300px}

/* Cards "Por que confiar" (sem imagem) */
.trust-card{padding:30px}
.trust-card h3{font-size:21px;line-height:1.15}
.trust-card p{font-size:14.5px}

/* CTA final */
/* CTA final (virada de ato 3) */
.final-cta{position:relative;z-index:2;padding-block:calc(var(--space-act)/2);overflow:hidden;text-align:center}
.final-cta-glow{
  position:absolute;top:50%;left:50%;width:min(900px,120vw);height:620px;
  transform:translate(-50%,-50%);z-index:0;pointer-events:none;
  background:radial-gradient(50% 50% at 50% 50%,rgba(181,119,30,0.2),transparent 70%);
  animation:glowPulse 7s ease-in-out infinite;
}
.final-cta .container{position:relative;z-index:2}
.final-cta-title{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(30px,4.6vw,56px);line-height:1.05;
  text-transform:uppercase;color:var(--ink-title);
  max-width:900px;margin:0 auto 22px;
}
.final-cta-body{font-size:clamp(15px,1.6vw,17.5px);line-height:1.7;color:var(--ink-body);max-width:var(--measure);margin:0 auto 34px}
.final-cta-micro{
  margin-top:18px;
  font-family:var(--font-mono);font-size:12px;letter-spacing:.07em;color:var(--ink-mut);
}

/* Eyebrow do hero pode quebrar linha em telas estreitas */
@media (max-width:480px){
  .eyebrow-pill span:not(.dot){white-space:normal}
}

/* ==========================================================================
   Camada "wow" (assinatura visual médica + navegação premium)
   ========================================================================== */

/* ---------- ECG dourado que se desenha ao entrar na tela ---------- */
.ecg-divider{position:relative;z-index:2;padding-block:calc(var(--space-section)/4);overflow:hidden}
.ecg-divider svg{display:block;width:100%;height:clamp(44px,6vw,80px);filter:drop-shadow(0 0 8px rgba(236,196,95,0.35))}
.ecg-path{stroke-dasharray:1;stroke-dashoffset:0;transition:stroke-dashoffset 2.6s var(--ease-out) .15s}
html.js .ecg-divider.reveal-init:not(.reveal-in) .ecg-path{stroke-dashoffset:1}
/* Pulso vivo: um segmento brilhante percorre o traçado em loop, como monitor */
.ecg-scan{
  fill:none;stroke:var(--champagne-2);stroke-width:2.6;stroke-linecap:round;
  stroke-dasharray:0.05 0.95;stroke-dashoffset:1;
  filter:drop-shadow(0 0 7px rgba(247,227,168,0.95));
  animation:ecgRun 6s linear infinite;
}
@keyframes ecgRun{to{stroke-dashoffset:0}}
@media (prefers-reduced-motion: reduce){.ecg-scan{display:none}}

/* ---------- Contagem real até a vigência da CFM 2.454/2026 ---------- */
.cfm-count{
  display:inline-flex;flex-wrap:wrap;align-items:center;gap:10px 12px;
  margin:0 0 22px;padding:11px 18px;
  border:1px solid var(--line-30);background:rgba(214,154,60,0.06);
  --cut:10px;
}
.cfm-count .dot{width:7px;height:7px;border-radius:50%;background:var(--gold-honey);box-shadow:0 0 10px var(--gold-honey)}
.cfm-count-label,.cfm-count-days{
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--label-gold);
}
.cfm-count-days{display:inline-flex;align-items:baseline;gap:7px}
.cfm-count-days b{
  font-family:var(--font-display);font-weight:800;font-size:24px;line-height:1;
  background:var(--grad-num);-webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 12px rgba(236,196,95,0.35));
}

/* ---------- Manifesto: o princípio de segurança em 3 linhas ---------- */
/* Manifesto (virada de ato 2: autoridade → decisão) */
.manifesto{position:relative;z-index:2;padding-block:calc(var(--space-act)/2);text-align:center;overflow:hidden}
.manifesto::before{
  content:"";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:min(760px,110vw);height:80%;pointer-events:none;
  background:radial-gradient(50% 50% at 50% 50%,rgba(181,119,30,0.14),transparent 70%);
}
.manifesto-lines{position:relative;display:flex;flex-direction:column;gap:2px}
.m-line{
  font-family:var(--font-display);font-weight:800;text-transform:uppercase;
  font-size:clamp(32px,5.6vw,84px);line-height:1.06;letter-spacing:.01em;
  color:var(--ink-dim);
}
.m-line:nth-child(2){color:var(--ink-title)}

/* ---------- Trilho de navegação por seções (desktop) ---------- */
.rail{
  position:fixed;right:clamp(12px,1.8vw,28px);top:50%;transform:translateY(-50%);
  z-index:55;display:none;flex-direction:column;gap:6px;
}
@media (min-width:1200px){.rail{display:flex}}
.rail a{position:relative;display:flex;align-items:center;justify-content:center;width:32px;height:32px;text-decoration:none}
.rail i{
  display:block;width:8px;height:8px;
  border:1px solid rgba(214,154,60,0.55);transform:rotate(45deg);
  transition:background .3s,border-color .3s,box-shadow .3s,transform .3s;
}
.rail a:hover i{border-color:rgba(236,196,95,0.9)}
.rail a.active i{
  background:var(--grad-cta);border-color:transparent;
  box-shadow:0 0 12px rgba(236,196,95,0.8);
  transform:rotate(45deg) scale(1.2);
}
.rail span{
  position:absolute;right:calc(100% + 8px);top:50%;
  transform:translateY(-50%) translateX(6px);
  white-space:nowrap;font-family:var(--font-mono);font-size:9px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--label-gold);
  background:rgba(10,8,6,0.88);padding:5px 9px;border:1px solid var(--line-22);
  opacity:0;transition:opacity .25s,transform .25s;pointer-events:none;
}
.rail a:hover span,.rail a:focus-visible span{opacity:1;transform:translateY(-50%)}

/* Skip link (primeiro foco da página) */
.skip-link{
  position:fixed;top:10px;left:10px;z-index:120;
  padding:12px 20px;background:var(--grad-cta);color:var(--on-gold);
  font-family:var(--font-display);font-weight:700;font-size:14px;
  letter-spacing:.06em;text-transform:uppercase;text-decoration:none;
  transform:translateY(-200%);transition:transform .2s;
}
.skip-link:focus-visible{transform:none;outline:none}

/* ---------- Oferta: stack entra em cascata (núcleo → Incluso → Bônus) ---------- */
.oferta-stack li,.stack-core,.stack-label{transition:opacity .5s var(--ease-out),transform .5s var(--ease-out)}
.oferta-card.reveal-init:not(.reveal-in) .oferta-stack li,
.oferta-card.reveal-init:not(.reveal-in) .stack-core,
.oferta-card.reveal-init:not(.reveal-in) .stack-label{opacity:0;transform:translateX(-10px)}
.oferta-card.reveal-in .stack-core{transition-delay:.08s}
.oferta-card.reveal-in .oferta-stack > div:nth-of-type(2){transition-delay:.18s}
.oferta-card.reveal-in .oferta-stack ul:nth-of-type(1) li:nth-child(1){transition-delay:.24s}
.oferta-card.reveal-in .oferta-stack ul:nth-of-type(1) li:nth-child(2){transition-delay:.31s}
.oferta-card.reveal-in .oferta-stack ul:nth-of-type(1) li:nth-child(3){transition-delay:.38s}
.oferta-card.reveal-in .oferta-stack > div:nth-of-type(3){transition-delay:.46s}
.oferta-card.reveal-in .oferta-stack ul:nth-of-type(2) li:nth-child(1){transition-delay:.52s}
.oferta-card.reveal-in .oferta-stack ul:nth-of-type(2) li:nth-child(2){transition-delay:.59s}
.oferta-card.reveal-in .oferta-stack ul:nth-of-type(2) li:nth-child(3){transition-delay:.66s}

/* ---------- Polimentos ---------- */
a:focus-visible,button:focus-visible{outline:2px solid rgba(236,196,95,0.75);outline-offset:3px}
/* Nos cards chanfrados (clip-path) o anel externo seria cortado pelo recorte:
   desenha o anel por dentro do botão */
.mrow .acc-head:focus-visible{outline-offset:-4px}
/* O anel interno da era do chanfro morava aqui (outline:none + inset duplo +
   glow). O chanfro morreu na camada dos CTAs premium (~3617) e a regra virou
   meia-sobra: a 4541 redeclarava só o outline e herdava daqui, POR
   PROPRIEDADE (mesma especificidade 0,2,0), os anéis inset — que engoliam a
   sombra de elevação do repouso — e o glow. Com o outline:none vivo, os
   overrides de painel claro da 4124 nunca chegavam ao .btn. Unificado em
   23/08: o tratamento único de foco do .btn é o da 4541 (anel externo
   dourado; a 4124 troca a cor nos painéis claros); box-shadow e filter
   ficam com o estado de repouso de cada variante (o .btn--md/--sm têm
   box-shadow:none de propósito e não ganham elevação ao focar). */

/* Contagem compacta na oferta */
.oferta-count{
  display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;
  margin-top:14px;
}
.oferta-count .dot{width:6px;height:6px;border-radius:50%;background:var(--gold-honey);box-shadow:0 0 8px var(--gold-honey)}
.oferta-count .cfm-count-days b{font-size:18px}

/* Para quem é / não é */
.fit-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,420px),1fr));gap:22px}
.fit-card{
  height:100%;padding:clamp(26px,3.4vw,38px);
  --cut:22px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.fit-card{position:relative}
.fit-card--yes{background:linear-gradient(160deg,rgba(181,119,30,0.1),#20150c 60%)}
.fit-card--no{background:#1c130b}
/* Contorno dourado fechado que acompanha o chanfro (padrão de anel mascarado) */
.garantia-card::before,.oferta-card::before,.fit-card::before{
  content:"";position:absolute;inset:0;padding:1px;pointer-events:none;z-index:1;
  background:linear-gradient(160deg,rgba(214,154,60,0.55),rgba(110,74,18,0.25));
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;
  mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  mask-composite:exclude;
}
.oferta-card::before{padding:1.5px;background:linear-gradient(160deg,rgba(236,196,95,0.7),rgba(110,74,18,0.35))}
.fit-card--no::before{background:linear-gradient(160deg,rgba(214,154,60,0.26),rgba(110,74,18,0.14))}
.fit-label{
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gold-honey);margin-bottom:18px;
}
.fit-label--no{color:var(--ink-dim)}
.fit-list-no{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.fit-list-no li{display:flex;gap:11px;font-size:15.5px;line-height:1.55;color:var(--ink-mut)}
.fit-list-no li::before{content:"✕" / "";color:var(--ink-dim);flex-shrink:0}

/* Stack hierarquizado da oferta */
.oferta-stack{margin:0 0 26px}
.stack-core{
  display:flex;flex-direction:column;gap:3px;
  padding:14px 18px;margin-bottom:6px;
  border:1px solid var(--line-40);background:rgba(214,154,60,0.07);
  --cut:12px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.stack-core-name{
  font-family:var(--font-display);font-weight:800;font-size:19px;
  text-transform:uppercase;color:var(--ink-title);letter-spacing:.02em;
}
.stack-core-sub{font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--gold-honey)}
.stack-label{
  font-family:var(--font-mono);font-size:10px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--ink-mut);margin:16px 0 9px;
}
.oferta-stack .oferta-list{margin:0}

/* 3 passos de acesso */
.acesso-steps{
  position:relative;z-index:2;
  display:grid;grid-template-columns:repeat(3,1fr);
  gap:14px;margin-top:22px;
}
@media (max-width:760px){.acesso-steps{grid-template-columns:1fr}}
.acesso-steps .step{
  display:flex;align-items:center;gap:14px;
  padding:15px 18px;border:1px solid var(--line-20);background:rgba(214,154,60,0.04);
  --cut:12px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.acesso-steps b{
  font-family:var(--font-display);font-weight:800;font-size:26px;line-height:1;
  background:var(--grad-num);-webkit-background-clip:text;background-clip:text;color:transparent;
}
.acesso-steps span{font-size:13.5px;line-height:1.45;color:var(--ink-body)}

/* Referências no rodapé */
.footer-refs{margin-top:42px;padding-top:26px;border-top:1px solid var(--line-12)}
.footer-refs p{font-family:var(--font-mono);font-size:11.5px;line-height:1.9;letter-spacing:.04em;color:var(--ink-dim);max-width:900px;margin:0}

/* Índice dourado dos trust-cards + lista compacta */
.trust-num{
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.22em;
  color:var(--gold-honey);margin-bottom:12px;
}
.cfm-list--card{margin:14px 0 0;gap:8px}
.cfm-list--card li{font-size:14px;color:var(--ink-list)}

/* Hovers unificados nos cards com imagem */
@media (hover:hover){
  .parte-card,.bonus-card{transition:border-color .35s}
  .parte-card:hover,.bonus-card:hover{border-color:rgba(236,196,95,0.5)}
  .era-card .gframe{transition:filter .35s}
  .era-card:hover .gframe{filter:brightness(1.12)}
}

/* Carimbo: credencial estampada + selo de garantia */
.crm-box{position:relative;transform:rotate(-1.6deg)}
.crm-box::before{
  content:"";position:absolute;inset:4px;pointer-events:none;
  border:1px solid rgba(214,154,60,0.26);
}
@keyframes stampIn{
  0%{transform:rotate(-1.6deg) scale(1.5);opacity:0;filter:blur(4px)}
  60%{transform:rotate(-1.6deg) scale(.97);opacity:1;filter:blur(0)}
  100%{transform:rotate(-1.6deg) scale(1)}
}
[data-reveal].reveal-in .crm-box{animation:stampIn .55s cubic-bezier(.2,1.4,.4,1) .25s backwards}
@keyframes sealIn{
  0%{transform:scale(1.45);opacity:0}
  60%{transform:scale(.96);opacity:1}
  100%{transform:scale(1)}
}
.garantia-card.reveal-in .garantia-seal{animation:sealIn .55s cubic-bezier(.2,1.4,.4,1) .2s backwards}

/* Checks da CFM entram carimbando, um a um */
.cfm-list li::before{transition:transform .4s cubic-bezier(.34,1.56,.64,1)}
html.js [data-reveal].reveal-init:not(.reveal-in) .cfm-list li::before{transform:scale(0) rotate(-35deg)}
[data-reveal].reveal-in .cfm-list li:nth-child(1)::before{transition-delay:.15s}
[data-reveal].reveal-in .cfm-list li:nth-child(2)::before{transition-delay:.27s}
[data-reveal].reveal-in .cfm-list li:nth-child(3)::before{transition-delay:.39s}
[data-reveal].reveal-in .cfm-list li:nth-child(4)::before{transition-delay:.51s}

/* Blip de monitor quando o contador fecha */
@keyframes statBlip{
  0%,100%{filter:drop-shadow(0 0 22px rgba(236,196,95,0.22))}
  40%{filter:drop-shadow(0 0 38px rgba(236,196,95,0.7))}
}
.stat-num.blip{animation:statBlip .6s ease-out 1}

/* Rubrica dourada sob o título do CTA final */
.final-flourish{display:flex;justify-content:center;margin:2px 0 10px}
.final-flourish svg{width:min(300px,70vw);height:auto;filter:drop-shadow(0 0 8px rgba(247,227,168,0.45))}
.flourish-path{stroke-dasharray:1;stroke-dashoffset:0;transition:stroke-dashoffset 1.1s cubic-bezier(.4,0,.3,1) .45s}
html.js .final-flourish.reveal-init:not(.reveal-in) .flourish-path{stroke-dashoffset:1}

/* Accordion fechado invisível também para leitores de tela (só com JS) */
html.js .acc-wrap{visibility:hidden;transition:grid-template-rows .45s var(--ease-out),visibility 0s .45s}
html.js .acc-item[data-open] .acc-wrap{visibility:visible;transition:grid-template-rows .45s var(--ease-out),visibility 0s 0s}

/* Performance mobile: efeitos de composição pesada só no desktop */
@media (max-width:760px){
  .film-grain{display:none}
  .hero-blur-wrap{display:none}
}
.acc-item[data-open]{
  border-color:rgba(236,196,95,0.55);
  background:linear-gradient(180deg,rgba(214,154,60,0.08),#20150c 70%);
}

/* ==========================================================================
   Camada de imersão (auditoria de experiência)
   ========================================================================== */

/* ---------- Grão cinematográfico global ---------- */
.film-grain{
  position:fixed;inset:0;z-index:100;pointer-events:none;overflow:hidden;
  mix-blend-mode:overlay;opacity:.055;
}
.film-grain::before{
  content:"";position:absolute;top:-60%;left:-60%;width:220%;height:220%;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='190' height='190'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='0.6'/%3E%3C/svg%3E");
  background-size:190px 190px;
  animation:grainJit .9s steps(1) infinite;
}
@keyframes grainJit{
  0%{transform:translate(0,0)}
  12.5%{transform:translate(-4%,3%)}
  25%{transform:translate(3%,-5%)}
  37.5%{transform:translate(-2%,-4%)}
  50%{transform:translate(4%,2%)}
  62.5%{transform:translate(-5%,1%)}
  75%{transform:translate(2%,5%)}
  87.5%{transform:translate(5%,-3%)}
  100%{transform:translate(0,0)}
}

/* ---------- Indicador de scroll do hero ---------- */
.hero-scroll{
  position:absolute;left:50%;bottom:26px;transform:translateX(-50%);z-index:2;
  display:flex;flex-direction:column;align-items:center;gap:10px;
  transition:opacity .45s;
}
.hero-scroll span{
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--ink-dim);
}
.hero-scroll .line{
  position:relative;width:1px;height:46px;overflow:hidden;
  background:linear-gradient(to bottom,rgba(236,196,95,0),rgba(236,196,95,.4));
}
.hero-scroll .line::after{
  content:"";position:absolute;top:0;left:0;width:1px;height:9px;
  background:var(--champagne-2);box-shadow:0 0 8px var(--gold-honey);
  transform:translateY(-9px);
  animation:scrollDrop 2.2s cubic-bezier(.3,0,.7,1) infinite;
}
@keyframes scrollDrop{0%{transform:translateY(-9px);opacity:0}22%{opacity:1}80%,100%{transform:translateY(46px);opacity:0}}
body.scrolled .hero-scroll{opacity:0}

/* ---------- Reveal do H1 palavra a palavra ---------- */
.hero-title .w{
  display:inline-block;
  opacity:0;transform:translateY(.55em);filter:blur(8px);
  transition:opacity .7s var(--ease-out),transform .7s var(--ease-out),filter .7s var(--ease-out);
}
.hero-title .w.in{opacity:1;transform:none;filter:none}
/* O trecho dourado mantém o glow persistente do .gold-shimmer após entrar
   (sem esta regra, .w.in mataria o drop-shadow por especificidade) */
.hero-title .w.gold-shimmer.in{filter:drop-shadow(0 0 20px rgba(236,196,95,0.28))}
.gold-flash{animation:goldFlash 1.1s ease-out 1}
@keyframes goldFlash{
  0%{filter:drop-shadow(0 0 0 rgba(236,196,95,0))}
  35%{filter:drop-shadow(0 0 40px rgba(236,196,95,.85))}
  100%{filter:drop-shadow(0 0 20px rgba(236,196,95,.28))}
}

/* ---------- Spotlight nos cards (segue o mouse, só desktop) ---------- */
@media (hover:hover) and (pointer:fine){
  .spot{position:relative}
  .spot::after{
    content:"";position:absolute;inset:0;pointer-events:none;z-index:2;
    opacity:0;transition:opacity .4s;
    background:radial-gradient(240px circle at var(--sx,50%) var(--sy,50%),rgba(236,196,95,0.13),rgba(236,196,95,0.04) 45%,transparent 70%);
  }
  .spot:hover::after{opacity:1}
}

/* ---------- Oferta: border beam + flash + pop do preço ---------- */
@property --bb{syntax:'<angle>';initial-value:0deg;inherits:false}
.oferta-card{position:relative}
.border-beam{
  position:absolute;inset:0;pointer-events:none;z-index:1;padding:2px;
  clip-path:polygon(26px 0,100% 0,100% calc(100% - 26px),calc(100% - 26px) 100%,0 100%,0 26px);
  background:conic-gradient(from var(--bb),transparent 0deg,transparent 296deg,rgba(236,196,95,0.06) 322deg,rgba(247,227,168,0.95) 344deg,rgba(236,196,95,0.06) 357deg,transparent 360deg);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;
  mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  mask-composite:exclude;
  animation:beamSpin 7s linear infinite;
}
@keyframes beamSpin{to{--bb:360deg}}
.oferta-flash{
  position:absolute;top:50%;left:50%;width:min(900px,120vw);height:700px;
  transform:translate(-50%,-50%);z-index:0;pointer-events:none;opacity:0;
  background:radial-gradient(50% 50% at 50% 50%,rgba(236,196,95,0.28),transparent 65%);
}
.oferta-flash.flash{animation:ofertaFlash 1.7s ease-out 1}
@keyframes ofertaFlash{
  0%{opacity:0;transform:translate(-50%,-50%) scale(.8)}
  30%{opacity:1}
  100%{opacity:0;transform:translate(-50%,-50%) scale(1.18)}
}
.oferta-preco{transform-origin:left center}
.oferta-preco.preco-pop{animation:precoPop .9s var(--ease-out) 1}
@keyframes precoPop{0%{transform:scale(.9)}55%{transform:scale(1.05)}100%{transform:scale(1)}}

/* ---------- Reveal on scroll ---------- */
.reveal-init{
  opacity:0;transform:translateY(30px) scale(.985);filter:blur(6px);
  transition:opacity .65s var(--ease-out),transform .65s var(--ease-out),filter .65s var(--ease-out);
}
/* Containers grandes entram sem blur (só compositor: opacity + transform) */
.reveal-init.reveal--flat{transform:translateY(24px);filter:none}
.reveal-init.reveal-in{opacity:1;transform:none;filter:none}

/* ---------- Movimento reduzido ---------- */
@media (prefers-reduced-motion: reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{animation-duration:.01ms !important;animation-iteration-count:1 !important;transition-duration:.01ms !important}
  .reveal-init,.hero-pre{opacity:1;transform:none;filter:none}
}

/* ==========================================================================
   Camada V8.1 · seções novas + imersão 3D dirigida pelo scroll
   Motor: js adiciona html.scenes e escreve --p / classes .on por cena.
   Sem html.scenes (sem JS ou prefers-reduced-motion) tudo fica estático
   e visível — progressive enhancement de verdade.
   ========================================================================== */

.visually-hidden{
  position:absolute;width:1px;height:1px;margin:-1px;padding:0;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
}

/* ---------- Atmosfera por ato (véu fixo que aquece conforme a página) ---------- */
.bg-act{
  position:fixed;inset:0;pointer-events:none;z-index:0;opacity:0;
  background:
    radial-gradient(90% 70% at 50% 30%,rgba(181,119,30,0.10),transparent 70%),
    radial-gradient(120% 80% at 50% 110%,rgba(60,38,10,0.5),transparent 60%);
}

/* ---------- Profundidade de entrada das seções (data-scene="rise") ----------
   One-shot: a seção chega de trás UMA vez e assenta em transform:none
   (texto nunca se move durante a leitura; nitidez garantida no repouso). */
html.scenes [data-scene="rise"] > .container{
  opacity:0;
  transform:perspective(1100px) translate3d(0,var(--rise-y,44px),var(--rise-z,-150px));
  transition:opacity .8s var(--ease-out),transform .8s var(--ease-out);
}
html.scenes [data-scene="rise"].scene-in > .container{opacity:1;transform:none}
@media (max-width:760px){
  html.scenes [data-scene="rise"] > .container{--rise-y:30px;--rise-z:-70px}
}

/* ---------- Hero: despedida em profundidade ao rolar ---------- */
html.scenes .hero-content{
  transform:translateY(calc(var(--hp,0) * -38px));
  opacity:calc(1 - var(--hp,0) * 0.9);
}

/* ==========================================================================
   S4 · O PROTOCOLO EM 3 PASSOS (cena sticky)
   ========================================================================== */
.passos-section{position:relative;z-index:2;padding-block:calc(var(--space-act)/2)}
.passos-sticky .container{width:100%}
.passos-title{max-width:900px}
.passos-grid{
  display:grid;grid-template-columns:repeat(3,1fr);gap:20px;
  perspective:1100px;
}
@media (max-width:879px){.passos-grid{grid-template-columns:1fr;gap:14px}}
.passo-card{
  position:relative;background:var(--bg-card);border:1px solid var(--line-25);
  --cut:18px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  padding:clamp(22px,2.6vw,34px);
  transition:border-color .5s,box-shadow .5s;
}
.passo-head{display:flex;align-items:center;gap:14px;margin-bottom:14px}
.passo-num{
  font-family:var(--font-display);font-weight:800;font-size:clamp(44px,4.6vw,64px);line-height:1;
  background:var(--grad-num);-webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 18px rgba(236,196,95,0.25));
}
.passo-kicker{
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--label-gold);
}
.passo-card h3{
  font-family:var(--font-display);font-weight:800;font-size:clamp(20px,2vw,25px);
  text-transform:uppercase;color:var(--ink-title);margin:0 0 10px;line-height:1.1;
}
.passo-card p{margin:0;font-size:14.5px;line-height:1.62;color:var(--ink-mut)}
.passo-card.lead{
  border-color:rgba(236,196,95,0.6);
  box-shadow:0 0 0 1px rgba(236,196,95,0.2),0 26px 60px -30px rgba(214,154,60,0.5);
}
.passos-pilares{margin-top:clamp(26px,3.4vw,44px);text-align:center}
.pilares-lead{
  margin:0 auto 16px;font-size:14.5px;color:var(--ink-body);max-width:var(--measure);
}
.pilares-row{display:flex;flex-wrap:wrap;justify-content:center;gap:12px}
.pilar{
  display:inline-flex;flex-direction:column;gap:2px;align-items:center;
  padding:13px 26px;border:1px solid var(--line-30);background:rgba(214,154,60,0.05);
  --cut:12px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.pilar .ic{width:20px;height:20px;margin-bottom:6px;opacity:.95}
.pilar b{
  font-family:var(--font-display);font-weight:800;font-size:17px;
  letter-spacing:.08em;text-transform:uppercase;color:var(--gold-honey);
}
.pilar i{font-style:normal;font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-dim)}
.passos-fecho{
  margin:clamp(24px,3vw,38px) auto 0;text-align:center;
  font-size:clamp(15.5px,1.7vw,18.5px);line-height:1.7;color:var(--ink-lede);
  max-width:var(--measure);
}
.passos-fecho strong{color:var(--gold-honey);font-weight:600}

/* Cena sticky só no desktop (no mobile o conteúdo empilhado excede a viewport
   e a coreografia acenderia abaixo da dobra; lá vira fluxo normal com a mesma
   sequência dirigida pela posição) */
@media (min-width:880px){
  html.scenes .passos-section{height:260vh;height:260svh;padding-block:0}
  html.scenes .passos-sticky{
    position:sticky;top:0;min-height:100vh;min-height:100svh;
    display:flex;align-items:center;
    padding:clamp(76px,10vh,110px) 0 clamp(28px,4vh,56px);
  }
}
html.scenes .passos-section [data-step]{
  opacity:0;
  transform:perspective(1000px) translate3d(0,42px,-110px);
  transition:opacity .6s var(--ease-out),transform .6s var(--ease-out),border-color .5s,box-shadow .5s;
}
html.scenes .passos-section [data-step].on{opacity:1;transform:none}
html.scenes .passos-section .passo-card.on:not(.lead){opacity:.68}
@media (max-width:879px){
  html.scenes .passos-section [data-step]{transform:translate3d(0,30px,0)}
}

/* ==========================================================================
   S5 · DEMONSTRAÇÃO: A PRIMEIRA VITÓRIA (cena sticky, janelas de terminal)
   ========================================================================== */
.demo-section{position:relative;z-index:2;padding-block:calc(var(--space-act)/2)}
.demo-sticky .container{width:100%}
.demo-title{max-width:880px;margin-bottom:14px}
.demo-subtitle{max-width:680px;margin-bottom:clamp(26px,3.4vw,40px)}
.demo-stage{
  display:grid;grid-template-columns:minmax(0,1fr) clamp(56px,7vw,110px) minmax(0,1fr);
  align-items:stretch;max-width:1120px;margin:0 auto;
}
/* Janela de conversa: anatomia de um chat de IA (barra, thread com avatar e
   balão, campo de digitação / ações da resposta) */
.chat-app{
  flex:1;text-align:center;
  font-family:var(--font-mono);font-size:10px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-dim);
}
.chat-thread{flex:1;padding:20px 18px;display:flex;flex-direction:column}
.chat-msg{display:flex;gap:12px;align-items:flex-start}
.chat-av{
  flex-shrink:0;width:30px;height:30px;
  display:flex;align-items:center;justify-content:center;
  font-family:var(--font-mono);font-size:10px;letter-spacing:.06em;
  border-radius:50%;
}
.chat-av--user{background:rgba(214,154,60,0.16);border:1px solid rgba(236,196,95,0.4);color:var(--label-gold)}
.chat-av--ai{background:var(--grad-cta);color:var(--on-gold)}
.chat-av--ai .ic{width:17px;height:17px}
.chat-bubble{
  flex:1;min-width:0;
  border:1px solid var(--line-15);background:rgba(214,154,60,0.04);
  --cut:10px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.chat-msg--ai .chat-bubble{background:rgba(214,154,60,0.07);border-color:var(--line-22)}
.chat-input{
  display:flex;align-items:center;gap:12px;
  margin:0 18px 18px;padding:11px 12px 11px 16px;
  border:1px solid var(--line-22);background:rgba(0,0,0,0.25);border-radius:26px;
}
.chat-ph{flex:1;font-size:13px;color:var(--ink-faint)}
.chat-send{
  width:28px;height:28px;flex-shrink:0;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:var(--grad-cta);color:var(--on-gold);
}
.chat-send .ic{width:15px;height:15px}
.chat-tools{display:flex;gap:18px;margin:0 18px 18px;padding-left:42px}
.chat-tool{
  display:inline-flex;align-items:center;gap:6px;
  font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--ink-dim);
}
.chat-tool .ic{width:14px;height:14px}

.demo-win{
  position:relative;background:#150d06;border:1px solid var(--line-28);
  --cut:16px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  box-shadow:0 34px 90px -40px rgba(0,0,0,0.8),0 0 60px -30px rgba(214,154,60,0.35);
  display:flex;flex-direction:column;
}
.demo-winbar{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:12px 16px;border-bottom:1px solid var(--line-15);
  background:linear-gradient(180deg,rgba(214,154,60,0.08),transparent);
}
.demo-dots{display:inline-flex;gap:6px}
.demo-dots i{width:9px;height:9px;border-radius:50%;background:rgba(214,154,60,0.35)}
.demo-dots i:first-child{background:rgba(236,196,95,0.75)}
.demo-tag{
  font-family:var(--font-mono);font-size:10px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--label-gold);
}
.demo-win--out .demo-tag{color:var(--champagne-2)}
.demo-body{
  padding:15px 16px;
  font-family:var(--font-mono);font-size:12.5px;line-height:1.8;
  color:var(--ink-check);
}
.demo-win--out .demo-body{color:var(--ink-soft)}
.demo-body .t-line{display:block}
.demo-body .t-line--gap{margin-top:12px}
.demo-body .t-line--head{color:var(--gold-honey);letter-spacing:.06em}
.demo-body .t-line b{color:var(--gold-honey);font-weight:700}
/* Cursor de digitação: acompanha a última linha digitada (classe .tip via JS) */
@keyframes caretBlink{0%,100%{opacity:1}50%{opacity:0}}
html.scenes .demo-section.typing .t-line.tip::after{
  content:"";display:inline-block;width:8px;height:14px;margin-left:3px;vertical-align:-2px;
  background:var(--gold-honey);box-shadow:0 0 10px rgba(236,196,95,0.7);
  animation:caretBlink 1s steps(1) infinite;
}
.demo-link{display:flex;align-items:center;justify-content:center}
.demo-link svg{width:100%;height:40px;overflow:visible;filter:drop-shadow(0 0 8px rgba(236,196,95,0.5))}
.demo-link-path{stroke-dasharray:1;stroke-dashoffset:calc(1 - var(--lp,1))}
.demo-legenda{
  margin:clamp(24px,3vw,36px) auto 0;text-align:center;
  font-size:clamp(14.5px,1.6vw,17px);line-height:1.7;color:var(--ink-lede);
  max-width:var(--measure);
}
.demo-legenda strong{color:var(--gold-honey);font-weight:600}
.demo-cta{margin-top:22px}
.demo-aviso{
  margin:16px auto 0;text-align:center;
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.06em;
  color:var(--ink-dim);max-width:520px;
}
@media (max-width:979px){
  .demo-stage{grid-template-columns:1fr;gap:0}
  .demo-link{height:56px}
  .demo-link svg{width:44px;transform:rotate(90deg)}
}

/* Cena sticky da demonstração (só no desktop; ver nota da cena dos passos) */
@media (min-width:980px){
  html.scenes .demo-section{height:320vh;height:320svh;padding-block:0}
  html.scenes .demo-sticky{
    position:sticky;top:0;min-height:100vh;min-height:100svh;
    display:flex;align-items:center;
    padding:clamp(72px,9vh,104px) 0 clamp(24px,3.5vh,48px);
  }
}
html.scenes .demo-win{
  opacity:0;transition:opacity .7s var(--ease-out),transform .7s var(--ease-out);
}
html.scenes .demo-win--cmd{transform:perspective(1300px) translate3d(-30px,34px,-120px) rotateY(9deg)}
html.scenes .demo-win--out{transform:perspective(1300px) translate3d(30px,34px,-120px) rotateY(-9deg)}
html.scenes .demo-win.on{opacity:1;transform:none}
html.scenes .demo-section .t-line{opacity:0;transform:translateY(6px)}
html.scenes .demo-section .t-line.on{
  opacity:1;transform:none;
  transition:opacity .3s ease-out,transform .3s ease-out;
}
html.scenes .demo-legenda,
html.scenes .demo-cta,
html.scenes .demo-aviso{
  opacity:0;transform:translateY(18px);visibility:hidden;
  transition:opacity .55s var(--ease-out),transform .55s var(--ease-out),visibility 0s .55s;
}
html.scenes .demo-legenda.on,
html.scenes .demo-cta.on,
html.scenes .demo-aviso.on{
  opacity:1;transform:none;visibility:visible;
  transition:opacity .55s var(--ease-out),transform .55s var(--ease-out),visibility 0s 0s;
}
@media (max-width:979px){
  html.scenes .demo-win--cmd,
  html.scenes .demo-win--out{transform:translate3d(0,30px,0)}
}

/* ==========================================================================
   S6 · IMPROVISO vs PROTOCOLO (quadro comparativo)
   ========================================================================== */
.versus-section{position:relative;z-index:2;padding-block:calc(var(--space-section)/2)}
.versus-table{
  position:relative;max-width:1020px;margin:0 auto;
  border:1px solid var(--line-25);background:var(--bg-card);
  --cut:20px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.vs-row{
  display:grid;grid-template-columns:minmax(150px,0.7fr) 1fr 1fr;
  border-top:1px solid var(--line-12);
}
.vs-row:first-child{border-top:none}
.vs-cell{padding:clamp(14px,1.8vw,20px) clamp(14px,2vw,24px);font-size:14.5px;line-height:1.55}
.vs-cell--label{
  font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--label-gold);
  display:flex;align-items:center;
}
.vs-cell--imp{color:var(--ink-mut)}
.vs-cell--pro{
  color:var(--ink-check);
  background:rgba(214,154,60,0.07);
  border-left:1px solid var(--line-20);
  position:relative;
}
.vs-row--head .vs-cell{
  padding-top:18px;padding-bottom:18px;
  font-family:var(--font-display);font-weight:800;font-size:15px;
  letter-spacing:.1em;text-transform:uppercase;
}
.vs-row--head .vs-cell--imp{color:var(--ink-dim)}
.vs-row--head .vs-cell--pro{color:var(--gold-honey)}
.versus-fecho{
  margin:clamp(26px,3.2vw,40px) auto 0;text-align:center;
  font-size:clamp(15px,1.65vw,17.5px);line-height:1.7;color:var(--ink-lede);
  max-width:var(--measure);
}
.versus-fecho strong{color:var(--gold-honey);font-weight:600}
@media (max-width:760px){
  .vs-row{grid-template-columns:1fr}
  /* Cabeçalhos saem da tela mas ficam na árvore de acessibilidade
     (display:none removeria os columnheader para leitores de tela) */
  .vs-row--head{
    position:absolute;width:1px;height:1px;margin:-1px;padding:0;
    overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0;
  }
  .vs-row--head + .vs-row{border-top:none}
  .vs-cell--label{padding-bottom:4px}
  .vs-cell--imp,.vs-cell--pro{padding-top:8px}
  .vs-cell--imp::before,.vs-cell--pro::before{
    display:block;margin-bottom:3px;
    font-family:var(--font-mono);font-size:9.5px;letter-spacing:.16em;text-transform:uppercase;
  }
  .vs-cell--imp::before{content:"No improviso";color:var(--ink-dim)}
  .vs-cell--pro::before{content:"No protocolo";color:var(--gold-honey)}
  .vs-cell--pro{border-left:none}
}

/* Coreografia do quadro: mesa deita para o leitor UMA vez, linhas entram em sequência */
html.scenes .versus-table{
  opacity:0;transform-origin:50% 0;
  transform:perspective(1300px) rotateX(8deg) translateY(26px);
  transition:opacity .8s var(--ease-out),transform .8s var(--ease-out);
}
html.scenes .versus-section.scene-in .versus-table{opacity:1;transform:none}
html.scenes .versus-table .vs-row{opacity:0;transform:translateY(16px);transition:opacity .5s var(--ease-out),transform .5s var(--ease-out)}
html.scenes .versus-table .vs-row.on{opacity:1;transform:none}
@keyframes proSweep{
  0%{box-shadow:inset 0 0 0 0 rgba(236,196,95,0)}
  45%{box-shadow:inset 0 0 34px -6px rgba(236,196,95,0.4)}
  100%{box-shadow:inset 0 0 0 0 rgba(236,196,95,0)}
}
html.scenes .versus-section.scene-done .vs-cell--pro{animation:proSweep 1.4s ease-out 1}

/* ==========================================================================
   S8 · KIT DE CONFORMIDADE (as 4 folhas que se abrem em leque)
   ========================================================================== */
.kit-block{margin:clamp(34px,4.6vw,64px) 0 44px}
.kit-title{
  text-align:center;font-family:var(--font-display);font-weight:800;
  font-size:clamp(22px,3vw,36px);text-transform:uppercase;
  color:var(--ink-title);margin:0 auto clamp(26px,3.4vw,40px);max-width:760px;line-height:1.1;
}
.kit-docs{display:grid;grid-template-columns:repeat(4,1fr);gap:22px}
@media (max-width:979px){.kit-docs{grid-template-columns:repeat(2,1fr)}}
@media (max-width:560px){.kit-docs{grid-template-columns:1fr}}
/* Cartões de documento: retos, alinhados, mesma altura. Sem rotação e sem
   linhas falsas de texto (liam como rascunho, não como material premium). */
.kit-doc{
  position:relative;height:100%;
  display:flex;flex-direction:column;align-items:flex-start;
  background:linear-gradient(170deg,rgba(181,119,30,0.13),#1b1108 62%);
  border:1px solid var(--line-25);
  --cut:16px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  padding:clamp(22px,2.4vw,30px);
  transition:border-color .4s,transform .45s var(--ease-out),box-shadow .45s;
  box-shadow:0 22px 50px -30px rgba(0,0,0,0.7);
}
@media (hover:hover){
  .kit-doc:hover{
    border-color:rgba(236,196,95,0.55);transform:translateY(-5px);
    box-shadow:0 30px 60px -30px rgba(214,154,60,0.4);
  }
}
.kit-doc-num{
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.22em;
  color:var(--gold-honey);
}
.kit-ic{
  width:26px;height:26px;padding:11px;box-sizing:content-box;
  color:var(--gold-honey);margin:20px 0 22px;
  background:rgba(214,154,60,0.07);border:1px solid rgba(236,196,95,0.4);
  --cut:11px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.kit-doc h4{
  font-family:var(--font-display);font-weight:800;font-size:clamp(16px,1.55vw,19px);
  text-transform:uppercase;color:var(--ink-title);line-height:1.16;
  margin:auto 0 10px;letter-spacing:.01em;
}
.kit-doc p{margin:0;font-size:13px;line-height:1.55;color:var(--ink-mut)}
.kit-legenda{
  margin:clamp(22px,2.8vw,32px) auto 0;text-align:center;
  font-size:15px;line-height:1.65;color:var(--ink-body);max-width:var(--measure);
}
.kit-legenda strong{color:var(--gold-honey);font-weight:600}

/* Cena: os 4 documentos sobem em sequência */
html.scenes .kit-docs .kit-doc{
  opacity:0;transform:translateY(30px);
  transition:opacity .6s var(--ease-out),transform .6s var(--ease-out),border-color .4s,box-shadow .45s;
  transition-delay:calc(var(--kd) * .1s);
}
html.scenes .kit-docs.on .kit-doc{opacity:1;transform:none}
html.scenes .kit-docs.on .kit-doc:hover{transform:translateY(-5px);transition-delay:0s}

/* ==========================================================================
   S11 · SUA JORNADA EM 4 PASSOS (linha do tempo horizontal em cena sticky)
   ========================================================================== */
.jornada-section{position:relative;z-index:2;padding-block:calc(var(--space-section)/2)}
.jornada-sticky .container{width:100%}
.jornada-title{max-width:880px}
.jornada-viewport{position:relative;max-width:1120px;margin:0 auto}
.jornada-track{position:relative;padding-bottom:64px}
.jornada-row{
  list-style:none;margin:0;padding:0;
  display:grid;grid-template-columns:repeat(4,1fr);gap:18px;
}
.marco{position:relative}
.marco-card{
  position:relative;height:100%;
  background:var(--bg-card);border:1px solid var(--line-25);
  --cut:16px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  padding:clamp(18px,2.2vw,28px);
  transition:border-color .4s,box-shadow .4s;
}
.marco-kicker{
  display:block;font-family:var(--font-mono);font-size:10px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--label-gold);margin-bottom:10px;
}
.marco-card h3{
  font-family:var(--font-display);font-weight:800;font-size:clamp(18px,1.9vw,23px);
  text-transform:uppercase;color:var(--ink-title);margin:0 0 8px;line-height:1.1;
}
.marco-card p{margin:0;font-size:13.5px;line-height:1.6;color:var(--ink-mut)}
.jornada-line{
  position:absolute;left:0;right:0;bottom:30px;height:2px;
  background:rgba(214,154,60,0.18);
}
.jornada-prog{
  position:absolute;left:0;top:0;height:100%;width:100%;
  background:linear-gradient(90deg,#b5771e,#f7e3a8);
  box-shadow:0 0 14px rgba(236,196,95,0.8);
  transform:scaleX(var(--jp,1));transform-origin:left center; /* compositor-only */
}
.marco-node{
  position:absolute;left:50%;bottom:-38px;width:11px;height:11px;
  transform:translateX(-50%) rotate(45deg);
  background:var(--bg-card);border:1px solid rgba(236,196,95,0.6);
  transition:background .35s,box-shadow .35s;
}
.marco.lit .marco-node{background:var(--grad-cta);box-shadow:0 0 14px rgba(236,196,95,0.9)}
.marco.lit .marco-card{border-color:rgba(236,196,95,0.5)}

/* Desktop: faixa horizontal (layout da copy) com marcos que acendem em sequência
   conforme a linha dourada se preenche — sem cena sticky (teto de 2 por página) */
@media (min-width:880px){
  html.scenes .marco{
    opacity:0;transform:translateY(26px);
    transition:opacity .55s var(--ease-out) calc(var(--mi,0) * .1s),transform .55s var(--ease-out) calc(var(--mi,0) * .1s);
  }
  html.scenes .marco.on{opacity:1;transform:none}
  html.scenes .marco .marco-card{
    transition:opacity .45s var(--ease-out),transform .45s var(--ease-out),border-color .4s,box-shadow .4s;
  }
  html.scenes .marco.lit .marco-card{box-shadow:0 26px 60px -30px rgba(214,154,60,0.4)}
}
/* Mobile: linha vertical, sem sticky (leitura natural no dedo) */
@media (max-width:879px){
  .jornada-row{grid-template-columns:1fr;gap:14px}
  .jornada-track{padding-bottom:0;padding-left:26px}
  .jornada-line{left:6px;right:auto;top:6px;bottom:6px;width:2px;height:auto}
  .jornada-prog{transform:scaleY(var(--jp,1));transform-origin:top center}
  .marco-node{left:-26px;bottom:auto;top:22px}
  html.scenes .marco{opacity:0;transform:translateY(24px);transition:opacity .55s var(--ease-out),transform .55s var(--ease-out)}
  html.scenes .marco.on{opacity:1;transform:none}
}

/* ==========================================================================
   S13 · Trilhas expandíveis sob o mapa de módulos
   ========================================================================== */
.trilhas-block{max-width:720px;margin:0 auto}

/* ==========================================================================
   S14 · Bônus: a trava que cada um resolve
   ========================================================================== */
.bonus-trava{margin:12px auto 0;font-size:13px;line-height:1.5;color:var(--ink-dim);max-width:300px}
.bonus-trava b{color:var(--ink-check);font-weight:600}

/* ==========================================================================
   S17 · Oferta: stack objeção a objeção + ancoragem
   ========================================================================== */
.stack-core-solve{font-size:12.5px;line-height:1.5;color:var(--ink-mut);margin-top:6px}
.oferta-list--solve li{flex-direction:column;gap:2px;position:relative;padding-left:24px}
.oferta-list--solve li::before{position:absolute;left:0;top:1px}
.oferta-list--solve li b{font-weight:600;color:var(--ink-check)}
.oferta-list--solve li span{font-size:12.5px;line-height:1.5;color:var(--ink-dim)}
.oferta-ancora{
  margin:0 0 26px;padding:16px 18px;
  border-left:2px solid var(--gold-mid);
  background:linear-gradient(90deg,rgba(214,154,60,0.07),transparent 80%);
  font-size:14px;line-height:1.65;color:var(--ink-body);
}

/* ---------- Ajustes de cena para telas muito baixas (notebooks 720p) ---------- */
@media (min-width:880px) and (max-height:760px){
  html.scenes .passos-sticky,
  html.scenes .demo-sticky{align-items:flex-start;padding-top:70px}
  html.scenes .passos-sticky .section-title,
  html.scenes .demo-sticky .section-title{font-size:clamp(24px,3vw,34px);margin-bottom:18px}
}

/* ---------- Movimento reduzido: cenas 100% estáticas ---------- */
@media (prefers-reduced-motion: reduce){
  .demo-link-path{stroke-dashoffset:0}
  .jornada-prog{transform:none}
}

/* ==========================================================================
   Camada AR v2 · respiro + elementos autorais (28/07/2026)
   Vocabulário extraído das referências do dono (GeniAI/Lunera/Aset, Framer):
   orbes de luz, eyebrows de contexto, composições de ícone nos cards,
   anéis de progresso nos números, ferramentas em arco. Tudo marrom+ouro.
   ========================================================================== */

/* ---------- Eyebrow de contexto (pill acima de cada título) ---------- */
.sec-eyebrow{display:flex;justify-content:center;margin-bottom:20px}
.sec-eyebrow span{
  display:inline-flex;align-items:center;gap:9px;
  padding:8px 18px;border:1px solid var(--line-40);
  --cut:10px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.22em;
  text-transform:uppercase;color:var(--label-gold);
}
.sec-eyebrow span::before{
  content:"";width:6px;height:6px;transform:rotate(45deg);
  background:var(--grad-cta);box-shadow:0 0 8px rgba(236,196,95,0.7);
}

/* ---------- Orbes de luz (profundidade atmosférica por seção) ---------- */
.orb{
  position:absolute;z-index:-1;pointer-events:none;
  width:clamp(380px,44vw,760px);aspect-ratio:1;
  background:radial-gradient(closest-side,rgba(214,154,60,0.13),rgba(181,119,30,0.05) 55%,transparent 72%);
}
@keyframes orbDrift{from{transform:translate3d(0,-24px,0)}to{transform:translate3d(0,26px,0)}}
html.scenes .orb{animation:orbDrift 24s ease-in-out infinite alternate}
.orb--l{left:min(-160px,-12vw);top:6%}
.orb--r{right:min(-160px,-12vw);top:14%}
.orb--c{left:50%;top:-10%;transform:translateX(-50%)}
html.scenes .orb--c{animation:none} /* o translateX de centragem manda aqui */
@media (max-width:760px){.orb{width:76vw;opacity:.7;animation:none !important}}

/* ---------- Composições autorais (substituem os slots de arte) ---------- */
.artcomp{
  position:relative;width:100%;height:100%;overflow:hidden;
  display:flex;align-items:center;justify-content:center;
  background-color:var(--bg-alt);
  background-image:radial-gradient(rgba(214,154,60,0.13) 1px,transparent 1.4px);
  background-size:19px 19px;
}
.artcomp i{font-style:normal}
.ac-glow{
  position:absolute;width:72%;aspect-ratio:1;left:50%;top:50%;
  transform:translate(-50%,-50%);
  background:radial-gradient(closest-side,rgba(181,119,30,0.32),transparent 70%);
}
.ac-chip{
  position:relative;z-index:2;
  width:clamp(74px,32%,104px);aspect-ratio:1;
  display:flex;align-items:center;justify-content:center;
  background:linear-gradient(160deg,rgba(181,119,30,0.28),#20150c 65%);
  border:1px solid rgba(236,196,95,0.5);
  --cut:16px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  box-shadow:0 18px 44px -16px rgba(0,0,0,0.7),0 0 34px -8px rgba(236,196,95,0.35);
  color:var(--champagne-2);
}
.ac-chip svg{width:46%;height:46%;filter:drop-shadow(0 0 10px rgba(236,196,95,0.45))}
/* Anel tracejado: centrado por inset+margin (a rotação fica livre no transform) */
.ac-ring{
  position:absolute;z-index:1;inset:0;margin:auto;
  width:clamp(118px,54%,168px);aspect-ratio:1;border-radius:50%;
  border:1px dashed rgba(236,196,95,0.3);
}
html.scenes .ac-ring{animation:borderSpin 34s linear infinite}
.ac-lines{position:absolute;inset:0;z-index:1;pointer-events:none}
.ac-lines::before,.ac-lines::after{
  content:"";position:absolute;height:1px;width:26%;
  background:linear-gradient(90deg,transparent,rgba(236,196,95,0.55));
}
.ac-lines::before{left:2%;top:38%}
.ac-lines::after{right:2%;bottom:36%;transform:scaleX(-1)}
.ac-spark{
  position:absolute;z-index:1;
  font-family:var(--font-display);color:rgba(236,196,95,0.55);
  text-shadow:0 0 12px rgba(236,196,95,0.5);font-size:13px;line-height:1;
}
.ac-spark--1{left:18%;top:20%}
.ac-spark--2{right:16%;bottom:18%;font-size:10px}
@keyframes sparkFloat{from{transform:translateY(-4px)}to{transform:translateY(5px)}}
html.scenes .ac-spark{animation:sparkFloat 5.5s ease-in-out infinite alternate}
html.scenes .ac-spark--2{animation-duration:4.2s;animation-delay:.8s}
/* Legenda técnica da composição (canto, como planta/blueprint) */
.ac-tag{
  position:absolute;z-index:2;left:12px;bottom:10px;
  font-family:var(--font-mono);font-size:9px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ink-faint);
}

/* ---------- Ícones utilitários (sprite <symbol> no HTML) ---------- */
.ic{width:22px;height:22px;color:var(--gold-honey);flex-shrink:0}

/* Passos: faixa de composição no topo do card */
.passo-art{
  position:relative;display:flex;align-items:center;gap:14px;
  margin:-6px 0 16px;
}
.passo-art .ic{width:40px;height:40px;padding:9px;box-sizing:content-box;
  background:linear-gradient(160deg,rgba(181,119,30,0.24),#20150c 65%);
  border:1px solid rgba(236,196,95,0.45);
  --cut:12px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  filter:drop-shadow(0 0 10px rgba(236,196,95,0.35));
}
.passo-art i{
  flex:1;height:1px;
  background:linear-gradient(90deg,rgba(236,196,95,0.5),transparent);
}

/* Quadro: ícone junto do rótulo da linha */
.vs-cell--label .ic{width:17px;height:17px;margin-right:9px;opacity:.9}

/* Kit: ícone da folha */
.kit-ic{width:22px;height:22px;color:var(--gold-honey);margin-bottom:10px;opacity:.95}

/* Jornada: ícone do marco */
.marco-ic{
  width:36px;height:36px;padding:8px;box-sizing:content-box;color:var(--gold-honey);
  background:rgba(214,154,60,0.07);border:1px solid var(--line-30);
  --cut:10px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  margin-bottom:12px;
}

/* Confiar: chip de ícone no card */
.trust-ic{
  width:30px;height:30px;padding:8px;box-sizing:content-box;color:var(--gold-honey);
  background:rgba(214,154,60,0.07);border:1px solid var(--line-30);
  --cut:9px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  margin-bottom:14px;
}
.trust-head{display:flex;align-items:center;justify-content:space-between;gap:12px}

/* FAQ: ícone no card de contato */
.faq-ic{width:34px;height:34px;color:var(--gold-honey);margin-bottom:16px;filter:drop-shadow(0 0 10px rgba(236,196,95,0.4))}

/* ---------- Barra de números: anéis de progresso ---------- */
.stat-ring{position:relative;width:clamp(118px,10vw,150px);aspect-ratio:1;margin:0 auto 14px}
.stat-ring svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}
.ring-bg{fill:none;stroke:rgba(214,154,60,0.14);stroke-width:3}
.ring-fg{
  fill:none;stroke:var(--gold-honey);stroke-width:3;stroke-linecap:round;
  stroke-dasharray:100;stroke-dashoffset:calc(100 - var(--rv,100));
  filter:drop-shadow(0 0 6px rgba(236,196,95,0.55));
}
html.js .ring-fg{stroke-dashoffset:100;transition:stroke-dashoffset 1.6s var(--ease-out) .35s}
html.js .stats.reveal-in .ring-fg{stroke-dashoffset:calc(100 - var(--rv,100))}
.stat-ring .stat-num{
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:clamp(28px,2.6vw,38px);
}
.stat{display:flex;flex-direction:column;justify-content:flex-start}
.stat .stat-label{margin-top:0}

/* ---------- Ferramentas em arco (S12) ---------- */
.tools-arc{
  position:relative;z-index:3;margin-top:34px;
  display:flex;flex-wrap:wrap;justify-content:center;align-items:flex-start;
  gap:12px 14px;padding-bottom:26px;
}
.tools-arc::after{
  content:"";position:absolute;left:50%;bottom:0;z-index:-1;
  width:min(560px,86%);height:60px;transform:translateX(-50%);
  background:radial-gradient(50% 100% at 50% 100%,rgba(181,119,30,0.3),transparent 70%);
}
.tool-tile{
  display:inline-flex;align-items:center;gap:8px;
  padding:13px 22px;
  background:linear-gradient(160deg,rgba(181,119,30,0.2),#20150c 70%);
  border:1px solid rgba(236,196,95,0.4);
  --cut:11px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(14px,1.6vw,18px);letter-spacing:.06em;text-transform:uppercase;
  color:#ded3b8;
  box-shadow:0 18px 40px -18px rgba(0,0,0,0.7);
  transition:transform .35s var(--ease-out),border-color .35s,color .35s;
}
.tool-tile::before{
  content:"";width:7px;height:7px;transform:rotate(45deg);flex-shrink:0;
  background:var(--grad-cta);box-shadow:0 0 8px rgba(236,196,95,0.6);
}
@media (hover:hover){
  .tool-tile:hover{transform:translateY(-5px);border-color:rgba(236,196,95,0.8);color:var(--ink-title)}
}
@media (max-width:640px){.tool-tile{padding:11px 16px}}

/* ---------- Respiro interno extra (anti-bloco) ---------- */
.grid,.grid--280{gap:26px}
.era-card .era-caption{padding:26px 24px 24px}
.parte-card .parte-caption{padding:28px 26px}
.conq-card{padding:16px 16px 34px}
.trilhas-note{margin-top:34px}
.versus-table{margin-top:8px}

/* Divisor ECG ganha mais ar em volta */
.ecg-divider{padding-block:calc(var(--space-section)/3)}

/* Reduced motion: composições e arco 100% estáticos */
@media (prefers-reduced-motion: reduce){
  .orb,.ac-ring,.ac-spark{animation:none !important}
}

/* ==========================================================================
   Camada REF v3 · vocabulário das referências do dono (29/07/2026)
   Cantoneiras nos boxes, ornamentos de losango, faixa diagonal, anotações
   ligadas por linha, molduras de ícone circular/hexagonal, seta em caixa.
   ========================================================================== */

/* ---------- Cantoneiras (o "detalhe dos boxes") ----------
   Elemento próprio <i class="tfc"> para não colidir com os ::before/::after
   já usados por anel dourado (.oferta-card etc.) e spotlight (.spot). */
.tfc{position:absolute;inset:0;z-index:3;pointer-events:none}
.tfc::before,.tfc::after{
  content:"";position:absolute;width:18px;height:18px;
  border:0 solid rgba(236,196,95,0.55);
}
/* nos dois cantos VIVOS (o chanfro corta os outros dois) */
.tfc::before{top:9px;right:9px;border-top-width:1px;border-right-width:1px}
.tfc::after{bottom:9px;left:9px;border-bottom-width:1px;border-left-width:1px}
.tfc--soft::before,.tfc--soft::after{border-color:rgba(236,196,95,0.32);width:14px;height:14px}
/* Triângulo dourado preenchido (variante de acento) */
.tfc--tri::after{
  width:0;height:0;border:none;bottom:0;left:auto;right:0;
  border-style:solid;border-width:0 0 26px 26px;
  border-color:transparent transparent rgba(236,196,95,0.5) transparent;
  filter:drop-shadow(0 0 10px rgba(236,196,95,0.3));
}
/* Micro-traços de registro nas laterais */
.tfc--marks{background:
  linear-gradient(rgba(236,196,95,0.4),rgba(236,196,95,0.4)) left 0 top 50%/1px 22px no-repeat,
  linear-gradient(rgba(236,196,95,0.4),rgba(236,196,95,0.4)) right 0 top 50%/1px 22px no-repeat;
}
/* Cards que ganham cantoneira precisam de contexto posicionado */
.era-card .gframe-inner,.parte-card,.conq-card,.bonus-card,
.passo-card,.kit-doc,.marco-card,.demo-win,.fit-card,.vsl-frame{position:relative}

/* ---------- Ornamento de losango sob cada título de seção ---------- */
.section-title::after,.bonus-title::after,.kit-title::after{
  content:"◇" / ""; /* alt vazio: leitores de tela não leem o ornamento */
  display:block;width:min(360px,66%);margin:clamp(14px,1.8vw,22px) auto 0;
  font-family:var(--font-body);font-size:11px;line-height:1;
  color:rgba(236,196,95,0.7);
  background:
    linear-gradient(90deg,transparent,rgba(214,154,60,0.45)) left center/42% 1px no-repeat,
    linear-gradient(90deg,rgba(214,154,60,0.45),transparent) right center/42% 1px no-repeat;
}
/* Títulos de cena não repetem o ornamento (a cena já tem eyebrow) */
.demo-title::after{display:none}

/* ---------- Seta em caixa nos CTAs principais ---------- */
.btn:not(.btn--sm):not(.vsl-play)::before{
  content:"›" / ""; /* alt vazio: não entra no nome acessível do botão */
  order:2;
  display:flex;align-items:center;justify-content:center;
  width:22px;height:22px;margin-left:2px;
  padding:0 0 4px 1px; /* recentra o glifo no otico: a tinta do U+203A senta ~2px abaixo do meio do em e um fio a esquerda (medido na W1, mesmas deltas nas 7 instancias em 1440 e 360); o box global e border-box, o padding nao muda a pegada do selo nem a largura do botao */
  border:1px solid rgba(26,18,6,0.45);
  font-family:var(--font-display);font-weight:700;font-size:16px;line-height:1;
  transition:transform .25s var(--ease-out);
}
.btn:not(.btn--sm):hover::before{transform:translateX(3px)}

/* ---------- Checks em círculo na lista da oferta ---------- */
.oferta-list--solve li{padding-left:31px}
.oferta-list--solve li::before{
  content:"✓" / "";
  display:flex;align-items:center;justify-content:center;
  width:21px;height:21px;border-radius:50%;
  border:1px solid rgba(236,196,95,0.5);background:rgba(214,154,60,0.1);
  color:var(--gold-honey);font-size:11px;line-height:1;
  top:0;left:0;
}

/* ---------- Selo da garantia: anel duplo pontilhado ---------- */
.garantia-seal::before{
  content:"";position:absolute;inset:-11px;border-radius:50%;
  border:1px dotted rgba(236,196,95,0.35);
}

/* ---------- Instrutora: moldura com nó de conexão ---------- */
@media (min-width:900px){
  .instrutora-foto{position:relative}
  .instrutora-foto::after{
    content:"";position:absolute;top:50%;left:100%;width:clamp(20px,3vw,46px);height:1px;
    background:linear-gradient(90deg,rgba(214,154,60,0.6),transparent);
  }
  .instrutora-foto::before{
    content:"";position:absolute;top:50%;left:calc(100% - 4px);z-index:2;
    width:8px;height:8px;transform:translateY(-50%) rotate(45deg);
    background:var(--grad-cta);box-shadow:0 0 10px rgba(236,196,95,0.8);
  }
}

/* ---------- Reduced motion ---------- */
@media (prefers-reduced-motion: reduce){
  .mshot{transition:none}
}

/* ==========================================================================
   Alinhamento rígido dos cards (pedido do dono: "boxes sempre do mesmo
   tamanho e alinhados"). O item da grade estica, o card preenche a altura
   e a legenda ocupa a sobra — assim as bases batem em qualquer texto.
   ========================================================================== */
.grid > [data-reveal],
.grid--280 > [data-reveal],
.fit-grid > [data-reveal]{display:flex;flex-direction:column}
.grid > [data-reveal] > *,
.grid--280 > [data-reveal] > *,
.fit-grid > [data-reveal] > *{flex:1;width:100%}

.era-card,.era-card .gframe,.era-card .gframe-inner{height:100%}
.era-card .gframe-inner{display:flex;flex-direction:column}
.era-card .era-caption{flex:1;display:flex;flex-direction:column}

.parte-card,.conq-card,.bonus-card{height:100%;display:flex;flex-direction:column}
.parte-card .parte-caption,.conq-card .conq-body,.bonus-card .bonus-body{flex:1}
.conq-card .art-wrap,.bonus-card .art-wrap{flex-shrink:0}

/* Passos e marcos: mesma altura na linha inteira */
.passos-grid,.jornada-row{align-items:stretch}
.passo-card{height:100%;display:flex;flex-direction:column}
.marco-card{height:100%;display:flex;flex-direction:column}


/* ---------- Camada copy V4 (17/08/2026): enquete, depoimentos e valores ---------- */
.v4-polls{display:grid;grid-template-columns:1fr 1fr;gap:18px;margin-top:var(--title-gap)}
.v4-poll{
  position:relative;height:100%;
  background:var(--bg-card);border:1px solid var(--line-20);
  padding:28px 26px 24px;
  --cut:18px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.v4-poll h3{
  margin:0 0 16px;
  font-family:var(--font-display);font-weight:700;font-size:19px;
  color:var(--ink-title);letter-spacing:.02em;
}
.v4-prow{
  display:grid;grid-template-columns:132px 1fr 52px;gap:12px;align-items:center;
  padding:8px 0;border-top:1px solid var(--line-12);
}
.v4-prow span{font-size:13px;color:var(--ink-list)}
.v4-prow i{
  position:relative;display:block;height:8px;
  background:rgba(214,154,60,0.1);
  --cut:3px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.v4-prow i b{
  position:absolute;inset:0 auto 0 0;width:0;
  background:var(--grad-cta);
  transition:width 1.2s var(--ease-out);
}
.v4-poll.reveal-in .v4-prow i b,
html:not(.js) .v4-prow i b{width:var(--w)}
.v4-prow em{font-style:normal;font-family:var(--font-mono);font-size:12px;color:var(--gold-honey);text-align:right}
.v4-note{
  margin:16px 0 0;padding-top:14px;border-top:1px solid var(--line-15);
  font-size:13.5px;line-height:1.6;color:var(--ink-body);
}
.v4-note strong{color:var(--ink-hi)}
.v4-quotes-title{
  margin:clamp(54px,6.4vw,86px) auto 0;max-width:26ch;text-align:center;
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(22px,2.8vw,30px);line-height:1.2;letter-spacing:.02em;
  color:var(--ink-title);
}
.v4-quotes{display:grid;grid-template-columns:repeat(3,1fr);gap:16px;margin-top:clamp(28px,3.5vw,44px);align-items:stretch}
.v4-q{
  position:relative;margin:0;height:100%;
  display:flex;flex-direction:column;gap:12px;
  background:var(--bg-card);border:1px solid var(--line-20);
  padding:24px 22px 20px;
  --cut:16px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.v4-q blockquote{margin:0;font-size:14.5px;line-height:1.65;color:var(--ink-check)}
.v4-q blockquote::before{content:"\201C  ";color:var(--gold-honey)}
.v4-q blockquote::after{content:" \201D";color:var(--gold-honey)}
.v4-q figcaption{margin-top:auto;display:flex;flex-direction:column;gap:2px}
.v4-q figcaption b{
  font-family:var(--font-display);font-weight:700;font-size:14px;
  letter-spacing:.05em;text-transform:uppercase;color:var(--label-gold);
}
.v4-q figcaption span{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.06em;color:var(--ink-mut)}
.v4-foot{
  margin:26px auto 0;text-align:center;
  font-family:var(--font-mono);font-size:11.5px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--ink-dim);
}

/* Valores no stack da oferta + total + PIX */
.sv{
  font-style:normal;font-family:var(--font-mono);font-weight:500;font-size:12px;
  color:var(--ink-dim);margin-left:8px;white-space:nowrap;
}
.stack-total{
  display:flex;justify-content:space-between;align-items:baseline;
  margin-top:14px;padding-top:12px;border-top:1px solid var(--line-20);
}
.stack-total span{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mut)}
.stack-total em{
  font-style:normal;font-family:var(--font-mono);font-size:16px;color:var(--ink-list);
  text-decoration:line-through;text-decoration-color:rgba(214,154,60,0.7);
}
.oferta-pix{margin-top:6px;font-size:15px;color:var(--ink-lede)}
.oferta-pix b{color:var(--gold-honey)}

@media (max-width:940px){
  .v4-polls{grid-template-columns:1fr}
  .v4-quotes{grid-template-columns:1fr 1fr}
}
@media (max-width:640px){
  .v4-quotes{grid-template-columns:1fr}
  .v4-prow{grid-template-columns:104px 1fr 46px}
}
@media (prefers-reduced-motion:reduce){
  .v4-prow i b{transition:none;width:var(--w)}
}

/* Bônus com 4 cards: grade 2x2 equilibrada */
.bonus-grid{grid-template-columns:repeat(2,minmax(0,1fr));max-width:960px;margin-left:auto;margin-right:auto}
@media (max-width:720px){.bonus-grid{grid-template-columns:1fr}}

/* ---------- Copy V4 · blocos que substituíram os antigos ---------- */
.section--tight{padding-top:calc(var(--space-section) * .5);padding-bottom:0}
.v4-bridge{
  margin:0 auto;max-width:48ch;text-align:center;
  font-size:clamp(18px,2.2vw,22px);line-height:1.55;color:var(--ink-lede);
}
.v4-bridge strong{color:var(--ink-hi)}
.v4-fecho{
  margin:clamp(34px,4.5vw,54px) auto 0;max-width:52ch;text-align:center;
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(20px,2.6vw,26px);letter-spacing:.02em;line-height:1.3;
  color:var(--ink-title);
}
.v4-fecho strong{color:var(--gold-honey);font-weight:700}

/* Índice dos módulos (V4: 8 linhas) */
.v4-mods{
  display:grid;grid-template-columns:1fr 1fr;gap:10px;
  max-width:920px;margin:clamp(30px,4vw,46px) auto 0;
}
.v4-mod{
  display:flex;align-items:center;gap:14px;
  background:var(--bg-card);border:1px solid var(--line-20);
  padding:15px 20px;
  --cut:12px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.v4-mod .ic{width:20px;height:20px;flex:none;color:var(--gold-mid)}
.v4-mod span{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-dim);flex:none}
.v4-mod b{font-family:var(--font-display);font-weight:700;font-size:16px;letter-spacing:.03em;text-transform:uppercase;color:var(--ink-title)}

/* Super bônus · preço e grade de especialidades */
.v4-price{display:flex;align-items:baseline;justify-content:center;gap:14px;margin-top:20px}
.v4-de{
  font-family:var(--font-mono);font-size:15px;color:var(--ink-dim);
  text-decoration:line-through;text-decoration-color:rgba(214,154,60,0.6);
}
.v4-por{font-family:var(--font-display);font-weight:800;font-size:clamp(30px,4.6vw,46px);letter-spacing:.02em}
.v4-kit{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-top:clamp(34px,4.5vw,54px)}
.v4-kit-cell{
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;
  text-align:center;height:100%;
  background:var(--bg-card);border:1px solid var(--line-20);
  padding:20px 12px 18px;
  --cut:12px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.v4-kit-cell b{
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--gold-honey);font-weight:700;
}
.v4-kit-cell span{
  font-family:var(--font-display);font-weight:700;font-size:15px;
  letter-spacing:.02em;text-transform:uppercase;color:var(--ink-hi);line-height:1.25;
}
.v4-kit-cell--combo{
  background:linear-gradient(150deg,rgba(181,119,30,0.3),rgba(236,196,95,0.1)),var(--bg-card);
  border-color:var(--line-45);
}
.v4-kit-legenda{
  margin:26px auto 0;max-width:58ch;text-align:center;
  font-size:15px;line-height:1.65;color:var(--ink-body);
}
.v4-kit-legenda strong{color:var(--ink-hi)}

/* Faixa rolante das categorias do Kit */
.v4-mq{
  position:relative;overflow:hidden;
  margin-top:clamp(44px,5.5vw,70px);
  padding:14px 0;
  border-top:1px solid var(--line-15);border-bottom:1px solid var(--line-15);
  background:rgba(214,154,60,0.04);
}
.v4-mq::before,.v4-mq::after{content:"";position:absolute;top:0;bottom:0;width:90px;z-index:2;pointer-events:none}
.v4-mq::before{left:0;background:linear-gradient(90deg,var(--bg),transparent)}
.v4-mq::after{right:0;background:linear-gradient(-90deg,var(--bg),transparent)}
.v4-mq-track{display:flex;width:max-content;animation:v4mq 42s linear infinite}
.v4-mq-track span{
  padding-right:26px;white-space:nowrap;
  font-family:var(--font-mono);font-size:12px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--label-gold);
}
.v4-mq-track span::after{content:"·";margin-left:26px;color:var(--gold-mid)}
@keyframes v4mq{to{transform:translateX(-50%)}}

/* Oferta: assinatura da autora */
.oferta-by{
  margin:-6px 0 18px;
  font-family:var(--font-mono);font-size:11.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--ink-mut);
}

@media (max-width:1080px){.v4-kit{grid-template-columns:repeat(4,1fr)}}
@media (max-width:940px){
  .v4-mods{grid-template-columns:1fr}
  .v4-kit{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:640px){.v4-kit{grid-template-columns:1fr 1fr}}
@media (prefers-reduced-motion:reduce){.v4-mq-track{animation:none}}

/* ---------- Vitrine dos módulos em ARCO 3D (ref. carrossel curvo) ----------
   Os pôsteres ficam numa parede côncava: o painel central encara o leitor
   e os das pontas giram trazendo a borda externa para a frente. O giro é
   função da posição do painel dentro da tira (--u vem do main.js). */
.mods-rail--arc{
  width:100vw;margin-left:calc(50% - 50vw);
  margin-bottom:clamp(30px,4vw,52px);
}
.mods-rail--arc .mods-strip{
  perspective:1000px;
  perspective-origin:50% 50%;
  gap:clamp(8px,1vw,14px);
  padding:clamp(52px,5.6vw,92px) 0 clamp(46px,5vw,78px);
  align-items:center;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
}
/* Geometria do arco: --rot e --z vêm do main.js (círculo verdadeiro,
   z = R(1 - cos θ)), então as pontas AVANÇAM para o leitor e a faixa
   ganha a silhueta curva do telão panorâmico. */
.mods-rail--arc .mshot{
  flex:0 0 clamp(168px,19.5vw,268px);
  transform:
    translateZ(var(--z,0px))
    rotateY(var(--rot,0deg))
    translateY(var(--ty,0px));
  transform-origin:50% 50%;
  transition:none;
  backface-visibility:hidden;
}
.mods-rail--arc .mshot img{
  aspect-ratio:2/3.05;
  --cut:0px;clip-path:none;
  border-radius:4px;
  border-color:rgba(236,196,95,0.2);
  filter:saturate(.95) brightness(calc(1 - var(--ua,0) * 0.14));
  box-shadow:0 34px 70px -28px rgba(0,0,0,0.9);
  transition:border-color .4s;
}
/* Dobra: o lado do painel que gira para longe recebe sombra suave */
.mods-rail--arc .mshot::after{
  content:"";position:absolute;left:0;right:0;top:0;
  aspect-ratio:2/3.05;border-radius:4px;
  pointer-events:none;
  background:linear-gradient(90deg,
    rgba(8,5,2,var(--shl,0)) 0%,
    rgba(8,5,2,0) 42%,
    rgba(8,5,2,0) 58%,
    rgba(8,5,2,var(--shr,0)) 100%);
}
.mods-rail--arc .mshot-cap,
.mods-rail--arc .mshot-name{
  opacity:calc(1 - var(--ua,0) * 0.75);
  transition:opacity .2s linear;
}
.mods-rail--arc .mods-nav{top:calc(50% - 22px)}
.mods-rail--arc .mods-nav--prev{left:clamp(8px,3vw,42px)}
.mods-rail--arc .mods-nav--next{right:clamp(8px,3vw,42px)}
@media (hover:hover){
  .mods-rail--arc .mshot:hover{--ty:-8px}
  .mods-rail--arc .mshot:hover img{border-color:rgba(236,196,95,0.75)}
}
/* Sem JS ou com movimento reduzido: tira reta, sem giro */
html:not(.js) .mods-rail--arc .mshot{transform:none}
@media (prefers-reduced-motion:reduce){
  .mods-rail--arc .mshot{transform:none}
  .mods-rail--arc .mshot::after{display:none}
  .mods-rail--arc .mshot img{filter:saturate(.95)}
  .mods-rail--arc .mshot-cap,.mods-rail--arc .mshot-name{opacity:1}
}
@media (max-width:760px){
  .mods-rail--arc .mods-strip{
    perspective:760px;
    /* painéis das pontas crescem ~12%: o respiro evita corte vertical */
    padding:clamp(44px,11vw,64px) 0 clamp(48px,12vw,70px);
  }
  .mods-rail--arc .mshot{flex-basis:clamp(150px,46vw,200px)}
}

/* ==========================================================================
   HERO EM CARTÃO INSET (formato pedido pelo dono, 17/08/2026)
   Anatomia da referência: a seção vira um cartão flutuante de cantos
   arredondados com respiro em volta; a mídia preenche o cartão; um
   cartão de vidro no canto inferior esquerdo; e no inferior direito um
   bloco da COR DO FUNDO com cantos invertidos (as duas máscaras em SVG),
   que dá o efeito de "mordida" no canto do cartão.
   ========================================================================== */
.hero{
  --hero-pad:clamp(10px,1.3vw,22px);
  min-height:auto;
  padding:var(--hero-pad);
  display:block;
  overflow:visible;
}
.hero-card{
  position:relative;isolation:isolate;
  width:100%;max-width:1536px;margin:0 auto;
  height:calc(100svh - var(--hero-pad) * 2);
  min-height:560px;max-height:1010px;
  border-radius:clamp(18px,2.6vw,46px);
  overflow:hidden;
  display:flex;align-items:center;
}
.hero-card .container{position:relative;z-index:2;width:100%}
.hero-card .hero-bg{border-radius:inherit}

/* Cartão de vidro (inferior esquerdo) */
.hero-stat{
  position:absolute;z-index:5;
  left:clamp(14px,2.4vw,42px);bottom:clamp(14px,2.4vw,42px);
  display:flex;flex-direction:column;gap:14px;
  padding:clamp(15px,1.5vw,22px);
  border-radius:clamp(16px,2vw,32px);
  background:rgba(24,15,8,0.44);
  border:1px solid rgba(236,196,95,0.24);
  -webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);
  min-width:clamp(158px,15vw,196px);
  box-shadow:0 24px 60px -30px rgba(0,0,0,0.9);
}
.hs-top{display:flex;flex-direction:column;gap:4px}
.hs-num{
  font-family:var(--font-display);font-weight:800;line-height:1;
  font-size:clamp(26px,2.7vw,36px);
}
.hs-lbl{
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-mut);
}
.hs-btn{
  display:inline-flex;align-items:center;gap:9px;align-self:flex-start;
  padding:6px 16px 6px 6px;border-radius:999px;
  background:var(--grad-cta);color:var(--on-gold);
  font-size:13px;font-weight:600;text-decoration:none;
  transition:transform .25s var(--ease-out),box-shadow .25s;
  box-shadow:0 10px 26px -12px rgba(214,154,60,0.8);
}
.hs-btn:hover{transform:scale(1.03);box-shadow:0 14px 32px -12px rgba(214,154,60,1)}
.hs-btn-ic{
  display:flex;align-items:center;justify-content:center;
  width:24px;height:24px;border-radius:50%;
  background:rgba(26,18,6,0.16);
}
.hs-btn-ic .ic{width:14px;height:14px;transform:rotate(45deg)}

/* Canto recortado (inferior direito) */
.hero-corner{
  --hcr:clamp(18px,2.8vw,50px);
  position:absolute;right:0;bottom:0;z-index:5;
  display:flex;align-items:center;gap:clamp(10px,1.2vw,18px);
  background:var(--bg);
  border-top-left-radius:var(--hcr);
  padding:clamp(12px,1.3vw,20px) clamp(16px,1.7vw,28px)
          clamp(12px,1.3vw,20px) clamp(22px,3vw,52px);
  text-decoration:none;
}
.hc-mask{position:absolute;width:var(--hcr);height:var(--hcr);pointer-events:none;line-height:0}
.hc-mask svg{width:100%;height:100%;display:block}
.hc-mask path{fill:var(--bg)}
.hc-mask--top{right:0;top:calc(-1 * var(--hcr))}
.hc-mask--left{left:calc(-1 * var(--hcr));bottom:0}
.hc-ic{
  flex:none;display:flex;align-items:center;justify-content:center;
  width:clamp(36px,3.4vw,54px);aspect-ratio:1;border-radius:50%;
  background:rgba(214,154,60,0.09);
  border:1px solid var(--line-25);
  transition:background .3s,border-color .3s;
}
.hc-ic .ic{width:45%;height:45%;color:var(--gold-honey);transform:rotate(45deg)}
.hc-txt{display:flex;flex-direction:column;gap:3px}
.hc-txt b{
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(15px,1.5vw,20px);letter-spacing:.03em;
  text-transform:uppercase;color:var(--ink-title);
}
.hc-txt i{
  font-style:normal;display:inline-flex;align-items:center;gap:5px;
  font-family:var(--font-mono);font-size:clamp(10px,1vw,12.5px);
  letter-spacing:.06em;color:var(--ink-mut);
  transition:color .3s;
}
.hc-txt i .ic{width:12px;height:12px;transition:transform .3s var(--ease-out)}
@media (hover:hover){
  .hero-corner:hover .hc-ic{background:rgba(214,154,60,0.18);border-color:var(--line-45)}
  .hero-corner:hover .hc-txt i{color:var(--label-gold)}
  .hero-corner:hover .hc-txt i .ic{transform:translateX(3px)}
}

/* Indicador de scroll: sai do caminho dos dois cantos */
.hero-card .hero-scroll{bottom:clamp(16px,2.4vw,34px);z-index:4}

@media (max-width:880px){
  .hero-card{height:calc(100svh - var(--hero-pad) * 2);min-height:600px}
  .hero-card .hero-scroll{display:none}
  /* cartão de vidro sobe para não brigar com o canto recortado */
  .hero-stat{
    left:auto;right:12px;bottom:auto;top:auto;
    bottom:calc(clamp(58px,17vw,96px) + 14px);
    min-width:0;gap:10px;padding:13px 15px;
  }
  .hs-num{font-size:24px}
  .hero-corner{gap:10px;padding:11px 14px 11px 20px}
}
@media (max-width:520px){
  .hc-txt b{font-size:14px}
  .hero-stat{right:10px}
}

/* Ajustes do cartão: o conteúdo sobe para liberar a faixa dos cantos */
.hero-card .container{padding-bottom:clamp(104px,14vh,180px)}
.hero-card .hero-scroll{display:none}
/* fio de luz acompanhando a curva do canto recortado */
.hero-corner{
  border-top:1px solid rgba(236,196,95,0.14);
  border-left:1px solid rgba(236,196,95,0.14);
}
@media (max-width:880px){
  .hero-card .container{padding-bottom:clamp(150px,26vh,230px)}
}

/* Cartão cresce com o conteúdo (nunca sobrepõe os cantos) */
.hero-card{
  height:auto;
  min-height:calc(100svh - var(--hero-pad) * 2);
  max-height:none;
}
.hero-card .container{
  padding-top:clamp(92px,12vh,132px);
  padding-bottom:clamp(196px,25vh,258px);
}
@media (max-width:880px){
  .hero-card .container{padding-bottom:clamp(230px,32vh,300px)}
}

/* Mobile: respiro sob o header fixo + véu para o texto ganhar a imagem */
@media (max-width:880px){
  .hero-card .container{padding-top:clamp(106px,15vh,146px)}
  .hero-card::after{
    content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
    background:linear-gradient(180deg,
      rgba(24,15,8,0.94) 0%,
      rgba(24,15,8,0.78) 38%,
      rgba(24,15,8,0.6) 66%,
      rgba(24,15,8,0.88) 100%);
  }
}

/* ---------- Hero cartão: FULL SCREEN responsivo ----------
   Ocupa a tela inteira (só o respiro que revela os cantos arredondados)
   e o conteúdo escala pela LARGURA e pela ALTURA, para caber em uma
   tela só em qualquer proporção — de notebook baixo a ultrawide. */
.hero-card{
  max-width:none;
  height:auto;
  min-height:calc(100svh - var(--hero-pad) * 2);
  max-height:none;
}
.hero-card .container{
  max-width:min(1460px,92vw);
  padding-top:clamp(84px,min(11vh,9vw),128px);
  padding-bottom:clamp(150px,min(22vh,16vw),250px);
}
/* Tipografia do hero sensível à altura da janela */
.hero-card .hero-title{
  font-size:clamp(30px,min(5.4vw,7.6vh),68px);
  margin-bottom:clamp(14px,2.2vh,24px);
}
.hero-card .hero-lede{
  font-size:clamp(14px,min(1.55vw,2.1vh),18px);
  max-width:min(560px,46vw);
  margin-bottom:clamp(20px,3.4vh,34px);
}
.hero-card .eyebrow-pill{margin-bottom:clamp(14px,2.6vh,26px)}
.hero-card .hero-micro{margin-top:clamp(12px,1.8vh,18px)}
.hero-card .btn{padding:clamp(13px,1.9vh,18px) clamp(24px,2.6vw,38px)}

/* Ultrawide: a coluna de texto acompanha a borda, sem ilha no meio */
@media (min-width:1700px){
  .hero-card .container{max-width:min(1720px,90vw)}
  .hero-card .hero-lede{max-width:min(620px,34vw)}
}
/* Telas baixas: comprime as faixas reservadas mantendo os cantos livres */
@media (max-height:760px){
  .hero-card .container{
    padding-top:clamp(74px,9.5vh,96px);
    padding-bottom:clamp(132px,18vh,168px);
  }
  .hero-stat{gap:9px;padding:12px 14px;min-width:0}
  .hero-stat .hs-num{font-size:24px}
}
@media (max-width:880px){
  .hero-card .container{max-width:100%}
  .hero-card .hero-lede{max-width:100%}
}

/* Telas baixas: mais folga entre o microtexto e o cartão de vidro */
@media (max-height:760px){
  .hero-card .container{padding-bottom:clamp(152px,21.5vh,196px)}
}
@media (max-height:620px){
  .hero-card .container{
    padding-top:clamp(68px,9vh,86px);
    padding-bottom:clamp(140px,24vh,178px);
  }
}

/* ---------- Véus mais leves: a forma do cartão aparece nas bordas ----------
   Antes a imagem sumia bem antes da base (e o lado esquerdo virava bloco
   sólido), então os cantos arredondados não liam. Agora a mídia chega
   perto das bordas com uma queda suave, sem perder legibilidade. */
.hero-card .hero-bg{
  -webkit-mask-image:linear-gradient(to bottom,
    #000 0%,#000 82%,rgba(0,0,0,.92) 91%,rgba(0,0,0,.74) 100%);
  mask-image:linear-gradient(to bottom,
    #000 0%,#000 82%,rgba(0,0,0,.92) 91%,rgba(0,0,0,.74) 100%);
}
.hero-card .hero-scrim-x{
  background:linear-gradient(90deg,
    rgba(24,15,8,0.88) 0%,
    rgba(24,15,8,0.72) 17%,
    rgba(24,15,8,0.36) 37%,
    rgba(24,15,8,0.06) 55%,
    rgba(24,15,8,0) 65%);
}
.hero-card .hero-blur-wrap{
  -webkit-mask-image:linear-gradient(90deg,#000 0%,#000 20%,rgba(0,0,0,.45) 37%,transparent 55%);
  mask-image:linear-gradient(90deg,#000 0%,#000 20%,rgba(0,0,0,.45) 37%,transparent 55%);
}
@media (max-width:880px){
  /* mobile: véu vertical um pouco mais leve na base */
  .hero-card::after{
    background:linear-gradient(180deg,
      rgba(24,15,8,0.92) 0%,
      rgba(24,15,8,0.74) 38%,
      rgba(24,15,8,0.52) 68%,
      rgba(24,15,8,0.72) 100%);
  }
  .hero-card .hero-bg{
    -webkit-mask-image:linear-gradient(to bottom,#000 0%,#000 86%,rgba(0,0,0,.86) 100%);
    mask-image:linear-gradient(to bottom,#000 0%,#000 86%,rgba(0,0,0,.86) 100%);
  }
}

/* Faixa inferior reservada com folga real sobre o cartão de vidro */
.hero-card .container{padding-bottom:clamp(172px,min(26vh,18vw),272px)}
@media (max-height:760px){
  .hero-card .container{padding-bottom:clamp(168px,25vh,206px)}
}
@media (max-height:620px){
  .hero-card .container{padding-bottom:clamp(158px,28vh,190px)}
}

/* ---------- Depoimentos em colunas rolantes (ref. testimonials-columns) ----------
   3 colunas com loop vertical contínuo em velocidades diferentes, máscara
   dissolvendo topo e base, pausa no hover. Sem JS: é só CSS.
   Mobile / movimento reduzido: vira lista estática com todos os 6. */
.tcols{
  display:flex;justify-content:center;align-items:flex-start;
  gap:clamp(14px,1.6vw,24px);
  margin-top:var(--title-gap);
  max-height:min(740px,78vh);
  overflow:hidden;
  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 20%,#000 80%,transparent);
  mask-image:linear-gradient(to bottom,transparent,#000 20%,#000 80%,transparent);
}
.tcol{flex:0 0 clamp(250px,25vw,336px)}
.tcol-track{
  display:flex;flex-direction:column;
  gap:clamp(14px,1.6vw,24px);
  padding-bottom:clamp(14px,1.6vw,24px); /* casa com o gap: loop sem salto */
  animation:tcolScroll var(--d,32s) linear infinite;
  will-change:transform;
}
@keyframes tcolScroll{to{transform:translateY(-50%)}}
.tcols:hover .tcol-track{animation-play-state:paused}

.tq{
  position:relative;margin:0;
  background:var(--bg-card);
  border:1px solid var(--line-20);
  padding:clamp(22px,2vw,30px);
  --cut:18px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.tq blockquote{
  margin:0;font-size:15px;line-height:1.65;color:var(--ink-check);
}
.tq blockquote::before{content:"\201C ";color:var(--gold-honey)}
.tq blockquote::after{content:" \201D";color:var(--gold-honey)}
.tq figcaption{display:flex;align-items:center;gap:12px;margin-top:20px}
.tq-av{
  flex:none;width:40px;height:40px;
  display:flex;align-items:center;justify-content:center;
  background:var(--grad-cta);color:var(--on-gold);
  font-family:var(--font-display);font-weight:800;font-size:14px;letter-spacing:.04em;
  --cut:9px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
}
.tq-id{display:flex;flex-direction:column;gap:2px;min-width:0}
.tq-id b{
  font-family:var(--font-display);font-weight:700;font-size:14.5px;
  letter-spacing:.05em;text-transform:uppercase;color:var(--label-gold);line-height:1.15;
}
.tq-id i{
  font-style:normal;font-family:var(--font-mono);font-size:10.5px;
  letter-spacing:.05em;color:var(--ink-mut);line-height:1.3;
}

/* 3ª coluna some antes; a 2ª depois — como na referência */
@media (max-width:1180px){.tcol--3{display:none}}
@media (max-width:940px){
  .tcols{
    display:grid;grid-template-columns:1fr;gap:16px;
    max-height:none;overflow:visible;
    -webkit-mask-image:none;mask-image:none;
  }
  .tcol,.tcol--2,.tcol--3{display:block;flex:none}
  .tcol-track{animation:none;padding-bottom:0;gap:16px}
  .tq.dup{display:none}
}
@media (prefers-reduced-motion:reduce){
  .tcols{max-height:none;overflow:visible;-webkit-mask-image:none;mask-image:none}
  .tcol-track{animation:none;padding-bottom:0}
  .tq.dup{display:none}
}

/* ---------- Depoimentos: polimento fiel ao componente de referência ----------
   Cartões arredondados com sombra suave de marca, tipografia compacta,
   avatar circular 44px e máscara 25%/75% como no original. */
.tcols{
  gap:24px;
  max-height:min(740px,80vh);
  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 25%,#000 75%,transparent);
  mask-image:linear-gradient(to bottom,transparent,#000 25%,#000 75%,transparent);
}
.tcol{flex:0 0 min(320px,28vw)}
.tcol-track{gap:24px;padding-bottom:24px}

.tq{
  background:linear-gradient(168deg,rgba(41,27,14,0.92),rgba(26,17,9,0.92));
  border:1px solid rgba(236,196,95,0.13);
  border-radius:24px;
  clip-path:none;
  padding:clamp(26px,2.2vw,38px);
  box-shadow:
    0 1px 2px rgba(0,0,0,0.35),
    0 18px 40px -20px rgba(0,0,0,0.75),
    0 24px 70px -40px rgba(214,154,60,0.45);
  transition:border-color .4s var(--ease-out),transform .4s var(--ease-out),box-shadow .4s;
}
.tq .tfc{display:none}
.tq blockquote{
  margin:0;
  font-size:15px;line-height:1.72;color:var(--ink-check);
  letter-spacing:-0.005em;
}
.tq blockquote::before,.tq blockquote::after{content:none}
.tq figcaption{display:flex;align-items:center;gap:12px;margin-top:22px}
.tq-av{
  position:relative;flex:none;
  width:44px;height:44px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  overflow:hidden;
  background:var(--grad-cta);color:var(--on-gold);
  font-family:var(--font-display);font-weight:800;font-size:14.5px;letter-spacing:.03em;
  clip-path:none;
  box-shadow:0 0 0 1px rgba(236,196,95,0.35),0 6px 16px -8px rgba(0,0,0,0.8);
}
/* pronto para receber foto real: basta um <img> dentro do .tq-av */
.tq-av img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%}
.tq-id{display:flex;flex-direction:column;gap:1px;min-width:0}
.tq-id b{
  font-family:var(--font-body);font-weight:600;font-size:15px;
  letter-spacing:-0.015em;text-transform:none;
  color:var(--ink-title);line-height:1.35;
}
.tq-id i{
  font-style:normal;font-family:var(--font-body);font-size:13.5px;
  letter-spacing:-0.01em;color:var(--ink-mut);opacity:.85;line-height:1.35;
}
@media (hover:hover){
  .tq:hover{
    border-color:rgba(236,196,95,0.32);
    transform:translateY(-3px);
    box-shadow:
      0 1px 2px rgba(0,0,0,0.35),
      0 24px 50px -20px rgba(0,0,0,0.8),
      0 30px 80px -40px rgba(214,154,60,0.7);
  }
}
/* Breakpoints da referência: 3ª coluna some abaixo de lg, 2ª abaixo de md */
@media (max-width:1180px){.tcol--3{display:none}}
@media (max-width:1024px){.tcol--3{display:none}}
@media (max-width:940px){
  .tcols{gap:16px}
  .tcol-track{gap:16px}
}

/* Depoimentos: mais rápido e colunas intercaladas (a do meio desce) */
.tcol-track{animation-duration:var(--d,20s)}
.tcol--2 .tcol-track{animation-direction:reverse}

/* ---------- Seção da instrutora: texto no centro, fotos orbitando ----------
   Órbita elíptica 2.5D (posição, escala e opacidade vêm do main.js). O raio
   vertical é MEDIDO a partir da altura do texto, então as fotos nunca
   cruzam a leitura. Mobile / reduced-motion: vira faixa estática. */
.orbit-stage{
  position:relative;
  display:flex;align-items:center;justify-content:center;
  padding:clamp(20px,4vw,60px) 0;
}
.orbit-ring{position:absolute;inset:0;pointer-events:none;z-index:1}
.orb-i{
  position:absolute;left:50%;top:50%;
  width:clamp(96px,10.5vw,148px);
  aspect-ratio:2/2.7;
  margin:0;display:block;
  border-radius:14px;overflow:hidden;
  border:1px solid rgba(236,196,95,0.22);
  box-shadow:0 26px 50px -24px rgba(0,0,0,0.9);
  transform:translate3d(-50%,-50%,0);
  will-change:transform,opacity;
}
.orb-i img{width:100%;height:100%;object-fit:cover;display:block}
.orbit-core{
  position:relative;z-index:5;
  max-width:min(560px,46vw);
  text-align:center;
  padding:clamp(18px,2.4vw,34px) 0;
}
.orbit-core .instrutora-tag{margin-left:auto;margin-right:auto}
.orbit-core h2{text-align:center}
.orbit-core p{text-align:left}
.orbit-core .crm-box{margin-left:auto;margin-right:auto;display:inline-block}
/* halo suave atrás do texto, para separar da órbita */
.orbit-core::before{
  content:"";position:absolute;inset:-6% -14%;z-index:-1;pointer-events:none;
  background:radial-gradient(60% 55% at 50% 50%,rgba(24,15,8,0.92),rgba(24,15,8,0.6) 62%,transparent 78%);
}

@media (max-width:940px){
  .orbit-stage{flex-direction:column;padding:0}
  .orbit-ring{
    position:relative;inset:auto;
    display:flex;gap:10px;overflow:hidden;
    width:100%;margin-bottom:26px;
    -webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);
    mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);
  }
  .orb-i{
    position:relative;left:auto;top:auto;flex:0 0 104px;
    transform:none !important;opacity:1 !important;
    width:104px;
  }
  .orb-i:nth-child(n+6){display:none}
  .orbit-core{max-width:100%}
  .orbit-core::before{display:none}
}
@media (prefers-reduced-motion:reduce){
  .orb-i{transition:none}
}

/* Núcleo compacto no centro da órbita + carta continuando abaixo */
.orbit-core{max-width:min(460px,42vw);padding:0}
.orbit-core h2{margin:10px 0 14px}
.orbit-lede{font-size:16.5px;line-height:1.6;color:var(--ink-lede);text-align:center !important;margin:0 0 14px}
.orbit-hi{
  margin:0;text-align:center !important;
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(17px,1.9vw,22px);line-height:1.3;letter-spacing:.02em;
  color:var(--gold-honey);
}
.orbit-hi strong{font-weight:700;color:inherit}
.carta-abaixo{
  max-width:64ch;margin:clamp(30px,4vw,56px) auto 0;text-align:left;
}
.carta-abaixo .crm-box{margin-top:22px}
.orb-i{width:clamp(88px,9.4vw,132px)}
@media (max-width:940px){
  .orbit-core{max-width:100%}
  .carta-abaixo{margin-top:24px}
  .orb-i{width:104px}
}

/* ---------- Depoimentos: caixa CLARA arredondada (ref. testimonials-6) ----------
   A seção vira um painel claro sobre a página escura; cards brancos com
   sombra suave; as colunas DESACELERAM no hover (não param). */
.depo-box{
  --lt-ink:#241708;
  --lt-ink-2:#57493a;
  --lt-ink-3:#8a7c6a;
  background:linear-gradient(180deg,#faf6ee,#f2ece0);
  border:1px solid rgba(101,71,22,0.10);
  border-radius:clamp(26px,3.2vw,48px);
  padding:clamp(34px,4.6vw,72px) clamp(18px,3vw,52px) clamp(30px,4vw,58px);
  box-shadow:0 40px 100px -50px rgba(0,0,0,0.9),inset 0 1px 0 rgba(255,255,255,0.6);
}
.depo-box .sec-eyebrow{
  border-color:rgba(101,71,22,0.22);
  background:rgba(255,255,255,0.7);
}
.depo-box .sec-eyebrow span{color:#8a5a14}
.depo-box .sec-eyebrow .dot{background:#b5771e;box-shadow:none}
.depo-box .section-title{color:var(--lt-ink)}
.depo-box .section-title::after{opacity:.35}
.depo-box .gold-accent{
  background:linear-gradient(135deg,#8a5a14,#c98a28);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.depo-box .v4-foot{color:var(--lt-ink-3)}
.depo-box .tcols{
  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 22%,#000 78%,transparent);
  mask-image:linear-gradient(to bottom,transparent,#000 22%,#000 78%,transparent);
}
/* desacelera no hover, em vez de congelar */
.depo-box .tcols:hover .tcol-track{animation-play-state:running;animation-duration:calc(var(--d,20s) * 3.2)}
.depo-box .tcol-track{transition:none}

.depo-box .tq{
  background:#fff;
  border:1px solid rgba(101,71,22,0.09);
  border-radius:18px;
  padding:clamp(22px,1.9vw,28px);
  box-shadow:0 1px 2px rgba(60,40,10,0.05),0 10px 24px -14px rgba(60,40,10,0.28);
}
.depo-box .tq blockquote{color:var(--lt-ink-2);font-size:15px;line-height:1.62}
.depo-box .tq figcaption{margin-top:18px;gap:11px}
.depo-box .tq-av{
  width:40px;height:40px;
  background:linear-gradient(135deg,#8a5a14,#c98a28);
  color:#fff;font-size:13.5px;
  box-shadow:0 0 0 1px rgba(101,71,22,0.14);
}
.depo-box .tq-id b{color:var(--lt-ink);font-size:14.5px}
.depo-box .tq-id i{color:var(--lt-ink-3);font-size:13px;opacity:1}
@media (hover:hover){
  .depo-box .tq:hover{
    border-color:rgba(101,71,22,0.2);
    transform:translateY(-3px);
    box-shadow:0 1px 2px rgba(60,40,10,0.06),0 18px 34px -16px rgba(60,40,10,0.4);
  }
}
@media (max-width:940px){
  .depo-box{padding:clamp(28px,6vw,44px) clamp(16px,4vw,26px)}
}

/* eyebrow da caixa clara: o pill é o <span>, não a linha inteira */
.depo-box .sec-eyebrow{background:none;border:none}
.depo-box .sec-eyebrow span{
  border-color:rgba(101,71,22,0.24);
  background:rgba(255,255,255,0.85);
  color:#8a5a14;
  box-shadow:0 1px 2px rgba(60,40,10,0.06);
}
.depo-box .sec-eyebrow span::before{
  background:linear-gradient(135deg,#8a5a14,#c98a28);box-shadow:none;
}

/* ==========================================================================
   HERO CLARO (variante) — mesma anatomia do cartão, paleta invertida.
   Ativa com <section class="hero hero--light">. Texto escuro sobre creme,
   véus invertidos e a médica ganhando luz no lado direito.
   ========================================================================== */
.hero--light{--hl-ink:#241708;--hl-ink-2:#5b4c39;--hl-ink-3:#8a7b66;--hl-gold:#8a5a14}
.hero--light .hero-card{
  background:linear-gradient(180deg,#faf6ee,#f1e9da);
  box-shadow:0 40px 110px -50px rgba(60,40,10,0.55);
}
/* véu invertido: claro à esquerda (onde está o texto), some na foto */
.hero--light .hero-scrim-x{
  background:linear-gradient(90deg,
    rgba(250,246,238,0.96) 0%,
    rgba(250,246,238,0.9) 18%,
    rgba(250,246,238,0.6) 38%,
    rgba(250,246,238,0.12) 56%,
    rgba(250,246,238,0) 66%);
}
/* a imagem clareia e dissolve na base clara */
.hero--light .hero-bg{
  filter:brightness(1.06) contrast(0.94) saturate(1.02);
  -webkit-mask-image:linear-gradient(to bottom,#000 0%,#000 80%,rgba(0,0,0,.85) 92%,rgba(0,0,0,.6) 100%);
  mask-image:linear-gradient(to bottom,#000 0%,#000 80%,rgba(0,0,0,.85) 92%,rgba(0,0,0,.6) 100%);
}
.hero--light .hero-bg--blur{filter:blur(9px) brightness(1.1) saturate(1)}

.hero--light .hero-title{color:var(--hl-ink);text-shadow:none}
.hero--light .hero-title .gold-shimmer{
  background:linear-gradient(100deg,#8a5a14,#c98a28 45%,#8a5a14);
  background-size:220% auto;
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:none;
}
.hero--light .hero-lede{color:var(--hl-ink-2);text-shadow:none}
.hero--light .hero-micro{color:var(--hl-ink-3);text-shadow:none}
.hero--light .eyebrow-pill{
  border-color:rgba(101,71,22,0.26);
  background:rgba(255,255,255,0.8);
  box-shadow:0 1px 2px rgba(60,40,10,0.06);
}
.hero--light .eyebrow-pill span:not(.dot){color:var(--hl-gold)}
.hero--light .eyebrow-pill .dot{background:#b5771e;box-shadow:none}

/* cartão de vidro claro */
.hero--light .hero-stat{
  background:rgba(255,255,255,0.82);
  border-color:rgba(101,71,22,0.14);
  box-shadow:0 24px 60px -30px rgba(60,40,10,0.5);
}
.hero--light .hs-num{
  background:linear-gradient(135deg,#8a5a14,#c98a28);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:none;
}
.hero--light .hs-lbl{color:var(--hl-ink-3)}
.hero--light .hs-btn{color:#fff}
.hero--light .hs-btn-ic{background:rgba(255,255,255,0.25)}

/* canto recortado: assume a cor do fundo CLARO da página */
.hero--light .hero-corner{
  background:var(--pg-light,#f4efe4);
  border-top-color:rgba(101,71,22,0.12);
  border-left-color:rgba(101,71,22,0.12);
}
.hero--light .hc-mask path{fill:var(--pg-light,#f4efe4)}
.hero--light .hc-ic{background:rgba(138,90,20,0.08);border-color:rgba(101,71,22,0.18)}
.hero--light .hc-ic .ic{color:var(--hl-gold)}
.hero--light .hc-txt b{color:var(--hl-ink)}
.hero--light .hc-txt i{color:var(--hl-ink-3)}

/* topo e trilho legíveis sobre o claro */
.hero--light ~ * .site-header,
body:has(.hero--light) .site-header .brand-name{color:var(--hl-ink)}
body:has(.hero--light) .site-header:not(.is-scrolled) .brand-name{color:var(--hl-ink)}
body:has(.hero--light) .site-header.is-scrolled{background:rgba(250,246,238,0.9);border-bottom-color:rgba(101,71,22,0.12)}
body:has(.hero--light) .site-header.is-scrolled .brand-name{color:var(--hl-ink)}

/* a página em volta do hero claro precisa combinar */
body.light-top{background:#f4efe4}
body.light-top .bg-glow{
  background:
    radial-gradient(85% 55% at 50% -8%,rgba(214,154,60,0.18),transparent 60%),
    radial-gradient(120% 90% at 50% 118%,rgba(24,15,8,0.06),transparent 72%);
}
@media (max-width:880px){
  .hero--light .hero-card::after{
    background:linear-gradient(180deg,
      rgba(250,246,238,0.94) 0%,
      rgba(250,246,238,0.8) 38%,
      rgba(250,246,238,0.62) 66%,
      rgba(250,246,238,0.9) 100%);
  }
}

/* Correções da variante clara: o canto recortado MANTÉM a cor da página
   (escura) — vira uma mordida escura no cartão claro, que é o contraste
   certo; e o header ganha tinta escura enquanto sobrevoa o cartão. */
.hero--light .hero-corner{
  background:var(--bg);
  border-top-color:var(--line-15);
  border-left-color:var(--line-15);
}
.hero--light .hc-mask path{fill:var(--bg)}
.hero--light .hc-ic{background:rgba(214,154,60,0.1);border-color:var(--line-25)}
.hero--light .hc-ic .ic{color:var(--gold-honey)}
.hero--light .hc-txt b{color:var(--ink-title)}
.hero--light .hc-txt i{color:var(--ink-mut)}

.light-hero .site-header:not(.is-scrolled) .brand-name{color:#241708}
.light-hero .site-header.is-scrolled{
  background:rgba(250,246,238,0.92);
  border-bottom-color:rgba(101,71,22,0.12);
}
.light-hero .site-header.is-scrolled .brand-name{color:#241708}

/* Correções de contraste da variante clara.
   (as variáveis --hl-* viviam só dentro de .hero--light; o header está
   FORA dele, então referências viravam inválidas e a cor caía para o
   herdado — por isso o logo sumia. Agora ficam no :root.) */
:root{--hl-ink:#241708;--hl-ink-2:#5b4c39;--hl-ink-3:#6f6252;--hl-gold:#8a5a14}
body.light-hero .site-header:not(.is-scrolled) .brand-name{color:#241708}
body.light-hero .site-header.is-scrolled .brand-name{color:#241708}
body.light-hero .site-header.is-scrolled{
  background:rgba(250,246,238,0.93);
  border-bottom-color:rgba(101,71,22,0.14);
}
.hero--light .hero-micro{color:#6f6252}
.hero--light .hs-lbl{color:#6f6252}
.hero--light .hero-lede{color:#4f4231}

/* ---------- Depoimentos: painel FULL SCREEN responsivo ----------
   Mesmo padrão do hero: ocupa a tela inteira (só o respiro que revela os
   cantos) e uma tela de altura; as colunas preenchem o espaço restante. */
:root{--card-pad:clamp(10px,1.3vw,22px)}
.depo-light{padding-block:0;margin-block:var(--space-section)}
.depo-light .container{max-width:none;padding:0 var(--card-pad)}
.depo-box{
  display:flex;flex-direction:column;justify-content:center;
  min-height:calc(100svh - var(--card-pad) * 2);
  padding:clamp(34px,4.4vw,64px) clamp(18px,3vw,56px) clamp(28px,3.6vw,52px);
}
.depo-box .tcols{
  flex:1 1 auto;min-height:0;max-height:none;
  margin-top:clamp(26px,3.4vw,48px);
  align-items:stretch;
}
.depo-box .tcol{display:flex}
.depo-box .tcol-track{width:100%}
.depo-box .v4-foot{margin-top:clamp(18px,2.4vw,30px)}
.depo-light .btn-row{margin-top:clamp(26px,3.4vw,44px) !important}
/* 4ª coluna aparece em telas largas para preencher o full screen */
@media (min-width:1500px){
  .depo-box .tcol{flex:0 0 min(340px,23vw)}
}
@media (max-width:940px){
  .depo-box{min-height:0}
  .depo-box .tcols{flex:none}
}

/* ---------- Hero claro: fundo atrás da médica mais branco ---------- */
.hero--light .hero-bg{
  filter:brightness(1.34) contrast(0.86) saturate(0.96);
}
.hero--light .hero-bg--blur{filter:blur(9px) brightness(1.4) contrast(0.85) saturate(0.9)}
/* véu creme por cima da metade direita: clareia o ambiente sem lavar o rosto */
.hero--light .hero-card::before{
  content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
  background:
    radial-gradient(78% 88% at 78% 42%,rgba(255,253,248,0.5),rgba(255,253,248,0.16) 52%,transparent 72%),
    linear-gradient(180deg,rgba(255,253,248,0.34) 0%,rgba(255,253,248,0) 38%),
    linear-gradient(0deg,rgba(250,246,238,0.6) 0%,rgba(250,246,238,0) 26%);
}

/* Colunas mais largas no painel full screen (preenche telas grandes) */
@media (min-width:1200px){
  .depo-box .tcol{flex:0 0 min(380px,26vw)}
  .depo-box .tcols{gap:clamp(20px,1.8vw,30px)}
}
@media (min-width:1500px){
  .depo-box .tcol{flex:0 0 min(430px,27vw)}
}

/* Mobile: lista estática não precisa de máscara (esmaecia o 1º card) */
@media (max-width:940px){
  .depo-box .tcols{-webkit-mask-image:none;mask-image:none}
}

/* colunas ocupam SÓ o espaço restante (base 0), então o painel fecha em
   exatamente uma tela */
.depo-box .tcols{flex:1 1 0;min-height:min(420px,46vh)}

/* ==========================================================================
   Camada · banner do hero v2 (arte já nasce clara)
   A arte anterior era escura/dourada e precisava ser forçada para o claro:
   brightness(1.34) + contrast(0.86) + um véu creme por cima da metade
   direita. Com a arte nova esses dois recursos só lavavam o rosto — o
   ambiente já é creme na origem. Aqui devolvemos a foto ao natural e
   mantemos apenas o véu LATERAL (.hero-scrim-x), que é o que garante o
   contraste do texto à esquerda.
   ========================================================================== */
.hero--light .hero-bg{
  filter:none;
}
.hero--light .hero-bg--blur{filter:blur(9px)}
/* véu que cobria a médica: removido (era a "transparência que lavava") */
.hero--light .hero-card::before{content:none}

/* ==========================================================================
   Camada · "Prazer, eu sou a Juliana" — painel CLARO full screen
   Duas colunas: retrato à esquerda ocupando a altura inteira; à direita o
   texto em cima e a colagem em leque no bloco de baixo.
   A referência do dono era um componente React (shadcn/Tailwind + Framer);
   aqui a anatomia é reproduzida nativamente, sem build e sem framework.
   ========================================================================== */
.quem-light{padding-block:0;margin-block:calc(var(--space-section)/2)}
.quem-light .container{max-width:none;padding:0 var(--card-pad)}
.quem-box{
  --lt-ink:#241708;
  --lt-ink-2:#57493a;
  --lt-ink-3:#8a7c6a;
  --qpad:clamp(16px,2vw,34px);
  background:linear-gradient(180deg,#fdfbf6,#f6f1e7);
  border:1px solid rgba(101,71,22,0.10);
  border-radius:clamp(24px,2.6vw,40px);
  padding:var(--qpad);
  box-shadow:0 40px 100px -50px rgba(0,0,0,0.9),inset 0 1px 0 rgba(255,255,255,0.7);
  /* full screen DE VERDADE — mesma técnica do painel de depoimentos:
     o container da seção vira largura cheia (.quem-light .container acima)
     e o painel fecha 100svh; o conteúdo (.quem-inner) tem teto de largura
     e fica CENTRADO nos dois eixos. Em telas grandes o excedente vira
     respiro creme DENTRO do painel — nunca uma torre nem um cartão
     boiando no escuro. (A 1ª tentativa de conserto foi um teto de 1060px
     no próprio painel: matou a explosão, mas deixou o painel pequeno em
     monitores QHD/4K — o dono comparou com os depoimentos e reprovou.) */
  min-height:calc(100svh - var(--card-pad) * 2);
  display:flex;align-items:center;justify-content:center;
}
.quem-inner{
  display:flex;align-items:stretch;gap:clamp(16px,2.2vw,38px);
  width:100%;max-width:1440px;
}

/* ---------- coluna esquerda: o retrato ---------- */
.quem-foto{
  flex:0 0 clamp(190px,23%,330px);
  border-radius:clamp(14px,1.6vw,22px);
  padding:2px;
  background:linear-gradient(160deg,rgba(214,154,60,0.95),rgba(150,104,30,0.35));
  box-shadow:0 30px 70px -38px rgba(101,71,22,0.6);
  overflow:hidden;
}
.quem-foto img{
  display:block;width:100%;height:100%;object-fit:cover;object-position:center 18%;
  border-radius:calc(clamp(14px,1.6vw,22px) - 2px);
}

/* ---------- coluna direita ---------- */
.quem-lado{
  flex:1 1 auto;min-width:0;
  display:flex;flex-direction:column;gap:clamp(12px,1.8vh,24px);
  justify-content:center; /* respiro sobrando vai para as bordas, não para o bloco */
}
.quem-texto{flex:0 0 auto}
.quem-box .instrutora-tag{
  color:#8a5a14;
  border-color:rgba(101,71,22,0.24);
  background:rgba(255,255,255,0.72);
  margin-bottom:clamp(8px,1.2vh,14px);
}
.quem-box .quem-texto h2{
  font-family:var(--font-display);font-weight:800;text-transform:uppercase;
  font-size:clamp(24px,min(3.2vw,4.2vh),44px);line-height:1.03;
  color:var(--lt-ink);margin:0 0 clamp(8px,1.2vh,14px);
}
/* a carta em 2 colunas: em 1 coluna corrida ela sozinha passava da tela */
.quem-carta{column-count:2;column-gap:clamp(18px,2vw,34px)}
.quem-carta p{
  font-size:clamp(11px,min(.88vw,1.45vh),13.5px);line-height:1.55;
  color:var(--lt-ink-2);margin:0 0 .8em;break-inside:avoid;
}
.quem-carta p:last-child{margin-bottom:0}
.quem-carta p strong{color:var(--lt-ink)}
.quem-box .crm-box{
  color:var(--lt-ink-2);
  border-color:rgba(101,71,22,0.30);
  background:rgba(255,255,255,0.7);
  font-size:clamp(10px,1.1vh,11.5px);padding:9px 14px;
  margin-top:clamp(10px,1.4vh,18px);display:inline-block;
}
.quem-box .crm-box::before{border-color:rgba(101,71,22,0.22)}

/* ---------- colagem em leque, no bloco de baixo ----------
   O leque do original só funciona porque as peças têm PROPORÇÕES
   diferentes (0.62 a 1.59): é a variação de altura que cria o
   escalonamento. Nossos pôsteres são todos 2:3, então a proporção é
   imposta peça a peça com `aspect-ratio` + `object-fit:cover`, e o
   recorte é puxado para cima para não decapitar nas peças deitadas. */
.quem-collage{
  position:relative;flex:0 0 auto;
  height:clamp(300px,46vh,500px); /* 46vh reproduz os 440px calibrados em telas de ~950 */
  width:100%;max-width:980px;align-self:center; /* teto de largura: leque coeso em painéis largos */
  container-type:size; /* permite limitar as peças pela LARGURA (cqw) abaixo */
  /* sem fundo próprio: as peças flutuam direto sobre o creme do painel
     (pedido do dono, 18/08). O overflow fica visível de propósito — a
     flutuação sobe 15px e, sem a caixa, cortar a peça no limite do bloco
     pareceria um defeito. */
}
.qc{position:absolute;margin:0;line-height:0}
.qc img{
  display:block;width:100%;height:100%;object-fit:cover;object-position:center 26%;
  border-radius:clamp(8px,.9vw,14px);
  animation:qcFloat 6s ease-in-out infinite;
  will-change:transform;
}
.qc--c img{border-radius:clamp(10px,1.1vw,16px);object-position:center 22%}

@keyframes qcFloat{
  0%  {transform:translateY(0);    box-shadow:0 18px 34px -14px rgba(60,40,10,0.30)}
  50% {transform:translateY(-11px);box-shadow:0 26px 44px -16px rgba(60,40,10,0.36)}
  100%{transform:translateY(0);    box-shadow:0 18px 34px -14px rgba(60,40,10,0.30)}
}

/* Peças ancoradas pela ALTURA (% do container), largura derivada do
   aspect-ratio. Ancorar pela largura, como o original em px, faz as peças
   altas vazarem quando a tela encolhe: a largura fica fixa em % mas a
   altura do container acompanha o viewport. */
.qc--fl{left:0;   top:26%; height:min(50%,29.1cqw); aspect-ratio:.85; z-index:10}
.qc--bl{left:14%; top:42%; height:min(54%,31.5cqw); aspect-ratio:.65; z-index:30}
.qc--c {left:50%; top:50%; height:min(80%,46.6cqw); aspect-ratio:.77; z-index:20;
        transform:translate(-50%,-50%)}
.qc--br{left:58%; top:58%; height:min(36%,21.0cqw); aspect-ratio:1.55;z-index:30}
.qc--fr{left:72%; top:22%; height:min(64%,37.3cqw); aspect-ratio:.72; z-index:10}
/* atrasos negativos: cada peça já nasce em um ponto diferente do ciclo */
.qc--c  img{animation-delay:0s}
.qc--br img{animation-delay:-3.5s}
.qc--fr img{animation-delay:-4.8s}
.qc--bl img{animation-delay:-5.2s}
.qc--fl img{animation-delay:-6s}

/* ---------- responsivo ---------- */
@media (max-width:1000px){
  /* empilha: retrato em faixa no topo, depois texto, depois colagem */
  .quem-box{min-height:0}
  .quem-inner{flex-direction:column}
  .quem-foto{flex:0 0 auto;height:clamp(260px,46vw,420px)}
  .quem-foto img{object-position:center 16%}
  /* sem as pecas de tras (removidas a pedido do dono, 18/08), as
     externas fl/fr assumem os cantos de cima no empilhado */
  .qc--c {height:94%}
  .qc--fl{left:2%;  top:6%;  height:44%}
  .qc--bl{left:6%;  top:52%; height:44%}
  .qc--fr{left:auto;right:2%;top:8%;  height:48%}
  .qc--br{left:60%; top:62%; height:34%}
}
@media (max-width:700px){
  .quem-carta{column-count:1}
  .quem-collage{height:clamp(210px,60vw,310px)}
  /* no celular sobram 3 peças: o retrato central e dois satélites
     (fl e fr — as pecas de tras tl/tr foram removidas da colagem) */
  .qc--bl,.qc--br{display:none}
  .qc--c {height:96%}
  .qc--fl{left:0;    top:6%;  height:38%}
  .qc--fr{left:auto; right:0; top:12%; height:42%}
}
/* movimento reduzido: a colagem fica parada, o arranjo continua o mesmo */
@media (prefers-reduced-motion:reduce){
  .qc img{animation:none;box-shadow:0 18px 34px -14px rgba(60,40,10,0.30)}
}

/* --------------------------------------------------------------------------
   Hero v2 · celular
   Numa tela estreita a arte 16:9 é ampliada ~4x pelo `cover`, e o que sobra
   no enquadramento é o pescoço/queixo, ampliado e desfocado atrás do texto.
   Com a arte anterior (escura) isso passava como textura; com a arte clara
   fica confuso. Aqui reancoramos o corte no alto (mostra o rosto inteiro) e
   devolvemos um véu creme SÓ no celular, que é onde o texto se sobrepõe a
   ela — no desktop o texto cai sobre o creme liso e não precisa de véu.
   -------------------------------------------------------------------------- */
@media (max-width:760px){
  .hero--light .hero-bg{background-position:72% center}
  .hero--light .hero-card::before{
    content:"";position:absolute;inset:0;z-index:1;pointer-events:none;
    background:linear-gradient(180deg,
      rgba(253,251,246,0.72) 0%,
      rgba(253,251,246,0.60) 34%,
      rgba(253,251,246,0.30) 58%,
      rgba(253,251,246,0.10) 78%,
      transparent 92%);
  }
}

/* ==========================================================================
   Camada · CFM (#metodo): pilha de recortes de imprensa
   Manchetes reais empilhadas como recortes de jornal: papel claro com
   respiro, borda RASGADA (clip-path com serrilha irregular, 2 variantes
   alternadas), rotação alternada e sombra — no estilo da referência que o
   dono mandou. A arte anterior (selo da balança) saiu; o CSS órfão dela
   (.artcomp/.ac-*) fica no arquivo, inofensivo como os demais órfãos.
   ========================================================================== */
.news-pile{
  position:relative;z-index:1;
  display:flex;flex-direction:column;align-items:center;
}
.nz{
  margin:0;position:relative;
  width:min(100%,540px);
  background:#fbf8f1;
  /* respiro generoso: o rasgo do clip-path morde ~4% da altura e
     precisa morder PAPEL, nunca a última linha da manchete */
  padding:clamp(14px,1.6vw,20px) clamp(10px,1.2vw,16px);
  box-shadow:0 22px 44px -20px rgba(0,0,0,.6);
  /* borda rasgada v2 ("mais picotado", pedido de 18/08): picote fino e
     irregular gerado por script (passo ~2%, profundidade ate 4.6%) com
     mordidas tambem nas LATERAIS. 3 variantes por nth-child. O picote
     morde o respiro do padding, nunca a manchete. */
  clip-path:polygon(
    0.0% 1.7%, 1.8% 3.1%, 3.5% 2.6%, 5.6% 0.5%, 7.9% 0.5%, 10.1% 0.6%,
    11.9% 2.1%, 14.6% 0.8%, 16.5% 3.0%, 19.5% 2.8%, 21.6% 4.5%, 23.3% 4.0%,
    25.3% 0.9%, 27.1% 1.6%, 29.8% 1.1%, 32.2% 3.0%, 34.3% 2.7%, 36.0% 0.6%,
    37.9% 3.2%, 40.1% 1.7%, 42.5% 2.2%, 44.5% 3.7%, 47.1% 1.3%, 49.5% 2.6%,
    52.4% 3.4%, 54.4% 4.5%, 56.1% 2.1%, 58.8% 1.0%, 61.1% 0.5%, 63.6% 3.6%,
    66.0% 4.1%, 68.0% 3.3%, 70.5% 2.8%, 72.7% 3.9%, 75.6% 2.3%, 78.2% 0.6%,
    80.8% 3.1%, 83.7% 3.8%, 85.7% 2.0%, 88.3% 0.4%, 90.5% 1.0%, 92.3% 0.6%,
    95.0% 0.9%, 96.9% 2.0%, 99.7% 0.6%, 100.0% 2.0%, 98.6% 13.3%, 99.3% 24.6%,
    99.2% 33.7%, 98.5% 45.1%, 99.4% 52.9%, 99.3% 61.0%, 98.9% 70.5%, 99.6% 78.8%,
    99.2% 87.9%, 100.0% 95.6%, 97.4% 97.5%, 95.0% 96.8%, 93.3% 95.8%, 90.6% 95.9%,
    87.9% 98.0%, 85.7% 99.3%, 83.2% 99.4%, 81.5% 98.8%, 79.7% 98.2%, 78.0% 99.7%,
    76.2% 99.3%, 74.1% 99.6%, 71.3% 97.1%, 69.5% 98.6%, 67.4% 98.1%, 65.6% 96.0%,
    62.6% 97.7%, 60.4% 99.3%, 58.6% 98.2%, 56.6% 96.1%, 54.8% 99.6%, 51.9% 97.4%,
    50.1% 97.4%, 48.4% 97.4%, 45.5% 96.0%, 42.9% 98.6%, 40.8% 99.0%, 38.1% 97.4%,
    35.4% 98.3%, 33.5% 96.2%, 30.5% 96.0%, 27.8% 96.2%, 25.2% 98.7%, 22.8% 98.2%,
    21.2% 99.6%, 19.2% 98.6%, 16.6% 95.6%, 14.4% 95.7%, 11.4% 95.6%, 9.3% 98.8%,
    7.4% 98.9%, 5.5% 97.0%, 2.7% 96.1%, 0.4% 96.9%, 0.0% 99.4%, 1.5% 93.4%,
    1.3% 82.4%, 0.6% 73.1%, 0.8% 62.1%, 1.6% 51.1%, 0.9% 42.1%, 1.3% 30.4%,
    0.6% 22.5%, 1.5% 14.8%);
}
.nz:nth-child(3n+2){
  clip-path:polygon(
    0.0% 4.3%, 2.9% 4.1%, 4.6% 2.8%, 6.8% 2.6%, 8.6% 1.1%, 10.8% 1.3%,
    13.1% 0.4%, 14.8% 3.4%, 17.0% 2.5%, 19.6% 1.8%, 21.3% 3.7%, 23.7% 3.1%,
    26.2% 4.5%, 28.3% 3.6%, 30.4% 2.8%, 32.9% 1.7%, 34.7% 2.3%, 37.3% 2.8%,
    39.5% 3.1%, 41.3% 1.1%, 43.4% 3.8%, 45.3% 0.8%, 47.0% 0.5%, 49.0% 2.8%,
    51.7% 1.7%, 53.9% 1.5%, 55.9% 3.6%, 58.3% 1.4%, 60.0% 3.7%, 62.6% 3.9%,
    64.5% 2.6%, 67.4% 2.8%, 70.3% 1.0%, 73.3% 0.5%, 75.5% 0.4%, 78.2% 3.3%,
    81.2% 3.8%, 84.1% 2.6%, 87.1% 3.5%, 89.2% 4.5%, 91.3% 1.1%, 93.0% 2.3%,
    94.9% 4.3%, 97.8% 1.2%, 99.6% 2.6%, 100.0% 2.0%, 99.3% 12.9%, 98.5% 22.0%,
    99.2% 31.2%, 98.6% 42.7%, 98.8% 54.1%, 98.8% 63.2%, 98.8% 74.4%, 99.2% 82.6%,
    98.7% 91.6%, 100.0% 97.3%, 97.2% 99.2%, 94.8% 98.3%, 92.4% 96.1%, 90.4% 95.6%,
    88.7% 97.3%, 86.4% 98.7%, 84.0% 97.7%, 81.7% 96.6%, 80.1% 98.1%, 77.4% 99.1%,
    74.6% 98.8%, 72.1% 99.0%, 69.8% 97.9%, 68.1% 96.7%, 65.9% 96.7%, 63.5% 97.3%,
    61.2% 98.4%, 58.3% 99.3%, 55.5% 96.0%, 53.2% 96.4%, 50.6% 97.1%, 48.6% 98.3%,
    46.5% 98.4%, 43.6% 98.2%, 41.5% 97.9%, 38.7% 97.6%, 36.3% 98.6%, 34.3% 99.3%,
    32.4% 98.6%, 29.7% 97.5%, 27.9% 97.7%, 26.1% 97.3%, 23.9% 96.0%, 21.9% 96.0%,
    20.0% 95.5%, 17.5% 99.5%, 14.8% 98.5%, 12.7% 99.1%, 9.9% 99.3%, 7.3% 98.0%,
    4.7% 98.4%, 3.0% 95.8%, 0.5% 99.0%, 0.0% 96.9%, 0.4% 95.3%, 0.6% 85.2%,
    1.0% 74.6%, 1.1% 64.0%, 1.4% 53.2%, 1.1% 43.1%, 0.6% 34.5%, 1.4% 27.0%,
    0.9% 19.0%, 1.1% 10.4%);
}
.nz:nth-child(3n){
  clip-path:polygon(
    0.0% 1.9%, 1.9% 1.0%, 4.8% 2.8%, 7.4% 2.7%, 9.5% 3.4%, 11.9% 3.7%,
    14.4% 3.9%, 16.7% 1.0%, 18.5% 3.4%, 20.3% 3.1%, 22.8% 0.6%, 25.5% 0.4%,
    28.3% 3.9%, 30.2% 3.4%, 32.8% 0.8%, 35.3% 0.8%, 38.2% 3.3%, 41.2% 0.5%,
    43.2% 3.0%, 45.7% 1.1%, 48.5% 3.9%, 50.6% 0.9%, 53.1% 2.1%, 55.6% 2.4%,
    57.8% 0.4%, 59.6% 2.3%, 62.2% 2.1%, 64.8% 2.6%, 67.7% 3.1%, 69.7% 0.9%,
    71.4% 0.5%, 74.2% 4.1%, 76.9% 0.8%, 79.4% 0.8%, 82.2% 3.1%, 84.9% 2.9%,
    87.1% 3.9%, 90.0% 1.3%, 92.2% 3.5%, 94.8% 2.1%, 97.0% 4.5%, 99.0% 1.2%,
    100.0% 1.2%, 99.2% 13.4%, 99.1% 25.0%, 98.7% 36.4%, 99.3% 47.1%, 99.6% 54.9%,
    98.8% 62.8%, 99.3% 70.1%, 99.4% 80.0%, 99.3% 88.6%, 100.0% 99.2%, 97.0% 97.1%,
    94.4% 97.3%, 92.1% 95.5%, 89.3% 96.2%, 87.6% 97.2%, 84.7% 97.0%, 82.4% 96.9%,
    80.5% 96.6%, 77.8% 99.4%, 75.5% 97.1%, 73.4% 96.8%, 70.5% 95.8%, 68.5% 99.0%,
    65.7% 97.1%, 62.9% 96.0%, 61.0% 97.2%, 58.9% 96.3%, 56.4% 98.7%, 54.1% 97.1%,
    52.1% 98.9%, 49.9% 99.4%, 47.6% 95.7%, 44.8% 99.5%, 42.1% 96.6%, 39.5% 99.6%,
    36.8% 98.9%, 34.1% 98.3%, 32.0% 99.0%, 29.2% 98.7%, 26.3% 97.5%, 24.5% 96.9%,
    22.2% 99.6%, 19.4% 98.5%, 17.8% 96.4%, 15.2% 98.0%, 13.3% 97.4%, 10.9% 96.7%,
    8.6% 97.3%, 6.0% 98.9%, 4.2% 97.6%, 1.5% 96.2%, 0.0% 98.3%, 0.5% 93.1%,
    0.5% 84.2%, 1.6% 73.0%, 1.3% 62.7%, 1.4% 53.8%, 0.8% 46.4%, 1.4% 37.6%,
    0.6% 29.8%, 1.4% 22.3%, 1.5% 13.7%);
}
.nz img{display:block;width:100%;height:auto;filter:saturate(.96)}
/* rotação alternada + sobreposição: pilha, não lista */
.nz:nth-child(odd){transform:rotate(-1.7deg)}
.nz:nth-child(even){transform:rotate(1.4deg)}
.nz + .nz{margin-top:clamp(-26px,-1.6vw,-14px)}
/* larguras VARIADAS + escalonamento horizontal: pilha orgânica (e mais
   compacta — com todos em largura cheia ela ficava mais alta que o texto
   ao lado e esticava a seção) */
.nz:nth-child(1){width:80%;margin-right:10%}
.nz:nth-child(2){width:92%;margin-left:6%}
.nz:nth-child(3){width:82%;margin-right:14%}
.nz:nth-child(4){width:84%;margin-left:11%}
.nz:nth-child(5){width:60%;margin-right:26%}
.nz:nth-child(6){width:68%;margin-left:18%}

.news-tag{
  display:block;text-align:center;margin-top:14px;
  font-family:var(--font-mono);font-style:normal;font-size:10.5px;
  letter-spacing:.16em;text-transform:uppercase;color:var(--ink-dim);
}

/* telas curtas: a pilha inteira não cabe ao lado do texto — as duas
   últimas saem para a coluna não estourar a seção */
@media (max-height:760px) and (min-width:900px){
  .nz:nth-child(n+5){display:none}
}
/* empilhado (grid vira 1 coluna): centraliza e enxuga para 4 recortes */
@media (max-width:899px){
  .news-pile{margin-top:8px}
  .nz:nth-child(n+5){display:none}
}

/* ==========================================================================
   Camada · faixa de especialidades sob o hero (.esp-strip)
   Banda clara em loop contínuo, mesma mecânica do .v4-mq: conteúdo
   duplicado no HTML e a pista anda exatamente -50%. Substitui o ECG e a
   barra de números (removidos a pedido do dono em 18/08).
   ========================================================================== */
.esp-strip{
  position:relative;overflow:hidden;
  background:linear-gradient(180deg,#f6efdf,#efe6d2);
  border-block:1px solid rgba(101,71,22,0.14);
  padding:clamp(13px,1.6vh,18px) 0;
}
.esp-strip::before,.esp-strip::after{
  content:"";position:absolute;top:0;bottom:0;width:110px;z-index:2;pointer-events:none;
}
.esp-strip::before{left:0;background:linear-gradient(90deg,#f6efdf,transparent)}
.esp-strip::after{right:0;background:linear-gradient(-90deg,#efe6d2,transparent)}
.esp-track{display:flex;width:max-content;animation:espMq 46s linear infinite}
.esp-track span{
  white-space:nowrap;padding-right:clamp(26px,3vw,44px);
  font-family:var(--font-mono);font-size:clamp(10.5px,1vw,12.5px);
  letter-spacing:.2em;text-transform:uppercase;color:#57431f;
}
.esp-track span::after{
  content:"◆";margin-left:clamp(26px,3vw,44px);
  font-size:.6em;vertical-align:2px;color:#b5771e;
}
@keyframes espMq{to{transform:translateX(-50%)}}
@media (prefers-reduced-motion:reduce){.esp-track{animation:none}}

/* ==========================================================================
   Camada · depoimentos: rolagem contínua SEM parar no hover + mobile
   O bug: a base V8.1 PAUSAVA no hover e a camada "full screen" mudava a
   DURAÇÃO no hover (×3.2) — trocar duração no meio do ciclo salta a
   posição. Regra final: mesma duração sempre, rodando sempre.
   ========================================================================== */
.tcols:hover .tcol-track,
.depo-box .tcols:hover .tcol-track{
  animation-play-state:running;
  animation-duration:var(--d,20s);
}
/* Celular/tablet estreito: com 6 depoimentos por coluna, a lista estática
   de 3 colunas viraria 18 cards — fica SÓ a 1ª coluna (tem os 6).
   ⚠️ E o conserto do VAZAMENTO: a regra global `.depo-box .tcols{flex:1 1 0;
   min-height:...}` (camada full screen) vem DEPOIS do `flex:none` da camada
   mobile antiga e a anulava — os cards estouravam o painel e invadiam a
   seção seguinte. Esta camada é a última, então vence. */
@media (max-width:940px){
  .depo-box .tcol--2,.depo-box .tcol--3{display:none}
  .depo-box{min-height:0;display:block}
  .depo-box .tcols{flex:none;min-height:0;max-height:none;height:auto}
}

/* ==========================================================================
   Camada · módulos: painéis ARREDONDADOS (linguagem nova da página)
   Mesmo arco, mesmo tamanho — só o canto: chanfro sai, raio uniforme
   entra, idêntico em pôster, sombra de dobra e hover.
   ========================================================================== */
.mshot img{
  --cut:0px;clip-path:none;
  border-radius:clamp(14px,1.4vw,20px);
}
.mods-rail--arc .mshot img{border-radius:clamp(14px,1.4vw,20px)}
.mods-rail--arc .mshot::after{border-radius:clamp(14px,1.4vw,20px)}

/* ==========================================================================
   Camada · CTAs arredondados premium (pedido de 18/08: "todos, premium e
   exclusivos"). O chanfro sai da página inteira: pílula com brilho interno
   e sombra dourada. Vale para header, hero, seções, FAQ e barra mobile.
   ========================================================================== */
.btn{
  --cut:0px;clip-path:none;border-radius:999px;
  box-shadow:
    0 14px 34px -14px rgba(214,154,60,0.65),
    inset 0 1px 0 rgba(255,255,255,0.35),
    inset 0 -1px 0 rgba(0,0,0,0.22);
  transition:transform .25s var(--ease-out),box-shadow .25s var(--ease-out),filter .25s;
}
@media (hover:hover){
  .btn:hover{
    transform:translateY(-2px);
    box-shadow:
      0 20px 44px -16px rgba(214,154,60,0.8),
      inset 0 1px 0 rgba(255,255,255,0.4),
      inset 0 -1px 0 rgba(0,0,0,0.2);
  }
}
.mods-nav{border-radius:50%}

/* ---------- Depoimentos: bloco centrado, respiro simétrico, CTA dentro ---
   O "bug" visual que restava: máscara de 25% deixava uma zona fantasma
   enorme no topo (cards meio apagados boiando sob o título). Máscara
   enxuta + altura fixa centrada = diagramação estável. */
.depo-box{align-items:center}
.depo-box .tcols{
  flex:0 1 auto;
  height:min(540px,54vh);min-height:0;max-height:none;
  width:100%;justify-content:center;
  -webkit-mask-image:linear-gradient(to bottom,transparent,#000 12%,#000 88%,transparent);
  mask-image:linear-gradient(to bottom,transparent,#000 12%,#000 88%,transparent);
}
.depo-box .v4-foot{margin-top:clamp(14px,2vh,24px)}
.depo-cta{margin-top:clamp(12px,1.8vh,20px);display:flex;justify-content:center}

/* ==========================================================================
   Camada · Super Bônus: mockup do navegador + packs clicáveis
   ========================================================================== */
.kit-shot{max-width:1080px;margin:clamp(28px,4vh,52px) auto 0;position:relative;z-index:1}
.kit-shot img{
  display:block;width:100%;height:auto;
  border-radius:clamp(12px,1.2vw,18px);
  box-shadow:0 60px 140px -50px rgba(0,0,0,0.9),0 0 0 1px rgba(236,196,95,0.16);
}
/* a tira SOBREPÕE o pé do mockup (pedido: "abaixo meio sobreposto") */
.packs{position:relative;z-index:2;margin-top:clamp(-64px,-4vw,-32px)}
.packs-strip{
  overflow-x:auto;overscroll-behavior-x:contain;
  padding:20px 6px 8px;
  scrollbar-width:none;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 4%,#000 96%,transparent);
}
.packs-strip::-webkit-scrollbar{display:none}
.packs-track{display:flex;gap:16px;width:max-content;align-items:flex-start;padding:0 clamp(12px,4vw,60px)}
.pack{
  --pc:#d69a3c;
  width:min(296px,80vw);flex:0 0 auto;
  background:linear-gradient(180deg,rgba(22,15,8,0.97),rgba(13,9,5,0.97));
  border:1px solid color-mix(in srgb,var(--pc) 36%,transparent);
  border-radius:20px;
  box-shadow:0 26px 60px -30px rgba(0,0,0,0.85),inset 0 1px 0 rgba(255,255,255,0.05);
  transition:border-color .3s,transform .3s var(--ease-out);
}
@media (hover:hover){
  .pack:hover{transform:translateY(-4px);border-color:color-mix(in srgb,var(--pc) 60%,transparent)}
}
.pack-head{
  display:block;width:100%;text-align:left;
  background:none;border:0;cursor:pointer;color:inherit;font:inherit;
  padding:20px 20px 16px;border-radius:inherit;
}
.pack-head:focus-visible{outline:2px solid var(--pc);outline-offset:3px}
.pack-ico{
  display:grid;place-items:center;width:50px;height:50px;
  border-radius:14px;font-size:23px;line-height:1;
  background:linear-gradient(150deg,color-mix(in srgb,var(--pc) 92%,#fff),color-mix(in srgb,var(--pc) 55%,#000));
  box-shadow:0 12px 26px -10px color-mix(in srgb,var(--pc) 70%,transparent);
}
.pack-cat{
  display:block;margin-top:15px;
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--pc);
}
.pack-nome{
  display:block;margin-top:4px;
  font-family:var(--font-display);font-weight:700;font-size:19px;color:#f3ead9;
}
.pack-desc{display:block;margin-top:7px;font-size:13px;line-height:1.55;color:rgba(240,230,210,0.7)}
.pack-total{
  display:flex;align-items:center;gap:8px;margin-top:14px;
  padding-top:12px;border-top:1px solid rgba(236,196,95,0.1);
  font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;
  text-transform:uppercase;color:rgba(240,230,210,0.55);
}
.pack-total b{font-family:var(--font-display);font-size:20px;color:var(--pc);letter-spacing:0}
.pack-abre{
  margin-left:auto;font-style:normal;color:var(--pc);
  font-size:18px;transform:rotate(90deg);transition:transform .35s var(--ease-out);
}
.pack.open .pack-abre{transform:rotate(-90deg)}
/* corpo expansível: truque 0fr -> 1fr (anima sem max-height mágico) */
.pack-body{display:grid;grid-template-rows:0fr;transition:grid-template-rows .45s var(--ease-out)}
.pack-body > div{overflow:hidden;padding:0 20px}
.pack.open .pack-body{grid-template-rows:1fr}
.pack.open .pack-body > div{padding-bottom:20px}
.pack-body ul{list-style:none;margin:0;padding:0}
.pack-body li{
  display:flex;justify-content:space-between;gap:14px;
  padding:9px 0;border-top:1px dashed rgba(236,196,95,0.14);
  font-size:12.5px;line-height:1.4;color:rgba(240,230,210,0.82);
}
.pack-body li b{color:var(--pc);font-family:var(--font-mono);font-weight:700}
.pack-selo{
  display:inline-block;margin-top:14px;padding:7px 14px;border-radius:999px;
  border:1px solid color-mix(in srgb,var(--pc) 45%,transparent);
  background:color-mix(in srgb,var(--pc) 14%,transparent);
  font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:var(--pc);
}
.packs-hint{
  margin:10px 0 0;text-align:center;
  font-family:var(--font-mono);font-size:10px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-dim);
}
@media (max-width:760px){
  .packs{margin-top:clamp(-36px,-6vw,-20px)}
  .kit-shot{max-width:none}
}

/* ==========================================================================
   Camada · vitrine 3D das categorias do Kit (substitui os .pack de 18/08,
   reprovados). Cards = réplica vetorial dos cards da PLATAFORMA (cores,
   ícones e textos do window.CATS de kitia.medux.com.br). O motor de
   posição/magnetismo está no fim do main.js; o CSS antigo .pack-* ficou
   órfão, inofensivo.
   ========================================================================== */
.surf{position:relative;z-index:2;margin-top:clamp(-66px,-4.2vw,-30px)}
.surf-vp{
  position:relative;overflow:hidden;
  height:clamp(300px,30vw,420px);
  perspective:1400px;                 /* casar com g.P do main.js */
  perspective-origin:16% 42%;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 3%,#000 93%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 3%,#000 93%,transparent);
}
.surf-track{
  position:absolute;left:8%;top:50%;width:0;height:0;
  transform-style:preserve-3d;
}
.surf-card{
  --tint:#d69a3c;
  position:absolute;left:0;top:0;margin:0;
  width:clamp(200px,16.5vw,252px);
  height:clamp(268px,22vw,336px);
  translate:0 -50%;                   /* centragem vertical: propriedade
                                         própria, não briga com o transform
                                         que o JS escreve */
  transform-origin:50% 50%;
  display:flex;flex-direction:column;
  border-radius:16px;padding:clamp(14px,1.2vw,20px);
  background:
    radial-gradient(130% 95% at 12% 0%,color-mix(in srgb,var(--tint) 26%,transparent),transparent 56%),
    linear-gradient(180deg,#161009,#0c0805);
  border:1px solid color-mix(in srgb,var(--tint) 40%,transparent);
  box-shadow:0 34px 80px -30px rgba(0,0,0,0.92);
  backface-visibility:hidden;
  will-change:transform,filter;
}
.sc-topo{display:flex;align-items:flex-start;justify-content:space-between}
.sc-ico{
  display:grid;place-items:center;width:44px;height:44px;border-radius:12px;
  background:linear-gradient(150deg,color-mix(in srgb,var(--tint) 96%,#fff),color-mix(in srgb,var(--tint) 62%,#000));
  box-shadow:0 12px 26px -10px color-mix(in srgb,var(--tint) 75%,transparent);
}
.sc-idx{
  font-style:normal;font-family:var(--font-mono);font-size:10px;
  letter-spacing:.12em;color:color-mix(in srgb,var(--tint) 70%,#fff 10%);
}
.sc-nome{
  display:block;margin-top:clamp(12px,1.2vw,18px);
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(15.5px,1.15vw,18px);line-height:1.15;color:var(--tint);
}
.sc-body{
  display:block;margin-top:7px;flex:1 1 auto;
  font-size:clamp(11.5px,.85vw,13px);line-height:1.5;color:rgba(238,229,214,0.72);
}
.sc-meta{
  display:flex;align-items:baseline;gap:7px;margin-top:10px;
  padding-top:11px;border-top:1px solid rgba(238,229,214,0.1);
  font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:rgba(238,229,214,0.5);
}
.sc-meta b{font-family:var(--font-display);font-size:19px;color:#f3ead9}
.sc-meta i{margin-left:auto;font-style:normal;letter-spacing:.06em}
.surf-legenda{
  margin:12px 0 0;text-align:center;
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ink-dim);
}
/* sem JS: fileira plana rolável, nada quebra */
html:not(.js) .surf-vp{perspective:none;height:auto;overflow-x:auto}
html:not(.js) .surf-track{position:static;display:flex;gap:14px;width:max-content}
html:not(.js) .surf-card{position:static;translate:none}

/* ==========================================================================
   Camada · coverflow dos packs (faixa full-bleed do Super Bônus)
   Motor no fim do main.js. Substitui o "surfer" (CSS órfão .surf-*).
   ========================================================================== */
.cfw{
  position:relative;z-index:2;
  /* faixa inteira: fura o .container e ocupa a viewport */
  margin-inline:calc(50% - 50vw);
  margin-top:clamp(18px,2vh,34px);           /* abaixo do mockup, sem sobrepor */
  --cfcw:clamp(190px,17.5vw,250px);          /* largura do card */
}
.cf-frame{
  overflow:hidden;cursor:grab;outline:none;
  padding:clamp(30px,3vw,48px) 0 clamp(22px,2.4vw,36px);
  touch-action:pan-y;                        /* arrasto horizontal é nosso */
}
.cf-frame:active{cursor:grabbing}
.cf-frame:focus-visible{box-shadow:inset 0 0 0 2px rgba(236,196,95,.5)}
.cf-stage{
  position:relative;height:calc(var(--cfcw) * 1.34);
  transform-style:preserve-3d;user-select:none;
}
.cf-card{
  position:absolute;left:50%;top:0;
  width:var(--cfcw);height:calc(var(--cfcw) * 1.34);
  will-change:transform,opacity;
}
/* o VIRAR é do miolo, não do card (o card já carrega o transform do anel) */
.cf-inner{
  position:relative;width:100%;height:100%;
  transform-style:preserve-3d;
  transition:transform .55s var(--ease-out);
}
.cf-card.cf-aberto .cf-inner{transform:rotateY(180deg)}
.cf-face{
  /* --pc vem do style inline do .cf-card e é herdada — NUNCA redeclarar
     aqui como var(--pc,...): é referência circular e invalida a cor. */
  position:absolute;inset:0;display:flex;flex-direction:column;
  backface-visibility:hidden;-webkit-backface-visibility:hidden;
  border-radius:18px;padding:clamp(16px,1.4vw,22px);
  background:
    radial-gradient(130% 90% at 14% 0%,color-mix(in srgb,var(--pc) 24%,transparent),transparent 58%),
    linear-gradient(180deg,#14100a,#0b0806);
  border:1px solid color-mix(in srgb,var(--pc) 42%,transparent);
  box-shadow:0 34px 80px -30px rgba(0,0,0,0.92),inset 0 1px 0 rgba(255,255,255,0.05);
}
.cf-back{transform:rotateY(180deg)}
.cf-ico{
  display:grid;place-items:center;width:48px;height:48px;border-radius:13px;
  background:linear-gradient(150deg,color-mix(in srgb,var(--pc) 96%,#fff),color-mix(in srgb,var(--pc) 58%,#000));
  box-shadow:0 12px 28px -10px color-mix(in srgb,var(--pc) 75%,transparent);
}
.cf-cat{
  display:block;margin-top:clamp(12px,1.1vw,18px);
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--pc);
}
.cf-nome{
  display:block;margin-top:5px;
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(17px,1.35vw,21px);line-height:1.12;color:var(--pc);
}
.cf-desc{
  display:block;margin-top:8px;flex:1 1 auto;
  font-size:clamp(12px,.92vw,13.5px);line-height:1.55;color:rgba(238,229,214,0.72);
}
.cf-meta{
  display:flex;align-items:baseline;gap:8px;
  padding-top:12px;border-top:1px solid rgba(238,229,214,0.1);
  font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;
  text-transform:uppercase;color:rgba(238,229,214,0.5);
}
.cf-meta b{font-family:var(--font-display);font-size:21px;color:var(--pc)}
.cf-meta i{margin-left:auto;font-style:normal;color:var(--pc);opacity:.9}
/* verso: o conteúdo do pack */
.cf-back ul{list-style:none;margin:10px 0 0;padding:0;flex:1 1 auto}
.cf-back li{
  display:flex;justify-content:space-between;gap:12px;
  padding:8px 0;border-top:1px dashed color-mix(in srgb,var(--pc) 26%,transparent);
  font-size:clamp(11px,.85vw,12.5px);line-height:1.4;color:rgba(238,229,214,0.85);
}
.cf-back li:first-child{border-top:0}
.cf-back li b{font-family:var(--font-mono);color:var(--pc)}
.cf-rodape{
  display:flex;align-items:center;gap:8px;
  padding-top:10px;border-top:1px solid rgba(238,229,214,0.1);
  font-family:var(--font-mono);font-size:10px;letter-spacing:.08em;
  text-transform:uppercase;color:rgba(238,229,214,0.5);
}
.cf-rodape b{font-family:var(--font-display);font-size:18px;color:var(--pc)}
/* D1 (23/08): o selo em nowrap media 192px num miolo de ~198 e a linha do
   rodape estourava o card na horizontal (scrollWidth 295-299 em card de
   230, medido em 360 E em 1440): o chip saia CORTADO na borda direita.
   Defeito de ORIGEM, presente na producao desde sempre. Morre aqui: o
   selo quebra em DUAS linhas, alinhado a direita; copy intocada.
   As duas linhas sao garantidas por medida: no desktop o vao do selo e
   102.4px; com padding 5px a area de texto da 90.4 >= 88.4 do "COMBO
   SUPREMO" (medido a 10px/.08em, o corpo dos overrides 4118/4136).
   line-height 1.3: com 1.6 o verso mais denso (Pediatria, 5 itens, um
   quebrado) passava 2px do teto de 258 nos dois breakpoints. */
.cf-selo{
  margin-left:auto;padding:5px;border-radius:999px;font-style:normal;
  border:1px solid color-mix(in srgb,var(--pc) 45%,transparent);
  background:color-mix(in srgb,var(--pc) 14%,transparent);
  font-size:8.5px;letter-spacing:.08em;color:var(--pc);
  white-space:normal;text-align:right;line-height:1.3;
}
.cf-nav{
  position:absolute;top:50%;translate:0 -70%;z-index:120;
  width:46px;height:46px;border-radius:50%;border:1px solid rgba(236,196,95,0.35);
  background:rgba(20,14,8,0.72);backdrop-filter:blur(6px);
  color:var(--gold-honey);font-size:26px;line-height:1;cursor:pointer;
  transition:background .25s,transform .25s;
}
.cf-nav:hover{background:rgba(214,154,60,0.25);transform:scale(1.06)}
.cf-nav--prev{left:clamp(10px,3vw,48px)}
.cf-nav--next{right:clamp(10px,3vw,48px)}
.cf-hint{
  margin:2px 0 0;text-align:center;
  font-family:var(--font-mono);font-size:10px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-dim);
}
@media (max-width:760px){
  .cfw{--cfcw:min(60vw,225px)}
  .cf-nav{display:none}                       /* no toque, o arrasto manda */
}
/* sem JS: fileira plana rolável */
html:not(.js) .cf-stage{height:auto;display:flex;gap:14px;overflow-x:auto;transform-style:flat}
html:not(.js) .cf-card{position:static;width:var(--cfcw);flex:0 0 auto}
html:not(.js) .cf-inner{transition:none}

/* ==========================================================================
   Camada · polimento 18/08 (2ª rodada): packs na paleta da página +
   módulos RETOS dentro de painel arredondado mais escuro que o fundo.
   ========================================================================== */
/* Packs: cores POR ESPECIALIDADE (decisão do dono, 18/08 — o teste com
   tudo dourado, `.cf-card{--pc:#d69a3c !important}`, foi descartado).
   A cor vem do style inline de cada card e é HERDADA: nunca redeclarar
   `--pc` como `var(--pc,...)` — referência circular apaga os color-mix. */
/* menores e em maior número na tela */
.cfw{--cfcw:clamp(175px,14.5vw,212px)}
.cf-stage,.cf-card{height:calc(var(--cfcw) * 1.30)}
.cf-back li{padding:7px 0;font-size:clamp(10.5px,.8vw,12px)}
.cf-desc{font-size:clamp(11.5px,.85vw,12.5px)}
@media (max-width:760px){.cfw{--cfcw:min(56vw,200px)}}

/* ---------- módulos: painel + tira reta ---------- */
.mods-light .container{max-width:none;padding:0 var(--card-pad)}
.mods-box{
  --mbpad:clamp(18px,2.4vw,40px);
  background:linear-gradient(180deg,#171009,#100a05);   /* mais escuro que o BG */
  border:1px solid rgba(236,196,95,0.1);
  border-radius:clamp(24px,3vw,44px);
  padding:clamp(28px,3.6vw,56px) var(--mbpad) clamp(26px,3vw,48px);
  box-shadow:0 40px 100px -50px rgba(0,0,0,0.95),inset 0 1px 0 rgba(255,255,255,0.04);
  overflow:hidden;
}
/* a tira ocupa a largura do PAINEL (não mais 100vw da página) */
.mods-box .mods-rail--arc{
  width:auto;margin-left:calc(-1 * var(--mbpad));margin-right:calc(-1 * var(--mbpad));
  left:auto;transform:none;
}
/* RETOS: sem perspectiva/giro (o motor arcUpdate segue escrevendo --z/--rot,
   mas esta camada final ignora — não remover o JS, é null-safe e barato) */
.mods-box .mods-strip{perspective:none;padding-block:14px}
.mods-rail--arc .mshot{transform:translateY(var(--ty,0px))}
.mods-rail--arc .mshot::after{display:none}
.mods-rail--arc .mshot img{filter:saturate(.95);box-shadow:0 22px 50px -24px rgba(0,0,0,0.85)}
.mods-rail--arc .mshot-cap,.mods-rail--arc .mshot-name{opacity:1}

/* ==========================================================================
   Camada · EXECUÇÃO DA AUDITORIA 18/08 (ver AUDITORIA-UX-2026-08-18.md)
   Ordem: P0 → onda arredondada → ritmo desktop → mobile/tablet → a11y.
   Exceções retas deliberadas: .nz (rasgo), .crm-box (carimbo), faixas
   full-bleed, rodapé.
   ========================================================================== */

/* ---------- tokens de raio (Tema A) ---------- */
:root{
  --r-panel:clamp(26px,3vw,48px);
  --r-card:18px;
  --r-media:clamp(14px,1.4vw,20px);
  --r-chip:999px;
  --r-tile:12px;
}
.hero-card,.depo-box,.mods-box,.quem-box{border-radius:var(--r-panel)}
.tq,.cf-face,.kit-shot img{border-radius:var(--r-card)}
.mshot img,.mods-rail--arc .mshot img,.mods-rail--arc .mshot::after,
.quem-foto,.qc img{border-radius:var(--r-media)}
.quem-foto img{border-radius:calc(var(--r-media) - 2px)}
.pack-ico,.cf-ico,.sc-ico{border-radius:var(--r-tile)}

/* ---------- P0.1 depoimentos: mobile/tablet e reduced-motion de volta ---- */
@media (max-width:940px){
  .depo-box .tcols{
    height:auto;flex:none;min-height:0;max-height:none;
    -webkit-mask-image:none;mask-image:none;
  }
}
@media (prefers-reduced-motion:reduce){
  .depo-box .tcols{height:auto;-webkit-mask-image:none;mask-image:none}
  .depo-box .tcol--2,.depo-box .tcol--3{display:none}
}

/* ---------- P0.3 hero: "Ver os resultados" legível ---------- */
.hero--light .hs-btn{color:var(--on-gold)}
.hero--light .hs-btn-ic{background:rgba(26,18,6,0.16)}

/* ---------- P0.4 + Tema A: fim do chanfro ---------- */
.oferta-card,.garantia-card{clip-path:none;border-radius:clamp(20px,2vw,28px)}
.oferta-card::before,.garantia-card::before{clip-path:none;border-radius:inherit}
.border-beam{clip-path:none;border-radius:inherit}
.stack-core,.acesso-steps .step{clip-path:none;border-radius:14px}
.sec-eyebrow,.sec-eyebrow span,.vsl-eyebrow span,.bonus-eyebrow span,
.instrutora-tag,.cfm-count.cut,.oferta-count.cut{clip-path:none;border-radius:var(--r-chip)}
.vsl-frame{clip-path:none;border-radius:clamp(18px,1.8vw,28px);overflow:hidden}
.vsl-player{clip-path:none;border-radius:calc(clamp(18px,1.8vw,28px) - 1.5px)}
.vsl-badge{border-radius:var(--r-chip)}
.conq-card{clip-path:none;border-radius:clamp(16px,1.6vw,20px)}
.tfc--tri::after{display:none}
.acc-item{border-radius:14px;overflow:hidden}
.faq-card{clip-path:none;border-radius:clamp(18px,2vw,24px)}
.v4-mod,.v4-poll,.trilhas-note{clip-path:none;border-radius:14px}
.v4-prow i,.v4-prow i b{clip-path:none;border-radius:4px}
.btn::before{border-radius:50%}
.v4-price,.stat,.stats{clip-path:none;border-radius:var(--r-card)}
.hs-btn{border-radius:var(--r-chip)}

/* ---------- Tema B: ritmo e diagramação desktop ---------- */
.depo-light{margin-block:calc(var(--space-section)/2)}
.section-title:has(+ .section-subtitle){margin-bottom:18px}
.oferta-grid{align-items:start}
@media (min-width:900px){.garantia-card{position:sticky;top:96px}}
.urgencia-grid h2{font-size:clamp(26px,3.8vw,46px)}
.bonus-title{font-size:clamp(26px,3.8vw,46px)}
.quem-box .quem-texto h2{font-size:clamp(26px,min(4vw,4.8vh),48px)}
.quem-carta p{font-size:clamp(12.5px,.9vw,13.5px)}
.quem-box .crm-box{font-size:clamp(11px,1.2vh,12px)}
/* assinatura da oferta agora é link (mesma cara de antes) */
a.oferta-by{display:block;text-decoration:none;color:var(--ink-mut)}
a.oferta-by:hover{color:var(--gold-honey)}

/* ---------- Tema C: tablet ---------- */
@media (max-width:1000px){
  .grid,.grid--280{grid-template-columns:repeat(2,1fr)}
  .quem-carta{column-count:1}
  .quem-carta p{font-size:13px}
}
@media (max-width:760px){
  .grid,.grid--280{grid-template-columns:1fr}
}
/* oferta empilha antes de espremer (899 → 999) */
@media (max-width:999px){
  .oferta-grid{grid-template-columns:1fr}
  .oferta-card{order:-1}
  .garantia-card{position:static}
}
/* cortes secos dos carrosséis viram fade */
.mods-strip{
  -webkit-mask-image:linear-gradient(to right,transparent,#000 28px,#000 calc(100% - 28px),transparent);
  mask-image:linear-gradient(to right,transparent,#000 28px,#000 calc(100% - 28px),transparent);
}
@media (max-width:760px){
  .cf-frame{
    -webkit-mask-image:linear-gradient(90deg,transparent,#000 20px,#000 calc(100% - 20px),transparent);
    mask-image:linear-gradient(90deg,transparent,#000 20px,#000 calc(100% - 20px),transparent);
  }
}

/* ---------- Tema C: mobile ---------- */
@media (max-width:760px){
  .depo-light{margin-block:calc(var(--space-section)/2)}
  /* oferta: -~350px de ar interno, zero copy */
  .oferta-card,.garantia-card{padding:24px 20px}
  .oferta-list{gap:8px;margin-bottom:18px}
  .oferta-preco-box{padding-top:18px}
  .garantia-seal{width:104px;height:104px;margin-bottom:16px}
  .garantia-seal .num{font-size:38px}
  .acesso-steps{gap:12px}
  /* para-quem: cards mais enxutos */
  .trust-card{padding:20px 22px}
  .trust-card h3{font-size:18px}
  .trust-ic{width:24px;height:24px;padding:7px;margin-bottom:8px}
  #para-quem .grid{gap:14px}
  /* comunidade: linhas horizontais — identidade própria vs para-quem */
  #comunidade .trust-card{display:flex;flex-direction:row;align-items:center;gap:14px;padding:16px 18px}
  #comunidade .trust-ic{margin-bottom:0;flex:none}
  #comunidade .trust-card h3{margin:0 0 2px;font-size:16px}
  #comunidade .grid--280{gap:12px}
  /* alvos de toque >= 44px */
  .hs-btn{padding:9px 18px 9px 9px}
  .mods-nav{width:44px;height:44px}
  .footer-links{gap:2px}
  .footer-links a{padding-block:11px}
  /* piso de legibilidade dos rótulos mono */
  .hs-lbl,.mshot-cap,.cf-cat,.garantia-seal .dias{font-size:11px}
  .cf-hint{font-size:11.5px}
  .cf-selo{font-size:10px}
  .esp-track span{font-size:11.5px}
}

/* ---------- Tema D: coverflow convida ao clique ---------- */
.cf-card .cf-inner{cursor:pointer}

/* ---------- Tema E: acessibilidade ---------- */
/* foco visível nos painéis claros */
.hero--light a:focus-visible,.depo-box a:focus-visible,
.depo-box button:focus-visible,.quem-box a:focus-visible{outline-color:#8a5a14}
/* cinzas no limiar sobem do 4.4 para ~6:1 */
.cf-meta,.cf-rodape{color:rgba(238,229,214,0.65)}
/* linha de especialidade dos depoimentos: 4.06 -> >=4.5 */
.depo-box{--lt-ink-3:#75684f}
/* valores riscados da oferta */
.sv{color:var(--ink-mut)}
/* pisos de tipografia desktop */
.cf-selo{font-size:10px}
.cf-cat{font-size:10.5px}
.hs-lbl{font-size:10.5px}
.rail span{font-size:10px}


/* ==========================================================================
   Camada · CORES DOS PACKS POR ESPECIALIDADE (decisão do dono, 18/08)
   O override dourado saiu e as 10 cores voltaram. Medido: 5 das 10 caíam
   abaixo de 4.5:1 como TEXTO sobre o topo do card (o véu radial de --pc 24%
   clareia o fundo justo onde ficam a categoria e o nome).
   Correção: a cor pura continua em ícone, borda, véu e selo (são superfícies);
   o TEXTO usa --pc-txt, a mesma cor com 20% de branco. Matiz preservado,
   pior caso 4.52 -> medido abaixo. NÃO redeclarar --pc aqui (circular).
   ========================================================================== */
.cf-face{--pc-txt:color-mix(in srgb,var(--pc) 80%,#fff)}
.cf-cat,.cf-nome,.cf-meta b,.cf-meta i,.cf-back li b,.cf-rodape b,.cf-selo{color:var(--pc-txt)}

/* A lista de módulos passou de 8 para 12 linhas (os 12 reais, 00 a 11).
   No celular isso somava ~270px à seção; compactar a linha devolve a maior
   parte sem tocar em uma palavra de copy. Mesmo espírito do Tema C. */
@media (max-width:760px){
  .v4-mods{gap:7px;margin-top:clamp(22px,5vw,32px)}
  .v4-mod{padding:11px 14px;gap:10px}
  .v4-mod .ic{width:17px;height:17px}
  .v4-mod b{font-size:14.5px;line-height:1.2}
}

/* ==========================================================================
   Camada · RESPIRO DE BORDA (pedido do dono, 18/08: "bastante respiro nas
   bordas"). --card-pad é a margem entre os painéis full screen (hero,
   depoimentos, módulos, quem) e a borda da tela: era no máximo 22px, o que
   colava os painéis no limite da janela em monitores grandes.
   ⚠️ Os painéis usam min-height:calc(100svh - var(--card-pad)*2) — subir este
   valor ENCURTA o painel. Medido depois em 1366x640 (tela curta) para
   garantir que o hero continua fechando em uma tela sem sobreposição.
   ========================================================================== */
:root{--card-pad:clamp(12px,2.1vw,42px)}

/* O hero tem respiro PRÓPRIO (--hero-pad) e piso de 600px de altura. Em telas
   curtas (1366x640) ele já estourava a tela em ~27px por causa desse piso, e
   subir o respiro pioraria. Então o respiro maior entra só onde há altura
   para ele; abaixo disso, tudo fica como estava. */
/* HERO: respiro NÃO aumentado de propósito. Medido em 1600x950: o cartão do
   hero tem 977px de conteúdo e já passa 27px da tela HOJE, antes de qualquer
   mudança minha (conferido forçando o valor antigo: 977px nos dois casos).
   Subir o respiro empurrava o fundo de 998 para 1011 e piorava o estouro.
   ⚠️ --hero-pad é declarada NO PRÓPRIO .hero (~linha 2472): uma regra no
   :root não a vence. Se o dono mandar corrigir o estouro, é aqui que se mexe.
   O respiro extra entra só em telas com folga real de altura. */
@media (min-height:1080px){
  .hero{--hero-pad:clamp(10px,2.1vw,42px)}
}

/* ==========================================================================
   Camada · HERO CABENDO EM UMA TELA (18/08 noite, decisão do dono)
   Medido em 1600x950 ANTES: cartão 977px numa área útil de 908px, passando
   48px da dobra. A anatomia era 104px de faixa do header + 626px de texto +
   247px de faixa reservada (cartão de vidro + canto recortado).
   Onde estava a gordura, medida: 56px de folga entre o fim do texto e o
   cartão de vidro, 28px sob o header e 95px somados nos vãos internos.
   Corte feito SÓ em espaço — nada de tipografia, a pedido do histórico do
   projeto (o tamanho do título é decisão visual do dono).
   ⚠️ A regra de padding-bottom que vence é a ~2727; qualquer ajuste futuro
   tem de vir DEPOIS dela.
   ⚠️ Piso do padding-bottom não pode descer de ~191px: é o que o cartão de
   vidro ocupa a partir da base do cartão. Abaixo disso o texto encosta nele.
   ========================================================================== */
.hero-card .container{
  padding-top:clamp(72px,min(9vh,8vw),108px);
  /* piso 198px: o cartão de vidro ocupa ~191px a partir da base do cartão.
     Com piso menor, em alturas logo ACIMA de 760 (onde a media de telas
     baixas ainda não ativa e o cartão de vidro está em tamanho cheio) o
     texto encostava nele — flagrado medindo 1440x761. */
  padding-bottom:clamp(198px,min(21vh,15.5vw),230px);
}
/* Telas baixas: aqui a media original já encolhe o .hero-stat, então a
   faixa reservada pode ser menor. Esta regra precisa existir porque a de
   cima não tem media query e, por vir depois, atropelaria as bandas. */
/* Banda INTERMEDIÁRIA (761 a 880): descoberta medindo. Acima de 760 a media
   original não ativa, então o cartão de vidro fica em tamanho cheio e exige
   faixa larga; mas ainda não há altura para isso. Aqui o cartão encolhe (as
   mesmas regras da banda baixa) e a faixa pode ser mais enxuta. */
@media (min-height:761px) and (max-height:920px){
  .hero-card .container{
    /* topo com folga para o cabeçalho de 76px (em 1366x768 sobrava 2px);
       a altura vem dos vãos internos, que apertam sem risco de colisão */
    padding-top:clamp(70px,8.6vh,78px);
    padding-bottom:clamp(158px,19.6vh,182px);
  }
  .hero-card .eyebrow-pill{margin-bottom:clamp(8px,1.5vh,16px)}
  .hero-card .hero-title{margin-bottom:clamp(8px,1.4vh,15px)}
  .hero-card .hero-lede{margin-bottom:clamp(12px,2vh,22px)}
  .hero-card .hero-micro{margin-top:clamp(7px,1.2vh,12px)}
  .hero-stat{gap:9px;padding:12px 14px;min-width:0}
  .hero-stat .hs-num{font-size:24px}
}
/* Telas baixas: aqui a faixa do topo NÃO pode encolher muito, senão o texto
   encosta no cabeçalho (76px). Medido: com padding-top de 60px sobrava 1px de
   folga em 1280x720. A altura vem dos VÃOS internos, que apertam mais sem
   risco de colisão. */
@media (max-height:760px){
  .hero-card .container{
    padding-top:clamp(70px,9.4vh,88px);
    padding-bottom:clamp(156px,20vh,182px);
  }
  .hero-card .eyebrow-pill{margin-bottom:clamp(8px,1.4vh,14px)}
  .hero-card .hero-title{margin-bottom:clamp(8px,1.3vh,14px)}
  .hero-card .hero-lede{margin-bottom:clamp(12px,1.9vh,20px)}
  .hero-card .hero-micro{margin-top:clamp(7px,1.1vh,11px)}
}
.hero-card .eyebrow-pill{margin-bottom:clamp(10px,1.9vh,20px)}
.hero-card .hero-title{margin-bottom:clamp(10px,1.7vh,18px)}
.hero-card .hero-lede{margin-bottom:clamp(16px,2.4vh,26px)}
.hero-card .hero-micro{margin-top:clamp(9px,1.4vh,14px)}

/* Título do hero em telas baixas: o clamp já encolhe por ALTURA
   (min(5.4vw,7.6vh)), mas o coeficiente 7.6vh foi calibrado quando as faixas
   do cartão eram maiores. Em 1366x768 e 1280x720 o conteúdo passava a dobra
   mesmo com os vãos no mínimo — 7.6vh dava 58px de título e o bloco de texto
   não cabia. 6.9vh resolve e só vale ATÉ 820px de altura: de 821 para cima o
   título fica exatamente como o dono aprovou. */
@media (max-height:820px){
  .hero-card .hero-title{font-size:clamp(30px,min(5.4vw,6.9vh),68px)}
}

/* ==========================================================================
   Camada · FORA OS ORNAMENTOS DE MOLDURA (ordem do dono, 18/08 noite)
   "tire esses elementos de toda a página, está poluindo e não faz sentido
   ter eles mais". São três, e ele está certo sobre o "não faz sentido":
   os dois primeiros nasceram da linguagem CHANFRADA e ficaram órfãos
   quando a página virou arredondada.
   1. Cantoneiras em L dos cards (.tfc) — o próprio comentário original
      dizia "nos dois cantos VIVOS (o chanfro corta os outros dois)".
      Os 51 elementos <i class="tfc"> foram removidos do HTML; estas regras
      ficam desligadas caso algum sobre ou volte por engano.
   2. Losango dentro dos chips de seção (.sec-eyebrow span::before).
   3. Ornamento linha-losango-linha sob cada título de seção.
   Para reverter: apagar esta camada e repor os <i> a partir de
   scratchpad/bak/index.com-ornamentos.html da sessão de 18/08.
   ========================================================================== */
.tfc,.tfc::before,.tfc::after{display:none !important}
.sec-eyebrow span::before{display:none}
.sec-eyebrow span{gap:0}
.section-title::after,.bonus-title::after,.kit-title::after{display:none}

/* ==========================================================================
   Camada · LEQUE EMPILHADO DOS MÓDULOS (18/08 noite)
   O dono mandou um componente React (shadcn + motion): carrossel de cards
   empilhados em leque, o do meio de frente e os vizinhos tombados, com
   arraste e mola ao soltar. A página não tem React nem build, então a
   ANATOMIA foi reproduzida nativamente — mesma matemática, CSS vars escritas
   por um motor de rAF no main.js.
   Substituiu o carrossel em ARCO 3D (`.mods-rail--arc`): o HTML saiu, o CSS
   e o `arcUpdate()` continuam no arquivo sem uso (null-safe, inofensivos).
   ⚠️ O motor escreve --x/--y/--rot/--sc/--op/--z; a ORDEM do transform
   importa: translate(-50%,-50%) primeiro (centra), depois deslocar, girar e
   escalar. Inverter isso faz o card girar em torno do canto.
   ========================================================================== */
.fan{
  position:relative;display:flex;flex-direction:column;align-items:center;
  margin-top:clamp(26px,3.4vw,46px);
  user-select:none;-webkit-user-select:none;
}
.fan-stage{
  position:relative;width:100%;
  height:clamp(320px,42vw,460px);
  touch-action:pan-y;cursor:grab;
}
.fan-stage.is-dragging{cursor:grabbing}
.fan-stage:focus-visible{outline:2px solid var(--gold-honey);outline-offset:6px;border-radius:var(--r-card)}

.fan-card{
  position:absolute;left:50%;top:50%;
  width:clamp(188px,24vw,296px);aspect-ratio:2/3;
  border-radius:var(--r-card);overflow:hidden;
  background:#0d0906;
  box-shadow:0 30px 70px -28px rgba(0,0,0,.9);
  transform:translate(-50%,-50%)
            translate(var(--x,0px),var(--y,0px))
            rotate(var(--rot,0deg))
            scale(var(--sc,1));
  opacity:var(--op,1);
  z-index:var(--z,1);
  will-change:transform,opacity;
  pointer-events:none;   /* o arraste é da pista, não dos cards */
}
.fan-card img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
/* véu que escurece quanto mais longe do centro (o motor escreve --veil) */
.fan-veil{position:absolute;inset:0;background:#000;opacity:var(--veil,0);pointer-events:none}
.fan-scrim{
  position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(to top,rgba(6,4,2,.88) 0%,rgba(6,4,2,.22) 42%,transparent 70%);
}
.fan-badge{
  position:absolute;top:12px;right:12px;z-index:2;
  padding:5px 11px;border-radius:var(--r-chip);
  background:rgba(20,14,8,.72);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
  border:1px solid rgba(236,196,95,.42);
  font-family:var(--font-mono);font-size:9.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--gold-honey);white-space:nowrap;
}
.fan-meta{
  position:absolute;left:16px;right:16px;bottom:16px;z-index:2;
  opacity:var(--meta,0);   /* só o card da frente mostra texto */
  transition:opacity .25s ease;
}
.fan-meta b{
  display:block;font-family:var(--font-display);font-weight:700;
  font-size:clamp(14px,1.15vw,17px);line-height:1.15;letter-spacing:.02em;
  color:#fff;text-shadow:0 2px 12px rgba(0,0,0,.8);
}
.fan-meta p{
  margin:6px 0 0;font-size:clamp(11.5px,.85vw,12.5px);line-height:1.45;
  color:rgba(240,232,220,.86);text-shadow:0 1px 10px rgba(0,0,0,.9);
}

.fan-nav{
  /* acima dos cards: o motor escreve z-index até 100 nos cards e, no
     celular, eles passavam por cima das setas e as sumiam. */
  position:absolute;top:50%;transform:translateY(-50%);z-index:200;
  width:44px;height:44px;border-radius:50%;
  display:grid;place-items:center;cursor:pointer;
  background:rgba(24,16,9,.82);border:1px solid rgba(236,196,95,.34);
  color:var(--gold-honey);transition:background .3s,border-color .3s,transform .3s;
}
.fan-nav:hover{background:rgba(40,26,12,.94);border-color:rgba(236,196,95,.7)}
.fan-nav .ic{width:17px;height:17px}
.fan-nav--prev{left:clamp(2px,2vw,26px)}
.fan-nav--prev .ic{transform:rotate(180deg)}
.fan-nav--next{right:clamp(2px,2vw,26px)}
.fan-hint{
  margin:14px 0 0;font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-dim);
}

/* Sem JS: vira uma tira que rola, com tudo legível (o motor não roda) */
html:not(.js) .fan-stage{
  height:auto;display:flex;gap:14px;overflow-x:auto;padding-bottom:8px;
}
html:not(.js) .fan-card{
  position:static;transform:none;opacity:1;flex:0 0 auto;
}
html:not(.js) .fan-meta{opacity:1}
html:not(.js) .fan-nav,html:not(.js) .fan-hint{display:none}

@media (max-width:640px){
  /* card mais estreito: com 188px o leque não abria e os vizinhos ficavam
     escondidos atrás do card da frente */
  .fan-card{width:clamp(150px,42vw,196px)}
  .fan-stage{height:clamp(290px,74vw,360px)}
  .fan-nav{width:40px;height:40px}
  .fan-nav--prev{left:0}
  .fan-nav--next{right:0}
  .fan-meta p{display:none}
  .fan-meta{left:12px;right:12px;bottom:12px}
}

/* ==========================================================================
   Camada · MOCKUP DA PLATAFORMA EM NOTEBOOK (entre o leque e a lista)
   Peça só de imagem, sem texto: mostra que o produto existe e é uma
   plataforma de verdade, logo depois do leque dos módulos.
   ⚠️ A arte precisa vir com FUNDO TRANSPARENTE (PNG/WEBP com alfa). Se vier
   com fundo branco, ele vira um retângulo aceso no meio da página escura.
   O halo dourado atrás é o que assenta a peça no fundo.
   ========================================================================== */
.nbk{
  position:relative;margin:clamp(34px,4.6vw,64px) auto 0;
  width:100%;max-width:clamp(560px,72vw,1020px);
  display:flex;justify-content:center;
}
.nbk img{
  position:relative;z-index:1;
  width:100%;height:auto;display:block;
  filter:drop-shadow(0 42px 70px rgba(0,0,0,.62));
}
/* brilho quente atrás, para a peça não flutuar solta no escuro */
.nbk-halo{
  position:absolute;z-index:0;left:50%;top:52%;transform:translate(-50%,-50%);
  width:86%;aspect-ratio:16/10;pointer-events:none;
  background:radial-gradient(closest-side,rgba(214,154,60,.20),rgba(181,119,30,.07) 55%,transparent 74%);
  filter:blur(6px);
}
@media (max-width:760px){
  .nbk{max-width:100%;margin-top:clamp(26px,6vw,38px)}
}

/* ==========================================================================
   Camada · VÃO ÓRFÃO DO ORNAMENTO + DEPOIMENTOS CENTRADOS (18/08 noite)
   ⚠️ ARMADILHA DE MEDIÇÃO (perdi uma rodada nisto): a seção tem
   data-scene="rise", e o motor de cenas aplica matrix3d no .container, mais
   um scale(.985) do reveal. getBoundingClientRect devolve tudo MULTIPLICADO
   por ~0.854 — card lê 155 quando são 181, gap lê 20.5 quando são 24.
   MEDIR DEPOIMENTOS SEMPRE COM offsetHeight, ou com scenes=off.

   ACHADO 1 · o `--title-gap` (clamp 54..86px) existia para acomodar o
   ornamento linha-losango-linha sob os títulos. O ornamento foi removido a
   pedido do dono e o vão ficou órfão: 137px entre título e pista nos
   depoimentos, 73px no bônus. Só aparecia nos títulos SEM subtítulo.
   ========================================================================== */
.depo-box .section-title,
#bonus .bonus-title,#bonus .section-title{margin-bottom:clamp(22px,2.6vw,34px)}

/* ---- depoimentos: dois cards INTEIROS, centrados, com respiro ----
   ACHADO 2 · a máscara estava em PORCENTAGEM. Fade percentual escala junto
   com a pista, então aumentar a altura nunca resolvia: só aumentava o fade na
   mesma proporção. Agora o fade é em PIXELS e a altura DERIVA do módulo.
   ACHADO 3 · a altura era corroída por `flex-shrink:1` quando faltava espaço
   no painel (declarava 398, entregava 340). Agora `flex:0 0 auto`.
   ACHADO 4 · os cards tinham alturas diferentes (a citação manda), então não
   existia módulo estável. min-height + space-between resolve sem esticar.
   CONTA: 184*2 + 24 + 56*2 = 504px de pista, com 392px de zona 100% opaca,
   que é exatamente card + gap + card. O fade passa a comer só quem entra e
   quem sai da vista. */
.depo-box{--tq-h:184px;--tq-gap:24px;--tq-fade:56px;padding-block:clamp(34px,4.4vw,64px)}
.depo-box .tq{
  min-height:var(--tq-h);
  display:flex;flex-direction:column;justify-content:space-between;
}
.depo-box .tcols{
  flex:0 0 auto;min-height:0;max-height:none;
  height:calc(var(--tq-h)*2 + var(--tq-gap) + var(--tq-fade)*2);
  margin-block:clamp(28px,3.4vh,44px);
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 var(--tq-fade),#000 calc(100% - var(--tq-fade)),transparent 100%);
  mask-image:linear-gradient(to bottom,transparent 0,#000 var(--tq-fade),#000 calc(100% - var(--tq-fade)),transparent 100%);
}
/* ⚠️ INVARIANTE DO LOOP: a animação anda -50% do track. Isso só fecha sem
   salto porque padding-bottom == gap (12 cards + 11 gaps + 1 padding = 2x um
   conjunto de 6). Mexer num sem o outro faz o loop pular a cada volta. */
.depo-box .tcol-track{gap:var(--tq-gap);padding-bottom:var(--tq-gap)}

/* tela alta: três cards inteiros */
@media (min-height:900px){
  .depo-box .tcols{height:calc(var(--tq-h)*3 + var(--tq-gap)*2 + var(--tq-fade)*2)}
}
/* tela baixa: dois depoimentos inteiros valem mais que um painel que fecha na
   dobra. O painel solta o min-height e cresce. */
@media (max-height:820px){
  .depo-box{min-height:0}
}
/* respiro entre a pista e o rodapé/CTA que vivem DENTRO do painel */
.depo-box .v4-foot{margin-top:clamp(18px,2.4vh,28px)}
.depo-cta{margin-top:clamp(16px,2.2vh,26px)}

/* ==========================================================================
   Camada · ESCALA DE RAIO (ordem do dono: "os ctas e as formas nao precisam
   ser tao arredondados... mantendo um padrao profissional e premium")
   Levantamento: a página tinha 12 valores de raio para painéis (48/46/44/40/
   32/28/24/20/18/16/14) e 26 formas em pílula ou círculo. Não havia escala.
   ESCALA, 6 degraus, múltiplos de 4, cada um ~1.33x o anterior:
     4 filetes · 8 chips · 12 CONTROLES · 16 linhas/mídia · 24 cards · 32 painéis
   REGRA DE OURO: nada de clamp()/vw em border-radius. Espaçamento escala com a
   tela, canto não. Era de clamp+vw que saíam 25.6, 23, 20.48, 17.92 e 38.4 —
   números que ninguém escolheu.
   O QUE NÃO MUDA: `border-radius:50%` é primitiva própria (avatares, selo da
   garantia, setas redondas, dots). Círculo não é pílula, e continua círculo.
   ========================================================================== */
:root{
  --r-xs:4px;
  --r-sm:8px;
  --r-md:12px;
  --r-lg:16px;
  --r-xl:24px;
  --r-panel:32px;
  /* aliases: os seletores antigos seguem funcionando */
  --r-card:var(--r-xl);
  --r-media:var(--r-lg);
  --r-tile:var(--r-md);
  --r-chip:var(--r-sm);
}
@media (max-width:760px){:root{--r-panel:20px;--r-xl:18px}}

/* CONTROLES — 12px. Era 999px: o arco constante nas 4 alturas de botão é o
   que faz o CTA parecer objeto usinado em vez de app casual. */
.btn,.btn--sm,.btn--md,.btn--full,.hs-btn,.fan-nav,.mods-nav{border-radius:var(--r-md)}
.fan-nav,.mods-nav{border-radius:50%}   /* exceção: setas são círculo */

/* CHIPS E RÓTULOS — 8px. Se o CTA sai da pílula e o rótulo fica, a página
   passa a ter duas gramáticas de canto, que é pior que pílula em tudo. */
.eyebrow-pill,.sec-eyebrow span,.vsl-badge,.fan-badge,.instrutora-tag,
.cfm-count,.oferta-count,.brand-mark,.brand-mark--sm,.stack-label,
.cf-selo,.pack-total i,.cf-meta i{clip-path:none;border-radius:var(--r-sm)}

/* LINHAS E MÍDIA — 16px */
.acc-item,.v4-mod,.trilhas-note,.v4-poll,.stack-core,.v4-price,.stat,.stats,
.mod-item,.acesso-steps .step,.quem-foto,.qc img{border-radius:var(--r-lg)}
.quem-foto img{border-radius:calc(var(--r-lg) - 2px)}
.qc--c img{border-radius:var(--r-lg)}

/* CARDS — 24px */
.tq,.conq-card,.fan-card,.pack,.faq-card,.cf-face,.kit-shot img,
.oferta-card,.garantia-card,.vsl-frame,.gframe,.mg{border-radius:var(--r-xl)}
.depo-box .tq{border-radius:var(--r-xl)}       /* vence a regra composta antiga */
.vsl-player{border-radius:calc(var(--r-xl) - 1.5px)}
.gframe .gframe-inner{border-radius:calc(var(--r-xl) - 1px)}

/* PAINÉIS — 32px */
.hero-card,.depo-box,.mods-box,.quem-box{border-radius:var(--r-panel)}

/* FILETES — 4px */
.v4-prow i,.v4-prow i b{border-radius:var(--r-xs)}

/* Círculos preservados explicitamente, para nenhuma varredura futura quebrá-los */
.tq-av,.tq-av img,.garantia-seal,.vsl-play,.vsl-play .ring,
.eyebrow-pill .dot,.vsl-badge .dot,.cfm-count .dot,.oferta-count .dot,
.demo-dots i,.btn::before{border-radius:50%}

/* Foco: o anel duplo existia porque "o chanfro corta o outline". O chanfro
   morreu; o hack virou ruído somado ao outline nativo. */
.btn:focus-visible{outline:2px solid var(--gold-honey);outline-offset:3px}

/* ==========================================================================
   Camada · OFERTA REMODELADA (ordem do dono: "não condiz com a qualidade
   premium e profissional"). Diagnóstico da auditoria, em uma frase: a seção
   tinha cabeça de nada, corpo de planilha e nove animações ao mesmo tempo.
   ========================================================================== */

/* 1 · COLUNA ÚNICA. Era grid 5fr/7fr com gap 22px contra padding interno de
   46px: os cards tinham o DOBRO de ar por dentro do que o vale que os
   separava, então colavam num bloco só (quebra da lei da proximidade). */
.oferta-grid{display:block}
.oferta-card{max-width:760px;margin-inline:auto;padding:clamp(30px,3.4vw,46px)}
@media (max-width:999px){.oferta-card{max-width:100%}}

/* 2 · DIETA DE ANIMAÇÃO, de nove para uma. Rodavam juntos: borda cônica
   girando, glow pulsando, flash na chegada, preço que pula, preço que
   cintila, botão com brilho infinito, anel do selo girando 24s, anel
   pontilhado e dot luminoso. Brilho pulsante somado a borda girando é
   assinatura de infoproduto barato; marca premium usa contenção. */
.oferta-card .border-beam,.oferta-flash{display:none}
.oferta-glow-1{animation:none;opacity:.42}
.oferta-preco.preco-pop{animation:none}
.oferta-card .btn--full::after{animation:none}
.oferta-card .btn--full:hover::after{animation:sheen 1.2s ease-in-out 1}
.garantia-seal .ring,.garantia-seal::before{display:none}
.oferta-count .dot{box-shadow:none}

/* 3 · RÉGUA DE VALORES. Os preços moravam DENTRO do <b>, então cada um
   pousava onde o nome acabava: sete abscissas diferentes, escada irregular,
   e sem tabular-nums nem os dígitos alinhavam entre si. Agora o valor é
   coluna própria, alinhada à direita, com numeral tabular. */
.oferta-list--solve li{
  display:grid;grid-template-columns:21px 1fr auto;
  column-gap:14px;row-gap:3px;padding-left:0;align-items:baseline;
}
.oferta-list--solve li::before{position:static;grid-area:1/1}
.oferta-list--solve li b{grid-area:1/2;font-size:15.5px;font-weight:600;color:var(--ink-title)}
.oferta-list--solve li .sv{grid-area:1/3;justify-self:end}
.oferta-list--solve li span{
  grid-area:2/2/2/4;
  font-size:13.5px;line-height:1.55;color:var(--ink-body);
}
.sv{
  font-family:var(--font-mono);font-style:normal;font-weight:400;font-size:12px;
  color:var(--ink-faint);margin-left:0;white-space:nowrap;
  font-variant-numeric:tabular-nums;font-feature-settings:"tnum";
}
/* o bônus de maior valor ocupa a linha inteira; os dois menores dividem */
.oferta-list--duo{display:grid;grid-template-columns:1fr 1fr;gap:14px 28px}
@media (max-width:700px){.oferta-list--duo{grid-template-columns:1fr}}

/* 4 · O PRODUTO NÃO É UM DESTAQUE DE PROMOÇÃO. A caixa com fundo dourado
   deixava o item de R$ 1.497 visualmente empatado com um bônus de R$ 97. */
.stack-core{
  display:block;background:none;border:0;border-radius:0;
  border-bottom:1px solid var(--line-20);padding:0 0 18px;margin:0 0 20px;
}
.stack-core-name{font-size:22px}
.stack-core-sub{display:block;margin-top:5px;color:var(--ink-mut);letter-spacing:.1em}

/* 5 · ESCADA DO PREÇO. "12x de" tinha o MESMO corpo do número, ou seja uma
   preposição dividia o palco com a única informação que precisa ser lida num
   décimo de segundo. E o PIX vinha 3,5x menor, enterrando a melhor margem. */
.oferta-preco{
  display:flex;align-items:baseline;gap:12px;flex-wrap:wrap;
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(46px,6vw,68px);line-height:.95;letter-spacing:-.015em;
  color:var(--ink-title);font-variant-numeric:tabular-nums;
}
.oferta-preco .pref{
  font-family:var(--font-mono);font-weight:400;font-size:14px;
  letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mut);
}
.oferta-preco .val{color:var(--champagne)}
.oferta-pix{margin-top:10px;font-size:17px;color:var(--ink-lede)}
.oferta-pix b{color:var(--gold-honey);font-weight:600;font-variant-numeric:tabular-nums}

/* 6 · PROVA NO MOMENTO DO CLIQUE. Antes, "mais de 1.239 médicos" era o
   elemento mais barulhento do card (display 800 caixa alta, 3 linhas) e no
   instante da decisão não havia prova nenhuma. */
.oferta-prova{
  display:flex;flex-wrap:wrap;justify-content:center;gap:8px 20px;margin-top:16px;
  font-family:var(--font-mono);font-size:11.5px;letter-spacing:.08em;
  text-transform:uppercase;color:var(--ink-mut);
}
.oferta-prova b{color:var(--gold-honey);font-size:13px;font-variant-numeric:tabular-nums}
.oferta-card h3{font-size:clamp(20px,2.2vw,26px);margin-bottom:4px}

/* 7 · GARANTIA COLADA NO CLIQUE, não a 700px de distância na horizontal.
   O medalhão de 130px com número de 48px disputava hierarquia com o preço:
   dois focos dourados grandes, nenhum vencia. */
.garantia-card{
  position:static;max-width:760px;margin:16px auto 0;
  display:flex;flex-direction:row;align-items:center;text-align:left;
  gap:16px;padding:16px 22px;background:transparent;
  border:1px solid var(--line-15);border-radius:var(--r-lg);
}
.garantia-card::before{display:none}
.garantia-seal{
  width:44px;height:44px;flex:none;margin:0;box-shadow:none;
  border:1px solid var(--line-40);
}
.garantia-seal .num{font-size:20px;filter:none}
.garantia-seal .dias{font-size:7.5px}
.garantia-card h3{
  font-family:var(--font-body);font-weight:600;font-size:15px;
  text-transform:none;margin:0 0 2px;letter-spacing:0;
}
.garantia-card p{font-size:13.5px;line-height:1.5;margin:0}

/* Os dois bônus menores dividem a linha, mas cada um continua sendo uma
   régua de 3 colunas por dentro. Em coluna estreita o valor colava no nome,
   então aqui o valor desce para a própria linha, alinhado à direita. */
.oferta-list--duo li{grid-template-columns:21px 1fr auto;column-gap:10px}
.oferta-list--duo li b{font-size:14.5px;line-height:1.25}
.oferta-list--duo li .sv{align-self:start}
.oferta-list--duo li span{font-size:13px}
/* o bônus de maior valor respira acima da dupla */
.oferta-list--hero{margin-bottom:0}
/* respiro entre o bônus de destaque e a dupla abaixo dele: são dois <ul>
   irmãos, e sem isso a descrição do Superbônus encostava no Médico Sênior */
.oferta-list--hero + .oferta-list--duo{margin-top:16px}
.oferta-list--hero li b{font-size:16.5px}

/* ==========================================================================
   Camada · ESPAÇAMENTO, ALINHAMENTO E RITMO (auditoria de 18/08 noite)
   ========================================================================== */

/* 1 · BUG DE CASCATA, 12 CARDS AFETADOS. `.trust-card{padding:30px}` (linha
   883) é código MORTO: `.conq-card{padding:16px 16px 34px}` (linha 2050) tem
   a mesma especificidade e vem 1167 linhas depois, então vence. Os 12 cards
   de PARA QUEM e COMUNIDADE renderizavam 16px no topo e 34px embaixo, ou
   seja, conteúdo empurrado para cima e um rodapé oco.
   CAUSA RAIZ: `.conq-card` foi desenhada para card COM imagem (os 16px são o
   filete em volta da arte, e o texto ganha o resto via `.conq-body`). Os
   trust-cards não têm arte, então herdaram a métrica de um card de imagem
   sem ter imagem. O mobile já tinha sido corrigido; o desktop não. */
:root{--pad-card-sm:clamp(22px,2.2vw,30px)}
.conq-card.trust-card{padding:var(--pad-card-sm)}
.conq-card.trust-card h3{margin-top:14px}

/* 2 · PROXIMIDADE INVERTIDA. O ar DENTRO do card era maior que o ar ENTRE
   cards (padding-bottom 34px contra gap 26px), então a Lei da Proximidade
   agrupava cards vizinhos como um objeto só. A prova de que o valor certo já
   existia na página é a .faq-grid, estruturalmente idêntica, com gap 51px
   contra padding 44px. Amarrados ao mesmo par de tokens para não divergirem
   de novo — e a regra é --gap-card >= --pad-card, sempre. */
:root{--pad-card:clamp(26px,3.2vw,44px);--gap-card:clamp(30px,3.6vw,52px)}
.faq-grid,.grid,.grid--280{gap:var(--gap-card)}
.faq-card{padding:var(--pad-card)}

/* 3 · RITMO INTERNO DO CARD DA OFERTA. Havia nove margens improvisadas
   (6, 9, 10, 12, 14, 16, 18, 24, 26) sem relação entre si, e uma delas
   NEGATIVA. Ninguém percebe isso como erro, percebe como desleixo. Escala de
   4 passos: 8 / 16 / 24 / 40, com filetes separando em vez de margem solta. */
.oferta-card h3{margin:0 0 8px}
.oferta-by{margin:0 0 24px}
.oferta-stack{margin:0}
.stack-label{margin:24px 0 12px}
.oferta-list--solve{gap:16px}
.stack-total{margin-top:24px;padding-top:16px;border-top:1px solid var(--line-20)}
.oferta-preco-box{margin-top:40px;padding-top:24px}
.oferta-preco-label{margin-bottom:10px}
.oferta-card .btn--full{margin-top:24px}

/* 4 · OS TRÊS PASSOS colavam no card com 22px de margem. */
.acesso-steps{margin-top:clamp(40px,5vw,64px)}
.acesso-steps .step{border-color:var(--line-12);background:none}

/* ==========================================================================
   Camada · "PARA QUEM É" e COMUNIDADE: ícone sem caixa, sem numeração,
   boxes simétricos (ordem do dono, 18/08 madrugada)
   ========================================================================== */
/* ícone perde a caixa quadrada e vira só o traço */
.trust-card .trust-ic{
  width:26px;height:26px;padding:0;background:none;border:0;box-shadow:none;
  border-radius:0;color:var(--gold-mid);
}
.trust-card .trust-head{
  display:flex;align-items:center;gap:0;margin:0 0 14px;
  background:none;border:0;padding:0;min-height:0;
}
/* a numeração saiu do HTML; a regra fica para o caso de algum resto */
.trust-card .trust-num{display:none}

/* TODOS os boxes com a MESMA altura: o grid já estica os itens, mas o card
   precisa repassar isso para dentro, senão o conteúdo boia em alturas
   diferentes conforme o tamanho do texto. */
.grid > [data-reveal],.grid--280 > [data-reveal]{display:flex}
.conq-card.trust-card{
  display:flex;flex-direction:column;width:100%;
}
.conq-card.trust-card p{margin-bottom:0}
.conq-card.trust-card h3{margin-top:0;margin-bottom:10px}

/* ---- headline acima da VSL (copy do dono, 18/08 madrugada) ----
   Duas linhas com pesos diferentes: a primeira abre a lacuna, a segunda
   aterrissa no vídeo (por isso termina em dois pontos). */
.vsl-headline{
  max-width:1000px;margin:0 auto clamp(26px,3.2vw,44px);text-align:center;
  display:flex;flex-direction:column;gap:clamp(8px,1vw,14px);
}
.vsl-h1{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(24px,3.1vw,44px);line-height:1.08;letter-spacing:.01em;
  text-transform:uppercase;color:var(--ink-title);
}
.vsl-h2{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(20px,2.5vw,35px);line-height:1.12;letter-spacing:.01em;
  text-transform:uppercase;color:var(--gold-honey);
}
@media (max-width:700px){.vsl-headline{text-align:left}}

/* ---- hero: prova social do "time de médicos" (18/08 madrugada) ----
   ⚠️ AS FIGURINHAS SÃO MONOGRAMAS, NÃO FOTOS. A referência que o dono mandou
   usa retratos, mas foto de banco ao lado de "médicos que já usam" fabrica
   prova social — é a mesma trava que vale nos depoimentos. Trocar por fotos
   REAIS com autorização de imagem: basta pôr um <img> dentro de cada .htf,
   que o CSS já recorta em círculo. */
.hero-time{position:relative;z-index:6;display:flex;align-items:center;gap:14px;margin-top:clamp(18px,2.4vh,28px);flex-wrap:wrap}
.hero-time-fotos{display:flex;align-items:center}
.htf{
  width:38px;height:38px;border-radius:50%;flex:none;
  display:grid;place-items:center;
  margin-left:-11px;                       /* pilha sobreposta, como na referência */
  background:linear-gradient(150deg,#b5771e,#7a4f14);
  border:2px solid var(--hl-bg,#f3ece1);
  font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;
  color:#fff;text-transform:uppercase;
  box-shadow:0 4px 12px -4px rgba(0,0,0,.45);
  overflow:hidden;
}
.htf:first-child{margin-left:0}
.htf img{width:100%;height:100%;object-fit:cover;border-radius:50%}
.hero-time-txt{
  margin:0;max-width:330px;
  font-size:clamp(13px,1.05vw,14.5px);line-height:1.4;color:var(--ink-lede);
}
.hero-time-txt strong{color:var(--ink-title);font-weight:600}
@media (max-width:700px){
  .hero-time{gap:11px}
  .htf{width:34px;height:34px;margin-left:-10px;font-size:10px}
  .hero-time-txt{font-size:12.5px;max-width:none;flex:1 1 100%}
}

/* ---- header dentro da forma do cartão do hero (ordem do dono) ----
   MEDIDO: o cartão do hero começa a 17px da tela e tem raio de 32px. O header
   é fixed com padding 14px 44px, então o logo caía a 5px do topo do cartão e
   o botão 3px ACIMA dele — os dois na zona da curva, que é o corte que o dono
   marcou. A folga precisa ser maior que o raio para o elemento pousar na
   parte reta da borda, não na curvatura.
   Resultado: ~28px de folga em cima e nas laterais, igual dos dois lados. */
/* o cartão de vidro do hero ficou fora da escala de raio (era 25.6px, de um
   clamp com vw) */
.hero-stat{border-radius:var(--r-xl)}

/* ⚠️ O bloco do time nasceu com --ink-lede/--ink-title, que são as cores do
   tema ESCURO. O hero é CLARO e tem paleta própria (--hl-*), então o texto
   saía quase invisível sobre o creme. Alinhado com a lede e o micro, que são
   os vizinhos diretos. */
.hero--light .hero-time-txt{color:var(--hl-ink-2)}
.hero--light .hero-time-txt strong{color:var(--hl-ink)}
.hero--light .htf{border-color:rgba(255,255,255,.9)}

/* O hero VOLTOU ao original: a faixa escura no topo e os cantos arredondados
   ficam. O que o dono queria remover era o MENU, não a moldura. */

/* ==========================================================================
   Camada · GRÁFICOS EM BARRA VERTICAL (referência do dono: componente React
   shadcn + framer-motion + NumberFlow). A página é HTML/CSS/JS puro, sem
   build: a ANATOMIA foi reproduzida nativamente.
     trilho hachurado  -> repeating-linear-gradient (o "candy-bg")
     barra que sobe    -> height animada por transition, disparada pelo reveal
     balão do destaque -> ::after com a seta, sem SVG
   Paleta e tipografia são as da página, não as do componente.
   ========================================================================== */
.vchart{
  display:grid;grid-template-columns:repeat(4,1fr);
  gap:clamp(10px,1.4vw,20px);
  align-items:end;
  margin:clamp(26px,3vw,40px) 0 clamp(22px,2.6vw,32px);
}
.vbar{display:flex;flex-direction:column;gap:12px;min-width:0}
.vbar-track{
  position:relative;
  height:clamp(190px,22vw,290px);
  border-radius:var(--r-xl);
  overflow:hidden;
  /* hachura diagonal: o trilho "vazio" do componente de referência */
  background-color:rgba(255,255,255,.022);
  background-image:repeating-linear-gradient(135deg,
    rgba(255,255,255,.045) 0 1px,transparent 1px 9px);
  border:1px solid var(--line-12);
}
.vbar-fill{
  position:absolute;left:0;right:0;bottom:0;
  height:0;                                  /* sobe quando a seção revela */
  border-radius:var(--r-xl);
  background:linear-gradient(180deg,var(--champagne,#f0d9a4),var(--gold-mid,#c98f2f));
  box-shadow:0 -8px 30px -10px rgba(236,196,95,.5);
  transition:height 1.05s var(--ease-out);
}
/* as barras menores não gritam: só a de destaque leva o dourado cheio */
.vbar:not(.vbar--hi) .vbar-fill{
  background:linear-gradient(180deg,rgba(240,225,200,.72),rgba(150,130,100,.5));
  box-shadow:none;
}
.vbar-val{
  position:absolute;left:0;right:0;
  bottom:calc(var(--v) * 1%);
  margin-bottom:10px;
  text-align:center;z-index:2;
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(15px,1.5vw,21px);letter-spacing:.01em;
  color:var(--ink-title);
  font-variant-numeric:tabular-nums;
  opacity:0;transform:translateY(8px);
  transition:opacity .5s ease .45s,transform .5s var(--ease-out) .45s;
}
.vbar-lbl{
  text-align:center;
  font-size:clamp(11.5px,.95vw,13px);line-height:1.3;
  color:var(--ink-mut);
}
.vbar--hi .vbar-lbl{color:var(--ink-body)}

/* balão do destaque */
.vbar-tip{
  position:absolute;left:50%;transform:translateX(-50%);
  bottom:calc(var(--v) * 1%);
  margin-bottom:44px;z-index:3;white-space:nowrap;
  padding:5px 11px;border-radius:var(--r-sm);
  background:var(--champagne,#f0d9a4);color:#241708;
  font-family:var(--font-mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;
  opacity:0;transition:opacity .5s ease .6s;
}
.vbar-tip::after{
  content:"";position:absolute;left:50%;bottom:-5px;transform:translateX(-50%) rotate(45deg);
  width:9px;height:9px;background:inherit;border-radius:2px;
}

/* DISPARO — motor próprio (`[data-vchart]` no main.js), não o reveal global.
   ⚠️ ERRO QUE EU COMETI ANTES: amarrei a ALTURA da barra ao `.reveal-in`. O
   motor de reveal só observa quem está abaixo de 85% da viewport NO LOAD, e
   quando ele não dispara a barra fica em height:0 — ou seja, o gráfico some
   em vez de só não animar. Estado final nunca pode depender de animação.
   Regra: o padrão é VISÍVEL; a classe .is-off é que esconde para animar, e só
   é aplicada pelo JS quando ele vai mesmo animar. */
.vchart.is-off .vbar-fill{height:0}
.vchart.is-off .vbar-val{opacity:0;transform:translateY(8px)}
.vchart.is-off .vbar-tip{opacity:0}
.vbar-fill{height:calc(var(--v) * 1%)}
.vbar-val{opacity:1;transform:none}
.vbar-tip{opacity:1}
/* escalonamento: cada barra entra depois da anterior, como no componente de
   referência (delay = índice × 0.12s) */
.vbar:nth-child(1) .vbar-fill{transition-delay:0s}
.vbar:nth-child(2) .vbar-fill{transition-delay:.12s}
.vbar:nth-child(3) .vbar-fill{transition-delay:.24s}
.vbar:nth-child(4) .vbar-fill{transition-delay:.36s}
.vbar:nth-child(1) .vbar-val{transition-delay:.45s,.45s}
.vbar:nth-child(2) .vbar-val{transition-delay:.57s,.57s}
.vbar:nth-child(3) .vbar-val{transition-delay:.69s,.69s}
.vbar:nth-child(4) .vbar-val{transition-delay:.81s,.81s}
@media (prefers-reduced-motion:reduce){
  .vbar-fill,.vbar-val,.vbar-tip{transition:none}
}

/* barras muito baixas: o valor não pode encostar no rótulo */
.vbar-val{min-height:1em}
@media (max-width:760px){
  .vchart{gap:8px}
  .vbar-track{height:clamp(150px,38vw,200px);border-radius:var(--r-lg)}
  .vbar-fill{border-radius:var(--r-lg)}
  .vbar-lbl{font-size:11px}
  .vbar-tip{font-size:9px;padding:4px 8px;letter-spacing:.06em}
}

/* ⚠️ O balão e o valor precisam viver FORA do .vbar-track: o track tem
   overflow:hidden para recortar o preenchimento nos cantos, e isso decapitava
   o balão do destaque (saía "FAIXA MAIS COMU"). O .vbar-plot é o contexto de
   posicionamento, sem overflow. */
.vbar-plot{position:relative;height:clamp(190px,22vw,290px)}
.vbar-track{position:absolute;inset:0;height:auto}
.vbar-tip{z-index:4}
@media (max-width:760px){.vbar-plot{height:clamp(150px,38vw,200px)}}

/* ⚠️ Sem isto o gráfico PISCA: o CSS pinta no valor final, o JS aplica .is-off
   logo depois e a barra DESCE animada de volta para zero. A classe abaixo
   desliga a transição só no instante de esconder. */
.vchart-noanim .vbar-fill,.vchart-noanim .vbar-val,.vchart-noanim .vbar-tip{transition:none !important}

/* ==========================================================================
   Camada · COVERFLOW DOS PACKS: alinhado ao mockup, sem borda colorida
   (ordem do dono). MEDIDO a 1600px: a faixa era full-bleed (1600px) contra um
   mockup de 1020px, ou seja, ela transbordava 290px de CADA lado; e as setas
   ficavam a ~240px das bordas do notebook, soltas no vazio.
   ========================================================================== */
/* 1 · a faixa deixa de furar o container e passa a ter EXATAMENTE a largura
   do mockup do notebook logo acima (mesmo clamp do .nbk) */
.cfw{
  margin-inline:auto;
  /* ⚠️ o mockup logo acima do coverflow é o .kit-shot (max-width:1080px), da
     PRÓPRIA seção de bônus. Não confundir com o .nbk (1020px), que é o
     notebook da seção de MÓDULOS — errei isso uma vez e "aliniei" com a
     seção errada. Os dois valores andam juntos. */
  max-width:1080px;
  width:100%;
}
/* ⚠️ O frame CONTINUA recortando. Tentei `overflow:visible` para os vizinhos
   aparecerem além da borda e o resultado foi pior: os cards se espalhavam por
   toda a largura da tela e o alinhamento com o mockup ia embora. O recorte
   fica, e um fade lateral evita que o card do canto termine em corte seco. */
.cfw .cf-frame{
  /* SEM recorte e SEM fade: o dono não quer card cortado na ponta, mesmo que
     o carrossel passe um pouco do alinhamento do mockup. O que impede os
     cards de se espalharem pela tela agora é o LIMITE DE VISIBILIDADE no
     motor (`borda`, em main.js), não o overflow. */
  overflow:visible;
  -webkit-mask-image:none;mask-image:none;
}

/* 2 · setas coladas na borda do carrossel, não na borda da tela */
.cf-nav--prev{left:-18px}
.cf-nav--next{right:-18px}
@media (max-width:1100px){
  .cf-nav--prev{left:-6px}
  .cf-nav--next{right:-6px}
}

/* 3 · card SEM CONTORNO NENHUM. Primeiro eu só neutralizei a cor da borda
   (era `color-mix(var(--pc) 42%)`), mas o dono quer contorno zero: o card se
   define pelo próprio fundo e pela sombra. A cor da especialidade continua no
   ícone, no véu do topo e no texto. */
.cf-face{border:0}


/* ==========================================================================
   Camada · MÓDULOS ABREM EM CLARO — v2 (19/08, com a correção do dono)
   A v1 desta camada manteve caixas ESCURAS dentro do claro — erro de leitura:
   os recortes escuros da montagem do dono eram só colagem ("montagem grossa"),
   e ele tinha escrito "em harmonia na paleta clara". Aqui vale:
   · TUDO na paleta clara, na MESMA linguagem dos painéis claros existentes
     (cartão branco, tinta #241708, dourado queimado #8a5a14);
   · notebook ENTRELAÇADO com as colunas — módulos da ESQUERDA somem ATRÁS
     dele, os da DIREITA passam POR CIMA (z-index 1 < 2 < 3 + margens
     negativas). Era o posicionamento da referência, não imprecisão dela.
   A seção segue creme DE BORDA A BORDA com as TAMPAS ::before/::after
   pintadas com var(--bg) (cor chapada do body — emenda invisível).
   ⚠️ data-scene="rise": medir com offsetHeight ou scenes=off.
   ⚠️ .mods-box morreu no HTML; .mods-stage é wrapper SEM caixa. As regras
     antigas de .mods-box ficaram órfãs (inofensivas).
   ⚠️ O overflow-x:clip no .fan é OBRIGATÓRIO: quem continha os cards era o
     overflow:hidden da caixa escura removida. Só no eixo X — no Y os cards
     girados passam ~17px da .fan-stage e um hidden decapitaria os de trás.
   ========================================================================== */
.mods-light{
  --lt-ink:#241708;--lt-ink-2:#57493a;--lt-ink-3:#8a7c6a;
  background:linear-gradient(180deg,#faf6ee,#f2ece0);
  padding-block:0;
}
/* tampas das emendas: o escuro termina/recomeça arredondado sobre o creme */
.mods-light::before,.mods-light::after{
  content:"";display:block;height:clamp(30px,4vw,58px);background:var(--bg);
}
.mods-light::before{border-radius:0 0 var(--r-panel) var(--r-panel)}
.mods-light::after{border-radius:var(--r-panel) var(--r-panel) 0 0}
.mods-light .container{
  max-width:1380px;
  padding:clamp(38px,4.6vw,68px) clamp(18px,3vw,48px) clamp(42px,5vw,76px);
}

/* ---------- cabeça + leque DIRETO no creme (sem caixa nenhuma) ---------- */
.mods-stage{background:none;border:0;border-radius:0;padding:0;box-shadow:none}
.mods-light .sec-eyebrow span{
  border-color:rgba(101,71,22,0.22);
  background:rgba(255,255,255,0.7);
  color:#8a5a14;
}
.mods-light .section-title{color:var(--lt-ink)}
.mods-light .section-title .gold-accent{
  background:linear-gradient(135deg,#8a5a14,#c98a28);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.mods-light .section-subtitle{color:var(--lt-ink-2)}
.mods-light .fan{overflow-x:clip}
.mods-light .fan-hint{color:var(--lt-ink-3)}
/* sombra na base dos cards: menor e mais rala (6ª rodada, dono: as manchas
   sob os cards de trás pesavam no creme) */
.mods-light .fan-card{box-shadow:0 18px 40px -24px rgba(74,46,10,0.32)}
/* FORMA FINAL dos overlays (7ª rodada, anexo do dono): os cards são
   OBJETOS ESCUROS sobre o creme — véu de distância ESCURO e quente (não o
   desbote leitoso das rodadas 4-6) e o scrim ORIGINAL do chão escuro
   (sobe suave até 70%), que é o que segura o texto branco em qualquer
   pôster. Nenhum override de .fan-scrim/.fan-meta aqui DE PROPÓSITO:
   valem as regras base. */
.mods-light .fan-veil{
  background:#0a0603;
  opacity:calc(var(--veil,0) * 1.15);
}
.mods-light .fan-nav{
  background:rgba(255,255,255,0.9);
  border:1px solid rgba(101,71,22,0.28);
  color:#6e4a12;
  box-shadow:0 8px 20px -10px rgba(60,40,10,0.35);
}
.mods-light .fan-nav:hover{background:#fff;border-color:rgba(101,71,22,0.5)}

/* ---------- notebook entrelaçado pelos 12 módulos ---------- */
.mods-duo{display:grid;grid-template-columns:1fr;gap:8px;margin-top:clamp(28px,3.6vw,52px)}
.mods-duo .nbk{margin:0 0 10px;max-width:none;width:100%}
/* a v2 já traz sombra embutida; só um ambiente quente leve para o creme */
.mods-duo .nbk img{filter:drop-shadow(0 26px 40px rgba(74,46,10,0.22))}
/* pílulas = cartão BRANCO, a linguagem clara da página (mesma dos .tq).
   Opacas de propósito: a coluna da direita passa POR CIMA do notebook e o
   texto precisa de superfície para continuar legível.
   ANATOMIA (polimento de 19/08): ícone num TILE dourado suave à esquerda,
   rótulo mono pequeno EM CIMA do título — hierarquia em pilha, feita só com
   grid (span → linha 1, b → linha 2, ícone atravessa as duas). */
.mods-duo .v4-mod{
  display:grid;
  grid-template-columns:auto minmax(0,1fr);
  grid-template-rows:auto auto;
  column-gap:13px;row-gap:2px;
  align-items:center;align-content:center;
  padding:11px 16px 12px 12px;
  border-radius:16px;
  background:#fff;
  border:1px solid rgba(101,71,22,0.10);
  box-shadow:0 1px 2px rgba(60,40,10,0.05),0 12px 26px -16px rgba(60,40,10,0.22);
}
.mods-duo .v4-mod .ic{
  grid-row:1/3;grid-column:1;
  width:38px;height:38px;padding:9px;
  border-radius:12px;
  background:linear-gradient(180deg,rgba(201,138,40,0.14),rgba(138,90,20,0.07));
  border:1px solid rgba(138,90,20,0.16);
  color:#8a5a14;
}
.mods-duo .v4-mod span{
  grid-column:2;
  font-size:9.5px;letter-spacing:.17em;color:#a08e74;
}
.mods-duo .v4-mod b{
  grid-column:2;
  font-size:15px;line-height:1.22;color:var(--lt-ink);
}

/* tablet: notebook em cima, módulos em 2 colunas (banda da auditoria) */
@media (min-width:700px) and (max-width:1099px){
  .mods-duo{grid-template-columns:1fr 1fr;gap:8px 10px}
  .mods-duo .nbk{grid-column:1/-1;max-width:660px;justify-self:center}
}

/* desktop: o entrelaçamento da referência. Colunas SEM gap horizontal —
   o encontro é feito pelas margens negativas do notebook e da coluna direita.
   Linhas explícitas: nada de confiar no auto-placement. */
@media (min-width:1100px){
  .mods-duo{
    grid-template-columns:minmax(0,1fr) clamp(540px,48vw,760px) minmax(0,1fr);
    grid-template-rows:repeat(6,auto);
    gap:10px 0;
    align-items:stretch;
  }
  /* ⚠️ A GEOMETRIA DO ENTRELAÇAMENTO mora nas PÍLULAS, não no notebook:
     a arte do laptop tem folga interna (o corpo é ~8% mais estreito que a
     caixa da imagem na altura média), então margem negativa só no notebook
     produzia um encontro que mal se tocava. As pílulas avançam ~104px para
     dentro da coluna central e o notebook alarga só 24px de cada lado. */
  .mods-duo .nbk{
    grid-column:2;grid-row:1/7;align-self:center;z-index:2;
    margin:0 -24px;
    /* ⚠️ width:auto é OBRIGATÓRIO junto das margens negativas: a base tem
       width:100%, que fazia a caixa DESLOCAR 24px em vez de ALARGAR 48px
       (sobreposição saía assimétrica, 128/80 — medido). Com auto, o stretch
       do grid resolve trilha − margens = 760 + 48 = 808, simétrico. */
    width:auto;
  }
  .mods-duo .v4-mod{position:relative}
  /* ímpares (Módulo 00,02,…) à ESQUERDA, por BAIXO do notebook: o padding
     extra à direita é a zona coberta — o texto nunca entra nela */
  .mods-duo .v4-mod:nth-of-type(odd){
    grid-column:1;z-index:1;
    margin-right:calc(-1 * clamp(72px,6.6vw,104px));
    padding-right:clamp(80px,7vw,116px);
  }
  /* pares à DIREITA, por CIMA do notebook: o cartão avança sobre ele;
     sombra mais funda para o cartão "flutuar" sobre a tela */
  .mods-duo .v4-mod:nth-of-type(even){
    grid-column:3;z-index:3;
    margin-left:calc(-1 * clamp(72px,6.6vw,104px));
    box-shadow:0 2px 4px rgba(60,40,10,0.06),0 18px 38px -16px rgba(60,40,10,0.35);
  }
  .mods-duo .v4-mod:nth-of-type(1),.mods-duo .v4-mod:nth-of-type(2){grid-row:1}
  .mods-duo .v4-mod:nth-of-type(3),.mods-duo .v4-mod:nth-of-type(4){grid-row:2}
  .mods-duo .v4-mod:nth-of-type(5),.mods-duo .v4-mod:nth-of-type(6){grid-row:3}
  .mods-duo .v4-mod:nth-of-type(7),.mods-duo .v4-mod:nth-of-type(8){grid-row:4}
  .mods-duo .v4-mod:nth-of-type(9),.mods-duo .v4-mod:nth-of-type(10){grid-row:5}
  .mods-duo .v4-mod:nth-of-type(11),.mods-duo .v4-mod:nth-of-type(12){grid-row:6}
}

/* ---------- trilhas + CTA sobre o creme, na paleta clara ---------- */
.mods-light .trilhas-note{
  background:rgba(255,255,255,0.55);
  border:1px dashed rgba(138,90,20,0.4);
}
.mods-light .trilhas-note b{color:#8a5a14}
.mods-light .trilhas-note span{color:var(--lt-ink-2)}
.mods-light .trilhas-note strong{color:var(--lt-ink)}

/* ==========================================================================
   Camada · FUNDO-JORNADA (19/08, auditoria pedida pelo dono: o escuro estava
   "quebrado e feio" — cada seção com a própria luz, fronteiras retas)
   O escuro vira UM material contínuo ancorado no DOCUMENTO (no <main>, que
   contém todas as seções), acompanhando a narrativa da página:
     improviso (quente, topo) → risco (CFM, o ponto mais escuro, ~40%) →
     reaquecimento (bônus ~61%) → decisão (oferta, o mais quente, ~79%) →
     assentamento (FAQ/rodapé).
   Dois respiros radiais COM FONTE: a lâmpada da VSL (~10%) e o calor da
   oferta (~79%). Luz sem objeto que a justifique foi aposentada.
   ⚠️ As porcentagens são BANDAS LARGAS de propósito: mudou conteúdo, a
   jornada continua fazendo sentido sem recalibrar. (Âncoras medidas a
   1600px: VSL 10 · CFM 40 · módulos 44-54 (creme cobre) · bônus 61 ·
   oferta 79 · quem 86-91 (creme cobre) · FAQ 96.)
   ⚠️ APOSENTADAS (display:none, HTML fica): .bg-glow/.bg-act (vinhetas
   FIXAS de viewport — pintavam só a 1ª tela em captura de página inteira
   e criavam o corte diagonal no topo), .bg-grid (recriada aqui ancorada
   no documento, sem máscara) e os .orb (bolhas sem fonte). O radial da
   .bonus-section morreu: era a EMENDA reta visível acima da comunidade.
   Ficam as luzes com fonte: halo do player da VSL, glows do CTA/oferta.
   ⚠️ O JS pega .bg-act (linha ~357 do main.js) e anima opacity — segue
   inofensivo com o elemento invisível. Não remover o nó do HTML.
   ========================================================================== */
.bg-glow,.bg-act,.bg-grid,.orb{display:none}
.bonus-section{background:none}
/* o body é o que aparece atrás do rodapé e no overscroll: cor do FIM da jornada */
body{background:#100a05}
/* ⚠️ SEM GRADE (decisão do dono, 19/08 noite): o grid quadriculado era o
   último sobrevivente da linguagem CHANFRADA — o mesmo argumento que matou
   cantoneiras e losangos vale para ele. E pela regra "luz só onde tem
   fonte", NÃO substituir por manchas orgânicas soltas: a textura orgânica
   do escuro é o film-grain + a própria jornada. */
main{
  position:relative;
  background:
    /* respiros com fonte narrativa */
    radial-gradient(90% 5% at 50% 10%,rgba(214,154,60,0.10),transparent 70%),
    radial-gradient(110% 6% at 50% 79%,rgba(214,154,60,0.08),transparent 70%),
    /* a jornada */
    linear-gradient(180deg,
      #1b1109 0%,
      #191008 10%,
      #150d06 24%,
      #100904 44%,   /* CFM recentralizada após a remoção da Comunidade (19/08) */
      #150d07 54%,
      #191008 61%,
      #1c1109 70%,
      #1e130a 79%,
      #170e07 90%,
      #110a05 100%);
}
/* ==========================================================================
   MÓDULOS · A ABERTURA (19/08 noite, anexo do dono)
   A seção deve parecer que o SITE SE ABRE e revela o claro. A 1ª troca das
   tampas por border-radius no creme INVERTIA a curvatura (o creme recuava
   nos cantos, em vez de o escuro se recolher) — o anexo mostra o certo:
   o escuro é uma FOLHA POR CIMA, com curva bem acentuada e sombra projetada
   no creme (profundidade). As tampas voltam com:
   · curvas maiores que as originais (clamp 40-96px de raio);
   · cor casada com a JORNADA na posição de cada emenda (topo ~44% do doc =
     #120a05 · base ~54% = #160e07) — se a jornada recalibrar, recasar;
   · sombra para DENTRO do creme (é ela que vende a folha flutuando);
   · ABERTURA AO ROLAR: com o motor de cenas ativo, as folhas nascem mais
     fechadas (scaleY 1.9, avançadas sobre o creme) e se RECOLHEM quando a
     seção entra na tela (.scene-in) — transform puro, zero reflow, zero JS
     novo. Sem JS / reduced-motion: estado final estático.
   ========================================================================== */
.mods-light{border-radius:0}
.mods-light::before,.mods-light::after{
  content:"";display:block;
  height:clamp(48px,6.5vw,104px);
  position:relative;z-index:1;
}
.mods-light::before{
  background:#120a05;
  border-radius:0 0 clamp(40px,6vw,96px) clamp(40px,6vw,96px);
  box-shadow:0 22px 38px -16px rgba(28,16,4,0.5);
  transform-origin:50% 0;
}
.mods-light::after{
  background:#160e07;
  border-radius:clamp(40px,6vw,96px) clamp(40px,6vw,96px) 0 0;
  box-shadow:0 -22px 38px -16px rgba(28,16,4,0.5);
  transform-origin:50% 100%;
}
/* a abertura: fechadas antes da cena, recolhem ao entrar.
   ⚠️ A transição mora SÓ no estado .scene-in: o html.scenes chega DEPOIS do
   1º paint, e uma transição permanente fazia o navegador animar plano →
   fechado já no load (medido: pseudo preso em matrix identidade na aba
   oculta). Com a transição apenas na chegada da cena, o fechado nasce
   instantâneo e SÓ a abertura anima. */
html.scenes .mods-light:not(.scene-in)::before,
html.scenes .mods-light:not(.scene-in)::after{transform:scaleY(1.9)}
html.scenes .mods-light.scene-in::before,
html.scenes .mods-light.scene-in::after{
  transition:transform 1s var(--ease-out,cubic-bezier(.22,.61,.36,1));
}
@media (prefers-reduced-motion:reduce){
  html.scenes .mods-light:not(.scene-in)::before,
  html.scenes .mods-light:not(.scene-in)::after{transform:none}
}

/* ==========================================================================
   Camada · TIPOGRAFIA OUTFIT (19/08 noite, ordem do dono)
   Saira Condensed (display) e Saira (corpo) saem; entra OUTFIT — geométrica,
   redonda, moderna: o "premium Apple" que o dono vem pedindo.
   O JETBRAINS MONO FICA de propósito: é a voz técnica/protocolo (eyebrows,
   MÓDULO NN, contagem, preços com numeral TABULAR — a Outfit não tem tnum).
   ⚠️ COMPENSAÇÃO MÉTRICA obrigatória: a Saira Condensed era ESTREITA; a
   Outfit é ~15% mais larga em caixa alta. Títulos grandes perdem ~10% de
   corpo e o tracking cai para perto de zero (geométrica larga não pede ar
   entre letras no display; pede só nos rótulos pequenos).
   Hierarquia de pesos: 800 hero e preço · 700 títulos de seção · 600 CTAs e
   títulos de card · 500 ênfases · 400 corpo.
   ========================================================================== */
:root{
  --font-display:'Outfit',sans-serif;
  --font-body:'Outfit',sans-serif;
}
/* hero: o único texto que PRECISA caber numa tela — corpo -10% */
.hero-title{letter-spacing:-.008em}
.hero-card .hero-title{font-size:clamp(27px,min(4.9vw,7vh),61px)}
/* títulos de seção: -10% de corpo, tracking mínimo, peso 800 mantido */
.section-title{font-size:clamp(23px,3.4vw,41px);letter-spacing:.014em}
.bonus-title{letter-spacing:.014em}
/* CTAs: geométrica larga em 600 lê melhor que 700 apertado */
.btn{font-weight:600;font-size:15.5px;letter-spacing:.05em}
/* preço grande: 800 fica; só aperta o tracking dos numerais redondos */
.oferta-preco{letter-spacing:-.02em}
/* pílulas dos módulos: título em 600 com um fio de ar */
.mods-duo .v4-mod b{font-size:14.5px;font-weight:600;letter-spacing:.025em}
/* card da frente do leque */
.fan-meta b{letter-spacing:.012em}

/* ==========================================================================
   Camada · CARDS "PARA QUEM É" COM LUZ INTERNA (19/08 noite, ref. do dono)
   O dono reprovou o CONTORNO dourado dos cards. A referência dele (bento
   escuro premium) inverte a lógica: quem define o card é um BLOOM de luz
   subindo do fundo + uma aresta de luz no topo; a borda vira um fio quase
   invisível, só de definição. Tradução para o dourado da página:
   · fundo = bloom radial quente ancorado na BASE sobre gradiente escuro;
   · borda 0.07 (era var(--line-28)) + inset 1px de luz no topo;
   · ícone vira CHIP LUMINOSO (gradiente + glow suave), sem caixa de borda;
   · hover: o fio acende de leve e o card flutua 2px — nada do 0.6 antigo.
   Escopado ao #para-quem (ordem do dono). Para levar à COMUNIDADE, basta
   acrescentar "#comunidade" aos seletores — mesma anatomia de card.
   ========================================================================== */
/* v2 (2ª referência do dono): formato SQUIRCLE com o canto superior direito
   RECORTADO em côncavo e o ícone FORA do card, num círculo solto dentro do
   respiro — a mesma linguagem do canto recortado do hero. Sem borda nenhuma
   (a referência é borderless): quem define o card é o bloom + a aresta de
   luz. GEOMETRIA DO RECORTE: furo r=38px centrado a 26px do canto — cobre
   as duas arestas (26<38) e engole a ponta do canto (√(26²+26²)=36.8<38);
   o círculo do ícone tem 44px centrado no MESMO ponto → 16px de respiro.
   ⚠️ Mexeu no raio do furo ou na posição do ícone, refaça essa conta:
   furo raso demais deixa uma ILHA da ponta do canto sobrando. */
/* ⚠️ A MÁSCARA MORA NO ::before, nunca no card: mask mascara os FILHOS
   também, e o ícone vive exatamente dentro do furo — no card ele some
   (bug real desta rodada). O ::before carrega fundo+furo em z-index:-1;
   o card vira stacking context próprio (z-index:0) para o -1 não escapar. */
#para-quem .conq-card{
  border:0;border-radius:24px;
  position:relative;z-index:0;
  background:none;box-shadow:none;
  padding:26px 26px 30px;
  transition:transform .35s;
}
/* RECORTE FLUIDO (3ª ref. do dono): a mordida circular seca saiu — o furo
   agora tem OMBROS de raio 18 tangentes à concha (raio 32, centro a 32px do
   canto) e às arestas, desenhados num SVG de 96×96 FIXO em px (ancorado no
   canto: não distorce entre larguras de card). Tangentes calculadas:
   topo (16,0)→(33.28,23.04) · concha até (72.96,62.72) · ombro até (96,80).
   A máscara é a UNIÃO de 3 camadas (tile do canto + 2 retângulos) — o
   composite padrão "add" resolve, sem mask-composite exótico. */
/* v3 — o recorte ABRAÇA o botão (correção do dono: a v2 tinha uma concha de
   64px para um ícone de 44 = fosso escuro em volta; na referência a folga é
   mínima). Ícone 42px com FOLGA DE 7px: concha R=28 centrada em (55,29) do
   tile 84×84; ombros r=12. Tangentes: topo (18.8,0)→(29.66,17.1) · concha
   até (66.9,54.34) · ombro até (84,65.2). */
#para-quem .conq-card::before{
  content:"";position:absolute;inset:0;z-index:-1;
  border-radius:24px;
  -webkit-mask:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96'%3E%3Cpath d='M0,0 H18 A18,18 0 0 1 36,18 V38 A22,22 0 0 0 58,60 H78 A18,18 0 0 1 96,78 V96 H0 Z' fill='%23000'/%3E%3C/svg%3E") top right/96px 96px no-repeat,
    linear-gradient(#000,#000) top left/calc(100% - 96px) 96px no-repeat,
    linear-gradient(#000,#000) bottom left/100% calc(100% - 96px) no-repeat;
  mask:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96'%3E%3Cpath d='M0,0 H18 A18,18 0 0 1 36,18 V38 A22,22 0 0 0 58,60 H78 A18,18 0 0 1 96,78 V96 H0 Z' fill='%23000'/%3E%3C/svg%3E") top right/96px 96px no-repeat,
    linear-gradient(#000,#000) top left/calc(100% - 96px) 96px no-repeat,
    linear-gradient(#000,#000) bottom left/100% calc(100% - 96px) no-repeat;
  background:
    radial-gradient(85% 72% at 50% 118%,
      rgba(214,154,60,0.20), rgba(214,154,60,0.05) 55%, transparent 76%),
    linear-gradient(180deg,#1f150c,#160e08);
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.06);
}
#para-quem .conq-card:hover{transform:translateY(-2px)}
/* o círculo do ícone mora no furo, FORA do preenchimento do card.
   Como na referência: CONTORNO FINO VAZADO, não chip preenchido brilhante.
   42px centrado em (55,29) do tile → top:8px, right:8px, folga de 7px. */
#para-quem .trust-head{position:absolute;top:8px;right:8px;z-index:1}
#para-quem .trust-ic{
  width:20px;height:20px;padding:10.5px;box-sizing:content-box;
  border:1.5px solid rgba(236,196,95,0.55);border-radius:50%;
  clip-path:none;margin:0;
  background:transparent;box-shadow:none;
  color:var(--champagne);
}
/* Tipografia dos cards (correções do dono): título SEM caixa alta, peso 600
   (não "tão bold"), entrelinhas soltas — moderno e legível. */
#para-quem .trust-card h3{
  margin:0 0 12px;padding-right:60px;
  text-transform:none;
  font-weight:600;font-size:18.5px;line-height:1.38;letter-spacing:0;
}
#para-quem .trust-card p{font-size:15px;line-height:1.72}


/* ==========================================================================
   Camada · OFERTA EM DOIS ATOS + RESPIRO GLOBAL (19/08 noite, /loop do dono)
   Referências do dono: o PREÇO vira um ritual isolado (riscado pequeno →
   parcela GIGANTE → à vista → formas de pagamento → CTA → segurança) e o
   VALOR vive ao lado numa lista "você recebe" com os 3 bônus etiquetados.
   O card único antigo (.oferta-card + .oferta-stack) morreu no HTML; as
   regras antigas ficaram órfãs (inofensivas).
   ========================================================================== */
.oferta-duo{display:grid;grid-template-columns:1fr;gap:18px;margin-top:6px}
@media (min-width:1080px){
  .oferta-duo{grid-template-columns:47fr 53fr;gap:22px;align-items:stretch}
  /* preço à ESQUERDA como nas referências; no DOM a lista vem antes
     (mobile lê valor → preço) */
  .preco-card{grid-column:1;grid-row:1}
  .recebe-card{grid-column:2;grid-row:1}
}

/* ---------- o ritual do preço ---------- */
.preco-card{
  position:relative;border-radius:var(--r-panel);
  background:linear-gradient(180deg,#231709,#180f08);
  border:1px solid rgba(236,196,95,0.16);
  box-shadow:0 34px 90px -44px rgba(0,0,0,0.85),inset 0 1px 0 rgba(255,255,255,0.05);
  padding:clamp(28px,3vw,44px) clamp(22px,2.4vw,36px);
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;
}
.preco-card .brand{justify-content:center;margin-bottom:clamp(16px,2vw,24px)}
.px-de{
  font-family:var(--font-mono);font-size:12px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-mut);
}
.px-de s{color:var(--ink-dim);text-decoration-thickness:1.5px;text-decoration-color:rgba(236,196,95,0.55)}
.px-hero{display:flex;align-items:baseline;justify-content:center;gap:14px;margin-top:12px;flex-wrap:wrap}
.px-12{
  font-family:var(--font-mono);font-size:14px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-mut);
}
.px-val{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(54px,6vw,84px);line-height:.95;letter-spacing:-.02em;
  background-image:linear-gradient(100deg,#ecc45f,#f7e3a8 50%,#d99a3a);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  font-variant-numeric:tabular-nums;
}
.px-pix{margin-top:14px;font-size:16.5px;color:var(--ink-lede)}
.px-pix b{color:var(--gold-honey);font-weight:600;font-variant-numeric:tabular-nums}
.px-chips{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:18px}
.px-chips span{
  font-family:var(--font-mono);font-size:10px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--ink-mut);
  border:1px solid var(--line-20);border-radius:999px;padding:6px 13px;
}
.preco-card .btn{margin-top:24px;width:100%}
.px-safe{margin-top:14px;font-size:12.5px;color:var(--ink-dim)}
.px-prova{
  margin-top:8px;font-family:var(--font-mono);font-size:11px;
  letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mut);
}
.px-prova b{color:var(--gold-honey);font-variant-numeric:tabular-nums}

/* ---------- a lista "você recebe" ---------- */
.recebe-card{
  border-radius:var(--r-panel);
  background:linear-gradient(180deg,#1d130b,#170e08);
  border:1px solid rgba(236,196,95,0.10);
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.04);
  padding:clamp(26px,2.8vw,36px) clamp(22px,2.6vw,34px);
}
.rcb-head{
  font-family:var(--font-mono);font-size:11px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--label-gold);margin-bottom:14px;
}
.rcb-list{list-style:none;margin:0;padding:0}
.rcb-list li{
  display:grid;grid-template-columns:minmax(0,1fr) auto;
  column-gap:14px;row-gap:3px;align-items:baseline;
  padding:14px 0;border-top:1px solid var(--line-15);
}
.rcb-list li:first-child{border-top:0;padding-top:2px}
.rcb-list b{
  grid-area:1/1;font-size:15.5px;font-weight:600;color:var(--ink-title);line-height:1.35;
}
.rcb-list b::before{content:"✓";margin-right:10px;color:var(--gold-mid);font-weight:400}
.rcb-list em{
  grid-area:1/2;font-family:var(--font-mono);font-style:normal;font-size:12px;
  color:var(--ink-faint);white-space:nowrap;
  font-variant-numeric:tabular-nums;font-feature-settings:"tnum";
}
.rcb-list span{grid-area:2/1/2/3;font-size:13.5px;line-height:1.62;color:var(--ink-body)}
/* bônus: etiqueta dourada em pílula acima do nome */
.rcb-bonus{grid-template-rows:auto auto auto}
.rcb-bonus i{
  grid-area:1/1;justify-self:start;margin-bottom:2px;
  font-style:normal;font-family:var(--font-mono);font-size:9.5px;
  letter-spacing:.14em;text-transform:uppercase;color:#1d1206;
  background:linear-gradient(135deg,#ecc45f,#d99a3a);
  border-radius:999px;padding:3px 10px;
}
.rcb-bonus b{grid-area:2/1}
.rcb-bonus em{grid-area:2/2}
.rcb-bonus span{grid-area:3/1/3/3}
.rcb-total{
  display:flex;justify-content:space-between;align-items:baseline;gap:14px;
  border-top:1px solid var(--line-25);margin-top:2px;padding-top:16px;
  font-family:var(--font-mono);font-size:11.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-mut);
}
.rcb-total em{
  font-style:normal;font-size:15px;color:var(--gold-honey);
  font-variant-numeric:tabular-nums;
}
/* a garantia-faixa continua logo abaixo do duo, largura cheia */
.oferta-duo + .garantia-card{margin-top:18px}

/* ---------- para-quem: mais respiro + hover de LUZ (sem movimento) ----------
   O translateY do hover rasterizava a máscara com artefato quadrado
   (reprovado pelo dono). Hover novo: o bloom da base ACENDE (::after com a
   mesma máscara, opacity 0 → 1) e o anel do ícone acorda. Nada se move. */
#para-quem .conq-card{padding:clamp(28px,2.6vw,34px) clamp(26px,2.4vw,32px) clamp(32px,3vw,38px);transition:none}
#para-quem .conq-card:hover{transform:none}
#para-quem .conq-card::after{
  content:"";position:absolute;inset:0;z-index:-1;border-radius:24px;
  -webkit-mask:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96'%3E%3Cpath d='M0,0 H18 A18,18 0 0 1 36,18 V38 A22,22 0 0 0 58,60 H78 A18,18 0 0 1 96,78 V96 H0 Z' fill='%23000'/%3E%3C/svg%3E") top right/96px 96px no-repeat,
    linear-gradient(#000,#000) top left/calc(100% - 96px) 96px no-repeat,
    linear-gradient(#000,#000) bottom left/100% calc(100% - 96px) no-repeat;
  mask:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='96' height='96'%3E%3Cpath d='M0,0 H18 A18,18 0 0 1 36,18 V38 A22,22 0 0 0 58,60 H78 A18,18 0 0 1 96,78 V96 H0 Z' fill='%23000'/%3E%3C/svg%3E") top right/96px 96px no-repeat,
    linear-gradient(#000,#000) top left/calc(100% - 96px) 96px no-repeat,
    linear-gradient(#000,#000) bottom left/100% calc(100% - 96px) no-repeat;
  background:radial-gradient(85% 72% at 50% 118%,
    rgba(214,154,60,0.30), rgba(214,154,60,0.10) 55%, transparent 78%);
  opacity:0;transition:opacity .5s ease;pointer-events:none;
}
#para-quem .conq-card:hover::after{opacity:1}
#para-quem .trust-ic{transition:border-color .5s,box-shadow .5s}
#para-quem .conq-card:hover .trust-ic{
  border-color:rgba(236,196,95,0.85);
  box-shadow:0 0 20px rgba(214,154,60,0.35);
}

/* ---------- SUAVIDADE GLOBAL (auditoria pedida pelo dono) ----------
   As perguntas do FAQ em CAIXA ALTA display eram o último bloco de leitura
   corrida gritado — mesma decisão dos cards: sentence case, 600. Entrelinhas
   dos blocos de leitura sobem para ~1.7. */
.acc-q{text-transform:none;font-weight:600;font-size:16.5px;letter-spacing:.005em;line-height:1.4}
.acc-inner p{line-height:1.72}
.acesso-steps .step span{line-height:1.68}
#para-quem .trust-card p{color:var(--ink-body)}


/* ==========================================================================
   Camada · COPYS 19/08 (rodada de texto do dono) — suportes visuais
   ========================================================================== */

/* ---------- HERO: assinatura da marca acima da headline ----------
   O PDF oficial (Downloads/"Logo - Juliana Romanato - Paleta.pdf") define o
   nome como ASSINATURA em script (fonte Twilight Darling, comercial, sem
   webfont aqui) sobre paleta navy #1e2e53 / terracota #ba4820.
   Aqui: Allura (Google Fonts), a mais próxima em monolinha e largura.
   ⚠️ A cor é o DOURADO da página, não a terracota da marca — o ouro é a
   linguagem de toda a V3 e a terracota entraria como cor única e órfã.
   Se o dono quiser fidelidade estrita, trocar o gradiente por #ba4820. */
.hero-marca{
  display:flex;flex-direction:column;gap:1px;
  margin:0 0 clamp(8px,1.4vh,16px);
}
.hm-produto{
  font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--hl-ink-3,#8a7b66);
}
.hm-por{
  display:flex;align-items:baseline;gap:9px;
  font-size:12.5px;color:var(--hl-ink-3,#8a7b66);
}
.hm-nome{
  font-family:'Allura',cursive;font-style:normal;font-weight:400;
  font-size:clamp(30px,min(2.9vw,4.4vh),44px);line-height:.9;
  background-image:linear-gradient(120deg,#8a5a14,#c98a28 55%,#a86a18);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
@media (max-height:760px){ .hero-marca{margin-bottom:6px} }

/* ---------- HERO: fotos reais nos avatares empilhados ---------- */
.htf{overflow:hidden;padding:0}
.htf img{width:100%;height:100%;object-fit:cover;display:block;border-radius:50%}

/* ---------- DEPOIMENTOS: fotos reais nos avatares ---------- */
.tq-av img{width:100%;height:100%;object-fit:cover;display:block}

/* ---------- RODAPÉ enxuto (reescrito pelo dono em 19/08) ----------
   ⚠️ O disclaimer médico ("a IA é apoio e não substitui o julgamento do
   médico") saiu junto com o texto antigo, por ordem explícita. Está na
   lista de revisão jurídica — se voltar, é dentro do .footer-final. */
.site-footer{padding:clamp(38px,5vw,56px) 0 clamp(30px,4vw,42px)}
.footer-final{
  display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center;
}
.footer-final .footer-links{
  flex-direction:row;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center;
}
.footer-final .footer-links a{font-size:14px}
.fl-sep{color:var(--ink-faint)}
.footer-copy{
  margin:0;max-width:74ch;
  font-size:12.5px;line-height:1.7;color:var(--ink-dim);
}

/* ---------- HERO: compensação de altura após as linhas de marca ----------
   Medido: o bloco .hero-marca empurrou o cartão para 973px numa viewport de
   950. O hero é a única seção que PRECISA fechar em uma tela, então o
   excedente sai do próprio bloco novo e de ~3px do título. */
.hero-marca{margin-bottom:clamp(2px,0.6vh,8px)}
.hm-nome{font-size:clamp(26px,min(2.5vw,3.7vh),37px)}
.hm-produto{font-size:10.5px}
.hero-card .hero-title{font-size:clamp(26px,min(4.7vw,6.6vh),57px)}
.hero-card .hero-lede{margin-bottom:clamp(12px,1.8vh,20px)}
/* telas BAIXAS: o hero tem de fechar em uma tela mesmo com as linhas de marca.
   ⚠️ O .hero-micro repete PALAVRA POR PALAVRA o chip do topo ("O novo padrão
   de prática médica com IA"); em altura curta ele é o primeiro a sair. */
@media (max-height:760px){
  .hero-marca{margin-bottom:2px;gap:0}
  .hm-nome{font-size:clamp(22px,3.4vh,30px)}
  .hero-card .hero-micro{display:none}
  .hero-card .hero-lede{margin-bottom:clamp(10px,1.4vh,16px)}
  .hero-time{margin-top:clamp(8px,1.4vh,14px)}
}
/* ⚠️ Em telas MUITO baixas (1366x640 é laptop comum) o reserve inferior do
   cartão de vidro está calibrado no limite (7px de folga medidos), então o
   corte precisa sair do CONTEÚDO, nunca do padding-bottom. */
@media (max-height:700px){
  .hero-card .hero-title{font-size:clamp(24px,min(4.4vw,5.6vh),46px)}
  .hero-card .eyebrow-pill{margin-bottom:6px}
  .hm-nome{font-size:clamp(20px,3vh,27px)}
  .hero-card .hero-lede{font-size:14.5px;margin-bottom:8px}
}


/* ==========================================================================
   Camada · RODADA 3 (19/08 noite) — VSL, CFM, módulos e refino da oferta
   ========================================================================== */

/* ---------- VSL: o vídeo é VERTICAL (1440x2560 na origem) ----------
   O player nasceu 16:9; um 9:16 dentro dele viraria duas tarjas pretas.
   Agora o frame acompanha o vídeo: retrato, com teto de altura para não
   virar uma torre no desktop. */
.vsl-wrap{display:flex;flex-direction:column;align-items:center}
.vsl-frame{
  width:auto;
  max-width:min(400px,88vw);
  margin-inline:auto;
}
.vsl-player{
  aspect-ratio:9/16;
  max-height:min(78vh,700px);
  background:#0b0704;
}
.vsl-video{
  width:100%;height:100%;display:block;
  object-fit:cover;border-radius:inherit;
}
@media (max-width:760px){
  .vsl-frame{max-width:min(340px,80vw)}
  .vsl-player{max-height:70vh}
}

/* ---------- CFM: recortes descolados ----------
   ⚠️ PREMISSA FALSA, corrigida em 23/08: filter é aplicado ANTES de
   clip-path no MESMO elemento (ordem da spec), então este drop-shadow
   também era recortado — provado por sombra-teste vermelha (zero pixels
   pintados). A sombra que funciona vive na camada REFINO #metodo + #quem
   no fim do arquivo: rasgo no img, drop-shadow no figure. O box-shadow:none
   abaixo segue útil (mata o box-shadow da regra base 3452). */
.nz{
  box-shadow:none;
  filter:drop-shadow(0 8px 10px rgba(20,10,2,.42));
}

/* ---------- MÓDULOS: contagem por COLUNA (00-05 à esquerda, 06-11 à direita)
   Ordem pedida pelo dono: "seguir toda a primeira fileira e continuar na
   segunda". Antes era ímpar/par (00,02,04… à esquerda), o que fazia a
   leitura pular de dois em dois. ---------- */
@media (min-width:1100px){
  .mods-duo{grid-template-rows:repeat(6,minmax(0,1fr))}
  /* os 6 primeiros à ESQUERDA, por baixo do notebook */
  .mods-duo .v4-mod:nth-of-type(-n+6){
    grid-column:1;z-index:1;
    margin-right:calc(-1 * clamp(72px,6.6vw,104px));
    padding-right:clamp(80px,7vw,116px);
    margin-left:0;
  }
  /* os 6 últimos à DIREITA, por cima */
  .mods-duo .v4-mod:nth-of-type(n+7){
    grid-column:3;z-index:3;
    margin-left:calc(-1 * clamp(72px,6.6vw,104px));
    margin-right:0;padding-right:16px;
    box-shadow:0 2px 4px rgba(60,40,10,0.06),0 18px 38px -16px rgba(60,40,10,0.35);
  }
  /* linhas explícitas: item i e item i+6 dividem a mesma linha */
  .mods-duo .v4-mod:nth-of-type(1),.mods-duo .v4-mod:nth-of-type(7){grid-row:1}
  .mods-duo .v4-mod:nth-of-type(2),.mods-duo .v4-mod:nth-of-type(8){grid-row:2}
  .mods-duo .v4-mod:nth-of-type(3),.mods-duo .v4-mod:nth-of-type(9){grid-row:3}
  .mods-duo .v4-mod:nth-of-type(4),.mods-duo .v4-mod:nth-of-type(10){grid-row:4}
  .mods-duo .v4-mod:nth-of-type(5),.mods-duo .v4-mod:nth-of-type(11){grid-row:5}
  .mods-duo .v4-mod:nth-of-type(6),.mods-duo .v4-mod:nth-of-type(12){grid-row:6}
}

/* ---------- MÓDULOS: polimento das pílulas ----------
   Problema apontado: alinhamento e respiro irregulares — títulos de 1 e de 2
   linhas faziam caixas de alturas diferentes. Agora: linhas 1fr (as 12 caixas
   com a MESMA altura), tipo menor e conteúdo centrado no eixo vertical. */
.mods-duo .v4-mod{
  padding:12px 18px 12px 13px;
  column-gap:12px;row-gap:1px;
  align-content:center;
}
.mods-duo .v4-mod .ic{width:34px;height:34px;padding:8px;border-radius:11px}
.mods-duo .v4-mod span{font-size:9px;letter-spacing:.16em}
.mods-duo .v4-mod b{
  font-size:13px;line-height:1.24;letter-spacing:.01em;font-weight:600;
  text-transform:none;
}

/* ---------- OFERTA: refino do cartão de preço ----------
   O dono pediu MENOS informação, com base nas referências. Saiu a linha
   "12x de" solta e a prova social repetida; o preço ganhou o palco. */
.px-de{font-size:11.5px;letter-spacing:.16em}
.px-hero{margin-top:8px}
.px-val{font-size:clamp(58px,6.6vw,92px)}
.px-pix{margin-top:10px;font-size:15.5px}
.px-chips{margin-top:20px}
.preco-card .btn{margin-top:22px}
.px-safe{margin-top:12px;font-size:12px}

/* ---------- OFERTA: lista de UMA LINHA por item ---------- */
.rcb-list li{
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  padding:15px 0;border-top:1px solid var(--line-15);
}
.rcb-list li:first-child{border-top:0;padding-top:4px}
.rcb-list b{font-size:15px;font-weight:600;color:var(--ink-title);line-height:1.35}
.rcb-bonus i{
  order:-1;flex:none;margin:0;
  font-style:normal;font-family:var(--font-mono);font-size:9px;
  letter-spacing:.14em;text-transform:uppercase;color:#1d1206;
  background:linear-gradient(135deg,#ecc45f,#d99a3a);
  border-radius:999px;padding:3px 9px;
}
.recebe-card{display:flex;flex-direction:column;justify-content:center}

/* ==========================================================================
   Camada · AUDITORIA 1 (UI/visual) — 19/08 noite, /loop
   ========================================================================== */
/* 1 · raio fora de escala (a régua do projeto é 4/8/12/16/24/32 e NÃO usa
   clamp+vw em canto). Os dois desvios eram código MEU desta sessão. */
.mods-duo .v4-mod .ic{border-radius:12px}
.vsl-frame{border-radius:26px}
.vsl-player,.vsl-video{border-radius:24px}

/* 2 · entrelinha dos blocos de leitura unificada em ~1.7
   (o subtítulo de seção estava em 1.6, sozinho fora do padrão) */
.section-subtitle{line-height:1.7}

/* 3 · lista da oferta: o ✓ passa a ser o PRIMEIRO item de todas as linhas.
   Nas linhas de bônus ele vinha DEPOIS da etiqueta, quebrando a margem
   esquerda óptica da lista. */
.rcb-list b::before{content:none}
.rcb-list li::before{
  content:"✓";flex:none;color:var(--gold-mid);font-weight:400;font-size:14px;
}
.rcb-bonus i{order:0}
/* 4 · ÚNICA falha de contraste AA da página (medida): o rótulo "MÓDULO NN"
   nos cards brancos estava em 3.17:1. #7c6a54 leva a ~5.0:1. */
.mods-duo .v4-mod span{color:#7c6a54}

/* ==========================================================================
   Camada · AUDITORIA 2 (UX/técnica) — 19/08 noite, /loop
   ========================================================================== */
/* 5 · ALVOS DE TOQUE: 44x44 é o mínimo da HIG da Apple e do WCAG 2.5.5.
   Medidos no celular: .hs-btn tinha 42px de altura e as setas do leque 40px. */
@media (max-width:900px){
  .fan-nav{width:44px;height:44px}
  .hs-btn{min-height:44px}
}
/* 6 · piso de 11px para os rótulos mono no celular (estavam em 10.5px;
   a referência de legibilidade da Apple para caption é ~11pt) */
@media (max-width:760px){
  .eyebrow-pill span:not(.dot),.hm-produto,.hs-lbl,.px-prova,.fan-badge{font-size:11px}
}
/* 7 · micro-rótulos do CONTEÚDO (não os decorativos dentro de cards) sobem
   para 10.5px no celular — "MÓDULO NN" estava em 9px, e são 12 deles na
   área principal. Os rótulos do coverflow ficam como estão: são adorno
   dentro de um card visto de relance. */
@media (max-width:760px){
  .mods-duo .v4-mod span{font-size:10.5px}
  .rcb-bonus i{font-size:10px}
  .vbar-tip{font-size:10px}
}

/* 8 · VSL vertical no DESKTOP: um 9:16 de 394px sozinho num viewport de
   1600 ficava perdido no escuro. O vídeo cresce e as notas sobem para o
   lado dele, fechando a composição (no celular tudo volta a empilhar). */
/* Duas colunas foi TESTADO e descartado: o grupo vídeo+notas centrava como
   bloco, deixando o vídeo à esquerda do eixo do título centralizado — lia
   como desalinhamento. Eixo ÚNICO, que é a escolha limpa: título, vídeo e
   notas no mesmo centro; o vídeo só cresce. */
@media (min-width:1080px){
  .vsl-frame{max-width:min(460px,34vw)}
  .vsl-notes{justify-content:center;gap:34px;margin-top:30px}
}


/* ==========================================================================
   Camada · TRIO DA OFERTA (19/08, diagrama do dono) — /loop
   Três colunas com o VALOR ELEVADO no centro: as laterais recuam no eixo
   vertical (margin-block), então o cartão do preço "sobe" e "desce" além
   delas, exatamente como o retângulo amarelo do diagrama.
   A faixa de garantia e o trio de passos foram CONSOLIDADOS na coluna da
   direita — não existem mais soltos abaixo (.garantia-card / .acesso-steps
   ficaram órfãos no CSS, inofensivos).
   ========================================================================== */
.oferta-trio{display:grid;grid-template-columns:1fr;gap:16px;margin-top:8px}

/* ---------- colunas laterais ---------- */
.of-lado{
  border-radius:var(--r-panel);
  background:linear-gradient(180deg,#1d130b,#170e08);
  border:1px solid rgba(236,196,95,0.10);
  box-shadow:inset 0 1px 0 rgba(255,255,255,0.04);
  padding:clamp(24px,2.6vw,34px) clamp(20px,2.4vw,30px);
  display:flex;flex-direction:column;
}
.of-head{
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--label-gold);
  margin-bottom:16px;
}

/* ---------- direita: garantia + informações ---------- */
.of-gar{display:flex;align-items:flex-start;gap:14px;padding-bottom:20px}
.of-selo{
  flex:none;width:54px;height:54px;border-radius:50%;
  display:grid;place-items:center;line-height:1;
  border:1px solid rgba(236,196,95,0.42);
  background:radial-gradient(closest-side,rgba(214,154,60,0.18),transparent);
  color:var(--gold-honey);
}
.of-selo b{font-family:var(--font-display);font-weight:800;font-size:20px}
.of-selo i{font-family:var(--font-mono);font-style:normal;font-size:7.5px;letter-spacing:.16em}
.of-gar-txt b{display:block;font-size:15px;font-weight:600;color:var(--ink-title);line-height:1.35;margin-bottom:5px}
.of-gar-txt p{margin:0;font-size:13.5px;line-height:1.7;color:var(--ink-body)}
.of-info{padding:18px 0 0;border-top:1px solid var(--line-15);margin-top:auto}
.of-info + .of-info{margin-top:0}
.of-info b{display:block;font-size:14.5px;font-weight:600;color:var(--ink-title);margin-bottom:4px}
.of-info p{margin:0;font-size:13.5px;line-height:1.7;color:var(--ink-body)}

/* ---------- desktop: o trio com o centro elevado ---------- */
@media (min-width:1080px){
  .oferta-trio{
    grid-template-columns:1fr 1.06fr 1fr;
    gap:clamp(14px,1.4vw,22px);
    align-items:stretch;
  }
  /* AS LATERAIS RECUAM — é isto que faz o centro parecer elevado */
  .of-lado{margin-block:clamp(26px,3vw,52px)}
  .preco-card{margin-block:0;z-index:2}
  /* o centro ganha presença: borda e brilho mais fortes que as laterais */
  .preco-card{
    border-color:rgba(236,196,95,0.24);
    box-shadow:0 40px 100px -46px rgba(0,0,0,0.9),
               0 0 0 1px rgba(236,196,95,0.06),
               inset 0 1px 0 rgba(255,255,255,0.06);
  }
}
/* a lista do "incluso" respira dentro da coluna */
.of-lado--esq .rcb-list{margin-top:auto;margin-bottom:auto}

/* ---------- celular: uma coluna, ordem do DOM ---------- */
@media (max-width:1079px){
  .of-lado{margin-block:0}
}
/* ⚠️ A camada do layout ANTIGO (2 colunas) tem `.preco-card{grid-column:1}`
   sem escopo — ela jogava o preço para a esquerda do trio. Posição explícita
   aqui, e o container da oferta abre para 1280 (1120 espremia as 3 colunas
   e quebrava "R$ 69,90" em duas linhas). */
@media (min-width:1080px){
  .oferta-section .container--1120{max-width:1280px}
  .oferta-trio{grid-template-columns:1fr 1.25fr 1fr}
  .oferta-trio .of-lado--esq{grid-column:1;grid-row:1}
  .oferta-trio .preco-card{grid-column:2;grid-row:1}
  .oferta-trio .of-lado--dir{grid-column:3;grid-row:1}
  .px-val{font-size:clamp(48px,4.8vw,78px)}
}
/* refino do trio: o ✓ estava quebrando para uma linha só dele (flex-wrap
   com a etiqueta de bônus estourando a coluna). Vira GRADE: ✓ na coluna 1,
   conteúdo na 2 — a etiqueta do bônus fica ACIMA do nome, sem empurrar. */
.rcb-list li{
  display:grid;grid-template-columns:auto minmax(0,1fr);
  column-gap:11px;row-gap:5px;align-items:baseline;flex-wrap:nowrap;
}
.rcb-list li::before{grid-column:1;grid-row:1}
.rcb-list b{grid-column:2}
.rcb-bonus i{grid-column:2;grid-row:1;justify-self:start;order:0}
.rcb-bonus b{grid-row:2}
/* CTA do trio numa linha só (a coluna central comporta em 14px) */
.oferta-trio .btn{font-size:14px;letter-spacing:.04em}

/* ==========================================================================
   Camada · MÓDULOS VOLTAM AO PAINEL TRADICIONAL (19/08, decisão do dono)
   A "abertura do site" (creme de borda a borda + tampas escuras arredondadas
   nas emendas) foi DESCARTADA. Duas razões, além do gosto dele:
   1. CONSISTÊNCIA — as outras duas seções claras (.depo-box e .quem-box) são
      painéis arredondados recuados da borda; os módulos eram a única voz
      diferente entre as três.
   2. MANUTENÇÃO — as tampas eram `::before/::after` de cor CHAPADA que
      precisavam ser recasadas à mão a cada mudança do fundo-jornada (um
      pseudo-elemento não acompanha um gradiente do documento). No painel,
      o escuro em volta É a página: acoplamento zero.
   Some com a animação de abertura por cena junto — não há mais o que abrir.
   ========================================================================== */
.mods-light{
  background:none;
  padding-block:calc(var(--space-section) / 2);
  border-radius:0;
}
.mods-light::before,.mods-light::after{display:none}
.mods-light .container{max-width:none;padding:0 var(--card-pad)}
/* o painel: mesma anatomia do .depo-box */
.mods-panel{
  background:linear-gradient(180deg,#faf6ee,#f2ece0);
  border:1px solid rgba(101,71,22,0.10);
  border-radius:var(--r-panel);
  box-shadow:0 40px 100px -50px rgba(0,0,0,0.9),inset 0 1px 0 rgba(255,255,255,0.6);
  padding:clamp(38px,4.6vw,68px) clamp(20px,3vw,48px) clamp(42px,5vw,76px);
}
/* o conteúdo continua com a medida de leitura, centrado dentro do painel */
.mods-panel > *{max-width:1380px;margin-inline:auto}


/* ==========================================================================
   Camada · OFERTA v4 (19/08, 2ª referência do dono para o trio)
   A mudança de conceito: **só o CENTRO é caixa**. As laterais perdem fundo,
   borda e sombra e passam a viver direto sobre a página escura, separadas
   por filetes. Isso empurra toda a atenção para o preço — que ganha borda
   dourada e brilho — e é o que a referência mostra.
   ========================================================================== */

/* ---------- laterais: sem cartão ---------- */
.of-lado{
  background:none;border:0;box-shadow:none;padding:0;
  align-self:center;
}
.of-head{
  font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--label-gold);
  margin:0 0 22px;
}
/* o filete curto acima do rótulo, como na referência */
.of-head::before{
  content:"";display:block;width:30px;height:1px;margin-bottom:14px;
  background:linear-gradient(90deg,var(--gold-mid),transparent);
}

/* ---------- esquerda: incluso + bônus ---------- */
.of-inc,.of-bon{list-style:none;margin:0;padding:0}
.of-inc li{
  display:grid;grid-template-columns:auto minmax(0,1fr);
  column-gap:14px;align-items:start;
  padding:11px 0;
  font-size:15px;line-height:1.45;color:var(--ink-title);
}
.of-inc li::before{
  content:"✓";color:var(--gold-mid);font-weight:400;font-size:14px;line-height:1.45;
}
/* filete separando o que é incluso do que é bônus */
.of-bon{border-top:1px solid var(--line-15);margin-top:16px;padding-top:20px}
.of-bon li{padding:11px 0}
.of-bon i{
  display:inline-block;margin-bottom:8px;
  font-style:normal;font-family:var(--font-mono);font-size:9.5px;
  letter-spacing:.16em;text-transform:uppercase;
  color:var(--gold-honey);
  border:1px solid rgba(236,196,95,0.42);
  border-radius:999px;padding:4px 11px;
  background:none;
}
.of-bon b{
  display:block;font-size:15px;font-weight:600;line-height:1.45;
  color:var(--ink-title);
}

/* ---------- direita: garantia e acesso, com ícones contornados ---------- */
.of-item{
  display:grid;grid-template-columns:auto minmax(0,1fr);
  column-gap:16px;align-items:start;
  padding:20px 0;border-top:1px solid var(--line-15);
}
.of-item:first-of-type{border-top:0;padding-top:0}
.of-ic{
  position:relative;flex:none;
  width:46px;height:46px;border-radius:50%;
  display:grid;place-items:center;
  border:1px solid rgba(236,196,95,0.34);
  color:var(--gold-honey);
}
.of-ic .ic{width:19px;height:19px}
/* o selo de 7 dias: escudo contornado com o texto dentro */
.of-ic--escudo{border:0;width:50px;height:54px}
.of-ic--escudo .ic{
  position:absolute;inset:0;width:100%;height:100%;
  color:rgba(236,196,95,0.55);
}
.of-ic--escudo em{
  position:absolute;inset:0;
  display:grid;place-items:center;align-content:center;gap:1px;
  font-style:normal;line-height:1;
}
.of-ic--escudo b{font-family:var(--font-display);font-weight:800;font-size:17px;color:var(--gold-honey)}
.of-ic--escudo i{font-family:var(--font-mono);font-style:normal;font-size:7px;letter-spacing:.14em;color:var(--ink-mut)}
.of-txt b{
  display:block;font-size:15px;font-weight:600;line-height:1.4;
  color:var(--ink-title);margin-bottom:6px;
}
.of-txt p{margin:0;font-size:13.5px;line-height:1.68;color:var(--ink-body)}

/* ---------- centro: a única caixa, agora luminosa ---------- */
.oferta-trio .preco-card{
  border:1px solid rgba(236,196,95,0.30);
  background:
    radial-gradient(120% 80% at 50% 0,rgba(214,154,60,0.10),transparent 60%),
    linear-gradient(180deg,#241809,#160e07);
  box-shadow:
    0 0 60px -12px rgba(214,154,60,0.20),
    0 44px 110px -50px rgba(0,0,0,0.95),
    inset 0 1px 0 rgba(255,255,255,0.07);
}

/* ---------- desktop: as laterais não recuam mais por margem ----------
   Sem cartão não há o que recuar; o centro se destaca por ser a única
   caixa. `align-self:center` mantém as colunas equilibradas. */
@media (min-width:1080px){
  .of-lado{margin-block:0}
  .oferta-trio{grid-template-columns:1fr 1.18fr 1fr;gap:clamp(28px,3.2vw,58px);align-items:center}
  .oferta-trio .preco-card{padding:clamp(34px,3.4vw,52px) clamp(26px,2.8vw,40px)}
}

/* ---------- celular ---------- */
@media (max-width:1079px){
  .of-lado{margin-block:0}
  .oferta-trio{gap:34px}
}
/* refino v4: na referência os DOIS rótulos de coluna ficam na mesma altura e
   o cartão do preço é que se centra. Com align-items:center as colunas
   ficavam desencontradas (alturas de conteúdo diferentes). */
@media (min-width:1080px){
  .oferta-trio{align-items:start}
  .oferta-trio .preco-card{align-self:center}
  .of-lado{padding-top:30px}
}
/* o selo: "7" maior, como na referência */
.of-ic--escudo{width:54px;height:58px}
.of-ic--escudo b{font-size:20px}
.of-ic--escudo i{font-size:7.5px}
/* ⚠️ `.of-lado{align-self:center}` da camada base vencia o `align-items:start`
   do grid — as duas colunas ficavam desencontradas por terem alturas de
   conteúdo diferentes. O align-self precisa ser sobrescrito aqui. */
@media (min-width:1080px){ .of-lado{align-self:start} }


/* ==========================================================================
   Camada · CARTÃO DE PREÇO v5 — pesquisa de UX/CRO aplicada (19/08)
   O que a pesquisa mudou aqui, ponto a ponto:
   · NN/g "minimize cognitive load" + estudo de whitespace: menos elementos,
     mais ar, uma informação por linha.
   · Baymard (selos de confiança): marcas de PAGAMENTO estão entre os sinais
     que os usuários mais reconhecem — chips de TEXTO ("CARTÃO EM ATÉ 12X")
     não carregam esse reconhecimento. Viraram marcas de verdade.
   · Baymard (excesso de selos): 6+ selos DIFERENTES derrubam a confiança.
     Por isso são 2 linhas de confiança, não uma parede de selos.
   · CRO (garantia junto ao CTA): a garantia detalhada continua na coluna da
     direita, mas uma linha curta agora vive ABAIXO do botão — o momento de
     maior ansiedade é o clique.
   · Transparência de preço: o total à vista ganhou corpo, não é mais nota
     de rodapé.
   ========================================================================== */

/* ---------- a âncora, agora legível ----------
   Antes era mono 11.5px caixa-alta com tracking .16em e o riscado quase
   invisível — a âncora é o 2º número mais importante do cartão. */
.px-anchor{
  margin:0;font-size:14px;line-height:1.4;color:var(--ink-mut);
  letter-spacing:0;text-transform:none;font-family:var(--font-body);
}
.px-anchor s{
  color:var(--ink-lede);text-decoration-thickness:1.5px;
  text-decoration-color:rgba(236,196,95,.7);
  font-variant-numeric:tabular-nums;
}

/* ---------- o preço: o número domina, não o símbolo ----------
   "R$" tinha o mesmo corpo dos dígitos e roubava metade do palco. Agora
   é sobrescrito e menor; "12x" vira prefixo discreto. */
.px-hero{
  margin:6px 0 0;display:flex;align-items:baseline;justify-content:center;
  gap:8px;flex-wrap:nowrap;line-height:.92;
}
.px-par{
  font-family:var(--font-mono);font-size:15px;letter-spacing:.06em;
  color:var(--ink-mut);align-self:center;
}
.px-cur{
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(20px,1.9vw,28px);color:var(--champagne);
  align-self:flex-start;margin-top:.42em;
}
.px-val{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(56px,5.6vw,86px);letter-spacing:-.02em;
  background-image:linear-gradient(100deg,#ecc45f,#f7e3a8 48%,#d99a3a);
  -webkit-background-clip:text;background-clip:text;color:transparent;
  font-variant-numeric:tabular-nums;
}
.px-avista{
  margin:12px 0 0;font-size:16px;color:var(--ink-lede);
}
.px-avista b{color:var(--gold-honey);font-weight:600;font-variant-numeric:tabular-nums}

/* ---------- marcas de pagamento ----------
   Monocromáticas e de mesma altura óptica: leem como "aceitamos", não como
   um mural de logotipos. ⚠️ São desenhos SIMPLIFICADOS feitos aqui, não os
   assets oficiais — trocar pelos da Kiwify antes de publicar. */
.px-pay{
  display:flex;align-items:center;justify-content:center;
  gap:clamp(14px,1.6vw,22px);flex-wrap:wrap;
  margin-top:22px;padding-top:20px;
  border-top:1px solid var(--line-15);
  color:var(--ink-mut);
}
.pm{height:17px;opacity:.92}
.pm--w{width:44px}
.pm--mc{width:32px;height:19px}
.pm--elo{width:30px}
.pm--pix{width:19px;height:19px}
.pm--bol{width:31px}

/* ---------- CTA e as duas linhas de confiança ---------- */
.oferta-trio .preco-card .btn{margin-top:22px}
.px-trust{
  list-style:none;margin:16px 0 0;padding:0;
  display:flex;flex-direction:column;gap:9px;align-items:center;
}
.px-trust li{
  display:flex;align-items:center;gap:9px;
  font-size:12.5px;line-height:1.45;color:var(--ink-mut);text-align:left;
}
.px-trust .ic{width:14px;height:14px;flex:none;color:var(--gold-mid)}
.px-trust b{color:var(--ink-soft);font-weight:600}

@media (max-width:520px){
  .px-hero{gap:6px}
  .px-pay{gap:14px}
  .px-trust li{font-size:12px}
}
/* refino v5.1 (auditoria da própria captura):
   · "12x" estava centrado verticalmente num bloco de 86px e boiava solto —
     agora acompanha o "R$" no alto, lendo como uma unidade só;
   · marcas de pagamento com peso óptico equilibrado (a barra do boleto e o
     losango do Pix pediam mais corpo que os wordmarks);
   · CTA cabe em UMA linha: o texto é longo, então o respiro lateral do botão
     cede — não o corpo da fonte, que é o que dá presença ao botão. */
.px-par{align-self:flex-start;margin-top:.55em;font-size:14px}
.px-hero{gap:7px}
.pm{height:18px}
.pm--pix{width:21px;height:21px}
.pm--bol{width:34px;height:16px}
.pm--mc{width:34px;height:20px}
.oferta-trio .preco-card .btn{padding-inline:18px;gap:8px}

/* ==========================================================================
   Camada · TRIO: DISPOSIÇÃO DE TAMANHOS (19/08, mockup de proporções do dono)
   Proporções medidas no mockup dele: centro ≈1,5x a LARGURA das laterais e
   ≈1,3x a ALTURA, com ~37px de SOBREPOSIÇÃO de cada lado (as laterais
   encaixam POR BAIXO do cartão).
   ⚠️ Grid não aceita gap negativo — a sobreposição vem de `margin-inline`
   negativo no cartão + z-index. As laterais ganham padding interno para o
   texto nunca entrar na zona coberta.
   ========================================================================== */
@media (min-width:1080px){
  .oferta-trio{
    grid-template-columns:1fr 1.5fr 1fr;
    gap:0;
    align-items:center;
  }
  /* o cartão invade as duas laterais e fica por cima */
  .oferta-trio .preco-card{
    grid-column:2;grid-row:1;
    z-index:3;align-self:center;
    margin-inline:calc(-1 * clamp(24px,2.4vw,38px));
    /* mais ar no eixo vertical: é o que o torna ~1,3x mais alto que as laterais */
    padding-block:clamp(48px,4.6vw,72px);
  }
  /* as laterais recuam para trás e reservam a zona coberta */
  .of-lado{z-index:1;align-self:center}
  .of-lado--esq{grid-column:1;padding-right:clamp(46px,4.4vw,68px)}
  .of-lado--dir{grid-column:3;padding-left:clamp(46px,4.4vw,68px)}
}
/* calibragem contra as proporções medidas do mockup:
   1) largura estava 1:1.72 (alvo 1:1.54) → trilha central de 1.5fr para 1.35fr;
   2) ALTURA estava 1:0.97 — o centro era MAIS BAIXO que a coluna da direita,
      o oposto do mockup. A direita encolhe (texto mais justo, sem perder
      palavra) e o centro ganha ar vertical, até o centro passar das duas. */
@media (min-width:1080px){
  .oferta-trio{grid-template-columns:1fr 1.35fr 1fr}
  .oferta-trio .preco-card{padding-block:clamp(54px,5.2vw,84px)}
  .of-item{padding:17px 0}
  .of-txt p{font-size:12.5px;line-height:1.6}
  .of-txt b{font-size:14.5px;margin-bottom:5px}
  .of-inc li{padding:10px 0}
  .of-bon li{padding:10px 0}
}
/* o centro passava só 24px das laterais — visível, mas tímido para o efeito
   de "elevado" do mockup. Com 104px de respiro vertical ele passa ~44px de
   cada lado. ⚠️ Não perseguir o 1.32 exato do mockup: ele foi medido numa
   colagem com a coluna direita mais curta, e forçar a razão aqui deixaria
   o cartão VAZIO. O critério é visual: o centro tem de dominar sem ocar. */
@media (min-width:1080px){
  .oferta-trio .preco-card{padding-block:clamp(64px,6vw,104px)}
}

/* ==========================================================================
   Camada · TOPO DOS BÔNUS REESCRITO (19/08, ordem do dono)
   O que estava bagunçado: "bônus" aparecia 3x em 4 linhas (ponte + chip +
   H2), e entre o título e o mockup não havia copy NENHUMA — só um preço
   gigante "por R$ 0,00", que soa barato para um público médico.
   Agora: H2 de seção → lede curta → bloco do bônus principal com título,
   argumento e o valor como NOTA discreta, não como manchete.
   A seção-ponte foi removida (o H2 novo faz o trabalho dela).
   ========================================================================== */
.bonus-lede{
  max-width:60ch;margin:0 auto;text-align:center;
  font-size:16px;line-height:1.7;color:var(--ink-lede);
}
.kit-head{
  max-width:74ch;margin:clamp(38px,4.4vw,64px) auto 0;text-align:center;
}
.kit-kicker{
  display:inline-block;
  font-family:var(--font-mono);font-size:10px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--gold-honey);
  border:1px solid rgba(236,196,95,0.34);border-radius:999px;
  padding:5px 13px;
}
.kit-h3{
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(24px,2.8vw,36px);line-height:1.12;letter-spacing:.01em;
  color:var(--ink-title);margin:16px 0 0;text-wrap:balance;
}
.kit-lede{
  margin:14px auto 0;max-width:66ch;
  font-size:15.5px;line-height:1.75;color:var(--ink-body);
}
.kit-lede strong{color:var(--ink-soft);font-weight:600}
/* o valor vira NOTA, não manchete: era "por R$ 0,00" em corpo gigante */
.kit-valor{
  display:inline-flex;align-items:baseline;gap:8px;flex-wrap:wrap;
  justify-content:center;
  margin:20px 0 0;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-mut);
}
.kit-valor b{color:var(--gold-honey);font-weight:500;font-variant-numeric:tabular-nums}
.kit-valor span{
  color:var(--label-gold);
  border-left:1px solid var(--line-25);padding-left:10px;
}
@media (max-width:760px){
  .bonus-lede{font-size:15px}
  .kit-lede{font-size:14.5px}
  .kit-valor{font-size:10px;letter-spacing:.1em}
}

/* ==========================================================================
   Camada · TOPO DOS BÔNUS v2 — duas violações de leitura corrigidas (19/08)
   O dono reprovou ("a Apple nunca faria isso") e a pesquisa deu a razão:
   1. EYEBROW ANINHADO. Eyebrow existe acima do título de um CONTEÚDO, não
      acima de subtítulos dentro dele. Eu tinha chip → h2 → texto → chip →
      h3 → texto: lê como template, não como composição. O 2º chip morreu.
   2. CORPO DE TEXTO CENTRALIZADO. Centralizar cria margem esquerda irregular
      e quebra o "return sweep" do olho — 60% das pessoas leem mais rápido
      alinhado à esquerda. Eram 5 linhas centradas. Agora é banda editorial:
      título à esquerda, argumento à direita e ALINHADO À ESQUERDA.
   Sobra UM chip, UM h2 e UMA lede curta centrada (frase curta centrada é
   legítima; parágrafo não é).
   ========================================================================== */
.kit-banda{
  max-width:1040px;margin:clamp(40px,4.6vw,68px) auto 0;
  display:grid;grid-template-columns:1fr;gap:20px;
  text-align:left;
  padding-top:clamp(28px,3vw,40px);
  border-top:1px solid var(--line-15);
}
@media (min-width:900px){
  .kit-banda{grid-template-columns:minmax(0,0.85fr) minmax(0,1.15fr);gap:clamp(36px,4vw,72px);align-items:start}
}
.kit-h3{
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(24px,2.6vw,34px);line-height:1.1;letter-spacing:.01em;
  color:var(--ink-title);margin:0;text-wrap:balance;
}
.kit-valor{
  display:flex;align-items:baseline;gap:9px;flex-wrap:wrap;
  margin:14px 0 0;
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--ink-mut);
}
.kit-valor b{color:var(--gold-honey);font-weight:500;font-variant-numeric:tabular-nums}
.kit-valor span{color:var(--label-gold);border-left:1px solid var(--line-25);padding-left:10px}
.kit-lede{
  margin:0;max-width:62ch;
  font-size:15.5px;line-height:1.75;color:var(--ink-body);
}
.kit-lede strong{color:var(--ink-soft);font-weight:600}
.bonus-lede{
  max-width:56ch;margin:0 auto;text-align:center;
  font-size:16px;line-height:1.7;color:var(--ink-lede);
}
.bonus-lede strong{color:var(--ink-soft);font-weight:600}
@media (max-width:760px){
  .bonus-lede{font-size:15px}
  .kit-lede{font-size:14.5px}
}


/* ==========================================================================
   Camada · SEÇÃO DA JULIANA v2 — 3 colunas + bento (19/08, referência do dono)
   Sai a colagem em leque flutuante; entra a diagramação editorial da
   referência: retrato com credencial SOBREPOSTA à esquerda, a carta ao
   centro e um BENTO de fotos à direita com a citação ocupando uma célula.
   Embaixo, a faixa dos quatro papéis. O painel continua cheio ("todo
   preenchido"), sem vão morto.
   ⚠️ O CSS antigo (.quem-foto/.quem-lado/.quem-collage/.qc) ficou órfão.
   ========================================================================== */
.quem-grid{display:grid;grid-template-columns:1fr;gap:clamp(28px,3vw,44px)}
@media (min-width:1100px){
  .quem-grid{
    grid-template-columns:minmax(0,0.82fr) minmax(0,1.15fr) minmax(0,1.05fr);
    gap:clamp(28px,2.8vw,48px);
    align-items:start;
  }
}

/* ---------- 1 · retrato + credencial sobreposta ---------- */
.qm-retrato{position:relative;border-radius:var(--r-xl,20px)}
.qm-retrato img{
  width:100%;height:100%;object-fit:cover;display:block;
  border-radius:18px;
  border:1px solid rgba(138,90,20,.35);
  box-shadow:0 30px 60px -34px rgba(60,40,10,.5);
}
@media (min-width:1100px){
  .qm-retrato{height:100%;min-height:520px}
}
.qm-cred{
  position:relative;margin:-46px 0 0 -8px;
  display:inline-flex;align-items:center;gap:14px;
  background:#fffdf8;border:1px solid rgba(101,71,22,.14);
  border-radius:16px;padding:14px 20px 14px 16px;
  box-shadow:0 18px 40px -22px rgba(60,40,10,.45);
}
@media (min-width:1100px){ .qm-cred{position:absolute;left:-14px;bottom:-22px;margin:0} }
.qm-cred-ic{
  flex:none;width:38px;height:38px;border-radius:50%;
  display:grid;place-items:center;color:#8a5a14;
  border:1px solid rgba(138,90,20,.34);
}
.qm-cred-ic .ic{width:19px;height:19px}
.qm-cred-txt b{display:block;font-size:15px;font-weight:600;color:#241708;line-height:1.25}
.qm-cred-txt i{
  display:block;font-style:normal;font-family:var(--font-mono);
  font-size:9px;letter-spacing:.18em;text-transform:uppercase;color:#8a7b66;margin:2px 0 5px;
}
.qm-cred-txt p{
  margin:0;font-family:var(--font-mono);font-size:10.5px;line-height:1.6;
  color:#57493a;font-variant-numeric:tabular-nums;
}

/* ---------- 2 · a carta ---------- */
.qm-eyebrow{display:flex;align-items:center;gap:12px;margin:0 0 18px}
.qm-eyebrow span{
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.18em;
  text-transform:uppercase;color:#8a5a14;white-space:nowrap;
}
.qm-eyebrow::after{
  content:"";flex:1;height:1px;
  background:linear-gradient(90deg,rgba(138,90,20,.4),transparent);
}
.qm-h2{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(30px,3.4vw,46px);line-height:1.04;letter-spacing:-.01em;
  text-transform:uppercase;color:#241708;margin:0 0 20px;text-wrap:balance;
}
.qm-carta p{
  margin:0 0 14px;font-size:15px;line-height:1.75;color:#57493a;
  max-width:56ch;
}
/* a virada da história, destacada no fluxo (é a mesma frase da citação) */
.qm-virada{
  font-weight:600;color:#8a5a14 !important;font-size:16px !important;
  margin:20px 0 18px !important;line-height:1.45 !important;
}

/* ---------- 3 · bento de fotos com a citação ---------- */
.qm-bento{
  display:grid;grid-template-columns:1fr 1fr;
  gap:clamp(10px,1vw,16px);
  grid-auto-rows:minmax(0,1fr);
}
.qb{margin:0;overflow:hidden;border-radius:14px;background:#efe7d8}
.qb img{width:100%;height:100%;object-fit:cover;display:block}
.qb--a{aspect-ratio:4/3}
.qb--b{aspect-ratio:4/3}
.qb--d{grid-row:span 2;aspect-ratio:auto}
.qb--e{aspect-ratio:4/3}
.qb--f{aspect-ratio:4/3}
.qb-cita{
  margin:0;border-radius:14px;
  background:#fffdf8;border:1px solid rgba(101,71,22,.12);
  padding:clamp(16px,1.6vw,24px);
  display:flex;flex-direction:column;justify-content:center;gap:6px;
}
.qb-aspas{
  font-family:var(--font-display);font-weight:800;font-size:38px;line-height:.6;
  color:#d69a3c;
}
.qb-cita p{
  margin:0;font-family:var(--font-display);font-weight:600;
  font-size:clamp(15px,1.35vw,20px);line-height:1.28;color:#241708;
}
.qb-cita em{font-style:italic;color:#8a5a14}

/* ---------- 4 · a faixa dos quatro papéis ---------- */
.qm-papeis{
  list-style:none;margin:clamp(30px,3.4vw,48px) 0 0;padding:clamp(20px,2.2vw,28px) 0 0;
  border-top:1px solid rgba(101,71,22,.14);
  display:grid;grid-template-columns:1fr;gap:clamp(16px,2vw,26px);
}
@media (min-width:700px){ .qm-papeis{grid-template-columns:repeat(2,1fr)} }
@media (min-width:1100px){ .qm-papeis{grid-template-columns:repeat(4,1fr)} }
.qm-papeis li{display:grid;grid-template-columns:auto minmax(0,1fr);gap:14px;align-items:start}
.qmp-ic{
  flex:none;width:38px;height:38px;border-radius:50%;
  display:grid;place-items:center;color:#8a5a14;
  border:1px solid rgba(138,90,20,.3);
}
.qmp-ic .ic{width:18px;height:18px}
.qm-papeis b{display:block;font-size:14.5px;font-weight:600;color:#241708;line-height:1.3}
.qm-papeis span{display:block;margin-top:3px;font-size:13px;line-height:1.55;color:#57493a}

/* ---------- celular ---------- */
@media (max-width:1099px){
  .qm-retrato img{max-height:420px}
  .qm-bento{grid-auto-rows:auto}
  .qb--d{grid-row:auto;aspect-ratio:4/5}
}
/* ⚠️ `.quem-inner` era FLEX EM LINHA (do layout antigo retrato+lado): a faixa
   dos papéis virava uma 4ª coluna espremida. Agora empilha em bloco: grade
   de 3 colunas em cima, faixa embaixo. */
.quem-inner{display:block}
/* o retrato acompanha a altura da grade e a credencial fica ancorada nele */
@media (min-width:1100px){
  .quem-grid{align-items:stretch}
  .qm-retrato{height:auto;min-height:0;align-self:stretch;padding-bottom:26px}
  .qm-retrato img{position:absolute;inset:0 0 26px 0;height:auto}
  .qm-cred{left:16px;right:16px;bottom:0;justify-content:flex-start}
}
/* bento: linhas do mesmo tamanho, sem vão entre as fileiras */
.qm-bento{grid-auto-rows:1fr;align-content:stretch}
.qb--a,.qb--b,.qb--e,.qb--f{aspect-ratio:auto}
.qb--d{grid-row:span 2}
@media (min-width:1100px){ .qm-bento{height:100%} }
/* ⚠️ `inset:0 0 26px 0` com `height:auto` NÃO estica: com top e bottom
   definidos é preciso deixar a altura resolver sozinha (height:100% + inset:0).
   O retrato agora preenche a coluna inteira e a credencial ancora no pé dele. */
@media (min-width:1100px){
  .qm-retrato{padding-bottom:0;align-self:stretch;min-height:560px}
  .qm-retrato img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center 22%}
  .qm-cred{left:14px;right:14px;bottom:14px;width:auto}
}
/* ⚠️ O BENTO estava DEFININDO a altura da composição: com aspect-ratio nas
   células ele tinha altura intrínseca de 1645px para uma carta de 696px.
   Com `minmax(0,1fr)` nas linhas e `min-height:0` nas células ele perde a
   altura própria e passa a ESTICAR até a altura da carta, que é quem deve
   mandar. Regra geral de grid: filho que não pode encolher vira o teto. */
@media (min-width:1100px){
  .quem-grid{min-height:640px}
  .qm-bento{height:100%;grid-template-rows:repeat(3,minmax(0,1fr));grid-auto-rows:auto}
  .qb,.qb-cita{min-height:0;aspect-ratio:auto}
  .qb img{min-height:0}
  .qm-retrato{min-height:0}
}
/* ⚠️ `height:100%` num item de grid resolve para AUTO quando a linha tem
   altura indefinida — por isso o bento continuava ditando 1645px. A saída é
   tirá-lo do fluxo: o invólucro é o item do grid (estica com a linha, que
   a CARTA define) e o bento vive absoluto dentro dele. */
@media (min-width:1100px){
  .qm-bento-wrap{position:relative;min-height:0;align-self:stretch}
  .qm-bento{position:absolute;inset:0;height:auto}
  .quem-grid{min-height:0}
}
@media (max-width:1099px){ .qm-bento-wrap{position:static} }
/* bento final: 6 células IGUAIS em 2x3 (5 fotos + citação). O `span 2` da
   foto alta pedia 7 vagas numa grade de 6 e desalinhava tudo; e a citação
   transbordava a própria célula. Grade regular resolve os dois. */
.qb--d{grid-row:auto}
.qb-cita{overflow:hidden}
.qb-cita p{font-size:clamp(13.5px,1.15vw,17px);line-height:1.3}
.qb-aspas{font-size:30px;margin-bottom:2px}
@media (min-width:1100px){
  .qm-bento{grid-template-rows:repeat(3,minmax(0,1fr));gap:clamp(9px,0.85vw,14px)}
  .qb-cita{padding:clamp(14px,1.3vw,20px)}
}

/* ==========================================================================
   Camada · CORREÇÕES DA AUDITORIA (agente de tipografia) — 19/08
   ========================================================================== */
/* 1 · .bonus-title não declarava line-height e caía no body{1.6}: 74px de vão
   entre as duas linhas do título, contra ~50px do padrão das outras seções.
   O título chegava rasgado em dois blocos. */
.bonus-title{line-height:1.08}

/* 2 · O BOTÃO DE COMPRA era o MENOR CTA da página (14px contra 15.5px dos
   outros). Medido: caixa de 431px úteis para um rótulo de 294px a 17px —
   cabia folgado. O único botão que fecha venda volta a ser o mais forte. */
.oferta-trio .preco-card .btn{font-size:17px;letter-spacing:.05em}

/* 3 · EYEBROW ANINHADO em #oferta: ".sec-eyebrow" (MATRÍCULA) e ".of-head"
   (TUDO QUE ESTÁ INCLUSO / GARANTIA E ACESSO) tinham a MESMA voz — mesma
   cor, família, caixa e 0.5px de diferença de corpo. O rótulo de coluna
   desce de nível: mantém o filete dourado como marcador, mas em tinta de
   corpo, para o dourado ficar reservado ao nível de SEÇÃO. */
.of-head{font-size:10px;letter-spacing:.16em;color:var(--ink-mut)}

/* 4 · .kit-valor usava JetBrains Mono 500 — o único elemento da página com
   esse peso, que obrigava a baixar um arquivo de fonte inteiro. Vai para
   700, que já está carregado. */
.kit-valor b{font-weight:700}

/* 5 · .cfm-list era a única lista de leitura fora da faixa 1.6-1.8 */
.cfm-list li{line-height:1.65}

/* 6 · medida de leitura acima de 75 caracteres nos dois blocos mais longos */
.acc-inner p{max-width:62ch}
.kit-lede{max-width:62ch}
/* 7 · CONTRASTES abaixo de AA apontados na auditoria (medidos):
   .fan-hint 3.77 · .qm-cred-txt i 4.05 · .hm-produto/.hm-por 3.41 */
.mods-light .fan-hint{color:#6f6152}
.qm-cred-txt i{color:#6f6152}
.hero--light .hm-produto,.hero--light .hm-por{color:#6d5f4c}

/* 8 · links do rodapé tinham 22.4px de altura de alvo — abaixo até do
   mínimo AA de 24px (WCAG 2.5.8). Padding vertical resolve sem mexer no
   desenho. */
.footer-final .footer-links a{display:inline-block;padding-block:8px}

/* 9 · o selo do coverflow vazava a viewport em 320px (left:-30px) */
@media (max-width:400px){ .cf-selo{left:0} }

/* ==========================================================================
   Camada · CORREÇÕES DA AUDITORIA (agente de layout) — 19/08
   Todos os números abaixo foram medidos pelo agente e reconferidos.
   ========================================================================== */

/* 1 · 🔴 #quem QUADRUPLICAVA de altura com 1px de diferença: 1006px a 1100
   e 4052px a 1099 (+3046). Abaixo do breakpoint o bento perdia os limites
   e as fotos passavam a ditar a altura pela razão intrínseca. Vale para
   TODA a faixa 820-1099 (tablet deitado, 1024, laptop pequeno). */
@media (max-width:1099px){
  .qm-bento{grid-template-columns:1fr 1fr;grid-auto-rows:auto;gap:10px}
  .qb,.qb-cita{aspect-ratio:4/3;min-height:0}
  .qb--d{aspect-ratio:4/3;grid-row:auto}   /* era 4/5: abria 237-255px de vão */
  .qb img{height:100%}
}

/* 2 · retrato DECAPITADO em toda largura ≤1099: o `object-position` estava
   preso dentro do @media de 1100. A 1024 mostrava 30% da foto, cortando
   acima dos olhos. Agora o enquadramento é do caso BASE. */
.qm-retrato img{object-position:center 22%}

/* 3 · faixa morta de 416x639px ao lado da carta entre 700 e 1099: a coluna
   tinha 1007px e o texto max-width:56ch (591px). Nessa faixa o retrato e a
   carta dividem a linha e o bento passa para baixo, ocupando a largura. */
@media (min-width:700px) and (max-width:1099px){
  .quem-grid{grid-template-columns:minmax(0,0.85fr) minmax(0,1.5fr)}
  .qm-bento-wrap{grid-column:1/-1}
  .qm-retrato img{max-height:none}
  .qm-retrato{min-height:380px}
}

/* 4 · o cartão de vidro cobria 100% da altura da linha do texto do hero a
   360px (182x35px de sobreposição, lendo "Entre para o time de m…"). */
@media (max-width:380px){
  .hero-card .container{padding-bottom:clamp(190px,32vh,250px)}
  .hero-time{margin-bottom:6px}
}

/* 5 · o "cartão elevado" da oferta ficava INVERTIDO de 1080 a ~1110: a
   coluna direita (584px) ultrapassava o cartão (542px) em 21px acima e
   abaixo — o oposto do desenho. O trio só entra a partir de 1120. */
@media (min-width:1080px) and (max-width:1119px){
  .oferta-trio{grid-template-columns:1fr;gap:26px}
  .oferta-trio .preco-card{grid-column:1;grid-row:auto;margin-inline:0;padding-block:clamp(34px,4vw,48px)}
  .of-lado--esq,.of-lado--dir{grid-column:1;grid-row:auto;padding:0;margin-block:0}
}

/* 6 · .quem-box tinha METADE do respiro interno dos outros dois painéis
   claros (32/32 contra 68/48 do .mods-panel e 64/48 do .depo-box a 1600). */
.quem-box{padding:clamp(34px,4.4vw,64px) clamp(18px,3vw,48px)}

/* 7 · pés das duas colunas do FAQ desalinhados 47-53px acima de 1280 */
@media (min-width:1280px){ .faq-grid{align-items:stretch} .faq-card{align-self:start} }
/* no tablet o bento ocupa a LARGURA CHEIA (abaixo do retrato+carta), então
   3 colunas x 2 linhas aproveitam melhor que 2x3: 1100px de altura caem
   para ~480px, sem encolher nenhuma foto. */
@media (min-width:700px) and (max-width:1099px){
  .qm-bento{grid-template-columns:repeat(3,1fr)}
}


/* ==========================================================================
   Camada · PACKS POR ESPECIALIDADE EM CLARO (20/08)
   Pedido do dono: manter o layout do coverflow exatamente como esta e trocar
   so a paleta para a versao CLARA da plataforma, casando com o mockup claro
   do dashboard logo acima (assets/kit-app-claro.webp).

   Superficie: a mesma linguagem do cartao branco canonico do projeto
   (.mods-duo .v4-mod) — #fff, sombra em duas camadas, SEM contorno.
   O contorno continua zero por decisao do dono (item 3 da camada do
   coverflow, mais acima): sobre o fundo escuro da secao um cartao branco
   ja se separa sozinho.

   ⚠️ COR DO TEXTO — a armadilha desta camada. A camada de 18/08 define
   --pc-txt como `--pc misturado com 20% de BRANCO`, porque o cartao era
   ESCURO. Em cartao BRANCO isso inverte: clarear a cor derruba o contraste.
   Aqui cada pack recebe --pc-ink, que e a cor pura escurecida no MINIMO
   necessario para bater 4.5:1 sobre o veu do card (medido pack a pack,
   nao chutado — os 10 valores estao na tabela abaixo). --pc-txt passa a
   apontar para --pc-ink, entao os seletores de 18/08 continuam valendo
   sem serem reescritos.
   A cor PURA (--pc) segue nas superficies: icone, veu do topo e selo.
   ========================================================================== */
.cf-face{
  /* ⚠️ --lt-ink* sao definidos SO dentro de .depo-box/.mods-panel/
     .quem-box. Fora deles a declaracao vira INVALIDA e o texto herda o creme
     do tema escuro — medido: corpo do card a 2.32:1 sobre branco. Por isso os
     tres tokens sao redeclarados aqui, como os paineis claros fazem.
     --lt-ink-3 usa #75684f (4.68:1), o valor que a auditoria de 19/08 ja
     escolheu para .depo-box; o #8a7c6a padrao da 3.48:1 e REPROVA. */
  --lt-ink:#241708;
  --lt-ink-2:#57493a;
  --lt-ink-3:#75684f;
  --pc-txt:var(--pc-ink);
  background:
    radial-gradient(122% 88% at 12% 0%,color-mix(in srgb,var(--pc) 12%,transparent),transparent 62%),
    #fff;
  box-shadow:0 1px 2px rgba(60,40,10,0.05),0 22px 46px -24px rgba(60,40,10,0.42);
}
/* corpo e rotulos na paleta clara do projeto */
.cf-desc{color:var(--lt-ink-2)}
.cf-meta,.cf-rodape{color:var(--lt-ink-3)}
.cf-meta,.cf-rodape{border-top-color:rgba(101,71,22,0.12)}
.cf-back li{color:var(--lt-ink-2);border-top-color:color-mix(in srgb,var(--pc) 24%,rgba(101,71,22,0.10))}
/* selo: superficie tingida, texto no tom acessivel */
.cf-selo{
  background:color-mix(in srgb,var(--pc) 11%,#fff);
  border-color:color-mix(in srgb,var(--pc) 26%,transparent);
}

/* --pc-ink por pack: minimo escurecimento para 4.5:1 sobre o proprio veu.
   Medido com a formula WCAG contra color-mix(--pc 12%, #fff) — o centro do
   veu radial, o ponto MAIS ESCURO do fundo. Medir contra branco puro
   SUPERESTIMA: foi assim que a Cardiologia passou por 4.55 no papel e
   mediu 4.48 na tela. */
.cf-card[data-i="0"]{--pc-ink:#4065CF} /* Clinica Medica   4.59:1 */
.cf-card[data-i="1"]{--pc-ink:#167E3C} /* Pediatria        4.64:1 */
.cf-card[data-i="2"]{--pc-ink:#C23737} /* Cardiologia      4.62:1 */
.cf-card[data-i="3"]{--pc-ink:#BA3979} /* Gineco e Obst.   4.59:1 */
.cf-card[data-i="4"]{--pc-ink:#0B7C56} /* Med. da Familia  4.66:1 */
.cf-card[data-i="5"]{--pc-ink:#AE500F} /* Ortopedia        4.69:1 */
.cf-card[data-i="6"]{--pc-ink:#7950D6} /* Radiologia       4.59:1 */
.cf-card[data-i="7"]{--pc-ink:#177985} /* Anestesiologia   4.66:1 */
.cf-card[data-i="8"]{--pc-ink:#8D47CF} /* Psiquiatria      4.62:1 */
.cf-card[data-i="9"]{--pc-ink:#9A6407} /* Dermatologia     4.56:1 */

/* ⚠️ VAZAMENTO PRE-EXISTENTE, exposto pelo cartao claro: no VERSO, os packs
   com 5 itens e rotulo que quebra em 2 linhas (Clinica Medica +21px,
   Pediatria +17px, Ortopedia +2px a 1600) empurravam o rodape para FORA do
   cartao. No cartao escuro o texto vazado se perdia no fundo da secao; no
   branco fica obvio. NAO e efeito desta camada — medido antes e depois.
   Correcao pelo respiro das linhas, nao pela altura do cartao: mexer em
   `--cfcw`/1.30 mudaria a geometria do coverflow inteiro. */
.cf-back li{padding:5px 0;line-height:1.3}
.cf-back ul{margin-top:8px}

/* O respiro das linhas resolveu 1440 e 1600, mas NAO a faixa 761-1300: ali
   `--cfcw` bate no piso de 175px e o cartao cai para 227px de altura com o
   MESMO conteudo (Clinica Medica vazava 31px). Encolher mais a tipografia
   nao e opcao: a lista ja esta em 10.5px, o piso que a auditoria de 19/08
   fixou para micro-rotulos de CONTEUDO. Entao o cartao ganha um PISO de
   altura (273px), em vez de uma faixa: onde a proporcao 1.30 ja da altura
   suficiente (>=1440) nada muda; onde ela encolhe demais, o piso segura.
   A largura (`--cfcw`) nao muda, entao a geometria horizontal do coverflow
   fica intacta — so a banda fica mais alta onde precisava.
   ⚠️ O corte e `min-width:760.05px`, nao 761: o par `max-width:760` +
   `min-width:761` deixa um BURACO em viewport fracionario (medido: a 760,5px
   as duas consultas dao false e o cartao voltava a 227px). O celular
   (<=760) fica de fora de proposito — la nao havia vazamento. */
@media (min-width:760.05px){
  .cf-stage,.cf-card{height:max(calc(var(--cfcw) * 1.30),273px)}
}

/* ==========================================================================
   Camada · HERO SEM O SELO E SEM O CARTÃO DE VIDRO (21/08, pedido do dono)
   Saíram do HTML o .eyebrow-pill ("O novo padrão de prática médica com IA")
   e o .hero-stat (+1.239 / médicos na rotina + "Ver os resultados").
   O CSS dos dois FICA no arquivo, sem uso, por decisão do dono: a limpeza
   vira tarefa própria. O inventário está no HANDOFF.

   ⚠️ Esta camada vem DEPOIS da regra ~2727 e da camada ~4200, como elas
   próprias exigem, e depois da media de 380px (~6570), que ela sobrescreve.

   1. RECUO (só desktop). A coluna de texto começava a 94px da borda em 1440
      (18,7 de --hero-pad + 31,3 da centragem do container + 44 de --pad-x),
      e entrava cedo demais na arte. O deslocamento é margin-left no
      .hero-content, e não padding no .container: mexer no container moveria
      também o eixo de centragem e o max-width, e o hero perderia o
      alinhamento com o resto da página. No celular fica 0 e o recuo atual
      permanece intacto.

   2. FAIXA INFERIOR (desktop e celular). O padding-bottom existia para
      reservar o espaço do cartão de vidro — ver o piso de 198px documentado
      na camada ~4200 e a media de 380px (~6570), escrita porque o cartão
      cobria a linha "Entre para o time de m…". Sem o cartão os dois motivos
      deixam de existir. A única peça que ainda ocupa a base é o canto
      recortado: no desktop ele fica à DIREITA de 1040px enquanto a coluna
      de texto termina antes de 780px, e no celular sobram ~150px de folga
      vertical. Não há colisão possível em nenhuma das duas. A faixa encolhe
      e o bloco volta ao centro óptico, compensando a altura que o selo
      levou embora do topo (~52px no desktop, ~69px no celular).
   ========================================================================== */
@media (min-width:881px){
  .hero-content{margin-left:clamp(0px,4.5vw,88px)}
  .hero-card .container{padding-bottom:clamp(112px,min(13vh,10vw),168px)}
}
@media (min-width:881px) and (min-height:761px) and (max-height:920px){
  .hero-card .container{padding-bottom:clamp(96px,12vh,124px)}
}
@media (min-width:881px) and (max-height:760px){
  .hero-card .container{padding-bottom:clamp(92px,11.5vh,116px)}
}
/* Celular: sem deslocamento lateral, só a faixa inferior. Vence também a
   media de 380px acima, que reservava de 190 a 250px para o cartão. */
@media (max-width:880px){
  .hero-card .container{padding-bottom:clamp(96px,13.3vh,150px)}
}

/* ==========================================================================
   Camada · MOCKUP DO APP EM HTML/CSS, PALETA ESCURA (21/08, pedido do dono)
   Substitui assets/kit-app-claro.webp (102 KB, captura clara 2320x1522).
   Zero biblioteca, zero framework, zero asset novo: só marcação e os tokens
   que o :root da linha 7 já declarava.

   ⚠️ CONTRASTE — medido, não estimado. Sobre --bg-card #20150c:
      --ink-title 15,52 · --ink-soft 13,09 · --ink-body 8,26 · --ink-mut 6,72
      --gold-honey 10,76 · --gold-mid 7,28
   Ficam FORA como cor de texto, por reprovarem: --ink-footer (2,43) e
   --gold-dark (2,26). --gold-dark entra só como borda e fundo de tile, onde
   não carrega texto.

   ⚠️ O CORTE NA BASE é intencional e replica a captura original: os cards
   04, 05 e 06 não têm rodapé de contagem. A imagem terminava antes dele e
   não existe fonte para esses números — derivar "20 prompts" da aritmética
   seria dado inventado numa peça de publicidade médica.
   ========================================================================== */
.dash{
  position:relative;overflow:hidden;
  border-radius:clamp(12px,1.2vw,18px);
  background:var(--bg-alt);
  border:1px solid var(--line-20);
  box-shadow:0 60px 140px -50px rgba(0,0,0,0.9),0 0 0 1px rgba(236,196,95,0.16),
             0 0 70px -30px rgba(214,154,60,0.28);
  font-family:var(--font-body);
  container-type:inline-size;
}
/* véu que apaga a base, no lugar do corte seco da captura */
.dash::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:74px;
  background:linear-gradient(180deg,transparent,rgba(10,8,6,0.92));
  pointer-events:none;z-index:3;
}
.dash .di{width:1em;height:1em;flex:none;fill:none;stroke:currentColor;stroke-width:1.6;
  stroke-linecap:round;stroke-linejoin:round}

/* ---------- chrome do navegador ---------- */
.dash-chrome{
  display:flex;align-items:center;gap:14px;
  padding:9px 14px;background:var(--bg-dark);
  border-bottom:1px solid var(--line-12);
}
.dash-dots{display:flex;gap:6px}
.dash-dots i{width:9px;height:9px;border-radius:50%;background:var(--gold-dark);opacity:.75}
.dash-dots i:first-child{background:#8a3b2a;opacity:.9}
.dash-dots i:nth-child(2){background:#8a6a24;opacity:.9}
.dash-dots i:last-child{background:#2f6a45;opacity:.9}
.dash-url{
  flex:1;display:flex;align-items:center;justify-content:center;gap:7px;
  font-family:var(--font-mono);font-size:10.5px;
  color:var(--ink-mut);background:var(--bg);border:1px solid var(--line-12);
  border-radius:var(--r-chip);padding:4px 12px;max-width:340px;margin:0 auto;
}
/* cadeado do sprite da própria página (#ic-lock), como na referência.
   Nenhum SVG novo foi criado: o símbolo já existia. */
.dash-url .di{font-size:11px;color:var(--ink-dim)}

/* ---------- corpo ---------- */
.dash-body{display:grid;grid-template-columns:186px minmax(0,1fr);min-height:430px}
.dash-side{
  padding:18px 14px;background:var(--bg-dark);
  border-right:1px solid var(--line-12);
}
.dash-logo{font-family:var(--font-display);font-size:19px;letter-spacing:.01em;color:var(--ink-title)}
.dash-logo b{color:var(--gold-mid);font-weight:inherit}
.dash-navlbl{
  margin:20px 0 9px;font-family:var(--font-mono);font-size:9px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--ink-dim);
}
.dash-nav{display:flex;flex-direction:column;gap:2px}
.dash-navi{
  display:flex;align-items:center;gap:10px;padding:8px 10px;
  border-radius:var(--r-sm);font-size:12.5px;color:var(--ink-body);
}
.dash-navi .di{font-size:15px;color:var(--ink-dim)}
.dash-navi.is-on{background:rgba(214,154,60,0.10);color:var(--ink-title);border:1px solid var(--line-20);padding:7px 9px}
.dash-navi.is-on .di{color:var(--gold-mid)}
.dash-badge{
  margin-left:auto;font-family:var(--font-mono);font-size:9.5px;font-weight:400;
  color:var(--gold-honey);background:rgba(214,154,60,0.12);
  border:1px solid var(--line-20);border-radius:var(--r-chip);padding:1px 7px;
}

/* ---------- topo ---------- */
.dash-main{padding:16px 18px 0;min-width:0}
.dash-top{display:flex;align-items:center;gap:12px;margin-bottom:16px}
.dash-crumb{font-size:12px;color:var(--ink-mut)}
.dash-tools{display:flex;align-items:center;gap:9px;margin-left:auto}
.dash-busca{
  display:flex;align-items:center;gap:8px;padding:6px 10px;font-size:11.5px;
  color:var(--ink-mut);background:var(--bg);border:1px solid var(--line-15);
  border-radius:var(--r-chip);
}
.dash-busca .di{font-size:13px}
.dash-busca b{
  font-family:var(--font-mono);font-size:9px;font-weight:400;color:var(--ink-dim);
  border-left:1px solid var(--line-15);padding-left:8px;
}
.dash-av,.dash-tema{
  width:25px;height:25px;border-radius:50%;display:grid;place-items:center;
  font-size:11px;border:1px solid var(--line-20);
}
.dash-av{background:rgba(214,154,60,0.14);color:var(--gold-honey);font-weight:600}
.dash-tema{background:var(--bg);color:var(--ink-mut)}
.dash-tema .di{font-size:13px}

/* ---------- saudação e indicadores ---------- */
.dash-saud{
  padding:20px 22px;border-radius:var(--r-lg);
  background:linear-gradient(140deg,var(--bg-card),var(--bg-alt) 70%);
  border:1px solid var(--line-15);
}
.dash-oi{margin:0;font-size:12.5px;color:var(--ink-mut)}
.dash-nome{
  margin:2px 0 6px;font-family:var(--font-display);font-weight:700;
  font-size:clamp(20px,2.4cqi,30px);line-height:1.08;color:var(--ink-title);
}
.dash-sub{margin:0;font-size:11.5px;color:var(--ink-body)}
.dash-kpis{
  display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  margin-top:16px;padding-top:14px;border-top:1px solid var(--line-12);
}
.dash-kpi{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding-right:12px}
.dash-kpi+.dash-kpi{border-left:1px solid var(--line-12);padding-left:16px}
.dash-kpi .di{font-size:19px;color:var(--gold-mid)}
.dash-kpi b{font-family:var(--font-display);font-size:20px;color:var(--ink-title);line-height:1}
.dash-kpi i{
  flex-basis:100%;margin-left:28px;font-family:var(--font-mono);font-style:normal;
  font-size:8.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-dim);
}

/* ---------- bloco do kit ---------- */
.dash-sech{margin:22px 0 0;font-family:var(--font-display);font-size:17px;color:var(--ink-title)}
.dash-secm{margin:3px 0 14px;font-family:var(--font-mono);font-size:10px;color:var(--ink-dim)}

/* ---------- cards de categoria ---------- */
.dash-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding-bottom:26px}
.dash-cat{
  display:flex;flex-direction:column;padding:14px;
  border-radius:var(--r-md);background:var(--bg-card);
  border:1px solid var(--line-12);
}
.dash-cat-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:12px}
.dash-tile{
  width:34px;height:34px;border-radius:10px;display:grid;place-items:center;
}
.dash-tile .di{font-size:18px}
.dash-ix{font-family:var(--font-mono);font-style:normal;font-size:9px;color:var(--ink-dim)}
.dash-cat-h{font-family:var(--font-display);font-size:14px;line-height:1.15;margin-bottom:5px}
.dash-cat-d{font-size:10.5px;line-height:1.45;color:var(--ink-body)}
.dash-cat-pe{
  display:flex;align-items:baseline;gap:5px;margin-top:12px;padding-top:10px;
  border-top:1px solid var(--line-12);font-size:10px;color:var(--ink-mut);
}
.dash-cat-pe b{font-family:var(--font-display);font-size:14px;color:var(--ink-soft)}
.dash-cat-pe em{margin-left:auto;font-family:var(--font-mono);font-style:normal;font-size:9px;color:var(--ink-dim)}

/* ==========================================================================
   COR DOS CARDS · DOURADO ÚNICO (escolha do dono, 21/08)
   As seis categorias compartilham o acento do projeto. A distinção é o
   índice (01/10 … 06/10) e a posição na grade, não a cor.

   Foi montada e descartada uma alternativa com as SEIS MATIZES da captura
   original rebaixadas para fundo escuro (#D77E69, #7C96C8, #A28DC0,
   #B1923C, #46A871, #D08447, todas medidas em ~6,0:1). A razão da recusa
   está na referência de estilo: dentro do chrome do navegador ela é
   monocromática dourada, e a cor aparece UMA vez na cena, nos packs
   sobrepostos à base. Como o coverflow também vai para escuro e tem cores
   próprias, um dashboard multicolorido faria a seção competir consigo
   mesma.

   ⚠️ O GRADIENTE DO TILE É ESTREITO DE PROPÓSITO. A primeira tentativa foi
   gold-deep → gold-dark com glifo claro, e ela REPROVOU: medido, o glifo
   --champagne dava 5,71 na ponta escura mas 2,69 na ponta clara. Com um
   gradiente daquela largura NENHUMA cor de glifo passa nas duas pontas
   (--on-gold: 4,96 e 2,34; --bg-dark: 5,35 e 2,52). A correção não é trocar
   o glifo, é estreitar o gradiente: gold-mid → gold-deep são ambos claros,
   e aí o glifo ESCURO --on-gold passa nas duas pontas (7,54 e 4,96).
   ========================================================================== */
.dash-tile{
  background:linear-gradient(140deg,var(--gold-mid),var(--gold-deep));
  border:1px solid var(--line-28);color:var(--on-gold);
}
.dash-tile .di{stroke-width:1.8}
.dash-cat-h{color:var(--ink-title)}

/* ==========================================================================
   RESPONSIVO
   A peça é a MAQUETE de um app de computador, então ela não vira um app de
   celular: a barra lateral continua existindo, encolhida para uma tira de
   ícones, e a grade perde colunas. Assim continua legível como "a plataforma
   no computador", em vez de encolher até o texto sumir, que era o defeito da
   imagem que ela substitui.
   Os cortes são em CONTAINER, não em viewport: o mockup vive dentro de um
   .kit-shot de no máximo 1080px e precisa reagir à largura DELE.
   ========================================================================== */
@container (max-width:820px){
  .dash-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dash-body{grid-template-columns:164px minmax(0,1fr)}
}
@container (max-width:620px){
  .dash-body{grid-template-columns:52px minmax(0,1fr)}
  .dash-logo{font-size:0;text-align:center}
  .dash-logo b{font-size:19px}
  .dash-navlbl{display:none}
  .dash-navi{justify-content:center;padding:9px 0;font-size:0;gap:0}
  .dash-navi.is-on{padding:8px 0}
  .dash-navi .di{font-size:17px}
  .dash-badge{display:none}
  .dash-side{padding:14px 6px}
  .dash-main{padding:12px 12px 0}
  .dash-busca b,.dash-crumb{display:none}
  .dash-grid{grid-template-columns:minmax(0,1fr)}
  .dash-kpis{grid-template-columns:minmax(0,1fr);gap:10px}
  .dash-kpi+.dash-kpi{border-left:0;padding-left:0;border-top:1px solid var(--line-12);padding-top:10px}
}
@container (max-width:420px){
  .dash-saud{padding:14px}
  .dash-sub{display:none}
  .dash-url{font-size:9px}
}

/* ==========================================================================
   ETAPA 1 · GEOMETRIA DA CENA EM CAMADAS — SEM ACABAMENTO
   Superfícies chapadas, contorno de 1px, tipografia no lugar. Nenhum
   gradiente, brilho, sombra elaborada ou borda dupla: isso é a Etapa 2.
   O objetivo aqui é validar posição, proporção e sobreposição antes de
   gastar acabamento sobre uma geometria errada.
   ========================================================================== */

/* ---------- a cena: satélite | centro | satélite ----------
   Alarga por margem negativa simétrica, NUNCA por transform: o elemento
   carrega data-reveal e o motor de entrada anima transform nele.
   Sem padding lateral: box-sizing:border-box faria o padding subtrair do
   width e encolher o centro. */
.cena{
  /* ⚠️ O vão de 80px separava. Na referência os satélites quase tocam o
     mockup e é por isso que a seta é curta: a distância é curta. Com 20px a
     cena encolhe de 1360 para 1240 e as peças passam a se tocar em vez de
     ficarem alinhadas com respiro entre elas. */
  --cena-w:min(1240px, calc(100vw - 48px));
  --sat-w:180px;
  --gap:20px;
  width:var(--cena-w);
  margin-inline:calc((100% - var(--cena-w)) / 2);
  margin-top:clamp(28px,4vh,52px);
  display:grid;
  grid-template-columns:var(--sat-w) var(--gap) minmax(0,1fr) var(--gap) var(--sat-w);
  align-items:center;
}
.cena-centro{grid-column:3;position:relative;z-index:2}

/* o mockup perde o alargamento próprio: quem alarga agora é a cena */
.cena .kit-shot{width:100%;max-width:none;margin:0}

/* O mockup é CORTADO no desktop, e é o painel que faz o corte.
   Sem isso sobrava uma faixa da base do dashboard visível ENTRE o painel e o
   leque, e a oclusão ficava pela metade. O corte também é o que centra os
   satélites: com o mockup em 520px, o meio da linha do grid cai praticamente
   na linha dos indicadores, que é onde a referência ancora os satélites e as
   setas. Os dois problemas têm a mesma causa e a mesma correção. */
.cena .dash{max-height:520px}
.cena .dash::after{display:none}   /* o véu não tem função sob o painel */

/* ---------- satélites ---------- */
.sat{
  position:relative;z-index:1;
  padding:26px 18px 20px;
  background:var(--bg-card);
  border:1px solid var(--line-20);
  border-radius:var(--r-lg);
}
.sat--esq{grid-column:1}
.sat--dir{grid-column:5}
.sat-h{
  margin:14px 0 8px;font-family:var(--font-display);font-size:17px;
  line-height:1.15;color:var(--ink-title);
}
.sat-d{margin:0;font-size:12px;line-height:1.5;color:var(--ink-body)}

/* ---------- selos ---------- */
.selo{
  display:inline-block;padding:4px 12px;
  font-family:var(--font-mono);font-size:9px;letter-spacing:.18em;
  text-transform:uppercase;color:var(--label-gold);
  background:var(--bg-alt);border:1px solid var(--line-25);
  border-radius:var(--r-chip);
}
/* o selo do painel cavalga a borda superior: metade dentro, metade fora */
.selo--painel{
  position:absolute;top:0;left:50%;margin-left:-52px;
  transform:none;                 /* posicionado por margin, não por transform */
  translate:0 -50%;
  z-index:3;
}

/* ---------- medalhões ---------- */
.med{
  display:grid;place-items:center;
  width:56px;height:56px;border-radius:50%;
  background:var(--bg-alt);border:1px solid var(--line-25);
  color:var(--gold-mid);
}
.med .ic{width:26px;height:26px}
.med--lg{width:76px;height:76px}
.med--lg .ic{width:34px;height:34px}

/* ---------- setas apontando para o centro ----------
   Curtas e dentro do vão. A primeira versão usava width:100% e virava uma
   linha reta atravessando a cena por baixo do mockup, lendo como divisória.
   A ponta é um triângulo por borda, sem SVG novo. */
.seta{
  grid-row:1;align-self:center;
  position:relative;width:16px;height:1px;
  border-top:1px dashed var(--line-30);
}
.seta::after{
  content:"";position:absolute;top:-4px;
  border:4px solid transparent;
}
.seta--esq{grid-column:2;justify-self:center;margin-left:0}
.seta--esq::after{right:-4px;border-left-color:var(--line-45)}
.seta--dir{grid-column:4;justify-self:center;margin-right:0}
.seta--dir::after{left:-4px;border-right-color:var(--line-45)}

/* ---------- painel do Bônus 1 ----------
   OCLUI a base do mockup. A oclusão é por elemento sólido, e o topo do
   painel cai logo depois da linha de indicadores do dashboard. O valor
   negativo é medido, não estimado: ver o relatório da Etapa 1. */
.painel{
  position:relative;z-index:2;
  /* ⚠️ o negativo é relativo ao FIM do mockup, não ao topo. Quando o mockup
     passou a ser cortado em 520px, o -372 original subiu o painel junto e ele
     engoliu os indicadores. Com 520 de mockup, -144 recoloca o topo do painel
     em 376px do topo do dashboard, logo depois da linha de indicadores. */
  margin:-144px auto 0;
  /* ⚠️ HIERARQUIA DE LARGURAS DA CENA — a ordem importa e ela é:
         painel  <  leque  <  mockup
     Cada camada é coberta pela seguinte, e o mockup é a única que sobra
     visível dos dois lados. Do painel só se vê a FAIXA DE CIMA, com selo,
     medalhão e texto: as laterais e a base somem atrás dos cards.
     Estava invertido — o painel a 1014 era mais largo que o leque a 920, os
     cards ficavam contidos dentro dele e a cena não fechava.

     ⚠️ MEDIR SEMPRE O LEQUE VISÍVEL, não a extensão bruta dos cards. O
     translateZ do coverflow recua os vizinhos e a perspectiva os encolhe: a
     extensão bruta dá 1311px e o leque visível, 745px na variante A. Foi a
     medição bruta que levou à conclusão errada de que o leque já era o mais
     largo dos três.

     ⚠️ AS TRÊS LARGURAS FICAM PRÓXIMAS, com dezenas de pixels entre elas, e
     não centenas. "Painel menor que o leque" não significa MUITO menor: numa
     primeira tentativa o painel caiu para 660 e o mockup teve de encolher de
     1070 para 780 para não expor o dashboard nas laterais — a cena perdeu a
     presença que o mockup largo dava. A conta certa é por CIMA: o painel fica
     próximo do interior do mockup e quem cresce é o leque. */
  width:min(1006px, calc(100% - 56px));
  /* ⚠️ Estes valores existem para o painel ULTRAPASSAR a base do mockup.
     Antes ele tinha 142px e terminava 2px ANTES dela, então o bloco
     "mockup + painel" tinha a mesma altura do mockup sozinho, e centrar os
     satélites em um ou em outro dava o mesmo resultado — desvio ZERO,
     medido. Não havia o que recentrar: o que faltava era o painel descer.
     Com mais respiro ele passa da base, o bloco cresce, e os satélites
     acompanham sozinhos pelo align-items:center. */
  padding:48px 34px 44px;
  display:flex;align-items:center;gap:24px;
  background:var(--bg-card);
  border:1px solid var(--line-25);
  border-radius:var(--r-lg);
}
.painel-txt{min-width:0}
.painel-h{
  margin:0 0 6px;font-family:var(--font-display);font-size:26px;
  line-height:1.1;color:var(--ink-title);
}
.painel-d{margin:0;font-size:13px;line-height:1.5;color:var(--ink-body);max-width:52ch}

/* ---------- leque de packs: ocluí a base do painel ---------- */
.bonus-section .cfw{
  position:relative;z-index:3;
  margin-top:-84px;
}

/* ---------- faixa de chips: encaixada sob o leque ----------
   ⚠️ margin-top ZERO, não negativo. Com o arco do leque (LIFT no main.js) os
   cards laterais DESCEM 30px em relação ao central, e o -34px original
   passou a deixar o card mais baixo cobrindo os chips em 33px — medido.
   Subir mais o leque não resolveria: ele passaria a cobrir o título do
   painel. Quem cede é a faixa. O encaixe continua, agora encostado na base
   do card mais baixo em vez de por baixo dele.
   ⚠️ margin-top fica em 2px, não em 30: na referência os chips formam faixa
   CONTÍNUA com o leque, sem vão. Os 2px são só a folga mínima que evita a
   colisão medida com o card mais baixo do arco. */
.chips{
  position:relative;z-index:2;
  margin:2px auto 0;
  width:min(760px, calc(100% - 32px));
  display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  /* superfície CONTÍNUA, não tabela. A versão com gap:1px sobre um fundo de
     linha desenhava divisórias verticais e a faixa lia como quatro células. */
  background:var(--bg-card);
  border:1px solid var(--line-20);
  border-radius:var(--r-md);
  padding:4px;
}
.chip{
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  padding:12px 16px;
}
.chip i{display:grid;place-items:center;color:var(--gold-mid);flex:none}
.chip .ic{width:19px;height:19px}
.chip b{font-family:var(--font-display);font-size:15px;color:var(--ink-title);line-height:1.1}
.chip em{
  flex-basis:100%;margin-left:29px;font-style:normal;
  font-size:11px;color:var(--ink-mut);line-height:1.2;
}

/* ---------- linha do cadeado, abaixo do CTA ---------- */
.acesso{
  display:flex;align-items:center;justify-content:center;gap:8px;
  margin:14px 0 0;font-size:12px;color:var(--ink-mut);
}
.acesso .ic{width:14px;height:14px;color:var(--ink-dim)}

/* ---------- correções de geometria, ainda sem acabamento ---------- */

/* A dica do coverflow FICA: o leque continua interativo e sem ela ninguém
   descobre que arrasta. Ela colidia com os chips porque vinha DENTRO do .cfw,
   no fim dele, e os chips sobem 34px justamente sobre essa faixa. Mexer em
   z-index não resolveria: o lugar dela no fluxo é que estava errado. Foi
   movida no HTML para depois dos chips, e aqui só ganha o respiro.
   Não é referenciada pelo main.js, então mover é seguro. */
.bonus-section .cf-hint{
  margin:16px 0 0;
  font-size:10px;letter-spacing:.14em;color:var(--ink-dim);
}

/* Quebras iguais às da referência.
   O H2 quebra depois de EXCLUSIVOS por MEDIDA (22ch). Funciona e continua
   fluido, mas é frágil: depende da fonte carregar. Se a quebra escapar,
   trocar por <br> com a mesma mecânica do lede abaixo.
   O lede quebra depois de "sem custo adicional." por <br> EXPLÍCITO, porque
   calibrar por max-width não segura a quebra exata: testei de 42ch a 56ch e
   todas davam duas linhas com a quebra no lugar errado. O <br> some no
   celular, onde a frase precisa fluir. */
.bonus-title{max-width:22ch;margin-inline:auto}
.bonus-lede{max-width:56ch}
@media (max-width:880px){ .q-lede{display:none} }

/* ==========================================================================
   ETAPA 2 · ACABAMENTO DA CENA
   Entra sobre a geometria já aprovada. Todos os valores saem dos tokens do
   :root; nenhum hex novo foi inventado.
   ========================================================================== */

/* ---------- 1. VINHETA DE FUNDO ----------
   ⚠️ ITEM DE MAIOR RISCO desta camada, e por precedente registrado.
   A .bonus-section já teve um radial próprio (linha ~657) e ele foi ANULADO
   na ~5177 com a razão anotada: "era a EMENDA reta visível acima da
   comunidade". Aplicar o radial na SEÇÃO faz o gradiente chegar às bordas
   dela, e o corte com a seção seguinte aparece como uma linha reta.

   A saída aqui é a que eu mesmo registrei como caminho seguro: prender o
   brilho a um elemento de LARGURA DEFINIDA, e não à seção. O ::before mora
   na .cena, que tem 1360px e margem para os lados, então o gradiente morre
   dentro do próprio bloco e nunca encosta na borda da seção. Não há emenda
   possível porque não há aresta compartilhada.
   A .bonus-section continua com background:none. Não mexer nisso. */
.cena{position:relative}
.cena::before{
  content:"";position:absolute;z-index:0;pointer-events:none;
  left:50%;top:50%;translate:-50% -50%;
  width:132%;height:190%;
  background:radial-gradient(ellipse at 50% 42%,
    rgba(214,154,60,0.13) 0%,
    rgba(181,119,30,0.06) 38%,
    transparent 68%);
}
.cena > *{position:relative;z-index:1}

/* ---------- 2. BORDA LUMINOSA DO CENTRO ----------
   Luz implícita vindo de cima: a borda superior fica mais clara que a
   inferior. Isso não se faz com `border`, que é uniforme nos quatro lados.
   Faz-se com um gradiente na moldura, por ::before de 1px. */
.cena .dash{
  border-color:transparent;
  box-shadow:
    0 60px 140px -50px rgba(0,0,0,0.9),
    0 0 90px -20px rgba(214,154,60,0.32);
}
.cena .kit-shot{position:relative}
.cena .kit-shot::after{
  content:"";position:absolute;inset:0;z-index:4;pointer-events:none;
  border-radius:clamp(12px,1.2vw,18px);
  padding:1px;
  background:linear-gradient(180deg,
    var(--gold-honey) 0%,
    var(--gold-mid) 22%,
    var(--line-30) 62%,
    var(--line-15) 100%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
          mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
}

/* ---------- painel: mesma linguagem, um passo abaixo do mockup ---------- */
/* ⚠️ O painel usa o MESMO tratamento de borda e halo do mockup, não um
   grau abaixo. Com --gold-mid no topo e halo em 0.26 ele se dissolvia no
   mockup atrás e a cena perdia a leitura de camada sobreposta. Agora:
   --gold-honey no topo e halo em 0.32, idênticos aos do .kit-shot::after.
   A hierarquia da cena continua existindo, mas ela mora nos SATÉLITES
   (--line-12 e halo 0.10), não em rebaixar o painel — que é centro, não
   periferia. */
.painel{
  border-color:transparent;
  background:linear-gradient(160deg,var(--bg-card),var(--bg-alt) 70%);
  box-shadow:
    0 40px 90px -40px rgba(0,0,0,0.85),
    0 0 90px -20px rgba(214,154,60,0.32);
}
.painel::before{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  border-radius:var(--r-lg);padding:1px;
  background:linear-gradient(180deg,
    var(--gold-honey) 0%,
    var(--gold-mid) 22%,
    var(--line-30) 62%,
    var(--line-15) 100%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
          mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
}
/* ⚠️ NÃO usar `.painel > *` aqui. O selo é filho direto e tem
   position:absolute; uma regra `> *` com position:relative tem a MESMA
   especificidade e, vindo depois, derruba o absolute — o selo cai para
   dentro do painel e senta em cima do título. Alvo explícito nos dois
   filhos que precisam subir sobre o ::before, e só neles. */
.painel > .med,
.painel > .painel-txt{position:relative;z-index:1}

/* ---------- 3. HIERARQUIA DE PROFUNDIDADE ----------
   Os satélites precisam ler como RECUADOS, não como iguais menores. O recuo
   é feito por quatro coisas somadas, e nenhuma delas é opacity no bloco
   inteiro: baixar a opacidade do card apagaria o texto junto e derrubaria o
   contraste, que precisa continuar passando.

     superfície   --bg-alt   em vez de --bg-card   (mais escura que o centro)
     contorno     --line-12  em vez de --line-25   (metade da presença)
     halo         rgba(214,154,60,0.10) contra 0.32 do mockup
     escala       0.965                            (recuo óptico)

   O texto fica intacto: título em --ink-soft e corpo em --ink-body, ambos
   medidos sobre --bg-alt na tabela de contraste abaixo. */
.sat{
  background:var(--bg-alt);
  border-color:var(--line-12);
  box-shadow:0 24px 60px -34px rgba(0,0,0,0.8),
             0 0 44px -22px rgba(214,154,60,0.10);
  scale:0.965;
}
.sat-h{color:var(--ink-soft)}
.sat-d{color:var(--ink-body)}

/* ---------- 4. MEDALHÕES ---------- */
.med{
  background:radial-gradient(120% 120% at 50% 12%,
    rgba(214,154,60,0.16),rgba(24,15,8,0.9) 68%);
  border:1px solid var(--line-25);
  color:var(--gold-honey);
  box-shadow:inset 0 1px 0 var(--line-30);
}
.med--lg{
  border-color:var(--line-40);
  color:var(--champagne);
  box-shadow:inset 0 1px 0 var(--line-45),
             0 0 34px -12px rgba(214,154,60,0.45);
}
/* o medalhão do satélite também recua */
.sat .med{border-color:var(--line-15);color:var(--gold-mid);box-shadow:none}

/* ---------- 5. SETAS ---------- */
.seta{border-top-color:var(--line-30)}
.seta--esq::after{border-left-color:var(--gold-mid)}
.seta--dir::after{border-right-color:var(--gold-mid)}

/* ---------- 6. SELOS, com o tratamento do selo do cabeçalho ----------
   O selo do cabeçalho usa canto chanfrado por clip-path, mono, 0.22em de
   entreletra e --label-gold. Os selos da cena herdam a mesma gramática, em
   escala menor, para a página não passar a ter dois tipos de rótulo. */
.selo{
  border-radius:0;
  --cut:8px;
  clip-path:polygon(var(--cut) 0,100% 0,100% calc(100% - var(--cut)),
                    calc(100% - var(--cut)) 100%,0 100%,0 var(--cut));
  letter-spacing:.22em;
  border-color:var(--line-40);
  background:var(--bg-dark);
}
.selo--painel{
  border-color:var(--line-45);
  color:var(--champagne);
  box-shadow:0 0 26px -8px rgba(214,154,60,0.5);
}
.sat .selo{border-color:var(--line-20);color:var(--label-gold)}

/* ---------- selo do CABEÇALHO: texto novo + glifos ----------
   A referência traz glifos decorativos dos dois lados. O sprite não tem
   equivalente, e a orientação foi usar caractere tipográfico em vez de criar
   SVG: ✦ (U+2726) e ◇ (U+25C7), que o mono do projeto desenha. Entram por
   ::before/::after, então NÃO vão para o fluxo de texto nem são lidos por
   leitor de tela — são ornamento, não conteúdo. */
.bonus-eyebrow span{display:inline-flex;align-items:center;gap:10px}
.bonus-eyebrow span::before{content:"\2726";font-size:9px;opacity:.85}
.bonus-eyebrow span::after{content:"\25C7";font-size:8px;opacity:.85}

/* ---------- 7. FAIXA DE CHIPS ---------- */
.chips{
  background:linear-gradient(180deg,var(--bg-card),var(--bg-alt));
  border-color:var(--line-20);
  box-shadow:0 24px 60px -40px rgba(0,0,0,0.9),
             inset 0 1px 0 var(--line-12);
}
.chip i{color:var(--gold-mid)}
.chip b{color:var(--ink-title)}

/* ==========================================================================
   ETAPA 3 · REFLOW M2 — "FAIXA COMPACTA"
   Os satélites deixam de ser cards verticais e viram LINHAS horizontais:
   medalhão à esquerda, texto à direita. Mesma informação, muito menos
   altura, porque a largura do celular passa a ser aproveitada.
   ========================================================================== */
@media (max-width:880px){
  .cena{
    --cena-w:100%;
    width:100%;margin-inline:0;
    display:flex;flex-direction:column;gap:10px;
  }
  .cena-centro{order:1}
  .sat--esq{order:2}
  .sat--dir{order:3}
  .seta{display:none}

  /* satélite vira linha: medalhão fixo à esquerda, texto fluindo à direita */
  .sat{
    scale:1;
    display:grid;grid-template-columns:auto minmax(0,1fr);
    grid-template-areas:"selo selo" "med tit" "med txt";
    grid-template-rows:auto auto auto;
    gap:6px 14px;align-items:start;
    padding:16px 16px 18px;
  }
  .sat .selo{grid-area:selo;justify-self:start}
  .sat .med{grid-area:med;width:44px;height:44px;margin-top:4px}
  .sat .med .ic{width:21px;height:21px}
  .sat-h{grid-area:tit;margin:0;font-size:16px}
  .sat-d{grid-area:txt;margin:4px 0 0;font-size:12px}

  /* o mockup encolhe e o painel continua ocluindo */
  .cena .dash{max-height:352px}
  .painel{
    margin:-96px auto 0;width:calc(100% - 24px);
    padding:24px 20px 22px;
    flex-direction:column;align-items:flex-start;gap:12px;
  }
  .painel-h{font-size:21px}
  .painel-d{font-size:12.5px}
  .med--lg{width:52px;height:52px}
  .med--lg .ic{width:24px;height:24px}

  /* chips numa faixa de 2x2 mais baixa */
  .chips{grid-template-columns:repeat(2,minmax(0,1fr));width:100%;margin-top:16px}
  .chip{padding:10px 14px}

  /* ⚠️ O leque sobe -84px do desktop. No celular, com a cena empilhada, esse
     valor faz os cards cobrirem o satélite 3. A subida é proporcional ao
     painel no desktop; aqui não há painel logo acima, há um card de bônus. */
  .bonus-section .cfw{margin-top:10px}

  /* ⚠️ OS INDICADORES VOLTAM PARA UMA LINHA no celular.
     A regra de container do mockup empilha os três KPIs em coluna abaixo de
     620px, e isso empurra o fim dos indicadores para 364px — depois do ponto
     onde o painel entra (256px). Resultado: o painel cortava os indicadores
     no meio, que é exatamente o que a composição não pode fazer, porque eles
     são o último conteúdo que precisa ficar visível. Em linha, terminam bem
     antes e o painel volta a ocluir DEPOIS deles. Economiza altura de quebra. */
  .cena .dash-kpis{grid-template-columns:repeat(3,minmax(0,1fr));gap:0}
  .cena .dash-kpi{padding-right:6px}
  .cena .dash-kpi+.dash-kpi{border-left:1px solid var(--line-12);border-top:0;padding-left:8px;padding-top:0}
  .cena .dash-kpi .di{font-size:15px}
  .cena .dash-kpi b{font-size:16px}
  .cena .dash-kpi i{margin-left:0;flex-basis:100%;font-size:7.5px}
  .cena .dash-sub{display:none}

  /* com os KPIs em linha o mockup pode encolher e o painel entra depois deles */
  .cena .dash{max-height:296px}
  /* -46 e nao -84: com o mockup em 296 e os indicadores terminando em 232,
     o -84 punha o topo do painel em 212 e ainda cortava os indicadores por
     20px. O negativo se mede a partir do FIM do mockup, nunca do topo. */
  .painel{margin-top:-46px}

  /* leque um pouco menor no celular, para a seção não passar de duas telas */
  .bonus-section .cfw{--cfcw:min(52vw,178px)}
}

/* ==========================================================================
   ETAPA 4b · CARDS DO LEQUE — TOM QUENTE, FORMA MAIS FECHADA E BANDEJA
   Ajustes sobre a P1 (packs claros), aprovada.
   ========================================================================== */

/* ---------- 1. TOM QUENTE, no lugar do branco puro ----------
   O gradiente é o MESMO que o .depo-box já usa (#faf6ee → #f2ece0), o
   off-white quente do projeto. Não é valor novo: é o padrão de casa para
   superfície clara, e por isso os cards passam a conviver com o dourado em
   vez de brigar com ele.

   ⚠️ AS DEZ CORES FORAM RECALIBRADAS, e não por preciosismo. As da camada
   de 20/08 foram calibradas contra BRANCO PURO e ficaram no limite, de
   4,56:1 a 4,70:1. Medidas contra o novo tom, TODAS AS DEZ REPROVAM, caindo
   para 3,94 a 4,05 — o piso escurece e a conta muda. As de baixo miram
   4,80:1 contra o ponto MAIS ESCURO do card (base do gradiente + véu de
   --pc 12%), com folga deliberada sobre o AA para não repetir o erro de
   ficar no limite. */
.cf-face{
  /* ⚠️ --lt-ink-3 TAMBÉM precisou descer, de #75684f para #695E47.
     O valor antigo media 4,64:1 contra a base do gradiente e eu quase o dei
     por aprovado assim — mas a superfície REAL do card não é a base, é a base
     COM o véu de --pc 12% por cima. Medido no DOM renderizado, a .cf-meta
     caía para 4,01:1 na Cardiologia, que tem o véu mais escuro dos dez.
     O novo valor mira 4,70 no pior caso e dá 4,71 a 5,04 nos dez.
     É o mesmo erro de método que esta camada já documenta duas vezes:
     medir contra a superfície nominal em vez da superfície pintada. */
  --lt-ink-3:#695E47;
  background:
    radial-gradient(122% 88% at 12% 0%,color-mix(in srgb,var(--pc) 12%,transparent),transparent 62%),
    linear-gradient(180deg,#faf6ee,#f2ece0);
}
.cf-card[data-i="0"]{--pc-ink:#174EE8} /* Clínica Médica    4,80:1 */
.cf-card[data-i="1"]{--pc-ink:#1E6F3C} /* Pediatria         4,81:1 */
.cf-card[data-i="2"]{--pc-ink:#B62121} /* Cardiologia       4,80:1 */
.cf-card[data-i="3"]{--pc-ink:#AE2368} /* Gineco e Obst.    4,81:1 */
.cf-card[data-i="4"]{--pc-ink:#146D50} /* Med. da Família   4,82:1 */
.cf-card[data-i="5"]{--pc-ink:#994A13} /* Ortopedia         4,80:1 */
.cf-card[data-i="6"]{--pc-ink:#6A37E0} /* Radiologia        4,81:1 */
.cf-card[data-i="7"]{--pc-ink:#1F6B75} /* Anestesiologia    4,81:1 */
.cf-card[data-i="8"]{--pc-ink:#8322DF} /* Psiquiatria       4,80:1 */
.cf-card[data-i="9"]{--pc-ink:#845A12} /* Dermatologia      4,80:1 */

/* ---------- 2. FORMA MAIS FECHADA ----------
   ⚠️ A proporção NÃO foi fechada baixando a altura, e a razão está no
   comentário da camada de 20/08: existe um PISO de 273px porque abaixo dele
   o verso do card vaza (medido: Clínica Médica vazava 31px a 227px de
   altura). Com o piso ativo, reduzir o multiplicador não faria efeito nenhum
   em telas grandes — o piso seguraria — e nas menores traria o vazamento de
   volta.
   A saída é a inversa: o card fica mais quadrado ficando mais LARGO. A
   altura permanece na casa dos 273px, o verso continua cabendo com folga a
   mais, e a proporção cai de 1,30 para 1,12. */
.cfw{--cfcw:clamp(200px,17vw,248px)}
@media (min-width:760.05px){
  .cf-stage,.cf-card{height:max(calc(var(--cfcw) * 1.12),273px)}
}
/* raio menor: os cantos muito arredondados eram --r-card (24px) */
.cf-face{border-radius:14px}

/* ---------- 3. SEM BANDEJA: TRÊS CAMADAS QUE SE CORTAM ----------
   ⚠️ A primeira tentativa foi uma BANDEJA: uma caixa escura com borda
   própria atrás do leque. Estava errada, e o sintoma era visível — a borda
   de topo dela desenhava uma linha horizontal logo abaixo do texto do
   painel, linha que não existe na referência.

   Na referência não há superfície nova. O que existe é uma pilha em que
   cada camada corta a anterior:

       mockup      tem a base ocluída pelo painel
       painel      tem a base ocluída pelo leque
       leque       fica por cima, sem nada cortando

   O painel apenas DESCE mais, e a borda inferior dele nunca aparece porque
   está atrás dos cards. Por isso o padding-bottom é grande e assimétrico:
   ele não é respiro tipográfico, é comprimento de camada a ser cortado. */
.painel{padding-bottom:132px}

/* a moldura do painel já morre para baixo (--line-15 no fim do gradiente),
   então a base dele não desenha linha nenhuma sob os cards */
.bonus-section .cf-frame{position:relative;z-index:1}
.bonus-section .cf-nav{z-index:2}

/* o leque sobe mais: com -84 sobravam 93px de painel VAZIO entre o fim do
   texto e o card mais alto, e o corte perdia a força. Com -130 o vão cai
   para ~47px e o leque passa a cortar 87px do painel. */

.bonus-section .cfw{margin-top:-130px}

@media (max-width:880px){
  .painel{padding-bottom:104px}
}

/* --- VARIANTE A: card 230 - sobreposicao forte --- */
/* ⚠️ O mockup encolhe de 1070 para 780. Com o painel a 660 e o mockup a
   1070, sobravam 162px de dashboard visível de CADA lado do painel, e nessa
   faixa aparecia conteúdo cortado da grade de categorias ("…latórios",
   "03/10"). A correção NÃO é encolher o mockup: é aproximar as três larguras
   por cima, com o painel perto do interior do mockup e o leque crescendo. */
.cena{--cena-w:min(1400px, calc(100vw - 40px));--sat-w:165px;--gap:0px}
.cfw{--cfcw:clamp(180px,17vw,230px)}
@media (min-width:760.05px){
  /* piso de altura MEDIDO, nao herdado: o verso precisa de 253 a 258px na
     faixa de 200 a 245 de largura. O piso de 273 era conservador. */
  .cf-stage,.cf-card{height:max(calc(var(--cfcw) * 1.12),258px)}
}
.seta{display:none}

/* ==========================================================================
   REVERSAO 22/08 — a cena remedida contra a referencia
   ==========================================================================
   Duas decisoes registradas acima sao REVOGADAS aqui, de proposito, e as
   antigas ficam legiveis logo antes para o historico nao sumir.

   ⚠️ REVERSAO 1 — A HIERARQUIA DE LARGURAS INVERTE NA PONTA DE CIMA.
   O comentario grande da `.painel` (acima) declara `painel < leque < mockup`
   e diz que o mockup e a unica camada que sobra visivel dos dois lados.
   NAO E MAIS. A ordem passa a ser:

       painel  <  mockup  <  leque
        820        876       945

   Agora e o LEQUE que sobra por fora, cobrindo o mockup nas duas pontas em
   34,5px de cada lado. O mockup deixa de ser a moldura da cena e vira camada
   coberta. O painel continua sendo o mais estreito e continua so mostrando a
   faixa de cima.

   ⚠️ REVERSAO 2 — CINCO CARDS SEM SOBREPOSICAO CAI.
   O comentario dentro de `pintar()` no main.js registra "o dono nao quer card
   cortado na ponta" e, a partir disso, cards separados por vao POSITIVO
   (GAP 0.12). O que o dono nao quer continua sendo CORTE na ponta, e isso e
   mantido: seguem CINCO cards, seguem inteiros, nenhum recortado. O que cai e
   a exigencia de NAO se sobreporem. Os cards passam a se cobrir, e e essa
   sobreposicao que encolhe o leque visivel de 1055 para 945 sem encostar em
   `--cfcw`.

   ⚠️ `--cfcw` FICA EM 230 E NAO E NEGOCIAVEL. Encolher o card reabre a altura
   do verso, que ja fechou em 258 (ver o piso medido logo acima). Toda a
   reducao do leque sai de sobreposicao, nenhuma de largura de card.

   O ORCAMENTO HORIZONTAL, e ele fecha exato:
       2 x 200 (satelite) + 2 x 62 (vao) + 876 (mockup) = 1400
   O mockup NAO e declarado: e a pista central `minmax(0,1fr)` do grid, logo
   ele e o resto da conta. Mexer em --sat-w ou --gap tira do mockup 2x.

   PROPORCAO CONTRA A REFERENCIA:
       satelite 200 = 14,3% da cena   referencia 14,5%
       vao       62 =  4,4%           referencia  4,5%
       mockup   876 = 62,6%           referencia 61,4%
       leque    945 = 67,5%           referencia 67,5%          */
.cena{--sat-w:200px;--gap:62px}

/* ==========================================================================
   AUDITORIA 22/08 — itens E, C, B, A, G aplicados nesta ordem
   ==========================================================================
   A ordem nao e estetica, e de dependencia: cada item muda a medida do
   seguinte. E (entrelinha) muda a altura de todo bloco de texto; C (piso do
   titulo) depende da entrelinha nova; B depende da altura da primeira linha;
   A e geometria de glifo; G e a calibracao final contra as alturas ja
   fechadas. O item D foi CANCELADO pelo dono. */

/* ---------- E · entrelinha 1,5 unificada e margin-bottom proporcional ----
   MEDIDO: das tres descricoes da cena, duas ja estavam em 1,5 e uma nao:
       .painel-d    13px x 1,5  = 19,5   ok
       .sat-d       12px x 1,5  = 18     ok
       .dash-cat-d  10,5px x 1,45 = 15,22   <-- a fora da regra
   Entao E nao e "unificar tudo", e corrigir UMA. O resto da unificacao ja
   tinha acontecido antes e afirmar que as tres estavam soltas seria repetir
   uma medicao velha.

   MARGIN-BOTTOM PROPORCIONAL, e a definicao importa: proporcional ao CORPO
   do titulo (0,5em), arredondado ao passo da escala de base 8 do item G.
   Sem o arredondamento, E e G brigam: 0,5em daria 8,5 e 13, que nao estao
   na escala, e G viria depois e sobrescreveria. Com ele, os dois itens
   dizem a mesma coisa.
       .sat-h    17px -> 0,5em = 8,5  -> passo 8
       .painel-h 26px -> 0,5em = 13   -> passo 16
   Era 8 e 6: o titulo MAIOR tinha o respiro MENOR, que e o avesso da regra. */
.dash-cat-d{line-height:1.5}
.painel-h{margin-bottom:16px}

/* ---------- C · piso de duas linhas no titulo do satelite ----------------
   MEDIDO, por offsetTop e nunca por rect, com o satelite em 200:
       Bonus 2  titulo 1 linha (20px)  descricao comeca em 151
       Bonus 3  titulo 2 linhas (39px) descricao comeca em 170
   19px de descompasso entre dois cards irmaos, e a causa e so a contagem de
   linhas do titulo. O piso reserva as duas linhas sempre, e as descricoes
   passam a partir do mesmo y.
   2,3em = 2 linhas x 1,15 de entrelinha. Em `em`, entao acompanha o corpo se
   ele mudar; um valor em px voltaria a descolar.

   ⚠️ SO NO DESKTOP, e a media query nao e decoracao. C existe para alinhar
   DOIS satelites LADO A LADO: reservar duas linhas faz a descricao de ambos
   comecar no mesmo y. No celular eles empilham em coluna unica e nao ha nada
   com que alinhar — o piso vira 19px de ar morto em cada card, por card.
   Sem esta media query a regra ainda VENCE a do celular (linha ~7389), que
   vem antes no arquivo, e injeta piso e margin-top nos dois satelites
   empilhados. Medido: custava 81px em 360 e levava a secao de 2,127 para
   2,229 telas, estourando o teto de 2,2. */
@media (min-width:760.05px){
  .sat-h{min-height:2.3em;margin-top:16px}
}

/* ---------- B · unificacao pela primeira linha --------------------------
   ⚠️ B FECHA NOS CHIPS, e a regra de encerramento e do proprio dono: se o
   satelite EMPILHA o medalhao acima do titulo, B termina ali. Medido, ele
   empilha (`.sat` e fluxo de bloco: selo, medalhao, titulo, descricao), e um
   medalhao empilhado nao esta alinhado a linha nenhuma — nao ha duas
   gramaticas para unificar, ha uma so.
   Os chips ja medem delta ZERO contra o centro da primeira linha, nos
   quatro. Nada a aplicar. Nenhuma declaracao aqui, de proposito.

   REGISTRADO, FORA DE ESCOPO: o `.painel` NAO empilha (e flex com
   align-items:center) e alinha o medalhao pelo bloco inteiro, com delta
   MEDIDO de 22,5px contra o centro da primeira linha do titulo. E o mesmo
   defeito que B descreve, num terceiro caso que o handoff nao nomeou. Nao
   foi corrigido porque o escopo de B foi fechado nos chips pelo dono. */

/* ---------- A · centragem optica dos glifos -----------------------------
   Metodo: cada simbolo do sprite usado na cena foi RASTERIZADO a 128px e o
   centro de massa saiu da media das posicoes ponderada pelo alfa. Nao e o
   centro da caixa: e onde o peso do desenho realmente esta. Limiar de 3%.

   ⚠️ O `ic-gift` NAO E O CASO. O handoff o aponta como "o caso obvio,
   lacada em cima e caixa embaixo". Medido, ele da -0,73% e PASSA folgado: a
   lacada e leve e vazada, a caixa e larga mas de contorno fino, e os dois
   pesos se equilibram. A intuicao estava errada e a medicao desmente.

   Os dois que estouram os 3% sao outros:
       ic-lock    +5,09%   massa ABAIXO do centro (o corpo do cadeado pesa
                           mais que a alca, que e so um arco vazado)
       ic-brain   -3,49%   massa ACIMA (as circunvolucoes ficam no topo e a
                           base do desenho e quase vazia)
   Os outros seis medidos: ic-chat -2,71 · ic-escudo -1,81 · ic-shield -1,59
   · ic-gift -0,73 · ic-bolt -0,20 · ic-stack 0,00. Todos passam.

   A compensacao pertence ao GLIFO, nao a instancia: onde ele aparecer na
   cena, aparece corrigido. Por isso o seletor casa o `use`, e nao o lugar.
   Percentual, nao px: em translate a porcentagem e da propria caixa do
   elemento, entao a correcao acompanha os tamanhos (26px no medalhao,
   ~15px na linha do cadeado, 11px na barra de endereco do mockup). */
.bonus-section svg:has(use[href="#ic-lock"]){transform:translateY(-5.09%)}
.bonus-section svg:has(use[href="#ic-brain"]){transform:translateY(3.49%)}

/* ---------- G · escala de espacamento, base 8 --------------------------
   Escala: 8 / 16 / 24 / 32 / 48. Base 8 e nao 16, por decisao do dono: uma
   escala com piso em 16 nao serve a uma cena que precisa de relacoes abaixo
   disso (o titulo->descricao do satelite e 8).
   Aplicada POR ULTIMO, contra as alturas ja fechadas por E e C, porque cada
   um deles mexeu na altura dos blocos e medir antes seria medir duas vezes.

   MEDIDO DEPOIS DE E E C, e o que mudou:
       eyebrow -> titulo        20  -> 16
       titulo  -> lede          35  -> 32
       lede    -> cena          40  -> 32
       selo    -> medalhao       0     ja on-scale (zero e valido)
       medalhao-> titulo        16     ja on-scale (veio do margin-top de C)
       titulo  -> descricao      8     ja on-scale
       painel-h-> painel-d      16     ja on-scale (veio de E)
       chips   -> dica          16     ja on-scale
       dica    -> botao         30  -> 32
       botao   -> acesso        14  -> 16

   ⚠️ DUAS EXCECOES, e as duas sao MEDIDAS, nao concessoes.

   1. `.chips{margin-top:2px}` FICA EM 2 E ESTA CERTO. O valor de CAIXA esta
      fora da escala de proposito: o leque nao chega a base da propria .cfw,
      sobra ~6px de caixa vazia embaixo do card mais baixo. Medido, o vao
      OPTICO entre a base do leque e o topo dos chips e 8,2px — ou seja, ja
      cai no primeiro passo da escala. Subir a caixa para 8 levaria o optico
      a 14,2 e QUEBRARIA o ritmo em vez de arrumar. A escala vale para o que
      se ve, nao para o que o box model diz.

   2. `.painel .med -> .painel-h` da -80 e NAO e vao nenhum. O `.painel` e
      flex com align-items:center: o medalhao fica AO LADO do texto, nao
      acima. Medir vao vertical entre irmaos de uma linha flex produz numero
      sem significado. Fica anotado para nao ser "corrigido" numa proxima
      passada.

   ⚠️ TROCA REGISTRADA no vao lede -> cena: era `clamp(28px,4vh,52px)`, um
   valor que RESPONDE A ALTURA da janela, e por isso dava 40 nesta medicao e
   daria outro numero noutra. Virou 32 fixo. Trocou-se responsividade
   vertical por um vao que pertence a escala. Se o dono preferir o contrario,
   e so voltar o clamp e anotar este vao como terceira excecao. */
.bonus-eyebrow{margin-bottom:16px}
#bonus .bonus-title{margin-bottom:clamp(24px,2.6vw,32px)}
.cena{margin-top:32px}
.bonus-section .acesso{margin-top:16px}

/* ==========================================================================
   ACABAMENTO 22/08 — o painel contra o recorte ampliado da referencia
   ==========================================================================
   Cinco itens, so no desktop. Nenhum texto muda. Tres medicoes antes:

   1. `.painel` tem overflow VISIBLE nos dois eixos e clip-path:none. O
      `.kit-shot` e a `.cena-centro` tambem. NAO ha recorte em lugar nenhum
      do caminho, entao o selo pode crescer sem risco de decapitacao. Hoje
      ele ja transborda 11,2px acima da borda e nao e cortado.
   2. O painel PARA antes dos cards? Nao: ja entra 86,9px atras deles. Mas
      termina 199,5px ACIMA da base do leque, entao nao atravessa a faixa.
   3. A borda ja e PSEUDO-ELEMENTO com mascara: `.painel::before`, inset:0,
      padding:1px, `linear-gradient(180deg)` e o par de mascaras com
      `mask-composite:exclude` que recorta o anel. Nao e `border` real, nao e
      `border-image`, nao e box-shadow. Entao nao ha migracao a fazer: o
      item 2 tem onde morar. O `::after` do painel esta LIVRE (content:none).

   ---------- 1 · O PAINEL DESCE POR TRAS DOS CARDS --------------------
   Altura acrescentada: 214,6px (de 265,6 para 480,2). A base sai de
   10156,4 para 10371,0 e passa 15,1px ABAIXO da base do leque (10355,9),
   em vez de parar 199,5px antes dela.

   ⚠️ O CRESCIMENTO NAO PODE ENTRAR NO FLUXO. O `.cfw` e IRMAO da `.cena` e
   sobe por `margin-top:-130px`; se a `.cena` crescer 214,6px, o leque desce
   junto e a secao inteira cresce. Por isso o `margin-bottom` NEGATIVO de
   -214,6: a caixa PINTADA cresce, a caixa de MARGEM continua com os mesmos
   265,6px, e nada abaixo se move. Verificado: altura da secao inalterada.

   ---------- 3 · CENTRAGEM NA FAIXA VISIVEL ---------------------------
   A faixa que se ve e do topo do painel ate o topo dos cards: 178,7px, com
   centro em 89,4. O conteudo estava centrado em 90,8, entao o desvio era de
   1,4px — bem menor do que parecia, e a razao e que o `padding-bottom:132px`
   ja empurrava o conteudo para cima de forma nao intencional.
   `padding-top` de 48 para 46,6 zera o desvio. O `padding-bottom` absorve a
   diferenca para a caixa crescer exatamente 214,6.

   ⚠️ E O ALINHAMENTO DO MEDALHAO JA ESTA CERTO, medido: delta ZERO entre o
   centro optico do medalhao e o centro optico do bloco de texto. Nao e
   sorte: o painel e flex de UMA linha com altura automatica, entao a
   altura da linha e a do item mais alto (o texto, 83,6) e o
   `align-items:center` centra o medalhao (76) nela. Nao ha o que corrigir,
   e mexer aqui quebraria o que ja funciona. O item B da auditoria de fato
   nao se aplica: aqui o alinhamento e por bloco, nao por primeira linha.

   ⚠️ OS CINCO ITENS SAO SO DO DESKTOP, e a media query abaixo nao e zelo:
   sem ela estas regras vencem as do celular, que vem ANTES no arquivo. A
   `.painel{padding-bottom:104px}` do celular seria sobrescrita pelos 348 e a
   secao em 360 subia de 1714 para 1766px, de 2,143 para 2,208 telas,
   ESTOURANDO o teto de 2,2. E a mesma armadilha que o item C da auditoria
   ja tinha mostrado: regra nova no fim do arquivo nao respeita breakpoint
   por conta propria. Medido e corrigido. */
@media (min-width:760.05px){

.painel{padding-top:46.6px;padding-bottom:348px;margin-bottom:-214.6px}

/* ---------- 2 · ESMAECIMENTO DA CAMADA DE ACABAMENTO ----------------
   NAO e `opacity` no painel: baixar a opacidade do bloco faria o mockup
   transparecer atraves do texto e do medalhao e a camada perderia a leitura
   de solido. O corpo escuro continua OPACO ate o fim; quem dissolve e so a
   borda e o brilho.

   CALIBRAGEM, medida contra a altura final de 480,2px:
       topo dos cards .......... 37,2% do painel
       fim do trecho solido .... 28%   = 134,5px = 44,2px ACIMA dos cards
       transparencia total ..... 58%   = 278,5px, muito antes da base do
                                         leque (que fica a 96,8%)
   A dissolucao ja esta em curso quando o card comeca a cobrir, que era o
   pedido, e termina bem antes de o painel reaparecer embaixo do leque.

   ⚠️ A MASCARA TEM TRES CAMADAS, e a ordem importa. As duas de baixo sao as
   que ja existiam e recortam o ANEL de 1px (content-box excluida da caixa
   inteira). A de cima e o fade, composta com `intersect`. Sem o intersect o
   fade substituiria o anel em vez de multiplicar por ele.
   E `mask-composite` PRECISA vir depois do atalho `mask`, senao o atalho o
   reseta para `add` e o anel vira um retangulo cheio.

   ---------- 5 · BRILHO IRREGULAR NA BORDA ---------------------------
   Gradiente LINEAR distribui o brilho de forma monotonica e le como
   degrade. Conico com paradas irregulares le como LUZ. As paradas nao sao
   equidistantes de proposito: 0 / 48 / 92 / 238 / 330 — espacamento regular
   voltaria a ler como padrao.

   ANGULOS CONFERIDOS PELA GEOMETRIA DA CAIXA (820 x 480,2, centro no meio),
   e nao chutados. Com `from 210deg`, a posicao p de um ponto do perimetro e
   (theta - 210) mod 360, onde theta e o angulo do ponto visto do centro:
       canto superior esquerdo  theta 300,4  ->  p  90,4  -> quase forte ✓
       meio da lateral direita  theta  90    ->  p 240    -> quase fraco ✓
       centro da base           theta 180    ->  p 330    -> forte        ✓
   O ponto de partida sugerido (paradas em 70/140/250) punha p=90,4 entre
   fraco e forte, com o canto superior esquerdo APAGADO — o oposto do
   pedido. As paradas foram deslocadas para 48/92/238 para trazer o maximo
   para o canto certo.

   Interpolacao em oklch para nao passar pelo meio-tom sujo entre os dois
   dourados. Os tokens globais NAO foram convertidos: os dois locais saem
   por `color-mix(in oklch, ...)` a partir de --gold-honey e --gold-mid. */
.painel::before{
  --ouro-forte:color-mix(in oklch,var(--gold-honey) 92%,var(--champagne));
  --ouro-fraco:color-mix(in oklch,var(--gold-mid) 16%,transparent);
  background:conic-gradient(in oklch from 210deg,
    var(--ouro-forte)   0deg,
    var(--ouro-fraco)  48deg,
    var(--ouro-forte)  92deg,
    var(--ouro-fraco) 238deg,
    var(--ouro-forte) 330deg,
    var(--ouro-forte) 360deg) border-box;
  -webkit-mask:
    linear-gradient(to bottom,#000 0%,#000 28%,transparent 58%),
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
          mask:
    linear-gradient(to bottom,#000 0%,#000 28%,transparent 58%),
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
  -webkit-mask-composite:source-in,xor;
          mask-composite:intersect,exclude;
}

/* O BRILHO tambem tem de esmaecer, e ele NAO cabe no ::before: um
   box-shadow ali seria recortado pelo anel de 1px da mascara e sumiria.
   Vai para o ::after, que estava livre, limitado aos mesmos 62% de altura
   em que o fade da borda ja terminou. Assim o halo dourado nunca emana da
   base nova do painel, que fica 15,1px abaixo dos cards.
   O box-shadow dourado sai do `.painel`; a sombra ESCURA de profundidade
   fica, porque ela nao e acabamento, e a que assenta a camada. */
.painel{box-shadow:0 40px 90px -40px rgba(0,0,0,0.85)}
.painel::after{
  content:"";position:absolute;left:0;right:0;top:0;height:62%;
  z-index:0;pointer-events:none;border-radius:var(--r-lg);
  box-shadow:0 0 90px -20px rgba(214,154,60,0.32);
}

/* O MESMO tratamento no mockup, DEFASADO em 180 graus (`from 30deg`) para
   as duas bordas nao pulsarem em fase. Sem mascara de fade aqui: o mockup
   nao desce por tras de nada. */
.cena .kit-shot::after{
  --ouro-forte:color-mix(in oklch,var(--gold-honey) 92%,var(--champagne));
  --ouro-fraco:color-mix(in oklch,var(--gold-mid) 16%,transparent);
  background:conic-gradient(in oklch from 30deg,
    var(--ouro-forte)   0deg,
    var(--ouro-fraco)  48deg,
    var(--ouro-forte)  92deg,
    var(--ouro-fraco) 238deg,
    var(--ouro-forte) 330deg,
    var(--ouro-forte) 360deg) border-box;
}

/* ---------- 4 · O SELO BONUS 1 ---------------------------------------
   Na referencia ele e elemento de destaque, com preenchimento dourado e
   glow proprio, nao rotulo discreto. Cresce em corpo, em respiro interno e
   em brilho, e inverte: texto escuro sobre ouro, em vez de ouro sobre
   escuro.
       corpo      9px  -> 12px
       respiro    4/12 -> 9/24
       chanfro    8px  -> 11px   (--cut acompanha, senao a aresta encolhe
                                  em proporcao e o selo perde o desenho)
   BONUS 2 e BONUS 3 NAO mudam. A assimetria e intencional e acompanha a
   lede, que diz que o principal e o Kit.

   ⚠️ A CENTRAGEM DEIXA DE SER POR `margin-left:-52px`. Aquele -52 era
   metade da largura ANTIGA, cravada: com o selo maior ele sairia do centro
   para a esquerda. Passa a `translate:-50% -50%`, que centra por proporcao
   e nao depende da largura.
   Cabe inteiro: a medicao 1 mostrou overflow VISIBLE em todo o caminho
   (`.painel`, `.kit-shot`, `.cena-centro`) e clip-path apenas no proprio
   selo, que e o desenho dele. */
.selo--painel{
  margin-left:0;
  translate:-50% -50%;
  --cut:11px;
  padding:9px 24px;
  font-size:12px;
  color:var(--bg-dark);
  background:linear-gradient(180deg,var(--champagne),var(--gold-mid));
  border-color:var(--gold-honey);
  box-shadow:0 0 34px -6px rgba(214,154,60,0.75);
}

/* ======================================================================
   VOLTA 2 DA AUDITORIA — dez correcoes contra a referencia
   ======================================================================
   Ordem de aplicacao ditada pela interacao entre elas, nao por gosto. Os
   itens 4, 6, 7, 8 e 9 mexem TODOS na mesma faixa de luminancia da cena;
   calibrar um isolado quebra o seguinte. Por isso a amostragem completa foi
   refeita depois de tudo aplicado, e nao item a item.
   Ficaram de fora por decisao do dono: o 11 (o chanfro do selo e assinatura
   do sistema visual) e o 12 (glifo de navegacao exige olhar a pagina toda,
   virou pendencia separada).

   ---------- 4 e 10 · GRAMATICA DE PROFUNDIDADE, agora explicita --------
   REGRA DA CENA, e ela vale para toda camada nova daqui em diante:

       CAMADA MAIS A FRENTE E MAIS ESCURA.

   Nao e estilo, e o que faz a pilha ler como pilha. Estava sendo violada
   justamente pela camada central. Medido antes:
       mockup  14,9      painel  19,1 a 22,3      satelite  14,9
   O painel, que esta NA FRENTE do mockup, era 28 a 50% mais CLARO que ele.
   O satelite ja obedecia, mas por acidente e nao por regra: ninguem tinha
   escrito a regra em lugar nenhum.
   O painel sai de --bg-card (o tom mais claro do sistema) para uma mistura
   de --bg-alt com --bg-dark, ficando abaixo do mockup nos dois extremos do
   gradiente. Os cards do leque sao a excecao consciente: sao claros porque
   sao a camada de conteudo, nao de superficie. */
.painel{
  background:linear-gradient(160deg,
    color-mix(in oklch,var(--bg-alt) 55%,var(--bg-dark)),
    var(--bg-dark) 70%);
}

/* ---------- 1 e 2 · O FADE PASSA A EXTINGUIR ANTES DO CARD -----------
   MEDIDO: o card cobre a borda em y=1003, 49,2% do painel, NOS DOIS LADOS —
   a geometria e simetrica. A mascara so zerava em 58%, entao a borda era
   cortada ainda com 29% da opacidade, e o corte tinha aresta.
   A assimetria que se via NAO era geometrica, era fotometrica: no ponto de
   corte a esquerda media 42,8 e a direita 32,4, porque o conico do item 5 e
   assimetrico DE PROPOSITO. Por isso a correcao e uma so, no fade, e nao
   uma de cada lado: baixando o teto, os dois caem juntos e o que sobra de
   diferenca fica abaixo do limiar de percepcao.
   Novo fade: solido ate 18%, transparente em 46% = y 987, com 16px de folga
   acima da linha do card. */
.painel::before{
  -webkit-mask:
    linear-gradient(to bottom,#000 0%,#000 18%,transparent 46%),
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
          mask:
    linear-gradient(to bottom,#000 0%,#000 18%,transparent 46%),
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
  -webkit-mask-composite:source-in,xor;
          mask-composite:intersect,exclude;
}

/* ---------- 3 · A LINHA NA BASE DO MOCKUP DISSOLVE -------------------
   MEDIDO: a aresta inferior do anel do mockup (y=910,8) aparecia como DOIS
   cotocos ladeando o painel — x 282..310 com pico 69,3 e x 1128..1158 com
   pico 173,6, contra fundo 17,1. O direito era DEZ VEZES o fundo. Na
   referencia essa linha nao existe.
   ⚠️ E eu tinha errado o diagnostico: supus que o anel desenhava POR CIMA do
   painel, porque tem z-index 4 contra 2. Nao desenha. O `.kit-shot` tem
   z-index:1 e cria contexto de empilhamento, que prende o ::after abaixo do
   painel. Por isso a linha so aparece nos dois cotocos laterais.
   Mesma tecnica do painel, com o teto mais alto porque aqui nao ha card
   cobrindo: solido ate 55%, transparente em 85% = y 833, bem acima da base
   em 910,8. O topo do mockup, que esta correto, fica intacto. */
.cena .kit-shot::after{
  -webkit-mask:
    linear-gradient(to bottom,#000 0%,#000 55%,transparent 85%),
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
          mask:
    linear-gradient(to bottom,#000 0%,#000 55%,transparent 85%),
    linear-gradient(#000 0 0) content-box,
    linear-gradient(#000 0 0);
  -webkit-mask-composite:source-in,xor;
          mask-composite:intersect,exclude;
}

/* ---------- 6, 7 e 8 · O TRIO DA LUMINANCIA -------------------------
   Aplicados JUNTOS de proposito. Os tres disputam a mesma faixa de tons
   escuros: um halo mais largo CLAREIA a moldura, uma vinheta mais fechada a
   ESCURECE, e a poca sob os cards depende do fundo que sobrar. Calibrar um
   de cada vez faria o seguinte desmentir o anterior.

   6 · HALO DO MOCKUP. Media alcance de ~50px (41 na borda, 25 a 50px, fundo
       em 70px). O spread negativo de -20 comia metade do desfoque. Vai para
       160px de desfoque com spread -10: envolve a cena em vez de contornar.
   7 · VINHETA. Media razao borda/centro de 0,79 — quase nenhuma. O fundo da
       cena vem so do `.cena::before`; a `.bonus-section` esta com
       `background:none` desde a emenda da comunidade. Entra uma camada
       propria de vinheta no ::before da secao, com z-index 0 para ficar
       ATRAS de tudo (o ::before vem antes dos filhos na ordem de pintura;
       um ::after ficaria por cima e apagaria a cena).
   8 · POCA SOB OS CARDS. Media delta de 4 a 5 niveis, quase nada. A causa
       era dupla: spread -24 anulando o alcance, e cor MARROM (60,40,10) que
       sobre fundo escuro nao escurece. Vira preto com spread -12. */
.cena .dash{
  box-shadow:
    0 60px 140px -50px rgba(0,0,0,0.9),
    0 0 160px -10px rgba(214,154,60,0.38);
}
.bonus-section::before{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  background:radial-gradient(78% 62% at 50% 46%,
    transparent 0%,transparent 42%,rgba(0,0,0,0.62) 100%);
}
.bonus-section .cf-face{
  box-shadow:
    0 1px 2px rgba(0,0,0,0.08),
    0 26px 54px -12px rgba(0,0,0,0.55);
}

/* ---------- 9 · BORDA DOS SATELITES ---------------------------------
   Depois do item 4 de proposito: o contraste da borda e relativo ao
   interior, e o interior da cena mudou de tom. Media 27,9 contra fundo
   20,4 — sete niveis e meio, praticamente invisivel. --line-12 vai para
   --line-25, que e o mesmo contorno do painel antes desta rodada. */
.sat{border-color:var(--line-25)}

/* ---------- 5 · AS SETAS VOLTAM -------------------------------------
   ⚠️ REVERSAO DE UMA DECISAO MINHA, e a premissa e que caiu. Eu desliguei as
   setas quando o vao entre satelite e mockup era ZERO: nao havia onde
   desenha-las. Com o vao em 62px ha espaco de sobra, e a referencia mostra
   as duas. Manter escondido virou teimosia, nao economia.
   A geometria ja estava pronta e nunca foi removida: `.seta` vive nas
   colunas 2 e 4 do grid, que valem `var(--gap)`, com justify-self:center e
   align-self:center. Com 16px de haste num vao de 62 sobram 23px de cada
   lado, e a ponta (4px de borda, ancorada em -4) chega a 19px da borda do
   mockup. Nao encosta em nada. Conferido por medicao.
   No celular segue escondida pela regra do proprio breakpoint. */
.seta{display:block}

/* ---------- D1 · A VINHETA PARA DE ESCURECER O CAMPO DO H1 ----------
   O item 7 fechou as bordas em TODA a altura da secao, e o H1 mora nela.
   MEDIDO, no campo atras do titulo (y=165 e y=290):
       ponta esq 20,6   centro 24,9   ponta dir 20,9   razao 0,83
   As pontas da primeira linha caiam num fundo mais fechado que o miolo, o
   que a referencia nao faz.
   A vinheta nao muda de forma nem de intensidade: ganha uma MASCARA vertical
   que a mantem fora da faixa do cabecalho. Transparente ate 23% da secao
   (y=368, logo abaixo da base da lede em 358,8) e cheia em 30% (y=480). O
   topo do mockup, em 390,8, cai no meio da rampa, entao a vinheta entra
   junto com a cena e nao ha emenda horizontal visivel.

   ⚠️ CORRECAO DE REFERENCIA DE MEDIDA: a razao 0,49 da volta 2 foi medida em
   y=250, que e exatamente a faixa que este ajuste manda uniformizar. Ela vai
   subir para perto de 1,0 la, DE PROPOSITO. A razao da vinheta na faixa da
   CENA tem de ser lida numa linha de fundo limpo dentro dela: y=1520, que
   media 0,55 antes e e o numero a preservar. */
.bonus-section::before{
  -webkit-mask-image:linear-gradient(to bottom,transparent 0%,transparent 23%,#000 30%);
          mask-image:linear-gradient(to bottom,transparent 0%,transparent 23%,#000 30%);
}

/* ---------- D2 · PRESENCA DAS SETAS --------------------------------
   ⚠️ SUBIR LUMINANCIA ERA A ALAVANCA ERRADA, e a medicao mostra por que. Na
   altura da seta (y=711), luminancia bruta:
       fundo do vao        33,7
       borda do MOCKUP     38,7      (+5 de contraste)
       borda do SATELITE   43,0      (+26, o fundo dela e ~17)
       HASTE da seta       68        (+34)
       PONTA da seta      104        (+70)
   A seta ja estava ACIMA das duas bordas. Ela lia como tracinho por
   TAMANHO: 1px de haste e ponta de 8px. A leitura de "fraca" vinha da massa,
   nao do brilho.
   Entao o ajuste inverte: a haste ENGROSSA de 1 para 2px e a ponta cresce de
   8 para 14px, e as duas ESCURECEM para caber na regra de nao passar das
   bordas. Alvo de contraste entre +5 (mockup) e +26 (satelite):
       haste  --line-30 -> --line-15   composto ~52   (+19)
       ponta  gold-mid opaco -> 22%    composto ~59   (+25)
   ⚠️ E fica registrado que a regra "nunca acima das duas" e mais apertada em
   luminancia BRUTA do que em contraste: o vao esta a 33,7 por causa do halo
   do mockup, entao a faixa 38,7 a 43,0 vale so +5 a +9 sobre o proprio
   fundo, e uma seta ali seria menos visivel do que a de hoje. A calibragem
   acima usa CONTRASTE, nao luminancia bruta, e reporta os dois. */
.seta{
  height:2px;
  border-top:2px dashed var(--line-15);
  width:20px;
}
.seta::after{
  top:-6px;
  border-width:7px;
}
.seta--esq::after{right:-7px;border-left-color:color-mix(in oklch,var(--gold-mid) 13%,transparent)}
.seta--dir::after{left:-7px;border-right-color:color-mix(in oklch,var(--gold-mid) 13%,transparent)}

/* ---------- M4 · TEXT-WRAP PRETTY NAS DESCRICOES DOS SATELITES -------
   Mata a orfa "senior." do Bonus 2 sem tocar no texto: o algoritmo evita que
   a ultima linha fique com uma palavra so. O Firefox ignora a palavra-chave
   e cai no comportamento de hoje, sem quebra visual.
   Fica NO DESKTOP de proposito. E la que a orfa foi medida, e mante-lo fora
   do celular garante que 360 continue byte a byte igual ao commit anterior,
   que e uma condicao de verificacao desta rodada. */
.sat-d{text-wrap:pretty}

}   /* fim de @media (min-width:760.05px) — acabamento + volta 2 + D1/D2 + M4 */

/* ======================================================================
   CELULAR — M2 contencao · R1 reordenacao · R2 orcamento · R3 faixa
   ======================================================================
   ⚠️ DUAS DECLARACOES DE CELULAR ESTAVAM MORTAS, e essa e a causa raiz do
   transbordo original. Media query NAO soma especificidade: uma regra
   igual, sem media query, declarada DEPOIS, vence a do celular.
       `.cena{--cena-w:100%}`            (bloco 880px)  morta pela
       `.cena{--cena-w:min(1400px,...)}` declarada depois
       `.bonus-section .cfw{margin-top:10px}` (bloco 760px) morta pela
       `.bonus-section .cfw{margin-top:-130px}` declarada depois
   O -130px puxava o leque para dentro da cena e o fazia cobrir o satelite
   do Bonus 3. Era transbordo VERTICAL por acidente de cascata, nao
   horizontal.

   ⚠️ TROCAR `100vw` POR `100%` NO --cena-w E PROIBIDO. Medido, aplicado de
   verdade e revertido: o bloco contedor da cena e a caixa de conteudo do
   `.container` (1092 em 1440), nao a viewport — a cena FURA o container por
   margem negativa e por isso mede contra a viewport. Com `100%` a cena cai
   de 1400 para 1052 e a pista do mockup de 876 para 528. E em 360 nao muda
   nada: a contaminacao de barra de rolagem la e ZERO (clientWidth 360 =
   innerWidth 360).

   R1 · A ORDEM DO CELULAR E OUTRA, e sem mover HTML. Os cards do leque sao
   o CONTEUDO do Bonus 1 e ficam grudados nele:
       centro (mockup + painel do Kit) → faixa de cards → dica → Bonus 2 →
       Bonus 3 → chips → CTA → acesso
   O leque e IRMAO da .cena no DOM, e os satelites sao FILHOS dela: `order`
   sozinho nao intercala arvores diferentes. A solucao e `display:contents`
   na .cena (a caixa dela some e os filhos sobem para o flex do .container)
   + `order` explicito em todos os participantes.
   Custos do display:contents, todos tratados:
     - o ::before do glow perderia o bloco contedor -> migra para o
       .cena-centro, mesmo gradiente;
     - o data-reveal da .cena nao anima mais (transform/opacity sem caixa
       nao tem efeito) -> os filhos aparecem sem a animacao de entrada, SO
       no celular;
     - o margin-top:32 da .cena morre -> reposto no .cena-centro.

   R2 · O ORCAMENTO VOLTA PARA AS 2,2 TELAS POR CIMA, nao por sobreposicao:
     - mockup: max-height 296 -> 280. O corte cai no vao entre a base dos
       KPIs (266) e o titulo seguinte (303): nada decapitado.
     - painel: margin-top -46 -> -8. ⚠️ O -46 DECAPITAVA os rotulos dos
       KPIs: punha o topo do painel em 250 com os KPIs terminando em 266.
       Com -8 o painel entra em 272, seis px abaixo deles, e ainda cobre a
       aresta reta do corte do dash.
     - painel: padding 24/20/104 -> 16/16/24. O 104 era COMPRIMENTO DE
       OCLUSAO (a faixa que o leque cobria por cima no desktop de antes);
       na ordem nova nada cobre o painel e ele virou ar morto. O passo
       literal imediatamente inferior da escala seria 48, mas 48 tambem e
       ar morto: 24 e o respiro de fim de card. Se o dono preferir o
       literal, sao +24px e a secao NAO fecha em 1760.
     - secao: padding-block 70 -> 48, o passo da escala imediatamente
       inferior.

   R3 · A FAIXA: um card centralizado por vez, espiada simetrica de 35px de
   cada lado ((324-230)/2 - 12 de gap). A centragem do primeiro e do ultimo
   NAO vem de padding no stage: padding-inline-end nao entra na area de
   rolagem no Chromium e o ultimo card pararia 47px fora do centro. Vem de
   MARGEM no primeiro e no ultimo card (margem de item conta na area de
   rolagem), calc(50% - var(--cfcw)/2) de cada lado. Sem scroll-padding.
   Altura do card: a MESMA regra medida do desktop, max(1.12 x card, 258).
   O 1.30 da regra base dava 299 e eram 41px de ar.

   ⚠️ SAO DEZ CARDS NA FAIXA, nao cinco: o fan do desktop mostra 5 de 10
   pela janela de opacidade. Aqui os dez packs aparecem.

   ⚠️ PENDENCIA REGISTRADA: a dica diz "CLIQUE NO CARD PARA VER O CONTEUDO"
   mas o flip e do motor, que NAO liga no celular (setPointerCapture
   engoliria a rolagem nativa). No celular o clique nao vira o card. Texto
   nao muda nesta rodada: ou o flip ganha um listener proprio de celular,
   ou o texto muda, e a decisao e do dono. */
@media (max-width:760px){

  /* --- R1 · reordenacao --- */
  .bonus-section .container{display:flex;flex-direction:column}
  .cena{display:contents}
  .bonus-section .bonus-eyebrow{order:1}
  .bonus-section .bonus-title{order:2}
  .bonus-section .bonus-lede{order:3}
  .cena-centro{order:4;margin-top:32px}
  .bonus-section .cfw{order:5}
  .bonus-section .cf-hint{order:6}
  .sat--esq{order:7;margin-top:16px}
  .sat--dir{order:8;margin-top:8px}
  .bonus-section .chips{order:9}
  .bonus-section .btn-row{order:10}
  .bonus-section .acesso{order:11}

  /* o glow migra da .cena (sem caixa) para o centro, mesmo gradiente */
  .cena::before{display:none}
  .cena-centro::before{
    content:"";position:absolute;z-index:0;pointer-events:none;
    left:50%;top:50%;translate:-50% -50%;
    width:132%;height:190%;
    background:radial-gradient(ellipse at 50% 42%,
      rgba(214,154,60,0.13) 0%,
      rgba(181,119,30,0.06) 38%,
      transparent 68%);
  }

  /* --- M2 · contencao (mantida: o clip segura regressao do fan) --- */
  .bonus-section .cfw{margin-top:16px;overflow:clip;overflow-clip-margin:24px}

  /* --- R2 · orcamento --- */
  .bonus-section{padding-block:48px}
  .cena .dash{max-height:280px}
  .painel{margin-top:-8px;padding:16px 16px 24px}

  /* --- M3 + R3 · a faixa de rolagem --- */
  .bonus-section .cfw{--cfcw:230px}
  .cfw .cf-frame{
    overflow-x:auto;overflow-y:hidden;
    scroll-snap-type:x mandatory;
    scroll-behavior:smooth;
    perspective:none;
    padding:0 0 24px;
    cursor:default;
    scrollbar-width:none;
  }
  .cfw .cf-frame::-webkit-scrollbar{display:none}
  .cf-stage{display:flex;gap:12px;height:auto;transform-style:flat;padding:0}
  .cf-card{
    position:relative;left:auto;top:auto;
    flex:0 0 var(--cfcw);
    height:max(calc(var(--cfcw) * 1.12),258px);
    scroll-snap-align:center;
    transform:none !important;
    opacity:1 !important;
    z-index:auto !important;
    will-change:auto;
  }
  .cf-card:first-child{margin-left:calc(50% - var(--cfcw)/2)}
  /* a margem-end de flex item TAMBEM nao conta na area de rolagem do
     Chromium (medido: scrollWidth 2455 com e sem ela, ultimo card 47px
     fora do centro). O espacador final e um ITEM de verdade, via ::after:
     itens contam. O -12px desconta o gap que o proprio item ganha. */
  .cf-stage::after{content:"";flex:0 0 calc(50% - var(--cfcw)/2 - 12px)}
}

/* O MESMO desligamento sob movimento reduzido, em qualquer largura: quem
   pediu menos movimento nao deve receber um carrossel 3D com arrasto de
   inercia. A guarda do main.js casa com as duas condicoes. A REORDENACAO
   nao entra aqui: ela e do celular, nao do movimento reduzido. */
@media (prefers-reduced-motion:reduce){
  .cfw .cf-frame{
    overflow-x:auto;overflow-y:hidden;
    scroll-snap-type:x mandatory;
    perspective:none;
    padding:0 0 24px;
    scrollbar-width:none;
  }
  .cfw .cf-frame::-webkit-scrollbar{display:none}
  .cf-stage{display:flex;gap:12px;height:auto;transform-style:flat;padding:0}
  .cf-card{
    position:relative;left:auto;top:auto;
    flex:0 0 var(--cfcw);
    height:max(calc(var(--cfcw) * 1.12),258px);
    scroll-snap-align:center;
    transform:none !important;opacity:1 !important;z-index:auto !important;
  }
  .cf-card:first-child{margin-left:calc(50% - var(--cfcw)/2)}
  /* a margem-end de flex item TAMBEM nao conta na area de rolagem do
     Chromium (medido: scrollWidth 2455 com e sem ela, ultimo card 47px
     fora do centro). O espacador final e um ITEM de verdade, via ::after:
     itens contam. O -12px desconta o gap que o proprio item ganha. */
  .cf-stage::after{content:"";flex:0 0 calc(50% - var(--cfcw)/2 - 12px)}
}

/* ======================================================================
   FECHAMENTO 22/08 — F1 a F5, a ultima rodada de acabamento da secao
   ======================================================================
   Tudo desktop, por ordem do dono. O F0 (flip por tap) vive no main.js,
   no ramo do celular. Depois deste bloco a secao ENCERRA: divergencia
   nova vira pendencia registrada no handoff, nao rodada. */
@media (min-width:760.05px){

  /* ---------- F1 · O CORPO DO MOCKUP DISSOLVE ATRAS DOS CARDS --------
     O que sobrava: os cantos inferiores do dash visiveis ao lado do painel
     (28px de tira de cada lado), com raio e aresta, terminando reto em
     y=910,8 da secao.
     ⚠️ A RECEITA LITERAL (mask no .dash + max-height maior + margin
     negativo) FOI DERRUBADA POR DOIS LIMITES, antes de aplicar:
       1. mask-clip e border-box: mascarar o .dash apagaria TODO o
          box-shadow externo, inclusive o halo dourado do item 6 — tudo
          que o elemento pinta fora da caixa vira alfa zero.
       2. crescer o max-height REVELA conteudo do dashboard (a grade de
          categorias) meio-transparente nas tiras laterais, que e
          exatamente o defeito que a variante A ja tinha condenado.
     O mesmo resultado visual sai do ::after do proprio .dash, que estava
     display:none (o veu morto): um prolongamento ABSOLUTO do fundo,
     colado na base, que continua o corpo e se extingue em gradiente.
     Absoluto = zero altura de fluxo, a secao fica em 1599 POR CONSTRUCAO,
     sem margin-bottom compensatorio. O contexto z-index:1 do .kit-shot
     nao muda; o painel (z 2) segue na frente do prolongamento.
     O raio inferior do dash zera para o ::after colar sem mordida de
     canto. Extincao: 910,8 + 220 = y 1130,8, antes da base do leque
     (1231,9), com a dissolucao em curso quando os cards cobrem (topo das
     pontas em 996,9). */
  .cena .dash{border-bottom-left-radius:0;border-bottom-right-radius:0}
  /* ⚠️ O PROLONGAMENTO NAO PODE MORAR NO ::after DO PROPRIO .dash: o dash
     tem overflow:hidden e RECORTA o pseudo — ele computava (display,
     altura, gradiente, tudo) e nunca pintava um pixel, a armadilha 3 em
     versao de clip. So a amostragem pegou: o dourado abaixo da base era o
     HALO do dash aparecendo sem cobertura, com degrau de 13,5/px na
     aresta da caixa.
     Mora no ::before do .kit-shot (overflow visible) com z-index:1: no
     contexto do kit-shot ele pinta NA FRENTE do dash e do halo (z auto),
     e o painel (z 2, contexto de fora) segue na frente dele. Os 2px de
     sobreposicao com a base somem sob o proprio fundo, mesma cor. */
  .cena .kit-shot::before{
    content:"";display:block;position:absolute;z-index:1;
    left:1px;right:1px;top:calc(100% - 6px);height:226px;
    pointer-events:none;
    background:linear-gradient(to bottom,
      var(--bg-alt) 0%,
      color-mix(in oklch, var(--bg-alt) 78%, transparent) 38%,
      transparent 100%);
  }

  /* ---------- F2 · OS TRES SELOS ARREDONDAM -------------------------
     Medido antes: os tres carregavam o MESMO chanfro por clip-path
     (--cut 11px no painel, 8px nos satelites). A gramatica de canto e uma
     so na referencia, entao a linguagem se aplica aos tres de uma vez.
     10px, calibrado contra o recorte ampliado (faixa pedida: 8 a 12).
     A centragem do selo do painel por translate:-50% -50% fica. */
  .bonus-section .selo{clip-path:none;border-radius:10px}

  /* ---------- F3 · A FAIXA DE CHIPS ---------------------------------
     Medido ANTES de mexer: as quatro pistas JA eram iguais (187,5px cada,
     repeat(4,minmax(0,1fr))) e as duas linhas de base JA estavam zeradas
     nos quatro chips (base dos valores 10398,8 e dos rotulos 10423,3,
     identicas). Os itens 1 e 2 do F3 nao tinham o que corrigir.
     O item 3 tinha: o glifo centrava na PRIMEIRA LINHA (10390,6), decisao
     do item B da auditoria. A referencia centra NO BLOCO (10402,8, delta
     12,2px) — e o que a referencia mostrar vence, entao a decisao B fica
     REVOGADA nos chips. O flex com wrap vira grid de duas linhas com o
     glifo em span 2, align center; o margin-left de 29px do rotulo (que
     imitava a coluna) morre com o grid de verdade.
     Item 4: a correcao optica de ic-lock e ic-brain JA FOI aplicada na
     auditoria A (translateY de -5,09% e +3,49% no proprio glifo, onde
     quer que ele apareca na secao). Nos chips vivem ic-chat, ic-stack,
     ic-bolt e ic-shield — nenhum dos dois; o ic-lock esta na barra do
     mockup e na linha do cadeado, o ic-brain no medalhao do Bonus 2, e
     nos dois lugares a correcao ja computa. */
  /* row-gap 8 (escala) + min-height 66: o grid apertou o ritmo interno
     do chip (vao valor->rotulo caiu de 11,3 para o row-gap) e a faixa
     encolheu 11px, tirando a secao do invariante de 1599. O min-height
     congela a caixa do chip na altura anterior e devolve o 1599 por
     construcao — MEDIDO na escada 65->1598, 66->1599, 67->1600; o valor
     e o que fecha a soma com os subpixels da cadeia, nao a caixa
     aritmetica de 67. A sobra e distribuida pelas rows pelo grid. */
  .chip{
    display:grid;grid-template-columns:auto minmax(0,1fr);
    align-items:center;column-gap:10px;row-gap:8px;
    min-height:66px;
  }
  .chip i{grid-row:1/span 2}
  .chip em{margin-left:0}

  /* ---------- F4 · O GRUPO DO PAINEL CENTRALIZA ---------------------
     Medido antes: offset esquerdo 1px, direito 207,5px — o grupo todo
     encostado a esquerda. Centraliza o GRUPO; o texto continua alinhado a
     esquerda dentro do bloco. O max-width segura a linha; a centragem
     vertical na faixa visivel (do acabamento) nao muda. */
  .painel{justify-content:center}
  .painel-txt{max-width:56ch;flex:0 1 auto}

  /* ---------- F5 · O VIDRO ------------------------------------------
     Os boxes liam secos: preenchimento chapado, borda uniforme. Vidro
     escuro por gradiente e aresta, SEM backdrop-filter: atras dos
     satelites e dos chips so existe o fundo da secao, o desfoque nao
     teria o que desfocar e custaria composicao.
     No PAINEL entra so preenchimento e aresta: a borda dele e a conica
     com fade da volta 2 e nao se toca.
     Nos SATELITES a borda uniforme (--line-25, item 9) vira gradiente
     vertical no ::before (mesma tecnica do painel), topo mais claro,
     laterais no valor do item 9, base um passo abaixo. A guarda do item
     9 vale: nenhum trecho pode voltar a ser menos legivel que a borda de
     antes do item 9 (--line-12). */
  .sat{
    border-color:transparent;
    background:
      linear-gradient(170deg, color-mix(in oklch, var(--gold-mid) 7%, transparent), transparent 45%),
      var(--bg-alt);
    box-shadow: inset 0 1px 0 rgba(255,240,200,0.12), 0 8px 24px rgba(0,0,0,0.35);
  }
  .sat::before{
    content:"";position:absolute;inset:0;padding:1px;pointer-events:none;
    border-radius:var(--r-lg);
    background:linear-gradient(180deg,
      var(--line-45) 0%,
      var(--line-25) 34%,
      var(--line-15) 100%);
    -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
            mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
    -webkit-mask-composite:xor;mask-composite:exclude;
  }
  .bonus-section .chips{
    border-color:transparent;
    background:
      linear-gradient(170deg, color-mix(in oklch, var(--gold-mid) 6%, transparent), transparent 45%),
      linear-gradient(180deg,var(--bg-card),var(--bg-alt));
    box-shadow:
      inset 0 1px 0 rgba(255,240,200,0.12),
      0 8px 24px rgba(0,0,0,0.35),
      0 24px 60px -40px rgba(0,0,0,0.9);
  }
  .bonus-section .chips::before{
    content:"";position:absolute;inset:0;padding:1px;pointer-events:none;
    border-radius:var(--r-md);
    background:linear-gradient(180deg,
      var(--line-40) 0%,
      var(--line-20) 34%,
      var(--line-12) 100%);
    -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
            mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
    -webkit-mask-composite:xor;mask-composite:exclude;
  }
  .painel{
    background:
      linear-gradient(170deg, color-mix(in oklch, var(--gold-mid) 5%, transparent), transparent 45%),
      linear-gradient(160deg,
        color-mix(in oklch,var(--bg-alt) 55%,var(--bg-dark)),
        var(--bg-dark) 70%);
    box-shadow: inset 0 1px 0 rgba(255,240,200,0.10), 0 40px 90px -40px rgba(0,0,0,0.85);
  }

  /* ---------- A1 · OS FLANCOS DO MOCKUP (rodada final) ---------------
     Donos identificados por ALTERNANCIA DE CAMADA com varredura numerica
     (regiao direita, x1132-1200 y767-1030, pixels com delta>10):
         baseline 691 | sem anel 626 | sem cards de categoria 410 |
         sem prolongamento 684
     -> o dono principal da DIREITA sao os CARDS DE CATEGORIA do dashboard
        (281px de delta): a coluna direita da grade termina em x=1139 e a
        fatia de 9px, com canto arredondado e borda, desce visivel na tira
        ao lado do painel. O crop confirma dois cantos.
     -> na ESQUERDA, a "emenda" e o fundo da sidebar (--bg-dark, ~8 de
        luminancia) encontrando o prolongamento (--bg-alt, ~15) em y=911,
        mais a parede/anel.
     -> o anel lateral (65px) e a fronteira corpo/HALO completam os dois.

     Correcao pela regra do dono: conteudo interno se resolve por COBERTURA
     OPACA, nao por mascara no .dash — e sem mascara o halo fica intacto
     POR CONSTRUCAO (a guarda do box-shadow nem e exercitada).

     As TIRAS moram no ::before do proprio .dash (estava livre): o
     overflow:hidden nao as corta porque vivem inteiras dentro da caixa, e
     com z-index:3 pintam na frente do conteudo (filhos sem z-index).
     Cobrem da linha do painel (top:376px) ate a base, 30px de cada lado.
     A BANDA DOURADA na fronteira externa e o que dissolve a PAREDE: a
     fronteira fisica corpo(15)/halo(30-40) mede delta 15-25 e nenhuma
     mascara a remove sem matar o halo; a banda leva a borda interna a ~39
     (color-mix 18% de ouro), casando com o halo do outro lado — a
     fronteira cai para delta <10 e a transicao interna de 9px e suave.
     A decapitacao das bordas de card em y=767 fica exatamente sob a linha
     do topo do painel, onde o olho ja espera um corte.
     O dashboard ACIMA do painel nao e tocado: a tira comeca na linha dele. */
  .cena .dash::before{
    content:"";position:absolute;z-index:3;pointer-events:none;
    left:0;right:0;top:376px;bottom:0;
    background:
      linear-gradient(var(--bg-alt),var(--bg-alt)) left top/31px 100% no-repeat,
      linear-gradient(var(--bg-alt),var(--bg-alt)) right top/31px 100% no-repeat;
  }
  /* as BANDAS douradas vivem no ::after (o veu morto do desktop) com
     FADE-IN vertical de 24px: nascendo duras na linha 767 elas mesmas
     geravam segmento horizontal de 8px com delta 23-30 contra o fundo
     escuro da sidebar (esq) e o fundo do main (dir). Nascendo em rampa, o
     delta por pixel cai para ~1,5. */
  .cena .dash::after{
    content:"";display:block;position:absolute;z-index:3;pointer-events:none;
    /* height:auto explicita: o veu base .dash::after carrega height:74px e,
       sem isso, top+bottom perdem e a banda morria em y=842 - medido. */
    left:0;right:0;top:376px;bottom:0;height:auto;opacity:1;
    background:
      linear-gradient(to right,
        color-mix(in oklch, var(--gold-mid) 18%, var(--bg-alt)) 0,
        var(--bg-alt) 10px, transparent 11px) left top/11px 100% no-repeat,
      linear-gradient(to left,
        color-mix(in oklch, var(--gold-mid) 18%, var(--bg-alt)) 0,
        var(--bg-alt) 10px, transparent 11px) right top/11px 100% no-repeat;
    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 24px);
            mask-image:linear-gradient(to bottom,transparent 0,#000 24px);
  }
  /* ⚠️ o vale de 1px: a tira ancora na PADDING box e o overflow:hidden do
     dash recorta qualquer extensao para fora — a coluna da borda transparente
     ficava descoberta (19 de luminancia entre halo 38 e banda 39, medido).
     A propria borda lateral ganha o tom da banda: acima de y765 o anel pinta
     por cima na mesma coluna e esconde; abaixo, ela continua a banda. A borda
     inferior segue transparente. */
  .cena .dash{
    /* border-image com rampa vertical: a cor da borda NASCE em sincronia
       com o fade-in da banda interna (72,3%..77% = y767..791). Com cor
       chapada a borda nascia plena e abria 17px de coluna com delta 23-29
       contra a banda ainda fraca. O border-image ignora o border-radius,
       mas o trecho pintado começa abaixo do topo e o raio visivel do topo
       e desenhado pelo anel, nao pela borda. */
    border-image:linear-gradient(to bottom,
      transparent 0%,transparent 72.3%,
      color-mix(in oklch, var(--gold-mid) 18%, var(--bg-alt)) 77%,
      color-mix(in oklch, var(--gold-mid) 18%, var(--bg-alt)) 100%) 1;
  }

  /* o anel extingue NO TOPO DO PAINEL (72% = y765), em sincronia com o
     inicio da dissolucao — o fade da volta 2 (85%) deixava a lateral viva
     ate y833 dentro da faixa certificada */
  /* ⚠️ BUG DE COMPOSICAO NOS CANTOS, achado por alternancia + mask brutal:
     a receita de TRES camadas (fade ∩ (cheia XOR content-box)) falha nos
     cantos arredondados no Blink — o arco do raio inferior ignorava o fade
     e pintava sozinho em y=890-910 (35px de delta na quina; com mascara
     simples de uma camada, 3px). A reformulacao dispensa o intersect:
         anel com fade  =  fade  MENOS  miolo (content-box)
     Duas camadas, um subtract. O mesmo conserto vale para o anel do
     PAINEL logo abaixo, que tem a doenca latente nos cantos inferiores
     (hoje atras dos cards, mas o painel desce 15px alem do leque). */
  .cena .kit-shot::after{
    -webkit-mask:
      linear-gradient(to bottom,#000 0%,#000 52%,transparent 72%),
      linear-gradient(#000 0 0) content-box;
            mask:
      linear-gradient(to bottom,#000 0%,#000 52%,transparent 72%),
      linear-gradient(#000 0 0) content-box;
    -webkit-mask-composite:source-out;
            mask-composite:subtract;
  }
  .painel::before{
    -webkit-mask:
      linear-gradient(to bottom,#000 0%,#000 18%,transparent 46%),
      linear-gradient(#000 0 0) content-box;
            mask:
      linear-gradient(to bottom,#000 0%,#000 18%,transparent 46%),
      linear-gradient(#000 0 0) content-box;
    -webkit-mask-composite:source-out;
            mask-composite:subtract;
  }
  /* o prolongamento e reescrito: cobre 1px ALEM das colunas de borda (o
     kit-shot nao tem overflow nem borda, pode), ganha as MESMAS bandas
     douradas laterais das tiras, e o decaimento vertical sai do background e
     vira MASK unica — assim as bandas e o corpo morrem JUNTOS, acompanhando
     o halo que tambem decai, em vez de a banda ficar opaca ate o fim e abrir
     fronteira nova la embaixo. */
  .cena .kit-shot::before{
    left:-1px;right:-1px;
    background:
      linear-gradient(to right,
        color-mix(in oklch, var(--gold-mid) 18%, var(--bg-alt)) 0,
        var(--bg-alt) 10px, transparent 11px) left top/11px 100% no-repeat,
      linear-gradient(to left,
        color-mix(in oklch, var(--gold-mid) 18%, var(--bg-alt)) 0,
        var(--bg-alt) 10px, transparent 11px) right top/11px 100% no-repeat,
      linear-gradient(var(--bg-alt),var(--bg-alt));
    -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 6px,rgba(0,0,0,0.78) 38%,transparent 100%);
            mask-image:linear-gradient(to bottom,transparent 0,#000 6px,rgba(0,0,0,0.78) 38%,transparent 100%);
  }

  /* ---------- A2 · RITMO INTERNO DOS SATELITES ----------------------
     Medido antes: vaos 29 / 0 / 16 / 8 / 22 e recuos 18/18/18/18 nos dois
     satelites — recuo unico e medalhoes identicos (56px) JA valiam; fora da
     escala so o vao do topo (29) e o da base (22).
     O 29 nao era padding: era padding 26 + ~3 de MEIA-LEADING do selo
     inline-block (o line box empurra). display:block + width:fit-content
     zera o leading e deixa o padding mandar sozinho: 32/24, da escala.
     Alturas: os cards diferem (desc de 4 x 3 linhas). Por ordem, ficam
     IGUAIS entre si via min-height do maior; o vao descricao->base do
     Bonus 3 absorve a diferenca (reportado) e a pilha central continua
     ditando a altura da linha do grid. */
  .sat{padding:32px 18px 24px}
  .sat .selo{display:block;width:fit-content}
  .sat{min-height:273px}

}   /* fim do FECHAMENTO F1-F5 + A1 + A2 */

/* ---------------------------------------------------------------------
   EMENDA DO MARQUEE DOS DEPOIMENTOS — bugfix de defeito PRE-EXISTENTE,
   exposto pela verificacao da remocao de um depoimento (22/08).
   O keyframe anda translateY(-50%), percentual DA CAIXA DO TRACK. O
   `.depo-box .tcol{display:flex}` com align stretch forcava o track a
   712px (altura do box), entao o loop andava 356px num conteudo de
   periodo 1028px e SALTAVA no reinicio — com 6 depoimentos ou com 5, a
   conta nunca fechou desde que o .depo-box entrou. height:max-content
   devolve ao track a altura do conteudo: -50% volta a ser exatamente uma
   metade e a emenda fecha por construcao (metades espelhadas, conferido:
   as tres colunas com a mesma ordem na copia e na duplicata).
   Sem media query: no celular a lista e estatica (animation:none) e
   max-content e igual ao auto. PROVA por diff de captura A/B: track em 0
   contra track em -50%, pixels diferentes 16,7% antes, ~0 depois. */
.depo-box .tcol-track{height:max-content}

/* A4 · carona: a linguagem de canto dos selos e uma so nos dois
   breakpoints — o mesmo border-radius:10px do F2, agora no celular. */
@media (max-width:760px){
  .bonus-section .selo{clip-path:none;border-radius:10px}
}

/* ==========================================================================
   Camada · REFINO #metodo + #quem (23/08)
   Auditoria de 5 lentes + verificação adversarial independente; cada número
   foi medido no harness (shot.mjs/CDP) antes e depois, e cada regra testada
   nesta posição de cascata (fim do arquivo). Nada toca zonas protegidas.
   ========================================================================== */

/* --- #metodo ---------------------------------------------------------- */

/* 1 · Banda 760-899: o bloco @media 899 assumia empilhado, mas o auto-fit
   da base (441) mantinha 2 colunas de ~352px — a pilha de 4 recortes
   flutuava com ~180px mortos ACIMA e ABAIXO (align-items:center) e o CTA
   quebrava em 2 linhas. Uma declaração efetiva o empilhamento que o bloco
   3548 já supõe. Medido a 800: morto abaixo cai de 180px para 1px. */
@media (max-width:899px){
  .urgencia-grid{grid-template-columns:1fr}
}

/* 2 · O h2 da seção era o único título sem o tracking da camada Outfit
   (.014em, linha 5277) e com leading 1.02 contra 1.08 do cânone. 4 linhas
   antes e depois em 11 larguras (360-2560); folga mínima 1px em ≥1920
   (MEDICINA BRASILEIRA 516,9px numa coluna de 518) — se atualização de
   fonte requebrar, o rollback é só do letter-spacing. */
.urgencia-grid h2{letter-spacing:.014em;line-height:1.08}

/* 3 · .cfm-list li a 15.5px intercalado entre parágrafos de 16px no mesmo
   fluxo — corpo MENOR com tinta MAIS clara (ênfase), sinal misto. Escopado
   em .urgencia-grid de propósito: .cfm-list--card li{14px} (linha 1120) é
   CSS morto hoje, mas apendar .cfm-list li{16px} o fliparia por ordem
   (mesma especificidade 0,1,1) se o padrão --card voltar. */
.urgencia-grid .cfm-list li{font-size:16px}

/* 4 · O CTA quebrava com órfã curta (“da norma”, linha de 89px sob uma de
   198) em 360/390; em linha única pede 401px, não cabe. balance equilibra
   (126/161) sem mudar altura; no desktop (1 linha) é no-op medido. */
.urgencia-grid .btn{text-wrap:balance}

/* 5 · .news-tag pedia 335px em linha única (.16em) contra 324 de container
   em 360 — quebrava com órfã “PUBLICOU”. Com .12em pede 317,5px: linha
   única em 360 (folga 6,5), duas linhas BALANCEADAS em 320. Desktop
   intacto (media não aplica). */
@media (max-width:760px){
  .news-tag{letter-spacing:.12em;text-wrap:balance}
}

/* 6 · SOMBRA DOS RECORTES, a reforma. A camada da linha 5642 nunca
   funcionou: filter é aplicado ANTES do clip-path no MESMO elemento, então
   o drop-shadow também era recortado (sombra-teste vermelha: zero pixels;
   comentário de lá corrigido). Forma que funciona: o RASGO vai para o img
   (papel = background+padding no img; os três polígonos copiados byte a
   byte da base 3457/3479/3501) e o drop-shadow fica no figure, que já não
   recorta nada. dy pequeno + blur 12: a sombra vaza ACIMA da borda de cada
   papel da frente e desenha a emenda — dy grande morre atrás do irmão
   seguinte, que pinta por cima na ordem do DOM. Medido: emendas
   papel-sobre-papel caem de lum 253-255 para 223-242, rim sutil no fundo
   (20,12,6 → 16,10,5), geometria pixel-idêntica em 1440/1024/360. */
.nz,.nz:nth-child(3n+2),.nz:nth-child(3n){clip-path:none}
.nz{background:none;padding:0;box-shadow:none;filter:drop-shadow(0 2px 12px rgba(0,0,0,.5))}
.nz img{
  background:#fbf8f1;
  padding:clamp(14px,1.6vw,20px) clamp(10px,1.2vw,16px);
  clip-path:polygon(
    0.0% 1.7%, 1.8% 3.1%, 3.5% 2.6%, 5.6% 0.5%, 7.9% 0.5%, 10.1% 0.6%,
    11.9% 2.1%, 14.6% 0.8%, 16.5% 3.0%, 19.5% 2.8%, 21.6% 4.5%, 23.3% 4.0%,
    25.3% 0.9%, 27.1% 1.6%, 29.8% 1.1%, 32.2% 3.0%, 34.3% 2.7%, 36.0% 0.6%,
    37.9% 3.2%, 40.1% 1.7%, 42.5% 2.2%, 44.5% 3.7%, 47.1% 1.3%, 49.5% 2.6%,
    52.4% 3.4%, 54.4% 4.5%, 56.1% 2.1%, 58.8% 1.0%, 61.1% 0.5%, 63.6% 3.6%,
    66.0% 4.1%, 68.0% 3.3%, 70.5% 2.8%, 72.7% 3.9%, 75.6% 2.3%, 78.2% 0.6%,
    80.8% 3.1%, 83.7% 3.8%, 85.7% 2.0%, 88.3% 0.4%, 90.5% 1.0%, 92.3% 0.6%,
    95.0% 0.9%, 96.9% 2.0%, 99.7% 0.6%, 100.0% 2.0%, 98.6% 13.3%, 99.3% 24.6%,
    99.2% 33.7%, 98.5% 45.1%, 99.4% 52.9%, 99.3% 61.0%, 98.9% 70.5%, 99.6% 78.8%,
    99.2% 87.9%, 100.0% 95.6%, 97.4% 97.5%, 95.0% 96.8%, 93.3% 95.8%, 90.6% 95.9%,
    87.9% 98.0%, 85.7% 99.3%, 83.2% 99.4%, 81.5% 98.8%, 79.7% 98.2%, 78.0% 99.7%,
    76.2% 99.3%, 74.1% 99.6%, 71.3% 97.1%, 69.5% 98.6%, 67.4% 98.1%, 65.6% 96.0%,
    62.6% 97.7%, 60.4% 99.3%, 58.6% 98.2%, 56.6% 96.1%, 54.8% 99.6%, 51.9% 97.4%,
    50.1% 97.4%, 48.4% 97.4%, 45.5% 96.0%, 42.9% 98.6%, 40.8% 99.0%, 38.1% 97.4%,
    35.4% 98.3%, 33.5% 96.2%, 30.5% 96.0%, 27.8% 96.2%, 25.2% 98.7%, 22.8% 98.2%,
    21.2% 99.6%, 19.2% 98.6%, 16.6% 95.6%, 14.4% 95.7%, 11.4% 95.6%, 9.3% 98.8%,
    7.4% 98.9%, 5.5% 97.0%, 2.7% 96.1%, 0.4% 96.9%, 0.0% 99.4%, 1.5% 93.4%,
    1.3% 82.4%, 0.6% 73.1%, 0.8% 62.1%, 1.6% 51.1%, 0.9% 42.1%, 1.3% 30.4%,
    0.6% 22.5%, 1.5% 14.8%);
}
.nz:nth-child(3n+2) img{
  clip-path:polygon(
    0.0% 4.3%, 2.9% 4.1%, 4.6% 2.8%, 6.8% 2.6%, 8.6% 1.1%, 10.8% 1.3%,
    13.1% 0.4%, 14.8% 3.4%, 17.0% 2.5%, 19.6% 1.8%, 21.3% 3.7%, 23.7% 3.1%,
    26.2% 4.5%, 28.3% 3.6%, 30.4% 2.8%, 32.9% 1.7%, 34.7% 2.3%, 37.3% 2.8%,
    39.5% 3.1%, 41.3% 1.1%, 43.4% 3.8%, 45.3% 0.8%, 47.0% 0.5%, 49.0% 2.8%,
    51.7% 1.7%, 53.9% 1.5%, 55.9% 3.6%, 58.3% 1.4%, 60.0% 3.7%, 62.6% 3.9%,
    64.5% 2.6%, 67.4% 2.8%, 70.3% 1.0%, 73.3% 0.5%, 75.5% 0.4%, 78.2% 3.3%,
    81.2% 3.8%, 84.1% 2.6%, 87.1% 3.5%, 89.2% 4.5%, 91.3% 1.1%, 93.0% 2.3%,
    94.9% 4.3%, 97.8% 1.2%, 99.6% 2.6%, 100.0% 2.0%, 99.3% 12.9%, 98.5% 22.0%,
    99.2% 31.2%, 98.6% 42.7%, 98.8% 54.1%, 98.8% 63.2%, 98.8% 74.4%, 99.2% 82.6%,
    98.7% 91.6%, 100.0% 97.3%, 97.2% 99.2%, 94.8% 98.3%, 92.4% 96.1%, 90.4% 95.6%,
    88.7% 97.3%, 86.4% 98.7%, 84.0% 97.7%, 81.7% 96.6%, 80.1% 98.1%, 77.4% 99.1%,
    74.6% 98.8%, 72.1% 99.0%, 69.8% 97.9%, 68.1% 96.7%, 65.9% 96.7%, 63.5% 97.3%,
    61.2% 98.4%, 58.3% 99.3%, 55.5% 96.0%, 53.2% 96.4%, 50.6% 97.1%, 48.6% 98.3%,
    46.5% 98.4%, 43.6% 98.2%, 41.5% 97.9%, 38.7% 97.6%, 36.3% 98.6%, 34.3% 99.3%,
    32.4% 98.6%, 29.7% 97.5%, 27.9% 97.7%, 26.1% 97.3%, 23.9% 96.0%, 21.9% 96.0%,
    20.0% 95.5%, 17.5% 99.5%, 14.8% 98.5%, 12.7% 99.1%, 9.9% 99.3%, 7.3% 98.0%,
    4.7% 98.4%, 3.0% 95.8%, 0.5% 99.0%, 0.0% 96.9%, 0.4% 95.3%, 0.6% 85.2%,
    1.0% 74.6%, 1.1% 64.0%, 1.4% 53.2%, 1.1% 43.1%, 0.6% 34.5%, 1.4% 27.0%,
    0.9% 19.0%, 1.1% 10.4%);
}
.nz:nth-child(3n) img{
  clip-path:polygon(
    0.0% 1.9%, 1.9% 1.0%, 4.8% 2.8%, 7.4% 2.7%, 9.5% 3.4%, 11.9% 3.7%,
    14.4% 3.9%, 16.7% 1.0%, 18.5% 3.4%, 20.3% 3.1%, 22.8% 0.6%, 25.5% 0.4%,
    28.3% 3.9%, 30.2% 3.4%, 32.8% 0.8%, 35.3% 0.8%, 38.2% 3.3%, 41.2% 0.5%,
    43.2% 3.0%, 45.7% 1.1%, 48.5% 3.9%, 50.6% 0.9%, 53.1% 2.1%, 55.6% 2.4%,
    57.8% 0.4%, 59.6% 2.3%, 62.2% 2.1%, 64.8% 2.6%, 67.7% 3.1%, 69.7% 0.9%,
    71.4% 0.5%, 74.2% 4.1%, 76.9% 0.8%, 79.4% 0.8%, 82.2% 3.1%, 84.9% 2.9%,
    87.1% 3.9%, 90.0% 1.3%, 92.2% 3.5%, 94.8% 2.1%, 97.0% 4.5%, 99.0% 1.2%,
    100.0% 1.2%, 99.2% 13.4%, 99.1% 25.0%, 98.7% 36.4%, 99.3% 47.1%, 99.6% 54.9%,
    98.8% 62.8%, 99.3% 70.1%, 99.4% 80.0%, 99.3% 88.6%, 100.0% 99.2%, 97.0% 97.1%,
    94.4% 97.3%, 92.1% 95.5%, 89.3% 96.2%, 87.6% 97.2%, 84.7% 97.0%, 82.4% 96.9%,
    80.5% 96.6%, 77.8% 99.4%, 75.5% 97.1%, 73.4% 96.8%, 70.5% 95.8%, 68.5% 99.0%,
    65.7% 97.1%, 62.9% 96.0%, 61.0% 97.2%, 58.9% 96.3%, 56.4% 98.7%, 54.1% 97.1%,
    52.1% 98.9%, 49.9% 99.4%, 47.6% 95.7%, 44.8% 99.5%, 42.1% 96.6%, 39.5% 99.6%,
    36.8% 98.9%, 34.1% 98.3%, 32.0% 99.0%, 29.2% 98.7%, 26.3% 97.5%, 24.5% 96.9%,
    22.2% 99.6%, 19.4% 98.5%, 17.8% 96.4%, 15.2% 98.0%, 13.3% 97.4%, 10.9% 96.7%,
    8.6% 97.3%, 6.0% 98.9%, 4.2% 97.6%, 1.5% 96.2%, 0.0% 98.3%, 0.5% 93.1%,
    0.5% 84.2%, 1.6% 73.0%, 1.3% 62.7%, 1.4% 53.8%, 0.8% 46.4%, 1.4% 37.6%,
    0.6% 29.8%, 1.4% 22.3%, 1.5% 13.7%);
}

/* --- #quem ------------------------------------------------------------ */

/* 7 · `.qm-papeis span` (6425) engolia o próprio círculo de ícone, que
   TAMBÉM é um span: display:block (perdia o place-items da 6420) e
   margin-top:3px — glifo 18px encostado no canto do círculo de 38
   (desvio do centro dx=dy=-9) nos 4 itens, nos dois breakpoints.
   Contraprova: .qm-cred-ic, o mesmo círculo, mede dx=dy=0. */
.qm-papeis .qmp-ic{display:grid;margin-top:0}

/* 8 · Na faixa 700-1099 a credencial ficava EM FLUXO (margin-top:-46px da
   base 6332; a âncora absoluta só existia em ≥1100): transbordava o
   retrato em 91-127px e cobria até 99px da 1ª foto do bento. Mesma âncora
   do desktop; a linha da grade é da carta, então nada mais se move
   (before/after byte-idêntico fora do cartão). 700 e não 760.05 porque o
   fix casa com a faixa EXISTENTE do layout de 2 colunas (6560/6592). */
@media (min-width:700px) and (max-width:1099px){
  .qm-cred{position:absolute;left:14px;right:14px;bottom:14px;margin:0}
}

/* 9 · Banda 1100-1209: “Dra. Juliana Romanato” (156px a 15px) não cabia na
   caixa de 133px e o cartão crescia a 190px, cobrindo 22,7% do retrato.
   Compressão mínima só na banda: caixa vai a 155px e o nome a 14px pede
   145,6 — 1 linha, cartão 149px (17,8%). Inerte fora da banda (medido
   1099/1220/1240/1280/1440). */
@media (min-width:1100px) and (max-width:1219px){
  .qm-cred{left:10px;right:10px;gap:10px;padding:12px 14px 12px 12px}
  .qm-cred-txt b{font-size:14px}
}

/* 10 · O rótulo MÉDICA a 9px era o menor tipo móvel da página, abaixo dos
   pisos das próprias camadas de auditoria (10px .cf-selo 4132; 11px mono
   móvel 4112). 10px segue o precedente do .cf-selo; a largura do cartão
   não muda (quem dita é o <p> de 10.5px), altura +2px absorvida. */
.qm-cred-txt i{font-size:10px}

/* 11 · Eyebrow do #quem com .18em contra .22em canônico dos 6 eyebrows
   mono da página (5 .sec-eyebrow + .bonus-eyebrow, todos 2.31px). Só
   desktop: a 360 os 301px de .22em não cabem na coluna de 299 (2px). */
@media (min-width:760.05px){
  .qm-eyebrow span{letter-spacing:.22em}
}

/* 12 · .qm-h2 computava 30px em 360 — único h2 de seção fora do piso de
   26px que a camada de escala (4050-4051) normalizou. Acima de 882px o
   clamp novo é idêntico ao antigo; a quebra segue 2 linhas balanceadas
   (“Prazer, eu / sou a Juliana.”). */
.qm-h2{font-size:clamp(26px,3.4vw,46px)}

/* 13 · O nowrap do eyebrow travava o min-content da coluna em 299px:
   abaixo de 359 a credencial pintava 22px FORA do painel, sobre o fundo
   escuro. Guarda estreita: em 360 já cabe (287 ≤ 288) e nada muda. */
@media (max-width:358px){
  .qm-eyebrow span{white-space:normal}
}

/* 14 · Citação do bento espremida pela célula 4/3 (6547) em ≤~420: em 360
   scrollHeight 117 contra 106 de célula — padding declarado de 16px
   comprimido a 6 e overflow:hidden (6483) armado. Solto SÓ onde o defeito
   existe (teto 429, não 699: acima disso a fileira do meio inflaria pela
   razão intrínseca da foto alta sem necessidade). Em 360 as fileiras vão
   a 108/180/108, clip 0, e a foto par (.qb--d) acompanha sem vão. */
@media (max-width:429px){
  .qb-cita{aspect-ratio:auto;min-height:0}
  .qb--d{aspect-ratio:auto}
}

/* 15 · Três raios no mesmo painel: retrato 18px fixo (6324), bento e
   citação 14px (6386/6394), credencial 16px. 18 e 14 não são degraus da
   escada re-tokenizada (4489-4501) no desktop; o precedente da própria
   varredura (4517: o retrato antigo .quem-foto → --r-lg=16) decide o
   degrau. Painel interno unificado em 16px. */
.qm-retrato img{border-radius:var(--r-media)}
.qb,.qb-cita{border-radius:var(--r-media)}

/* 16 · Aspas da citação em #d69a3c: 2,42:1 sobre o cartão creme — quase
   somem — e segundo dourado a centímetros do em em #8a5a14 (5,81:1).
   #8a5a14 é a tinta canônica de glifo dourado em superfície clara
   (eyebrows, .qm-virada, ícones da própria seção, o em vizinho). */
.qb-aspas{color:#8a5a14}

/* ---------- Foco unificado do .btn: complemento medido (23/08) ----------
   Com a regra da era do chanfro removida (ex-1027), o anel externo da 4541
   passou a aparecer de verdade e a medicao por teclado revelou o buraco da
   lista da 4124: o CTA dos modulos senta no creme do .mods-panel e o anel
   gold-honey mede 1,42:1 (hero 5,44 e depoimentos 5,06 com #8a5a14; fundos
   escuros 10,8-11,6 com gold-honey). Mesmo remedio da 4124, mesmo dourado
   escuro dos paineis claros. */
.mods-panel a:focus-visible{outline-color:#8a5a14}

/* ==========================================================================
   Camada · RODADA DE LAYOUT #metodo + #quem (23/08, referência visual do
   dono). A referência é IMAGEM DE IA com conteúdo fabricado: ela governa
   só moldura, sombra, arranjo e o cartão — os seis screenshots reais são
   o conteúdo e NÃO mudam. Nenhum texto mudou (spans envolvem palavras que
   já existiam; certificado por strip de tags contra o HEAD).

   INVENTÁRIO DE ÓRFÃOS desta camada (neutralizados por cascata, mantidos
   no arquivo como os demais órfãos do projeto):
   · o RASGO inteiro dos recortes: os 3 polígonos da base (3457/3479/3501),
     as cópias em .nz img da camada REFINO, o papel por background+padding
     no img e o drop-shadow no figure (REFINO item 6 + camada 5642);
   · a família da citação do bento: .qb-cita/.qb-aspas (6393-6407,
     6483-6488) e o bloco max-width:429 da camada REFINO (o .qb--d volta
     ao 4/3 aqui, porque a citação que pedia a fileira alta saiu);
   · o .news-tag centrado em bloco (3536-3540): agora vive na régua
     .cfm-foot, em flex.
   ========================================================================== */

/* --- E2 · cartão do miolo (linguagem do painel de bônus) ---------------- */
/* Gramatica de profundidade: fundo do entorno medido em rgb(20,12,6)
   (lum ~13,6); o cartão desce para #120b06→#0c0703 (lum 12,5→8,0), camada
   à frente mais escura. Borda, sombra e medalhão são as receitas do painel
   (7255-7273) e do .med (7306), com o medalhão QUADRADO da referência. */
.cfm-card{
  position:relative;margin-top:26px;
  background:linear-gradient(160deg,#120b06,#0c0703 70%);
  border-radius:var(--r-lg);
  padding:clamp(20px,2.2vw,30px) clamp(18px,2vw,28px);
  box-shadow:0 40px 90px -40px rgba(0,0,0,0.85),0 0 90px -20px rgba(214,154,60,0.18);
}
.cfm-card::before{
  content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
  border-radius:var(--r-lg);padding:1px;
  background:linear-gradient(180deg,
    var(--gold-honey) 0%,
    var(--gold-mid) 22%,
    var(--line-30) 62%,
    var(--line-15) 100%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
          mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
}
/* alvo explícito, nunca `> *` (armadilha do selo do painel, 7274) */
.cfm-card-head,.cfm-card p,.cfm-card .btn{position:relative;z-index:1}
.cfm-card-head{display:flex;align-items:center;gap:16px;margin:0 0 14px}
.cfm-med{
  flex:none;width:60px;height:60px;border-radius:12px;
  display:grid;place-items:center;
  background:radial-gradient(120% 120% at 50% 12%,rgba(214,154,60,0.16),rgba(24,15,8,0.9) 68%);
  border:1px solid var(--line-25);color:var(--gold-honey);
  box-shadow:inset 0 1px 0 var(--line-30);
}
.cfm-med .ic{width:30px;height:30px}
.cfm-card-title{
  margin:0;font-size:clamp(19px,1.75vw,25px);line-height:1.25;
  font-weight:700;color:var(--ink-title);text-wrap:balance;
}
/* o p do cartão herdava o mb 34 do p:last-of-type da base (450) */
.urgencia-grid .cfm-card p{margin:0 0 22px}
/* e o p de intro virou o único p direto da coluna: sem isto ele herdaria
   os mesmos 34px e abriria a intro da lista */
.urgencia-grid h2 + p:last-of-type{margin-bottom:16px}

/* --- E3 · checks: do traço fino ao glifo cheio arredondado -------------- */
/* mesma caixa de renderização nos quatro por construção: content vazio +
   19x19 fixo + máscara (a cor segue no background, canônico gold-honey).
   A animação de reveal (1150-1155) transforma o ::before e segue valendo. */
.cfm-list li::before{
  content:"";flex:none;width:19px;height:19px;margin-top:3px;
  background:var(--gold-honey);
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4.5 12.8l4.8 4.8L19.5 7' fill='none' stroke='%23000' stroke-width='4.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat;
          mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M4.5 12.8l4.8 4.8L19.5 7' fill='none' stroke='%23000' stroke-width='4.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") center/contain no-repeat;
}

/* --- E4 · recortes viram cartões ---------------------------------------- */
/* Sai o rasgo (órfãos no inventário acima). O papel volta ao figure, sem
   clip em lugar nenhum — então box-shadow volta a funcionar direto, sem
   drop-shadow. Sombra em duas camadas na estrutura da casa (contato curto
   + ambiente difusa, 5076), com opacidade de fundo escuro. Rotações
   ±1,7/1,4° → −0,5/+0,4° (quase alinhado); cascata mais apertada
   −23 → −42px no desktop, com os títulos conferidos visíveis. */
.nz img,.nz:nth-child(3n+2) img,.nz:nth-child(3n) img{clip-path:none;background:none;padding:0}
.nz{
  background:#fbf8f1;
  padding:clamp(12px,1.4vw,18px) clamp(10px,1.2vw,14px);
  border-radius:12px;filter:none;
  box-shadow:0 2px 5px rgba(0,0,0,0.4),0 26px 54px -26px rgba(0,0,0,0.65);
}
.nz:nth-child(odd){transform:rotate(-0.5deg)}
.nz:nth-child(even){transform:rotate(0.4deg)}
.nz + .nz{margin-top:clamp(-42px,-2.4vw,-24px)}

/* A régua é o TERCEIRO filho do grid e, ocupando 1/-1, impede o auto-fit
   de colapsar a trilha fantasma: as colunas caíam de 518 para 327px. Coluna
   explícita no degrau que já existe (a costura 899/900 da banda da base):
   ≤899 segue 1fr pela camada REFINO; ≥900 vira o par de colunas de sempre. */
@media (min-width:900px){
  .urgencia-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* --- E5 · régua de rodapé da seção -------------------------------------- */
.cfm-foot{
  grid-column:1/-1;display:flex;align-items:center;
  justify-content:space-between;gap:18px;margin-top:10px;
}
.cfm-foot .news-tag{display:inline-flex;align-items:center;gap:10px;margin-top:0;text-align:left}
.cfm-foot .news-tag .ic{flex:none;width:15px;height:15px;color:var(--gold-mid)}
.cfm-foot .news-tag span{display:block;text-wrap:balance}
.cfm-ecg{flex:none;width:clamp(84px,9vw,140px);height:24px;color:var(--gold-mid)}
@media (max-width:760px){
  .cfm-ecg{width:72px}
  .cfm-foot{gap:14px}
}

/* --- Q1 · bento em seis fotos ------------------------------------------- */
/* A citação saiu do grid (a frase segue na carta, .qm-virada). O slot é um
   .qb vazio (paleta da seção, mesma proporção), PENDENTE: foto real. A
   fileira alta que a citação pedia em ≤429 morre com ela: o .qb--d volta
   ao 4/3 e as três fileiras ficam uniformes de novo no celular. */
@media (max-width:429px){
  .qb--d{aspect-ratio:4/3}
}

/* --- Q2 · faixa de papéis: tratamento A3 dos chips ----------------------- */
/* Medido antes: caixas 18x18 idênticas, vão 14,0 nos quatro, tops de
   título e de descrição uniformes, corpo 14.5/13 idêntico — já no padrão.
   Dois defeitos reais: (1) glifos em gold-honey (#ecc45f) sobre o creme
   do painel = 1,4:1, quase invisíveis — vão à família #8a5a14 calibrada
   para fundo claro nesta seção (~4,9:1); (2) centroide de alfa da bandeira
   (ic-flag) a −7,5%/−8,3% do centro (mastro à esquerda, pano no topo) —
   nudge de +1,4/+1,5px devolve ao alvo de 3%. Os outros três já estão
   dentro (users +1,1/+0,5; cross 0/−2,1; book 0/−1,9). */
.qm-papeis .qmp-ic .ic{color:#8a5a14}
.qm-papeis li:nth-child(4) .ic{transform:translate(1.4px,1.5px)}

/* ---------- Fotos do bento + escudo da credencial (23/08, rodada curta) --
   O placeholder PENDENTE saiu do HTML; ele nunca teve CSS próprio (reusava
   .qb), então nada vira órfão aqui. As seis células agora servem
   bento-0N-560.webp (560x560 = 2x da célula mais larga, 280px em 960).
   1) Na selfie com os filhos (qb--c) os olhos da filha ficam a ~10% do
      topo: o corte vertical das células 4/3 (12,5% por lado no centro)
      passaria NA linha dos olhos. center 30% desloca a janela (corte
      7,5% topo / 17,5% base) e protege os três rostos; sem media query
      porque vale nos dois regimes (nas células altas o eixo vertical é
      inteiro e a declaração é quase inerte).
   2) Escudo da credencial: mesmo defeito dos papéis — glifo gold-honey
      sobre o cartão branco, 1,64:1 medido. Mesma correção, #8a5a14
      (família calibrada para claro nesta seção). O escudo do rodapé do
      #metodo usa var(--gold-mid) em seletor próprio (.cfm-foot .news-tag
      .ic) e não compartilha token com esta regra. */
.qb--c img{object-position:center 30%}
.qm-cred-ic .ic{color:#8a5a14}

/* ==========================================================================
   Camada · RODADA MOBILE M1-M6 (23/08). Publicada a página, os ajustes de
   celular pedidos pelo dono + o M1 (desktop e mobile). Cada número medido
   no harness antes e depois; a causa raiz do M5 está no comentário dele.
   ========================================================================== */

/* --- M1 · #para-quem vira painel claro (desktop E mobile) ---------------- */
/* Mesma anatomia do .depo-box/.mods-panel: o .container vira o painel (a
   seção não tem wrapper interno e o padrão dos vizinhos é painel recuado
   por --card-pad). Tokens --lt-* definidos AQUI porque só existem dentro
   dos painéis claros (aviso da 6627). Cards invertem para a linguagem do
   cartão branco canônico (.v4-mod: #fff, borda 101,71,22/.10, sombra em 2
   camadas) e os medalhões vão à família #8a5a14 como os papéis da #quem. */
#para-quem .container{
  max-width:none;margin:0 var(--card-pad);width:auto;
  --lt-ink:#241708;--lt-ink-2:#57493a;--lt-ink-3:#8a7c6a;
  background:linear-gradient(180deg,#faf6ee,#f2ece0);
  border:1px solid rgba(101,71,22,0.10);
  border-radius:clamp(26px,3.2vw,48px);
  padding:clamp(34px,4.6vw,72px) clamp(18px,3vw,52px) clamp(38px,4.6vw,64px);
  box-shadow:0 40px 100px -50px rgba(0,0,0,0.9),inset 0 1px 0 rgba(255,255,255,0.6);
}
#para-quem .container > *{max-width:1380px;margin-inline:auto}
/* no depo o painel e flex align-center e o eyebrow encolhe (210px); o
   container-painel daqui e block, entao o fit-content reproduz o pill */
#para-quem .sec-eyebrow{width:fit-content;border-color:rgba(101,71,22,0.22);background:rgba(255,255,255,0.7)}
#para-quem .sec-eyebrow span{color:#8a5a14}
#para-quem .sec-eyebrow .dot{background:#b5771e;box-shadow:none}
#para-quem .section-title{color:var(--lt-ink)}
#para-quem .section-title::after{opacity:.35}
#para-quem .section-title .gold-accent{
  background:linear-gradient(135deg,#8a5a14,#c98a28);
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
#para-quem .section-subtitle{color:var(--lt-ink-2)}
/* A superficie do card e o ::before mascarado (squircle v3 do dono, 5336:
   furo no canto + icone vazado; o card e background:none e o ::before
   pinta ACIMA do fundo do elemento, ordem de pintura do stacking context).
   A inversao entao recolore o ::before: branco canonico + bloom dourado
   suave + anel interno na tinta clara (a mascara recorta box-shadow
   externo, entao a definicao e por inset, que a mascara acompanha). O
   medalhao segue VAZADO como a v3 manda, so trocando o gold-honey (1,4:1
   no creme) pela familia #8a5a14. */
#para-quem .conq-card{background:none;border:0;box-shadow:none}
#para-quem .conq-card::before{
  /* C1 item 2 (23/08): bloom da base reduzido 0.16/0.05 -> 0.07/0.02 —
     a tinta na base media (7,16,31) de delta sobre o branco e lia como
     mancha no painel claro; no novo nivel mede ~(3,7,13), brilho sutil. */
  background:
    radial-gradient(85% 72% at 50% 118%,
      rgba(201,138,40,0.07), rgba(201,138,40,0.02) 55%, transparent 76%),
    linear-gradient(180deg,#ffffff,#faf5ec);
  box-shadow:inset 0 0 0 1px rgba(101,71,22,0.12),inset 0 1px 0 rgba(255,255,255,0.9);
}
#para-quem .conq-card h3{color:var(--lt-ink)}
#para-quem .conq-card p{color:var(--lt-ink-2)}
#para-quem .trust-ic{
  background:none;
  border:1.5px solid rgba(138,90,20,0.55);
  color:#8a5a14;
}
#para-quem .conq-card:hover .trust-ic{
  border-color:rgba(138,90,20,0.9);
  box-shadow:0 0 20px rgba(138,90,20,0.22);
}
/* anel de foco pela regra da 4124: dourado escuro em contexto claro */
#para-quem a:focus-visible{outline-color:#8a5a14}

/* --- M2 · depoimentos no celular: lista estática mascarada --------------- */
/* ≤940 já empilha, desliga a animação e esconde os .dup (2798-2811; o
   prefers-reduced-motion desliga o marquee no desktop na 2807, conferido).
   Aqui só falta o M2: as colunas 2-3 fora do DOM visível e a janela de
   3 cards inteiros + metade do 4º. Medido em 360: card 184, gap 16 →
   3×184 + 3×16 + 92 = 692px. Sem scroll interno: overflow hidden, o
   resto da página segue na rolagem natural. */
@media (max-width:760px){
  .depo-box .tcol--2,.depo-box .tcol--3{display:none}
  /* a 4451 (.depo-box .tq, mesma especificidade, posterior a 2805)
     ressuscitava os .dup; e a 4469 fixava a pista em 504. */
  .depo-box .tq.dup{display:none}
  /* V4 (23/08): sai a janela de 716 com o 4º cortado; ficam EXATAMENTE 3
     depoimentos inteiros em altura natural. O nth-of-type conta as figures
     da coluna 1 (1-5 únicas, 6-10 duplicatas): n+4 esconde 4º e 5º — só
     aqui; no desktop os cinco seguem no loop. */
  .depo-box .tcol:first-child .tq:nth-of-type(n+4){display:none}
  .depo-box .tcols{height:auto;max-height:none;overflow:visible;
    -webkit-mask-image:none;mask-image:none}
}

/* --- M3 · #metodo no celular: prova de terceiros antes do pitch ---------- */
/* Ordem nova ≤760: título → checks → recortes → cartão+CTA. A coluna 1
   vira display:contents e os filhos entram no grid (1 coluna ≤899) com
   order — sem mover HTML. ⚠¹ o data-reveal da coluna perde a caixa: o
   reveal não anima esses filhos no celular (conteúdo sempre visível —
   aceito, seguro para conversão). ⚠² gap:0 porque o row-gap somaria com
   as margens próprias dos blocos em todos os vãos. */
@media (max-width:760px){
  .urgencia-grid{gap:0}
  .urgencia-grid > div:first-child{display:contents}
  .urgencia-grid h2{order:1}
  .urgencia-grid h2 + p{order:2}
  .urgencia-grid .cfm-list{order:3}
  .urgencia-visual{order:4;margin-top:16px}
  /* V5 (23/08): a régua é legenda dos recortes e sobe colada neles;
     o cartão com o CTA fecha a seção. */
  /* L5 (23/08): a regua saiu da pagina; a regra de ordem que a
     posicionava morreu junto (o cartao com o CTA segue em order:6). */
  .urgencia-grid .cfm-card{order:6;margin-top:30px}
}

/* --- M4 · módulos no celular: faixa nativa, receita da faixa de bônus --- */
/* O motor coverflow rodava em qualquer largura e os cards de 151px saiam
   cortados nas bordas do painel. ≤760 o motor NÃO liga (patch no main.js:
   o setPointerCapture engoliria a rolagem nativa — a lição do cf) e o CSS
   monta a faixa: card inteiro central (min(64vw,230px) → 230 em 360, com
   espiada simétrica de ~20px), snap por card, espaçador ::after como item
   REAL (margem-end não conta na área de rolagem do Chromium) e
   touch-action:auto anulando o pan-y do motor (4303). Setas escondidas:
   cobririam as bordas do card; o arrasto nativo + dica bastam. --meta
   liberado: na faixa todo card é "frente" e mostra o título. */
@media (max-width:760px){
  /* C2+F1 (23/08): card FIXO 200px por ordem do dono ("proporcionalmente
     menores"); altura segue a proporcao 2/3 do poster = 300 em 200.
     Sistema C2 mantido: trilho full-bleed, padding-inline 24, gap 12,
     scroll-padding 24, snap center; Chromium ignora padding-END (licao
     da rodada R), o espacador e item real. Com card fixo as guardas
     derivadas viram funcao da viewport. G1/G2a (23/08, referencias do
     dono): fatia da espiada de 40px MEDIDA no vizinho ja escalado a .9
     (a borda rendida recua 0.05*card); janela = 200+2*(12+40+10) =
     324, inset com clamp em zero para viewport menor que a janela (a
     fatia encolhe naturalmente). */
  .fan{--fanw:200px}
  /* G3-correcao (23/08): o overflow-x:clip do .mods-light .fan e
     contencao do LEQUE 3D do desktop; aqui ele apertava a pintura a
     caixa do container e comia a fatia do vizinho (25px pintados onde
     a conta por rect dava 40 - as sondas da G/G2 mediram contra o
     clip-path e nao viram este clip). No mobile quem corta e o
     clip-path do proprio scroller, entao o clip do .fan abre. A faixa
     nao vaza pagina: o stage e o scroller e contem os cards. */
  .mods-light .fan{overflow-x:visible}
  .fan-stage{
    display:flex;gap:12px;height:auto;perspective:none;transform-style:flat;
    overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;
    scroll-snap-type:x mandatory;scroll-behavior:smooth;
    touch-action:auto;cursor:default;padding:0 24px 18px;scrollbar-width:none;
    width:100vw;margin-inline:calc((100% - 100vw)/2);
    scroll-padding-inline:24px;
    /* o CORTE da guarda C2: o padding nao mascara conteudo rolado; quem
       corta e o clip do proprio scroller. G2a: janela recalibrada para
       a fatia VISIVEL do vizinho escalado ficar em 40. Quem CALA o
       vizinho segue sendo o G2 (badge/titulo so no .is-center). */
    clip-path:inset(0 max(0px,calc((100vw - 324px)/2)));
  }
  .fan-stage::-webkit-scrollbar{display:none}
  .fan-card{
    position:relative;left:auto;top:auto;
    flex:0 0 var(--fanw);width:var(--fanw);
    transform:none;opacity:1;z-index:auto;will-change:auto;
    scroll-snap-align:center;
  }
  /* extremos CENTRADOS no repouso (D2): 24 + margem do 1o =
     (100vw-200)/2 poe o card no centro, independente do inset; o fim
     centra sozinho porque o fan-stage e o proprio scroller e o
     padding-right DELE conta na area de rolagem (12 gap + espacador +
     24 pad = (100vw-200)/2). Fatia identica em todas as posicoes. */
  .fan-card:first-child{margin-left:calc(50vw - 124px)}
  .fan-stage::after{content:"";flex:0 0 calc(50vw - 136px)}
  .fan-meta{opacity:1}
  .fan-nav{display:none}
  /* G2+G2a-c (23/08): vizinhos MUDOS e RECUADOS - so o card .is-center
     (marcado pelo main.js no ramo sem motor) mostra badge e titulo; os
     demais encolhem a scale(.9) com origem no centro (recuo vertical
     de ~15px em cima e embaixo; transform nao move layout nem snap) e
     recebem o recuo de LUZ pela propria .fan-veil da secao (opacity
     .26 sobre o poster escuro, carta em espera). Fade ASSIMETRICO
     (G2c): sainte apaga/encolhe em .1s (transition do estado :not),
     entrante acende/cresce em .25s (transition do estado base) -
     opacidade, escala e luz juntas. Sem JS nao ha marca e nada muda. */
  html.js .fan-card{transition:transform .25s ease}
  html.js .fan-card .fan-badge,html.js .fan-card .fan-meta,
  html.js .fan-card .fan-veil{transition:opacity .25s ease}
  html.js .fan-card img{transition:filter .25s ease}
  html.js .fan-card:not(.is-center){transform:scale(.9);transition-duration:.1s}
  html.js .fan-card:not(.is-center) .fan-badge,
  html.js .fan-card:not(.is-center) .fan-meta{opacity:0;transition-duration:.1s}
  /* G3 (23/08): a intensidade do veu dos vizinhos vira VARIAVEL
     (--veu-viz) para a calibragem A/B/C do dono - o veu de .26 deixava
     o poster fotografico competindo com o central. saturate(.6) no img
     apaga o dourado (filter no img nao cria grouping que importe: o
     fan mobile nao flipa e o img ja e camada propria absoluta).
     Entrante limpa no tempo LENTO (.25s, transicao base); sainte
     escurece no RAPIDO (.1s, transicao do estado :not). */
  /* J1 (23/08): o veu do vizinho e PLANO por contrato - sem mascara e
     sem gradiente, solido em B, cobrindo o card inteiro no elemento
     que escala. O computado em 360 ja dava mask none e fundo solido;
     a guarda explicita impede fade vertical futuro do desktop de
     vazar para ca (fade vertical e linguagem do desktop e morre
     abaixo de 760). */
  html.js .fan-card:not(.is-center) .fan-veil{
    opacity:var(--veu-viz,.65);transition-duration:.1s;
    mask:none;-webkit-mask:none;background-image:none;
  }
  /* G3c: o veu multiplicativo deixava a dinamica da arte passar (perfil
     8..52 no miolo, banda dourada da lupa); a compressao no img achata
     a coluna. As pontas que restam acesas sao EXTERNAS ao card: o creme
     da secao pelos arcos do raio e o respiro do recuo G2a - a cobertura
     do veu e integra (rect do veu = rect do card, medido). */
  html.js .fan-card:not(.is-center) img{filter:saturate(.5) brightness(.7) contrast(.5);transition-duration:.1s}
}

/* --- M5 · packs de especialidade: a faixa volta a rolar ------------------ */
/* CAUSA RAIZ (armadilha nova, registrada no handoff): a base do motor
   declara `.cf-frame{touch-action:pan-y}` (3846, "arrasto horizontal é
   nosso") — certo para o arrasto por ponteiro do desktop. A camada da
   faixa (8224) redefiniu overflow/snap/perspective mas ESQUECEU o
   touch-action: o navegador só permitia pan vertical e a faixa nascia
   morta no toque, desde sempre (a validação da rodada R foi geométrica,
   não de pan real). Não era o guard do motor (o main.js desliga o motor
   ≤760 antes de qualquer listener) nem pointer-events (auto, medido).
   E o card de 230 em 324 úteis deixava só 35px do vizinho à vista.
   --cfcw 184 (banda 176-190): card ativo inteiro + 58px de espiada por
   lado. GUARDA DO VERSO: altura max(184*1.12, 258) = 258, a mesma dos
   258 validados; verso mais denso re-medido na largura nova (números no
   relatório da rodada). */
@media (max-width:760px){
  .cfw .cf-frame{touch-action:auto}
  /* C3+F2 (23/08): o card VOLTA ao 230x258 do desktop por ordem do dono
     ("como era, sem os cortes"), o par do verso de origem (242 em 258;
     o corte HORIZONTAL do selo era defeito de origem, morto no D1).
     Sistema C2 mantido: frame full-bleed,
     padding-inline 24, gap 12, scroll-padding 24, snap center, ALTURA
     TRAVADA em 258 (height explicito: % no --cfcw resolveria contra a
     largura). Guardas derivadas como no C2+F1 (janela = 230+2*24 = 278):
     fatia do vizinho IGUAL em todas as posicoes; no G1/G2a (23/08)
     ela vale 40 MEDIDA no vizinho ja escalado a .9 (janela =
     230+2*(12+40+11.5) = 357, inset com clamp em zero; viewport menor
     que a janela encolhe a fatia naturalmente).
     Extremos (D2): 24 + margem do 1o = (100vw-230)/2 centra o repouso
     e o espacador centra o fim de curso, porque o cf-frame NAO conta o
     proprio padding-end na area de rolagem (ao contrario do
     fan-stage). G2: o vizinho tambem fica MUDO, frente e verso, e
     perde o flip ao perder o centro (regras html.js abaixo). */
  .bonus-section .cfw{--cfcw:230px}
  .cf-card{height:258px}
  .cfw .cf-frame{
    width:100vw;margin-inline:calc((100% - 100vw)/2);
    padding-left:24px;padding-right:24px;
    scroll-padding-inline:24px;
    clip-path:inset(0 max(0px,calc((100vw - 357px)/2))); /* corte da guarda C2; G2a janela 357 */
  }
  .cf-card:first-child{margin-left:calc(50vw - 139px)}
  .cf-stage::after{content:"";flex:0 0 calc(50vw - 127px)}
  /* A2: a dica fala a lingua do dedo - abaixo de 760 o CLIQUE vira
     TOQUE (spans no index; o desktop mantem CLIQUE no bloco proprio,
     no fim do arquivo). */
  .cf-hint .dica-clique{display:none}
  /* G2+G2a-c (23/08): frente E verso dos vizinhos mudos, encolhidos a
     scale(.9) (recuo vertical de ~13px; o !important bate o
     transform:none !important do bloco M3+R3 - e o 3D do flip nao
     sofre: o preserve-3d vive no .cf-inner, abaixo do card, e o
     .is-center fica sem transform nem filter, flipando livre de
     grouping) e com recuo de LUZ brightness(.88) - o pack e claro
     sobre secao escura, carta em espera sem parecer defeito. Fade
     assimetrico (G2c): sainte .1s, entrante .25s, opacidade + escala
     + luz juntas. Sem JS nao ha marca e nada muda. */
  html.js .cfw .cf-card{transition:transform .25s ease,filter .25s ease}
  html.js .cfw .cf-face>*{transition:opacity .25s ease}
  html.js .cfw .cf-card:not(.is-center){transform:scale(.9)!important;filter:brightness(.88);transition-duration:.1s}
  html.js .cf-card:not(.is-center) .cf-face>*{opacity:0;transition-duration:.1s}
}

/* --- H · hero mobile pela MONTAGEM do dono (23/08) - substitui o M6 --- */
/* Rosto em close dominando o alto da primeira dobra, bloco inteiro
   assentado na base (flex-end), degrade vertical claro carregando o
   contraste, selo no canto como esta. A foto e a MESMA cena do
   banner-topo 1920x1080 (a montagem e um zoom dela; nao ha original
   maior da cena no acervo - nitidez do close medida no relatorio).
   Calibragem MEDIDA na fonte com regua (banner-topo 1920x1080): cabeca
   do cabelo ao queixo y 60..550 (~490px), olhos y~340, eixo do rosto
   x~1300. Proporcao da montagem: cabeca ~82% da largura do frame =>
   zoom 0.61 CSS/px => background-size 325vw (upscale de dispositivo
   1.2x em DPR2 e 1.8x em DPR3). Posicao: 73.3% horizontal segura o
   eixo do rosto em ~55% da largura em qualquer vw; vertical por
   comprimento -9.7vw (a imagem e mais BAIXA que o card em 800 - %
   nao alcanca - e o comprimento escala com o zoom), olhos em 22.8%
   (800), 28.4% (640) e 23.2% (844), na faixa 22-30 nos tres. O fundo
   abaixo do fim da foto e o degrade + o creme do cartao. O zoom de
   entrada sai: ampliaria o upscale do close. */
@media (max-width:760px){
  .hero-card{
    min-height:0;
    height:calc(100vh - 20px);
    height:calc(100svh - 20px);
    display:flex;flex-direction:column;justify-content:flex-end;
  }
  .hero-card .hero-bg{
    background-size:325vw auto;
    background-position:73.3% -9.7vw;
    -webkit-mask-image:none;mask-image:none;
    animation:none;
  }
  /* a copia desfocada e o scrim lateral pertenciam a composicao antiga
     (medica a direita); no close eles borrariam e escureceriam o rosto */
  .hero-blur-wrap,.hero-scrim-x{display:none}
  /* degrade da montagem: foto limpa ate ~42% (o queixo cai em ~43% em
     800), lavando ate a base clara; e ele quem carrega o contraste do
     bloco (medido no relatorio da rodada) */
  .hero--light .hero-card::after{
    background:linear-gradient(180deg,
      rgba(250,246,238,0) 0%,
      rgba(250,246,238,0) 42%,
      rgba(250,246,238,.62) 58%,
      rgba(250,246,238,.9) 70%,
      rgba(250,246,238,.97) 100%);
  }
  /* bloco na base, espacamento na escala de 8; selo (~64) + 24 de vao */
  .hero-content{margin-top:0}
  .hero-content .hero-title{margin:8px 0 0}
  .hero-content .hero-lede{margin:16px 0 0}
  .hero-content > .btn{margin-top:16px}
  .hero-content .hero-time{margin-top:16px}
  .hero-card .container{padding-bottom:88px}
}

/* J2 (23/08): o rosto respira no topo. O veu claro que cobria a foto
   quase uniforme (o ::before do bloco <=880: 0.72 no topo) vira
   degrade: ZERO ate a linha dos olhos (~30% da altura), encorpando
   suave ate o valor da curva atual na faixa onde o bloco nasce (~48%
   => 0.42) e, dali para baixo, a curva ATUAL segue intacta. SO em
   alturas >=700: em telas baixas o bloco ja nasce no topo (o texto
   fica sobre o cabelo escuro) e o respiro derrubava H1 para 1.42 e
   lede para 2.91 no pior-5% em 640 - o ponto de inicio sobe ate o
   caso-limite: o sistema atual continua, nunca o valor da base.
   Contrastes remedidos no relatorio da rodada J. */
@media (max-width:760px) and (min-height:700px){
  .hero--light .hero-card::before{
    background:linear-gradient(180deg,
      rgba(253,251,246,0) 0%,
      rgba(253,251,246,0) 30%,
      rgba(253,251,246,.42) 48%,
      rgba(253,251,246,.3) 58%,
      rgba(253,251,246,.1) 78%,
      transparent 92%);
  }
}

/* J2b: nas alturas BAIXAS o bloco nasce sobre o cabelo escuro e a
   medicao acusou lede a 4.05 no pior-5% em 640 (divida da H, que
   certificou so o 800). Encorpar e permitido, afinar nunca: o miolo
   do veu ganha +0.1..0.2 de alfa na faixa 34-62%; topo e base como
   eram. */
@media (max-width:760px) and (max-height:700px){
  .hero--light .hero-card::before{
    background:linear-gradient(180deg,
      rgba(253,251,246,.72) 0%,
      rgba(253,251,246,.62) 34%,
      rgba(253,251,246,.55) 50%,
      rgba(253,251,246,.42) 62%,
      rgba(253,251,246,.1) 80%,
      transparent 92%);
  }
}

/* ==========================================================================
   Camada · RODADA V2-V7 (23/08) — partes de desktop. As frentes mobile
   (V4-V7) vivem como emendas nos blocos da rodada M, acima. A V1 (embed
   do Panda) está BLOQUEADA aguardando o snippet do dono — nada do vídeo
   muda aqui.
   ========================================================================== */

/* --- V2 · respiro do painel claro da #para-quem -------------------------- */
/* Antes (medido): padding-block 66,24/64 em 1440 e 34/38 em 360. Dois
   passos da escala de 8 no mínimo: 1440 vai a ~89/86 (+23/+22) e 360 a
   56/56 (+22/+18). */
#para-quem .container{padding-block:clamp(56px,6.2vw,90px) clamp(56px,6vw,86px)}

/* --- C1 (23/08) · REVERSÃO do V3 por ordem do dono (erro de instrução,
   não do agente): a anatomia squircle v3 VOLTA — os content:none e o
   cânone dos depoimentos saíram; a superfície segue sendo a recoloração
   clara da rodada M (branco no ::before mascarado, medalhão vazado em
   #8a5a14). Da rodada V ficam só: painel claro, respiro V2 e eyebrow em
   pill. Polimento de três itens na camada C1 mais abaixo. */

/* --- C4 (23/08) · VSL no Panda Video ------------------------------------- */
/* Wrapper responsivo com a proporção MEDIDA no player em reprodução:
   408x720 (rendition vertical; o master 1080x1920 daria 0,5625 — a
   diferença é arredondamento de rendition e a medida manda). O shell
   .vsl-player acompanha a mesma razão (era 9/16 declarado) e mantém os
   tetos de largura/altura do contêiner atual. O .vsl-video (5633) e o
   vsl-poster.jpg viram órfãos — nada mais os referencia. */
/* o <video> antigo dava largura intrínseca ao shrink-to-fit do
   .vsl-frame{width:auto}; o iframe absoluto não dá nenhuma — sem isto o
   frame colapsa a zero (medido na primeira captura). */
.vsl-frame{width:min(400px,88vw)}
.vsl-player{aspect-ratio:408/720}
.vsl-embed{position:relative;width:100%;height:100%;aspect-ratio:408/720}
.vsl-embed iframe{position:absolute;inset:0;width:100%;height:100%;border:0;display:block}

/* A2 (23/08): contraparte desktop da dica dos packs - o TOQUE some acima
   de 760, onde o clique e literal. Sem regra base: cada lado do
   breakpoint esconde a palavra do outro. */
@media (min-width:760.05px){
  .cf-hint .dica-toque{display:none}
}

/* ==========================================================================
   Camada · RODADA K (23/08) - canal de suporte no WhatsApp
   ==========================================================================
   Botao flutuante: link puro (sem widget de terceiro), circulo de 56 no
   verde oficial #25D366, glifo branco, sombra da casa em duas camadas,
   sem pulso. z-index 64 na escada fixa da casa (55 rail / 60 header /
   65 barra de compra / 70 progresso): o suporte fica ABAIXO da barra,
   que carrega o CTA de compra. Aparicao pelo main.js (hero fora da
   viewport); sem JS, html:not(.js) mostra sempre. Alvo de toque 56>=48.
   No mobile o offset e a altura REAL medida da barra (134) + 12, com o
   env acompanhando o safe-area como a propria barra. */
.zap-flutuante{
  position:fixed;right:24px;bottom:24px;z-index:64;
  width:56px;height:56px;border-radius:50%;
  display:grid;place-items:center;
  background:#25D366;color:#fff;
  box-shadow:0 18px 40px -18px rgba(0,0,0,.55),0 4px 12px -6px rgba(0,0,0,.35);
  opacity:0;visibility:hidden;transform:translateY(8px);
  transition:opacity .3s ease,transform .3s ease,visibility 0s linear .3s;
}
.zap-flutuante.show{
  opacity:1;visibility:visible;transform:none;
  transition:opacity .3s ease,transform .3s ease;
}
.zap-flutuante svg{width:28px;height:28px}
.zap-flutuante:focus-visible{outline:2px solid var(--gold-honey);outline-offset:3px}
html:not(.js) .zap-flutuante{opacity:1;visibility:visible;transform:none}
@media (prefers-reduced-motion:reduce){
  .zap-flutuante{transition:none;transform:none}
}
@media (max-width:760px){
  /* O3 (25/08): sem a barra, o zap desce da conta barra 134+12 para o
     vao da escala (16, casando com o right 16). */
  .zap-flutuante{right:16px;bottom:calc(16px + env(safe-area-inset-bottom,0px))}
}

/* ==========================================================================
   Camada · RODADA L (23/08) - hover do zap, selos da oferta
   ==========================================================================
   ORFAOS INVENTARIADOS (nao apagados) desta rodada: L1 trilho - regras
   .rail em 969-996 e 4150 e o scroll-spy do main.js (~191-206, auto-
   guardado por if(rail), inerte sem o elemento); L4 bandeiras - regras
   .px-pay/.pm em 6118-6130/6147/6159-6160 e os seis simbolos pay-* do
   sprite; L5 regua - .cfm-foot/.cfm-ecg em 8936-8946, .news-tag 3540 e
   o patch 8656-8661. Linhas citadas na numeracao PRE-rodada-L. */

/* L2: hover com escala e elevacao, na MESMA lista de transition do
   .show (sem sobrescrita brigando com o fade de aparicao da K). O
   :focus-visible medido na K fica intocado. Reduced-motion: sem
   escala, so brilho. Botao e fixed, filho direto do body: nenhum clip
   de trilho o contem (conferido por medida na rodada). */
.zap-flutuante.show{transition:opacity .3s ease,transform .2s ease,box-shadow .2s ease}
.zap-flutuante.show:hover{
  transform:scale(1.06);
  box-shadow:0 24px 52px -16px rgba(0,0,0,.6),0 6px 16px -6px rgba(0,0,0,.45);
}
@media (prefers-reduced-motion:reduce){
  .zap-flutuante.show:hover{transform:none;filter:brightness(1.1)}
}

/* L4: tres selos no slot das bandeiras - SVG dourado, rotulo creme em
   duas linhas (primeira leve, segunda negrito), centrado, escala de 8.
   Abaixo de 400 cada selo empilha icone sobre texto (medido em 360:
   os tres cabem em UMA linha nesse formato, sem quebra feia). */
.px-selos{
  display:flex;justify-content:center;align-items:center;
  gap:clamp(16px,2vw,32px);
  margin:16px 0 0;padding:0;list-style:none;
}
.px-selos li{display:flex;align-items:center;gap:8px}
.ps-ic{width:22px;height:22px;color:var(--label-gold);flex:none}
.ps-txt{
  font-size:11px;line-height:1.3;letter-spacing:.02em;
  color:var(--ink-dim);text-align:left;
}
.ps-txt b{color:var(--ink-title);font-weight:700}
@media (max-width:400px){
  .px-selos{gap:12px}
  .px-selos li{flex-direction:column;text-align:center;gap:6px}
  .ps-txt{text-align:center;font-size:10.5px}
}

/* ==========================================================================
   Camada · RODADA N (25/08) - banner de consentimento (LGPD)
   ==========================================================================
   Cartao escuro com borda dourada sutil, raio da gramatica, fixo na
   base: desktop no canto inferior ESQUERDO, mobile assentado acima da
   barra fixa (mesma conta do zap: barra 134 + 12). Dois botoes do MESMO
   tamanho e tipografia - paridade exigida pela regua da ANPD, nao
   estetica. Enquanto o banner esta aberto o zap some (regra ~ abaixo; o
   suporte volta ao fechar). Entrada com fade curto; reduced-motion
   entra sem animacao. Logica no main.js (medux_consent_v1). */
/* N2b (25/08): de cartao para FAIXA de largura total, fixa na base,
   sem overlay e sem bloqueio de rolagem - nao e modal por exigencia de
   conformidade (condicionar a navegacao ao aceite e vedado). Borda
   dourada so na aresta superior; miolo alinhado ao container da pagina
   (1180) no desktop, com titulo/texto a esquerda e os botoes a direita
   na mesma linha; entrada por deslize da base. */
.consent-card{
  position:fixed;left:0;right:0;bottom:0;z-index:66;
  background:rgba(14,10,7,.97);
  border-top:1px solid rgba(214,154,60,.35);
  padding:14px max(var(--pad-x),calc(50vw - 590px + var(--pad-x)));
  box-shadow:0 -18px 48px -26px rgba(0,0,0,.65);
  display:grid;grid-template-columns:1fr auto;
  gap:2px 40px;align-items:center;
  opacity:0;transform:translateY(100%);
  transition:opacity .3s ease,transform .35s ease;
}
.consent-card.show{opacity:1;transform:none}
.consent-card .cc-acoes{grid-column:2;grid-row:1/3}
.cc-btn{min-width:132px}
.cc-titulo{
  display:block;font-family:var(--font-display);font-weight:700;
  font-size:15px;letter-spacing:.02em;color:var(--ink-title);
  margin-bottom:2px;
}
.cc-txt{margin:0;font-size:13px;line-height:1.55;color:var(--ink-dim)}
.cc-txt a{color:var(--gold-honey)}
.cc-acoes{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.cc-btn{
  min-height:48px;border-radius:var(--r-md);cursor:pointer;
  font-family:var(--font-display);font-weight:700;font-size:14px;
  letter-spacing:.02em;
}
.cc-btn--recusar{
  background:transparent;color:var(--ink-title);
  border:1px solid rgba(240,232,220,.55);
}
.cc-btn--aceitar{
  background:var(--grad-cta);color:#1a1206;border:0;
}
.cc-btn:focus-visible{outline:2px solid var(--gold-honey);outline-offset:3px}
.consent-card:not([hidden])~.zap-flutuante{opacity:0;visibility:hidden}
/* O3 (25/08): a barra fixa mobile saiu da pagina inteira; a fiacao da
   Saida 1 que a suprimia com o cartao aberto saiu junto. A supressao
   do zap com o cartao aberto (regra acima) FICA. */
/* o botao do rodape veste a roupa dos links vizinhos */
.fl-btn{
  background:none;border:0;padding:8px 0;cursor:pointer;
  font:inherit;color:inherit;letter-spacing:inherit;
}
.fl-btn:hover{color:var(--gold-honey)}
.fl-btn:focus-visible{outline:2px solid var(--gold-honey);outline-offset:3px}
@media (prefers-reduced-motion:reduce){
  .consent-card{transition:none;transform:none}
}
@media (max-width:760px){
  /* B5 (25/08): no mobile o banner volta a CARTAO flutuante, agora com
     a copy INTEIRA (a regra que escondia a segunda frase MORREU por
     ordem do dono; o trade-off de orcamento e dele, numeros no
     relatorio da rodada). Margens 16, raio da gramatica (--r-lg 16,
     na banda 12-16 pedida), borda dourada no perimetro INTEIRO e
     sombra em duas camadas da casa; O3 (25/08): a barra fixa saiu e o
     cartao assenta na BASE da viewport com o vao da escala (16). O
     desktop segue faixa full-width, intocado. */
  .consent-card{
    left:16px;right:16px;
    bottom:calc(16px + env(safe-area-inset-bottom,0px));
    grid-template-columns:1fr;gap:6px;
    padding:12px;
    border:1px solid rgba(214,154,60,.35);
    border-radius:var(--r-lg);
    box-shadow:0 18px 40px -18px rgba(0,0,0,.6),0 4px 12px -6px rgba(0,0,0,.4);
  }
  .consent-card .cc-acoes{grid-column:1;grid-row:auto;width:100%}
  /* aperto do dono (25/08): corpo um passo abaixo e padding um passo
     mais justo, copy inteira e botoes de 48 intocados */
  .consent-card .cc-txt{font-size:12px}
}

/* ==========================================================================
   Camada · RODADA O (25/08) - logo no hero e no card da oferta
   ==========================================================================
   O2: o eyebrow de duas linhas do hero (.hm-produto/.hm-por) saiu do
   HTML; o logo entra como <img> com o footprint vertical das duas
   linhas: 48px no desktop (o bloco media 48px em 1440x900) e 42px em
   <=760 (media 42px em 360x800), mesmo alinhamento a esquerda.
   ORFAOS NOVOS INVENTARIADOS (nao apagados): .hm-produto 5554/5601,
   .hm-por 5558, .hm-nome 5562/5600/5609/5620, a recolor 6544 e a
   fatia .hm-produto de 5774 (regra compartilhada, fica).
   No card da oferta o selo + MEDUX saiu; o logo entra centralizado no
   slot do .brand (flex ja centrado pela 5413), 44px de altura (o
   bloco do selo media 116x29; 44px da legibilidade ao lettering sem
   mexer na hierarquia do preco). .brand-mark--sm/.brand-name--sm
   viram orfaos inventariados (o site-header, unico outro usuario da
   familia .brand, ja e orfao de HTML). Assets: logo-hero.webp 233x96
   e logo-oferta.webp 213x88 (2x da exibicao), gerados do Logo.png
   original 698x288, preservado em assets/. */
.hm-logo{display:block;height:48px;width:auto;align-self:flex-start}
@media (max-width:760px){
  .hm-logo{height:42px}
}
.preco-card .brand-logo{display:block;height:44px;width:auto}

/* ==========================================================================
   Camada · RODADA Q1 (25/08) - logo cresce nos tres pontos
   ==========================================================================
   A ancora da rodada O (footprint do eyebrow antigo) MORRE. Teto
   tecnico: original 698x288 => exibicao maxima de 349px de largura
   para manter 2x. Hero desktop ~dobro da O: 234x96 (asset 468x192).
   Oferta na mesma proporcao: 214x88 (asset 428x176), centrado no
   slot. O tamanho do hero MOBILE e definido na camada Q2 abaixo
   (composicao do retrato). */
.hm-logo{height:96px}
@media (max-width:760px){
  .hm-logo{height:42px} /* provisorio; a Q2 assume */
}
.preco-card .brand-logo{height:88px}

/* ==========================================================================
   Camada · RODADA Q2 (25/08) - hero mobile em retrato com dissolve
   ==========================================================================
   So <=760; desktop INTOCADO (segue .hero-bg + veus). Asset novo:
   Banner-Mobile.png 1080x1920 -> banner-mobile.webp em 2x da
   exibicao (peso e corte no relatorio da rodada). Composicao: o topo
   do card e o retrato (rosto inteiro, ar acima da cabeca, queixo
   longe do corte), NENHUM texto sobre a foto; a base dissolve em
   degrade multi-parada terminando no token do bloco de texto
   (#faf6ee, o creme rgba(250,246,238) da casa; emenda invisivel);
   abaixo, na ordem: logo (96px, teto 349 da Q1 respeitado), titulo,
   subtitulo, CTA, avatares. Card arredondado e espiada continuam;
   reveals e reduced-motion como estao. NEUTRALIZADOS <=760 (ficam no
   arquivo, inventariados): a montagem 325vw do .hero-bg, os veus
   ::before (J2/J2b) e ::after (degrade da montagem) e o flex-end da
   camada H/J. --foto-h calibra a regua da dobra (valor final medido
   no relatorio). */
.hero-foto-m{display:none}
@media (max-width:760px){
  .hero-card{
    height:auto;min-height:calc(100svh - 20px);
    display:block;overflow:hidden;
  }
  .hero--light .hero-card{background:#faf6ee}
  .hero-card .hero-bg{display:none}
  .hero--light .hero-card::before,
  .hero--light .hero-card::after{content:none}
  .hero-foto-m{display:block;position:relative;width:100%}
  .hero-foto-m img{
    display:block;width:100%;
    height:var(--foto-h,370px);
    object-fit:cover;object-position:50% 0;
  }
  .hero-foto-m::after{
    content:"";position:absolute;left:0;right:0;bottom:0;height:110px;
    background:linear-gradient(180deg,
      rgba(250,246,238,0) 0%,
      rgba(250,246,238,.18) 28%,
      rgba(250,246,238,.48) 52%,
      rgba(250,246,238,.78) 74%,
      rgba(250,246,238,.95) 90%,
      #faf6ee 100%);
  }
  .hero-card .container{padding-top:20px}
  .hm-logo{height:96px}
}

/* ==========================================================================
   Camada · RODADA R1 (25/08) - logo do hero desktop sobe um degrau
   ==========================================================================
   So o hero DESKTOP; hero mobile (96px via media abaixo) e card da
   oferta intocados. Banda pedida 290-310 => 300px de largura (altura
   auto ~124), mesmo ponto e alinhamento a esquerda; teto 349 vigente.
   Asset regenerado em 2x: logo-hero.webp 600x248 (sem upscale do
   original 698x288). O mobile compartilha o arquivo e NAO muda de
   exibicao (233x96, medido). */
.hm-logo{width:300px;height:auto}
@media (max-width:760px){
  .hm-logo{width:auto;height:96px}
}

/* ==========================================================================
   Camada · RODADA S1 (25/08) - respiro logo->titulo no hero desktop
   ==========================================================================
   Vao computado medido antes: 5,4px (vencia o clamp(2px,0.6vh,8px) da
   camada do hero mobile antigo; titulo com margin-top 0). Banda pedida
   24-32 => token 24 da escala da casa (o mais proximo de 5,4). SO o
   desktop; o mobile segue com os 8px medidos (decisao futura do dono).
   Nenhum outro espacamento do hero muda. */
@media (min-width:761px){
  .hero-marca{margin-bottom:24px}
}

/* ==========================================================================
   Camada · RODADA U1 (25/08) - secao de bonus renasce como ancoragem de valor
   ==========================================================================
   O miolo antigo da secao saiu do HTML (chip a CTA). ORFAOS NOVOS
   INVENTARIADOS (nao apagados, somam ao lote pendente): toda a familia
   dash-* (mockup), .cena/.sat/.seta/.painel (com painel-txt)/.kit-shot, .cfw/.cf-*
   (coverflow, faces, setas, hint) e a faixa M3 do snap, .chips/.chip
   (dock), .acesso; no main.js, o motor do coverflow (IIFE guardada por
   if(!frame) na ~1056, inerte) e o flip por tap ficam orfaos. O CTA
   novo herda o repasse de UTM pelo seletor a[href^=pay.kiwify].
   Gramatica: raios dos tokens, borda dourada translucida 1px, sombra
   em duas camadas, glow contido. Copy canonica da rodada U. */
#bonus .bonus-eyebrow span::before,
#bonus .bonus-eyebrow span::after{content:none} /* copy verbatim: o chip e "+ BONUS INCLUIDOS" */
#bonus .bonus-title{max-width:none;font-size:clamp(24px,2.9vw,36px)}
#bonus .bonus-title .gold-shimmer{white-space:nowrap}
.bx-stack{display:grid;gap:clamp(20px,2.4vw,32px);margin-top:clamp(28px,3.2vw,44px)}
.bx-card{
  position:relative;display:grid;
  grid-template-columns:minmax(0,45fr) minmax(0,55fr);
  gap:clamp(24px,3.4vw,56px);align-items:center;
  padding:clamp(26px,3vw,44px);
  border:1px solid var(--line-22);border-radius:var(--r-panel);
  background:
    radial-gradient(120% 90% at 88% 0%,rgba(214,154,60,.07),transparent 55%),
    linear-gradient(180deg,rgba(26,17,9,.85),rgba(16,10,5,.92));
  box-shadow:0 24px 48px -24px rgba(0,0,0,.55),0 6px 16px -8px rgba(0,0,0,.4);
  overflow:hidden;
}
.bx-badge{
  display:inline-flex;align-items:center;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--label-gold);
  border:1px solid var(--line-22);border-radius:999px;
  padding:6px 14px;background:rgba(214,154,60,.08);
}
.bx-h{
  font-family:var(--font-display);font-weight:800;
  font-size:clamp(24px,2.3vw,32px);letter-spacing:.01em;
  color:var(--ink-title);margin:14px 0 0;
}
.bx-k{
  font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--gold-honey);margin:8px 0 0;
}
.bx-d{font-size:15.5px;line-height:1.65;color:var(--ink-body);margin:12px 0 0;max-width:52ch}
.bx-chips{display:flex;flex-wrap:wrap;gap:8px 12px;margin:16px 0 0;padding:0;list-style:none}
.bx-chips li{
  display:inline-flex;align-items:center;gap:7px;
  font-family:var(--font-mono);font-size:11.5px;letter-spacing:.04em;
  color:var(--ink-mut);
}
.bx-chips li:not(:last-child)::after{content:"\00b7";color:var(--ink-faint);margin-left:12px}
.bx-chips .ic{width:15px;height:15px;color:var(--label-gold)}
.bx-valor{
  display:flex;align-items:center;flex-wrap:wrap;gap:12px;
  margin:20px 0 0;padding-top:18px;border-top:1px solid var(--line-12);
  font-size:14px;color:var(--ink-mut);
}
.bx-valor b{font-family:var(--font-mono);font-weight:700;color:var(--ink-title)}
.bx-inc{
  display:inline-flex;align-items:center;gap:8px;
  background:var(--grad-cta);color:#1a1206;
  font-family:var(--font-display);font-weight:700;font-size:12.5px;
  letter-spacing:.08em;text-transform:uppercase;
  padding:8px 16px;border-radius:999px;
}
.bx-inc .ic{width:14px;height:14px}
.bx-visual{min-height:300px;position:relative}
.bx-final{
  margin-top:clamp(28px,3.2vw,44px);
  border:1px solid var(--line-22);border-radius:var(--r-panel);
  padding:clamp(26px,3vw,40px);
  background:
    radial-gradient(120% 100% at 50% 0%,rgba(214,154,60,.06),transparent 60%),
    linear-gradient(180deg,rgba(26,17,9,.85),rgba(16,10,5,.92));
  box-shadow:0 24px 48px -24px rgba(0,0,0,.55),0 6px 16px -8px rgba(0,0,0,.4);
}
.bx-final-grid{
  display:grid;grid-template-columns:auto minmax(0,1fr) auto;
  gap:clamp(20px,3vw,48px);align-items:center;
}
.bx-med{
  width:84px;height:84px;border-radius:50%;
  border:1px solid var(--line-40);display:grid;place-items:center;
  color:var(--gold-honey);
  box-shadow:inset 0 0 30px -10px rgba(214,154,60,.4);
}
.bx-med .ic{width:34px;height:34px}
.bx-tab ul{list-style:none;margin:14px 0 0;padding:0;display:grid;gap:10px}
.bx-tab li{display:flex;align-items:baseline;gap:12px;font-size:14.5px}
.bx-tab li span{color:var(--ink-list)}
.bx-fio{flex:1;border-bottom:1px dotted var(--line-30);transform:translateY(-3px)}
.bx-tab b{font-family:var(--font-mono);font-weight:700;color:var(--ink-title)}
.bx-total{
  display:grid;gap:6px;justify-items:start;
  padding-left:clamp(20px,3vw,48px);border-left:1px solid var(--line-12);
}
.bx-total-lbl{font-size:14px;color:var(--ink-mut)}
.bx-total-num{
  font-family:var(--font-mono);font-weight:700;line-height:1;
  font-size:clamp(40px,4vw,56px);
  background:linear-gradient(135deg,var(--gold-deep),var(--gold-honey));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.bx-total-sub{font-size:12.5px;color:var(--ink-dim)}
.bx-fecho{
  display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:10px;
  margin:clamp(22px,2.6vw,30px) 0 0;padding-top:clamp(20px,2.4vw,26px);
  border-top:1px solid var(--line-12);
  font-family:var(--font-display);font-weight:700;
  font-size:clamp(18px,1.8vw,24px);color:var(--ink-title);
}
.bx-fecho .ic{width:20px;height:20px;color:var(--gold-honey)}
.bx-fecho b{
  background:linear-gradient(135deg,var(--gold-deep),var(--gold-honey));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
.bx-fecho-sub{
  display:block;width:100%;text-align:center;
  font-family:inherit;font-weight:400;font-size:14px;color:var(--ink-mut);
}
.bx-final .btn-row{margin-top:clamp(18px,2.2vw,26px);display:flex;justify-content:center}

/* ==========================================================================
   Camada · RODADA U2 (25/08) - os tres visuais da secao de bonus
   ==========================================================================
   Construidos em HTML/CSS da casa, sem imagem gerada. 1) leque estatico
   com as faces REAIS dos packs (icone, categoria, nome e descricao
   verbatim das cf-front; sem contagem de prompts). 2) mockup de conversa
   do Medico Senior IA: caso generico, o assistente ORGANIZA o raciocinio
   e devolve a decisao ao medico, nunca crava diagnostico. 3) capa do
   guia + checklist com itens reais do material + escudo dourado.
   Gramatica: raios dos tokens, borda dourada 1px, sombra em duas
   camadas, glow contido. */
.bx-visual{min-height:0;display:grid;place-items:center}
/* --- 1 · leque dos packs --- */
.bxk-fan{display:flex;align-items:flex-end;justify-content:center;padding:18px 0 10px}
.bxk-card{
  width:158px;border-radius:14px;padding:14px;
  background:
    radial-gradient(122% 88% at 12% 0%,color-mix(in srgb,var(--pc) 12%,transparent),transparent 62%),
    #fff;
  box-shadow:0 1px 2px rgba(60,40,10,.05),0 22px 46px -24px rgba(60,40,10,.55);
  border:1px solid rgba(60,40,10,.08);
}
.bxk-card:nth-child(1){transform:rotate(-8deg) translateY(10px);z-index:1}
.bxk-card:nth-child(2){transform:rotate(-2.5deg) translateY(-4px);z-index:2;margin-left:-2px}
.bxk-card:nth-child(3){transform:rotate(2.5deg) translateY(-4px);z-index:3;margin-left:-2px}
.bxk-card:nth-child(4){transform:rotate(8deg) translateY(10px);z-index:4;margin-left:-2px}
.bxk-ico{
  display:grid;place-items:center;width:40px;height:40px;border-radius:11px;
  background:linear-gradient(150deg,color-mix(in srgb,var(--pc) 96%,#fff),color-mix(in srgb,var(--pc) 58%,#000));
  box-shadow:0 10px 22px -9px color-mix(in srgb,var(--pc) 75%,transparent);
}
.bxk-cat{
  display:block;margin-top:11px;
  font-family:var(--font-mono);font-size:8.5px;letter-spacing:.14em;
  text-transform:uppercase;color:color-mix(in srgb,var(--pc) 72%,#000);
}
.bxk-nome{
  display:block;margin-top:4px;
  font-family:var(--font-display);font-weight:700;font-size:15.5px;
  line-height:1.12;color:#241708;
}
.bxk-desc{display:block;margin-top:6px;font-size:11px;line-height:1.5;color:#57493a}
/* --- 2 · mockup do Medico Senior IA --- */
.bxs-win{
  width:min(100%,520px);border-radius:var(--r-lg);overflow:hidden;
  border:1px solid var(--line-22);
  background:linear-gradient(180deg,#171009,#100a05);
  box-shadow:0 24px 48px -24px rgba(0,0,0,.6),0 6px 16px -8px rgba(0,0,0,.4);
}
.bxs-top{
  display:flex;align-items:center;gap:12px;
  padding:12px 16px;border-bottom:1px solid var(--line-12);
  background:rgba(214,154,60,.05);
}
.bxs-top b{font-family:var(--font-display);font-weight:700;font-size:13.5px;letter-spacing:.04em;color:var(--label-gold)}
.bxs-dots{display:inline-flex;gap:5px}
.bxs-dots i{width:8px;height:8px;border-radius:50%;background:rgba(214,154,60,.28)}
.bxs-chat{display:grid;gap:12px;padding:18px}
.bxs-msg{margin:0;font-size:12.5px;line-height:1.6;border-radius:12px;padding:12px 14px}
.bxs-msg--user{
  justify-self:end;max-width:85%;
  background:rgba(214,154,60,.12);border:1px solid var(--line-20);
  color:var(--ink-soft);
}
.bxs-msg--ai{
  justify-self:start;max-width:92%;
  background:rgba(255,255,255,.03);border:1px solid var(--line-12);
  color:var(--ink-body);
}
.bxs-msg--ai b{display:block;font-family:var(--font-display);font-weight:700;font-size:12.5px;color:var(--ink-title);margin-bottom:6px}
.bxs-msg--ai ol{margin:0;padding-left:18px;display:grid;gap:3px}
.bxs-msg--ai li::marker{color:var(--gold-honey);font-family:var(--font-mono);font-size:11px}
.bxs-nota{display:block;margin-top:8px;padding-top:8px;border-top:1px dashed var(--line-12);font-size:11.5px;color:var(--ink-mut)}
/* --- 3 · capa do guia + checklist + escudo --- */
.bxc-wrap{position:relative;display:flex;align-items:center;justify-content:center;gap:-1px;padding:14px 0}
.bxc-capa{
  display:flex;flex-direction:column;width:200px;min-height:250px;
  border-radius:14px 4px 4px 14px;padding:18px;
  background:
    radial-gradient(120% 80% at 20% 0%,rgba(214,154,60,.16),transparent 60%),
    linear-gradient(180deg,#1c130a,#0f0905);
  border:1px solid var(--line-30);
  box-shadow:0 24px 48px -22px rgba(0,0,0,.65);
  z-index:2;
}
.bxc-capa-k{font-family:var(--font-mono);font-size:9px;letter-spacing:.2em;text-transform:uppercase;color:var(--gold-honey)}
.bxc-capa-t{
  margin-top:10px;font-family:var(--font-display);font-weight:800;
  font-size:19px;line-height:1.15;color:var(--ink-title);
}
.bxc-capa-s{margin-top:6px;font-size:11.5px;line-height:1.5;color:var(--ink-mut)}
.bxc-capa-f{
  margin-top:auto;padding-top:12px;border-top:1px solid var(--line-12);
  font-family:var(--font-mono);font-size:9px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--ink-dim);
}
.bxc-check{
  list-style:none;margin:0 0 0 -6px;padding:16px 18px;width:230px;
  border-radius:4px 14px 14px 4px;
  background:
    radial-gradient(122% 88% at 12% 0%,rgba(214,154,60,.10),transparent 62%),
    #fff;
  border:1px solid rgba(60,40,10,.08);
  box-shadow:0 22px 46px -24px rgba(60,40,10,.55);
  display:grid;gap:9px;z-index:1;
}
.bxc-check li{
  display:flex;align-items:center;gap:9px;
  font-size:11.5px;line-height:1.4;color:#241708;
}
.bxc-check li::before{
  content:"\2713";flex:none;display:grid;place-items:center;
  width:16px;height:16px;border-radius:5px;font-size:10px;
  color:#1a1206;background:var(--grad-cta);
}
.bxc-shield{
  position:absolute;right:6px;bottom:2px;z-index:3;
  display:grid;place-items:center;width:64px;height:64px;border-radius:50%;
  background:var(--grad-cta);color:#1a1206;
  box-shadow:0 14px 30px -10px rgba(214,154,60,.55);
}
.bxc-shield .ic{width:30px;height:30px}

/* ==========================================================================
   Camada · RODADA U3 (25/08) - secao de bonus no mobile <=760
   ==========================================================================
   Cada cartao empilha (texto primeiro, visual depois, ordem do DOM);
   chips quebram em linha; valor e selo visiveis; alvo de toque do CTA
   >=48 e full-width. O leque vira grade 2x2 com rotacoes suaves (em
   ~252px uteis o leque sobreposto cortaria nomes; a regra e NENHUM
   texto cortado). Capa + checklist empilham. Painel final empilhado
   com o total em destaque. O scroll-snap e o tap-to-flip da secao
   antiga morreram com ela na U1 (orfaos inventariados). */
@media (max-width:760px){
  /* a camada M antiga (~8180) fazia o container da secao virar flex e
     reordenava o cabecalho por order; com o miolo novo isso jogava o
     cabecalho DEPOIS do CTA. Fluxo do DOM de volta. */
  .bonus-section .container{display:block}
  .bx-card{grid-template-columns:1fr;gap:22px;padding:22px 18px;align-items:start}
  .bx-d{font-size:14.5px}
  .bx-valor{gap:10px}
  .bx-inc{min-height:34px}
  /* leque -> grade 2x2 rotacionada, nomes inteiros */
  .bxk-fan{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:4px 0}
  .bxk-card{width:auto}
  .bxk-card:nth-child(1){transform:rotate(-2deg);margin:0}
  .bxk-card:nth-child(2){transform:rotate(1.5deg);margin:0}
  .bxk-card:nth-child(3){transform:rotate(-1.5deg);margin:0}
  .bxk-card:nth-child(4){transform:rotate(2deg);margin:0}
  .bxs-win{width:100%}
  .bxs-msg{font-size:12px}
  .bxc-wrap{flex-direction:column;align-items:stretch;gap:12px;padding:4px 0 26px}
  .bxc-capa{width:100%;min-height:0;border-radius:14px;padding:16px}
  .bxc-capa-f{margin-top:14px}
  .bxc-check{width:100%;margin:0;border-radius:14px}
  .bxc-shield{right:8px;bottom:-6px}
  /* painel final empilhado */
  .bx-final{padding:22px 18px}
  .bx-final-grid{grid-template-columns:1fr;gap:18px;justify-items:start}
  .bx-med{width:64px;height:64px}
  .bx-med .ic{width:26px;height:26px}
  .bx-tab li{font-size:13.5px}
  .bx-total{padding-left:0;border-left:0;padding-top:16px;border-top:1px solid var(--line-12);width:100%}
  .bx-total-num{font-size:44px}
  .bx-fecho{font-size:17px;text-align:center}
  .bx-final .btn-row{width:100%}
  .bx-final .btn{width:100%;min-height:48px}
}

/* ==========================================================================
   Camada · RODADA U5 (25/08) - acabamento premium da secao de bonus
   ==========================================================================
   a) o total R$ 1.291 veste a VOZ do 72,02 (px-val): display 800,
      kerning natural -.02em, gradiente dourado do token, tabular-nums;
      tamanho segue a regua do painel (clamp da U1). b) o sub sobe um
      passo (12.5 -> 14) em creme. c) tabela mobile: valor sem quebra a
      direita, rotulo ate 2 linhas com valor centrado. d) separadores
      dos chips viram ::before absoluto no VAO esquerdo de cada chip,
      com overflow:hidden no trilho: quem abre linha tem o ponto
      clipado fora, entao o ponto so existe ENTRE chips da mesma linha
      (em 1440 os cartoes 2 e 3 quebram e nenhum aperto fecha: medido);
      no empilhado <=760 somem por content:none. e) leque de -12 para
      -2 por medicao (21 -> 0 pontos de texto ocultos; sobreposicao
      mantida como linguagem). f) selo INCLUIDO no mobile SEMPRE abaixo
      nos tres cartoes (flex-basis 100%). */
.bxk-card{width:142px} /* e) 158 -> 142: com o leque em -2 o cartao 4 estourava o clip do bx-card (medido; texto fora: 0/0) */
.bx-total-num{
  font-family:var(--font-display);font-weight:800;letter-spacing:-.02em;
  font-variant-numeric:tabular-nums;
  background-image:linear-gradient(100deg,#ecc45f,#f7e3a8 50%,#d99a3a);
}
.bx-total-sub{font-size:14px;color:var(--ink-soft)}
.bx-chips{overflow:hidden;gap:8px 20px}
.bx-chips li{position:relative}
.bx-chips li:not(:last-child)::after{content:none}
.bx-chips li::before{
  content:"\00b7";position:absolute;left:-13px;top:50%;
  transform:translateY(-50%);color:var(--ink-faint);
}
@media (max-width:760px){
  .bx-tab li{align-items:center}
  .bx-tab b{white-space:nowrap;text-align:right}
  .bx-chips li::before{content:none}
  .bx-valor .bx-inc{display:flex;flex-basis:100%;width:max-content;margin-top:2px}
}

/* ==========================================================================
   Camada · RODADA V2 (25/08) - o chat do Bonus 2 vira navegador claro
   ==========================================================================
   Mockup de navegador com interface CLARA no layout de chat de IA:
   chrome com tres pontos e titulo (sem barra de URL), sidebar estreita
   sugerida, conversa centrada, composer na base. Sem marca de
   terceiros. Contraste sobre claro: tinta #241708 (>10:1), corpo
   #57493a (~8:1), apoio #75684f (4,68:1, token auditado da casa).
   As regras escuras da U2 abaixo ficam VENCIDAS por estas (cascata). */
.bxs-win{
  background:linear-gradient(180deg,#fdfbf7,#f4efe6);
  border:1px solid rgba(60,40,10,.12);
  box-shadow:0 1px 2px rgba(60,40,10,.06),0 24px 48px -24px rgba(60,40,10,.5);
}
.bxs-top{
  background:#f1ece1;border-bottom:1px solid rgba(60,40,10,.09);
}
.bxs-top b{color:#241708}
.bxs-dots i{background:rgba(60,40,10,.16)}
.bxs-body{display:flex;align-items:stretch}
.bxs-side{
  width:44px;flex:none;display:flex;flex-direction:column;align-items:center;
  gap:10px;padding:14px 0;border-right:1px solid rgba(60,40,10,.08);
  background:#f6f2e9;
}
.bxs-side i{width:20px;height:20px;border-radius:6px;background:rgba(60,40,10,.10)}
.bxs-side i:first-child{background:var(--grad-cta)}
.bxs-main{flex:1;min-width:0;display:flex;flex-direction:column}
.bxs-chat{padding:16px 18px 10px}
.bxs-msg--user{
  background:rgba(214,154,60,.14);border:1px solid rgba(214,154,60,.30);
  color:#241708;
}
.bxs-msg--ai{
  background:#fff;border:1px solid rgba(60,40,10,.09);color:#57493a;
  box-shadow:0 1px 2px rgba(60,40,10,.04);
}
.bxs-msg--ai b{color:#241708}
.bxs-msg--ai li::marker{color:#8a5a14}
.bxs-nota{border-top:1px dashed rgba(60,40,10,.14);color:#75684f}
.bxs-composer{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  margin:2px 18px 16px;padding:8px 8px 8px 16px;
  background:#fff;border:1px solid rgba(60,40,10,.13);border-radius:999px;
}
.bxs-composer span{font-size:12px;color:#75684f}
.bxs-send{
  width:30px;height:30px;flex:none;border-radius:50%;
  background:var(--grad-cta);color:#1a1206;
  display:grid;place-items:center;font-style:normal;
}
.bxs-send::before{content:"\2191";font-weight:700;font-size:14px}
@media (max-width:760px){
  .bxs-side{display:none}
}

/* ==========================================================================
   Camada · RODADA V3 (25/08) - capa real no Bonus 3
   ==========================================================================
   assets/capa-conformidade.webp 400x600 (2x da exibicao 200x300),
   gerada de capa conformidade cfm 2.45426.png 680x1020 (492 KB,
   original preservado). A capa PREENCHE o box no raio do slot; por ser
   escura sobre cartao escuro, aresta sutil na receita da casa (borda
   line-30 + realce interno). Checklist branco e escudo ficam. As
   regras bxc-capa-k/t/s/f viram orfas inventariadas (sem apagar). */
.bxc-capa{
  display:block;width:200px;height:auto;min-height:0;padding:0;
  border-radius:14px 4px 4px 14px;
  border:1px solid var(--line-30);
  background:none;
  box-shadow:0 24px 48px -22px rgba(0,0,0,.65),inset 0 1px 0 rgba(255,255,255,.06);
}
@media (max-width:760px){
  .bxc-capa{width:100%;border-radius:14px}
}

/* ==========================================================================
   Camada · RODADA V4 (25/08) - moldura com luz direcional nos 4 paineis
   ==========================================================================
   A borda uniforme de 1px morre. Voz do card de matricula (regua de
   bom gosto: .oferta-trio .preco-card): borda em GRADIENTE com a
   aresta superior mais clara (acento radial no topo-centro dissolvendo
   nas laterais + rampa vertical), realce interno no topo (inset 1px
   branco .07) e glow externo dourado suave e CONTIDO (54px -16px .18,
   sem neon). Tecnica: border transparente + background em padding-box
   (conteudo, base opaca) e border-box (a moldura). Mesma receita nos
   quatro. */
.bx-card{
  border:1px solid transparent;
  background:
    radial-gradient(120% 90% at 88% 0%,rgba(214,154,60,.07),transparent 55%) padding-box,
    linear-gradient(180deg,#1d1309,#120b06) padding-box,
    radial-gradient(52% 44px at 50% 0%,rgba(236,196,95,.60),rgba(236,196,95,0) 78%) border-box,
    linear-gradient(180deg,rgba(236,196,95,.34),rgba(236,196,95,.13) 32%,rgba(236,196,95,.07) 64%,rgba(236,196,95,.12) 100%) border-box;
  box-shadow:
    0 0 54px -16px rgba(214,154,60,.18),
    0 34px 90px -44px rgba(0,0,0,.85),
    inset 0 1px 0 rgba(255,255,255,.07);
}
.bx-final{
  border:1px solid transparent;
  background:
    radial-gradient(120% 100% at 50% 0%,rgba(214,154,60,.06),transparent 60%) padding-box,
    linear-gradient(180deg,#1d1309,#120b06) padding-box,
    radial-gradient(52% 44px at 50% 0%,rgba(236,196,95,.60),rgba(236,196,95,0) 78%) border-box,
    linear-gradient(180deg,rgba(236,196,95,.34),rgba(236,196,95,.13) 32%,rgba(236,196,95,.07) 64%,rgba(236,196,95,.12) 100%) border-box;
  box-shadow:
    0 0 54px -16px rgba(214,154,60,.18),
    0 34px 90px -44px rgba(0,0,0,.85),
    inset 0 1px 0 rgba(255,255,255,.07);
}

/* ==========================================================================
   Camada · RODADA V5 (25/08) - o fundo da secao emenda com a pagina
   ==========================================================================
   O corte seco morre. MEDIDO antes: costura do TOPO ja continua
   (delta <=1; a linha visivel e a sombra do painel creme, que e da
   composicao); costura da BASE com degrau real de ~(20,13,7): o ambar
   da matricula nasce clipado no overflow da .oferta-section. O wrapper
   segue no fundo base da pagina e ganha: vinheta propria CONTIDA
   (radial central que nao toca as costuras) + rampa na base terminando
   em rgba(177,120,64,.12), a cor medida do inicio da oferta (o
   overlay que leva rgb(19,12,6) a rgb(38,25,13)). Emenda provada por
   varredura de coluna nas duas fronteiras (tecnica da emenda do
   hero). */
.bonus-section{
  /* padding extra na base: a sombra do .bx-final (34px + blur 90) pintava
     por cima da rampa e a apagava (medido); com o respiro ela morre antes
     da costura. */
  padding-bottom:calc(var(--space-section)/2 + 104px);
  background:radial-gradient(56% 44% at 50% 44%,rgba(181,119,30,.085),transparent 72%);
}
/* a rampa da costura vai num ::after proprio, a MESMA tecnica da emenda
   do hero (Q2): a rampa como camada extra de background nao pintava
   (medido; a radial pintava) e o ::after e a receita provada da casa. */
.bonus-section::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:180px;
  background:linear-gradient(180deg,rgba(177,120,64,0),rgba(177,120,64,.12));
  pointer-events:none;z-index:0;
}

/* ==========================================================================
   Camada - RODADA W2 (26/08) - cartao 1 com o PRODUTO REAL
   ==========================================================================
   O print da Biblioteca do app (recorte do miolo: heading e grade
   completa; banner, selo e dados pessoais fora do quadro) entra no
   cartao 1 dentro do navegador claro da gramatica V2 (bxs-*), agora
   com barra de endereco. O leque bxk-* (HTML saiu na W2) vira orfao
   inventariado: as regras ficam, somam ao lote pendente da U1.
   Asset: biblioteca-grade.webp 1036x1465 (2x da exibicao de ~518),
   92 KB, lazy; original preservado fora do repo publicado. */
.bxb-win{
  width:min(100%,520px);border-radius:var(--r-lg);overflow:hidden;
  border:1px solid rgba(60,40,10,.12);
  background:linear-gradient(180deg,#fdfbf7,#f4efe6);
  box-shadow:0 1px 2px rgba(60,40,10,.06),0 24px 48px -24px rgba(60,40,10,.5);
}
.bxb-top{
  display:flex;align-items:center;gap:12px;
  padding:10px 14px;border-bottom:1px solid rgba(60,40,10,.09);
  background:#f1ece1;
}
.bxb-dots{display:inline-flex;gap:5px}
.bxb-dots i{width:8px;height:8px;border-radius:50%;background:rgba(60,40,10,.16)}
.bxb-url{
  flex:1;min-width:0;text-align:center;
  font-size:12.5px;letter-spacing:.02em;color:#5a4a30;
  background:#faf6ee;border:1px solid rgba(60,40,10,.10);
  border-radius:999px;padding:4px 14px;
}
.bxb-shot{display:block;width:100%;height:auto}
@media (max-width:760px){
  .bxb-win{width:100%}
}

/* ==========================================================================
   Camada - RODADA X (26/08) - cartao 1 em layout hero
   ==========================================================================
   O cartao 1 deixa de ser duas colunas: o texto vai inteiro para cima, a
   janela do app ocupa a largura interna do cartao e a linha de valor fecha
   embaixo (por isso ela saiu de dentro do .bx-txt no HTML). Cartoes 2 e 3
   seguem na regra de duas colunas, intocados. O asset da W2 (a grade sem o
   topo do app) fica no repositorio como orfao inventariado, somando ao lote
   pendente. */
.bx-card--hero{
  grid-template-columns:1fr;
  gap:clamp(18px,2vw,26px);
  align-items:stretch;
}
.bx-card--hero .bx-visual{min-height:0;display:block}
.bx-card--hero .bxb-win{width:100%}
@media (max-width:760px){
  .bx-card--hero{gap:18px}
}

/* ==========================================================================
   Camada - RODADA Y (26/08) - acabamento do cartao 1
   ==========================================================================
   Y1 mudou so o asset: a costura das duas faixas passou a preservar a
   navegacao inteira do app (o item ativo entrava junto com uma faixa
   compacta do bloco de acervo; a linha de numero dele fica fora do quadro).
   Y2 aqui: a linha de leitura da descricao sobe de 52ch para 64ch, a maior
   medida de corpo da casa (a mesma da carta), porque o cartao ficou largo e
   52ch lia como coluna estreita; titulo, kicker e chips ja ocupavam a
   largura interna. E o mockup passa a ter o MESMO respiro em cima e
   embaixo: a linha de valor perde a margem propria e fica so com o vao da
   grade, igual ao que separa os chips do topo da janela. */
.bx-card--hero .bx-d{max-width:64ch}
.bx-card--hero .bx-valor{margin-top:0}

/* --- Y3 (26/08) - cartao 3 se organiza ---------------------------------
   Os raios da capa e do painel eram 14/4, fora da escala da casa; passam ao
   token medio, mantendo as arestas internas curtas (a dupla continua lendo
   como peca unica). O escudo deixa de flutuar no canto do involucro: agora
   mora dentro de um envoltorio posicionado junto da lista e se ancora na
   aresta INFERIOR dela, metade dentro e metade fora, como selo aplicado. */
.bxc-capa{border-radius:var(--r-md) 4px 4px var(--r-md)}
.bxc-check{border-radius:4px var(--r-md) var(--r-md) 4px;margin-left:0}
.bxc-painel{position:relative;display:flex;margin-left:-6px}
.bxc-shield{right:18px;bottom:-32px}
@media (max-width:760px){
  .bxc-capa,.bxc-check{border-radius:var(--r-md)}
  .bxc-painel{width:100%;margin-left:0}
  .bxc-shield{right:14px;bottom:-30px}
}

/* ==========================================================================
   Camada - RODADA Z (26/08) - o acervo desenhado no lugar do print
   ==========================================================================
   Janela da plataforma em HTML/CSS. As formulas de cor sao as MESMAS do
   globals.css do produto, entao cada cartao tem exatamente o tom do app no
   tema escuro; a cor entra por --pk / --pk-rgb no style de cada um.
   As regras de cartao heroi das duas rodadas anteriores viram orfas (a
   classe some do HTML) e somam ao lote pendente. */
.pf{width:100%;border-radius:var(--r-lg);overflow:hidden;position:relative;
  background:linear-gradient(180deg,#17161a,#101013);
  border:1px solid rgba(236,196,95,.13);
  box-shadow:0 26px 54px -26px rgba(0,0,0,.75),inset 0 1px 0 rgba(255,255,255,.05)}
.pf-top{display:flex;align-items:center;gap:12px;padding:9px 14px;
  background:rgba(255,255,255,.045);border-bottom:1px solid rgba(255,255,255,.06)}
.pf-dots{display:inline-flex;gap:5px}
.pf-dots i{width:8px;height:8px;border-radius:50%;background:rgba(255,255,255,.18)}
.pf-url{flex:1;min-width:0;text-align:center;font-size:11.5px;letter-spacing:.02em;
  border-radius:999px;padding:3px 12px;background:rgba(255,255,255,.05);
  border:1px solid rgba(255,255,255,.07);color:rgba(255,255,255,.5)}
.pf-body{padding:13px 14px 0;position:relative}
.pf-h{display:block;font-family:var(--font-display);font-weight:700;font-size:13px;
  letter-spacing:.01em;margin:0 0 10px;color:rgba(255,255,255,.88)}
.pf-grade{display:grid;grid-template-columns:1fr 1fr;gap:9px}
.pk{position:relative;border-radius:15px;padding:12px 12px 11px;min-width:0;
  background:radial-gradient(125% 125% at 0% 0%,
    rgba(var(--pk-rgb),.42) 0%,rgba(var(--pk-rgb),.13) 36%,#121215 78%);
  border:1px solid rgba(var(--pk-rgb),.22);
  box-shadow:0 6px 22px rgba(var(--pk-rgb),.10),inset 0 1px 0 rgba(255,255,255,.06)}
.pk-head{display:flex;align-items:flex-start;justify-content:space-between;gap:8px}
.pk-ico{flex:none;width:36px;height:36px;border-radius:12px;display:grid;place-items:center;
  background:linear-gradient(145deg,var(--pk) 0%,color-mix(in srgb,var(--pk) 60%,#000) 100%)}
.pk-ico svg{width:17px;height:17px;stroke:#fff;fill:none;stroke-width:1.8;
  stroke-linecap:round;stroke-linejoin:round}
.pk-seta{flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;
  background:rgba(var(--pk-rgb),.12);border:1px solid rgba(var(--pk-rgb),.22)}
.pk-seta svg{width:11px;height:11px;stroke:var(--pk);fill:none;stroke-width:2;
  stroke-linecap:round;stroke-linejoin:round}
.pk-kick{display:block;margin-top:10px;font-size:8.5px;font-weight:600;
  text-transform:uppercase;line-height:1.1;letter-spacing:.12em;
  color:color-mix(in srgb,var(--pk) 60%,white 40%)}
.pk-nome{display:block;margin-top:3px;font-family:var(--font-display);font-weight:600;
  font-size:14px;line-height:1.2;letter-spacing:-.02em;
  color:color-mix(in srgb,var(--pk) 72%,white 28%)}
.pk-tag{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;
  overflow:hidden;margin-top:4px;font-size:10.5px;line-height:1.4;color:#a59985}
.pk-fio{display:block;margin-top:10px;height:1px;background:rgba(250,247,242,.08)}
.pk-pe{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:8px}
.pk-n{display:flex;align-items:baseline;gap:5px}
.pk-n b{font-family:var(--font-display);font-weight:700;font-size:18px;line-height:1;
  font-variant-numeric:tabular-nums;color:color-mix(in srgb,white 18%,var(--pk))}
.pk-n span{font-size:10px;color:#8a7f6e}
.pk-badge{font-size:8.5px;font-weight:500;line-height:1;white-space:nowrap;
  padding:4px 8px;border-radius:999px;border:1px solid rgba(var(--pk-rgb),.34);
  background:rgba(var(--pk-rgb),.16);color:color-mix(in srgb,white 60%,var(--pk))}
.pf-peek{margin:9px -14px 0;padding:0 14px;height:92px;overflow:hidden;position:relative}
.pf-fade{position:absolute;left:0;right:0;bottom:0;height:70px;pointer-events:none;
  background:linear-gradient(180deg,rgba(16,16,19,0),rgba(16,16,19,.82))}
@media (max-width:760px){
  /* Z: em coluna estreita o cartao do acervo fica COMPACTO. Saem a tagline
     e o selo do combo (era ele que estourava a caixa a 135px de largura);
     ficam cor, icone, chamada, nome e contagem, que sao a identidade do
     pack. Assim as seis especialidades continuam legiveis em vez de seis
     cartoes espremidos. */
  .pf-body{padding:11px 11px 0}
  .pf-grade{gap:8px}
  .pk{padding:10px 10px 9px;border-radius:13px}
  .pk-ico{width:32px;height:32px;border-radius:11px}
  .pk-ico svg{width:15px;height:15px}
  .pk-seta{width:20px;height:20px}
  .pk-kick{margin-top:9px;font-size:8px;letter-spacing:.1em}
  .pk-nome{font-size:13px}
  .pk-tag,.pk-badge{display:none}
  .pk-fio{margin-top:9px}
  .pk-pe{margin-top:7px}
  .pk-n b{font-size:17px}
  .pf-peek{margin:8px -11px 0;padding:0 11px;height:74px}
  .pf-fade{height:58px}
}

/* --- Copy nova da secao de bonus (26/08) --------------------------------
   O fechamento deixou de ser tabela de valores somados: os dois valores que
   nao eram verificaveis sairam e ficou o unico ancoravel de verdade, o do
   primeiro bonus, que tem pagina propria de venda. A lista virou tres frases
   com o icone de cada bonus, entao ela perde o fio pontilhado e o numero a
   direita; o titulo do bloco sai do formato pilula e vira frase. */
.bx-tab-h{margin:0;font-family:var(--font-display);font-weight:700;
  font-size:clamp(17px,1.7vw,20px);line-height:1.25;letter-spacing:-.01em;
  color:var(--ink-title)}
.bx-tab li .ic{flex:none;width:16px;height:16px;color:var(--gold-honey)}
.bx-total-sub{max-width:36ch;line-height:1.5}
@media (max-width:760px){
  .bx-tab-h{font-size:17px}
  .bx-total-sub{max-width:none}
}
.bx-valor-txt{display:inline}
.bx-valor{gap:12px 14px}
.bx-valor-hl{font-style:normal;font-weight:600;color:var(--gold-honey)}
.bx-total-lbl{max-width:30ch;line-height:1.45}
@media (max-width:760px){.bx-total-lbl{max-width:none}}

/* ==========================================================================
   Camada - diagramacao do bloco de fechamento (26/08)
   ==========================================================================
   O bloco era uma grade de TRES colunas (medalhao, lista, total) e a coluna
   do meio ficava estreita: o titulo quebrava em duas linhas e cada item da
   lista tambem. Passa a DUAS colunas de peso igual. O medalhao sai da grade
   (fica orfao inventariado) e o simbolo do presente vive so na linha de
   fecho, maior. A lista ganha selo circular por item, ligados por um fio
   vertical com ponto, e o total vira PAINEL emoldurado com o valor maior e
   um fio separando o numero da linha de apoio. Sem losango: a ordem de
   18/08 tirou esse ornamento da pagina inteira. */
.bx-final-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);align-items:center}
.bx-tab-h{position:relative;padding-bottom:12px}
.bx-tab-h::after{content:"";position:absolute;left:0;bottom:0;width:54px;height:2px;
  border-radius:2px;background:linear-gradient(90deg,var(--gold-mid),transparent)}
.bx-tab ul{position:relative;margin-top:20px;gap:16px}
.bx-tab ul::before{content:"";position:absolute;left:53px;top:22px;bottom:22px;width:1px;
  background:linear-gradient(180deg,transparent,var(--line-22) 14%,var(--line-22) 86%,transparent)}
.bx-tab li{display:grid;grid-template-columns:44px 18px minmax(0,1fr);
  align-items:center;gap:0;font-size:15px;line-height:1.5}
.bx-tab-ic{grid-column:1;width:44px;height:44px;border-radius:50%;display:grid;
  place-items:center;border:1px solid var(--line-40);color:var(--gold-honey);
  background:radial-gradient(80% 80% at 50% 20%,rgba(214,154,60,.10),transparent 70%);
  box-shadow:inset 0 1px 0 rgba(255,240,200,.10)}
.bx-tab-ic .ic{width:19px;height:19px}
.bx-tab li::after{content:"";grid-column:2;justify-self:center;width:5px;height:5px;
  border-radius:50%;background:var(--gold-honey);box-shadow:0 0 0 3px rgba(214,154,60,.12)}
.bx-tab li span{grid-column:3;padding-left:16px;color:var(--ink-list)}
.bx-total{justify-items:center;text-align:center;gap:10px;
  padding:clamp(20px,2.4vw,30px);border:1px solid var(--line-22);border-left:1px solid var(--line-22);
  border-radius:var(--r-lg);
  background:radial-gradient(120% 100% at 50% 0%,rgba(214,154,60,.05),transparent 62%)}
.bx-total-lbl{max-width:40ch;text-align:center}
.bx-total-num{font-size:clamp(50px,5.2vw,74px)}
.bx-total-fio{display:block;width:min(100%,240px);height:1px;
  background:linear-gradient(90deg,transparent,var(--line-30),transparent)}
.bx-total-sub{max-width:42ch;text-align:center}
.bx-fecho{font-size:clamp(19px,2vw,23px);gap:12px}
.bx-fecho .ic{width:26px;height:26px}
.bx-final .btn-row .btn{width:min(100%,560px)}
@media (max-width:760px){
  .bx-final-grid{grid-template-columns:1fr;gap:26px}
  .bx-tab li{grid-template-columns:38px 16px minmax(0,1fr);font-size:14px}
  .bx-tab-ic{width:38px;height:38px}
  .bx-tab-ic .ic{width:17px;height:17px}
  .bx-tab ul::before{left:46px}
  .bx-tab li span{padding-left:13px}
  .bx-total{padding:20px 16px}
  .bx-total-num{font-size:46px}
  .bx-fecho{font-size:19px}
}

/* Acertos da diagramacao do fechamento, achados no render:
   1. o ponto do fio e um ::after e vinha DEPOIS do texto na ordem; com
      coluna explicita anterior a do texto, a colocacao automatica do grid
      jogava ele para a linha de baixo. Fixar a linha resolve.
   2. o fio vertical estava fraco demais para leitura no escuro.
   3. o rotulo do painel quebrava deixando um "e" sozinho no fim da linha:
      a coluna do painel ganha um respiro a mais e a quebra vira balanceada.
   4. a aresta do painel precisava de um passo a mais para ler como moldura. */
.bx-tab li::after{grid-row:1;align-self:center}
.bx-tab ul::before{background:linear-gradient(180deg,transparent,var(--line-40) 14%,var(--line-40) 86%,transparent)}
.bx-final-grid{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr)}
.bx-total-lbl{text-wrap:balance;max-width:46ch}
.bx-total-sub{text-wrap:balance}
.bx-total{border-color:var(--line-30);box-shadow:inset 0 1px 0 rgba(255,240,200,.06)}
.bx-tab-ic{color:var(--gold-mid)}
@media (max-width:760px){.bx-final-grid{grid-template-columns:1fr}}

/* Refino do bloco de fechamento: a lista respirava menos que a referencia.
   Os itens cabem em uma linha aqui (a coluna e mais larga que a do desenho),
   entao com vao curto eles liam apertados contra o selo. Vao e selo sobem um
   passo, e o fio acompanha. */
.bx-tab ul{gap:24px;margin-top:22px}
.bx-tab li{grid-template-columns:48px 20px minmax(0,1fr)}
.bx-tab-ic{width:48px;height:48px}
.bx-tab-ic .ic{width:21px;height:21px}
.bx-tab ul::before{left:58px;top:24px;bottom:24px}
.bx-tab li span{padding-left:18px}
@media (max-width:760px){
  .bx-tab ul{gap:20px}
  .bx-tab li{grid-template-columns:40px 18px minmax(0,1fr)}
  .bx-tab-ic{width:40px;height:40px}
  .bx-tab-ic .ic{width:18px;height:18px}
  .bx-tab ul::before{left:49px;top:20px;bottom:20px}
  .bx-tab li span{padding-left:14px}
}

/* ==========================================================================
   Camada - copy nova da oferta (26/08)
   ==========================================================================
   O preco riscado saiu: ele repetia, como valor antigo do curso, o MESMO
   numero que a secao de bonus usa como preco real do primeiro bonus, e a
   soma nao fechava para quem lia as duas. Agora a ancora e o proprio bonus,
   que e verificavel. .px-anchor e .px-anchor s viram orfaos inventariados.
   Os itens das duas listas da coluna esquerda ganharam subtitulo: como o
   marcador vive num ::before da primeira coluna do grid, titulo e subtitulo
   precisam de coluna explicita, senao a colocacao automatica joga o segundo
   para debaixo do marcador. */
.px-lbl{margin:0;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--label-gold)}
.px-nota{margin:10px 0 0;font-size:12.5px;line-height:1.6;color:var(--ink-mut);
  max-width:34ch;margin-inline:auto;text-wrap:balance}
.px-nota b{color:var(--ink-soft);font-weight:600;font-variant-numeric:tabular-nums}
.of-inc li b,.of-inc li span{grid-column:2}
.of-inc li b{display:block;font-size:15px;font-weight:600;line-height:1.45;color:var(--ink-title)}
.of-inc li span{display:block;margin-top:4px;font-size:13px;line-height:1.55;color:var(--ink-body)}
.of-bon li span{display:block;margin-top:5px;font-size:13px;line-height:1.55;color:var(--ink-body)}
@media (max-width:760px){
  .of-inc li span,.of-bon li span{font-size:12.5px}
  .px-nota{font-size:12px;max-width:none}
}
.px-nota{max-width:42ch;font-size:13px}
@media (max-width:760px){.px-nota{font-size:12.5px}}
.px-nota b{white-space:nowrap}
