/* Duon Labs motion primitives — brutalist-honest only.
 *
 * Motion happens because something is ACTUALLY changing. No decorative
 * chrome. The wordmark MP4 (loaded directly in HTML) is the canonical
 * "brand alive" element; these classes handle data motion.
 *
 * Tokens consumed (from tokens.css):
 *   --duration-ticker
 *
 * Primitives (opt-in, applied via class):
 *   .ticker     → horizontal-scroll data stream (live tape, recent trades,
 *                 release log). Pair with overflow-hidden + nowrap parent.
 *   .counter-up → marker class for JS-driven number-count-up animations
 *                 (TVL, scenarios served, compute spend on first paint).
 *   .live-tick  → instant value swap when data updates. No transition.
 *                 Removes the smooth-animation "marketing UI" feel for
 *                 live numbers. Reads as raw data integrity.
 *
 * Honors prefers-reduced-motion: ticker disabled, counter-up snaps to
 * final value (data integrity preserved). */

.ticker {
  /* Pair with overflow-hidden + white-space:nowrap on the parent. */
  animation: ticker-scroll var(--duration-ticker, 30s) linear infinite;
}
@keyframes ticker-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-100%); }
}

.live-tick {
  /* Instant value swap. No transition on color, opacity, transform. */
  transition: none !important;
}

@media (prefers-reduced-motion: reduce) {
  .ticker { animation: none; }
}
