/* ============================================================
   FROGMIND MOTION LAYER — shared across all pages
   Colors inherit from each page's own palette. No new colors.
   ============================================================ */

/* ---------- page-load wipe ---------- */
.fm-wipe{
  position:fixed;inset:0;z-index:9999;pointer-events:none;
  background:currentColor;color:var(--pond-dark,#0f2b26);
  transform-origin:top;
  animation:fmWipeUp 0.9s cubic-bezier(0.76,0,0.24,1) 0.15s forwards;
}
.fm-wipe::after{
  content:"";position:absolute;left:0;right:0;bottom:-2px;height:3px;
  background:var(--moss,#5fd6a3);opacity:0.8;
}
@keyframes fmWipeUp{to{transform:scaleY(0);}}

/* ---------- split-text hero ---------- */
.fm-split .fm-word{
  display:inline-block;overflow:hidden;vertical-align:bottom;
  padding:0.08em 0.1em 0.18em;
  margin:-0.08em -0.1em -0.18em;
}
.fm-split .fm-word > span{
  display:inline-block;
  transform:translateY(115%) rotate(4deg);
  animation:fmSurface 0.9s cubic-bezier(0.22,1,0.36,1) forwards;
  animation-delay:calc(0.35s + var(--wi,0) * 0.07s);
}
@keyframes fmSurface{
  to{transform:translateY(0) rotate(0deg);}
}

/* ---------- scroll reveals (auto-tagged by motion.js) ---------- */
.fm-reveal{
  opacity:0;
  transform:translateY(34px);
  transition:opacity 0.8s cubic-bezier(0.22,1,0.36,1),
             transform 0.8s cubic-bezier(0.22,1,0.36,1);
  transition-delay:var(--rd,0s);
  will-change:opacity,transform;
}
.fm-reveal.fm-in{opacity:1;transform:translateY(0);}

.fm-reveal-scale{
  opacity:0;transform:scale(0.94) translateY(20px);
  transition:opacity 0.9s cubic-bezier(0.22,1,0.36,1),
             transform 0.9s cubic-bezier(0.22,1,0.36,1);
  transition-delay:var(--rd,0s);
}
.fm-reveal-scale.fm-in{opacity:1;transform:scale(1) translateY(0);}

/* line-draw for .rule dividers */
.fm-rule-draw{transform:scaleX(0);transform-origin:left;
  transition:transform 1.1s cubic-bezier(0.22,1,0.36,1) 0.2s;}
.fm-rule-draw.fm-in{transform:scaleX(1);}

/* ---------- marquee ---------- */
.fm-marquee{
  overflow:hidden;white-space:nowrap;position:relative;
  border-top:1px solid var(--line,rgba(157,240,198,0.16));
  border-bottom:1px solid var(--line,rgba(157,240,198,0.16));
  padding:18px 0;margin:0;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
          mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
}
.fm-marquee-track{
  display:inline-flex;gap:0;
  animation:fmMarquee 26s linear infinite;
}
.fm-marquee:hover .fm-marquee-track{animation-play-state:paused;}
.fm-marquee-track span{
  font-family:'JetBrains Mono',monospace;
  font-size:13px;letter-spacing:0.22em;text-transform:uppercase;
  color:var(--moss-soft,#9df0c6);
  padding:0 28px;display:inline-flex;align-items:center;gap:28px;
}
.fm-marquee-track span::after{
  content:"◦";color:var(--accent,#A6FBB2);font-size:15px;
}
@keyframes fmMarquee{to{transform:translateX(-50%);}}

/* ---------- custom cursor (desktop, fine pointer only) ---------- */
@media (hover:hover) and (pointer:fine){
  .fm-cursor,.fm-cursor-ring{
    position:fixed;top:0;left:0;pointer-events:none;z-index:99990;
    border-radius:50%;mix-blend-mode:difference;
  }
  .fm-cursor{
    width:8px;height:8px;background:#fff;
    transform:translate(-50%,-50%);
  }
  .fm-cursor-ring{
    width:34px;height:34px;border:1.5px solid #fff;
    transform:translate(-50%,-50%);
    transition:width 0.25s ease,height 0.25s ease,opacity 0.25s ease;
  }
  body.fm-cursor-hover .fm-cursor-ring{width:56px;height:56px;opacity:0.85;}
  body.fm-has-cursor, body.fm-has-cursor *{cursor:none !important;}
}

/* ---------- magnetic buttons ---------- */
.btn{will-change:transform;}

/* ---------- tilt cards ---------- */
.fm-tilt{
  transform-style:preserve-3d;
  transition:transform 0.35s cubic-bezier(0.22,1,0.36,1),
             border-color 0.3s, box-shadow 0.35s;
}
.fm-tilt:hover{
  box-shadow:0 18px 44px -18px rgba(0,0,0,0.55);
}
/* glow sweep on tilt cards */
.fm-tilt{position:relative;overflow:hidden;}
.fm-tilt::before{
  content:"";position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(220px circle at var(--mx,50%) var(--my,50%),
    rgba(255,255,255,0.08),transparent 65%);
  opacity:0;transition:opacity 0.3s;
}
.fm-tilt:hover::before{opacity:1;}

/* ---------- parallax images ---------- */
.fm-parallax{overflow:hidden;}
.fm-parallax img{
  transform:translateY(var(--py,0)) scale(1.12);
  will-change:transform;
  transition:none;
}

/* ---------- text scramble target ---------- */
.fm-scramble{display:inline-block;}

/* ---------- floating ambient blobs (hero only) ---------- */
.fm-blob{
  position:absolute;border-radius:50%;pointer-events:none;z-index:-1;
  filter:blur(70px);opacity:0.35;
  animation:fmDrift 14s ease-in-out infinite alternate;
}
@keyframes fmDrift{
  from{transform:translate(0,0) scale(1);}
  to{transform:translate(40px,-50px) scale(1.15);}
}

/* ---------- nav shrink on scroll ---------- */
nav{transition:padding 0.35s ease, background 0.35s ease, box-shadow 0.35s ease;}
body.fm-scrolled nav{
  padding-top:12px;padding-bottom:12px;
  box-shadow:0 8px 30px -12px rgba(0,0,0,0.5);
}

/* ---------- scroll progress bar ---------- */
.fm-progress{
  position:fixed;top:0;left:0;height:2px;z-index:99991;
  width:100%;transform-origin:left;transform:scaleX(0);
  background:linear-gradient(90deg,var(--moss,#5fd6a3),var(--accent,#A6FBB2));
  pointer-events:none;
}

/* ---------- count-up stat flash ---------- */
.fm-counted{animation:fmPop 0.4s cubic-bezier(0.22,1,0.36,1);}
@keyframes fmPop{50%{transform:scale(1.12);}}

/* ---------- link hover underline sweep ---------- */
nav ul a{position:relative;}
nav ul a::after{
  content:"";position:absolute;left:0;bottom:-5px;height:1.5px;width:100%;
  background:var(--moss-soft,#9df0c6);
  transform:scaleX(0);transform-origin:right;
  transition:transform 0.35s cubic-bezier(0.22,1,0.36,1);
}
nav ul a:hover::after, nav ul a.active::after{
  transform:scaleX(1);transform-origin:left;
}

/* ---------- reduced motion: kill everything ---------- */
@media (prefers-reduced-motion:reduce){
  .fm-wipe{display:none;}
  .fm-split .fm-word > span{animation:none;transform:none;}
  .fm-reveal,.fm-reveal-scale{opacity:1;transform:none;transition:none;}
  .fm-rule-draw{transform:none;transition:none;}
  .fm-marquee-track{animation:none;}
  .fm-blob{animation:none;}
  .fm-parallax img{transform:none;}
  .fm-cursor,.fm-cursor-ring{display:none;}
  body.fm-has-cursor, body.fm-has-cursor *{cursor:auto !important;}
}

/* ---------- mobile: lighter touch ---------- */
@media (max-width:800px){
  .fm-marquee-track span{font-size:11px;padding:0 18px;gap:18px;}
  .fm-blob{filter:blur(50px);}
}
