/* ==========================================================================
   Custom Product Carousel
   ========================================================================== */

.cpc-carousel {
	--cpc-spv: 2.75;
	--cpc-gap: 28px;
	--cpc-inset-start: 0px;
	--cpc-inset-end: 0px;
	--cpc-pad-block: 8px;
	--cpc-transition: 300ms;
	--cpc-arrow-offset: 16px;
	--cpc-arrow-top: 35%;
	--cpc-nav-space: 24px;
	--cpc-icon-shift: 4px;
	--cpc-fade: 80px;
	--cpc-card-w: 262px;
	/* N cards + (N - 1) gaps fill the track; fractional N leaves part of the next card visible. */
	--cpc-fluid-basis: calc((100% - (var(--cpc-spv) - 1) * var(--cpc-gap)) / var(--cpc-spv));
	--cpc-slide-basis: var(--cpc-fluid-basis);

	position: relative;
	display: flex;
	flex-direction: column;
	width: 100%;
	min-width: 0;
}

.cpc-viewport {
	position: relative;
	min-width: 0;
}

/* ---- Track ------------------------------------------------------------- */

.cpc-track {
	display: flex;
	align-items: flex-start;
	gap: var(--cpc-gap);
	overflow-x: auto;
	overflow-y: hidden;
	overscroll-behavior-x: contain;
	-webkit-overflow-scrolling: touch;
	padding: var(--cpc-pad-block) var(--cpc-inset-end) var(--cpc-pad-block) var(--cpc-inset-start);
	scroll-padding-inline: var(--cpc-inset-start) var(--cpc-inset-end);
	outline: none;
}

.cpc-track:focus-visible {
	outline: 2px solid currentColor;
	outline-offset: 2px;
}

.cpc-snap-yes .cpc-track {
	scroll-snap-type: x mandatory;
}

.cpc-equal-height-yes .cpc-track {
	align-items: stretch;
}

.cpc-hide-scrollbar-yes .cpc-track {
	scrollbar-width: none;
	-ms-overflow-style: none;
}

.cpc-hide-scrollbar-yes .cpc-track::-webkit-scrollbar {
	display: none;
}

.cpc-edge-fade-yes .cpc-track {
	-webkit-mask-image: linear-gradient(to right, #000 calc(100% - var(--cpc-fade)), transparent);
	mask-image: linear-gradient(to right, #000 calc(100% - var(--cpc-fade)), transparent);
}

/* Fade disappears once the user reaches the end. */
.cpc-edge-fade-yes .cpc-carousel.is-at-end .cpc-track {
	-webkit-mask-image: none;
	mask-image: none;
}

.cpc-carousel.is-draggable .cpc-track {
	cursor: grab;
}

.cpc-track.is-dragging {
	cursor: grabbing;
	scroll-snap-type: none !important;
	scroll-behavior: auto !important;
	user-select: none;
	-webkit-user-select: none;
}

.cpc-track.is-dragging a,
.cpc-track.is-dragging img {
	pointer-events: none;
}

/* ---- Slides ------------------------------------------------------------ */

/* Basis is either the fluid formula or the fixed card width (see --cpc-slide-basis). */
.cpc-slide {
	flex: 0 0 var(--cpc-slide-basis);
	min-width: 0;
	max-width: 100%;
	display: flex;
	scroll-snap-align: start;
}

/*
 * Safe centering: auto margins absorb leftover space when every card fits,
 * and collapse to 0 when the row overflows, so scrolling is never clipped.
 */
.cpc-center-yes .cpc-slide:first-child {
	margin-left: auto;
}

.cpc-center-yes .cpc-slide:last-child {
	margin-right: auto;
}

/* ---- Card -------------------------------------------------------------- */

.cpc-card {
	position: relative;
	display: flex;
	flex-direction: column;
	width: 100%;
	overflow: hidden;
	background-color: #0b0b0b;
	border-radius: 12px;
	transition:
		transform var(--cpc-transition) ease,
		box-shadow var(--cpc-transition) ease,
		background-color var(--cpc-transition) ease,
		border-color var(--cpc-transition) ease;
	/* Keeps rounded corners clipping images during transforms in Safari. */
	isolation: isolate;
}

.cpc-equal-height-yes .cpc-card {
	height: 100%;
}

.cpc-card__overlay-link {
	position: absolute;
	inset: 0;
	z-index: 2;
	border-radius: inherit;
}

.cpc-card__overlay-link:focus-visible {
	outline: 2px solid currentColor;
	outline-offset: -4px;
}

/* ---- Media ------------------------------------------------------------- */

.cpc-card__media {
	position: relative;
	flex: 0 0 auto;
	overflow: hidden;
	aspect-ratio: 1 / 1;
	background-color: #fff;
	box-sizing: border-box;
}

.cpc-media-height .cpc-card__media {
	aspect-ratio: auto;
}

.cpc-card__media img {
	display: block;
	width: 100% !important;
	height: 100% !important;
	max-width: none;
	object-fit: cover;
	object-position: center center;
	transition: transform calc(var(--cpc-transition) * 2) ease, filter var(--cpc-transition) ease;
	-webkit-user-drag: none;
	user-select: none;
}

/* ---- Body -------------------------------------------------------------- */

.cpc-card__body {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	flex: 1 1 auto;
	padding: 32px 32px 36px;
	text-align: left;
}

.cpc-card .cpc-card__title {
	margin: 0 0 14px;
	padding: 0;
	color: #fff;
	transition: color var(--cpc-transition) ease;
	overflow-wrap: anywhere;
}

.cpc-card__desc {
	margin: 0 0 28px;
	color: #d9d9d9;
}

.cpc-card__desc p:last-child {
	margin-bottom: 0;
}

.cpc-btn-bottom-yes .cpc-card__button {
	margin-top: auto;
}

/* ---- Button ------------------------------------------------------------ */

.cpc-card .cpc-card__button {
	display: inline-flex;
	align-items: center;
	gap: 10px;
	color: #7e9a7c;
	text-decoration: none;
	line-height: 1.2;
	transition:
		color var(--cpc-transition) ease,
		background-color var(--cpc-transition) ease,
		border-color var(--cpc-transition) ease;
	position: relative;
	z-index: 1;
}

.cpc-card a.cpc-card__button {
	z-index: 3;
}

.cpc-card__button-icon {
	display: inline-flex;
	align-items: center;
	line-height: 1;
	letter-spacing: 0;
	transition: transform var(--cpc-transition) ease;
}

.cpc-card__button-icon svg {
	width: 1em;
	height: 1em;
	fill: currentColor;
}

.cpc-card__button:hover .cpc-card__button-icon,
.cpc-card--linked:hover .cpc-card__button-icon {
	transform: translateX(var(--cpc-icon-shift));
}

/* ---- Arrows ------------------------------------------------------------ */

.cpc-carousel .cpc-arrow {
	appearance: none;
	-webkit-appearance: none;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 48px;
	height: 48px;
	margin: 0;
	padding: 0;
	font-size: 18px;
	line-height: 1;
	color: #fff;
	background-color: rgba(11, 11, 11, 0.85);
	border-radius: 50%;
	cursor: pointer;
	box-sizing: border-box;
	transition:
		color var(--cpc-transition) ease,
		background-color var(--cpc-transition) ease,
		border-color var(--cpc-transition) ease,
		opacity var(--cpc-transition) ease,
		visibility var(--cpc-transition) ease;
	z-index: 4;
}

.cpc-carousel .cpc-arrow svg {
	width: 1em;
	height: 1em;
	fill: currentColor;
}

.cpc-carousel .cpc-arrow:focus-visible {
	outline: 2px solid currentColor;
	outline-offset: 2px;
}

.cpc-carousel .cpc-arrow.is-disabled {
	cursor: default;
	opacity: 0.35;
}

.cpc-hide-disabled-yes .cpc-carousel .cpc-arrow.is-disabled {
	opacity: 0;
	visibility: hidden;
	pointer-events: none;
}

/* Hide everything navigational when all cards already fit. */
.cpc-carousel.is-static .cpc-arrow,
.cpc-carousel.is-static .cpc-dots,
.cpc-carousel.is-static .cpc-progress {
	display: none !important;
}

.cpc-carousel.is-static .cpc-track {
	cursor: auto;
}

.cpc-arrows-sides .cpc-viewport > .cpc-arrow {
	position: absolute;
	top: var(--cpc-arrow-top);
	transform: translateY(-50%);
}

.cpc-arrows-sides .cpc-viewport > .cpc-arrow--prev {
	left: var(--cpc-arrow-offset);
}

.cpc-arrows-sides .cpc-viewport > .cpc-arrow--next {
	right: var(--cpc-arrow-offset);
}

/* ---- Nav bar (dots / progress / arrows above or below) ----------------- */

.cpc-nav {
	display: flex;
	align-items: center;
	justify-content: flex-end;
	gap: 20px;
	margin-top: var(--cpc-nav-space);
}

.cpc-arrows-top .cpc-nav {
	order: -1;
	margin-top: 0;
	margin-bottom: var(--cpc-nav-space);
}

.cpc-nav__arrows {
	display: flex;
	align-items: center;
	gap: 10px;
	flex: 0 0 auto;
}

.cpc-dots {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 8px;
}

.cpc-carousel .cpc-dot {
	appearance: none;
	-webkit-appearance: none;
	display: block;
	width: 10px;
	height: 10px;
	margin: 0;
	padding: 0;
	border: 0;
	border-radius: 999px;
	background-color: rgba(255, 255, 255, 0.35);
	cursor: pointer;
	transition: width var(--cpc-transition) ease, background-color var(--cpc-transition) ease;
}

.cpc-carousel .cpc-dot.is-active {
	width: 28px;
	background-color: #7e9a7c;
}

.cpc-progress {
	position: relative;
	flex: 1 1 auto;
	height: 3px;
	border-radius: 999px;
	overflow: hidden;
	background-color: rgba(255, 255, 255, 0.2);
}

.cpc-progress__bar {
	position: absolute;
	top: 0;
	bottom: 0;
	left: 0;
	width: 30%;
	border-radius: inherit;
	background-color: #7e9a7c;
}

@media (prefers-reduced-motion: reduce) {
	.cpc-card,
	.cpc-card__media img,
	.cpc-card__button,
	.cpc-card__button-icon,
	.cpc-carousel .cpc-arrow,
	.cpc-carousel .cpc-dot {
		transition: none !important;
	}
}
