/* One-line titles that glide when they do not fit (see src/lib/marquee.js). */
html .mq{display:block!important;white-space:nowrap!important;overflow:hidden!important;min-width:0;max-width:100%;-webkit-line-clamp:unset!important}
.mq>.mq-track{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap}
.mq.mq-run{-webkit-mask-image:linear-gradient(90deg,transparent 0,#000 14px,#000 calc(100% - 22px),transparent);mask-image:linear-gradient(90deg,transparent 0,#000 14px,#000 calc(100% - 22px),transparent)}
.mq.mq-run>.mq-track{max-width:none;overflow:visible;text-overflow:clip;animation:mq-glide var(--mq-dur,8s) linear .4s infinite;will-change:transform}
@keyframes mq-glide{
  0%{transform:translateX(0)}
  42%,58%{transform:translateX(var(--mq-shift,0))}
  95%,100%{transform:translateX(0)}
}
@media (prefers-reduced-motion:reduce){.mq.mq-run>.mq-track{animation:none}}

/* Vertical glide for clamped blocks (card descriptions). */
html .mqy{display:block!important;overflow:hidden!important;-webkit-line-clamp:unset!important}
.mqy>.mq-track{display:block}
.mqy.mq-run>.mq-track{animation:mq-glide-y var(--mq-dur,8s) linear .4s infinite;will-change:transform}
@keyframes mq-glide-y{
  0%{transform:translateY(0)}
  42%,58%{transform:translateY(var(--mq-shift,0))}
  95%,100%{transform:translateY(0)}
}
@media (prefers-reduced-motion:reduce){.mqy.mq-run>.mq-track{animation:none}}
