/* =========================================================
   Shared keyframes used across pages
   ========================================================= */

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

@keyframes petalFall{
  0%{ transform: translate3d(0,-10vh,0) rotate(0deg); opacity:0; }
  8%{ opacity:1; }
  100%{ transform: translate3d(var(--drift,40px), 110vh, 0) rotate(360deg); opacity:0.9; }
}

@keyframes sparkleBlink{
  0%,100%{ opacity:0; transform: scale(.4); }
  50%{ opacity:1; transform: scale(1); }
}

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

@keyframes fadeIn{
  from{ opacity:0; }
  to{ opacity:1; }
}

@keyframes gentlePulse{
  0%,100%{ transform: scale(1); }
  50%{ transform: scale(1.04); }
}

@keyframes bloomIn{
  0%{ transform: scale(.55); opacity:0; }
  70%{ transform: scale(1.06); opacity:1; }
  100%{ transform: scale(1); opacity:1; }
}

@keyframes bokehDrift{
  0%{ transform: translate(0,0); }
  50%{ transform: translate(18px,-24px); }
  100%{ transform: translate(0,0); }
}

@keyframes snowFall{
  0%{ transform: translateY(-8vh) translateX(0); opacity:0; }
  10%{ opacity:.9; }
  100%{ transform: translateY(110vh) translateX(var(--drift,20px)); opacity:.2; }
}

@keyframes rainFall{
  0%{ transform: translateY(-10vh); opacity:.7; }
  100%{ transform: translateY(110vh); opacity:.3; }
}

.reveal{ opacity:0; transform: translateY(28px); transition: opacity .8s var(--ease), transform .8s var(--ease); }
.reveal.in-view{ opacity:1; transform: translateY(0); }

.spin-slow{ animation: spin 26s linear infinite; }
@keyframes spin{ to{ transform: rotate(360deg); } }
