/* ==========================================================================
   DENISE — NUTRIÇÃO CLÍNICA & ESPORTIVA
   style.css
   ---------------------------------------------------------------------------
   Conceito de movimento: a página respira. Cada camada tem um ritmo próprio —
   a aurora (28s), o blob (18s), os selos (6,5s e 8s), o indicador (2,6s).
   Nada é decorativo por acaso: o tema do consultório é o corpo em repouso
   e sob carga.
   ---------------------------------------------------------------------------
   ÍNDICE
   1.  Design tokens (:root)
   2.  Reset e base
   3.  Layout utilitário
   4.  Fundo aurora animado
   5.  Botões
   6.  Navbar
   7.  Hero — grade e sobreposição
   8.  Hero — tipografia
   9.  Hero — blob com morphing
   10. Hero — selos em vidro
   11. Hero — indicador de rolagem
   12. Rodapé institucional e CTA flutuante
   13. Sequência de entrada (load)
   14. Reveal on scroll (próximas seções)
   15. Breakpoints
   16. prefers-reduced-motion
   ========================================================================== */

/* --------------------------------------------------------------------------
   1. DESIGN TOKENS
   -------------------------------------------------------------------------- */
:root {
  color-scheme: light;

  /* Paleta — Warm & Sophisticated */
  --bg-page:      #FBF7F4;
  --bg-primary:   #F6ECE6;
  --bg-deep:      #E2C6B4;
  --bg-white:     #FFFFFF;

  --text-main:    #2B2724;
  --text-muted:   #4A4A4A;   /* cinza médio elegante — 8.4:1 sobre a base */

  --accent-color: #C4653F;
  --accent-deep:  #A8512F;
  --accent-soft:  #E9C4B3;

  --cta-color:    #CC1F38;
  --cta-hover:    #B01A2F;
  --cta-on:       #FFFFFF;

  /* Superfícies escuras (Seção 9 e rodapé) — contraste medido sobre #2B2724 */
  --on-dark:        #FBF7F4;   /* 13.9:1 */
  --on-dark-muted:  #CDC9C6;   /*  9.0:1 */
  --on-dark-faint:  #9C958F;   /*  5.0:1 — o mínimo para texto pequeno */
  --accent-on-dark: #D9855C;   /*  5.3:1 — terracota clareada; a da marca daria 3.7:1 */

  --line-color:   rgba(43, 39, 36, 0.14);
  --ring-color:   var(--accent-color);

  /* Vidro fosco */
  --glass-bg:     rgba(255, 255, 255, 0.55);
  --glass-border: rgba(255, 255, 255, 0.85);
  --glass-blur:   blur(12px) saturate(160%);
  --glass-shadow: 0 20px 44px -22px rgba(94, 56, 38, 0.42);

  /* Tipografia */
  --font-heading: 'Cormorant Garamond', Georgia, 'Times New Roman', serif;
  --font-body:    'Plus Jakarta Sans', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;

  --text-2xs:  0.6875rem;
  --text-xs:   clamp(0.75rem,  0.72rem + 0.12vw, 0.8125rem);
  --text-sm:   clamp(0.875rem, 0.85rem + 0.12vw, 0.9375rem);
  --text-base: clamp(1rem,     0.96rem + 0.2vw,  1.0625rem);
  --text-lead: clamp(1.0625rem, 1rem + 0.3vw,    1.1875rem);
  /* A Cormorant tem altura-x baixa: nos títulos ela pede ~15% a mais de
     corpo que a Playfair para ocupar a mesma mancha óptica. */
  --text-h1:   clamp(3rem,     0.7rem + 5vw,     5.25rem);

  --tracking-caps: 0.22em;

  /* Espaçamento */
  --space-1: 0.5rem;
  --space-2: 0.75rem;
  --space-3: 1rem;
  --space-4: 1.5rem;
  --space-5: 2rem;
  --space-6: 3rem;
  --space-7: 4rem;
  --space-8: 6rem;

  /* Layout */
  --container-max: 74rem;
  --container-pad: clamp(1.25rem, 4vw, 3rem);
  --header-h: 5.25rem;

  /* CTA flutuante — o rodapé usa os mesmos valores para reservar espaço */
  --fab-size:   3.5rem;
  --fab-offset: 2rem;
  /* Faixa livre no rodapé da hero, exclusiva do indicador de rolagem */
  --hero-scroll-space: 9rem;

  /* Forma */
  --radius-sm:   0.625rem;
  --radius-md:   1.125rem;
  --radius-pill: 50px;
  --blob-shape:  60% 40% 30% 70% / 60% 30% 70% 40%;

  /* Movimento */
  --ease-out:  cubic-bezier(0.22, 1, 0.36, 1);
  --ease-soft: cubic-bezier(0.45, 0, 0.25, 1);
  --dur-fast:  180ms;
  --dur-base:  280ms;
  --dur-slow:  520ms;

  /* Ritmos da página */
  --tempo-aurora: 28s;
  --tempo-blob:   18s;

  /* Camadas */
  --z-aurora: 0;
  --z-content: 1;
  --z-raised: 3;
  --z-header: 100;
  --z-fab:    999;
  --z-skip:   1000;
}

/* --------------------------------------------------------------------------
   2. RESET E BASE
   -------------------------------------------------------------------------- */
*,
*::before,
*::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: var(--header-h);
}

body {
  min-height: 100dvh;
  background-color: var(--bg-page);
  color: var(--text-main);
  font-family: var(--font-body);
  font-size: var(--text-base);
  line-height: 1.65;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
  /* `clip` contém sangrias horizontais sem criar contexto de rolagem —
     `hidden` quebraria o position:sticky do cabeçalho. */
  overflow-x: clip;
}

img,
svg,
picture {
  display: block;
  max-width: 100%;
  height: auto;
}

a {
  color: inherit;
  text-decoration: none;
}

a,
button {
  cursor: pointer;
  touch-action: manipulation;
}

::selection {
  background: var(--accent-soft);
  color: var(--text-main);
}

:focus-visible {
  outline: 3px solid var(--ring-color);
  outline-offset: 4px;
  border-radius: var(--radius-sm);
}

/* --------------------------------------------------------------------------
   3. LAYOUT UTILITÁRIO
   -------------------------------------------------------------------------- */
.container {
  width: min(100% - (2 * var(--container-pad)), var(--container-max));
  margin-inline: auto;
}

main,
.site-footer {
  position: relative;
  z-index: var(--z-content);
}

.skip-link {
  position: absolute;
  top: 0;
  left: 0;
  z-index: var(--z-skip);
  padding: var(--space-2) var(--space-3);
  background: var(--text-main);
  color: var(--bg-white);
  font-size: var(--text-sm);
  font-weight: 500;
  transform: translateY(-120%);
  transition: transform var(--dur-fast) var(--ease-out);
}

.skip-link:focus {
  transform: translateY(0);
}

/* --------------------------------------------------------------------------
   4. FUNDO AURORA ANIMADO
   Orbes desfocados que se deslocam apenas por `transform` (compositor puro).
   -------------------------------------------------------------------------- */
.aurora {
  position: fixed;
  inset: 0;
  z-index: var(--z-aurora);
  overflow: hidden;
  pointer-events: none;
}

.aurora__orb {
  position: absolute;
  display: block;
  border-radius: 50%;
  will-change: transform;
}

.aurora__orb--nude {
  top: -22vmax;
  right: -14vmax;
  width: 68vmax;
  height: 68vmax;
  background: radial-gradient(circle at 50% 50%,
              rgba(233, 196, 179, 0.58) 0%,
              rgba(233, 196, 179, 0.22) 42%,
              rgba(233, 196, 179, 0) 70%);
  animation: aurora-drift-a var(--tempo-aurora) var(--ease-soft) infinite;
}

.aurora__orb--terra {
  bottom: -30vmax;
  right: -6vmax;
  width: 56vmax;
  height: 56vmax;
  background: radial-gradient(circle at 50% 50%,
              rgba(196, 101, 63, 0.26) 0%,
              rgba(196, 101, 63, 0.09) 45%,
              rgba(196, 101, 63, 0) 72%);
  animation: aurora-drift-b calc(var(--tempo-aurora) * 1.35) var(--ease-soft) infinite;
}

.aurora__orb--blush {
  top: 18vmax;
  left: -26vmax;
  width: 62vmax;
  height: 62vmax;
  background: radial-gradient(circle at 50% 50%,
              rgba(246, 236, 230, 0.95) 0%,
              rgba(246, 236, 230, 0.4) 46%,
              rgba(246, 236, 230, 0) 74%);
  animation: aurora-drift-c calc(var(--tempo-aurora) * 1.15) var(--ease-soft) infinite;
}

/* Grão finíssimo: tira o aspecto "plástico" do gradiente */
.aurora__grain {
  position: absolute;
  inset: -50%;
  opacity: 0.035;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E");
}

@keyframes aurora-drift-a {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
  33%      { transform: translate3d(-8vmax, 6vmax, 0) scale(1.12); }
  66%      { transform: translate3d(4vmax, 12vmax, 0) scale(0.94); }
}

@keyframes aurora-drift-b {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
  40%      { transform: translate3d(-14vmax, -10vmax, 0) scale(1.18); }
  70%      { transform: translate3d(6vmax, -4vmax, 0) scale(0.9); }
}

@keyframes aurora-drift-c {
  0%, 100% { transform: translate3d(0, 0, 0) scale(1); }
  50%      { transform: translate3d(12vmax, -8vmax, 0) scale(1.1); }
}

/* Pausa o que é exclusivo da hero quando ela sai da tela (economia de GPU).
   A aurora NÃO entra aqui: ela é fixa e continua visível nas outras seções. */
.is-hero-offscreen .hero-blob,
.is-hero-offscreen .hero-blob__glow,
.is-hero-offscreen .hero-badge__inner,
.is-hero-offscreen .btn--cta {
  animation-play-state: paused;
}

/* --------------------------------------------------------------------------
   5. BOTÕES
   -------------------------------------------------------------------------- */
.btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  min-height: 3.25rem;
  padding: 0 var(--space-5);
  border: 0;
  border-radius: var(--radius-pill);
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: 500;
  letter-spacing: 0.01em;
  white-space: nowrap;
}

/* --- Outline pill (navbar) --- */
.btn--outline {
  min-height: 2.875rem;
  padding: 0 var(--space-4);
  background: transparent;
  border: 1px solid var(--line-color);
  color: var(--text-main);
  transition: background-color var(--dur-base) var(--ease-out),
              border-color var(--dur-base) var(--ease-out),
              color var(--dur-base) var(--ease-out),
              transform var(--dur-fast) var(--ease-out);
}

.btn--outline:hover {
  border-color: var(--text-main);
  background: var(--text-main);
  color: var(--bg-page);
}

.btn--outline:active {
  transform: scale(0.98);
}

/* --- CTA principal: respira, atrai o cursor e recebe um rastro de brilho --- */
.btn--cta {
  --mx: 0px;
  --my: 0px;
  --s: 1;
  overflow: hidden;
  isolation: isolate;
  min-height: 3.5rem;
  padding: 0 var(--space-5);
  background: var(--cta-color);
  color: var(--cta-on);
  font-size: var(--text-base);
  transform: translate3d(var(--mx), var(--my), 0) scale(var(--s));
  animation: cta-breathe 5s var(--ease-soft) infinite;
  transition: transform var(--dur-base) var(--ease-out),
              background-color var(--dur-fast) var(--ease-out);
}

.btn--cta:hover  { --s: 1.03; background: var(--cta-hover); }
.btn--cta:active { --s: 0.99; }

@keyframes cta-breathe {
  0%, 100% { box-shadow: 0 10px 26px -12px rgba(204, 31, 56, 0.55); }
  50%      { box-shadow: 0 18px 42px -12px rgba(204, 31, 56, 0.78); }
}

/* Rastro de brilho */
.btn--cta::after {
  content: '';
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(105deg,
              transparent 34%,
              rgba(255, 255, 255, 0.45) 48%,
              transparent 62%);
  transform: translateX(-130%);
}

.btn--cta:hover::after,
.btn--cta:focus-visible::after {
  animation: cta-sweep 900ms var(--ease-out);
}

@keyframes cta-sweep {
  to { transform: translateX(130%); }
}

.btn__icon {
  flex: none;
  transition: transform var(--dur-base) var(--ease-out);
}

.btn--cta:hover .btn__icon {
  transform: translateX(4px);
}

/* --------------------------------------------------------------------------
   6. NAVBAR — transparente no topo, vidro fosco a partir de 50px
   -------------------------------------------------------------------------- */
.site-header {
  --header-pad: 1.375rem;
  position: sticky;
  top: 0;
  z-index: var(--z-header);
  background: transparent;
  border-bottom: 1px solid transparent;
  transition: background-color var(--dur-slow) var(--ease-out),
              border-color var(--dur-slow) var(--ease-out),
              box-shadow var(--dur-slow) var(--ease-out);
}

.site-header.is-scrolled {
  --header-pad: 0.75rem;
  background: rgba(251, 247, 244, 0.62);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border-bottom-color: rgba(255, 255, 255, 0.7);
  box-shadow: 0 12px 34px -26px rgba(94, 56, 38, 0.5);
}

.site-header__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  padding-block: var(--header-pad);
  transition: padding-block var(--dur-slow) var(--ease-out);
}

.brand {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
  min-height: 44px;
  justify-content: center;
}

.brand__name {
  font-family: var(--font-heading);
  font-size: 1.875rem;
  font-weight: 600;
  line-height: 1;
  letter-spacing: 0.005em;
}

.brand__tag {
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--text-muted);
}

/* --------------------------------------------------------------------------
   7. HERO — GRADE E SOBREPOSIÇÃO
   -------------------------------------------------------------------------- */
.hero {
  position: relative;
  /* A faixa inferior é reservada só para o indicador de rolagem. */
  padding-block: var(--space-6) var(--hero-scroll-space);
}

.hero__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-5);
  align-items: center;
}

.hero__text {
  position: relative;
  z-index: 2;          /* invade a coluna visual */
  max-width: 34rem;
}

.hero__visual {
  position: relative;
  z-index: 1;
  display: flex;
  justify-content: center;
}

/* --------------------------------------------------------------------------
   8. HERO — TIPOGRAFIA
   -------------------------------------------------------------------------- */
.hero__overline {
  display: flex;
  align-items: center;
  gap: 0.875rem;
  margin-bottom: var(--space-4);
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--accent-color);
}

.hero__overline-rule {
  flex: none;
  width: 2.75rem;
  height: 1px;
  background: currentColor;
}

.hero__title {
  font-family: var(--font-heading);
  font-size: var(--text-h1);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--text-main);
  margin-bottom: var(--space-4);
}

/* Máscara por linha: o texto sobe de trás de um recorte.
   O padding compensado deixa passar descendentes e a inclinação do itálico. */
.hero__line {
  display: block;
  overflow: hidden;
  padding: 0.06em 0.04em 0.14em;
  margin: -0.06em -0.04em -0.14em;
}

.hero__line-in {
  display: block;
}

.hero__title .highlight {
  font-style: italic;
  font-weight: 500;
  padding-right: 0.06em;
  color: var(--accent-color);
}

.hero__lead {
  max-width: 38ch;
  font-size: var(--text-lead);
  font-weight: 300;
  line-height: 1.6;
  color: var(--text-muted);
  text-wrap: pretty;
  margin-bottom: var(--space-5);
}

.hero__actions {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: var(--space-3);
  /* Folga fixa: o micro-copy nunca encosta no indicador de rolagem. */
  margin-bottom: var(--space-7);
}

.hero__cta-wrap {
  width: 100%;
}

.hero__cta-wrap .btn--cta {
  width: 100%;
}

.hero__micro {
  font-size: var(--text-xs);
  color: var(--text-muted);
}

/* --------------------------------------------------------------------------
   9. HERO — BLOB COM MORPHING
   -------------------------------------------------------------------------- */
/* Palco: dá aos selos e ao halo a mesma âncora do blob */
.hero-stage {
  position: relative;
  width: min(100%, 24rem);
}

.hero-blob {
  position: relative;
  z-index: 2;
  width: 100%;
  aspect-ratio: 5 / 6;
  border-radius: var(--blob-shape);
  background:
    radial-gradient(64% 50% at 30% 16%, rgba(255, 255, 255, 0.92) 0%, rgba(255, 255, 255, 0) 62%),
    linear-gradient(150deg, #FAF1EB 0%, var(--bg-primary) 38%, var(--bg-deep) 100%);
  box-shadow:
    inset 0 -30px 60px -40px rgba(120, 68, 44, 0.55),
    0 40px 80px -44px rgba(120, 68, 44, 0.5);
  transform: translate3d(calc(var(--px, 0) * 7px), calc(var(--py, 0) * 7px), 0);
  animation: blob-morph var(--tempo-blob) var(--ease-soft) infinite;
  will-change: border-radius;
  /* A foto real fica dentro da forma: o recorte acompanha o morphing. */
  overflow: hidden;
}

@keyframes blob-morph {
  0%, 100% { border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; }
  25%      { border-radius: 44% 56% 62% 38% / 52% 44% 56% 48%; }
  50%      { border-radius: 55% 45% 38% 62% / 38% 62% 38% 62%; }
  75%      { border-radius: 38% 62% 55% 45% / 62% 40% 60% 38%; }
}

/* Halo que pulsa no mesmo compasso do morphing e sangra sob o texto */
.hero-blob__glow {
  position: absolute;
  z-index: 0;
  inset: -12% -8% -12% -22%;   /* sangra à esquerda, por baixo do texto */
  background: radial-gradient(circle at 56% 55%,
              rgba(196, 101, 63, 0.38) 0%,
              rgba(233, 196, 179, 0.22) 46%,
              rgba(233, 196, 179, 0) 74%);
  filter: blur(22px);
  transform: translate3d(calc(var(--px, 0) * 14px), calc(var(--py, 0) * 14px), 0);
  animation: glow-pulse var(--tempo-blob) var(--ease-soft) infinite;
  pointer-events: none;
}

@keyframes glow-pulse {
  0%, 100% { opacity: 0.62; scale: 1; }
  50%      { opacity: 1;    scale: 1.09; }
}

/* Foto real recortada pela máscara assimétrica. O rosto está no terço
   superior do retrato, então o enquadramento sobe um pouco (28%) e ele
   nunca cai na curva da forma durante o morphing. `border-radius: inherit`
   repete na própria foto o raio animado do blob: garante o recorte no
   Safari, que às vezes deixa o filho vazar do contêiner arredondado. */
.hero-blob__photo {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center 28%;
  border-radius: inherit;
}

.hero-blob.is-missing-photo .hero-blob__photo {
  display: none;
}

.hero-blob.is-missing-photo::after {
  content: 'Foto da especialista';
  position: absolute;
  inset: 0;
  display: grid;
  place-content: center;
  padding: var(--space-4);
  font-size: var(--text-2xs);
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  text-align: center;
  color: var(--accent-deep);
  opacity: 0.6;
}

/* --------------------------------------------------------------------------
   10. HERO — SELOS EM VIDRO FOSCO
   Camada externa: parallax do ponteiro. Camada interna: flutuação em loop.
   -------------------------------------------------------------------------- */
.hero-badge {
  position: absolute;
  z-index: var(--z-raised);
  transform: translate3d(calc(var(--px, 0) * -20px), calc(var(--py, 0) * -16px), 0);
}

.hero-badge__inner {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  padding: var(--space-2) var(--space-3);
  background: var(--glass-bg);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border: 1px solid var(--glass-border);
  border-radius: var(--radius-md);
  box-shadow: var(--glass-shadow);
}

/* Flutuações assíncronas: um sobe enquanto o outro desce */
.hero-badge--crn    { left: -0.5rem; bottom: 6%; }
.hero-badge--method { right: -0.5rem; top: 5%; }

.hero-badge--crn .hero-badge__inner {
  animation: float-up 6.5s var(--ease-soft) infinite;
}

.hero-badge--method .hero-badge__inner {
  animation: float-down 8s var(--ease-soft) infinite;
}

@keyframes float-up {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-10px); }
}

@keyframes float-down {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(9px); }
}

.hero-badge__label {
  font-size: 0.625rem;
  font-weight: 500;
  line-height: 1;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--accent-deep);
}

.hero-badge__value {
  font-family: var(--font-heading);
  font-size: 1.25rem;
  font-weight: 600;
  line-height: 1.2;
  font-variant-numeric: tabular-nums;
  color: var(--text-main);
}

.hero-badge__inner--round {
  width: 6.25rem;
  height: 6.25rem;
  gap: 0.375rem;
  padding: 0;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
}

.hero-badge__mark {
  color: var(--accent-color);
}

.hero-badge__method {
  font-size: 0.625rem;
  font-weight: 500;
  line-height: 1.35;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  text-align: center;
  color: var(--text-main);
}

/* --------------------------------------------------------------------------
   11. HERO — INDICADOR DE ROLAGEM
   -------------------------------------------------------------------------- */
/* Isolado do fluxo: ocupa a faixa reservada no rodapé da hero e não pode
   colidir com o micro-copy em nenhuma altura de tela. */
.hero__scroll {
  position: absolute;
  bottom: 2rem;
  left: 50%;
  transform: translateX(-50%);
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-2);
  transition: opacity var(--dur-slow) var(--ease-out),
              visibility 0s linear 0s;
}

/* `visibility` entra só no fim do fade: sem ela o link continuaria
   focável pelo teclado enquanto invisível, o que é falha de WCAG. */
.js .hero .hero__scroll.is-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity var(--dur-slow) var(--ease-out),
              visibility 0s linear var(--dur-slow);
}

.hero__scroll-label {
  font-size: 0.625rem;
  font-weight: 500;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--text-muted);
}

.hero__scroll-line {
  position: relative;
  display: block;
  width: 1px;
  height: 3.25rem;
  background: var(--line-color);
  overflow: hidden;
}

.hero__scroll-line::after {
  content: '';
  position: absolute;
  inset: 0;
  background: var(--accent-color);
  animation: scroll-drain 2.6s var(--ease-soft) infinite;
}

@keyframes scroll-drain {
  0%       { transform: scaleY(0); transform-origin: top; }
  45%      { transform: scaleY(1); transform-origin: top; }
  55%      { transform: scaleY(1); transform-origin: bottom; }
  100%     { transform: scaleY(0); transform-origin: bottom; }
}

/* --------------------------------------------------------------------------
   11b. SEÇÃO 2 — IDENTIFICAÇÃO E DORES
   Coluna esquerda fixa durante a rolagem; coluna direita em cascata.
   -------------------------------------------------------------------------- */
.pains {
  padding-block: clamp(5rem, 12vh, 9rem);
  scroll-margin-top: var(--header-h);
}

.pains__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--space-6);
  /* `start` é o que dá altura de percurso ao sticky: sem isso o item
     esticaria até a altura da linha e não teria para onde grudar. */
  align-items: start;
}

.pains__title {
  font-family: var(--font-heading);
  font-size: clamp(2.25rem, 1.1rem + 3.1vw, 3.5rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--text-main);
  text-wrap: balance;
}

/* O itálico da Cormorant é longo e desenhado: recebe corpo próprio
   e um respiro extra à direita para a saída da haste não colar. */
.pains__title em {
  font-style: italic;
  font-weight: 500;
  padding-right: 0.06em;
}

.pains__list {
  list-style: none;
}

.pains__item + .pains__item {
  margin-top: 10vh;
}

/* --- Card: um artigo, não um botão --- */
.pains__card {
  position: relative;
  overflow: hidden;
  padding: clamp(1.75rem, 5vw, 3rem);
  background: linear-gradient(165deg, #FCF5F0 0%, #F5E9E1 100%);
  border: 1px solid rgba(120, 68, 44, 0.10);
  border-radius: 16px;
  box-shadow: 0 14px 34px -26px rgba(120, 68, 44, 0.35);
  transition: transform 420ms var(--ease-out),
              box-shadow 420ms var(--ease-out),
              border-color 420ms var(--ease-out);
}

.pains__card:hover {
  transform: translateY(-8px);
  border-color: rgba(120, 68, 44, 0.22);
  box-shadow: 0 40px 70px -34px rgba(120, 68, 44, 0.45);
}

/* Marca d'água: textura de fundo, não um número no canto.
   Centralizada na vertical, sangrando pela borda direita do card. */
.pains__num {
  position: absolute;
  top: 50%;
  right: -0.5rem;
  z-index: 0;
  transform: translateY(-50%);
  font-family: var(--font-heading);
  font-size: clamp(8rem, 22vw, 12rem);
  font-weight: 700;
  line-height: 0.8;
  letter-spacing: -0.04em;
  font-variant-numeric: tabular-nums;
  color: var(--accent-color);
  opacity: 0.03;
  pointer-events: none;
  user-select: none;
}

.pains__card-title,
.pains__card-text {
  position: relative;
  z-index: 1;
}

.pains__card-title {
  font-family: var(--font-heading);
  font-size: clamp(1.75rem, 1rem + 1.9vw, 2.25rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--text-main);
  margin-bottom: var(--space-3);
}

.pains__card-text {
  max-width: 46ch;
  font-size: var(--text-base);
  font-weight: 300;
  line-height: 1.6;
  color: var(--text-muted);
  text-wrap: pretty;
}

/* --------------------------------------------------------------------------
   11c. SEÇÃO 3 — MÉTODO EFEITO METAMORFOSE
   Painéis que se expandem no hover, no foco e no toque. O texto de apoio
   está sempre no DOM: a expansão é visual, nunca condição para ler.
   -------------------------------------------------------------------------- */
.method {
  padding-block: clamp(4rem, 10vh, 7rem);
  scroll-margin-top: var(--header-h);
}

/* --- Cabeçalho monumental --- */
.method__head {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  max-width: 48rem;
  margin-inline: auto;
  margin-bottom: clamp(3.5rem, 9vh, 6.5rem);
  padding-block: clamp(2rem, 5vh, 3.5rem);
  text-align: center;
}

/* Marca d'água colossal deslizando por trás do título */
.method__watermark {
  position: absolute;
  z-index: -1;
  top: 50%;
  left: 0;
  width: 100%;
  transform: translateY(-50%);
  pointer-events: none;
  user-select: none;
}

.method__watermark-track {
  display: flex;
  width: max-content;
  animation: watermark-drift 38s linear infinite;
}

.method__watermark-word {
  padding-inline-end: 0.18em;
  font-family: var(--font-heading);
  font-size: clamp(6rem, 15vw, 18rem);
  font-style: italic;
  font-weight: 600;
  line-height: 0.78;
  letter-spacing: -0.03em;
  text-transform: uppercase;
  white-space: nowrap;
  color: var(--text-main);
  opacity: 0.03;
}

/* A faixa tem duas cópias: de -50% a 0 o ciclo fecha sem emenda */
@keyframes watermark-drift {
  from { transform: translateX(-50%); }
  to   { transform: translateX(0); }
}

.method__title {
  position: relative;
  font-family: var(--font-heading);
  font-size: clamp(2.25rem, 1.1rem + 3.1vw, 3.5rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--text-main);
  text-wrap: balance;
}

/* "transformação" em terracota itálica. O gradiente animado saiu: o
   SplitType envolve cada letra num elemento próprio, e o background-clip
   passaria a recortar letra a letra em vez de correr pela palavra.
   Quem carrega a metamorfose agora é a montagem das letras no scroll. */
.method__morph {
  font-style: italic;
  font-weight: 600;
  padding-right: 0.06em;
  color: var(--accent-color);
}

/* --- Trilho de painéis --- */
.method__panels {
  display: flex;
  gap: 1rem;
  height: 60vh;
  max-height: 600px;
  list-style: none;
}

.method__panel {
  position: relative;
  flex: 1;
  /* Piso de largura: se hover e foco caírem em painéis diferentes, o
     terceiro ainda tem espaço para o título em vez de virar uma fatia. */
  min-width: 8rem;
  border-radius: 20px;
  overflow: hidden;
  cursor: pointer;
  transition: flex 0.7s cubic-bezier(0.25, 1, 0.5, 1);
}

/* Com GSAP Flip carregado a largura passa a ser animada por JS com
   easing elástico. A transição de CSS fica só como caminho de fallback. */
.flip-ready .method__panel {
  transition: none;
}

/* Zero especificidade: qualquer regra de desempate abaixo vence. */
.method__panel:where(:hover, :focus-visible, .is-open) {
  flex: 3;
}

/* Com o ponteiro sobre o trilho, o hover manda — o painel aberto por
   toque volta a encolher em vez de disputar espaço com o hover. */
@media (hover: hover) {
  .method__panels:hover .method__panel.is-open:not(:hover) {
    flex: 1;
  }
}

.method__panel:focus-visible {
  outline: 3px solid var(--accent-soft);
  outline-offset: -3px;
}

/* Camada 1 — a fotografia. Ken Burns: cresce junto com o painel. */
.method__bg {
  position: absolute;
  z-index: 0;
  inset: 0;
  background-size: cover;
  background-position: center;
  background-repeat: no-repeat;
  transform: scale(1);
  transition: transform 0.7s cubic-bezier(0.25, 1, 0.5, 1);
}

.method__panel:where(:hover, :focus-visible, .is-open) .method__bg {
  transform: scale(1.08);
}

/* A cor de fundo permanece como piso: se a foto falhar, o painel
   continua legível em vez de virar um retângulo vazio. */
/* Mesa posta de verdade, com variedade — a refeição de uma rotina,
   não um prato de campanha. */
.method__panel--rotina .method__bg {
  background-color: #C4653F;
  background-image: url('https://images.unsplash.com/photo-1493770348161-369560ae357d?q=80&w=1000&auto=format&fit=crop');
}

/* Brigadeiro de verdade: o doce cabe na dieta, sem culpa. */
.method__panel--terrorismo .method__bg {
  background-color: #33302D;
  background-image: url('https://images.unsplash.com/photo-1702982852429-e0d0b27eb990?q=80&w=1000&auto=format&fit=crop');
}

.method__panel--metamorfose .method__bg {
  background-color: #A8846A;
  background-image: url('https://images.unsplash.com/photo-1538805060514-97d9cc17730c?q=80&w=1000&auto=format&fit=crop');
}

/* Camada 2 — tinta quente que reconcilia as três fotos com a paleta */
.method__panel::before {
  content: '';
  position: absolute;
  z-index: 1;
  inset: 0;
  background-color: rgba(43, 33, 31, 0.2);
  pointer-events: none;
}

/* Camada 3 — véu inferior que sustenta o texto sobre qualquer foto */
.method__veil {
  position: absolute;
  z-index: 2;
  inset: 0;
  background: linear-gradient(to top,
              rgba(0, 0, 0, 0.88) 0%,
              rgba(0, 0, 0, 0.62) 34%,
              rgba(0, 0, 0, 0.18) 58%,
              rgba(0, 0, 0, 0) 80%);
}

/* Camada 4 — conteúdo */
.method__body {
  position: absolute;
  z-index: 3;
  inset: auto 0 0 0;
  padding: clamp(1.25rem, 2.5vw, 2rem);
  color: var(--bg-white);
}

.method__panel-title {
  font-family: var(--font-heading);
  font-size: clamp(1.5rem, 1rem + 1.3vw, 2rem);
  font-weight: 600;
  line-height: 1.12;
  letter-spacing: -0.02em;
  text-wrap: balance;
}

/* O filete se desenha antes do texto: a expansão vira um desdobramento */
.method__rule {
  display: block;
  width: 0;
  height: 1px;
  margin-top: 0.875rem;
  background: var(--accent-soft);
  transition: width 600ms cubic-bezier(0.25, 1, 0.5, 1) 80ms;
}

.method__panel:where(:hover, :focus-visible, .is-open) .method__rule {
  width: 3rem;
}

/* Máscaras: `overflow: hidden` invisível de onde o texto sobe.
   Sem GSAP, o CSS ainda revela por altura no hover. */
.method__mask {
  overflow: hidden;
}

.method__mask--text {
  display: grid;
  grid-template-rows: 0fr;
  transition: grid-template-rows 700ms cubic-bezier(0.25, 1, 0.5, 1);
}

.method__panel:where(:hover, :focus-visible, .is-open) .method__mask--text {
  grid-template-rows: 1fr;
}

/* Com o motor pronto o GSAP controla altura e deslocamento */
.gsap-ready .method__mask--text,
.gsap-ready .method__panel:where(:hover, :focus-visible, .is-open) .method__mask--text {
  display: block;
  grid-template-rows: none;
  transition: none;
}

.method__panel-text {
  overflow: hidden;
  max-width: 34ch;
  font-size: var(--text-sm);
  font-weight: 300;
  line-height: 1.6;
  color: rgba(255, 255, 255, 0.88);
  opacity: 0;
  transition: opacity 400ms var(--ease-out);
}

.method__panel:where(:hover, :focus-visible, .is-open) .method__panel-text {
  padding-top: 0.875rem;
  opacity: 1;
  transition-delay: 180ms;
}

.gsap-ready .method__panel-text {
  padding-top: 0.875rem;
  opacity: 1;
  transition: none;
}

/* --- Camada WebGL: shader de deslocamento fluido ---
   Fica sobre a foto em CSS, que segue como fallback. O canvas tem a
   largura do painel expandido e é recortado pelo painel: assim a
   imagem não precisa ser redimensionada a cada quadro da expansão. */
.method__gl {
  position: absolute;
  z-index: 1;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  opacity: 0;
  transition: opacity 500ms var(--ease-out);
  pointer-events: none;
}

.method__panel.gl-ready .method__gl {
  opacity: 1;
}

/* Com o shader ativo o Ken Burns em CSS sai de cena: o zoom passa a ser
   feito nas coordenadas de textura, junto com a distorção. */
.method__panel.gl-ready .method__bg,
.method__panel.gl-ready::before {
  transition: none;
  transform: none;
}

/* Título do H2 em 3D: as letras chegam de profundidades diferentes */
.method__title {
  perspective: 800px;
}

.method__title .char {
  display: inline-block;
  will-change: transform, opacity, filter;
}

/* --------------------------------------------------------------------------
   11d1. SEÇÃO 4A — A FORMAÇÃO POR TRÁS DO MÉTODO (timeline escultural)
   Fundo nude, linha SVG desenhada com a rolagem e marcos que acendem
   quando ela os alcança. Fecha com a assinatura e o selo giratório.
   -------------------------------------------------------------------------- */
.about {
  scroll-margin-top: var(--header-h);
}

/* --- Timeline --- */
.about__journey {
  background: var(--bg-primary);
  padding-block: clamp(4rem, 10vh, 7rem);
}

.about__eyebrow {
  margin-bottom: clamp(2.5rem, 6vh, 4rem);
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  text-align: center;
  color: var(--accent-deep);
}

.about__timeline {
  position: relative;
}

/* `preserveAspectRatio: none` faz o y do viewBox virar porcentagem direta
   da altura real, então os nós ficam presos às linhas da grade em
   qualquer altura. O traço fica fino porque não escala junto. */
.about__path {
  position: absolute;
  inset: 0;
  left: 50%;
  width: 14rem;
  height: 100%;
  transform: translateX(-50%);
  overflow: visible;
  pointer-events: none;
}

.about__path-track {
  stroke: rgba(120, 68, 44, 0.16);
  stroke-width: 1;
}

.about__path-line {
  stroke: var(--accent-color);
  stroke-width: 1.5;
  stroke-linecap: round;
}

.about__steps {
  list-style: none;
  display: grid;
  grid-auto-rows: minmax(11rem, 1fr);
}

.about__step {
  position: relative;
  display: grid;
  grid-template-columns: 1fr;
  align-items: center;
}

/* O nó: anel apagado que acende quando a linha o alcança */
.about__node {
  position: absolute;
  left: 50%;
  top: 50%;
  width: 0.875rem;
  height: 0.875rem;
  margin: -0.4375rem 0 0 -0.4375rem;
  border: 1.5px solid var(--accent-color);
  border-radius: 50%;
  background: var(--bg-primary);
  box-shadow: 0 0 0 0 rgba(196, 101, 63, 0.35);
  transition: background-color 400ms var(--ease-out), box-shadow 400ms var(--ease-out);
}

.about__step.is-lit .about__node {
  background: var(--accent-color);
  box-shadow: 0 0 0 6px rgba(196, 101, 63, 0.16);
}

.about__step-mark {
  display: block;
  margin-bottom: 0.375rem;
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--accent-deep);
}

.about__step-title {
  font-family: var(--font-heading);
  font-size: clamp(1.5rem, 1rem + 1.3vw, 2rem);
  font-weight: 600;
  line-height: 1.12;
  letter-spacing: -0.02em;
  color: var(--text-main);
  margin-bottom: 0.5rem;
}

.about__step-text {
  font-size: var(--text-sm);
  font-weight: 300;
  line-height: 1.6;
  color: var(--text-muted);
  text-wrap: pretty;
}

/* --- Assinatura e selo --- */
.about__sign {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--space-5);
  margin-top: clamp(3rem, 8vh, 5rem);
  padding-top: var(--space-5);
  border-top: 1px solid rgba(120, 68, 44, 0.16);
}

.about__signature {
  display: flex;
  align-items: baseline;
  gap: 0.75rem;
  font-family: var(--font-heading);
  font-size: clamp(1.375rem, 1rem + 1vw, 1.75rem);
  font-weight: 600;
  letter-spacing: -0.01em;
  color: var(--text-main);
}

.about__signature-sep {
  color: var(--accent-color);
  font-weight: 400;
}

.about__signature-crn {
  font-family: var(--font-body);
  font-size: var(--text-sm);
  font-weight: 400;
  letter-spacing: 0.06em;
  font-variant-numeric: tabular-nums;
  color: var(--text-muted);
}

.about__seal {
  position: relative;
  width: 8.75rem;
  height: 8.75rem;
}

.about__seal svg {
  width: 100%;
  height: 100%;
  animation: seal-spin 22s linear infinite;
}

@keyframes seal-spin {
  to { transform: rotate(360deg); }
}

.about__seal-text {
  font-family: var(--font-body);
  font-size: 9.5px;
  font-weight: 500;
  letter-spacing: 0.2em;
  fill: var(--accent-deep);
  text-transform: uppercase;
}

/* Miolo parado: sem ele o selo lê como um anel de texto solto */
.about__seal-core {
  position: absolute;
  top: 50%;
  left: 50%;
  width: 0.5rem;
  height: 0.5rem;
  margin: -0.25rem 0 0 -0.25rem;
  border-radius: 50%;
  background: var(--accent-color);
}

/* Celular e tablet: a linha encosta na esquerda e o texto ocupa o resto.
   A faixa tem 4rem, então o eixo do path (x=100 de 200 no viewBox) cai
   no meio dela: 0.5rem + 2rem = 2.5rem. O nó precisa desse mesmo valor,
   senão fica flutuando ao lado da linha em vez de sobre ela.
   Vale até 63.99em, e não só até o celular: as duas colunas só começam em
   64em, e entre um ponto e outro a grade tem uma coluna só — com a linha no
   centro, o texto passaria por cima dos nós. */
@media (max-width: 63.99em) {
  .about__path {
    left: 0.5rem;
    width: 4rem;
    transform: none;
  }

  .about__node {
    left: 2.5rem;
  }

  .about__step-body {
    padding-left: 5rem;
  }

  .about__step {
    align-items: start;
    padding-block: var(--space-3);
  }

  .about__node {
    top: 1.75rem;
  }
}

/* Desktop: a timeline abre em duas colunas em torno da linha central */
@media (min-width: 64em) {
  .about__step {
    grid-template-columns: 1fr 14rem 1fr;
  }

  .about__step-body {
    grid-column: 1;
    padding-right: var(--space-5);
    text-align: right;
  }

  .about__step:nth-child(even) .about__step-body {
    grid-column: 3;
    padding-right: 0;
    padding-left: var(--space-5);
    text-align: left;
  }

  .about__step-text {
    max-width: 34ch;
    margin-left: auto;
  }

  .about__step:nth-child(even) .about__step-text {
    margin-left: 0;
    margin-right: auto;
  }

  .about__sign {
    flex-direction: row;
    justify-content: space-between;
  }
}

/* Movimento reduzido: o selo fica parado. A linha e os marcos já nascem
   desenhados e acesos pelo JS nesse caso. */
@media (prefers-reduced-motion: reduce) {
  .about__seal svg { animation: none; }
}

/* --------------------------------------------------------------------------
   11d2. SEÇÃO 4B — A JORNADA (split-screen com texto revelado na rolagem)
   O trilho tem 250vh: são 150vh de rolagem com o palco preso no topo. A
   foto não se move; o que anda é a luz sobre as palavras.

   Os 250vh só valem enquanto a revelação está ativa (`.is-scrubbing`, posta
   pelo JS). Sem JS, com movimento reduzido ou em telas estreitas, o trilho
   tem a altura do conteúdo — ninguém rola 150vh diante de um palco parado.
   -------------------------------------------------------------------------- */
.journey {
  position: relative;
}

.journey.is-scrubbing .journey__track {
  height: 250vh;
}

.journey__stage {
  position: sticky;
  top: 0;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 4rem;
  padding: 0 5%;
  /* O cabeçalho também é sticky e cobre o topo do palco enquanto ele está
     preso. Descontar a altura dele centraliza a composição na área que fica
     de fato visível, e a foto nunca passa por baixo da barra. */
  padding-top: var(--header-h);
  overflow: hidden;
}

.journey__copy-col {
  flex: 0 1 50%;
  min-width: 0;
}

/* Aceso, #2B2724 sobre a base clara dá 13.9:1. O estado apagado (15%) só
   existe com o JS ativo, durante a revelação. */
.journey__copy {
  font-family: var(--font-heading);
  font-size: clamp(2rem, 3vw, 4rem);
  font-weight: 500;
  line-height: 1.2;
  letter-spacing: -0.01em;
  color: var(--text-main);
}

/* A largura da coluna sai da proporção original da foto (856×1280): altura
   da imagem × 0,66875. Assim o `object-fit: cover` não corta nada — só
   quando a coluna encosta no teto de 46% da largura. */
.journey__media {
  flex: 0 0 auto;
  width: min(46%, calc(min(80vh, 850px) * 0.66875));
}

.journey__photo {
  display: block;
  width: 100%;
  height: 80vh;
  max-height: 850px;
  object-fit: cover;
  border-radius: 12px;
  background: var(--bg-deep);
}

/* Telas estreitas ou baixas: o palco solta, as colunas empilham e a foto
   volta à proporção natural. A revelação continua, amarrada ao próprio
   parágrafo em vez do trilho. As consultas são as mesmas do script.js. */
@media (max-width: 63.99em), (max-height: 31.24em) {
  .journey__stage {
    position: relative;
    height: auto;
    flex-direction: column;
    align-items: stretch;
    justify-content: flex-start;
    gap: clamp(2.5rem, 7vw, 3.5rem);
    padding: clamp(4.5rem, 12vh, 6.5rem) 5%;
    overflow: visible;
  }

  .journey__copy-col {
    flex: none;
  }

  .journey__media {
    width: min(100%, 34rem);
    margin-inline: auto;
  }

  .journey__photo {
    height: auto;
    max-height: none;
    aspect-ratio: 856 / 1280;
  }
}

/* --------------------------------------------------------------------------
   11e. SEÇÃO 5 — SERVIÇOS
   Base: rolagem horizontal nativa com scroll-snap. Funciona sem JS, com
   movimento reduzido e no celular. `.is-pinned` só é adicionada pelo JS
   quando o ScrollTrigger assume, e aí a seção vira um palco travado.
   -------------------------------------------------------------------------- */
.services {
  position: relative;
  /* 100% e não 100vw: `vw` inclui a largura da barra de rolagem e criaria
     um transbordo horizontal do tamanho dela. */
  width: 100%;
  padding-block: clamp(4rem, 10vh, 7rem);
  scroll-margin-top: var(--header-h);
}

.services.is-pinned {
  height: 100vh;
  height: 100dvh;
  overflow: hidden;
  padding-block: 0;
}

/* Massas de cor que ficam paradas enquanto os cards deslizam por cima:
   é o que dá o que borrar para o vidro fosco. */
.services__glow {
  position: absolute;
  z-index: 0;
  border-radius: 50%;
  pointer-events: none;
  filter: blur(10px);
}

.services__glow--a {
  top: -12%;
  right: 6%;
  width: 38vw;
  height: 38vw;
  background: radial-gradient(circle at 50% 50%,
              rgba(196, 101, 63, 0.30) 0%,
              rgba(196, 101, 63, 0.08) 48%,
              rgba(196, 101, 63, 0) 72%);
}

.services__glow--b {
  bottom: -18%;
  left: 2%;
  width: 44vw;
  height: 44vw;
  background: radial-gradient(circle at 50% 50%,
              rgba(226, 198, 180, 0.55) 0%,
              rgba(226, 198, 180, 0.16) 46%,
              rgba(226, 198, 180, 0) 72%);
}

/* --- Cabeçalho --- */
.services__head {
  position: relative;
  z-index: 2;
  width: min(100% - (2 * var(--container-pad)), var(--container-max));
  margin-inline: auto;
  margin-bottom: clamp(2rem, 5vh, 3.5rem);
}

.services.is-pinned .services__head {
  position: absolute;
  top: clamp(6rem, 14vh, 9rem);
  left: 50%;
  transform: translateX(-50%);
  margin-bottom: 0;
  pointer-events: none;
}

.services__title {
  font-family: var(--font-heading);
  font-size: clamp(2.25rem, 1.1rem + 3.1vw, 3.5rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--text-main);
}

.services__title em {
  font-style: italic;
  font-weight: 500;
  padding-right: 0.06em;
  color: var(--accent-color);
}

/* Uma seção travada sem indicação de progresso deixa o leitor sem saber
   quanto falta. Este filete é a única leitura desse estado. */
.services__progress {
  position: relative;
  width: 7rem;
  height: 2px;
  margin-top: var(--space-4);
  background: rgba(120, 68, 44, 0.16);
  overflow: hidden;
}

.services__progress-fill {
  position: absolute;
  inset: 0;
  background: var(--accent-color);
  transform: scaleX(0);
  transform-origin: left center;
}

.services:not(.is-pinned) .services__progress {
  display: none;
}

/* --- Trilho --- */
.services__track {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: stretch;
  gap: clamp(1.5rem, 3vw, 3rem);
  list-style: none;
  padding-inline: var(--container-pad);
  overflow-x: auto;
  overscroll-behavior-x: contain;
  scroll-snap-type: x mandatory;
  scroll-padding-inline: var(--container-pad);
  -webkit-overflow-scrolling: touch;
}

.services.is-pinned .services__track {
  height: 100%;
  align-items: center;
  overflow: visible;
  scroll-snap-type: none;
  padding-inline: clamp(1.5rem, 6vw, 8rem);
  padding-top: clamp(11rem, 30vh, 17rem);
  will-change: transform;
}

/* --- Card em vidro fosco --- */
.services__card {
  position: relative;
  flex: 0 0 min(82vw, 34rem);
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  gap: var(--space-5);
  padding: clamp(1.75rem, 3.5vw, 3rem);
  scroll-snap-align: center;
  background: rgba(251, 247, 244, 0.7);
  -webkit-backdrop-filter: blur(24px) saturate(150%);
  backdrop-filter: blur(24px) saturate(150%);
  border: 1px solid rgba(255, 255, 255, 0.8);
  border-radius: 24px;
  box-shadow: 0 32px 64px -40px rgba(120, 68, 44, 0.5);
  transform-style: preserve-3d;
}

.services.is-pinned .services__card {
  flex-basis: 70vw;
  max-width: 46rem;
  height: min(56vh, 26rem);
}

/* O conteúdo flutua um pouco à frente do card: no tilt 3D é isso que
   separa o plano do texto do plano do vidro. */
.services__card-body,
.services__cta {
  transform: translateZ(28px);
}

.services__card-kicker {
  margin-bottom: var(--space-3);
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--accent-deep);
}

.services__card-title {
  font-family: var(--font-heading);
  font-size: clamp(1.75rem, 1rem + 1.9vw, 2.5rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--text-main);
  margin-bottom: var(--space-3);
}

.services__card-text {
  max-width: 44ch;
  font-size: var(--text-base);
  font-weight: 300;
  line-height: 1.6;
  color: var(--text-muted);
  text-wrap: pretty;
}

/* --- CTA magnético --- */
.services__cta {
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 3.25rem;
  padding: 0 var(--space-5);
  background: var(--cta-color);
  color: var(--cta-on);
  border-radius: var(--radius-pill);
  font-size: var(--text-sm);
  font-weight: 500;
  white-space: nowrap;
  box-shadow: 0 14px 30px -14px rgba(204, 31, 56, 0.6);
  transition: background-color var(--dur-fast) var(--ease-out);
}

.services__cta:hover {
  background: var(--cta-hover);
}

.services__cta-label {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
}

/* --------------------------------------------------------------------------
   11f. SEÇÃO 6 — MODALIDADES E LOCALIZAÇÃO
   Duas metades de tela em ziguezague: na coluna online o texto fica em cima
   e a imagem embaixo; na coluna do consultório é o inverso. As imagens são
   retângulos exatos porque, com o Shery ativo, quem as desenha é uma malha
   WebGL num canvas fixo — border-radius e overflow da <div> não a afetam.
   -------------------------------------------------------------------------- */
.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.modes {
  position: relative;
  display: grid;
  grid-template-columns: 1fr;
  width: 100%;
  scroll-margin-top: var(--header-h);
}

.modes__col {
  position: relative;
  display: grid;
  grid-template-rows: auto auto;
}

.modes__col--online {
  background: var(--bg-primary);
  color: var(--text-main);
}

/* Terracota profunda, não a de destaque: o branco precisa de 4.5:1 para o
   corpo de texto, e sobre #C4653F ficaria em 3.8:1. Sobre #A8512F dá 5.4:1. */
.modes__col--clinic {
  background: var(--accent-deep);
  color: #FFFFFF;
}

.modes__body {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 1.25rem;
  padding: clamp(2rem, 4.5vh, 3rem) clamp(1.5rem, 6vw, 5.5rem);
}

.modes__eyebrow {
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--accent-deep);
}

.modes__col--clinic .modes__eyebrow {
  color: rgba(255, 255, 255, 0.92);
}

.modes__title {
  font-family: var(--font-heading);
  font-size: clamp(2.5rem, 1.4rem + 3.2vw, 4rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
}

.modes__text {
  max-width: 44ch;
  font-size: var(--text-base);
  font-weight: 300;
  line-height: 1.6;
  color: var(--text-muted);
  text-wrap: pretty;
}

.modes__col--clinic .modes__text {
  color: rgba(255, 255, 255, 0.92);
}

.modes__facts {
  display: grid;
  gap: var(--space-2);
  list-style: none;
  font-size: var(--text-sm);
  font-weight: 400;
  color: var(--text-main);
}

.modes__facts li {
  display: flex;
  align-items: center;
  gap: var(--space-2);
}

.modes__facts li::before {
  content: "";
  flex: none;
  width: 1.25rem;
  height: 1px;
  background: var(--accent-color);
}

.modes__address {
  display: flex;
  align-items: flex-start;
  gap: var(--space-2);
  font-style: normal;
  color: rgba(255, 255, 255, 0.92);
}

.modes__address svg {
  flex: none;
  margin-top: 0.35rem;
}

.modes__street {
  display: block;
  font-family: var(--font-heading);
  font-size: clamp(1.5rem, 1.2rem + 0.8vw, 1.875rem);
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: -0.01em;
  color: #FFFFFF;
}

.modes__address-note {
  display: block;
  margin-top: 0.25rem;
  font-size: var(--text-sm);
  font-weight: 300;
}

.modes__cta {
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  min-height: 3.25rem;
  margin-top: var(--space-2);
  padding: 0 var(--space-5);
  border-radius: var(--radius-pill);
  background: var(--text-main);
  color: var(--bg-page);
  font-size: var(--text-sm);
  font-weight: 500;
  white-space: nowrap;
  transition: background-color var(--dur-base) var(--ease-out),
              color var(--dur-base) var(--ease-out),
              transform var(--dur-fast) var(--ease-out);
}

.modes__cta svg {
  transition: transform var(--dur-base) var(--ease-out);
}

.modes__cta:hover {
  background: var(--accent-deep);
  color: #FFFFFF;
  transform: translateY(-2px);
}

.modes__cta:hover svg {
  transform: translateX(3px);
}

.modes__cta--light {
  background: #FFFFFF;
  color: var(--accent-deep);
}

.modes__cta--light:hover {
  background: var(--bg-page);
  color: var(--text-main);
}

.modes__col--clinic :focus-visible {
  outline-color: #FFFFFF;
}

/* --- Mídia: foto do atendimento online e mapa do consultório ---
   A caixa tem altura definida em qualquer largura — `min(72vw, 26rem)` no
   celular, a linha da grade no desktop —, então a foto e o iframe podem
   ocupar 100% dela. O recuo lateral acompanha o do texto da coluna, e o
   vertical separa a mídia do bloco de texto. */
.modes__media {
  display: grid;
  height: min(72vw, 26rem);
  padding-inline: clamp(1.5rem, 6vw, 5.5rem);
}

.modes__col--online .modes__media {
  padding-bottom: clamp(2rem, 4.5vh, 3rem);
}

.modes__col--clinic .modes__media {
  padding-top: clamp(2rem, 4.5vh, 3rem);
}

.modes__photo,
.modes__map {
  display: block;
  width: 100%;
  height: 100%;
  border: 0;
  border-radius: 16px;
}

.modes__photo {
  object-fit: cover;
  background: var(--bg-deep);
}

/* Enquanto o mapa carrega, um tom claro sobre a terracota marca a área. */
.modes__map {
  background: rgba(251, 247, 244, 0.14);
}

/* --------------------------------------------------------------------------
   11g. SEÇÃO 7 — PROVA SOCIAL (Swiper em modo livre)
   O trilho começa alinhado ao container e sangra até a borda direita.
   Antes do Swiper inicializar (ou sem JS) o mesmo trilho rola nativamente,
   sem barra visível.
   -------------------------------------------------------------------------- */
.stories {
  position: relative;
  padding-block: clamp(5rem, 12vh, 8rem);
  overflow: clip;
  scroll-margin-top: var(--header-h);
}

/* Massa de cor parada atrás dos cards: é o que o vidro fosco desfoca. */
.stories__glow {
  position: absolute;
  z-index: 0;
  top: 30%;
  right: -10%;
  width: min(60vw, 42rem);
  height: min(60vw, 42rem);
  border-radius: 50%;
  pointer-events: none;
  filter: blur(12px);
  background: radial-gradient(circle at 50% 50%,
              rgba(196, 101, 63, 0.26) 0%,
              rgba(226, 198, 180, 0.28) 42%,
              rgba(226, 198, 180, 0) 70%);
}

.stories__head {
  position: relative;
  z-index: 1;
  max-width: 42rem;
  margin-inline: auto;
  margin-bottom: clamp(2.5rem, 6vh, 4rem);
  text-align: center;
}

.stories__badge {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  margin-bottom: var(--space-4);
  padding: 0.55rem 1rem 0.55rem 0.85rem;
  border: 1px solid var(--line-color);
  border-radius: var(--radius-pill);
  background: var(--bg-white);
  box-shadow: var(--glass-shadow);
  font-size: var(--text-xs);
  font-weight: 500;
  letter-spacing: 0.03em;
  color: var(--text-main);
  animation: badge-float 6s var(--ease-soft) infinite;
}

.stories__stars {
  display: inline-flex;
  gap: 0.15rem;
}

.stories__stars svg {
  fill: #B07C22;
}

@keyframes badge-float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-4px); }
}

.stories__title {
  font-family: var(--font-heading);
  font-size: clamp(2.25rem, 1.1rem + 3.1vw, 3.5rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--text-main);
  text-wrap: balance;
}

.stories__title em {
  font-style: italic;
  font-weight: 500;
  color: var(--accent-color);
}

.stories__rail {
  position: relative;
  z-index: 1;
}

.stories__swiper {
  /* O primeiro card alinha com a borda esquerda do container. */
  padding-left: max(var(--container-pad), calc((100% - var(--container-max)) / 2));
}

/* Cada card na altura do próprio texto: o flex padrão esticaria todos até
   a avaliação mais longa, e as curtas ficariam com um vazio no pé. */
.stories__list {
  align-items: flex-start;
  list-style: none;
}

/* Fallback antes do Swiper (ou sem JS): rolagem nativa, barra escondida. */
.stories__swiper:not(.swiper-initialized) {
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-padding-left: max(var(--container-pad), calc((100% - var(--container-max)) / 2));
  scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}

.stories__swiper:not(.swiper-initialized)::-webkit-scrollbar {
  display: none;
}

.stories__swiper:not(.swiper-initialized) .stories__list {
  gap: 2rem;
  padding-right: var(--container-pad);
}

.stories__swiper:not(.swiper-initialized) .stories__card {
  scroll-snap-align: start;
}

/* --- Card de depoimento --- */
.stories__swiper .stories__card {
  position: relative;
  isolation: isolate;
  width: min(82vw, 27rem);
  height: auto;
  padding: clamp(1.75rem, 3vw, 2.5rem);
  overflow: hidden;
  background: rgba(251, 247, 244, 0.62);
  -webkit-backdrop-filter: blur(20px) saturate(140%);
  backdrop-filter: blur(20px) saturate(140%);
  border: 1px solid rgba(43, 39, 36, 0.09);
  border-radius: 24px;
  box-shadow: 0 28px 56px -40px rgba(120, 68, 44, 0.45);
}

/* Aspas como marca-d'água, no fundo do card */
.stories__card::before {
  content: "\201C";
  position: absolute;
  z-index: -1;
  top: -0.32em;
  right: 0.1em;
  font-family: var(--font-heading);
  font-size: 11rem;
  font-weight: 600;
  line-height: 1;
  color: var(--accent-color);
  opacity: 0.09;
  pointer-events: none;
}

.stories__figure {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

/* Quem avaliou e a nota vêm antes do texto, na mesma ordem do Google. */
.stories__meta {
  display: flex;
  align-items: center;
  gap: 0.9rem;
}

.stories__avatar {
  flex: none;
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: 50%;
  background: var(--accent-soft);
  color: var(--accent-deep);
  font-family: var(--font-heading);
  font-size: 1.375rem;
  font-weight: 600;
  line-height: 1;
}

.stories__who {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  min-width: 0;
}

.stories__name {
  font-size: var(--text-sm);
  font-weight: 500;
  line-height: 1.25;
  color: var(--text-main);
}

.stories__rating {
  font-size: 0.8rem;
  line-height: 1;
  letter-spacing: 0.12em;
  color: #B07C22;
}

/* Texto integral de cada avaliação. Sem serifa: relatos longos e
   espontâneos leem melhor em corpo de texto do que em tipografia de
   manchete. #4A4A4A sobre o vidro claro fica acima de 7:1. */
.stories__quote p {
  font-size: var(--text-base);
  font-weight: 300;
  line-height: 1.65;
  color: var(--text-muted);
  text-wrap: pretty;
}

/* --- Controles --- */
.stories__controls {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin-top: var(--space-5);
}

.stories__nav {
  display: grid;
  place-items: center;
  width: 3rem;
  height: 3rem;
  border: 1px solid var(--line-color);
  border-radius: 50%;
  background: transparent;
  color: var(--text-main);
  transition: background-color var(--dur-base) var(--ease-out),
              color var(--dur-base) var(--ease-out),
              border-color var(--dur-base) var(--ease-out),
              opacity var(--dur-base) var(--ease-out);
}

.stories__nav:hover {
  background: var(--text-main);
  border-color: var(--text-main);
  color: var(--bg-page);
}

.stories__nav.is-disabled,
.stories__nav:disabled {
  opacity: 0.35;
  cursor: default;
  pointer-events: none;
}

.stories__hint {
  margin-left: auto;
  font-size: var(--text-xs);
  font-weight: 300;
  letter-spacing: 0.04em;
  color: var(--text-muted);
}

/* --------------------------------------------------------------------------
   11h. SEÇÃO 8 — HUB DE AUTORIDADE (BLOG)
   Bento editorial sem bordas: um artigo de destaque à esquerda ocupando duas
   linhas, dois artigos compactos empilhados à direita. Os raios das imagens
   variam de peça para peça, um canto "aberto" em cada, como recortes.
   -------------------------------------------------------------------------- */
.blog {
  position: relative;
  padding-block: clamp(5rem, 12vh, 8rem) clamp(6rem, 14vh, 9rem);
  scroll-margin-top: var(--header-h);
}

.blog__head {
  display: grid;
  gap: var(--space-5);
  margin-bottom: clamp(2.5rem, 6vh, 4rem);
}

.blog__eyebrow {
  margin-bottom: var(--space-3);
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--accent-deep);
}

.blog__title {
  font-family: var(--font-heading);
  font-size: clamp(2.25rem, 1.1rem + 3.1vw, 3.5rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
  color: var(--text-main);
}

.blog__title em {
  font-style: italic;
  font-weight: 500;
  color: var(--accent-color);
}

.blog__head-aside {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

.blog__lead {
  max-width: 42ch;
  font-size: var(--text-base);
  font-weight: 300;
  line-height: 1.6;
  color: var(--text-muted);
  text-wrap: pretty;
}

.blog__all {
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  padding-bottom: 0.2rem;
  border-bottom: 1px solid var(--text-main);
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--text-main);
  transition: color var(--dur-base) var(--ease-out),
              border-color var(--dur-base) var(--ease-out);
}

.blog__all svg,
.blog__more svg {
  transition: transform var(--dur-base) var(--ease-out);
}

.blog__all:hover {
  color: var(--accent-deep);
  border-color: var(--accent-deep);
}

.blog__all:hover svg {
  transform: translateX(4px);
}

/* --- Grade --- */
.blog__grid {
  display: grid;
  gap: clamp(2.5rem, 5vw, 3.5rem);
}

.blog__post {
  min-width: 0;
}

.blog__link {
  display: grid;
  gap: var(--space-4);
  height: 100%;
  border-radius: var(--radius-md);
}

.blog__media {
  overflow: hidden;
  aspect-ratio: 4 / 3;
  background: var(--bg-deep);
  border-radius: 1.75rem 1.75rem 1.75rem 0.5rem;
}

.blog__post:nth-child(2) .blog__media { border-radius: 0.5rem 1.75rem 1.75rem 1.75rem; }
.blog__post:nth-child(3) .blog__media { border-radius: 1.75rem 0.5rem 1.75rem 1.75rem; }

.blog__media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 1000ms var(--ease-out);
}

.blog__link:hover .blog__media img {
  transform: scale(1.045);
}

.blog__content {
  display: flex;
  flex-direction: column;
  gap: var(--space-3);
}

.blog__meta {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.5rem 0.9rem;
  font-size: var(--text-xs);
  font-weight: 300;
  color: var(--text-muted);
}

.blog__tag {
  padding: 0.3rem 0.65rem;
  border: 1px solid rgba(196, 101, 63, 0.4);
  border-radius: var(--radius-pill);
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--accent-deep);
}

.blog__post-title {
  font-family: var(--font-heading);
  font-size: clamp(1.5rem, 1.15rem + 1vw, 1.875rem);
  font-weight: 600;
  line-height: 1.15;
  letter-spacing: -0.015em;
  color: var(--text-main);
  text-wrap: balance;
  transition: color var(--dur-base) var(--ease-out);
}

.blog__post--feature .blog__post-title {
  font-size: clamp(1.875rem, 1.2rem + 1.9vw, 2.75rem);
}

.blog__link:hover .blog__post-title {
  color: var(--accent-deep);
}

.blog__excerpt {
  max-width: 48ch;
  font-size: var(--text-sm);
  font-weight: 300;
  line-height: 1.6;
  color: var(--text-muted);
  text-wrap: pretty;
}

.blog__post--feature .blog__excerpt {
  font-size: var(--text-base);
}

.blog__more {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  margin-top: auto;
  font-size: var(--text-sm);
  font-weight: 500;
  color: var(--accent-deep);
}

.blog__link:hover .blog__more svg {
  transform: translateX(4px);
}

/* --------------------------------------------------------------------------
   11i. SEÇÃO 9 — O MOVIMENTO (nutrição esportiva)
   Único bloco escuro da página. A quebra de luminosidade é o efeito: por
   isso nada aqui usa vidro fosco nem sombra, só contraste e movimento.

   Contraste sobre #2B2724 (medido):
     off-white #FBF7F4 .......... 13.9:1
     corpo de texto #CDC9C6 ......  9.0:1
     terracota clara #D9855C .....  5.3:1
   A terracota da marca (#C4653F) daria 3.7:1 sobre este fundo e reprovaria
   nos 4.5:1 exigidos para texto pequeno — daí a variante clara, que é a
   regra de dark mode: variante tonal mais clara, não a mesma cor invertida.
   -------------------------------------------------------------------------- */
.sports {
  --sports-ink: var(--on-dark);
  --sports-ink-muted: var(--on-dark-muted);
  --sports-accent: var(--accent-on-dark);
  --sports-max-h: 900px;

  /* Uma tela, no máximo 900px: os letreiros presos às bordas e o manifesto
     ocupando o miolo. Nada aqui tem margem fixa em rem que some à altura —
     os espaçamentos internos são frações de `vh`, e o conjunto encolhe
     junto com a tela. */
  position: relative;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  height: 100vh;
  height: 100svh;
  max-height: var(--sports-max-h);
  overflow: hidden;
  /* O cabeçalho é sticky e cobre o topo de tudo que passa por baixo dele.
     Com a seção na altura exata da tela, ele esconderia o letreiro superior
     justamente no único momento em que a seção inteira está à vista. Este
     recuo é o que falta: vale a altura do cabeçalho quando a seção ocupa a
     tela toda, diminui quando a tela passa de 900px e zera quando seção e
     cabeçalho já cabem juntos. */
  padding-top: clamp(0px, calc(var(--sports-max-h) + var(--header-h) - 100vh), var(--header-h));
  padding-top: clamp(0px, calc(var(--sports-max-h) + var(--header-h) - 100svh), var(--header-h));
  background: var(--text-main);
  color: var(--sports-ink);
}

/* Celular e telas muito baixas: a altura travada cortaria o CTA. A seção
   continua ocupando no mínimo uma tela, mas cresce com o conteúdo. */
@media (max-width: 47.99em), (max-height: 38.75em) {
  .sports {
    height: auto;
    min-height: 100vh;
    min-height: 100svh;
    max-height: none;
  }
}

/* Sobre o fundo escuro, o anel de foco terracota cairia para 3.7:1.
   O off-white mantém o indicador visível em qualquer estado. */
.sports :focus-visible {
  outline-color: var(--sports-ink);
}

/* --- Letreiros --- */
.sports__marquee {
  /* Sem largura máxima e sem container: o letreiro atravessa a tela. */
  position: relative;
  flex: none;
  width: 100%;
  overflow: hidden;
  padding-block: clamp(0.5rem, 1.8vh, 1.25rem);
  user-select: none;
}

.sports__marquee-track {
  display: flex;
  width: max-content;
  will-change: transform;
  /* Base sem JS: o mesmo deslocamento de -50% que o GSAP aplica depois.
     Com dois grupos idênticos no trilho, -50% equivale exatamente à
     largura de um grupo, e a emenda fica invisível. */
  animation: marquee-left 26s linear infinite;
}

.sports__marquee-track[data-marquee-dir="right"] {
  animation-name: marquee-right;
}

/* Com o GSAP no comando, a animação de CSS sai de cena para as duas não
   disputarem a mesma propriedade `transform`. */
.sports.is-gsap .sports__marquee-track {
  animation: none;
}

/* Cortina de entrada. O recorte é montado a partir de uma única variável
   em vez de o GSAP interpolar a string inteira do `clip-path`: o navegador
   serializa `inset(50% 0% 50% 0%)` como `inset(50% 0%)`, e o GSAP então
   casaria dois números contra os quatro do destino — o painel abria de
   baixo para cima em vez de do centro. Um número só não tem ambiguidade.
   A classe só existe durante a animação, então não sobra contexto de
   recorte na seção depois. */
.sports.is-gating {
  clip-path: inset(var(--gate, 0%) 0% var(--gate, 0%) 0%);
}

@keyframes marquee-left {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}

@keyframes marquee-right {
  from { transform: translateX(-50%); }
  to   { transform: translateX(0); }
}

.sports__marquee-group {
  flex: none;
  font-family: var(--font-body);
  /* Limitado pela largura e pela altura: em notebook a altura é o recurso
     escasso, e é ela que decide o corpo. */
  font-size: clamp(2rem, min(5.6vw, 9vh), 5.5rem);
  font-weight: 500;
  line-height: 1.1;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  white-space: nowrap;
  /* Sem suporte a stroke, o letreiro vira um preenchimento discreto. */
  color: rgba(251, 247, 244, 0.13);
}

@supports (-webkit-text-stroke: 1px currentColor) {
  .sports__marquee-group {
    color: transparent;
    -webkit-text-stroke: 1px rgba(251, 247, 244, 0.24);
  }
}

/* --- Manifesto --- */
.sports__manifesto {
  position: relative;
  z-index: 1;
  flex: 1;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  padding-block: clamp(0.75rem, 2.5vh, 2rem);
  text-align: center;
}

.sports__eyebrow {
  margin-bottom: clamp(0.75rem, 2vh, 1.5rem);
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--sports-accent);
}

/* Em telas largas o título cabe numa linha só: gasta a largura, que sobra,
   em vez da altura, que é o limite. No celular ele quebra e se equilibra. */
.sports__title {
  font-family: var(--font-heading);
  font-style: italic;
  font-size: clamp(2.75rem, min(6.8vw, 11vh), 6.5rem);
  font-weight: 500;
  line-height: 1.02;
  letter-spacing: -0.02em;
  color: var(--sports-ink);
  text-wrap: balance;
}

/* No celular a altura não é o limite: o título volta às duas linhas da
   composição original ("Nos vemos / nas pistas."). Sem isso, em 375px ele
   caberia raspando numa linha só, encostado nas duas margens. */
@media (max-width: 47.99em) {
  .sports__title {
    max-width: 11ch;
    font-size: clamp(2.75rem, 12vw, 3.5rem);
  }
}

.sports__text {
  max-width: 58ch;
  margin-top: clamp(0.875rem, 2.4vh, 1.75rem);
  font-size: var(--text-lead);
  font-weight: 300;
  line-height: 1.6;
  color: var(--sports-ink-muted);
  text-wrap: pretty;
}

.sports__cta-wrap {
  margin-top: clamp(1.125rem, 3.2vh, 2.5rem);
}

/* CTA invertido: claro sobre escuro, o oposto de todos os outros botões
   da página. É o que o diferencia sem introduzir uma cor nova. */
.sports__cta {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 3.5rem;
  padding: 0 var(--space-6);
  border-radius: var(--radius-pill);
  background: var(--sports-ink);
  color: var(--text-main);
  font-size: var(--text-sm);
  font-weight: 500;
  white-space: nowrap;
  transition: background-color var(--dur-base) var(--ease-out),
              color var(--dur-base) var(--ease-out);
}

.sports__cta:hover {
  background: var(--sports-accent);
  color: var(--text-main);
}

.sports__cta-label {
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
}

/* --------------------------------------------------------------------------
   11j. SEÇÃO 10 — DÚVIDAS FREQUENTES
   Lista editorial, sem caixas: só filetes horizontais. A resposta abre com
   `grid-template-rows: 0fr → 1fr`, a única forma de animar até a altura
   real do conteúdo sem medir nada em JS nem chutar um `max-height`.

   Contraste sobre #F6ECE6 (medido):
     perguntas #2B2724 .............. 12.8:1
     perguntas em hover #A8512F .....  4.7:1
     respostas #4A4A4A ..............  7.6:1
   -------------------------------------------------------------------------- */
.faq {
  position: relative;
  padding-block: clamp(5rem, 12vh, 8rem);
  background: var(--bg-primary);
}

.faq__inner {
  max-width: 52rem;
}

.faq__title {
  margin-bottom: clamp(2.5rem, 6vh, 4rem);
  font-family: var(--font-heading);
  font-size: clamp(2.25rem, 1.1rem + 3.1vw, 3.5rem);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -0.02em;
  text-align: center;
  color: var(--text-main);
}

.faq__list {
  border-top: 1px solid rgba(0, 0, 0, 0.1);
}

.faq__item {
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
}

.faq__trigger {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--space-4);
  width: 100%;
  padding: clamp(1.25rem, 3vw, 1.75rem) 0;
  border: 0;
  background: transparent;
  color: var(--text-main);
  font-family: var(--font-heading);
  font-size: clamp(1.5rem, 1.2rem + 1vw, 1.8rem);
  font-weight: 500;
  line-height: 1.2;
  letter-spacing: -0.01em;
  text-align: left;
  transition: color var(--dur-base) var(--ease-out);
}

.faq__trigger:hover {
  color: var(--accent-deep);
}

.faq__icon {
  flex: none;
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border: 1px solid rgba(43, 39, 36, 0.22);
  border-radius: 50%;
  color: var(--text-main);
  transition: transform 0.4s ease,
              background-color 0.4s ease,
              border-color 0.4s ease,
              color 0.4s ease;
}

.faq__trigger:hover .faq__icon {
  border-color: var(--text-main);
}

/* Aberto: o "+" gira 45° e vira "×". O preenchimento escuro é a segunda
   pista do estado, para ele não depender só da rotação. */
.faq__trigger[aria-expanded="true"] .faq__icon {
  transform: rotate(45deg);
  background: var(--text-main);
  border-color: var(--text-main);
  color: var(--bg-page);
}

/* O estado recolhido só existe depois que o JS assume (`.is-ready`). Sem
   JS, as respostas ficam abertas e legíveis. */
.faq.is-ready .faq__panel {
  display: grid;
  grid-template-rows: 0fr;
  visibility: hidden;
  /* A visibilidade só vira `hidden` quando a altura já chegou a zero: o
     texto é recolhido, não some no primeiro quadro do fechamento. Fechado,
     o painel sai da árvore de acessibilidade. */
  transition: grid-template-rows 0.4s ease, visibility 0s linear 0.4s;
}

.faq.is-ready .faq__item.is-open .faq__panel {
  grid-template-rows: 1fr;
  visibility: visible;
  transition: grid-template-rows 0.4s ease, visibility 0s linear 0s;
}

/* `min-height: 0` deixa a linha da grade encolher abaixo do conteúdo. O
   espaçamento fica no parágrafo, dentro da área recortada — se estivesse
   aqui, sobraria uma faixa aberta mesmo com o painel fechado. */
.faq__panel-inner {
  min-height: 0;
  overflow: hidden;
}

.faq__answer {
  max-width: 62ch;
  padding-bottom: clamp(1.25rem, 3vw, 1.75rem);
  font-family: var(--font-body);
  font-size: var(--text-base);
  font-weight: 300;
  line-height: 1.6;
  color: var(--text-muted);
  text-wrap: pretty;
}

.faq.is-ready .faq__answer {
  opacity: 0;
  transform: translateY(-0.375rem);
  transition: opacity 0.4s ease, transform 0.4s ease;
}

.faq.is-ready .faq__item.is-open .faq__answer {
  opacity: 1;
  transform: none;
}

/* --------------------------------------------------------------------------
   12. RODAPÉ INSTITUCIONAL
   Mesmo fundo escuro da Seção 9, com os tokens `--on-dark*` (contraste
   medido no :root). A base usa `--on-dark-faint`, 5.0:1: o tom mais
   discreto que ainda passa nos 4.5:1. O "sutil" do crédito vem do tamanho
   e da posição, não de falta de contraste.
   -------------------------------------------------------------------------- */
.site-footer {
  /* O botão flutuante ocupa o canto inferior direito da viewport. No fim
     da rolagem, a última linha precisa terminar acima dele, em qualquer
     largura — daí o recuo inferior derivado dos tokens do próprio botão. */
  padding-top: clamp(4rem, 9vh, 6rem);
  padding-bottom: calc(var(--fab-offset) + var(--fab-size) + var(--space-4));
  padding-bottom: calc(var(--fab-offset) + var(--fab-size) + var(--space-4) + env(safe-area-inset-bottom, 0px));
  background: var(--text-main);
  color: var(--on-dark);
}

.site-footer :focus-visible {
  outline-color: var(--on-dark);
}

.site-footer__grid {
  display: grid;
  gap: clamp(2.5rem, 6vw, 3.5rem);
}

.site-footer__col {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 0.375rem;
  font-style: normal;
}

.site-footer__logo {
  font-family: var(--font-heading);
  font-size: clamp(2rem, 1.5rem + 1.4vw, 2.625rem);
  font-weight: 600;
  line-height: 1;
  letter-spacing: -0.01em;
  color: var(--on-dark);
}

.site-footer__tagline {
  margin-top: 0.625rem;
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1.5;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--on-dark-muted);
}

.site-footer__label {
  margin-bottom: 0.5rem;
  font-size: var(--text-2xs);
  font-weight: 500;
  line-height: 1;
  letter-spacing: var(--tracking-caps);
  text-transform: uppercase;
  color: var(--accent-on-dark);
}

.site-footer__line {
  font-size: var(--text-sm);
  font-weight: 300;
  line-height: 1.6;
  color: var(--on-dark-muted);
}

.site-footer__line--strong {
  max-width: 32ch;
  font-weight: 400;
  color: var(--on-dark);
}

.site-footer__social {
  display: inline-flex;
  align-items: center;
  gap: 0.625rem;
  min-height: 44px;
  font-size: var(--text-sm);
  font-weight: 400;
  color: var(--on-dark);
  transition: color var(--dur-base) var(--ease-out);
}

.site-footer__social svg {
  flex: none;
}

.site-footer__social:hover {
  color: var(--accent-on-dark);
}

.site-footer__bottom {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-between;
  gap: 0.5rem 2rem;
  margin-top: clamp(3rem, 7vh, 4.5rem);
  padding-top: var(--space-4);
  border-top: 1px solid rgba(251, 247, 244, 0.12);
}

.site-footer__meta {
  font-size: var(--text-2xs);
  font-weight: 400;
  line-height: 1.5;
  letter-spacing: 0.04em;
  color: var(--on-dark-faint);
}

/* Tablet: identidade em linha própria, contato e registro lado a lado */
@media (min-width: 48em) {
  .site-footer__grid {
    grid-template-columns: 1fr 1fr;
  }

  .site-footer__col--brand {
    grid-column: 1 / -1;
  }
}

/* Desktop: as três colunas */
@media (min-width: 64em) {
  .site-footer__grid {
    grid-template-columns: 1.3fr 1fr 1fr;
    align-items: start;
  }

  .site-footer__col--brand {
    grid-column: auto;
  }
}

/* --------------------------------------------------------------------------
   12b. CTA FLUTUANTE — WHATSAPP
   Vermelho da identidade, o mesmo dos CTAs principais: o botão atravessa
   fundos claros e escuros e precisa ser lido nos dois. Glifo branco sobre
   #CC1F38: 5.5:1. O pulso anima só `transform` e `opacity`, que o
   compositor resolve sem repintar a página.
   -------------------------------------------------------------------------- */
.wa-fab {
  position: fixed;
  right: var(--fab-offset);
  right: calc(var(--fab-offset) + env(safe-area-inset-right, 0px));
  bottom: var(--fab-offset);
  bottom: calc(var(--fab-offset) + env(safe-area-inset-bottom, 0px));
  z-index: var(--z-fab);
  display: grid;
  place-items: center;
  width: var(--fab-size);
  height: var(--fab-size);
  border-radius: 50%;
  background: var(--cta-color);
  color: var(--cta-on);
  box-shadow: 0 14px 30px -12px rgba(204, 31, 56, 0.6);
  transition: transform var(--dur-base) var(--ease-out),
              background-color var(--dur-fast) var(--ease-out),
              opacity var(--dur-slow) var(--ease-out),
              visibility 0s linear 0s;
}

/* Anel do pulso: expande e some em 60% do ciclo e descansa no resto. Um
   batimento a cada 2,8s chama o olhar sem virar ruído. */
.wa-fab::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  border-radius: 50%;
  background: var(--cta-color);
  opacity: 0;
  pointer-events: none;
  animation: fab-pulse 2.8s var(--ease-out) infinite;
}

@keyframes fab-pulse {
  0%   { transform: scale(1);    opacity: 0.4; }
  60%  { transform: scale(1.75); opacity: 0; }
  100% { transform: scale(1.75); opacity: 0; }
}

.wa-fab:hover {
  background: var(--cta-hover);
  transform: scale(1.06);
}

.wa-fab:active {
  transform: scale(0.96);
}

.wa-fab__icon {
  width: 1.625rem;
  height: 1.625rem;
}

/* Escondido enquanto o CTA da hero está à vista. `.js` vem do script
   inline do <head>, antes do primeiro paint: sem ele o botão apareceria e
   sumiria a cada carregamento. A visibilidade só vira `hidden` depois do
   fade, e aí o botão sai da ordem de tabulação. */
.js .wa-fab:not(.is-visible) {
  opacity: 0;
  visibility: hidden;
  transform: translateY(1rem) scale(0.9);
  pointer-events: none;
  transition: transform var(--dur-slow) var(--ease-out),
              opacity var(--dur-slow) var(--ease-out),
              visibility 0s linear var(--dur-slow);
}

.js .wa-fab:not(.is-visible)::before {
  animation-play-state: paused;
}

/* --------------------------------------------------------------------------
   13. SEQUÊNCIA DE ENTRADA (LOAD)
   Sem JS, tudo permanece visível. Com JS, a hero entra em cascata.
   -------------------------------------------------------------------------- */
.js .hero [data-anim] {
  opacity: 0;
}

.js .hero [data-anim="mask"] {
  opacity: 1;
  transform: translateY(110%);
}

.js.is-loaded .hero [data-anim] {
  animation-duration: 900ms;
  animation-timing-function: var(--ease-out);
  animation-fill-mode: both;
}

.js.is-loaded .hero [data-anim="fade"]  { animation-name: anim-fade; }
.js.is-loaded .hero [data-anim="rise"]  { animation-name: anim-rise; }
.js.is-loaded .hero [data-anim="scale"] { animation-name: anim-scale; }
.js.is-loaded .hero [data-anim="mask"]  { animation-name: anim-mask; }

@keyframes anim-fade  { from { opacity: 0; }                              to { opacity: 1; } }
@keyframes anim-rise  { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: none; } }
@keyframes anim-scale { from { opacity: 0; transform: scale(0.94); }      to { opacity: 1; transform: none; } }
@keyframes anim-mask  { from { transform: translateY(110%); }             to { transform: translateY(0); } }

/* Linha do tempo da entrada */
.js.is-loaded .hero__visual                        { animation-delay: 300ms; }
.js.is-loaded .hero__overline                      { animation-delay: 120ms; }
.js.is-loaded .hero__line:nth-child(1) .hero__line-in { animation-delay: 260ms; }
.js.is-loaded .hero__line:nth-child(2) .hero__line-in { animation-delay: 380ms; }
.js.is-loaded .hero__line:nth-child(3) .hero__line-in { animation-delay: 500ms; }
.js.is-loaded .hero__lead                          { animation-delay: 800ms; } /* 300ms após o título */
.js.is-loaded .hero__cta-wrap                      { animation-delay: 980ms; }
.js.is-loaded .hero__micro                         { animation-delay: 1120ms; }
.js.is-loaded .hero-badge--crn                     { animation-delay: 1080ms; }
.js.is-loaded .hero-badge--method                  { animation-delay: 1220ms; }
.js.is-loaded .hero__scroll                        { animation-delay: 1450ms; }

/* --------------------------------------------------------------------------
   14. REVEAL ON SCROLL — reservado para as próximas seções
   -------------------------------------------------------------------------- */
.js .reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 720ms var(--ease-out), transform 720ms var(--ease-out);
  transition-delay: var(--reveal-delay, 0ms);
}

.js .reveal.is-visible {
  opacity: 1;
  transform: none;
}

.js .reveal [data-reveal-child] {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity 720ms var(--ease-out), transform 720ms var(--ease-out);
  transition-delay: calc(var(--reveal-delay, 0ms) + (var(--stagger, 0) * 90ms));
}

.js .reveal.is-visible [data-reveal-child] {
  opacity: 1;
  transform: none;
}

/* --------------------------------------------------------------------------
   15. BREAKPOINTS — mobile-first
   -------------------------------------------------------------------------- */

/* Até 768px — navbar compacta para caber logo + CTA sem estourar a viewport */
@media (max-width: 47.99em) {
  .brand__name { font-size: 1.5rem; }

  .brand__tag {
    max-width: 9.5rem;
    font-size: 0.625rem;
    line-height: 1.4;
    letter-spacing: 0.16em;
    white-space: normal;
  }

  .btn--outline {
    padding: 0 var(--space-3);
    font-size: var(--text-xs);
  }

  /* Menos camadas desfocadas em telas pequenas */
  .aurora__orb--blush { display: none; }

  /* Seção 3: os painéis empilham e a expansão passa a ser por toque */
  .method__panels {
    flex-direction: column;
    height: auto;
    max-height: none;
  }

  .method__panel {
    flex: none;
    min-height: 8.5rem;
    transition: min-height 0.7s cubic-bezier(0.25, 1, 0.5, 1);
  }

  .method__panel:where(:hover, :focus-visible, .is-open) {
    flex: none;
    min-height: 15rem;
  }
}

/* 640px */
@media (min-width: 40em) {
  .hero__cta-wrap,
  .hero__cta-wrap .btn--cta {
    width: auto;
  }
}

/* 1024px — grade de 12 colunas com sobreposição real entre as colunas */
@media (min-width: 64em) {
  .hero {
    /* O padding inferior continua sendo a faixa reservada do indicador —
       trocá-lo aqui por um valor menor faria o blob invadir essa faixa
       em telas baixas (ex.: 1024x768). */
    padding-block: var(--space-5) var(--hero-scroll-space);
  }

  .hero__grid {
    grid-template-columns: repeat(12, 1fr);
    gap: 0;
    min-height: calc(100dvh - var(--header-h) - 8rem);
  }

  .hero__text   { grid-column: 1 / 8;  grid-row: 1; }
  .hero__visual { grid-column: 6 / 13; grid-row: 1; justify-content: flex-end; }

  /* Filete do overline avança sobre a margem, gesto editorial */
  .hero__overline-rule {
    width: 4.75rem;
    margin-left: -2rem;
  }

  .hero-stage {
    width: min(100%, 28rem);
    margin-top: 2.5rem;
  }

  /* A credencial cruza para dentro da coluna de texto: é a sobreposição
     que dá profundidade sem colocar tipografia sobre o retrato. */
  .hero-badge--crn    { left: -5rem; bottom: 12%; }
  .hero-badge--method { right: -1.75rem; top: 4%; }

  .hero-badge--crn .hero-badge__inner {
    padding: var(--space-2) var(--space-4);
  }

  .hero-badge__value { font-size: 1.1875rem; }

  /* Seção 2: duas colunas na proporção 40/60, com o título acompanhando
     a rolagem. `4fr 6fr` e não `40% 60%`: porcentagens somam 100% da largura
     e o gap seria adicionado por cima, jogando a coluna direita para fora
     do container. Com `fr` a proporção incide sobre o espaço já descontado. */
  .pains__grid {
    grid-template-columns: 4fr 6fr;
    gap: clamp(2.5rem, 5vw, 5rem);
  }

  .pains__aside {
    position: sticky;
    top: 20vh;
  }

  .pains__title {
    max-width: 22ch;
  }

  .pains__card-title { margin-bottom: var(--space-4); }

  /* Seção 6: duas metades de 50% em ziguezague. A linha da imagem tem
     altura fixa (42vh) e a do texto é `auto`, que estica para absorver o
     resto dos 100vh — e cresce além disso se o texto precisar. */
  .modes {
    grid-template-columns: 1fr 1fr;
  }

  .modes__col {
    min-height: 100vh;
    min-height: 100dvh;
    grid-template-rows: minmax(20rem, 42vh) auto;
  }

  .modes__col--online {
    grid-template-rows: auto minmax(20rem, 42vh);
  }

  .modes__media {
    height: auto;
  }

  /* Seção 8: cabeçalho em duas colunas e bento 7/5 */
  .blog__head {
    grid-template-columns: 7fr 5fr;
    align-items: end;
  }

  .blog__grid {
    grid-template-columns: repeat(12, 1fr);
    grid-auto-rows: auto;
  }

  .blog__post--feature {
    grid-column: 1 / 8;
    grid-row: 1 / 3;
  }

  .blog__post:not(.blog__post--feature) {
    grid-column: 8 / 13;
  }

  .blog__post:not(.blog__post--feature) .blog__link {
    grid-template-columns: minmax(9rem, 12rem) 1fr;
    align-items: start;
    gap: var(--space-4) var(--space-5);
  }

  .blog__post:not(.blog__post--feature) .blog__media {
    aspect-ratio: 1 / 1;
  }
}

/* 1280px */
@media (min-width: 80em) {
  .hero-stage { width: min(100%, 30rem); }
}

/* --------------------------------------------------------------------------
   16. ACESSIBILIDADE — movimento reduzido
   Tudo visível e parado; nenhuma informação depende de animação.
   -------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    animation-delay: 0ms !important;
    transition-duration: 0.01ms !important;
    transition-delay: 0ms !important;
  }

  .js .hero [data-anim],
  .js .hero [data-anim="mask"] {
    opacity: 1;
    transform: none;
  }

  .js .reveal,
  .js .reveal [data-reveal-child] {
    opacity: 1;
    transform: none;
  }

  .hero-blob,
  .hero-blob__glow,
  .hero-badge {
    transform: none;
  }

  .btn--cta {
    transform: none;
    box-shadow: 0 12px 30px -12px rgba(204, 31, 56, 0.55);
  }

  .btn--cta:hover { --s: 1; }

  .pains__card:hover { transform: none; }

  .method__title .char {
    opacity: 1 !important;
    transform: none !important;
    filter: none !important;
    will-change: auto;
  }

  .method__gl { display: none; }

  /* Seção 5: sem pin nem tilt, os cards empilham e ficam todos legíveis */
  .services__track {
    flex-direction: column;
    overflow: visible;
    scroll-snap-type: none;
  }

  .services__card {
    flex-basis: auto;
    width: 100%;
    max-width: 46rem;
    margin-inline: auto;
    height: auto;
    transform: none !important;
  }

  .services__card-body,
  .services__cta {
    transform: none !important;
  }

  /* Seções 7-8: sem flutuação do selo, sem zoom nas capas */
  .stories__badge { animation: none; }
  .blog__media img { transition: none; }
  .blog__link:hover .blog__media img { transform: none; }

  /* Seção 9: letreiros parados na posição inicial e painel sempre aberto */
  .sports__marquee-track {
    animation: none !important;
    transform: none !important;
  }

  .sports {
    clip-path: none !important;
  }

  /* Seção 10 e CTA flutuante: abre e fecha sem deslocamento, pulso desligado */
  .faq.is-ready .faq__answer {
    transform: none;
  }

  .wa-fab::before {
    animation: none;
  }
}
