/* ==========================================================================
   PAXION — ANIMATIONS
   Word mask reveal, clip/blur reveal, stagger, reduced motion.
   ========================================================================== */

/* ---------------------------------------------------------------------- */
/* Word mask — headline reveal palavra por palavra                         */
/* ---------------------------------------------------------------------- */
.word-mask{ display:inline-block; overflow:hidden; vertical-align:top; line-height:1.08; }
.word-inner{
  display:inline-block; transform:translateY(112%); filter:blur(6px);
  transition:transform var(--duration-reveal) var(--ease-soft), filter var(--duration-reveal) var(--ease-soft);
}
.is-visible .word-inner{ transform:translateY(0); filter:blur(0); }

/* ---------------------------------------------------------------------- */
/* Clip / blur reveal — usado em parágrafos, tags, elementos técnicos       */
/* ---------------------------------------------------------------------- */
.clip-reveal{
  opacity:0; filter:blur(8px); transform:translateY(28px);
  transition:opacity var(--duration-reveal) var(--ease-soft), filter var(--duration-reveal) var(--ease-soft), transform var(--duration-reveal) var(--ease-soft);
}
.is-visible.clip-reveal, .is-visible .clip-reveal{ opacity:1; filter:blur(0); transform:translateY(0); }

.fade-up{ opacity:0; transform:translateY(24px); transition:opacity var(--duration-reveal) var(--ease-out), transform var(--duration-reveal) var(--ease-out); }
.is-visible.fade-up{ opacity:1; transform:translateY(0); }

.scale-in{ opacity:0; transform:scale(.96); transition:opacity var(--duration-reveal) var(--ease-soft), transform var(--duration-reveal) var(--ease-soft); }
.is-visible.scale-in{ opacity:1; transform:scale(1); }

/* hero intro items — reveal on load, not on scroll */
[data-hero-in]{ opacity:0; filter:blur(8px); transform:translateY(22px); transition:opacity var(--duration-reveal) var(--ease-soft), filter var(--duration-reveal) var(--ease-soft), transform var(--duration-reveal) var(--ease-soft); }
[data-hero-in].is-visible{ opacity:1; filter:blur(0); transform:translateY(0); }

/* stagger delays */
.d-1{ transition-delay:80ms !important; }
.d-2{ transition-delay:160ms !important; }
.d-3{ transition-delay:240ms !important; }
.d-4{ transition-delay:320ms !important; }
.d-5{ transition-delay:400ms !important; }
.d-6{ transition-delay:480ms !important; }
.d-7{ transition-delay:560ms !important; }
.d-8{ transition-delay:640ms !important; }

/* ---------------------------------------------------------------------- */
/* Preloader / intro grid                                                  */
/* ---------------------------------------------------------------------- */
.intro-mark{
  position:fixed; inset:0; z-index:500; background:var(--bg-deep);
  display:flex; align-items:center; justify-content:center;
  transition:opacity .6s var(--ease-out), visibility .6s var(--ease-out);
}
.intro-mark span{ font-family:var(--font-mono); font-size:15px; letter-spacing:.2em; color:var(--accent); }
.intro-mark.is-hidden{ opacity:0; visibility:hidden; pointer-events:none; }

/* ---------------------------------------------------------------------- */
/* Reduced motion                                                          */
/* ---------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce){
  html{ scroll-behavior:auto; }
  .word-inner, .clip-reveal, .fade-up, .scale-in, [data-hero-in]{
    transition:none !important; transform:none !important; filter:none !important; opacity:1 !important;
  }
  .tech-track{ animation:none !important; }
  .scroll-indicator .line::after{ animation:none !important; }
  .hero-orb-frame, .p-media img, .holo-item{ transition:none !important; }
  .p-card:hover .p-media img, .p-card:hover .p-title{ transform:none !important; }
  .holodex:not(:hover) .holo-item.is-side, .holodex:not(:hover) .holo-item.is-center,
  .holodex:hover .holo-item, .holodex .holo-item:hover{ transform:none !important; }
}
