/* Composition Carousel — quiet defaults; every value is overridable from Elementor. */

.cc-carousel {
	--cc-arrow-size: 44px;
	--cc-arrow-icon: 28px;
	--cc-arrow-offset: 16px;
	--cc-arrow-gap: 4px;
	--cc-pag-color: #2b2924;
	--cc-pag-active: #2b2924;
	--cc-pag-align: flex-start;
	--cc-pag-inset: 20px;
	--cc-dot: 6px;
	--cc-dot-gap: 10px;
	--cc-dot-opacity: 0.25;
	--cc-pb-h: 1px;
	--cc-pb-track: rgba(43, 41, 36, 0.15);
	--cc-sb-h: 1px;
	--cc-sb-track: rgba(43, 41, 36, 0.12);
	--cc-sb-drag: #2b2924;
	--cc-sb-gap: 24px;
	--cc-bar-gap: 20px;
	--cc-kb-scale: 1.08;
	--cc-kb-duration: 8s;
	position: relative;
	width: 100%;
}

.cc-carousel .cc-stage {
	position: relative;
}

.cc-carousel .cc-swiper {
	width: 100%;
	margin: 0;
}

/* Default easing (overridden by the Easing control). */
.cc-carousel .cc-swiper > .swiper-wrapper {
	transition-timing-function: cubic-bezier(.22, .61, .36, 1);
}

.cc-carousel.cc-marquee .cc-swiper > .swiper-wrapper {
	transition-timing-function: linear !important;
}

/* Before Swiper initialises, avoid a flash of a tall stacked column. */
.cc-carousel:not(.cc-ready) .swiper-wrapper {
	overflow: hidden;
}

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

.cc-carousel .cc-slide {
	height: auto;
	box-sizing: border-box;
}

.cc-carousel.cc-auto-width .cc-slide {
	width: 360px;
}

.cc-carousel .cc-slide-inner {
	position: relative;
	display: block;
	height: 100%;
	color: inherit;
	text-decoration: none;
	transition: opacity .7s ease, transform .7s cubic-bezier(.22, .61, .36, 1);
}

.cc-carousel .cc-media {
	position: relative;
	overflow: hidden;
	isolation: isolate;
	/* keep rounded corners crisp during transforms */
	transform: translateZ(0);
}

.cc-carousel .cc-media img {
	display: block;
	width: 100%;
	height: auto;
	max-width: none;
	transition: transform 1.2s cubic-bezier(.22, .61, .36, 1), filter .7s ease;
}

.cc-carousel.cc-h--ratio .cc-media img,
.cc-carousel.cc-h--fixed .cc-media img {
	height: 100%;
	object-fit: cover;
}

.cc-carousel.cc-h--ratio .cc-media {
	aspect-ratio: 4 / 5;
}

.cc-carousel .cc-media::after {
	content: "";
	position: absolute;
	inset: 0;
	pointer-events: none;
	transition: background-color .6s ease;
	z-index: 1;
}

.cc-carousel.cc-vertical .cc-swiper {
	height: 600px;
}

/* Ken Burns — slow zoom on the active slide. */
.cc-carousel.cc-kenburns .swiper-slide-active .cc-media img {
	animation: cc-kenburns var(--cc-kb-duration) linear both;
}

@keyframes cc-kenburns {
	from { transform: scale(1); }
	to { transform: scale(var(--cc-kb-scale)); }
}

/* ---------------- Caption ---------------- */

.cc-carousel .cc-caption {
	position: absolute;
	inset: 0;
	z-index: 2;
	display: flex;
	flex-direction: column;
	justify-content: flex-end;
	align-items: flex-start;
	padding: 32px;
	box-sizing: border-box;
	color: #fff;
	pointer-events: none;
}

.cc-carousel .cc-caption-inner {
	max-width: 520px;
	pointer-events: auto;
}

.cc-carousel .cc-title {
	margin: 0 0 8px;
	font-size: 1.25rem;
	font-weight: 400;
	line-height: 1.35;
	letter-spacing: -0.01em;
	color: inherit;
}

.cc-carousel .cc-desc {
	margin: 0 0 16px;
	font-size: .9375rem;
	line-height: 1.7;
	opacity: .85;
	color: inherit;
}

.cc-carousel .cc-desc:last-child,
.cc-carousel .cc-title:last-child {
	margin-bottom: 0;
}

.cc-carousel .cc-button {
	display: inline-block;
	padding: 10px 0 4px;
	border-bottom: 1px solid currentColor;
	font-size: .8125rem;
	letter-spacing: .08em;
	color: inherit;
	transition: color .4s ease, background-color .4s ease, border-color .4s ease;
}

/* below the image */
.cc-carousel.cc-caption--below .cc-caption {
	position: relative;
	inset: auto;
	padding: 16px 0 0;
	color: inherit;
}

/* on hover */
.cc-carousel.cc-caption--hover .cc-caption {
	opacity: 0;
	transition: opacity .6s ease;
}
.cc-carousel.cc-caption--hover .cc-slide-inner:hover .cc-caption,
.cc-carousel.cc-caption--hover .cc-slide-inner:focus-visible .cc-caption {
	opacity: 1;
}

/* only on the active slide */
.cc-carousel.cc-caption--active .cc-caption {
	opacity: 0;
	transform: translateY(12px);
	transition: opacity .8s ease .15s, transform .8s cubic-bezier(.22, .61, .36, 1) .15s;
}
.cc-carousel.cc-caption--active .swiper-slide-active .cc-caption {
	opacity: 1;
	transform: none;
}

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

.cc-carousel .cc-arrow {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	box-sizing: border-box;
	width: var(--cc-arrow-size);
	height: var(--cc-arrow-size);
	margin: 0;
	padding: 0;
	border: 0 solid transparent;
	border-radius: 0;
	background: transparent;
	color: #2b2924;
	font-size: var(--cc-arrow-icon);
	line-height: 1;
	cursor: pointer;
	z-index: 5;
	transition: color .4s ease, background-color .4s ease, border-color .4s ease, opacity .4s ease, transform .4s ease;
	-webkit-tap-highlight-color: transparent;
}

.cc-carousel .cc-arrow:hover {
	background: transparent;
}

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

.cc-carousel .cc-arrow svg {
	width: var(--cc-arrow-icon);
	height: auto;
	max-height: var(--cc-arrow-icon);
}

.cc-carousel .cc-arrow svg:not(.cc-arrow-default) {
	fill: currentColor;
}

.cc-carousel .cc-arrow i {
	font-size: var(--cc-arrow-icon);
}

.cc-carousel .cc-arrow-default {
	overflow: visible;
}

.cc-carousel .cc-prev:hover .cc-arrow-default { transform: translateX(-3px); }
.cc-carousel .cc-next:hover .cc-arrow-default { transform: translateX(3px); }
.cc-carousel .cc-arrow-default { transition: transform .4s cubic-bezier(.22, .61, .36, 1); }

.cc-carousel .cc-arrow.cc-disabled {
	opacity: .25;
	cursor: default;
	pointer-events: none;
}

.cc-carousel .cc-arrow.cc-locked,
.cc-carousel .cc-pagination.cc-locked,
.cc-carousel .cc-scrollbar.cc-locked {
	display: none;
}

.cc-carousel .cc-arrow-group {
	display: inline-flex;
	align-items: center;
	gap: var(--cc-arrow-gap);
	flex-shrink: 0;
}

/* inside: over the image, vertically centred */
.cc-carousel.cc-arrows--inside .cc-stage > .cc-arrow {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	color: #fff;
}
.cc-carousel.cc-arrows--inside .cc-stage > .cc-prev { left: var(--cc-arrow-offset); }
.cc-carousel.cc-arrows--inside .cc-stage > .cc-next { right: var(--cc-arrow-offset); }

/* outside: in the gutter beside the image */
.cc-carousel.cc-arrows--outside .cc-stage {
	padding: 0 calc(var(--cc-arrow-size) + var(--cc-arrow-offset));
}
.cc-carousel.cc-arrows--outside .cc-stage > .cc-arrow {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
}
.cc-carousel.cc-arrows--outside .cc-stage > .cc-prev { left: 0; }
.cc-carousel.cc-arrows--outside .cc-stage > .cc-next { right: 0; }

/* top-right */
.cc-carousel .cc-topbar {
	display: flex;
	justify-content: flex-end;
	margin-bottom: var(--cc-arrow-offset);
}

/* ---------------- Bottom bar (pagination + arrows) ---------------- */

.cc-carousel .cc-bar {
	display: flex;
	align-items: center;
	justify-content: var(--cc-pag-align);
	gap: 24px;
	margin-top: var(--cc-bar-gap);
	min-height: var(--cc-arrow-size);
}

.cc-carousel.cc-arrows--bottom-right .cc-bar,
.cc-carousel.cc-arrows--bottom-left .cc-bar {
	justify-content: space-between;
}
.cc-carousel.cc-arrows--bottom-right .cc-bar > .cc-arrow-group:only-child { margin-left: auto; }
.cc-carousel.cc-arrows--bottom-left .cc-bar { flex-direction: row-reverse; }
.cc-carousel.cc-arrows--bottom-left .cc-bar > .cc-arrow-group:only-child { margin-right: auto; }

.cc-carousel.cc-arrows--bottom-center .cc-bar {
	justify-content: center;
	gap: 16px;
}

/* ---------------- Pagination ---------------- */

.cc-carousel .cc-pagination {
	display: flex;
	align-items: center;
	justify-content: var(--cc-pag-align);
	gap: var(--cc-dot-gap);
	color: var(--cc-pag-color);
	font-size: .75rem;
	letter-spacing: .12em;
	font-variant-numeric: tabular-nums;
	line-height: 1;
	transform: none;
}

.cc-carousel .cc-pagination--outside {
	position: relative;
	flex: 1 1 auto;
	min-width: 0;
}

.cc-carousel.cc-arrows--bottom-center .cc-pagination--outside {
	flex: 0 1 auto;
}

.cc-carousel .cc-pagination--inside {
	position: absolute;
	left: var(--cc-pag-inset);
	right: var(--cc-pag-inset);
	bottom: var(--cc-pag-inset);
	z-index: 4;
	--cc-pag-color: #fff;
	--cc-pag-active: #fff;
	--cc-pb-track: rgba(255, 255, 255, .3);
}

/* bullets */
.cc-carousel .cc-pagination .swiper-pagination-bullet {
	width: var(--cc-dot);
	height: var(--cc-dot);
	margin: 0 !important;
	border-radius: 999px;
	background: var(--cc-pag-color);
	opacity: var(--cc-dot-opacity);
	transition: width .5s cubic-bezier(.22, .61, .36, 1), opacity .4s ease, background-color .4s ease;
	flex-shrink: 0;
}
.cc-carousel .cc-pagination .swiper-pagination-bullet-active {
	width: var(--cc-dot-active-w, var(--cc-dot));
	background: var(--cc-pag-active);
	opacity: 1;
}

.cc-carousel .cc-pagination button.swiper-pagination-bullet {
	appearance: none;
	border: 0;
	padding: 0;
	cursor: pointer;
	font: inherit;
}
.cc-carousel .cc-pagination button.cc-num {
	padding: 4px 0;
	border-bottom: 1px solid transparent;
}
.cc-carousel .cc-pagination button.cc-num.swiper-pagination-bullet-active {
	border-bottom-color: currentColor;
}
.cc-carousel .cc-pagination .swiper-pagination-bullet:focus-visible {
	outline: 1px solid var(--cc-pag-active);
	outline-offset: 3px;
}

/* dynamic bullets: Swiper positions them absolutely with transforms */
.cc-carousel.cc-pag-type--dynamic .cc-pagination {
	display: block;
	gap: 0;
	overflow: hidden;
	white-space: nowrap;
	font-size: 0;
}
.cc-carousel.cc-pag-type--dynamic .cc-pagination .swiper-pagination-bullet {
	display: inline-block;
	margin: 0 calc(var(--cc-dot-gap) / 2) !important;
	position: relative;
	transition: transform .3s ease, left .3s ease, opacity .3s ease;
}
.cc-carousel.cc-pag-type--dynamic .cc-pagination--outside {
	flex: 0 0 auto;
}

/* numbers */
.cc-carousel .cc-pagination .cc-num {
	width: auto;
	height: auto;
	padding: 4px 0;
	border-radius: 0;
	background: none;
	color: var(--cc-pag-color);
	font: inherit;
	letter-spacing: inherit;
	border-bottom: 1px solid transparent;
}
.cc-carousel .cc-pagination .cc-num.swiper-pagination-bullet-active {
	width: auto;
	background: none;
	color: var(--cc-pag-active);
	border-bottom-color: currentColor;
}

/* fraction */
.cc-carousel .cc-pagination.swiper-pagination-fraction {
	gap: .6em;
}
.cc-carousel .cc-pagination .swiper-pagination-current {
	color: var(--cc-pag-active);
}
.cc-carousel .cc-pagination .cc-frac-sep,
.cc-carousel .cc-pagination .swiper-pagination-total {
	opacity: .45;
}

/* progressbar */
.cc-carousel .cc-pagination.swiper-pagination-progressbar {
	display: block;
	height: var(--cc-pb-h);
	background: var(--cc-pb-track);
	overflow: hidden;
}
.cc-carousel .cc-pagination--inside.swiper-pagination-progressbar {
	top: auto;
	width: auto;
}
.cc-carousel .cc-pagination.swiper-pagination-progressbar .swiper-pagination-progressbar-fill {
	position: absolute;
	inset: 0;
	background: var(--cc-pag-active);
	transform-origin: left top;
}

/* ---------------- Scrollbar & autoplay bar ---------------- */

.cc-carousel .cc-scrollbar {
	position: relative;
	height: var(--cc-sb-h);
	margin-top: var(--cc-sb-gap);
	background: var(--cc-sb-track);
	border-radius: 0;
	touch-action: none;
}
.cc-carousel .cc-scrollbar .swiper-scrollbar-drag {
	height: 100%;
	background: var(--cc-sb-drag);
	border-radius: 0;
	cursor: grab;
}

.cc-carousel .cc-autoplay-bar {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	height: var(--cc-sb-h);
	background: var(--cc-sb-track);
	z-index: 4;
	pointer-events: none;
	overflow: hidden;
}
.cc-carousel .cc-autoplay-bar span {
	display: block;
	height: 100%;
	background: var(--cc-sb-drag);
	transform: scaleX(0);
	transform-origin: left center;
}

/* Stacked effects: only the front slide shows its caption. */
.cc-carousel.cc-effect--cards .cc-slide:not(.swiper-slide-active) .cc-caption,
.cc-carousel.cc-effect--fade .cc-slide:not(.swiper-slide-active) .cc-caption,
.cc-carousel.cc-effect--creative .cc-slide:not(.swiper-slide-active) .cc-caption {
	opacity: 0;
	visibility: hidden;
}
.cc-carousel.cc-effect--cards .cc-caption,
.cc-carousel.cc-effect--fade .cc-caption,
.cc-carousel.cc-effect--creative .cc-caption {
	transition: opacity .5s ease, visibility .5s;
}

/* Leave room for pagination sitting on top of the image. */
.cc-carousel:where(.cc-pag--inside:not(.cc-caption--below)) .cc-caption {
	padding-bottom: calc(var(--cc-pag-inset) + 40px);
}

/* Effects that stack slides need the slide box to be solid. */
.cc-carousel.cc-effect--cards .cc-slide,
.cc-carousel.cc-effect--cube .cc-slide,
.cc-carousel.cc-effect--flip .cc-slide {
	overflow: hidden;
}
.cc-carousel.cc-effect--cards .cc-swiper {
	overflow: visible;
}

/* ---------------- Mobile ---------------- */

@media (max-width: 767px) {
	.cc-carousel.cc-arrows-hide-mobile .cc-arrow,
	.cc-carousel.cc-arrows-hide-mobile .cc-topbar {
		display: none;
	}
	.cc-carousel.cc-arrows-hide-mobile.cc-arrows--outside .cc-stage {
		padding: 0;
	}
	.cc-carousel .cc-caption {
		padding: 20px;
	}
}

@media (prefers-reduced-motion: reduce) {
	.cc-carousel .cc-media img,
	.cc-carousel .cc-slide-inner,
	.cc-carousel .cc-caption {
		transition: none !important;
		animation: none !important;
	}
}
