/* Xantrum - animation primitives.
   Editorial restraint: entrance reveals, underline draws, slow marquee. */

/* Base scroll reveal (fallback when GSAP unavailable) */
.reveal {
  opacity: 0;
  transform: translateY(20px);
  transition: opacity var(--dur-3) var(--ease-out),
              transform var(--dur-3) var(--ease-out);
}
.reveal.visible {
  opacity: 1;
  transform: translateY(0);
}

/* Headline word mask reveal (used by GSAP) */
.word-mask {
  display: inline-block;
  overflow: hidden;
  vertical-align: top;
  line-height: 0.9;
}
.word-mask > span {
  display: inline-block;
  transform: translateY(110%);
  will-change: transform;
}

/* Marquee (trusted-by ribbon) */
@keyframes marquee-scroll {
  from { transform: translate3d(0, 0, 0); }
  to   { transform: translate3d(-50%, 0, 0); }
}

/* Scroll indicator */
@keyframes scroll-nudge {
  0%, 100% { transform: translateY(0); opacity: 0.55; }
  50%      { transform: translateY(4px); opacity: 1; }
}

/* Availability dot */
@keyframes dot-pulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(59, 224, 143, 0.5); }
  70%      { box-shadow: 0 0 0 6px rgba(59, 224, 143, 0); }
}

/* Subtle caret for headline punctuation emphasis */
@keyframes caret-blink {
  0%, 49% { opacity: 1; }
  50%, 100% { opacity: 0; }
}
