/* =====================================================================
   ANIMATION SYSTEM
   Reveal-on-scroll ditenagai GSAP + ScrollTrigger (lihat js/core/reveal.js).
   File ini cuma nyimpen state awal (elemen mulai tersembunyi sebelum
   GSAP ambil alih) dan animasi kecil yang cukup pakai CSS murni.
   ===================================================================== */

@keyframes popScale{
  from{ opacity: 0; transform: scale(.96) translateY(6px); }
  to{ opacity: 1; transform: scale(1) translateY(0); }
}
@keyframes toastUp{
  from{ opacity: 0; transform: translate(-50%, 8px); }
  to{ opacity: 1; transform: translate(-50%, 0); }
}

/* state awal sebelum GSAP reveal.js jalan -- dicegah nge-flash konten
   sebelum animasinya sempat kepasang */
[data-reveal],
.section,
.cards,
.login-card,
.dz25-lock-card{
  opacity: 0;
  transform: translateY(16px);
}

.modal-bg.open .modal-box{ animation: popScale var(--dur-med) var(--ease-out); }
.toast.show{ animation: toastUp var(--dur-fast) var(--ease-out); }

@media (prefers-reduced-motion: reduce){
  [data-reveal], .section, .cards, .login-card, .dz25-lock-card{ opacity: 1; transform: none; }
  .modal-bg.open .modal-box, .toast.show{ animation: none; }
  *{ transition-duration: .001ms !important; }
}
