.cw-marquee-wrap {
	overflow: hidden;
	width: 100%;
	--cw-gap: 40px;
}

.cw-marquee-track {
	display: flex;
	flex-wrap: nowrap;
	width: max-content;
	animation-name: cw-marquee-scroll;
	animation-timing-function: linear;
	animation-iteration-count: infinite;
	/* --cw-move is set by marquee.js to the exact pixel width of one
	   rendered set (items + trailing gap), after JS clones that set enough
	   times to fill the screen. Translating by that exact distance is what
	   makes the loop seamless — the -50% fallback below only applies if JS
	   hasn't run yet. */
}

.cw-marquee-set {
	display: flex;
	flex-wrap: nowrap;
	align-items: center;
	flex-shrink: 0;
	gap: var(--cw-gap);
	margin-right: var(--cw-gap);
}

.cw-marquee-item {
	white-space: nowrap;
	text-decoration: none;
	display: inline-block;
}

.cw-marquee-sep {
	white-space: nowrap;
}

.cw-marquee-sep:last-child {
	display: none;
}

@keyframes cw-marquee-scroll {
	0% {
		transform: translateX(0);
	}
	100% {
		transform: translateX(var(--cw-move, -50%));
	}
}

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