/* ===================================================================
   Animations — soft scroll reveals + premium micro interactions
   =================================================================== */

@keyframes loaderSpin {
  0% {
    transform: rotate(0deg) scale(1);
    border-radius: 28% 72% 62% 38% / 42% 34% 66% 58%;
  }
  50% {
    transform: rotate(180deg) scale(1.08);
    border-radius: 62% 38% 30% 70% / 60% 40% 62% 38%;
  }
  100% {
    transform: rotate(360deg) scale(1);
    border-radius: 28% 72% 62% 38% / 42% 34% 66% 58%;
  }
}

@keyframes floatSoft {
  0%,
  100% {
    transform: translateY(0) rotateZ(0deg);
  }
  50% {
    transform: translateY(-14px) rotateZ(1.2deg);
  }
}

@keyframes floatSoftReverse {
  0%,
  100% {
    transform: translateY(0) rotateZ(0deg);
  }
  50% {
    transform: translateY(12px) rotateZ(-1deg);
  }
}

@keyframes pulseGlow {
  0%,
  100% {
    box-shadow: 0 0 0 0 var(--c-accent-soft);
  }
  50% {
    box-shadow: 0 0 0 14px transparent;
  }
}



.floaty {
  animation: floatSoft 7s var(--ease-glass) infinite;
}
.floaty--reverse {
  animation: floatSoftReverse 8s var(--ease-glass) infinite;
}
.floaty--slow {
  animation: floatSoft 11s var(--ease-glass) infinite;
}

/* Scroll reveal utility: toggled by IntersectionObserver in main.js */
[data-reveal] {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 0.8s var(--ease-glass), transform 0.8s var(--ease-glass);
  transition-delay: var(--reveal-delay, 0ms);
}
[data-reveal].is-visible {
  opacity: 1;
  transform: translateY(0);
}
[data-reveal="scale"] {
  transform: translateY(20px) scale(0.94);
}
[data-reveal="scale"].is-visible {
  transform: translateY(0) scale(1);
}
[data-reveal="right"] {
  transform: translateX(36px);
}
[data-reveal="right"].is-visible {
  transform: translateX(0);
}
[data-reveal="left"] {
  transform: translateX(-36px);
}
[data-reveal="left"].is-visible {
  transform: translateX(0);
}
