/* =============================================================================
   Animations — all @keyframes live here. Never define keyframes elsewhere.
   ============================================================================= */

/* ── Keyframes ────────────────────────────────────────────────────────────── */

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(24px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes fadeInRight {
  from {
    opacity: 0;
    transform: translateX(24px);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

/* Slide 8 — Teknologia entrance */
@keyframes tekRootIn {
  from { opacity: 0; transform: translateX(-16px) scale(0.96); }
  to   { opacity: 1; transform: translateX(0) scale(1); }
}

@keyframes tekLaneIn {
  from { opacity: 0; transform: translateX(-32px); }
  to   { opacity: 1; transform: translateX(0); }
}

@keyframes tekLeafIn {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes tekLineDraw {
  from { stroke-dashoffset: var(--tek-line-length, 600); opacity: 0; }
  to   { stroke-dashoffset: 0; opacity: 0.9; }
}

@keyframes onnOrbit {
  from { transform: rotate(0deg); }
  to   { transform: rotate(360deg); }
}

@keyframes onnOrbitPulse {
  0%, 100% { opacity: 0.35; transform: scale(1); }
  50%      { opacity: 0.7;  transform: scale(1.35); }
}

@keyframes alkuAltZoom {
  from { transform: scale(1.12); }
  to   { transform: scale(1.02); }
}

/* ── Animation utilities ──────────────────────────────────────────────────── */

.anim-fade-in-up {
  animation: fadeInUp var(--animation-duration-standard) var(--animation-easing-ease-out) both;
}

.anim-fade-in {
  animation: fadeIn var(--animation-duration-standard) var(--animation-easing-ease-out) both;
}

/* ── Presentation slide transitions ──────────────────────────────────────── */

/* New slide entering from the right (forward navigation) */
@keyframes presEnterNext {
  from {
    opacity: 0;
    transform: translateX(var(--transition-slide-distance));
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* New slide entering from the left (backward navigation) */
@keyframes presEnterPrev {
  from {
    opacity: 0;
    transform: translateX(calc(var(--transition-slide-distance) * -1));
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* Old slide exiting to the left (forward navigation) */
@keyframes presExitNext {
  from {
    opacity: 1;
    transform: translateX(0);
  }
  to {
    opacity: 0;
    transform: translateX(calc(var(--transition-slide-distance) * -1));
  }
}

/* Old slide exiting to the right (backward navigation) */
@keyframes presExitPrev {
  from {
    opacity: 1;
    transform: translateX(0);
  }
  to {
    opacity: 0;
    transform: translateX(var(--transition-slide-distance));
  }
}

/* ── Reduced-motion overrides ─────────────────────────────────────────────── */

@media (prefers-reduced-motion: reduce) {
  .anim-fade-in-up,
  .anim-fade-in {
    animation: none;
  }

  /* Slide transitions fall back to a plain crossfade — no blur or movement */
  .pres-slide--enter-next,
  .pres-slide--enter-prev {
    animation: fadeIn var(--animation-duration-standard) var(--animation-easing-ease-out) both;
  }

  .pres-slide--exit-next,
  .pres-slide--exit-prev {
    animation: fadeIn var(--animation-duration-standard) var(--animation-easing-ease-out) reverse both;
  }

  /* Slide 6 orbit ball halts when reduced-motion is requested */
  .onn-circle__orbit,
  .onn-circle__orbit-glow {
    animation: none;
  }

  /* Slide 8 immersive Alku — disable zoom + reveal stagger */
  .alku-alt__bg,
  .pres-slide--active.pres-slide--alku-alt .alku-alt__eyebrow,
  .pres-slide--active.pres-slide--alku-alt .alku-alt__heading,
  .pres-slide--active.pres-slide--alku-alt .alku-alt__subtitle {
    animation: none;
  }

  /* Slide 2 stagger: skip movement, just instant appear */
  .pres-slide--active .pres-kilp-img,
  .pres-slide--active .pres-kilp-card {
    animation: none;
  }

  /* Slide 8 — disable entrance motion */
  .pres-slide--active.pres-slide--teknologia .tek-root,
  .pres-slide--active.pres-slide--teknologia .tek-row,
  .pres-slide--active.pres-slide--teknologia .tek-leaf,
  .pres-slide--active.pres-slide--teknologia .tek-flow__line {
    animation: none;
  }
}

/* Slide 4 Erottuminen — Jussi review pulsing halo */
@keyframes erotReviewGlow {
  0%, 100% { opacity: 0.55; transform: scale(1); }
  50%      { opacity: 0.95; transform: scale(1.04); }
}


/* Slide 4 Maksaminen — slide-to-confirm thumb nudge */
@keyframes mpThumbNudge {
  0%, 100% { transform: translateX(0); }
  50%      { transform: translateX(6px); }
}

/* Slide 9 Onnistuminen v2 — orbiting ball around the centre ring */
@keyframes onn2Orbit {
  to { transform: rotate(360deg); }
}
