/* ==========================================================================
   Keyframes, marquee, nucleus, reveal on scroll e entradas expressivas
   ========================================================================== */

/* Marquee horizontal (ticker + diferencial) */
@keyframes vorva-marquee {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
.vorva-marquee {
  animation: vorva-marquee 28s linear infinite;
}
/* Pausa o marquee sob o cursor — legibilidade */
.ticker:hover .vorva-marquee,
.differential-marquee:hover .vorva-marquee {
  animation-play-state: paused;
}

/* Nucleus */
@keyframes vorva-spin {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}
@keyframes vorva-spin-rev {
  from { transform: rotate(0deg); }
  to   { transform: rotate(-360deg); }
}
@keyframes vorva-float {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-8px); }
}
@keyframes vorva-pulse {
  0%, 100% { opacity: 0.4; }
  50%      { opacity: 1; }
}
@keyframes earth-rotate {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(-50%, 0, 0); }
}

.nucleus-ring      { animation: vorva-spin 28s linear infinite; transform-origin: center; }
.nucleus-ring-rev  { animation: vorva-spin-rev 38s linear infinite; transform-origin: center; }
.nucleus-ring-slow { animation: vorva-spin 60s linear infinite; transform-origin: center; }
.nucleus-float     { animation: vorva-float 6s ease-in-out infinite; }
.nucleus-pulse     { animation: vorva-pulse 3s ease-in-out infinite; }
.earth-scene       { animation: vorva-float 7s ease-in-out infinite; }
.earth-map         { animation: earth-rotate 38s linear infinite; }
.earth-clouds      { animation: earth-rotate 56s linear infinite reverse; }

/* Barra de fluxo (seção automação) */
@keyframes vorva-flow {
  from { transform: translateX(-100%); }
  to   { transform: translateX(400%); }
}

@keyframes ba-fragment-drift {
  0%, 100% { transform: translateY(0) rotate(-0.4deg); }
  50%      { transform: translateY(-6px) rotate(0.4deg); }
}

@keyframes ba-flow-scan {
  from { background-position: 200% 0; }
  to   { background-position: -200% 0; }
}

@keyframes ba-node-pulse {
  0%, 100% {
    border-color: rgba(255, 255, 255, 0.14);
    transform: translateY(0);
  }
  50% {
    border-color: oklch(0.71 0.19 45 / 0.65);
    transform: translateY(-4px);
  }
}

@keyframes ba-handle-pulse {
  0%   { opacity: 0.9; transform: scale(0.88); }
  70%  { opacity: 0; transform: scale(1.42); }
  100% { opacity: 0; transform: scale(1.42); }
}

/* ---------- Entradas de página ---------- */
@keyframes header-in {
  from { opacity: 0; transform: translateY(-14px); }
  to   { opacity: 1; transform: translateY(0); }
}
@keyframes hero-underline {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}
@keyframes fade-slide-in {
  from { opacity: 0; transform: translateY(10px); }
  to   { opacity: 1; transform: translateY(0); }
}

/* ---------- Reveal on scroll ---------- */
.reveal {
  opacity: 0;
  transform: translateY(32px);
  transition: opacity 0.65s var(--ease-out), transform 0.65s var(--ease-out);
}
.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* Blocos de copy: o container só controla opacidade e os filhos
   entram em cascata (stagger) — mais expressivo que o bloco inteiro. */
.hero-copy.reveal,
.differential-copy.reveal,
.about-copy.reveal,
.diagnostic-copy.reveal,
.final-cta-copy.reveal {
  transform: none;
  transition: opacity 0.5s var(--ease-out);
}
.hero-copy.reveal > *,
.differential-copy.reveal > *,
.about-copy.reveal > *,
.diagnostic-copy.reveal > *,
.final-cta-copy.reveal > * {
  opacity: 0;
  transform: translateY(26px);
  transition: opacity 0.6s var(--ease-out), transform 0.6s var(--ease-out);
}
.hero-copy.reveal.is-visible > *,
.differential-copy.reveal.is-visible > *,
.about-copy.reveal.is-visible > *,
.diagnostic-copy.reveal.is-visible > *,
.final-cta-copy.reveal.is-visible > * {
  opacity: 1;
  transform: translateY(0);
}
.hero-copy.reveal.is-visible > :nth-child(2),
.differential-copy.reveal.is-visible > :nth-child(2),
.about-copy.reveal.is-visible > :nth-child(2),
.diagnostic-copy.reveal.is-visible > :nth-child(2),
.final-cta-copy.reveal.is-visible > :nth-child(2) { transition-delay: 90ms; }
.hero-copy.reveal.is-visible > :nth-child(3),
.differential-copy.reveal.is-visible > :nth-child(3),
.about-copy.reveal.is-visible > :nth-child(3),
.diagnostic-copy.reveal.is-visible > :nth-child(3),
.final-cta-copy.reveal.is-visible > :nth-child(3) { transition-delay: 180ms; }
.hero-copy.reveal.is-visible > :nth-child(4),
.diagnostic-copy.reveal.is-visible > :nth-child(4),
.final-cta-copy.reveal.is-visible > :nth-child(4) { transition-delay: 270ms; }
.hero-copy.reveal.is-visible > :nth-child(5),
.final-cta-copy.reveal.is-visible > :nth-child(5) { transition-delay: 360ms; }

/* Visual do hero (planeta): entra com leve zoom */
.hero-visual.reveal {
  transform: translateY(28px) scale(0.95);
}
.hero-visual.reveal.is-visible {
  transform: translateY(0) scale(1);
  transition-delay: 150ms;
}

/* Pontos da timeline: pop com leve overshoot quando o item revela */
.timeline-item.reveal .timeline-dot {
  transform: translateX(-50%) scale(0);
  transition: transform 0.55s var(--ease-spring) 0.25s;
}
.timeline-item.reveal.is-visible .timeline-dot {
  transform: translateX(-50%) scale(1);
}

/* ---------- Movimento reduzido ---------- */
@media (prefers-reduced-motion: reduce) {
  .nucleus-ring,
  .nucleus-ring-rev,
  .nucleus-ring-slow,
  .nucleus-float,
  .nucleus-pulse,
  .earth-scene,
  .earth-map,
  .earth-clouds,
  .vorva-marquee,
  .flow-pulse {
    animation: none !important;
  }
  .ba-fragment,
  .ba-flow-line,
  .ba-node,
  .ba-handle::before {
    animation: none !important;
  }
  .site-header,
  .hero-highlight::after,
  .faq-item[open] .faq-answer {
    animation: none !important;
  }
  .hero-highlight::after { transform: scaleX(1); }
  .reveal,
  .hero-copy.reveal > *,
  .differential-copy.reveal > *,
  .about-copy.reveal > *,
  .diagnostic-copy.reveal > *,
  .final-cta-copy.reveal > *,
  .hero-visual.reveal {
    opacity: 1;
    transform: none;
    transition: none;
  }
  .timeline-item.reveal .timeline-dot {
    transform: translateX(-50%) scale(1);
    transition: none;
  }
  .reveal .eyebrow::before,
  .eyebrow.reveal::before { width: 1.5rem; transition: none; }
  .btn,
  .btn .arrow,
  .nav-desktop a::after,
  .footer-col a,
  .mobile-menu-inner > a:not(.btn),
  .project-card,
  .project-mark,
  .flow-node,
  .service-item,
  .service-plus {
    transition: none !important;
  }
  .btn:hover,
  .btn:active,
  article.project-card:hover,
  .flow-node:hover,
  .footer-col a:hover {
    transform: none;
  }
  html { scroll-behavior: auto; }
}
