/* Animações de entrada (scroll-reveal) — Nutricamp
   Estado inicial só é aplicado quando html.rv está presente (definido por
   um script inline no <head> apenas se o usuário não pediu "reduzir movimento").
   reveal.js adiciona .in quando o elemento entra na viewport. */
@media (prefers-reduced-motion: no-preference){
  html.rv .page-a .hero-text>*,
  html.rv .page-a .hero-media,
  html.rv .page-a .trust-grid>*,
  html.rv .page-a .diff-head>*,
  html.rv .page-a .diff-grid>.tile,
  html.rv .page-a .faq-head>*,
  html.rv .page-a .faq-list>.faq-item,
  html.rv .page-a .ftr-cta>*,
  html.rv .page-a .qs-hero>.wrap>*,
  html.rv .page-a .story-grid>*,
  html.rv .page-a .rebrand-head,
  html.rv .page-a .rebrand-grid>*,
  html.rv .page-a .qs-values>.wrap>*,
  html.rv .page-a .qs-close>.wrap>*,
  html.rv .page-a .dp-hero>.wrap>*,
  html.rv .page-a .sp-grid>.sp-card,
  html.rv .page-a .cta-inner>*,
  html.rv .page-a .ct-hero>.wrap>*,
  html.rv .page-a .ct-grid>*,
  html.rv .page-a .ct-map{
    opacity:0;
    transform:translateY(24px);
    transition:opacity .7s cubic-bezier(.2,.7,.3,1),transform .7s cubic-bezier(.2,.7,.3,1);
    will-change:opacity,transform;
  }
  html.rv .page-a .hero-text>*.in,
  html.rv .page-a .hero-media.in,
  html.rv .page-a .trust-grid>*.in,
  html.rv .page-a .diff-head>*.in,
  html.rv .page-a .diff-grid>.tile.in,
  html.rv .page-a .faq-head>*.in,
  html.rv .page-a .faq-list>.faq-item.in,
  html.rv .page-a .ftr-cta>*.in,
  html.rv .page-a .qs-hero>.wrap>*.in,
  html.rv .page-a .story-grid>*.in,
  html.rv .page-a .rebrand-head.in,
  html.rv .page-a .rebrand-grid>*.in,
  html.rv .page-a .qs-values>.wrap>*.in,
  html.rv .page-a .qs-close>.wrap>*.in,
  html.rv .page-a .dp-hero>.wrap>*.in,
  html.rv .page-a .sp-grid>.sp-card.in,
  html.rv .page-a .cta-inner>*.in,
  html.rv .page-a .ct-hero>.wrap>*.in,
  html.rv .page-a .ct-grid>*.in,
  html.rv .page-a .ct-map.in{
    opacity:1;
    transform:none;
  }
}
