/* ============================================================
   AAROHA ESTATE — Animations (keyframes + reveal system)
   ============================================================ */

@keyframes heroZoom {
  from { transform: scale(1.02); }
  to   { transform: scale(1.12) translateY(-1.2%); }
}

@keyframes dotFill {
  from { transform: scaleX(0); transform-origin: left; }
  to   { transform: scaleX(1); transform-origin: left; }
}

@keyframes cueDrop {
  0%   { transform: scaleY(0); transform-origin: top; }
  45%  { transform: scaleY(1); transform-origin: top; }
  55%  { transform: scaleY(1); transform-origin: bottom; }
  100% { transform: scaleY(0); transform-origin: bottom; }
}

@keyframes floatY {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-16px); }
}

@keyframes blobDrift {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33%      { transform: translate(4%, -6%) scale(1.08); }
  66%      { transform: translate(-5%, 4%) scale(.95); }
}

@keyframes spin { to { transform: rotate(360deg); } }
@keyframes spinSlow { to { transform: rotate(360deg); } }

@keyframes ripple {
  to { transform: scale(4); opacity: 0; }
}

@keyframes fadeUp {
  from { opacity: 0; transform: translateY(14px); }
  to   { opacity: 1; transform: none; }
}

@keyframes shimmerGold {
  0%   { background-position: 0% 50%; }
  50%  { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

@keyframes nudgeX {
  0%, 100% { transform: translateX(0); }
  50%      { transform: translateX(6px); }
}

@keyframes pulseRing {
  0%   { box-shadow: 0 0 0 0 rgba(198,161,91,.45); }
  100% { box-shadow: 0 0 0 16px rgba(198,161,91,0); }
}

/* Animated gradient text */
.shimmer-text {
  background: linear-gradient(100deg, #c6a15b 20%, #f6ead2 40%, #c6a15b 60%);
  background-size: 220% auto;
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
  animation: shimmerGold 5s ease-in-out infinite;
}

/* Blobs drift */
.blob { animation: blobDrift 16s ease-in-out infinite; }
.blob-b { animation-duration: 20s; animation-direction: reverse; }
.blob-c { animation-duration: 24s; animation-delay: -8s; }

/* ---------- Reveal-on-scroll system ----------
   JS (animation.js) adds .is-visible via IntersectionObserver. */
[data-reveal] {
  opacity: 0;
  transform: translateY(34px);
  transition: opacity .9s var(--ease-lux), transform .9s var(--ease-lux);
  transition-delay: var(--reveal-delay, 0s);
  will-change: opacity, transform;
}
[data-reveal="left"]  { transform: translateX(-44px); }
[data-reveal="right"] { transform: translateX(44px); }
[data-reveal="zoom"]  { transform: scale(.88); }
[data-reveal="fade"]  { transform: none; }
[data-reveal="flip"]  { transform: perspective(900px) rotateX(9deg) translateY(24px); }
[data-reveal].is-visible { opacity: 1; transform: none; }

/* JS-disabled / reduced-motion failsafe */
.no-js [data-reveal],
.reduced-motion [data-reveal] { opacity: 1; transform: none; transition: none; }

/* Card tilt base (JS enhanced) */
.tilt { transform-style: preserve-3d; transition: transform .35s var(--ease-out); will-change: transform; }
.tilt > * { transform-style: preserve-3d; }

/* Global reduced motion */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
    scroll-behavior: auto !important;
  }
  [data-reveal] { opacity: 1 !important; transform: none !important; }
}
