/* ==========================================================================
 * MILLENOVA GLOBAL PLAYER — NOW PLAYING CONTRACT
 *
 * OWNER:
 * This file owns the current-track title, meta and equalizer presentation and the current-track title marquee.
 *
 * MUST NOT OWN:
 * Do not define queue-row title behavior or mini-only title presentation. Scrollbar chrome remains owned by
 * Styles/scrollbars.css. JavaScript state/queue/provider semantics stay
 * outside CSS.
 *
 * CASCADE CONTRACT:
 * Phase 11A mechanical split: loaded at manifest position 12, after
 * 11-transport-controls--part-3-of-3.css. Rule order is unchanged from the former monolith (baseline
 * df93472, lines 1781–1816). New corrections go into the canonical owning
 * rule; never append dated Phase/fix blocks.
 *
 * DEPENDENCIES:
 * Depends on [data-floating-playlist-now-*] markup and marquee distance variables set by Scripts/floating-playlist.js.
 * ========================================================================== */



/* Phase 5 — NOW PLAYING current-title marquee. */
.floating-playlist__now-copy strong[data-floating-playlist-now-title] {
  display: block;
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.floating-playlist__now-copy strong[data-floating-playlist-now-title] > span {
  display: inline-block;
  max-width: none;
  white-space: nowrap;
  will-change: transform;
}

.floating-playlist__now-copy strong[data-floating-playlist-now-title].is-marquee {
  text-overflow: clip;
}

.floating-playlist__now-copy strong[data-floating-playlist-now-title].is-marquee > span {
  animation:
    floating-playlist-now-marquee var(--now-marquee-duration, 8s)
    ease-in-out infinite alternate;
}

@keyframes floating-playlist-now-marquee {
  from { transform: translateX(0); }
  to { transform: translateX(calc(-1 * var(--now-marquee-distance, 0px))); }
}

@media (prefers-reduced-motion: reduce) {
  .floating-playlist__now-copy strong[data-floating-playlist-now-title].is-marquee > span {
    animation: none !important;
  }
}
