/* =============================================================
   Motion · reveal, parallax, tilt, transições de página
   Só transform e opacity são animados. Respeita prefers-reduced-motion.
   ============================================================= */
.reveal { opacity: 0; transform: translateY(var(--reveal-distance)); transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out); transition-delay: var(--reveal-delay, 0ms); will-change: opacity, transform; }
.reveal.is-visible { opacity: 1; transform: none; }
.reveal--left { transform: translateX(calc(var(--reveal-distance) * -1)); }
.reveal--right { transform: translateX(var(--reveal-distance)); }
.reveal--scale { transform: scale(0.96) translateY(var(--reveal-distance)); }
.reveal--depth { transform: perspective(var(--perspective)) rotateX(8deg) translateY(var(--reveal-distance)); transform-origin: top center; }
.reveal-group > * { opacity: 0; transform: translateY(var(--reveal-distance)); transition: opacity var(--dur-slow) var(--ease-out), transform var(--dur-slow) var(--ease-out); }
.reveal-group.is-visible > * { opacity: 1; transform: none; }
.reveal-group.is-visible > :nth-child(1) { transition-delay: 0ms; }
.reveal-group.is-visible > :nth-child(2) { transition-delay: calc(var(--reveal-stagger) * 1); }
.reveal-group.is-visible > :nth-child(3) { transition-delay: calc(var(--reveal-stagger) * 2); }
.reveal-group.is-visible > :nth-child(4) { transition-delay: calc(var(--reveal-stagger) * 3); }
.reveal-group.is-visible > :nth-child(5) { transition-delay: calc(var(--reveal-stagger) * 4); }
.reveal-group.is-visible > :nth-child(6) { transition-delay: calc(var(--reveal-stagger) * 5); }
.reveal-group.is-visible > :nth-child(7) { transition-delay: calc(var(--reveal-stagger) * 6); }
.reveal-group.is-visible > :nth-child(8) { transition-delay: calc(var(--reveal-stagger) * 7); }
.reveal-group.is-visible > :nth-child(n+9) { transition-delay: calc(var(--reveal-stagger) * 8); }
.no-js .reveal, .no-js .reveal-group > * { opacity: 1; transform: none; }

/* Parallax em camadas (hero) */
.parallax { position: relative; overflow: hidden; }
.parallax__layer { position: absolute; inset: -12% 0; will-change: transform; transform: translate3d(0, calc(var(--py, 0) * var(--parallax-depth, 0.3) * 1px), 0); }
.parallax__layer--bg { z-index: 0; --parallax-depth: 0.35; }
.parallax__layer--shape { z-index: 1; --parallax-depth: 0.15; pointer-events: none; }
.parallax__content { position: relative; z-index: 2; }

/* Tilt 3D em cards (JS aplica --rx/--ry) */
.tilt { transform: perspective(var(--perspective)) rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg)) translateY(var(--ty, 0)); transition: transform var(--dur-base) var(--ease-out), box-shadow var(--dur-base) var(--ease-out); }
.tilt.is-tilting { transition: transform 80ms linear, box-shadow var(--dur-base) var(--ease-out); }
.benefit.tilt:hover, .card--cta.tilt:hover { transform: perspective(var(--perspective)) rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg)) translateY(calc(var(--lift) * -1)); box-shadow: var(--shadow-lg); }
.card.tilt:hover { transform: perspective(var(--perspective)) rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg)) translateY(calc(var(--lift) * -1)); }

/* Contadores */
.count { font-variant-numeric: tabular-nums; }

/* Transição entre páginas */
@view-transition { navigation: auto; }
::view-transition-old(root) { animation: 260ms var(--ease-out) both vt-out; }
::view-transition-new(root) { animation: 420ms var(--ease-out) both vt-in; }
@keyframes vt-out { to { opacity: 0; transform: translateY(-6px); } }
@keyframes vt-in { from { opacity: 0; transform: translateY(10px); } }
::view-transition-old(header), ::view-transition-new(header) { animation: none; }
.site-header { view-transition-name: header; }
/* Fallback CSS quando a View Transitions API não existe */
.page-enter { animation: page-in var(--dur-base) var(--ease-out) both; }
@keyframes page-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
body.is-leaving main { opacity: 0; transform: translateY(-6px); transition: opacity 220ms var(--ease-out), transform 220ms var(--ease-out); }

/* Menu com profundidade */
.nav__sub { transform-origin: top center; transform: perspective(var(--perspective)) rotateX(-8deg) translateY(-6px); opacity: 0; visibility: hidden; transition: transform var(--dur-base) var(--ease-out), opacity var(--dur-base) var(--ease-out), visibility 0s linear var(--dur-base); }
.nav__item:hover > .nav__sub, .nav__item:focus-within > .nav__sub, .nav__item.is-open > .nav__sub { transform: none; opacity: 1; visibility: visible; transition-delay: 0s; }

/* Linha da timeline que se desenha */
.timeline.is-visible .timeline__line { height: 100%; }

/* Logos em cascata */
.sponsors.reveal-group > * { transform: translateY(12px) scale(0.98); }

/* Hero: cascata do texto */
.hero__stack > * { opacity: 0; transform: translateY(18px); animation: hero-in var(--dur-slow) var(--ease-out) forwards; }
.hero__stack > :nth-child(1) { animation-delay: 80ms; }
.hero__stack > :nth-child(2) { animation-delay: 200ms; }
.hero__stack > :nth-child(3) { animation-delay: 320ms; }
.hero__stack > :nth-child(4) { animation-delay: 440ms; }
.hero__stack > :nth-child(5) { animation-delay: 560ms; }
@keyframes hero-in { to { opacity: 1; transform: none; } }

/* Área funcional: sem movimento */
.no-motion .reveal, .no-motion .reveal-group > * { opacity: 1 !important; transform: none !important; transition: none !important; }
.no-motion .card:hover { transform: none; box-shadow: var(--shadow-sm); }
.no-motion .card__media img, .no-motion .card:hover .card__media img { transform: none; }

@media (prefers-reduced-motion: reduce) {
  .reveal, .reveal-group > * { transition-duration: 200ms; transform: none; }
  .parallax__layer { transform: none !important; }
  .tilt, .card.tilt:hover { transform: none !important; }
  .hero__stack > * { animation-duration: 200ms; transform: none; }
  ::view-transition-old(root), ::view-transition-new(root) { animation-duration: 120ms; }
  .accordion__panel { transition: none; }
  .badge--live::before { animation: none; }
}
