/* ============================================================
   SCROLL-REVEAL ANIMATIONS (enqueued globally)
   Two patterns, never combined on the same wrapper/children pair:
     .hatter-fade-up          — whole element fades/rises in
     .hatter-fade-up-stagger  — parent; its .hatter-fade-up-item children stagger
   JS (reveal.js) adds .is-in when the element enters the viewport.
   ============================================================ */

.hatter-fade-up {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity .7s cubic-bezier(.2,.7,.2,1), transform .7s cubic-bezier(.2,.7,.2,1);
  will-change: opacity, transform;
}
.hatter-fade-up.is-in { opacity: 1; transform: none; }

.hatter-fade-up-item {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity .6s cubic-bezier(.2,.7,.2,1), transform .6s cubic-bezier(.2,.7,.2,1);
}
.hatter-fade-up-stagger.is-in .hatter-fade-up-item { opacity: 1; transform: none; }
.hatter-fade-up-stagger.is-in .hatter-fade-up-item:nth-child(1) { transition-delay: .05s; }
.hatter-fade-up-stagger.is-in .hatter-fade-up-item:nth-child(2) { transition-delay: .12s; }
.hatter-fade-up-stagger.is-in .hatter-fade-up-item:nth-child(3) { transition-delay: .19s; }
.hatter-fade-up-stagger.is-in .hatter-fade-up-item:nth-child(4) { transition-delay: .26s; }
.hatter-fade-up-stagger.is-in .hatter-fade-up-item:nth-child(5) { transition-delay: .33s; }
.hatter-fade-up-stagger.is-in .hatter-fade-up-item:nth-child(6) { transition-delay: .40s; }

/* Slow violet glow pulse (hero) — transform/opacity only */
@keyframes hatter-glow-drift {
  0%, 100% { transform: translate(-50%, -50%) scale(1); opacity: .55; }
  50%      { transform: translate(-50%, -52%) scale(1.08); opacity: .8; }
}

@media (prefers-reduced-motion: reduce) {
  .hatter-fade-up, .hatter-fade-up-item {
    opacity: 1 !important; transform: none !important; transition: none !important;
  }
  [class*="hatter-"] { animation: none !important; }
}
