@font-face {
	font-family: "Xolonium";
	src: url("../fonts/Xolonium.ttf") format("truetype");
	font-display: swap;
}

:root {
	color-scheme: dark;
}

* {
	box-sizing: border-box;
}

html,
body {
	margin: 0;
	min-height: 100%;
	background-color: #fff;
}

body {
	min-height: 100vh;
	background-image: repeating-linear-gradient(135deg, #fff 0 18px, #dedede 18px 36px);
	background-size: 50.9117px 50.9117px;
	animation: stripe-scroll 1.8s linear infinite;
}

/* Covers the page until critical structure and font assets are ready. */
.loading-screen {
	position: fixed;
	inset: 0;
	display: grid;
	place-items: center;
	color: #000;
	font-family: "Xolonium", sans-serif;
	font-size: 1.25rem;
	background: #fff;
	opacity: 1;
	visibility: visible;
	transition: opacity 0.3s ease, visibility 0.3s ease;
	z-index: 10;
}

.loading-screen img {
	width: min(25vw, 8rem);
	height: auto;
	animation: loading-pulse 0.9s ease-in-out infinite alternate;
}

.site-ready .loading-screen {
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
}

main {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	min-height: 100vh;
	padding: 5rem 1rem;
}

/* Centered beveled update carousel frame. */
.news-carousel {
	position: relative;
	width: min(100%, 52rem);
	height: 22rem;
	background: transparent;
	isolation: isolate;
	outline: none;
}

/* Polygon outline and inset white face for the carousel frame. */
.news-carousel::before,
.news-carousel::after {
	position: absolute;
	inset: 0;
	content: "";
	clip-path: polygon(8% 0, 94% 0, 100% 20%, 92% 100%, 6% 100%, 0 80%);
	pointer-events: none;
}

.news-carousel::before {
	background: #000;
	z-index: 1;
}

.news-carousel::after {
	inset: 3px;
	background: #fff;
	z-index: 2;
}

/* Explicit polygon shadow layer, offset below and to the right. */
.news-carousel__shadow {
	position: absolute;
	inset: 0;
	background: rgba(0, 0, 0, 0.33);
	clip-path: polygon(8% 0, 94% 0, 100% 20%, 92% 100%, 6% 100%, 0 80%);
	transform: translate(3px, 3px);
	z-index: 0;
}

/* Clips the moving slides inside the polygon frame. */
.news-carousel__viewport {
	position: absolute;
	inset: 3px;
	overflow: hidden;
	clip-path: polygon(8% 0, 94% 0, 100% 20%, 92% 100%, 6% 100%, 0 80%);
	z-index: 3;
}

.news-carousel__track {
	display: flex;
	height: 100%;
	transition: transform 0.45s ease;
}

/* One full-width update panel. Add or remove articles here to expand the carousel. */
.news-carousel__slide {
	position: relative;
	display: flex;
	flex: 0 0 100%;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	overflow: hidden;
	padding: 3rem 7rem;
	text-align: center;
}

.news-carousel__slide[href] {
	text-decoration: none;
}

/* Full-slide media layer; use the same class for images or video later. */
.news-carousel__media {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
	object-fit: cover;
	z-index: 0;
}

.news-carousel__slide:has(.news-carousel__media)::before {
	position: absolute;
	inset: 0;
	background: rgba(255, 255, 255, 0.25);
	content: "";
	pointer-events: none;
	z-index: 1;
}

.news-carousel__slide > :not(.news-carousel__media) {
	position: relative;
	z-index: 2;
}

.news-carousel__eyebrow,
.news-carousel__slide h2,
.news-carousel__slide p {
	margin: 0;
	font-family: "Xolonium", sans-serif;
	font-weight: normal;
}

.news-carousel__eyebrow {
	font-size: 1rem;
}

.news-carousel__slide h2 {
	margin-top: 1rem;
	font-size: 2.5rem;
}

.news-carousel__slide p:last-child {
	margin-top: 0.75rem;
	font-size: 1.15rem;
}

/* Choose one text treatment for each slide. */
.news-carousel__slide--dark-text {
	color: #000;
}

.news-carousel__slide--dark-text .news-carousel__eyebrow,
.news-carousel__slide--dark-text h2,
.news-carousel__slide--dark-text p {
	text-shadow: 3px 3px 0 #fff;
}

.news-carousel__slide--light-text {
	color: #fff;
	text-shadow: none;
}

.news-carousel__slide--light-text .news-carousel__eyebrow,
.news-carousel__slide--light-text h2,
.news-carousel__slide--light-text p {
	text-shadow: 3px 3px 0 #000;
}

/* Side controls move one update at a time. */
.news-carousel__control {
	position: absolute;
	top: 50%;
	display: grid;
	place-items: center;
	width: auto;
	height: auto;
	padding: 0.25rem;
	color: #fff;
	font: inherit;
	font-family: "Xolonium", sans-serif;
	font-size: 3rem;
	font-style: italic;
	font-weight: 900;
	line-height: 1;
	background: transparent;
	border: 0;
	transform: translateY(-50%);
	cursor: pointer;
	-webkit-text-stroke: 4px #000;
	paint-order: stroke fill;
	filter: drop-shadow(3px 3px 0 rgba(0, 0, 0, 0.33));
	z-index: 4;
}

.news-carousel__control:hover,
.news-carousel__control:focus-visible {
	color: #000;
	background: transparent;
	-webkit-text-stroke-color: #fff;
	filter: drop-shadow(3px 3px 0 rgba(0, 0, 0, 0.33));
}

.news-carousel__control:active {
	transform: translateY(-50%) scale(0.94);
	filter: drop-shadow(0 0 0 rgba(0, 0, 0, 0));
}

.news-carousel__control--previous {
	left: 1rem;
}

.news-carousel__control--next {
	right: 1rem;
}

/* Indicators are generated from the number of slides by carousel.js. */
.news-carousel__dots {
	position: absolute;
	bottom: 1rem;
	left: 50%;
	display: flex;
	gap: 0.5rem;
	transform: translateX(-50%);
	z-index: 4;
}

.news-carousel__dot {
	width: 0.8rem;
	height: 0.8rem;
	padding: 0;
	background: #fff;
	border: 2px solid #000;
	border-radius: 50%;
	cursor: pointer;
}

.news-carousel__dot.is-active,
.news-carousel__dot:hover,
.news-carousel__dot:focus-visible {
	background: #000;
}

@keyframes stripe-scroll {
	from {
		background-position: 0 0;
	}
	to {
		background-position: 50.91168824543142px 0;
	}
}

@keyframes loading-pulse {
	from {
		opacity: 0.35;
	}
	to {
		opacity: 1;
	}
}

@media (prefers-reduced-motion: reduce) {
	body,
	.loading-screen,
	.loading-screen img,
	.news-carousel__track,
	.news-carousel__control {
		animation: none;
		transition: none;
	}
}

@media (max-width: 30rem) {
	.news-carousel {
		height: 18rem;
	}

	.news-carousel__slide {
		padding: 2rem 4rem;
	}

	.news-carousel__slide h2 {
		font-size: 1.75rem;
	}

	.news-carousel__slide p:last-child {
		font-size: 1rem;
	}

	.news-carousel__control {
		font-size: 2.5rem;
	}

	.news-carousel__control--previous {
		left: 0.5rem;
	}

	.news-carousel__control--next {
		right: 0.5rem;
	}
}
