.banner {
	min-height: 440px;
	padding-left: var(--section-px);
	padding-right: var(--section-px);
}

.banner:has(.banner__image-wrap) {
	padding-left: 0;
	padding-right: 0;
}

.banner--image-right:has(.banner__image-wrap) .banner__content {
	padding: var(--padding-lg) var(--section-px) var(--padding-lg) clamp(0px, calc(var(--section-px) - (100vw - var(--content-width-xl)) / 2), var(--section-px));
}

.banner--image-left:has(.banner__image-wrap) .banner__content {
	padding: var(--padding-lg) clamp(0px, calc(var(--section-px) - (100vw - var(--content-width-xl)) / 2), var(--section-px)) var(--padding-lg) var(--section-px);
}

.banner__content {
	padding: var(--padding-lg) 0 var(--padding-lg);
	max-width: var(--content-width-xl);
	margin: 0 auto;
	display: flex;
	flex-direction: column;
	justify-content: center;
}

.banner__image-wrap {
	overflow: hidden;
	display: flex;
}

.banner--image-left .banner__image-wrap {
	justify-self: flex-end;
}

.banner__image-wrap .banner__image {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
}

/* =====================================================================
   HALF — 2-column grid, image 50%
   ===================================================================== */

.banner:has(.banner__image-wrap--half) {
	display: grid;
	grid-template-columns: 1fr min(calc(var(--content-width-xl) / 2), 50%) min(calc(var(--content-width-xl) / 2), 50%) 1fr;
	align-items: stretch;
}

.banner:has(.banner__image-wrap--half) .banner__content {
	max-width: none;
	margin: 0;
}

.banner__image-wrap--half {
	grid-column: 1 / 3;
	align-items: center;
	justify-self: stretch;
	width: 100%;
	height: 100%;
}

.banner__image-wrap--half .banner__image {
	aspect-ratio: 16 / 9;
}

/* =====================================================================
   HALF-BLEND — content 50% in xl grid, image 70% absolute
   ===================================================================== */

.banner:has(.banner__image-wrap--half-blend) {
	display: grid;
	grid-template-columns: 1fr min(calc(var(--content-width-xl) / 2), 50%) min(calc(var(--content-width-xl) / 2), 50%) 1fr;
	align-items: stretch;
	position: relative;
	overflow: hidden;
}

.banner:has(.banner__image-wrap--half-blend) .banner__content {
	grid-column: 3 / 4;
	grid-row: 1;
	max-width: none;
	margin: 0;
	position: relative;
	z-index: 1;
}

@media ( min-width: 769px ) {
	.banner:has(.banner__image-wrap--half-blend) .banner__content h2 {
		white-space: nowrap;
	}
}

.banner__image-wrap--half-blend {
	position: absolute;
	top: 0;
	left: 0;
	width: 70%;
	height: 100%;
}

.banner:has(.banner__image-wrap--half-blend) .banner__spacer {
	grid-column: 1 / 3;
	grid-row: 1;
	aspect-ratio: 16 / 9;
	width: 100%;
}

/* =====================================================================
   PADDING — image with breathing room
   ===================================================================== */

.banner:has(.banner__image-wrap--padding) {
	display: grid;
	grid-template-columns: 1fr min(calc(var(--content-width-xl) / 2), 50%) min(calc(var(--content-width-xl) / 2), 50%) 1fr;
	align-items: center;
}

.banner--padding .banner__inner a {
	text-decoration-color: transparent;
}

.banner--padding .banner__inner a:hover {
	text-decoration-color: inherit;
}

.banner:has(.banner__image-wrap--padding) .banner__content {
	max-width: none;
	margin: 0;
}

.banner__image-wrap--padding {
	grid-column: 1 / 3;
	padding: calc(var(--section-px) * 0.65) var(--section-px);
	overflow: hidden;
	width: 100%;
	height: 100%;
}

.banner__image-wrap--padding .banner__image {
	height: auto;
	aspect-ratio: 16 / 9;
	max-width: 30.625rem; /* 46rem previously */
	margin-left: auto;
	align-self: center;
	transition: opacity 0.2s ease;
}

.banner__image-wrap--padding a:hover .banner__image {
	opacity: 0.8;
}

@media (max-width: 768px) {
	.mobile-pt0 {
		padding-bottom: 0;
	}
	.mobile-pb0 {
		padding-bottom: 0;
	}
}

/* =====================================================================
   BACKGROUND — full-bleed image behind content, content right-aligned
   ===================================================================== */

.banner:has(.banner__image-wrap--background) {
	padding: var(--padding-lg) var(--section-px) var(--padding-lg);
	position: relative;
	overflow: hidden;
}

.banner__image-wrap--background {
	position: absolute;
	inset: 0;
}

.banner:has(.banner__image-wrap--background) {
	min-height: 16rem;
}

.banner__image-wrap--background .banner__image {
	width: 100%;
	height: 100%;
}

.banner:has(.banner__image-wrap--background)::after {
	content: '';
	position: absolute;
	inset: 0;
	background: linear-gradient(270deg, rgba(26, 26, 78, 0.6) 42.43%, rgba(26, 26, 78, 0) 53.47%);
	pointer-events: none;
}

.banner:has(.banner__image-wrap--background) .banner__content {
	position: relative;
	z-index: 1;
	padding: 0;
	max-width: var(--content-width-xl);
	margin: 0 auto;
}

.banner:has(.banner__image-wrap--background) .banner__inner {
	max-width: 34rem;
	margin: 0 0 0 auto;
}

/* =====================================================================
   IMAGE — full-width image, fixed height, no content overlay
   ===================================================================== */

.banner:has(.banner__image-wrap--image) {
	min-height: 0;
	padding: 0;
}

.banner__image-wrap--image {
	width: 100%;
	height: 30rem;
	overflow: hidden;
}

.banner__image-wrap--image .banner__image {
	width: 100%;
	height: 100%;
	object-fit: cover;
	object-position: center;
	display: block;
}

.banner--image .banner__content {
	display: none;
}

.banner__bookmark-icon {
	float: right;
	margin: 0.25rem 0 1rem 1rem !important;
	display: block;
	color: var(--grey);
}

/* =====================================================================
   TEXT COLOR — ensure links inherit the banner's configured text color
   ===================================================================== */

.banner a {
	color: inherit;
}

/* =====================================================================
   FILTER EFFECTS
   ===================================================================== */

.banner__image--luminosity {
	mix-blend-mode: luminosity;
}

.banner__image--soft-light {
	mix-blend-mode: soft-light;
}

/* =====================================================================
   IMAGE RIGHT — reverse grid placement for all styles
   ===================================================================== */

.banner--image-right .banner__image-wrap--half {
	grid-column: 3 / 5;
	grid-row: 1;
}

.banner--image-right.banner:has(.banner__image-wrap--half) .banner__content {
	grid-column: 2 / 3;
	grid-row: 1;
}

.banner--image-right .banner__image-wrap--padding {
	grid-column: 3 / 5;
	grid-row: 1;
	width: 100%;
	height: 100%;
}

.banner--image-right .banner__image-wrap--padding .banner__image {
	margin-left: 0;
	margin-right: auto;
}

.banner--image-right.banner:has(.banner__image-wrap--padding) .banner__content {
	grid-column: 2 / 3;
	grid-row: 1;
}

.banner--image-right .banner__image-wrap--half-blend {
	left: auto;
	right: 0;
}

.banner--image-right.banner:has(.banner__image-wrap--half-blend) .banner__content {
	grid-column: 2 / 3;
}

@media (max-width: 1920px) {
	.banner {
		min-height: 300px;
	}
}

@media (min-width: 1201px) {
	.banner,
	.banner__spacer,
	.banner__content {
		max-height: 36rem;
	}

	/* Firefox fix */
	.banner:has(.banner__image-wrap) {
		grid-template-rows: minmax(0, 36rem);
	}
}

/* =====================================================================
   TABLET
   ===================================================================== */

@media (min-width: 769px) and (max-width: 1200px) {
	.banner {
		min-height: 200px;
	}

	.banner__image-wrap--padding {
		aspect-ratio: auto;
		align-self: stretch;
		padding: var(--section-px);
	}

	.banner__image-wrap--image {
		height: 20rem;
	}

}

/* =====================================================================
   MOBILE — stack image above content for all styles
   ===================================================================== */

@media (max-width: 768px) {
	.banner:has(.banner__image-wrap--half),
	.banner:has(.banner__image-wrap--half-blend),
	.banner:has(.banner__image-wrap--padding) {
		display: block;
		position: static;
		overflow: visible;
	}

	.banner:has(.banner__image-wrap--background) {
		display: block;
		position: static;
		overflow: visible;
		padding: 0;
	}

	.banner:has(.banner__image-wrap--half) .banner__content,
	.banner:has(.banner__image-wrap--half-blend) .banner__content,
	.banner:has(.banner__image-wrap--padding) .banner__content {
		max-width: var(--content-width-lg);
		margin: 0 auto;
	}

	.banner__spacer {
		display: none;
	}

	.banner:has(.banner__image-wrap--background) .banner__content {
		max-width: none;
		margin: 0;
		padding: var(--padding-lg) var(--section-px) var(--padding-lg);
	}

	.banner:has(.banner__image-wrap--background)::after {
		display: none;
	}

	.banner__image-wrap--half,
	.banner__image-wrap--half-blend {
		position: static;
		grid-column: auto;
		grid-row: auto;
		width: 100%;
		margin: 0;
		padding: 0;
	}

	.banner__image-wrap--half .banner__image,
	.banner__image-wrap--half-blend .banner__image {
		height: auto;
	}

	.banner__image-wrap--background {
		position: static;
		aspect-ratio: 2 / 1;
		width: 100%;
		overflow: hidden;
	}

	.banner__image-wrap--background .banner__image {
		height: 100%;
	}

	.banner__image-wrap--padding {
		position: static;
		grid-column: auto;
		grid-row: auto;
		aspect-ratio: auto;
		width: 100%;
		margin: 0;
		padding: 0;
	}

	.banner__image-wrap--padding .banner__image {
		width: calc(100% - 2 * var(--section-px));
		margin: var(--section-px) auto var(--section-px) var(--section-px);
		height: auto;
	}

	.banner--image-right .banner__image-wrap--padding .banner__image {
		margin: var(--section-px);
	}

	.banner__image-wrap--image {
		height: auto;
		aspect-ratio: 2 / 1;
	}

	.banner--mobile-image-bottom:has(.banner__image-wrap--half),
	.banner--mobile-image-bottom:has(.banner__image-wrap--half-blend),
	.banner--mobile-image-bottom:has(.banner__image-wrap--padding) {
		display: flex;
		flex-direction: column-reverse;
	}
}

@media (max-width: 768px) {
	.banner--content-mobile-pb0 .banner__content {
		padding-bottom: 0 !important;
	}
}
