/* =============================================================
   animations.css — Reveal system & keyframes
   ============================================================= */

/* Reveal base — set before JS marks .is-in */
[data-reveal]{opacity:0;transform:translateY(24px);
  transition:opacity var(--dur-slow) var(--ease-out),transform var(--dur-slow) var(--ease-out);
  will-change:opacity,transform}
[data-reveal="fade"]{transform:none}
[data-reveal="scale"]{transform:scale(.94)}
[data-reveal="left"]{transform:translateX(-32px)}
[data-reveal="right"]{transform:translateX(32px)}
[data-reveal="mask"]{clip-path:inset(0 0 100% 0);transform:none;opacity:1;
  transition:clip-path var(--dur-slow) var(--ease-out)}

.is-in[data-reveal]{opacity:1;transform:none}
.is-in[data-reveal="mask"]{clip-path:inset(0 0 0 0)}

/* Stagger children */
[data-stagger]>*{opacity:0;transform:translateY(20px);
  transition:opacity var(--dur-base) var(--ease-out),transform var(--dur-base) var(--ease-out)}
[data-stagger].is-in>*{opacity:1;transform:none}
[data-stagger].is-in>*:nth-child(1){transition-delay:0ms}
[data-stagger].is-in>*:nth-child(2){transition-delay:calc(var(--stagger) * 1)}
[data-stagger].is-in>*:nth-child(3){transition-delay:calc(var(--stagger) * 2)}
[data-stagger].is-in>*:nth-child(4){transition-delay:calc(var(--stagger) * 3)}
[data-stagger].is-in>*:nth-child(5){transition-delay:calc(var(--stagger) * 4)}
[data-stagger].is-in>*:nth-child(6){transition-delay:calc(var(--stagger) * 5)}
[data-stagger].is-in>*:nth-child(7){transition-delay:calc(var(--stagger) * 6)}

/* Keyframes */
@keyframes heroGlow{from{transform:translate(0,0) scale(1);opacity:.85}
  to{transform:translate(-4%,3%) scale(1.08);opacity:1}}
@keyframes scrollHint{0%{opacity:.2;transform:scaleY(.4)}50%{opacity:1}100%{opacity:.2;transform:scaleY(1)}}
@keyframes ripple{to{transform:scale(2.6);opacity:0}}
@keyframes fadeUp{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes orbitPulse{0%,100%{opacity:.55;transform:scale(1)}50%{opacity:1;transform:scale(1.12)}}
@keyframes orbitFloat{0%,100%{transform:translateY(-7px)}50%{transform:translateY(7px)}}

/* Preloader */
@keyframes ringSpin{to{transform:rotate(360deg)}}
@keyframes pageIntro{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}

/* Counter (if used) */
.counter{font-family:var(--font-display);font-weight:var(--fw-bold);font-size:var(--fs-h1);
  line-height:1;color:var(--text-primary)}

/* Preloader */
.preloader{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;
  background:var(--bg-inverse);transition:opacity .5s var(--ease-out),visibility .5s var(--ease-out)}
.preloader.is-done{opacity:0;visibility:hidden}
.preloader__ring{width:56px;height:56px;border-radius:50%;
  border:3px solid rgba(255,255,255,.14);border-top-color:var(--accent);
  animation:ringSpin .9s linear infinite}

/* Scroll progress bar */
.scroll-progress{position:fixed;top:0;left:0;height:3px;width:0;z-index:200;
  background:var(--grad-steel);box-shadow:0 0 8px rgba(36,138,84,.5);
  transition:width .08s linear}

/* Reduced motion: neutralize reveals */
@media (prefers-reduced-motion:reduce){
  [data-reveal],[data-stagger]>*{opacity:1 !important;transform:none !important;clip-path:none !important}
  .hero__glow,.hero__scroll span,.orbit__ring,.orbit__glow,.orbit__chip,.orbit__core svg{animation:none !important}
  .preloader__ring{animation-duration:1.2s}
}
