/* FFW - message ticker.
   The movement is one transform on one element, so it stays on the compositor
   and costs nothing on the main thread. */

.ffw-ticker {
	--ffw-ticker-bg: #111;
	--ffw-ticker-color: #fff;
	--ffw-ticker-size: clamp(0.66rem, 0.28vw + 0.6rem, 0.76rem);
	--ffw-ticker-gap: clamp(20px, 3.5vw, 46px);
	--ffw-ticker-shift: 0px;
	--ffw-ticker-duration: 30s;

	background: var(--ffw-ticker-bg);
	color: var(--ffw-ticker-color);
	width: 100%;
}

.ffw-ticker *,
.ffw-ticker *::before,
.ffw-ticker *::after {
	box-sizing: border-box;
}

.ffw-ticker__viewport {
	overflow: hidden;
	padding-block: clamp(9px, 1.1vw, 13px);
	/* Fades the ends so items slide in and out instead of being chopped. */
	-webkit-mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
	mask-image: linear-gradient(90deg, transparent, #000 6%, #000 94%, transparent);
}

.ffw-ticker__track {
	display: flex;
	width: max-content;
	will-change: transform;
}

.ffw-ticker.is-running .ffw-ticker__track {
	animation: ffw-ticker-move var(--ffw-ticker-duration) linear infinite;
}

.ffw-ticker[data-direction="right"].is-running .ffw-ticker__track {
	animation-direction: reverse;
}

@keyframes ffw-ticker-move {
	from { transform: translate3d(0, 0, 0); }
	to   { transform: translate3d(calc(var(--ffw-ticker-shift) * -1), 0, 0); }
}

/* A quiet courtesy: hovering holds the line still so it can be read. */
.ffw-ticker:hover .ffw-ticker__track,
.ffw-ticker:focus-within .ffw-ticker__track {
	animation-play-state: paused;
}

.ffw-ticker__group {
	display: flex;
	flex: 0 0 auto;
	align-items: center;
	gap: var(--ffw-ticker-gap);
	padding-right: var(--ffw-ticker-gap);
}

.ffw-ticker__item,
.ffw-ticker__sep {
	display: block;
	flex: 0 0 auto;
	font-family: inherit;
	font-size: var(--ffw-ticker-size);
	font-weight: 400;
	line-height: 1.2;
	letter-spacing: 0.16em;
	text-transform: uppercase;
	white-space: nowrap;
	color: inherit;
}

.ffw-ticker__sep {
	opacity: 0.45;
	letter-spacing: 0;
}

/* Before the script measures, show one static, readable row rather than a
   half-built strip. */
.ffw-ticker:not(.is-running) .ffw-ticker__viewport {
	overflow-x: auto;
	scrollbar-width: none;
}

.ffw-ticker:not(.is-running) .ffw-ticker__viewport::-webkit-scrollbar {
	display: none;
}

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

	.ffw-ticker .ffw-ticker__viewport {
		overflow-x: auto;
		-webkit-mask-image: none;
		mask-image: none;
	}
}
