/* ═══════════════════════════════════════════
   ANIMATIONS — reveal, char split, cursor
═══════════════════════════════════════════ */

/* ── CURSOR ── */
.cursor {
  position:      fixed;
  width:         20px;
  height:        20px;
  border:        1px solid var(--c-peach);
  border-radius: 50%;
  pointer-events: none;
  z-index:       9999;
  transition:    transform .2s ease, background .2s;
  mix-blend-mode: difference;
}

.cursor.grow {
  transform:  scale(2.5);
  background: var(--c-peach);
}

/* ── REVEAL ── */
.reveal {
  opacity:    0;
  transform:  translateY(60px);
  transition: opacity 1s cubic-bezier(.19,1,.22,1),
              transform 1s cubic-bezier(.19,1,.22,1);
}

.reveal.in {
  opacity:   1;
  transform: translateY(0);
}

/* ── SPLIT TEXT CHARS ── */
.char {
  display:   inline-block;
  transform: translateY(100%);
  opacity:   0;
}

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce) {
  .reveal,
  .reveal.in {
    opacity:    1;
    transform:  none;
    transition: none;
  }

  .char {
    transform: none;
    opacity:   1;
  }

  .cursor { display: none; }

  .marquee-track { animation: none; }
  .scroll-indicator::after { animation: none; }
}