/* Valour Canada — base layer (container, button, shared primitives). Block-specific BEM rules follow below, one section per block. */

/* Full-bleed sections (e.g. .vc-archive-titlebar) use the 100vw/-50vw
   breakout trick, which overflows horizontally by the scrollbar's width when
   one is present. Clip it at the document level rather than fighting the
   scrollbar width in every full-bleed rule. Using `clip` (not `hidden`) —
   `overflow-x: hidden` forces the browser to compute `overflow-y: auto`,
   turning <html> into its own scroll container and breaking
   `position: sticky` everywhere on the page (e.g. .vc-resource-sidebar).
   `clip` doesn't trigger that pairing. */
html {
	overflow-x: clip;
	/* Reserve the scrollbar's width on every page (even short ones with no
	   visible scrollbar), so 100vw-based full-bleed sections (like
	   .vc-archive-layout--single) always measure consistently and don't
	   drift left/right by the scrollbar's width depending on page length. */
	scrollbar-gutter: stable;
}

.vc-container {
	max-width: var(--vc-content-max);
	margin-inline: auto;
	padding-inline: var(--vc-gutter);
}

@media (max-width: 1024px) {
	.vc-container {
		padding-inline: 40px;
	}
}

@media (max-width: 640px) {
	.vc-container {
		padding-inline: 20px;
	}
}

.vc-button {
	display: inline-flex;
	align-items: center;
	gap: var(--vc-button-gap);
	padding: var(--vc-button-padding-y) var(--vc-button-padding-x);
	border-radius: var(--vc-button-radius);
	font-family: var(--vc-font-display);
	font-size: var(--vc-size-label);
	line-height: 1;
	text-decoration: none;
	white-space: nowrap;
	transition: opacity 0.2s ease, background-color 0.2s ease, color 0.2s ease;
}

.vc-button:hover {
	opacity: 0.85;
}

.vc-button__icon {
	display: flex;
	align-items: center;
}

.vc-button__icon svg {
	width: 16px;
	height: 16px;
}

.vc-button--primary {
	background: var(--vc-color-crimson);
	color: var(--vc-color-white);
	/* Button labels are authored freely per-instance across the site (ACF
	   text fields) and land inconsistently — "Search", "subscribe", "LEARN
	   MORE" all exist today. `capitalize` only uppercases each word's first
	   letter and leaves the rest alone, so it can't force ALL-CAPS labels
	   down to Title Case, but it does normalize the lowercase/mixed ones
	   without touching content, giving consistent Capital Case typography
	   regardless of how an editor typed the label. */
	text-transform: capitalize;
}

/* Same specificity as the generic .vc-button:hover opacity-dim above (one
   class + one pseudo-class each) — placed after it in source order so this
   wins the tie and replaces the dim with a proper crimson→black swap instead
   of stacking a translucent black on top of crimson. background-color/color
   are already in .vc-button's transition list above, so this animates in
   smoothly rather than snapping. */
.vc-button--primary:hover,
.vc-button--primary:focus-visible {
	background: var(--vc-color-darkest);
	color: var(--vc-color-white);
	opacity: 1;
}

/* A primary button linking straight to a PDF gets the PDF icon before its
   label instead of the sitewide default — filled white rather than the
   usual crimson/red so it stays visible against both the button's own
   crimson rest-state and its black hover/focus background (see
   .vc-button--primary:hover above). Sits inside .vc-button's own
   `display: inline-flex; gap: ...` as the first flex item automatically —
   no extra layout rules needed. Specificity (2 classes + 1 attribute) beats
   the sitewide unscoped `a[href$=".pdf"]::before` at the end of this file
   outright, so nothing bleeds through from that rule. */
.vc-button.vc-button--primary[href$=".pdf"]::before {
	content: "";
	display: inline-block;
	width: 16px;
	height: 16px;
	background-image: url("data:image/svg+xml,%3Csvg%20width%3D%22800%22%20height%3D%22800%22%20viewBox%3D%22-4%200%2040%2040%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M25.669%2026.096c-.488.144-1.203.16-1.97.049a9.4%209.4%200%200%201-2.49-.742c1.473-.214%202.615-.148%203.592.198.23.082.611.301.868.495m-8.214-1.35-.177.048c-.396.108-.782.213-1.153.306l-.501.127a66%2066%200%200%200-3.055.826c.387-.932.746-1.875%201.098-2.797.26-.682.526-1.379.801-2.067q.21.345.437.692a13.5%2013.5%200%200%200%202.55%202.865m-2.562-10.513c.065%201.15-.183%202.257-.547%203.318-.449-1.312-.658-2.762-.097-3.932.144-.3.261-.46.338-.545.118.183.273.59.306%201.159m-5.26%2014.572q-.378.675-.772%201.272c-.637.958-1.677%201.985-2.212%201.985-.052%200-.116-.008-.209-.107-.06-.062-.07-.107-.066-.169.018-.352.485-.98%201.161-1.562a11.4%2011.4%200%200%201%202.098-1.419m17.738-2.659c-.082-1.174-2.059-1.927-2.078-1.934-.764-.271-1.594-.403-2.538-.403-1.01%200-2.098.146-3.497.473a12.2%2012.2%200%200%201-3.122-3.209%2020%2020%200%200%201-.951-1.605c.678-1.623%201.29-3.367%201.178-5.32-.09-1.566-.796-2.618-1.756-2.618-.659%200-1.226.488-1.688%201.451-.822%201.718-.606%203.915.643%206.537a92%2092%200%200%200-1.272%203.213c-.504%201.319-1.023%202.68-1.607%203.973-1.64.65-2.987%201.436-4.109%202.402-.735.631-1.622%201.597-1.672%202.605-.025.474.138.91.468%201.258.352.37.793.566%201.279.566%201.603%200%203.146-2.202%203.439-2.644a24%2024%200%200%200%201.68-3.021c1.361-.492%202.811-.859%204.217-1.214l.503-.128a68%2068%200%200%200%201.175-.313c.427-.115.867-.235%201.313-.349%201.443.918%202.995%201.517%204.51%201.737%201.274.185%202.406.078%203.173-.322.69-.36.728-.913.712-1.135m3.105%2010.097c0%202.15-1.896%202.283-2.278%202.287H3.745c-2.143%200-2.272-1.908-2.276-2.287V3.756c0-2.152%201.899-2.283%202.276-2.287h16.518l.009.009v6.446c0%201.294.782%203.743%203.744%203.743h6.404l.055.055zm-1.519-26.045h-4.94c-2.142%200-2.272-1.898-2.275-2.274v-4.97zm2.988%2026.045V11.116L21.742.87V.823h-.048L20.874%200H3.744C2.45%200%200%20.785%200%203.757v32.487C0%2037.543.783%2040%203.745%2040H28.2c1.295%200%203.745-.786%203.745-3.757%22%20fill%3D%22%23ffffff%22/%3E%3C/svg%3E");
	background-size: contain;
	background-repeat: no-repeat;
	background-position: center;
	flex-shrink: 0;
}

.vc-button--secondary {
	background: var(--vc-color-white);
	color: var(--vc-color-near-black);
}

/* Similar to .vc-button--primary's style (radius, capitalize, crimson-style
   hover swap — using its own mid-gray→black rather than crimson→black since
   the rest state here is mid-gray, not crimson) — kept its own compact
   tag-style padding/font-size rather than adopting --primary's, same reason
   as .vc-linkgroups__btn/.vc-resource-sidebar__donate-banner: this renders
   as many small pills in a row (VC Resource Library file links), not a
   standalone CTA. */
/* Rest state matches .vc-button--primary's crimson exactly (was mid-gray)
   per correction 2026-08-12. */
.vc-button--tag {
	font-family: var(--vc-font-body);
	font-size: var(--vc-size-caption);
	padding: 10px 16px;
	background: var(--vc-color-crimson);
	color: var(--vc-color-white);
	border-radius: var(--vc-button-radius);
	text-transform: capitalize;
	transition: background-color 0.2s ease, color 0.2s ease;
}

.vc-button--tag:hover,
.vc-button--tag:focus-visible {
	background: var(--vc-color-darkest);
	color: var(--vc-color-white);
}

/* Same treatment as .vc-button--primary above — most of these tag pills
   link straight to a downloadable file (VC Resource Library), so a PDF
   link gets the icon before its label, filled white to stay visible
   against both the crimson rest state and the black hover state. */
.vc-button.vc-button--tag[href$=".pdf"]::before {
	content: "";
	display: inline-block;
	width: 16px;
	height: 16px;
	background-image: url("data:image/svg+xml,%3Csvg%20width%3D%22800%22%20height%3D%22800%22%20viewBox%3D%22-4%200%2040%2040%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M25.669%2026.096c-.488.144-1.203.16-1.97.049a9.4%209.4%200%200%201-2.49-.742c1.473-.214%202.615-.148%203.592.198.23.082.611.301.868.495m-8.214-1.35-.177.048c-.396.108-.782.213-1.153.306l-.501.127a66%2066%200%200%200-3.055.826c.387-.932.746-1.875%201.098-2.797.26-.682.526-1.379.801-2.067q.21.345.437.692a13.5%2013.5%200%200%200%202.55%202.865m-2.562-10.513c.065%201.15-.183%202.257-.547%203.318-.449-1.312-.658-2.762-.097-3.932.144-.3.261-.46.338-.545.118.183.273.59.306%201.159m-5.26%2014.572q-.378.675-.772%201.272c-.637.958-1.677%201.985-2.212%201.985-.052%200-.116-.008-.209-.107-.06-.062-.07-.107-.066-.169.018-.352.485-.98%201.161-1.562a11.4%2011.4%200%200%201%202.098-1.419m17.738-2.659c-.082-1.174-2.059-1.927-2.078-1.934-.764-.271-1.594-.403-2.538-.403-1.01%200-2.098.146-3.497.473a12.2%2012.2%200%200%201-3.122-3.209%2020%2020%200%200%201-.951-1.605c.678-1.623%201.29-3.367%201.178-5.32-.09-1.566-.796-2.618-1.756-2.618-.659%200-1.226.488-1.688%201.451-.822%201.718-.606%203.915.643%206.537a92%2092%200%200%200-1.272%203.213c-.504%201.319-1.023%202.68-1.607%203.973-1.64.65-2.987%201.436-4.109%202.402-.735.631-1.622%201.597-1.672%202.605-.025.474.138.91.468%201.258.352.37.793.566%201.279.566%201.603%200%203.146-2.202%203.439-2.644a24%2024%200%200%200%201.68-3.021c1.361-.492%202.811-.859%204.217-1.214l.503-.128a68%2068%200%200%200%201.175-.313c.427-.115.867-.235%201.313-.349%201.443.918%202.995%201.517%204.51%201.737%201.274.185%202.406.078%203.173-.322.69-.36.728-.913.712-1.135m3.105%2010.097c0%202.15-1.896%202.283-2.278%202.287H3.745c-2.143%200-2.272-1.908-2.276-2.287V3.756c0-2.152%201.899-2.283%202.276-2.287h16.518l.009.009v6.446c0%201.294.782%203.743%203.744%203.743h6.404l.055.055zm-1.519-26.045h-4.94c-2.142%200-2.272-1.898-2.275-2.274v-4.97zm2.988%2026.045V11.116L21.742.87V.823h-.048L20.874%200H3.744C2.45%200%200%20.785%200%203.757v32.487C0%2037.543.783%2040%203.745%2040H28.2c1.295%200%203.745-.786%203.745-3.757%22%20fill%3D%22%23ffffff%22/%3E%3C/svg%3E");
	background-size: contain;
	background-repeat: no-repeat;
	background-position: center;
	flex-shrink: 0;
}

.vc-eyebrow {
	font-family: var(--vc-font-body);
	font-weight: 500;
	font-size: var(--vc-size-caption);
	letter-spacing: var(--vc-letter-spacing-eyebrow);
	text-transform: uppercase;
	color: var(--vc-color-mid-gray);
}

.vc-section-heading {
	font-family: var(--vc-font-display);
	font-size: var(--vc-size-h2);
	color: var(--vc-color-near-black);
	text-align: center;
	margin-bottom: 40px;
}

.vc-section--alt {
	background: var(--vc-color-light-gray);
}

[data-aos] {
	transition-property: opacity, transform;
}

@media (prefers-reduced-motion: reduce) {
	[data-aos] {
		transition: none !important;
		transform: none !important;
		opacity: 1 !important;
	}
}

/* ==========================================================================
   .vc-header
   ========================================================================== */

/* Sticky at every breakpoint. `top: 0` assumes no admin bar; WordPress adds
   its own `admin-bar` body class when one is showing, so the override below
   drops the header just under it instead of behind it (its own CSS shrinks
   the bar to 46px under 783px, matching the breakpoint used here).
   `overflow-anchor: none` stops the browser's scroll-anchoring from treating
   this element as the page's anchor node: .vc-header sits at the very top of
   the document and its own height shrinks on scroll (the slim-on-scroll
   effect below), which is exactly the shape scroll anchoring watches for —
   without this, the browser "corrects" scrollTop by the shrink delta on top
   of the CSS height transition, producing the abrupt snap/jump Mohiz
   reported instead of the intended smooth 0.25s shrink. */
.vc-header {
	position: sticky;
	top: 0;
	z-index: 300;
	overflow-anchor: none;
}

body.admin-bar .vc-header {
	top: 32px;
}

@media (max-width: 782px) {
	body.admin-bar .vc-header {
		top: 46px;
	}
}

.vc-header__utility {
	background: var(--vc-color-near-black);
}

.vc-header__utility-inner {
	display: flex;
	align-items: center;
	gap: 24px;
	height: 100px;
}

.vc-header__logo img,
.vc-header__logo-text {
	display: block;
	color: var(--vc-color-white);
	font-family: var(--vc-font-display);
	font-size: 1.25rem;
}

.vc-header__search {
	display: flex;
	align-items: center;
	background: var(--vc-color-mid-gray);
	border-radius: 8px;
	padding-left: 24px;
	flex: 1;
	max-width: none;
	overflow: hidden;
}

/* Compound selector alone (0,2,0) already out-specifies WP core's
   global-styles-inline-css `input[type="search"]` rule (0,1,1) and
   GeneratePress's own `input[type="search"], ...` form-field rule, but
   `!important` on color is kept too — this exact fight (typed text turning
   the theme's default near-black instead of white against the dark header
   bar) has already recurred once after a GP/core styles update reshuffled
   selector order, so don't rely on specificity margins alone here. */
.vc-header__search .vc-header__search-input {
	appearance: none;
	-webkit-appearance: none;
	background: transparent;
	border: 0;
	border-radius: 0;
	color: var(--vc-color-white) !important;
	font-family: var(--vc-font-body);
	font-size: var(--vc-size-body);
	flex: 1;
	padding: 12px 0;
}

.vc-header__search .vc-header__search-input:focus {
	background: transparent;
	border: 0;
	outline: none;
	box-shadow: none;
}

.vc-header__search .vc-header__search-input:-webkit-autofill,
.vc-header__search .vc-header__search-input:-webkit-autofill:hover,
.vc-header__search .vc-header__search-input:-webkit-autofill:focus {
	-webkit-text-fill-color: var(--vc-color-white);
	-webkit-box-shadow: 0 0 0 1000px var(--vc-color-mid-gray) inset;
	box-shadow: 0 0 0 1000px var(--vc-color-mid-gray) inset;
	caret-color: var(--vc-color-white);
	transition: background-color 5000s ease-in-out 0s;
}

.vc-header__search-input::placeholder {
	color: rgba(255, 255, 255, 0.5);
}

.vc-header__search-input::-webkit-search-decoration,
.vc-header__search-input::-webkit-search-cancel-button,
.vc-header__search-input::-webkit-search-results-button,
.vc-header__search-input::-webkit-textfield-decoration-container {
	-webkit-appearance: none;
	appearance: none;
	background: transparent;
}

.vc-header__search-btn {
	width: 48px;
	height: 48px;
	background: var(--vc-color-white);
	border: 0;
	color: var(--vc-color-near-black);
	display: flex;
	align-items: center;
	justify-content: center;
	cursor: pointer;
	flex-shrink: 0;
}

.vc-header__search-btn:hover,
.vc-header__search-btn:focus {
	background: var(--vc-color-white) !important;
	color: var(--vc-color-near-black) !important;
	outline: none;
	box-shadow: none;
}

.vc-header__search-btn svg,
.vc-header__search-btn:hover svg,
.vc-header__search-btn:focus svg {
	width: 22px !important;
	height: 22px !important;
	min-width: 22px !important;
	min-height: 22px !important;
	flex-shrink: 0;
	display: block;
	stroke: currentColor;
	position: static;
	top: auto;
}

.vc-header__utility-links {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: 24px;
	margin-left: auto;
}

.vc-header__utility-links a {
	color: rgba(255, 255, 255, 0.5);
	font-family: var(--vc-font-body);
	font-size: var(--vc-size-body);
	text-decoration: none;
}

.vc-header__lang {
	position: relative;
	display: flex;
	align-items: center;
}

/* Prisna WP Translate renders no working widget/shortcode output in this
   version — its only functional control is the node it auto-injects into
   wp_footer as `position: absolute; top/right: 10px` against <body> (for its
   floating "xy" placement). initHeaderLangSwitcher() in site.js relocates
   that real node into .vc-header__lang so the actual plugin-driven EN/FR
   control lives in the header instead of floating loose over the page.
   Plain `.vc-header__lang .prisna-wp-translate-container { position: relative }`
   isn't enough to neutralize the floating placement: translator-s.css itself
   (not just its runtime-injected <style> tag) carries same-specificity
   `!important` rules —
     .prisna-wp-translate-layout-dropdown.prisna-wp-translate-container-fixed { position: absolute !important; }
     .prisna-wp-translate-floating-left.prisna-wp-translate-layout-dropdown { float: left !important; }
     .prisna-translator.prisna-wp-translate-container-fixed { top/right: 10px !important; }
   — two `!important` rules of equal specificity resolve by source order, and
   translator-s.css loads after this stylesheet, so it silently won and left
   the control `position: absolute; left: -46px`, collapsing .vc-header__lang
   to 0×0 (absolutely-positioned children don't size their parent) and
   pushing the pill off to the left of the header. Matching their exact class
   chains, scoped under our ancestor, adds one extra class of specificity so
   these win instead. */
.vc-header__lang .prisna-translator.prisna-wp-translate-container-fixed,
.vc-header__lang .prisna-wp-translate-layout-dropdown.prisna-wp-translate-container-fixed {
	position: relative !important;
	top: auto !important;
	right: auto !important;
	left: auto !important;
	float: none !important;
	height: auto !important;
}

.vc-header__lang .prisna-wp-translate-floating-left.prisna-wp-translate-layout-dropdown {
	float: none !important;
}

/* translator-s.css also hardcodes `.prisna-wp-translate-container { height:
   19px !important }` and `.prisna-wp-translate-sub-container { height: 19px
   !important }` — sized for Prisna's original compact 19px-tall control. We
   pad `.prisna-wp-translate-body` out to a 32px pill below, but these two
   ancestors keep clamping themselves to the old 19px, so the padded pill
   overflows past its own container's bottom edge instead of being centered
   by .vc-header__utility-links' `align-items: center` — the box that
   align-items actually measures is only 19px tall even though the visible
   pill inside it is 32px. Letting both ancestors size to `auto` (i.e. to
   the pill's real height) fixes the measurement so centering has the right
   box to work with. */
.vc-header__lang .prisna-wp-translate-container,
.vc-header__lang .prisna-wp-translate-sub-container {
	height: auto !important;
}

/*
 * Prisna DOM → old .vc-header__lang-pill / .vc-header__lang-list visual
 * contract mapping (operator-supplied target values):
 *   .prisna-wp-translate-body            → plays the .vc-header__lang-pill role
 *     (the clickable box: flex/gap/bg/color/radius/padding/font/cursor)
 *   .prisna-wp-translate-current-language-arrow → plays the .vc-header__lang-arrow role
 *     (Prisna draws it as a CSS border-triangle, not a ▾ glyph — kept as-is,
 *     just repositioned to sit inside the pill's new padding)
 *   .prisna-wp-translate-languages-list  → plays the .vc-header__lang-list role
 *     (the dropdown: position/spacing/bg/radius/shadow/transition/z-index)
 *
 * translator-s.css forces every property below with `!important` at 1-2
 * classes of specificity (`.prisna-wp-translate-body`, `.prisna-wp-translate-
 * current-language`, `.prisna-wp-translate-languages-list`, etc.) — matching
 * those exact classes plus our .vc-header__lang ancestor keeps every override
 * below winning regardless of stylesheet load order, same pattern as above.
 */
.vc-header__lang .prisna-translator.prisna-wp-translate-layout-dropdown .prisna-wp-translate-body {
	display: flex !important;
	align-items: center !important;
	gap: 4px !important;
	height: auto !important;
	padding: 6px 12px !important;
	background: rgba(247, 247, 247, 0.2) !important;
	border: 0 !important;
	border-radius: 8px;
	box-shadow: none !important;
	cursor: pointer;
}

/* Prisna repaints .prisna-wp-translate-body white and dark-text once open
   (its own "merge with the now-visible white dropdown" look) via a
   runtime-injected `.prisna-translator.prisna-wp-translate-layout-dropdown.
   prisna-wp-translate-languages-list-opened .prisna-wp-translate-body` rule
   (4 classes) — matching that exact chain plus our ancestor (5) is needed;
   the shorter 3-class version tried first lost the specificity tie. */
.vc-header__lang .prisna-translator.prisna-wp-translate-layout-dropdown.prisna-wp-translate-languages-list-opened .prisna-wp-translate-body {
	background: rgba(247, 247, 247, 0.2) !important;
	border: 0 !important;
	box-shadow: none !important;
}

.vc-header__lang .prisna-translator .prisna-wp-translate-current-language,
.vc-header__lang .prisna-translator .prisna-wp-translate-sub-container a {
	font-family: var(--vc-font-body) !important;
	font-size: 16px !important;
	font-weight: 400 !important;
	height: auto !important;
	max-height: none !important;
	line-height: normal !important;
	padding: 0 16px 0 0 !important;
	display: flex !important;
	align-items: center !important;
}

/* Out-specificities translator.js's own injected `color: #000` (closed) and
   translator-s.css's `color: #444` (open) so the pill text stays legible
   against the dark header bar in both states. */
.vc-header__lang .prisna-translator .prisna-wp-translate-current-language,
.vc-header__lang .prisna-translator .prisna-wp-translate-current-language span,
.vc-header__lang .prisna-wp-translate-languages-list-opened .prisna-wp-translate-current-language,
.vc-header__lang .prisna-wp-translate-languages-list-opened .prisna-wp-translate-current-language span {
	color: rgba(255, 255, 255, 0.8) !important;
}

.vc-header__lang .prisna-wp-translate-name {
	font-family: var(--vc-font-body);
}

/* Prisna's arrow is a CSS border-triangle (not a text glyph) positioned
   absolute against .prisna-wp-translate-body — recentered for the pill's
   new 6px/12px padding instead of the plugin's original 14px-tall box. */
.vc-header__lang .prisna-wp-translate-current-language-arrow {
	top: 50% !important;
	right: 12px !important;
	transform: translateY(-50%);
}

/* The dropdown: Prisna toggles visibility with display:none/block (adding
   .prisna-wp-translate-languages-list-opened on the container), so an
   opacity/transform transition needs `display` forced to `block` at rest —
   opacity/visibility/pointer-events do the actual hiding instead, same as
   the old .vc-header__lang-list's opacity+transform+visibility contract. */
/* top: 100% (not calc(100% + 8px)) is required, not cosmetic: Prisna's own
   JS toggles this list open/closed on mouseenter/mouseleave of its ancestor
   (.prisna-wp-translate-hover mode), and mouseenter/mouseleave only bubble
   from whatever element the cursor is actually over. An 8px visual gap
   between the pill and the list is 8px of dead space covered by neither
   element — moving the cursor from one to the other crosses it and fires
   mouseleave before the list can be reached, snapping the menu shut ("closes
   abruptly"). Flush positioning removes that dead zone entirely; the same
   visual breathing room is restored via padding-top on the list itself
   instead of a positional offset, which keeps the whole area continuously
   hoverable. */
.vc-header__lang .prisna-wp-translate-languages-list {
	display: block !important;
	position: absolute !important;
	top: 100% !important;
	left: 0 !important;
	right: auto !important;
	min-width: 100% !important;
	margin: 0 !important;
	padding: 14px 6px 6px !important;
	background: var(--vc-color-white) !important;
	border-radius: 8px;
	box-shadow: 0 12px 24px rgba(0, 0, 0, 0.2);
	list-style: none;
	opacity: 0;
	visibility: hidden;
	transform: translateY(-6px);
	transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s ease;
	z-index: 200;
	pointer-events: none;
}

.vc-header__lang .prisna-wp-translate-languages-list-opened .prisna-wp-translate-languages-list {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
	pointer-events: auto;
}

.vc-header__lang .prisna-wp-translate-languages-list p {
	border-top: 0 !important;
	padding: 8px 12px !important;
	line-height: normal !important;
	border-radius: 6px;
}

.vc-header__lang .prisna-wp-translate-hover .prisna-wp-translate-languages-list p:hover {
	background-color: var(--vc-color-light-gray) !important;
}

/* Prisna marks the active language's row with a persistent pale-yellow
   highlight (.prisna-wp-translate-completed) — the closest equivalent to
   the old list's `a[aria-current="true"] { background: light-gray }`. */
.vc-header__lang .prisna-wp-translate-sub-container p.prisna-wp-translate-completed {
	background-color: var(--vc-color-light-gray) !important;
}

.vc-header__lang .prisna-wp-translate-languages-list p a,
.vc-header__lang .prisna-wp-translate-languages-list p a span {
	color: var(--vc-color-near-black) !important;
	font-family: var(--vc-font-body) !important;
	font-size: 15px !important;
	white-space: nowrap;
}

.vc-header__lang .prisna-wp-translate-hover .prisna-wp-translate-languages-list p:hover a,
.vc-header__lang .prisna-wp-translate-hover .prisna-wp-translate-languages-list p:hover a span {
	color: var(--vc-color-near-black) !important;
}

.vc-header__nav {
	background: var(--vc-color-white);
	height: 60px;
}

.vc-header__nav-inner {
	height: 100%;
}

.vc-header__nav-list {
	display: flex;
	justify-content: center;
	align-items: center;
	gap: 50px;
	height: 100%;
	list-style: none;
	margin: 0;
	padding: 0;
}

.vc-header__nav-list a {
	color: var(--vc-color-near-black);
	font-family: var(--vc-font-body);
	font-weight: 500;
	font-size: 16px;
	text-decoration: none;
	text-transform: uppercase;
	width: max-content;
}

.vc-header__nav-list a:hover {
	color: var(--vc-color-red-bright);
}

.vc-header__nav-toggle {
	display: none;
	flex-direction: column;
	justify-content: center;
	align-items: center;
	gap: 6px;
	width: 44px;
	height: 44px;
	padding: 0;
	border: 0;
	background: transparent;
	cursor: pointer;
	flex-shrink: 0;
}

.vc-header__nav-toggle span {
	display: block;
	width: 26px;
	height: 3px;
	border-radius: 2px;
	background: var(--vc-color-white);
	transition: transform 0.2s ease, opacity 0.2s ease;
}

.vc-header__nav-toggle.is-active span:nth-child(1) {
	transform: translateY(9px) rotate(45deg);
}

.vc-header__nav-toggle.is-active span:nth-child(2) {
	opacity: 0;
}

.vc-header__nav-toggle.is-active span:nth-child(3) {
	transform: translateY(-9px) rotate(-45deg);
}

.vc-header__nav-search-item {
	display: none;
}

/* Desktop dropdown — hover/focus on a top-level item with children pops its
   submenu open directly below it. A submenu nested inside another submenu
   (3rd level) flies out to the right instead, so both levels stay readable
   rather than stacking as a single long dropdown. Mobile's own accordion
   version of these same classes lives in the max-width query below and
   overrides all of this. */
.vc-header__nav-item {
	position: relative;
}

.vc-header__nav-item-row {
	display: flex;
	align-items: center;
	gap: 6px;
}

.vc-header__nav-arrow {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	width: 16px;
	height: 16px;
	padding: 0;
	border: 0;
	background: transparent;
	color: var(--vc-color-near-black);
	cursor: pointer;
}

.vc-header__nav-arrow-icon {
	width: 16px;
	height: 16px;
	transform: rotate(90deg);
	transition: transform 0.2s ease;
	pointer-events: none;
}

.vc-header__nav-item--has-children:hover > .vc-header__nav-item-row .vc-header__nav-arrow-icon,
.vc-header__nav-item--has-children.is-open > .vc-header__nav-item-row .vc-header__nav-arrow-icon {
	transform: rotate(-90deg);
}

.vc-header__nav-submenu {
	list-style: none;
	margin: 0;
	padding: 10px 0;
	position: absolute;
	top: 100%;
	left: 0;
	min-width: 220px;
	background: var(--vc-color-white);
	border-radius: var(--vc-card-radius-xs);
	box-shadow: 0 12px 24px rgba(0, 0, 0, 0.15);
	opacity: 0;
	visibility: hidden;
	transform: translateY(6px);
	transition: opacity 0.15s ease, transform 0.15s ease, visibility 0.15s;
	z-index: 100;
}

.vc-header__nav-item--has-children:hover > .vc-header__nav-submenu,
.vc-header__nav-item--has-children:focus-within > .vc-header__nav-submenu {
	opacity: 1;
	visibility: visible;
	transform: translateY(0);
}

.vc-header__nav-submenu li {
	position: relative;
}

.vc-header__nav-submenu a {
	display: block;
	padding: 10px 20px;
	font-size: 15px;
	white-space: nowrap;
}

.vc-header__nav-submenu .vc-header__nav-item-row {
	padding: 0 20px;
}

.vc-header__nav-submenu .vc-header__nav-item-row a {
	padding: 10px 0;
}

/* 3rd level (a submenu nested inside a submenu) flies out to the right of
   its parent row instead of stacking below it. */
.vc-header__nav-submenu .vc-header__nav-submenu {
	top: 0;
	left: 100%;
}

@media (max-width: 1024px) {
	.vc-header__utility-inner {
		flex-wrap: wrap;
		height: auto;
		padding-block: 16px;
	}

	.vc-header__nav-toggle {
		display: flex;
	}

	.vc-header__search--desktop {
		display: none;
	}

	.vc-header__nav {
		position: absolute;
		top: 100%;
		left: 0;
		right: 0;
		height: auto;
		z-index: 100;
		max-height: 0;
		overflow: hidden;
		background: var(--vc-color-near-black);
		transition: max-height 0.35s ease;
	}

	.vc-header__nav.is-open {
		max-height: 80vh;
		overflow-y: auto;
		box-shadow: 0 12px 24px rgba(0, 0, 0, 0.25);
	}

	.vc-header__nav-inner {
		height: auto;
	}

	.vc-header__nav-list {
		flex-direction: column;
		align-items: stretch;
		gap: 0;
		height: auto;
		padding-block: 12px;
	}

	.vc-header__nav-list li {
		width: 100%;
	}

	.vc-header__nav-item-row {
		display: flex;
		align-items: center;
		justify-content: space-between;
		border-bottom: 1px solid rgba(255, 255, 255, 0.15);
	}

	.vc-header__nav-list a {
		display: block;
		flex: 1;
		padding: 14px 0;
		color: var(--vc-color-white);
	}

	.vc-header__nav-arrow {
		display: flex;
		align-items: center;
		justify-content: center;
		width: 44px;
		height: 44px;
		flex-shrink: 0;
		border: 0;
		background: transparent;
		color: var(--vc-color-white);
		cursor: pointer;
	}

	.vc-header__nav-arrow-icon {
		width: 16px;
		height: 16px;
		transform: rotate(90deg);
		transition: transform 0.25s ease;
	}

	.vc-header__nav-item--has-children.is-open > .vc-header__nav-item-row .vc-header__nav-arrow-icon {
		transform: rotate(-90deg);
	}

	.vc-header__nav-submenu {
		list-style: none;
		margin: 0;
		padding: 0 20px 0 20px;
		max-height: 0;
		overflow: hidden;
		transition: max-height 0.3s ease;
		position: static;
		opacity: 1;
		visibility: visible;
		transform: none;
		box-shadow: none;
		background: transparent;
		min-width: 0;
	}

	.vc-header__nav-submenu .vc-header__nav-submenu {
		left: 0;
	}

	.vc-header__nav-item--has-children.is-open > .vc-header__nav-submenu {
		max-height: 500px;
	}

	/* Overrides the desktop dropdown's `white-space: nowrap` (.vc-header__nav-submenu
	   a above) — that rule is never reset in this media query, so long submenu
	   labels (e.g. video-series titles) were overflowing their row and getting
	   sliced off by the page's overflow-x: clip instead of wrapping. */
	.vc-header__nav-submenu a,
	.vc-header__nav-submenu .vc-header__nav-item-row a {
		font-size: 15px;
		opacity: 0.85;
		padding: 14px 0;
		white-space: normal;
	}

	.vc-header__nav-search-item {
		display: block;
		padding-top: 16px;
	}

	.vc-header__nav-search-item .vc-header__search {
		max-width: none;
	}

	/* initMobileUtilityLinks() (site.js) relocates .vc-header__utility-links
	   here, as the first child of .vc-header__nav, at this same breakpoint —
	   .vc-header__nav is already dark here (see rule below), so the links'
	   existing white/translucent-white styling carries over unchanged; this
	   just gives it its own padded, divided row instead of running edge to
	   edge into the menu list right below it. `margin-left: auto` from the
	   desktop rule is harmless here (no flex ancestor to push against at this
	   nesting level) and stays; wrap it just in case a translated label runs
	   long on a narrow screen. */
	.vc-header__nav > .vc-header__utility-links {
		flex-wrap: wrap;
		padding: 16px 20px;
		border-bottom: 1px solid rgba(255, 255, 255, 0.15);
	}

	.vc-header__brand {
		display: flex;
		align-items: center;
		justify-content: space-between;
		width: 100%;
	}
}

/* Slim shrink-on-scroll — desktop only. `.vc-header` itself is already
   sticky at every breakpoint (see rule near the top of this section); the
   height-shrink treatment stays desktop-only because mobile/tablet's
   utility bar is already `height: auto` and wraps onto two rows, so a
   fixed shrunk height would clip the wrapped search/utility-links row. */
@media (min-width: 1025px) {
	.vc-header {
		transition: box-shadow 0.25s ease;
	}

	.vc-header__utility-inner,
	.vc-header__nav {
		transition: height 0.25s ease;
	}

	/* `width: auto` on the shrunk state (previously) can't be transitioned —
	   "auto" has no numeric value to interpolate towards, so while `height`
	   eased smoothly over 0.25s, `width` snapped to its new value the instant
	   the class changed, distorting the logo mid-transition (Mohiz: "changes
	   dimensions abruptly"). Both states now set explicit pixel width AND
	   height (matching the logo's real 218x44 aspect ratio at both sizes) so
	   both properties have real numbers to interpolate between, same as
	   .vc-header__utility-inner/.vc-header__nav above. */
	.vc-header__logo img {
		height: 44px;
		width: 218px;
		transition: height 0.25s ease, width 0.25s ease;
	}

	.vc-header--slim {
		box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
	}

	.vc-header--slim .vc-header__utility-inner {
		height: 64px;
	}

	.vc-header--slim .vc-header__logo img {
		height: 32px;
		width: 158.5px;
	}

	.vc-header--slim .vc-header__nav {
		height: 48px;
	}
}

/* Reduced-motion users get an instant state switch instead of the eased
   shrink — `overflow-anchor: none` above (not motion-dependent) is what
   actually stops the layout jump; this block only removes the animation
   itself per user preference. */
@media (min-width: 1025px) and (prefers-reduced-motion: reduce) {
	.vc-header,
	.vc-header__utility-inner,
	.vc-header__nav,
	.vc-header__logo img {
		transition: none;
	}
}

/* ==========================================================================
   .vc-footer
   ========================================================================== */

.vc-footer__cta {
	display: flex;
	flex-wrap: wrap;
}

.vc-footer__cta-col {
	flex: 1 1 50%;
	min-width: 320px;
}

.vc-footer__cta-col--donate {
	background: var(--vc-color-crimson);
}

.vc-footer__cta-col--newsletter {
	background: var(--vc-color-red-bright);
}

.vc-footer__cta-inner {
	display: flex;
	align-items: center;
	gap: 20px;
	padding-block: 40px;
	color: var(--vc-color-white);
}

.vc-footer__cta-inner > div {
	flex: 1;
	min-width: 0;
}

/* .vc-footer__cta-inner carries the shared .vc-container class, but that
   class's own margin-inline:auto centering assumes a full-width parent —
   here each inner box's parent is only one 50%-of-viewport column, not the
   full row, so auto has no free space to center into and the box just fills
   the column edge-to-edge with a flat --vc-gutter on both sides. That plants
   the donate column's content --vc-gutter in from the PAGE's left edge and
   the newsletter column's content --vc-gutter in from the middle divide —
   both narrower than, and not lined up with, every other section's
   .vc-container content edge (which sits (100vw - content-max)/2 + gutter
   in). Overriding with that same formula per side — outer edge gets the
   full centering offset, inner (divide-facing) edge stays a flat gutter —
   makes both columns' content edges match every other section's exactly.
   max() floors it at a flat gutter once the viewport is too narrow for
   --vc-content-max to matter, mirroring how margin-inline:auto collapses
   to 0 at that same point on a normal .vc-container. */
.vc-footer__cta-col--donate .vc-footer__cta-inner {
	max-width: none;
	margin-inline: 0;
	padding-left: max(var(--vc-gutter), calc((100vw - var(--vc-content-max)) / 2 + var(--vc-gutter)));
	padding-right: var(--vc-gutter);
}

.vc-footer__cta-col--newsletter .vc-footer__cta-inner {
	max-width: none;
	margin-inline: 0;
	padding-left: var(--vc-gutter);
	padding-right: max(var(--vc-gutter), calc((100vw - var(--vc-content-max)) / 2 + var(--vc-gutter)));
}

/* .vc-button defaults to white-space: nowrap, which is fine at the widths
   it's normally used at — but this column can get narrow (two side-by-side
   .vc-footer__cta-col at 50% of full viewport width, not --vc-content-max),
   and a nowrap label simply pokes out past the column's own right edge
   instead of shrinking, going outbound off the right side. Letting it wrap
   here keeps the button inside its column at every width. */
.vc-footer__cta-inner .vc-button {
	white-space: normal;
	text-align: center;
}

.vc-footer__cta-icon {
	width: 60px;
	height: 60px;
	flex-shrink: 0;
	object-fit: contain;
}

.vc-footer__cta-divider {
	width: 1px;
	align-self: stretch;
	background: rgba(255, 255, 255, 0.4);
}

.vc-footer__cta-heading {
	font-family: var(--vc-font-display);
	font-size: var(--vc-size-h3-card);
	margin: 0 0 12px;
}

.vc-footer__cta-body {
	font-size: var(--vc-size-body);
	margin-bottom: 16px;
}

.vc-footer__newsletter-form {
	display: flex;
	flex-wrap: wrap;
	gap: 10px;
}

.vc-footer__newsletter-form input {
	flex: 1 1 160px;
	min-width: 0;
	border: 0;
	border-radius: var(--vc-button-radius);
	padding: 12px 16px;
	font-family: var(--vc-font-body);
}

.vc-footer__contact {
	background: var(--vc-color-near-black);
	color: var(--vc-color-white);
}

.vc-footer__contact-inner {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 40px;
	padding-block: 50px;
	flex-wrap: wrap;
}

.vc-footer__wordmark {
	display: block;
	font-family: var(--vc-font-display);
	font-size: var(--vc-size-h3-card);
	margin-bottom: 16px;
}

.vc-footer__contact-row-group {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 10px 24px;
}

.vc-footer__contact-row {
	display: flex;
	align-items: center;
	gap: 10px;
	color: rgba(255, 255, 255, 0.6);
	font-size: var(--vc-size-body);
	margin: 0 0 10px;
}

.vc-footer__contact-row svg {
	width: 16px;
	height: 16px;
	flex-shrink: 0;
	color: var(--vc-color-white);
}

.vc-footer__contact-row a {
	color: inherit;
	text-decoration: none;
}

.vc-footer__contact-ctas {
	display: flex;
	align-items: center;
	gap: 20px;
	margin-top: 16px;
}

.vc-footer__contact-link {
	color: var(--vc-color-white);
	text-decoration: none;
}

.vc-footer__contact-link:hover,
.vc-footer__contact-link:active {
	color: var(--vc-color-red-bright);
}

.vc-footer__badge {
	max-width: 500px;
	height: auto;
}

.vc-footer__legal {
	background: var(--vc-color-darkest);
}

.vc-footer__legal-inner {
	display: grid;
	grid-template-columns: 1fr auto 1fr;
	align-items: center;
	gap: 20px;
	padding-block: 24px;
}

.vc-footer__copyright {
	grid-column: 1;
	grid-row: 1;
	justify-self: start;
	color: rgba(255, 255, 255, 0.6);
	font-size: var(--vc-size-body);
	margin: 0;
}

.vc-footer__credit {
	grid-column: 3;
	grid-row: 1;
	justify-self: end;
	display: flex;
	align-items: center;
	gap: 10px;
	color: rgba(255, 255, 255, 0.6);
	font-size: var(--vc-size-caption);
	text-decoration: none;
}

a.vc-footer__credit:hover {
	color: var(--vc-color-white);
}

.vc-footer__credit-logo {
	height: 24px;
	width: auto;
	object-fit: contain;
}

.vc-footer__social {
	grid-column: 2;
	grid-row: 1;
	justify-self: center;
	display: flex;
	gap: 12px;
}

.vc-footer__social-btn {
	width: 36px;
	height: 36px;
	border-radius: 50%;
	background: var(--vc-color-darkest);
	color: #505050;
	display: flex;
	align-items: center;
	justify-content: center;
}

.vc-footer__social-btn:hover {
	color: var(--vc-color-red-bright);
}

.vc-footer__social-btn svg {
	width: 16px;
	height: 16px;
}

/* ==========================================================================
   Military History Library — archive / single (vc_library CPT)
   ========================================================================== */

.vc-archive-titlebar {
	background: var(--vc-color-light-gray);
	width: 100vw;
	position: relative;
	left: 50%;
	right: 50%;
	margin-left: -50vw;
	margin-right: -50vw;
	padding-block: 24px;
}

.vc-archive-titlebar__inner {
	display: flex;
	width: 100%;
	justify-content: space-between;
	align-items: center;
	flex-wrap: wrap;
	gap: 16px;
}

.vc-archive-titlebar__title {
	font-family: var(--vc-font-display);
	font-size: var(--vc-size-h3-card);
	color: var(--vc-color-darkest);
	text-transform: uppercase;
	margin: 0;
}

.vc-archive-titlebar__filter {
	display: flex;
	align-items: center;
	gap: 8px;
}

.vc-archive-titlebar__filter select {
	appearance: none;
	-webkit-appearance: none;
	border-radius: var(--vc-button-radius);
	padding: 10px 40px 10px 16px;
	border: 1px solid var(--vc-color-border-gray);
	font-family: var(--vc-font-body);
	background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23505050' stroke-width='2'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-position: right 14px center;
	background-size: 16px;
}

@media (max-width: 640px) {
	.vc-archive-titlebar__inner {
		flex-direction: column;
		align-items: stretch;
	}

	.vc-archive-titlebar__filter,
	.vc-archive-titlebar__filter select {
		width: 100%;
	}
}

.vc-archive-layout {
	background: var(--vc-color-white);
	width: 100vw;
	position: relative;
	left: 50%;
	right: 50%;
	margin-left: -50vw;
	margin-right: -50vw;
	padding: var(--vc-gutter) 180px;
}

.vc-archive-layout--single {
	padding: var(--vc-gutter) 150px;
}

@media (max-width: 1024px) {
	.vc-archive-layout,
	.vc-archive-layout--single {
		padding-inline: 40px;
	}
}

@media (max-width: 640px) {
	.vc-archive-layout,
	.vc-archive-layout--single {
		padding-inline: 20px;
	}
}

.vc-single-layout__grid {
	display: grid;
	grid-template-columns: 843fr 407fr;
	gap: var(--vc-grid-gap);
	align-items: start;
	max-width: none;
	margin-inline: 0;
	padding-inline: 0;
}

.vc-resource-detail .vc-sih {
	padding-top: 0;
}

@media (max-width: 1024px) {
	.vc-single-layout__grid {
		grid-template-columns: 1fr;
	}
}

.vc-archive-layout__grid {
	display: block;
	max-width: none;
	margin-inline: 0;
	padding-inline: 0;
}

.vc-archive-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: var(--vc-grid-gap);
}

.vc-library-card {
	display: flex;
	flex-direction: column;
	background: var(--vc-color-white);
	border-radius: var(--vc-card-radius-xs);
	border: var(--vc-card-border-gray);
	overflow: hidden;
	text-decoration: none;
	color: inherit;
	transition: background-color 0.3s ease;
}

/* Archive/search card hover+focus: image zooms, the whole card (shell +
   body, which has its own light-grey background below) fills with the
   site's brand black, and both text pieces flip to white. :focus-visible
   mirrors :hover exactly — the card itself is the <a>, so a keyboard tab
   stop gets the identical treatment, not just a browser default outline. */
.vc-library-card:hover,
.vc-library-card:focus-visible {
	background: var(--vc-color-near-black);
}

.vc-library-card__image {
	width: 100%;
	aspect-ratio: var(--vc-ratio-library-card);
	object-fit: contain;
	background: var(--vc-color-light-gray);
	display: block;
	transition: transform 0.3s ease;
}

.vc-library-card:hover .vc-library-card__image,
.vc-library-card:focus-visible .vc-library-card__image {
	transform: scale(1.08);
}

.vc-library-card__body {
	flex: 1;
	background: var(--vc-color-light-gray);
	padding: 38px;
	text-align: center;
	transition: background-color 0.3s ease;
}

.vc-library-card:hover .vc-library-card__body,
.vc-library-card:focus-visible .vc-library-card__body {
	background: transparent;
}

.vc-library-card__title {
	font-family: var(--vc-font-display);
	font-size: var(--vc-size-h3-card);
	color: var(--vc-color-near-black);
	margin: 0 0 10px;
	transition: color 0.3s ease;
}

.vc-library-card__excerpt {
	font-family: var(--vc-font-body);
	font-size: var(--vc-size-body);
	color: var(--vc-color-near-black);
	margin: 0;
	display: -webkit-box;
	-webkit-line-clamp: 3;
	-webkit-box-orient: vertical;
	overflow: hidden;
	transition: color 0.3s ease;
}

.vc-library-card:hover .vc-library-card__title,
.vc-library-card:hover .vc-library-card__excerpt,
.vc-library-card:focus-visible .vc-library-card__title,
.vc-library-card:focus-visible .vc-library-card__excerpt {
	color: var(--vc-color-white);
}

.vc-archive-pagination {
	display: flex;
	align-items: center;
	gap: 10px;
	justify-content: center;
	margin-top: 40px;
	flex-wrap: wrap;
}

.vc-archive-pagination a,
.vc-archive-pagination span {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 40px;
	height: 40px;
	padding: 0 10px;
	border: 1px solid var(--vc-color-mid-gray);
	border-radius: var(--vc-button-radius);
	font-family: var(--vc-font-body);
	font-weight: 400;
	text-decoration: none;
	color: var(--vc-color-near-black);
	transition: background-color 0.2s ease, border-color 0.2s ease, color 0.2s ease;
}

.vc-archive-pagination .dots {
	border: 0;
	min-width: auto;
	padding: 0 4px;
}

.vc-archive-pagination .current,
.vc-archive-pagination a:hover,
.vc-archive-pagination a:focus-visible {
	background: var(--vc-color-crimson);
	border-color: var(--vc-color-crimson);
	color: var(--vc-color-white);
}

.vc-library-title-bar {
	background: var(--vc-color-light-gray);
	padding-block: 24px;
}

.vc-library-title-bar__title {
	font-family: var(--vc-font-display);
	font-size: var(--vc-size-h3-card);
	color: var(--vc-color-darkest);
	text-align: center;
	margin: 0;
}

.vc-resource-detail {
	font-family: var(--vc-font-body);
}

.vc-resource-detail__hero {
	width: 100%;
	aspect-ratio: var(--vc-ratio-hero-detail);
	object-fit: cover;
	border-radius: var(--vc-card-radius-xs);
	margin-bottom: 30px;
}

.vc-resource-detail__title {
	font-family: var(--vc-font-display);
	font-size: var(--vc-size-h1-detail);
	color: var(--vc-color-near-black);
	margin: 0 0 20px;
}

.vc-resource-detail__lede {
	font-size: var(--vc-size-body-lg);
	margin-bottom: 24px;
}

.vc-resource-detail__body {
	line-height: var(--vc-line-body);
}

.vc-resource-detail__body img {
	width: 100%;
	height: auto;
	border-radius: var(--vc-card-radius-xs);
}

.vc-resource-detail__body figcaption {
	background: var(--vc-color-light-gray);
	padding: 12px 16px;
	font-size: var(--vc-size-caption);
	color: var(--vc-color-near-black);
}

.vc-resource-detail__sources {
	background: var(--vc-color-light-gray);
	border-radius: var(--vc-card-radius-xs);
	padding: 30px;
	margin-top: 30px;
}

.vc-resource-detail__sources a {
	color: var(--vc-color-crimson);
	text-decoration: none;
}

.vc-resource-sidebar {
	display: flex;
	flex-direction: column;
	gap: 20px;
	position: sticky;
	top: 20px;
}

.vc-resource-sidebar__filter-nav {
	display: flex;
	flex-direction: column;
}

.vc-resource-sidebar__filter-item {
	background: var(--vc-color-darkest);
	color: var(--vc-color-white);
	padding: 14px 20px;
	text-decoration: none;
	text-align: center;
	font-family: var(--vc-font-display);
	font-weight: 400;
	text-transform: uppercase;
	border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

.vc-resource-sidebar__filter-item:hover {
	background: var(--vc-color-crimson);
	color: var(--vc-color-white);
}

.vc-resource-sidebar__filter-item.is-active {
	background: var(--vc-color-crimson);
}

.vc-resource-sidebar__mission-card,
.vc-resource-sidebar__membership-card {
	background: var(--vc-color-light-gray);
	border-radius: var(--vc-card-radius-xs);
	padding: 24px;
}

.vc-resource-sidebar__mission-card h3,
.vc-resource-sidebar__membership-card h3 {
	font-family: var(--vc-font-display);
	font-size: var(--vc-size-h3-card);
	text-transform: uppercase;
	margin: 0 0 12px;
}

/* Full-width sidebar banner (stays `display: block`, unlike .vc-button's
   `inline-flex`), but otherwise matches .vc-button--primary's actual style —
   same radius/padding scale, capitalize instead of forced uppercase, and the
   same crimson→black hover/focus swap. */
.vc-resource-sidebar__donate-banner {
	display: block;
	background: var(--vc-color-crimson);
	color: var(--vc-color-white);
	text-align: center;
	padding: var(--vc-button-padding-y) var(--vc-button-padding-x);
	border-radius: var(--vc-button-radius);
	text-decoration: none;
	text-transform: capitalize;
	font-family: var(--vc-font-display);
	font-size: var(--vc-size-label);
	transition: background-color 0.2s ease, color 0.2s ease;
}

.vc-resource-sidebar__donate-banner:hover,
.vc-resource-sidebar__donate-banner:focus-visible {
	background: var(--vc-color-darkest);
	color: var(--vc-color-white);
}

@media (max-width: 1024px) {
	.vc-archive-grid {
		grid-template-columns: repeat(2, 1fr);
	}

	/* Matches .vc-container's own 1024px override (flat 40px, no centering
	   math) on both the outer and inner (divide-facing) edges — the
	   calc-based offset above is meaningless once the viewport is this
	   narrow anyway. */
	.vc-footer__cta-col--donate .vc-footer__cta-inner,
	.vc-footer__cta-col--newsletter .vc-footer__cta-inner {
		padding-left: 40px;
		padding-right: 40px;
	}
}

@media (max-width: 640px) {
	.vc-archive-grid {
		grid-template-columns: 1fr;
	}

	.vc-library-card__body {
		padding: 20px;
	}

	.vc-footer__badge {
		max-width: 220px;
	}

	.vc-footer__contact-inner {
		justify-content: center;
	}

	.vc-footer__contact-brand {
		text-align: left;
	}

	.vc-footer__wordmark {
		text-align: center;
	}

	.vc-footer__contact-row-group,
	.vc-footer__contact-row {
		justify-content: flex-start;
	}

	.vc-footer__contact-ctas {
		justify-content: center;
	}

	.vc-footer__cta-col--donate .vc-footer__cta-inner,
	.vc-footer__cta-col--newsletter .vc-footer__cta-inner {
		padding-left: 20px;
		padding-right: 20px;
	}

	.vc-footer__cta-inner {
		flex-direction: column;
		align-items: center;
		text-align: center;
		gap: 16px;
	}

	.vc-footer__cta-divider {
		display: none;
	}

	.vc-footer__newsletter-form {
		justify-content: center;
	}

	.vc-footer__legal-inner {
		display: flex;
		flex-direction: column;
		justify-content: center;
		text-align: center;
	}

	.vc-footer__copyright {
		order: 1;
	}

	.vc-footer__social {
		order: 2;
		justify-content: center;
	}

	.vc-footer__credit {
		order: 3;
		justify-content: center;
	}
}

/* ==========================================================================
   Shared click-to-enlarge lightbox (.vc-lightbox-trigger)
   ========================================================================== */

body.vc-lightbox-open {
	overflow: hidden;
}

.vc-lightbox {
	position: fixed;
	inset: 0;
	z-index: 9999;
	display: none;
	align-items: center;
	justify-content: center;
	background: rgba(0, 0, 0, 0.85);
	padding: 40px;
}

.vc-lightbox.is-active {
	display: flex;
}

.vc-lightbox__img {
	max-width: 100%;
	max-height: 100%;
	object-fit: contain;
	border-radius: var(--vc-card-radius-xs);
}

.vc-lightbox__close {
	position: absolute;
	top: 20px;
	right: 24px;
	width: 44px;
	height: 44px;
	border: 0;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.15);
	color: var(--vc-color-white);
	font-size: 28px;
	line-height: 1;
	cursor: pointer;
}

.vc-lightbox__close:hover {
	background: rgba(255, 255, 255, 0.25);
}

/* ==========================================================================
   Shared filmstrip gallery viewer (.vc-gallery-thumb)
   ========================================================================== */

.vc-gallery-viewer {
	position: fixed;
	inset: 0;
	z-index: 9999;
	display: none;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	background: rgba(0, 0, 0, 0.9);
	padding: 40px;
}

.vc-gallery-viewer.is-active {
	display: flex;
}

.vc-gallery-viewer__img {
	max-width: 100%;
	max-height: calc(100% - 60px);
	object-fit: contain;
	border-radius: var(--vc-card-radius-xs) var(--vc-card-radius-xs) 0 0;
}

.vc-gallery-viewer__bar {
	width: 100%;
	max-width: 100%;
	display: flex;
	align-items: center;
	gap: 12px;
	background: rgba(0, 0, 0, 0.9);
	padding: 12px 16px;
	border-radius: 0 0 var(--vc-card-radius-xs) var(--vc-card-radius-xs);
}

.vc-gallery-viewer__prev,
.vc-gallery-viewer__next,
.vc-gallery-viewer__play,
.vc-gallery-viewer__close {
	flex-shrink: 0;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 36px;
	height: 36px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgba(255, 255, 255, 0.15);
	color: var(--vc-color-white);
	font-size: 14px;
	line-height: 1;
	cursor: pointer;
}

.vc-gallery-viewer__play-icon {
	display: flex;
	align-items: center;
	justify-content: center;
}

.vc-gallery-viewer__prev:hover,
.vc-gallery-viewer__next:hover,
.vc-gallery-viewer__play:hover,
.vc-gallery-viewer__close:hover {
	background: rgba(255, 255, 255, 0.25);
}

.vc-gallery-viewer.is-playing .vc-gallery-viewer__play {
	background: var(--vc-color-crimson);
}

.vc-gallery-viewer__counter {
	color: var(--vc-color-white);
	font-family: var(--vc-font-body);
	font-size: 14px;
	white-space: nowrap;
}

.vc-gallery-viewer__caption {
	color: var(--vc-color-white);
	font-family: var(--vc-font-body);
	font-size: 14px;
	opacity: 0.85;
	overflow: hidden;
	text-overflow: ellipsis;
	white-space: nowrap;
	flex: 1;
}

.vc-gallery-viewer__close {
	margin-left: auto;
	font-size: 20px;
}

@media (max-width: 640px) {
	.vc-gallery-viewer {
		padding: 12px;
	}

	.vc-gallery-viewer__caption {
		display: none;
	}
}
a[href$=".pdf"] {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    font-weight: 500;
}
a[href$=".pdf"]::before {
    content: "";
    display: inline-block;
    width: 16px;
    height: 16px;
    background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 512 512'%3E%3Cpath fill='%23B12A27' d='M475.435 117.825L475.435 512H47.791V0.002h309.822l117.822 117.823z'/%3E%3Crect x='36.565' y='34.295' fill='%23F2F2F2' width='205.097' height='91.768'/%3E%3Cpath fill='%23B12A27' d='M110.132 64.379c-0.905-2.186-2.111-4.146-3.769-5.804c-1.658-1.658-3.694-3.015-6.031-3.92c-2.412-0.98-5.126-1.432-8.141-1.432H69.651v58.195h11.383V89.481h11.157c3.015 0 5.729-0.452 8.141-1.432c2.337-0.905 4.372-2.261 6.031-3.92c1.659-1.658 2.865-3.543 3.769-5.804c0.829-2.186 1.281-4.749 1.281-7.764C111.413 69.127 110.961 66.564 110.132 64.379zM98.6 74.328c-0.678 1.432-1.734 2.563-3.09 3.392c-1.357 0.905-3.015 1.281-5.05 1.281h-9.347V62.269h9.271c2.035 0 3.769 0.452 5.126 1.281c1.357 0.905 2.412 2.035 3.09 3.392c0.678 1.432 1.055 3.09 1.055 5.05C99.655 71.313 99.278 72.896 98.6 74.328zM182.263 52.621h-21.784v73.194h21.784c4.372 0 8.291-0.905 11.683-2.638c3.392-1.809 6.03-4.221 7.915-7.387c1.884-3.166 2.864-6.859 2.864-11.156V81.338c0-4.296-0.98-8.065-2.864-11.231c-1.884-3.166-4.523-5.653-7.915-7.387C190.555 53.525 186.635 52.621 182.263 52.621zM192.138 102.571c-1.281 2.487-3.166 4.372-5.729 5.653c-2.487 1.281-5.578 1.96-9.196 1.96h-5.276V62.269h5.578c3.467 0 6.482 0.678 9.045 2.035c2.487 1.281 4.372 3.166 5.653 5.653c1.281 2.487 1.884 5.427 1.884 8.744v15.075C194.022 97.143 193.344 100.083 192.138 102.571zM232.091 85.182h-18.09v40.628H202.694V52.621h30.075v10.176h-18.769v12.211h18.09V85.182z'/%3E%3Cpath fill='%23B12A27' d='M357.613 0.002v117.823h117.822L357.613 0.002z'/%3E%3Cpath fill='%23F2F2F2' d='M353.92 233.15c-3.091 1.055-6.181 2.035-9.271 2.94c-8.971 2.563-17.564 3.769-25.553 3.618c-3.166-3.844-6.407-8.141-9.648-12.739c-5.427-7.613-10.402-15.603-14.925-23.769c0.528-2.186 1.055-4.523 1.508-6.935c1.884-9.121 2.864-17.638 2.864-25.477c0-3.694-0.151-6.935-0.377-9.724c-0.226-3.392-0.829-6.407-1.734-9.045c-0.905-2.563-2.337-4.673-4.221-6.256c-1.884-1.583-4.372-2.337-7.387-2.337c-3.543 0-6.634 1.281-9.121 3.92c-2.487 2.563-4.523 6.03-5.955 10.252c-1.508 4.221-2.412 8.97-2.714 14.171c-0.302 5.126-0.075 10.402 0.754 15.678c1.357 8.367 3.543 16.583 6.633 24.648c4.221 11.231 9.497 22.161 15.829 32.789c-4.975 11.834-10.402 24.196-16.357 37.01s-11.985 25.553-18.09 38.065c-6.106 12.588-12.211 25.025-18.392 37.236c-2.412 4.749-4.824 9.422-7.161 13.945c-8.895 2.94-17.789 6.181-26.608 9.799c-8.82 3.618-17.261 7.613-25.251 11.834c-8.065 4.296-15.377 8.895-21.935 13.794c-6.558 4.9-12.035 10.1-16.432 15.679c-3.166 3.995-5.578 8.141-7.161 12.337c-1.583 4.221-2.337 8.518-2.337 12.94c0 6.633 2.111 12.186 6.332 16.658c4.221 4.523 9.724 6.784 16.583 6.784c6.859 0 13.493-2.412 19.901-7.236c6.407-4.824 12.337-11.156 17.789-19.07s10.327-16.96 14.623-27.287c4.296-10.327 7.764-21.03 10.477-32.085c13.266-5.804 26.683-11.382 40.101-16.658c13.417-5.352 26.759-10.251 40.05-14.774c13.266-4.523 26.407-8.518 39.422-12.06c4.07 7.538 8.367 14.096 12.739 19.824c4.372 5.653 8.894 10.402 13.568 14.171c4.673 3.769 9.347 6.482 14.171 8.216s9.497 2.563 14.171 2.563c3.769 0 7.236-0.678 10.402-2.111c3.166-1.357 5.729-3.467 7.764-6.332c2.035-2.864 3.467-6.256 4.146-10.251c0.678-3.995 0.528-8.442-0.528-13.342c-0.678-3.392-1.96-6.633-3.92-9.724c-1.96-3.09-4.523-5.879-7.764-8.367c-3.166-2.487-6.935-4.523-11.231-6.181C370.176 242.045 363.317 238.125 353.92 233.15z M131.79 388.522c-2.412 8.367-5.578 15.603-9.574 21.633c-3.995 6.106-8.367 10.854-13.116 14.397c-2.487 1.884-4.824 2.864-6.935 2.864c-1.206 0-2.186-0.377-2.864-1.131c-0.678-0.754-0.98-2.035-0.98-3.769c0-3.317 1.055-6.709 3.241-10.251c2.186-3.543 5.05-6.935 8.518-10.327c3.467-3.392 7.387-6.558 11.683-9.422C126.061 389.653 129.227 388.371 131.79 388.522z M176.439 231.266c0.678-7.312 2.337-12.739 4.975-16.131c1.508-1.884 3.015-2.864 4.523-2.864c0.905 0 1.658 0.377 2.186 1.206c0.528 0.829 0.829 1.96 0.98 3.392c0.302 2.789 0.226 6.106-0.377 9.874c-0.603 3.769-1.508 7.84-2.864 12.211c-1.357 4.296-2.94 8.643-4.824 13.116c-1.884 4.447-3.92 8.82-6.106 13.04C174.479 253.276 174.931 242.497 176.439 231.266z M242.428 337.942c-2.111-4.824-4.447-9.573-6.935-14.322c-2.487-4.673-4.824-8.894-6.859-12.663c4.673 0.151 9.497 0.377 14.548 0.603c5.05 0.302 10.025 0.754 14.925 1.357c4.9 0.603 9.497 1.357 13.794 2.186c4.296 0.905 8.04 1.884 11.307 3.091c-1.357 2.035-2.789 4.146-4.221 6.332c-1.432 2.111-2.94 4.372-4.523 6.633c-3.166 4.523-6.634 8.971-10.252 13.267c1.734 2.035 3.543 3.995 5.352 5.955l-1.206 0.075l1.055 0.98c-3.091 0.226-6.332 0.528-9.574 0.829c-2.035 0.226-4.146 0.377-6.257 0.603C250.796 337.037 246.499 337.49 242.428 337.942z M369.297 384.98c-8.971-5.729-18.996-13.795-31.359-24.575c17.564 1.809 31.359 5.654 41.159 11.383c4.297 2.488 7.538 5.051 9.724 7.538c3.618 3.844 4.9 7.312 4.221 9.649c-0.603 2.337-3.241 3.92-6.483 3.92c-1.885 0-3.844-0.452-5.88-1.432c-3.468-1.658-7.086-3.694-10.93-6.181C369.598 385.282 369.448 385.131 369.297 384.98z'/%3E%3C/svg%3E");
    background-size: contain;
    background-repeat: no-repeat;
    background-position: center;
}

/* ==========================================================================
   Search results titlebar — same .vc-archive-titlebar shell as category.php,
   but a text input replaces the category <select>.
   ========================================================================== */

.vc-archive-titlebar__filter input[type="search"] {
	border-radius: var(--vc-button-radius);
	padding: 10px 16px;
	border: 1px solid var(--vc-color-border-gray);
	font-family: var(--vc-font-body);
	min-width: 220px;
}

@media (max-width: 640px) {
	.vc-archive-titlebar__filter input[type="search"] {
		width: 100%;
		min-width: 0;
	}
}

/* ==========================================================================
   404 — reuses .vc-archive-titlebar / .vc-archive-layout from the library
   archive so the page carries the same shell as every other archive page.
   ========================================================================== */

.vc-404__inner {
	max-width: 640px;
	text-align: center;
	padding-block: 20px;
}

.vc-404__code {
	font-family: var(--vc-font-display);
	font-size: clamp(4rem, 12vw, 8rem);
	line-height: 1;
	color: var(--vc-color-crimson);
	margin: 0 0 10px;
}

.vc-404__text {
	font-family: var(--vc-font-body);
	font-size: var(--vc-size-body-lg);
	line-height: var(--vc-line-body);
	color: var(--vc-color-near-black);
	margin: 0 0 30px;
}

.vc-404__search {
	display: flex;
	gap: 10px;
	justify-content: center;
	margin-bottom: 24px;
}

.vc-404__search-input {
	flex: 1;
	max-width: 360px;
	border-radius: var(--vc-button-radius);
	padding: 10px 16px;
	border: 1px solid var(--vc-color-border-gray);
	font-family: var(--vc-font-body);
}

@media (max-width: 640px) {
	.vc-404__search {
		flex-direction: column;
	}

	.vc-404__search-input {
		max-width: none;
	}
}

.vc-404__home {
	justify-content: center;
}

/* ==========================================================================
   Default featured-image fallback (see mu-plugins/default-featured-image.php)
   — the logo is wide (1382x318) and every card/hero context here hard-crops
   to a portrait-ish ratio, so force `contain` + a neutral backdrop just for
   the fallback rather than letting it get sliced like a real photo would.
   ========================================================================== */

img.vc-default-thumbnail {
	object-fit: contain;
	background: var(--vc-color-light-gray);
	padding: 14%;
	box-sizing: border-box;
}

/* ==========================================================================
   PDF-icon list markers — VC Link Columns block
   ========================================================================== */

/* VC Link Columns already replaces the browser's default bullet with its own
   tiny 6px circle, drawn as a::before/span::before (see
   blocks/vc-link-columns/style.css) — not a real <li>::marker. For links that
   actually point at a .pdf, swap that dot for the PDF icon instead; plain
   links/labels (no url, or a url that isn't a PDF) keep the dot. Every
   property here is set explicitly (not just background-image) so this fully
   overrides both the block's own dot rule and the sitewide, unscoped
   `a[href$=".pdf"]::before` rule at the end of this file — letting either of
   those partially bleed through was what caused two icons to render on the
   same link previously (Mohiz, 2026-08-12: li::before + a::before both
   firing on the same item). */
.vc-link-columns__col li a[href$=".pdf"]::before {
	content: "";
	display: inline-block;
	width: 16px;
	height: 16px;
	border-radius: 0;
	background-color: transparent;
	background-image: url("data:image/svg+xml,%3Csvg%20width%3D%22800%22%20height%3D%22800%22%20viewBox%3D%22-4%200%2040%2040%22%20fill%3D%22none%22%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%3E%3Cpath%20d%3D%22M25.669%2026.096c-.488.144-1.203.16-1.97.049a9.4%209.4%200%200%201-2.49-.742c1.473-.214%202.615-.148%203.592.198.23.082.611.301.868.495m-8.214-1.35-.177.048c-.396.108-.782.213-1.153.306l-.501.127a66%2066%200%200%200-3.055.826c.387-.932.746-1.875%201.098-2.797.26-.682.526-1.379.801-2.067q.21.345.437.692a13.5%2013.5%200%200%200%202.55%202.865m-2.562-10.513c.065%201.15-.183%202.257-.547%203.318-.449-1.312-.658-2.762-.097-3.932.144-.3.261-.46.338-.545.118.183.273.59.306%201.159m-5.26%2014.572q-.378.675-.772%201.272c-.637.958-1.677%201.985-2.212%201.985-.052%200-.116-.008-.209-.107-.06-.062-.07-.107-.066-.169.018-.352.485-.98%201.161-1.562a11.4%2011.4%200%200%201%202.098-1.419m17.738-2.659c-.082-1.174-2.059-1.927-2.078-1.934-.764-.271-1.594-.403-2.538-.403-1.01%200-2.098.146-3.497.473a12.2%2012.2%200%200%201-3.122-3.209%2020%2020%200%200%201-.951-1.605c.678-1.623%201.29-3.367%201.178-5.32-.09-1.566-.796-2.618-1.756-2.618-.659%200-1.226.488-1.688%201.451-.822%201.718-.606%203.915.643%206.537a92%2092%200%200%200-1.272%203.213c-.504%201.319-1.023%202.68-1.607%203.973-1.64.65-2.987%201.436-4.109%202.402-.735.631-1.622%201.597-1.672%202.605-.025.474.138.91.468%201.258.352.37.793.566%201.279.566%201.603%200%203.146-2.202%203.439-2.644a24%2024%200%200%200%201.68-3.021c1.361-.492%202.811-.859%204.217-1.214l.503-.128a68%2068%200%200%200%201.175-.313c.427-.115.867-.235%201.313-.349%201.443.918%202.995%201.517%204.51%201.737%201.274.185%202.406.078%203.173-.322.69-.36.728-.913.712-1.135m3.105%2010.097c0%202.15-1.896%202.283-2.278%202.287H3.745c-2.143%200-2.272-1.908-2.276-2.287V3.756c0-2.152%201.899-2.283%202.276-2.287h16.518l.009.009v6.446c0%201.294.782%203.743%203.744%203.743h6.404l.055.055zm-1.519-26.045h-4.94c-2.142%200-2.272-1.898-2.275-2.274v-4.97zm2.988%2026.045V11.116L21.742.87V.823h-.048L20.874%200H3.744C2.45%200%200%20.785%200%203.757v32.487C0%2037.543.783%2040%203.745%2040H28.2c1.295%200%203.745-.786%203.745-3.757%22%20fill%3D%22%23eb5757%22/%3E%3C/svg%3E");
	background-repeat: no-repeat;
	background-size: contain;
	flex-shrink: 0;
}

/* ==========================================================================
   .vc-ai-image — AI-enhanced-image badge + Original/AI toggle
   ========================================================================== */

/* Only wraps the <img> when an AI version exists (vc_render_ai_image(),
   inc/ai-image.php) — display:block + width:100% mirrors the width:100%
   every wrapped image class already sets on itself, so this new box doesn't
   change layout for the (large) majority of call sites where the image
   already filled its container. Never used around an absolutely-positioned
   background image (vc-hero, vc-image-banner) — see the plain-swap helper
   note in inc/ai-image.php for why that specific combination breaks. */
.vc-ai-image {
	position: relative;
	display: block;
	width: 100%;
	/* Harmless when the parent's own height is content-based (most call
	   sites — an aspect-ratio'd or intrinsically-sized image determines its
	   own box, and 100% of a non-definite height resolves to auto anyway),
	   but required wherever the parent has an explicit fixed height (e.g.
	   vc-imgstrip's 320px-tall thumb button) — without it this wrapper's own
	   height stays auto/content-based, so the object-fit:cover <img> inside
	   never gets a real box to fill and falls back to its intrinsic size. */
	height: 100%;
	/* Every size rule below keys off this box's own rendered width, not the
	   viewport's — the same markup sits inside an 800px-wide bordered frame
	   on one page and a ~320px grid cell on another, and a viewport media
	   query can't tell those apart (both can occur at any breakpoint). */
	container-type: inline-size;
	container-name: vc-ai-image;
}

/* Small corner pill, anchored to the image's bottom-right only (was a
   left:8px/right:8px full-width bar with a two-line sentence — client
   feedback 2026-09-08: "too intrusive and dominant... make it much much
   smaller and anchor it to the bottom right"). Sized to its own content
   (no `left`), single short label, fuller explanation moved to a native
   `title` tooltip (vc_render_ai_media_notice(), inc/ai-image.php). */
.vc-ai-image__badge {
	position: absolute;
	right: 8px;
	bottom: 8px;
	z-index: 2;
	display: inline-flex;
	align-items: center;
	gap: 5px;
	max-width: calc(100% - 16px);
	padding: 4px 9px 4px 4px;
	background: rgba(20, 20, 20, 0.82);
	border: 1px solid rgba(255, 255, 255, 0.12);
	border-radius: 999px;
	backdrop-filter: blur(4px);
	pointer-events: none;
	opacity: 1;
	transition: opacity 0.15s ease;
}

/* Showing "AI Enhanced" while the real, unmodified original is what's
   actually on screen would misrepresent it — hidden for as long as the
   viewer has "Original" selected (initAiImageToggle(), site.js). */
.vc-ai-image.is-original .vc-ai-image__badge {
	opacity: 0;
	pointer-events: none;
}

.vc-ai-image__badge-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 16px;
	height: 16px;
	flex-shrink: 0;
	border-radius: 50%;
	background: var(--vc-color-crimson);
	color: var(--vc-color-white);
}

.vc-ai-image__badge-icon svg {
	width: 9px;
	height: 9px;
}

.vc-ai-image__badge-copy {
	display: flex;
	min-width: 0;
	overflow: hidden;
}

.vc-ai-image__badge-heading {
	font-family: var(--vc-font-body);
	font-size: 10px;
	font-weight: 700;
	line-height: 1;
	color: var(--vc-color-white);
	text-transform: uppercase;
	letter-spacing: 0.01em;
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
}

/* Original/AI corner pills. .vc-ai-toggle itself is a plain, unstyled
   grouping element (site.js only needs a shared ancestor to find "the other
   button" — see initAiImageToggle()); each pill positions itself. */
.vc-ai-toggle {
	position: static;
}

.vc-ai-toggle__btn {
	position: absolute;
	top: 10px;
	z-index: 3;
	display: inline-flex;
	align-items: center;
	gap: 5px;
	border: 0;
	background: var(--vc-color-white);
	color: var(--vc-color-crimson);
	font-family: var(--vc-font-body);
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.02em;
	line-height: 1;
	padding: 7px 13px;
	border-radius: 999px;
	cursor: pointer;
	box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
	transition: background-color 0.2s ease, color 0.2s ease, transform 0.15s ease;
}

.vc-ai-toggle__btn--original {
	left: 10px;
}

.vc-ai-toggle__btn--ai {
	right: 10px;
}

.vc-ai-toggle__btn.is-active {
	background: var(--vc-color-crimson);
	color: var(--vc-color-white);
}

.vc-ai-toggle__btn:not(.is-active):hover {
	transform: translateY(-1px);
	box-shadow: 0 4px 10px rgba(0, 0, 0, 0.25);
}

.vc-ai-toggle__btn-icon {
	display: inline-flex;
	width: 12px;
	height: 12px;
	flex-shrink: 0;
}

.vc-ai-toggle__btn-icon svg {
	width: 100%;
	height: 100%;
}

/* Compact contexts (a grid cell rather than a wide standalone frame, e.g.
   .vc-imggrid__grid's ~300-330px columns): the two full pills would sit too
   close together and the two-line notice would crowd a short image, so drop
   to icon-only pills and a single-line notice instead of shrinking type
   past legibility. */
/* The badge is already compact enough at every size (see .vc-ai-image__badge
   above) to not need its own narrow-container override anymore — only the
   two full toggle pills still need to drop to icon-only here. */
@container vc-ai-image (max-width: 360px) {
	.vc-ai-toggle__btn {
		padding: 7px;
	}

	.vc-ai-toggle__btn-label {
		display: none;
	}
}

.vc-ai-disclosure {
	margin: 0 0 16px;
	font-size: 13px;
	color: rgba(255, 255, 255, 0.6);
	text-align: center;
}
