.nbs-slider {
	position: relative;
	width: 100%;
	max-width: 100%;
	/* Each banner can be any landscape ratio now. PHP sets the initial
	   ratio inline (from the first slide) to avoid a layout jump, and JS
	   updates it to match the active slide on every transition — so
	   whatever size image was uploaded is what's shown, at a perfect fit,
	   with no cropping and no letterboxing, on desktop and mobile alike. */
	height: auto;
	overflow: hidden;
	border-radius: 12px;
	background: #0b0b10;
	box-shadow: 0 12px 40px rgba(0, 0, 0, 0.35);
	isolation: isolate;
	transition: aspect-ratio var(--nbs-transition, 600ms) ease;
}

.nbs-slider .nbs-track {
	display: flex;
	width: 100%;
	height: 100%;
	transition: transform var(--nbs-transition, 600ms) cubic-bezier(0.65, 0, 0.35, 1);
	will-change: transform;
}

.nbs-slider .nbs-slide {
	flex: 0 0 100%;
	width: 100%;
	height: 100%;
	position: relative;
	background: #0b0b10;
}

.nbs-slider .nbs-slide a,
.nbs-slider .nbs-slide img {
	display: block;
	width: 100%;
	height: 100%;
}

.nbs-slider .nbs-slide img {
	width: 100%;
	height: 100%;
	/* The container is kept at the exact ratio of the active image, so
	   contain never crops and never leaves visible bars in practice —
	   it's just the safest choice for the split-second a resize/transition
	   is catching up, or for the offscreen (non-active) slides. */
	object-fit: contain;
	object-position: center;
	display: block;
}

.nbs-slider .nbs-slide a {
	outline: none;
}

/* subtle vignette so the arrows/dots stay legible on any image */
.nbs-slider::after {
	content: "";
	position: absolute;
	inset: 0;
	background: linear-gradient(180deg, rgba(0, 0, 0, 0.18) 0%, rgba(0, 0, 0, 0) 22%, rgba(0, 0, 0, 0) 78%, rgba(0, 0, 0, 0.35) 100%);
	pointer-events: none;
	z-index: 1;
}

.nbs-arrow {
	position: absolute;
	top: 50%;
	transform: translateY(-50%);
	z-index: 2;
	width: 42px;
	height: 42px;
	border: none;
	border-radius: 50%;
	background: rgba(15, 15, 20, 0.55);
	color: #f4f0ea;
	font-size: 16px;
	line-height: 1;
	cursor: pointer;
	display: flex;
	align-items: center;
	justify-content: center;
	backdrop-filter: blur(4px);
	transition: background 200ms ease, transform 200ms ease;
}

.nbs-arrow:hover {
	background: rgba(212, 175, 55, 0.85);
	color: #0b0b10;
	transform: translateY(-50%) scale(1.06);
}

.nbs-prev { left: 16px; }
.nbs-next { right: 16px; }

.nbs-dots {
	position: absolute;
	left: 50%;
	bottom: 16px;
	transform: translateX(-50%);
	z-index: 2;
	display: flex;
	gap: 8px;
}

.nbs-dot {
	width: 9px;
	height: 9px;
	border-radius: 50%;
	border: 1px solid rgba(244, 240, 234, 0.7);
	background: rgba(244, 240, 234, 0.25);
	cursor: pointer;
	padding: 0;
	transition: background 200ms ease, transform 200ms ease;
}

.nbs-dot.is-active,
.nbs-dot:hover {
	background: #d4af37;
	border-color: #d4af37;
	transform: scale(1.15);
}

@media (max-width: 782px) {
	.nbs-slider {
		/* aspect-ratio still comes from the active image, so mobile only
		   needs smaller chrome, not a different sizing strategy. */
		border-radius: 8px;
	}
	.nbs-arrow {
		width: 34px;
		height: 34px;
		font-size: 13px;
	}
}
