/* Home page extra motion: scroll reveal, card tilt, magnetic buttons, floating hearts, count-up.
   Uses the individual translate / rotate / scale properties so it never fights the existing transform animations. */

/* Scroll reveal (classes are added by motion.js, so content stays visible without JS). */
.om-mo-reveal{opacity:0;translate:0 28px;transition:opacity .8s cubic-bezier(.22,1,.36,1),translate .8s cubic-bezier(.22,1,.36,1);transition-delay:var(--om-mo-delay,0s)}
.om-mo-reveal.om-mo-zoom{translate:0 36px;scale:.96;transition-property:opacity,translate,scale}
.om-mo-reveal.om-mo-in{opacity:1;translate:0 0;scale:1}

/* Card tilt + cursor spotlight (desktop pointers only). */
@media (hover:hover) and (pointer:fine){
  .om-mo-tilt{rotate:var(--om-mo-rx,0) var(--om-mo-ry,0) 0 var(--om-mo-deg,0deg);transition:rotate .45s cubic-bezier(.22,1,.36,1)}
  .om-mo-tilt.om-mo-tilting{transition:rotate .12s linear}
  .om-mo-glare{position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:3;opacity:0;transition:opacity .35s ease;
    background:radial-gradient(420px circle at var(--om-mo-x,50%) var(--om-mo-y,50%),rgba(225,29,116,.10),rgba(157,23,77,.06) 40%,transparent 65%)}
  .om-mo-tilt:hover .om-mo-glare{opacity:1}
  .om-mo-magnet{translate:var(--om-mo-mx,0) var(--om-mo-my,0);transition:translate .35s cubic-bezier(.22,1,.36,1)}
}

/* Floating hearts behind the hero and CTA content. */
.om-mo-hearts-host{isolation:isolate}
.om-mo-hearts{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:-1}
.om-mo-heart{position:absolute;bottom:-40px;left:var(--x);font-size:var(--s);line-height:1;opacity:0;color:var(--c);
  animation:om-mo-heart-rise var(--d) linear var(--delay) infinite;will-change:transform,opacity}
@keyframes om-mo-heart-rise{
  0%{transform:translate(0,0) rotate(0);opacity:0}
  10%{opacity:var(--o)}
  50%{transform:translate(var(--sway),-55vh) rotate(12deg)}
  85%{opacity:var(--o)}
  100%{transform:translate(0,-110vh) rotate(-8deg);opacity:0}
}

@media (prefers-reduced-motion:reduce){
  .om-mo-reveal{opacity:1;translate:none;scale:none;transition:none}
  .om-mo-hearts{display:none}
}

/* ---- Round 2 ---------------------------------------------------------------------------------- */

/* Scroll progress bar */
.om-mo-progress{position:fixed;top:0;left:0;right:0;height:3px;z-index:100000;pointer-events:none;transform-origin:0 50%;transform:scaleX(var(--p,0));
  background:linear-gradient(90deg,#e11d74,#9d174d);box-shadow:0 0 10px rgba(225,29,116,.45)}

/* Word-by-word headings */
.om-mo-w{display:inline-block;opacity:0;translate:0 .45em;filter:blur(6px);transition:opacity .7s cubic-bezier(.22,1,.36,1),translate .7s cubic-bezier(.22,1,.36,1),filter .7s ease;transition-delay:calc(var(--i) * 70ms)}
.om-mo-wu{opacity:0;filter:blur(6px);transition:opacity .7s cubic-bezier(.22,1,.36,1),filter .7s ease;transition-delay:calc(var(--i) * 70ms)}
.om-mo-words.om-mo-in .om-mo-w,.om-mo-words.om-mo-in .om-mo-wu{opacity:1;translate:0 0;filter:none}

/* Gradient text shimmer: a light sweep layered over the element's own gradient */
.om-mo-shimmer{background-size:250% 100%,100% 100%!important;background-repeat:no-repeat!important;animation:om-mo-shimmer 5s ease-in-out infinite}
@keyframes om-mo-shimmer{0%,55%{background-position:200% 0,0 0}100%{background-position:-100% 0,0 0}}

/* Hero spotlight */
.om-mo-spot{position:absolute;inset:0;z-index:-1;pointer-events:none;opacity:0;transition:opacity .6s ease;
  background:radial-gradient(520px circle at var(--sx,50%) var(--sy,40%),rgba(244,114,182,.20),rgba(157,23,77,.08) 45%,transparent 70%)}
.om-hero-v2:hover .om-mo-spot{opacity:1}

/* Cursor trail + click burst particles */
.om-mo-fx{position:fixed;inset:0;pointer-events:none;z-index:99999;overflow:hidden}
.om-mo-p{position:absolute;left:0;top:0;line-height:1;will-change:transform,opacity;user-select:none}
.om-mo-trail{animation:om-mo-trail .9s ease-out forwards}
@keyframes om-mo-trail{0%{opacity:.9;transform:translate(var(--x),var(--y)) scale(1) rotate(0)}100%{opacity:0;transform:translate(calc(var(--x) + var(--dx)),calc(var(--y) + 26px)) scale(.3) rotate(var(--r))}}
.om-mo-burst{animation:om-mo-burst .85s cubic-bezier(.15,.8,.3,1) forwards}
@keyframes om-mo-burst{0%{opacity:1;transform:translate(var(--x),var(--y)) scale(.4) rotate(0)}70%{opacity:1}100%{opacity:0;transform:translate(calc(var(--x) + var(--dx)),calc(var(--y) + var(--dy))) scale(1) rotate(var(--r))}}

/* Button ripple */
.om-mo-rclip{position:absolute;inset:0;border-radius:inherit;overflow:hidden;pointer-events:none;z-index:2}
.om-mo-ripple{position:absolute;border-radius:50%;background:currentColor;opacity:.28;transform:scale(0);animation:om-mo-ripple .65s ease-out forwards}
@keyframes om-mo-ripple{to{transform:scale(1);opacity:0}}

@media (prefers-reduced-motion:reduce){
  .om-mo-w,.om-mo-wu{opacity:1;translate:none;filter:none;transition:none}
  .om-mo-shimmer{animation:none}
  .om-mo-fx,.om-mo-spot{display:none}
}
