/* =====================================================================
   V58 — Seamless continuous public banner
   ---------------------------------------------------------------------
   Replaces the single-pass announcement scroll (which left the banner
   empty between passes) with a seamless marquee: the text is duplicated
   end-to-end so a fresh copy enters from the left before the previous
   copy has finished leaving on the right — the strip is never empty.
   banner-marquee-v58.js measures the copy width and injects the copies,
   setting --marquee-shift (one copy width) and --marquee-duration.
   ===================================================================== */
.announcement-track{
  width:max-content!important;
  animation:announcement-seamless var(--marquee-duration,24s) linear infinite!important;
}
.announcement-track span{white-space:nowrap}
/* one full loop travels exactly one copy width, so the wrap is invisible */
@keyframes announcement-seamless{
  from{transform:translateX(calc(var(--marquee-shift,50%) * -1))}
  to{transform:translateX(0)}
}
.site-announcement:hover .announcement-track{animation-play-state:paused}
@media(prefers-reduced-motion:reduce){
  .announcement-track{animation-duration:calc(var(--marquee-duration,24s) * 2.4)!important}
}
