/* ==========================================================================
   DHARMIKAM — ANIMATIONS
   Scroll-reveal states, reveal delay utilities and keyframes.
   ========================================================================== */

/* ==========================================================================
   18. SCROLL REVEAL
   ========================================================================== */
[data-reveal]{
  opacity:0;
  transform:translateY(30px);
  transition:opacity .95s var(--ease-out),transform .95s var(--ease-out);
  will-change:opacity,transform;
}
[data-reveal="left"]{transform:translateX(-38px)}
[data-reveal="right"]{transform:translateX(38px)}
[data-reveal="scale"]{transform:scale(.93)}
[data-reveal].is-revealed{opacity:1;transform:none;will-change:auto}

/* Stagger utilities — applied alongside [data-reveal] so neighbouring items in
   a grid settle one after another. Extracted from inline style attributes;
   the compound selector keeps them ahead of the [data-reveal] shorthand. */
[data-reveal].rv-delay-05{transition-delay:.05s}
[data-reveal].rv-delay-10{transition-delay:.1s}
[data-reveal].rv-delay-12{transition-delay:.12s}
[data-reveal].rv-delay-19{transition-delay:.19s}
[data-reveal].rv-delay-26{transition-delay:.26s}

/* ==========================================================================
   19. KEYFRAMES
   ========================================================================== */
@keyframes morph{
  0%,100%{border-radius:58% 42% 47% 53%/44% 40% 60% 56%}
  33%{border-radius:44% 56% 62% 38%/56% 48% 52% 44%}
  66%{border-radius:52% 48% 38% 62%/40% 58% 42% 60%}
}
@keyframes morph2{
  0%,100%{border-radius:42% 58% 63% 37%/52% 46% 54% 48%}
  50%{border-radius:60% 40% 42% 58%/44% 62% 38% 56%}
}
@keyframes floatSlow{
  0%,100%{transform:translateY(0)}
  50%{transform:translateY(-16px)}
}
@keyframes floatY{
  0%,100%{transform:translateY(0)}
  50%{transform:translateY(-14px)}
}
@keyframes floatX{
  0%,100%{transform:translate(0,0)}
  50%{transform:translate(-12px,10px)}
}
@keyframes spinFloat{
  0%{transform:rotate(0deg) translateY(0)}
  50%{transform:rotate(180deg) translateY(-12px)}
  100%{transform:rotate(360deg) translateY(0)}
}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes driftA{
  0%,100%{transform:translate(0,0) scale(1)}
  50%{transform:translate(-42px,38px) scale(1.09)}
}
@keyframes driftB{
  0%,100%{transform:translate(0,0) scale(1)}
  50%{transform:translate(44px,-34px) scale(1.12)}
}
@keyframes pulseGlow{
  0%,100%{opacity:.32;transform:scale(1)}
  50%{opacity:.6;transform:scale(1.14)}
}
@keyframes pulseSoft{
  0%,100%{opacity:.75;transform:scale(1)}
  50%{opacity:1;transform:scale(1.07)}
}
@keyframes driftUp{
  0%{transform:translateY(24px) translateX(0);opacity:0}
  12%{opacity:.75}
  80%{opacity:.55}
  100%{transform:translateY(-190px) translateX(30px);opacity:0}
}
@keyframes shine{
  0%{transform:translateX(-130%)}
  100%{transform:translateX(130%)}
}
@keyframes bobDown{
  0%,100%{transform:translateY(0);opacity:.7}
  50%{transform:translateY(7px);opacity:1}
}
@keyframes drawSwash{to{stroke-dashoffset:0}}

/* Entry animations for above-the-fold hero content */
.anim-in{opacity:0;animation:fadeUp .95s var(--ease-out) forwards}
.d-1{animation-delay:.1s}
.d-2{animation-delay:.24s}
.d-3{animation-delay:.38s}
.d-4{animation-delay:.52s}
.d-5{animation-delay:.66s}
.d-6{animation-delay:.8s}
@keyframes fadeUp{
  from{opacity:0;transform:translateY(26px)}
  to{opacity:1;transform:none}
}
.anim-scale{opacity:0;animation:scaleIn 1.15s var(--ease-out) .3s forwards}
@keyframes scaleIn{
  from{opacity:0;transform:scale(.9)}
  to{opacity:1;transform:none}
}
