/* ============================================
   NOVEXA AI — Animations
   ============================================ */

@keyframes floatY{
  0%,100%{ transform:translateY(0); }
  50%{ transform:translateY(-14px); }
}
@keyframes spin-slow{
  from{ transform:rotate(0deg); }
  to{ transform:rotate(360deg); }
}
@keyframes fadeUp{
  from{ opacity:0; transform:translateY(24px); }
  to{ opacity:1; transform:translateY(0); }
}
@keyframes pulseGlow{
  0%,100%{ opacity:.55; }
  50%{ opacity:1; }
}

.novy-orbit img{ animation:floatY 5s ease-in-out infinite; }
.orbit-ring{ animation:spin-slow 40s linear infinite; }
.novy-glow{ animation:pulseGlow 4s ease-in-out infinite; }

.orbit-chip.chip-1{ animation:floatY 4s ease-in-out infinite; animation-delay:.2s; }
.orbit-chip.chip-2{ animation:floatY 4.5s ease-in-out infinite; animation-delay:.6s; }
.orbit-chip.chip-3{ animation:floatY 5s ease-in-out infinite; animation-delay:1s; }

/* Scroll reveal — toggled by effects.js via IntersectionObserver */
.reveal{
  opacity:0;
  transform:translateY(28px);
  transition:opacity .7s cubic-bezier(.2,.8,.2,1), transform .7s cubic-bezier(.2,.8,.2,1);
}
.reveal.in-view{ opacity:1; transform:translateY(0); }
.reveal-stagger .reveal:nth-child(1){ transition-delay:.05s; }
.reveal-stagger .reveal:nth-child(2){ transition-delay:.15s; }
.reveal-stagger .reveal:nth-child(3){ transition-delay:.25s; }
.reveal-stagger .reveal:nth-child(4){ transition-delay:.35s; }
.reveal-stagger .reveal:nth-child(5){ transition-delay:.45s; }
.reveal-stagger .reveal:nth-child(6){ transition-delay:.55s; }

@media (prefers-reduced-motion: reduce){
  .novy-orbit img, .orbit-ring, .novy-glow, .orbit-chip{ animation:none !important; }
  .reveal{ opacity:1; transform:none; transition:none; }
}
