/* pages.css — page-specific animation keyframes and scroll-reveal utilities */

/* ─── Keyframes ─────────────────────────────────────────────────────────── */

@keyframes revealUp {
  from { opacity: 0; transform: translateY(40px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeIn {
  from { opacity: 0; }
  to   { opacity: 1; }
}

@keyframes fadeInUp {
  from { opacity: 0; transform: translateY(24px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes fadeInLeft {
  from { opacity: 0; transform: translateX(-24px); }
  to   { opacity: 1; transform: translateX(0); }
}

@keyframes fadeInRight {
  from { opacity: 0; transform: translateX(24px); }
  to   { opacity: 1; transform: translateX(0); }
}

@keyframes scaleIn {
  from { opacity: 0; transform: scale(0.94); }
  to   { opacity: 1; transform: scale(1); }
}

@keyframes reveal {
  from { clip-path: inset(0 100% 0 0); }
  to   { clip-path: inset(0 0% 0 0); }
}

@keyframes lineGrow {
  from { transform: scaleX(0); }
  to   { transform: scaleX(1); }
}

/* ─── Scroll-reveal utility ─────────────────────────────────────────────── */

.reveal-on-scroll {
  opacity: 0;
  transform: translateY(32px);
  transition: opacity 0.75s cubic-bezier(0.4, 0, 0.2, 1),
              transform 0.75s cubic-bezier(0.4, 0, 0.2, 1);
}

.reveal-on-scroll.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* Variants — direction */
.reveal-from-left {
  opacity: 0;
  transform: translateX(-32px);
  transition: opacity 0.75s cubic-bezier(0.4, 0, 0.2, 1),
              transform 0.75s cubic-bezier(0.4, 0, 0.2, 1);
}
.reveal-from-left.is-visible {
  opacity: 1;
  transform: translateX(0);
}

.reveal-from-right {
  opacity: 0;
  transform: translateX(32px);
  transition: opacity 0.75s cubic-bezier(0.4, 0, 0.2, 1),
              transform 0.75s cubic-bezier(0.4, 0, 0.2, 1);
}
.reveal-from-right.is-visible {
  opacity: 1;
  transform: translateX(0);
}

.reveal-scale {
  opacity: 0;
  transform: scale(0.95);
  transition: opacity 0.7s cubic-bezier(0.4, 0, 0.2, 1),
              transform 0.7s cubic-bezier(0.4, 0, 0.2, 1);
}
.reveal-scale.is-visible {
  opacity: 1;
  transform: scale(1);
}

/* Stagger delay helpers (applied via data-delay or inline style) */
.reveal-on-scroll[data-delay="1"],
.reveal-from-left[data-delay="1"],
.reveal-from-right[data-delay="1"],
.reveal-scale[data-delay="1"] { transition-delay: 0.1s; }

.reveal-on-scroll[data-delay="2"],
.reveal-from-left[data-delay="2"],
.reveal-from-right[data-delay="2"],
.reveal-scale[data-delay="2"] { transition-delay: 0.2s; }

.reveal-on-scroll[data-delay="3"],
.reveal-from-left[data-delay="3"],
.reveal-from-right[data-delay="3"],
.reveal-scale[data-delay="3"] { transition-delay: 0.3s; }

.reveal-on-scroll[data-delay="4"],
.reveal-from-left[data-delay="4"],
.reveal-from-right[data-delay="4"],
.reveal-scale[data-delay="4"] { transition-delay: 0.4s; }

.reveal-on-scroll[data-delay="5"],
.reveal-from-left[data-delay="5"],
.reveal-from-right[data-delay="5"],
.reveal-scale[data-delay="5"] { transition-delay: 0.5s; }

.reveal-on-scroll[data-delay="6"],
.reveal-from-left[data-delay="6"],
.reveal-from-right[data-delay="6"],
.reveal-scale[data-delay="6"] { transition-delay: 0.6s; }

/* ─── Page entry animations ──────────────────────────────────────────────── */

/* Hero content staggered entrance */
.hero-enter-1 {
  opacity: 0;
  transform: translateY(20px);
  animation: fadeInUp 0.85s cubic-bezier(0.4, 0, 0.2, 1) 0.1s forwards;
}
.hero-enter-2 {
  opacity: 0;
  transform: translateY(20px);
  animation: fadeInUp 0.85s cubic-bezier(0.4, 0, 0.2, 1) 0.25s forwards;
}
.hero-enter-3 {
  opacity: 0;
  transform: translateY(20px);
  animation: fadeInUp 0.85s cubic-bezier(0.4, 0, 0.2, 1) 0.4s forwards;
}
.hero-enter-4 {
  opacity: 0;
  transform: translateY(20px);
  animation: fadeInUp 0.85s cubic-bezier(0.4, 0, 0.2, 1) 0.55s forwards;
}

/* ─── Animation utility classes ─────────────────────────────────────────── */

.fade-in-up {
  animation: fadeInUp 0.8s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}

.fade-in {
  animation: fadeIn 0.6s ease forwards;
}

.reveal-image {
  animation: reveal 1s cubic-bezier(0.77, 0, 0.175, 1) forwards;
}

.scale-in {
  animation: scaleIn 0.7s cubic-bezier(0.4, 0, 0.2, 1) forwards;
}

/* ─── Reduced motion ─────────────────────────────────────────────────────── */

@media (prefers-reduced-motion: reduce) {
  .reveal-on-scroll,
  .reveal-from-left,
  .reveal-from-right,
  .reveal-scale,
  .hero-enter-1,
  .hero-enter-2,
  .hero-enter-3,
  .hero-enter-4,
  .fade-in-up,
  .fade-in,
  .reveal-image,
  .scale-in {
    animation: none !important;
    transition: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
}
