/**
 * Partner Network — front-end styles.
 *
 * Every rule is scoped to .pnw-root so the plugin cannot leak into the theme.
 * Colours, fonts and the horizontal gutter are exposed as custom properties;
 * override them in your theme, in Elementor's Custom CSS, or from the plugin's
 * Design settings tab.
 */
.pnw-root *,
.pnw-root *::before,
.pnw-root *::after {
	box-sizing: border-box;
}

.pnw-root {
	/* Palette */
	--pnw-paper: #F0EEE9;
	--pnw-ink: #13151C;
	--pnw-ink-60: rgba(19, 21, 28, .60);
	--pnw-ink-40: rgba(19, 21, 28, .40);
	--pnw-ink-30: rgba(19, 21, 28, .30);
	--pnw-ink-12: rgba(19, 21, 28, .12);
	--pnw-ink-05: rgba(19, 21, 28, .05);
	--pnw-accent-light: #8FCBCE;
	--pnw-accent: #5BA8AB;
	--pnw-accent-dark: #3F8A8B;
	--pnw-accent-hover: #377E7F;
	--pnw-accent-tint: rgba(63, 138, 139, .10);
	/* Type */
	--pnw-font-display: 'Archivo', sans-serif;
	--pnw-font-body: 'Inter', sans-serif;
	--pnw-font-mono: 'JetBrains Mono', monospace;
	/* Layout */
	--pnw-gutter: 56px;
	--pnw-columns: 6;
	--pnw-logo-height: 132px;
	--pnw-card-min-height: 172px;
	background: var(--pnw-paper);
	color: var(--pnw-ink);
	font-family: var(--pnw-font-body);
	font-size: 16px;
	line-height: 1.6;
	-webkit-font-smoothing: antialiased;
}

.pnw-root p {
	margin: 0;
}

/**
 * Own visually-hidden helper. Do not swap this for the theme's
 * .screen-reader-text: plenty of Elementor-first themes never define it, and
 * the hidden text then renders as visible copy inside the link.
 */
.pnw-root .pnw-sr-only {
	position: absolute !important;
	width: 1px;
	height: 1px;
	padding: 0;
	margin: -1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
	border: 0;
}

/* Optional ultra-wide inset, mirrors the original page behaviour. */
@media (min-width: 1600px) {
}
/* ---------------------------------------------------------------- tab rail */
.pnw-root .pnw-rail {
	border-top: 0.5px solid var(--pnw-ink-12);
	padding: 40px var(--pnw-gutter) 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 14px;
}

.pnw-root--no-rail-border .pnw-rail {
	border-top: none;
}

.pnw-root .pnw-rail-label {
	font-family: var(--pnw-font-mono);
	font-size: 11px;
	letter-spacing: .14em;
	text-transform: uppercase;
	color: var(--pnw-ink-30);
}

.pnw-root .pnw-tabbar {
	display: inline-flex;
	gap: 4px;
	padding: 5px;
	background: var(--pnw-ink-05);
	border: 0.5px solid var(--pnw-ink-12);
	border-radius: 999px;
}

.pnw-root .pnw-tab {
	appearance: none;
	-webkit-appearance: none;
	border: none;
	cursor: pointer;
	background: transparent;
	border-radius: 999px;
	padding: 13px 28px;
	display: inline-flex;
	align-items: center;
	gap: 10px;
	font-family: inherit;
	transition: background .22s ease, color .22s ease, box-shadow .22s ease;
}

.pnw-root .pnw-tab-text {
	font-family: var(--pnw-font-display);
	font-weight: 700;
	font-size: 15px;
	letter-spacing: -0.015em;
	color: var(--pnw-ink-60);
	white-space: nowrap;
	transition: color .22s ease;
}

.pnw-root .pnw-tab-count {
	font-family: var(--pnw-font-mono);
	font-size: 10.5px;
	letter-spacing: .04em;
	color: var(--pnw-ink-30);
	background: var(--pnw-paper);
	border: 0.5px solid var(--pnw-ink-12);
	border-radius: 999px;
	padding: 3px 9px;
	transition: color .22s ease, background .22s ease, border-color .22s ease;
}

.pnw-root .pnw-tab:hover {
	background: rgba(240, 238, 233, .7);
}

.pnw-root .pnw-tab:hover .pnw-tab-text {
	color: var(--pnw-ink);
}

.pnw-root .pnw-tab:focus-visible {
	outline: 2px solid var(--pnw-accent-dark);
	outline-offset: 2px;
}

.pnw-root .pnw-tab[aria-selected="true"] {
	background: var(--pnw-accent-dark);
	box-shadow: 0 2px 8px rgba(19, 21, 28, .12);
}

.pnw-root .pnw-tab[aria-selected="true"] .pnw-tab-text {
	color: var(--pnw-paper);
}

.pnw-root .pnw-tab[aria-selected="true"] .pnw-tab-count {
	color: var(--pnw-paper);
	background: rgba(240, 238, 233, .16);
	border-color: transparent;
}

/* -------------------------------------------------------- empty tab state */
.pnw-root .pnw-empty {
	padding: 44px var(--pnw-gutter) 88px;
	text-align: center;
}

.pnw-root .pnw-empty-arrow {
	display: block;
	font-family: var(--pnw-font-mono);
	font-size: 15px;
	color: var(--pnw-accent-dark);
	margin-bottom: 18px;
	animation: pnw-nudge 1.8s ease-in-out infinite;
}

.pnw-root .pnw-empty-msg {
	font-family: var(--pnw-font-display);
	font-weight: 800;
	font-size: clamp(20px, 2.3vw, 27px);
	letter-spacing: -0.03em;
	color: var(--pnw-ink);
	line-height: 1.3;
	max-width: 620px;
	margin: 0 auto 14px;
}

.pnw-root .pnw-empty-hint {
	font-size: 15px;
	font-weight: 300;
	color: var(--pnw-ink-60);
	max-width: 520px;
	margin: 0 auto;
	line-height: 1.7;
}

@keyframes pnw-nudge {
	0%, 100% {
		transform: translateY(0);
		opacity: .55;
	}
	50% {
		transform: translateY(-5px);
		opacity: 1;
	}
}
.pnw-root .pnw-panel[hidden],
.pnw-root .pnw-empty[hidden] {
	display: none !important;
}

.pnw-root .pnw-panel > .pnw-sect-head:first-child {
	border-top: none;
}

/* ---------------------------------------------------------- section blocks */
.pnw-root .pnw-sect-head {
	border-top: 0.5px solid var(--pnw-ink-12);
	padding: 56px var(--pnw-gutter) 28px;
	margin: 0;
}

.pnw-root .pnw-sect-title {
	font-family: var(--pnw-font-display);
	font-weight: 800;
	font-size: 26px;
	letter-spacing: -0.03em;
	color: var(--pnw-ink);
	line-height: 1.15;
	margin: 0;
}

.pnw-root .pnw-lead {
	font-family: var(--pnw-font-display);
	font-weight: 700;
	font-size: clamp(18px, 1.9vw, 22px);
	letter-spacing: -0.01em;
	line-height: 1.45;
	color: var(--pnw-accent-dark);
	padding: 0 var(--pnw-gutter);
	margin-bottom: 18px;
	max-width: 820px;
}

.pnw-root .pnw-body {
	padding: 0 var(--pnw-gutter);
	margin-bottom: 40px;
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 16px 48px;
	align-items: start;
}

.pnw-root .pnw-body p {
	font-size: 16px;
	font-weight: 300;
	color: var(--pnw-ink-60);
	line-height: 1.75;
}

.pnw-root .pnw-body p.is-full {
	grid-column: 1 / -1;
	max-width: 920px;
}

.pnw-root .pnw-chips {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	padding: 0 var(--pnw-gutter);
	margin-bottom: 44px;
}

.pnw-root .pnw-chip {
	font-family: var(--pnw-font-mono);
	font-size: 11px;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--pnw-ink-60);
	border: 0.5px solid var(--pnw-ink-12);
	border-radius: 2px;
	padding: 8px 15px;
}

.pnw-root .pnw-chip--lead {
	color: var(--pnw-accent-dark);
	border-color: var(--pnw-accent-dark);
}

/* ------------------------------------------------------- the partner grid */
.pnw-root .pnw-cat {
	padding: 0 var(--pnw-gutter) 40px;
}

.pnw-root .pnw-cat-title {
	font-family: var(--pnw-font-mono);
	font-size: 11px;
	letter-spacing: .12em;
	text-transform: uppercase;
	color: var(--pnw-ink-30);
	margin: 0 0 16px;
}

.pnw-root .pnw-grid {
	display: grid;
	grid-template-columns: repeat(var(--pnw-columns), 1fr);
	gap: 12px;
	align-items: stretch;
	grid-auto-rows: auto;
}

.pnw-root .pnw-card {
	display: flex;
	flex-direction: column;
	background: #fff;
	border: 0.5px solid var(--pnw-ink-12);
	border-radius: 14px;
	overflow: hidden;
	box-shadow: 0 2px 6px rgba(19, 21, 28, .04);
	transition: transform .28s cubic-bezier(.22, 1, .36, 1),
	            box-shadow .28s cubic-bezier(.22, 1, .36, 1),
	            border-color .28s ease;
}

.pnw-root .pnw-card:hover {
	background: #fff;
	border-color: var(--pnw-accent-dark);
	box-shadow: 0 18px 34px -16px rgba(19, 21, 28, .20),
	            0 4px 12px rgba(19, 21, 28, .06);
}

.pnw-root .pnw-card:not(.is-open):hover {
	transform: translateY(-6px);
}

/* The whole point of the interaction: an open card spans every column. */
.pnw-root .pnw-card.is-open {
	background: #fff;
	grid-column: 1 / -1;
	grid-row: auto;
	height: auto;
	align-self: start;
	border-color: var(--pnw-accent-dark);
	box-shadow: 0 22px 40px -18px rgba(19, 21, 28, .20),
	            0 4px 12px rgba(19, 21, 28, .06);
}

.pnw-root .pnw-trigger {
	appearance: none;
	-webkit-appearance: none;
	width: 100%;
	flex: 1;
	min-height: var(--pnw-card-min-height);
	background: transparent;
	border: none;
	cursor: pointer;
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 0;
	padding: 20px 18px;
	font-family: inherit;
	text-align: center;
	position: relative;
}

.pnw-root .pnw-trigger:focus-visible {
	outline: 2px solid var(--pnw-accent-dark);
	outline-offset: -4px;
}

/**
 * Page builders style bare <button> globally, and their hover rule wins on
 * specificity: Elementor's kit emits `.elementor-kit-123 button:hover`
 * (0,2,1), which outranks `.pnw-root .pnw-trigger` (0,2,0). The result is the
 * global button colour painted across the logo tile on hover, and again on
 * the focus a click leaves behind. Pinning every interactive state at (0,3,0)
 * settles it. Keep the state list intact when editing.
 */
.pnw-root .pnw-trigger,
.pnw-root .pnw-trigger:hover,
.pnw-root .pnw-trigger:focus,
.pnw-root .pnw-trigger:active,
.pnw-root .pnw-card:hover .pnw-trigger,
.pnw-root .pnw-card.is-open .pnw-trigger {
	background: transparent;
	border: 0;
	box-shadow: none;
	text-shadow: none;
	color: inherit;
}

/* Same story for the tabs: an unselected tab must not pick up the global
 * button colour just because it still holds focus after a click. */
.pnw-root .pnw-tab:focus,
.pnw-root .pnw-tab:active {
	background: transparent;
	box-shadow: none;
	text-shadow: none;
}

.pnw-root .pnw-tab[aria-selected="true"]:focus,
.pnw-root .pnw-tab[aria-selected="true"]:active {
	background: var(--pnw-accent-dark);
}

.pnw-root .pnw-logo {
	width: 100%;
	height: var(--pnw-logo-height);
	display: flex;
	align-items: center;
	justify-content: center;
}

.pnw-root .pnw-logo img {
	max-width: 100%;
	max-height: var(--pnw-logo-height);
	width: auto;
	height: auto;
	object-fit: contain;
	display: block;
}

/* Visually hidden partner name; JS un-hides it if the logo fails to load. */
.pnw-root .pnw-name {
	position: absolute;
	width: 1px;
	height: 1px;
	overflow: hidden;
	clip-path: inset(50%);
	white-space: nowrap;
}

.pnw-root .pnw-name.is-visible {
	position: static;
	width: auto;
	height: auto;
	overflow: visible;
	clip-path: none;
	white-space: normal;
	font-family: var(--pnw-font-display);
	font-weight: 700;
	font-size: 18px;
	color: var(--pnw-ink-60);
}

.pnw-root .pnw-toggle {
	position: absolute;
	top: 14px;
	right: 14px;
	width: 20px;
	height: 20px;
	border-radius: 50%;
	background: var(--pnw-accent-tint);
	display: flex;
	align-items: center;
	justify-content: center;
}

.pnw-root .pnw-toggle::before,
.pnw-root .pnw-toggle::after {
	content: '';
	position: absolute;
	background: var(--pnw-accent-dark);
	border-radius: 1px;
	transition: transform .22s cubic-bezier(.22, 1, .36, 1), opacity .22s ease;
}

.pnw-root .pnw-toggle::before {
	width: 9px;
	height: 1.4px;
}

.pnw-root .pnw-toggle::after {
	width: 1.4px;
	height: 9px;
}

.pnw-root .pnw-card.is-open .pnw-toggle::after {
	transform: rotate(90deg);
	opacity: 0;
}

/* 0fr -> 1fr animates to the content's natural height, no max-height hack. */
.pnw-root .pnw-detail {
	display: grid;
	grid-template-rows: 0fr;
	transition: grid-template-rows .3s cubic-bezier(.22, 1, .36, 1);
}

.pnw-root .pnw-card.is-open .pnw-detail {
	grid-template-rows: 1fr;
}

.pnw-root .pnw-detail-inner {
	overflow: hidden;
}

.pnw-root .pnw-card.is-open .pnw-detail-inner {
	padding: 24px 30px 28px;
	border-top: 0.5px solid var(--pnw-ink-12);
	margin-top: 2px;
}

.pnw-root .pnw-detail-title {
	display: none;
	font-family: var(--pnw-font-display);
	font-weight: 800;
	font-size: 20px;
	letter-spacing: -0.02em;
	color: var(--pnw-ink);
	margin: 0 0 10px;
}

.pnw-root .pnw-card.is-open .pnw-detail-title {
	display: block;
}

.pnw-root .pnw-detail-inner p {
	font-size: 15px;
	font-weight: 300;
	color: var(--pnw-ink-60);
	line-height: 1.75;
	max-width: 860px;
	margin-bottom: 18px;
}

.pnw-root .pnw-link {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	font-family: var(--pnw-font-body);
	font-size: 14px;
	font-weight: 500;
	color: var(--pnw-paper);
	background: var(--pnw-accent-dark);
	padding: 11px 20px;
	border-radius: 3px;
	text-decoration: none;
	transition: background .2s;
}

.pnw-root .pnw-link:hover,
.pnw-root .pnw-link:focus {
	background: var(--pnw-accent-hover);
	color: var(--pnw-paper);
}

/* --------------------------------------------------- featured carousel */
.pnw-root .pnw-carousel-wrap {
	padding: 0 var(--pnw-gutter) 8px;
}

.pnw-root .pnw-carousel {
	overflow: hidden;
	border: 0.5px solid var(--pnw-ink-12);
	border-radius: 14px;
	background: #fff;
}

.pnw-root .pnw-carousel-track {
	display: flex;
	align-items: center;
	flex-wrap: wrap;
	gap: 0;
}

/* The marquee only scrolls once there are enough logos to loop (see
 * SLIDES_BEFORE_LOOP in the JS) — that's the only case where the row must
 * stay a single non-wrapping line. Otherwise (the common case — a handful
 * of logos) the strip should wrap row-to-row just like the partner grid
 * does, so extra logos flow onto a new line instead of shrinking or being
 * clipped. */
.pnw-root .pnw-carousel.is-animated .pnw-carousel-track {
	flex-wrap: nowrap;
	animation: pnw-marquee var(--pnw-marquee-speed, 26s) linear infinite;
	width: max-content;
}

.pnw-root .pnw-slide {
	flex: 0 0 calc(100% / 3);
	min-width: calc(100% / 3);
	height: 150px;
	display: flex;
	align-items: center;
	justify-content: center;
	padding: 22px 26px;
	border-right: 0.5px solid var(--pnw-ink-12);
}

.pnw-root .pnw-slide a,
.pnw-root .pnw-slide > span {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 100%;
	height: 100%;
	text-decoration: none;
}

.pnw-root .pnw-slide img {
	max-width: 100%;
	max-height: 104px;
	width: auto;
	height: auto;
	object-fit: contain;
	display: block;
}

@keyframes pnw-marquee {
	from {
		transform: translateX(0);
	}
	to {
		transform: translateX(-50%);
	}
}
/* -------------------------------------------------------------- trust band */
/* -------------------------------------------------------------- responsive */
/* Viewport fallback for browsers without container-query support. The
 * container queries at the bottom of the file are the real source of truth;
 * these thresholds mirror them so both paths agree. */
@media (max-width: 1120px) { .pnw-root { --pnw-columns: 5; } }
@media (max-width: 940px)  { .pnw-root { --pnw-columns: 4; } }
@media (max-width: 740px)  { .pnw-root { --pnw-columns: 3; } }
@media (max-width: 560px)  { .pnw-root { --pnw-columns: 2; } }
@media (max-width: 420px)  { .pnw-root { --pnw-columns: 1; } }

@media (max-width: 960px) {
	.pnw-root .pnw-rail {
		padding-top: 32px;
	}

	.pnw-root .pnw-empty {
		padding: 32px var(--pnw-gutter) 40px;
	}

	.pnw-root .pnw-sect-head {
		padding-top: 48px;
		padding-bottom: 24px;
	}

	.pnw-root .pnw-body {
		grid-template-columns: 1fr;
	}

	.pnw-root .pnw-cat {
		padding-bottom: 32px;
	}

	.pnw-root .pnw-card.is-open .pnw-detail-inner {
		padding-left: 22px;
		padding-right: 22px;
	}

	.pnw-root .pnw-slide {
		flex-basis: 25%;
		min-width: 25%;
		height: 128px;
	}
}

@media (max-width: 560px) {
	.pnw-root .pnw-tabbar {
		display: grid;
		grid-template-columns: 1fr;
		width: 100%;
		border-radius: 14px;
	}

	.pnw-root .pnw-tab {
		border-radius: 10px;
		justify-content: space-between;
	}

	.pnw-root .pnw-slide {
		flex-basis: 100%;
		min-width: 100%;
	}
}

/* ------------------------------------------ container-aware breakpoints ---
 * The media queries above key off the viewport, which is the wrong reference
 * when the section sits inside a boxed container: on a 1920px screen inside
 * a 1140px container you get six columns crammed into 1140px. Where
 * container queries are supported, these take over and key off the section's
 * own width. Note the rules target descendants — a container query never
 * matches the container element itself.
 */
@supports (container-type: inline-size) {
	.pnw-root {
		container-type: inline-size;
		container-name: pnw;
	}

	@container pnw (max-width: 1120px) {
		.pnw-root .pnw-grid {
			--pnw-columns: 5;
		}
	}
	@container pnw (max-width: 940px) {
		.pnw-root .pnw-grid {
			--pnw-columns: 4;
		}
	}
	@container pnw (max-width: 740px) {
		.pnw-root .pnw-grid {
			--pnw-columns: 3;
		}
	}
	@container pnw (max-width: 560px) {
		.pnw-root .pnw-grid {
			--pnw-columns: 2;
		}
	}
	@container pnw (max-width: 420px) {
		.pnw-root .pnw-grid {
			--pnw-columns: 1;
		}
	}
	@container pnw (max-width: 960px) {
		.pnw-root .pnw-slide {
			flex-basis: 25%;
			min-width: 25%;
			height: 128px;
		}

	}
	@container pnw (max-width: 560px) {
		.pnw-root .pnw-tabbar {
			display: grid;
			grid-template-columns: 1fr;
			width: 100%;
			border-radius: 14px;
		}

		.pnw-root .pnw-tab {
			border-radius: 10px;
			justify-content: space-between;
		}

		.pnw-root .pnw-slide {
			flex-basis: 100%;
			min-width: 100%;
		}

	}
}
/* --------------------------------------------------------------- a11y prefs */
@media (prefers-reduced-motion: reduce) {
	.pnw-root *,
	.pnw-root *::before,
	.pnw-root *::after {
		animation-duration: .001ms !important;
		animation-iteration-count: 1 !important;
		transition-duration: .001ms !important;
	}

	.pnw-root .pnw-carousel.is-animated .pnw-carousel-track {
		animation: none;
		width: auto;
	}

}
