/*
 * IPA Space Foundation: main stylesheet.
 * Loaded without blocking render. Critical rules (tokens, buttons, header,
 * hero) are inlined from critical.css.
 */

:root { --ipa-error: #FFB4A8; }

/* Smooth in-page jumps only once the page has loaded (ipa.js adds .is-loaded). Set from the start, it
   turned the browser's jump to a #fragment on arrival from another page into a smooth scroll that
   Chrome abandoned mid-load, so /#about landed at the top. */
@media (prefers-reduced-motion: no-preference) {
	html.is-loaded { scroll-behavior: smooth; }
}

/* Links: mono, uppercase, underline that sweeps out and back in on hover.
   Gold only on dark grounds; on light grounds the text is navy (gold on white fails AA). */
.ipa-link {
	display: inline-block;
	padding: 2px 0 4px;
	border: 0;
	background: linear-gradient(currentColor, currentColor) 0 100% / 100% 1px no-repeat;
	color: var(--c-link);
	font: 500 16px/14px var(--font-mono);
	letter-spacing: var(--track-ui);
	text-transform: uppercase;
	text-decoration: none;
	cursor: pointer;
}
.ipa-link:hover { animation: ipa-underline .6s var(--ipa-ease); }
@keyframes ipa-underline {
	0% { background-size: 100% 1px; background-position: 100% 100%; }
	45% { background-size: 0 1px; background-position: 100% 100%; }
	46% { background-size: 0 1px; background-position: 0 100%; }
	100% { background-size: 100% 1px; background-position: 0 100%; }
}
:is(.is-tone-light, .is-tone-surface) .ipa-link { background-image: linear-gradient(var(--ipa-gold), var(--ipa-gold)); background-size: 100% 2px; }

/* Shared layout helpers used by the patterns */

/* Eyebrow label above a section heading. */
.is-style-eyebrow { display: flex; align-items: center; gap: 12px; margin: 0; color: var(--ipa-navy) !important; font: 500 14px/1.4 var(--font-mono) !important; letter-spacing: var(--track-ui); text-transform: uppercase; }
.is-style-eyebrow::before { content: ""; flex: none; width: 24px; height: 2px; background: var(--ipa-gold); }
:is(.is-tone-dark, .is-tone-navy, .is-tone-ink) .is-style-eyebrow { color: var(--ipa-gold) !important; }
.ipa-section-head > .is-style-eyebrow { margin-bottom: 4px !important; }
/* Centred labels get a tick on both sides so they stay balanced (Jake, 24 Sep). */
.ipa-section-head > .is-style-eyebrow::after { content: ""; flex: none; width: 24px; height: 2px; background: var(--ipa-gold); }
.ipa-split > .is-style-eyebrow { grid-column: 1 / -1; margin-bottom: -12px; }
.ipa-split { display: grid; grid-template-columns: minmax(0, 1fr); gap: 24px; }
.ipa-split > * { margin: 0; }
.ipa-stack { display: flex; flex-direction: column; align-items: flex-start; gap: 26px; }
.ipa-stack > * { margin: 0 !important; }
.ipa-section-head { display: flex; flex-direction: column; align-items: center; gap: 10px; text-align: center; }
.ipa-section-head > * { margin: 0 !important; }
.ipa-section-head p { max-width: 1200px; }
@media (min-width: 900px) {
	.ipa-split { grid-template-columns: minmax(0, 600fr) minmax(0, 528fr); gap: 72px; }
	.ipa-split:has(> .is-style-eyebrow) { row-gap: 24px; }
	.ipa-split--even { grid-template-columns: 1fr 1fr; gap: 20px; }
}

/* Default section spacing */
.ipa-section--default { padding-block: clamp(56px, 7vw, 100px); }
/* A bottom planet rim is drawn inside the section's padding and rises on scroll; reserve its full
   height (max(40px, 8.68vw), see .ipa-horizon) on top of the normal padding so it never reaches the
   content. The homepage give section already carries its own, larger padding. */
.ipa-section--default.has-horizon-bottom:not(.ipa-give-section) { padding-bottom: calc(clamp(56px, 7vw, 100px) + max(40px, 8.68vw)); }

/* Grid-line decoration: a fine, faint grid that fades out toward the centre. */
.ipa-section.has-grid::before, .ipa-pillar:nth-child(even)::before {
	content: "";
	position: absolute;
	inset: 0;
	--grid: 72.8px;
	background:
		linear-gradient(90deg, var(--grid-line, var(--ipa-surface)) 1px, transparent 1px) 50% 0 / var(--grid) var(--grid),
		linear-gradient(180deg, var(--grid-line, var(--ipa-surface)) 1px, transparent 1px) 50% 0 / var(--grid) var(--grid);
	-webkit-mask-image: radial-gradient(ellipse 75% 65% at 50% 45%, transparent 10%, #000 92%);
	mask-image: radial-gradient(ellipse 75% 65% at 50% 45%, transparent 10%, #000 92%);
	opacity: var(--grid-o, .55);
	pointer-events: none;
}
/* In/out on scroll: the grid opens out from the centre and fades up as the
   section arrives, holds, then closes and fades as it leaves. The iris is a
   second mask intersected with the centre fade. Scroll-driven, no JavaScript;
   static without support or with reduced motion. */
@property --grid-iris { syntax: "<percentage>"; inherits: false; initial-value: 150%; }
@keyframes ipa-grid-inout {
	0% { --grid-iris: 0%; opacity: 0; }
	28%, 72% { --grid-iris: 150%; opacity: var(--grid-o, .55); }
	100% { --grid-iris: 0%; opacity: 0; }
}
@media (prefers-reduced-motion: no-preference) {
	@supports (animation-timeline: view()) {
		.ipa-section.has-grid::before, .ipa-pillar:nth-child(even)::before {
			-webkit-mask-image: radial-gradient(ellipse 75% 65% at 50% 45%, transparent 10%, #000 92%), radial-gradient(circle at 50% 50%, #000 var(--grid-iris), transparent calc(var(--grid-iris) + 30%));
			mask-image: radial-gradient(ellipse 75% 65% at 50% 45%, transparent 10%, #000 92%), radial-gradient(circle at 50% 50%, #000 var(--grid-iris), transparent calc(var(--grid-iris) + 30%));
			-webkit-mask-composite: source-in;
			mask-composite: intersect;
			animation: ipa-grid-inout linear both;
			animation-timeline: view();
		}
	}
}

/* Starfield (decor option): an inline SVG tile at two scales plus a low blue glow.
   Replaces a 90–180 KB background photo with under 2 KB of CSS. */
.ipa-section.has-starfield {
	--ipa-stars: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='520' height='520' fill='%23fff'%3E%3Ccircle cx='235' cy='291' r='0.7' fill-opacity='0.28'/%3E%3Ccircle cx='264' cy='305' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='328' cy='412' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='47' cy='421' r='0.55' fill-opacity='0.18'/%3E%3Ccircle cx='511' cy='502' r='0.55' fill-opacity='0.4'/%3E%3Ccircle cx='82' cy='8' r='0.45' fill-opacity='0.18'/%3E%3Ccircle cx='99' cy='126' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='229' cy='438' r='0.45' fill-opacity='0.4'/%3E%3Ccircle cx='260' cy='344' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='519' cy='518' r='0.7' fill-opacity='0.4'/%3E%3Ccircle cx='164' cy='119' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='398' cy='208' r='0.7' fill-opacity='0.28'/%3E%3Ccircle cx='498' cy='441' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='473' cy='244' r='0.9' fill-opacity='0.28'/%3E%3Ccircle cx='38' cy='327' r='0.55' fill-opacity='0.28'/%3E%3Ccircle cx='45' cy='173' r='0.9' fill-opacity='0.4'/%3E%3Ccircle cx='61' cy='128' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='414' cy='92' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='99' cy='381' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='61' cy='219' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='505' cy='418' r='0.35' fill-opacity='0.55'/%3E%3Ccircle cx='110' cy='205' r='0.7' fill-opacity='0.4'/%3E%3Ccircle cx='52' cy='514' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='402' cy='171' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='47' cy='303' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='193' cy='236' r='0.9' fill-opacity='0.28'/%3E%3Ccircle cx='299' cy='451' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='472' cy='425' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='385' cy='489' r='0.35' fill-opacity='0.75'/%3E%3Ccircle cx='459' cy='314' r='0.45' fill-opacity='0.18'/%3E%3Ccircle cx='20' cy='501' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='134' cy='428' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='91' cy='375' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='291' cy='443' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='477' cy='106' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='232' cy='31' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='298' cy='68' r='0.45' fill-opacity='0.55'/%3E%3Ccircle cx='510' cy='342' r='0.55' fill-opacity='0.4'/%3E%3Ccircle cx='73' cy='18' r='0.35' fill-opacity='0.55'/%3E%3Ccircle cx='365' cy='501' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='251' cy='380' r='0.45' fill-opacity='0.75'/%3E%3Ccircle cx='39' cy='284' r='0.55' fill-opacity='0.55'/%3E%3Ccircle cx='383' cy='366' r='0.55' fill-opacity='0.55'/%3E%3Ccircle cx='183' cy='356' r='0.7' fill-opacity='0.55'/%3E%3Ccircle cx='217' cy='411' r='0.7' fill-opacity='0.4'/%3E%3Ccircle cx='325' cy='199' r='0.45' fill-opacity='0.4'/%3E%3Ccircle cx='42' cy='332' r='0.9' fill-opacity='0.55'/%3E%3Ccircle cx='379' cy='202' r='0.55' fill-opacity='0.4'/%3E%3Ccircle cx='229' cy='436' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='15' cy='313' r='0.45' fill-opacity='0.18'/%3E%3Ccircle cx='363' cy='259' r='0.45' fill-opacity='0.55'/%3E%3Ccircle cx='133' cy='6' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='105' cy='88' r='0.7' fill-opacity='0.4'/%3E%3Ccircle cx='230' cy='464' r='0.45' fill-opacity='0.4'/%3E%3Ccircle cx='103' cy='224' r='0.55' fill-opacity='0.55'/%3E%3Ccircle cx='458' cy='200' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='71' cy='258' r='0.7' fill-opacity='0.55'/%3E%3Ccircle cx='370' cy='494' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='234' cy='143' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='325' cy='257' r='0.45' fill-opacity='0.55'/%3E%3Ccircle cx='511' cy='235' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='454' cy='22' r='0.55' fill-opacity='0.4'/%3E%3Ccircle cx='161' cy='412' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='237' cy='13' r='0.55' fill-opacity='0.18'/%3E%3Ccircle cx='73' cy='24' r='0.55' fill-opacity='0.28'/%3E%3Ccircle cx='328' cy='341' r='0.55' fill-opacity='0.75'/%3E%3Ccircle cx='356' cy='104' r='0.45' fill-opacity='0.18'/%3E%3Ccircle cx='6' cy='246' r='0.55' fill-opacity='0.18'/%3E%3Ccircle cx='142' cy='180' r='0.55' fill-opacity='0.28'/%3E%3Ccircle cx='320' cy='393' r='0.45' fill-opacity='0.4'/%3E%3Ccircle cx='471' cy='45' r='0.7' fill-opacity='0.4'/%3E%3Ccircle cx='68' cy='236' r='0.55' fill-opacity='0.55'/%3E%3Ccircle cx='196' cy='296' r='0.7' fill-opacity='0.4'/%3E%3Ccircle cx='491' cy='241' r='0.55' fill-opacity='0.18'/%3E%3Ccircle cx='375' cy='426' r='0.55' fill-opacity='0.4'/%3E%3Ccircle cx='111' cy='468' r='0.9' fill-opacity='0.75'/%3E%3Ccircle cx='279' cy='411' r='0.45' fill-opacity='0.55'/%3E%3Ccircle cx='445' cy='181' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='286' cy='399' r='0.45' fill-opacity='0.18'/%3E%3Ccircle cx='421' cy='33' r='0.55' fill-opacity='0.18'/%3E%3Ccircle cx='174' cy='410' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='269' cy='376' r='0.7' fill-opacity='0.4'/%3E%3Ccircle cx='492' cy='256' r='0.7' fill-opacity='0.18'/%3E%3Ccircle cx='115' cy='274' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='332' cy='272' r='0.7' fill-opacity='0.4'/%3E%3Ccircle cx='162' cy='198' r='0.7' fill-opacity='0.55'/%3E%3Ccircle cx='108' cy='442' r='0.9' fill-opacity='0.28'/%3E%3Ccircle cx='298' cy='105' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='315' cy='14' r='0.9' fill-opacity='0.28'/%3E%3Ccircle cx='208' cy='417' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='359' cy='34' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='498' cy='480' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='66' cy='226' r='0.55' fill-opacity='0.55'/%3E%3Ccircle cx='248' cy='165' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='481' cy='67' r='0.55' fill-opacity='0.18'/%3E%3Ccircle cx='101' cy='118' r='0.55' fill-opacity='0.28'/%3E%3Ccircle cx='185' cy='322' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='64' cy='265' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='276' cy='227' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='275' cy='83' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='332' cy='275' r='0.7' fill-opacity='0.4'/%3E%3Ccircle cx='446' cy='121' r='0.55' fill-opacity='0.55'/%3E%3Ccircle cx='469' cy='164' r='0.45' fill-opacity='0.55'/%3E%3Ccircle cx='113' cy='519' r='0.7' fill-opacity='0.18'/%3E%3Ccircle cx='124' cy='378' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='433' cy='219' r='0.55' fill-opacity='0.18'/%3E%3Ccircle cx='209' cy='356' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='355' cy='474' r='0.9' fill-opacity='0.18'/%3E%3Ccircle cx='263' cy='394' r='0.45' fill-opacity='0.4'/%3E%3Ccircle cx='98' cy='37' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='287' cy='268' r='0.45' fill-opacity='0.18'/%3E%3Ccircle cx='96' cy='106' r='0.7' fill-opacity='0.75'/%3E%3Ccircle cx='482' cy='50' r='0.35' fill-opacity='0.75'/%3E%3Ccircle cx='240' cy='398' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='268' cy='224' r='0.45' fill-opacity='0.18'/%3E%3Ccircle cx='365' cy='439' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='384' cy='211' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='267' cy='8' r='0.7' fill-opacity='0.55'/%3E%3Ccircle cx='366' cy='448' r='0.55' fill-opacity='0.28'/%3E%3Ccircle cx='312' cy='262' r='0.9' fill-opacity='0.55'/%3E%3Ccircle cx='134' cy='474' r='0.55' fill-opacity='0.4'/%3E%3Ccircle cx='424' cy='211' r='0.7' fill-opacity='0.55'/%3E%3Ccircle cx='361' cy='399' r='0.55' fill-opacity='0.28'/%3E%3Ccircle cx='376' cy='37' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='6' cy='185' r='0.55' fill-opacity='0.4'/%3E%3Ccircle cx='121' cy='491' r='0.55' fill-opacity='0.28'/%3E%3Ccircle cx='343' cy='296' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='520' cy='334' r='0.55' fill-opacity='0.4'/%3E%3Ccircle cx='510' cy='12' r='0.45' fill-opacity='0.4'/%3E%3Ccircle cx='133' cy='209' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='195' cy='51' r='0.35' fill-opacity='0.55'/%3E%3Ccircle cx='286' cy='264' r='0.9' fill-opacity='0.4'/%3E%3Ccircle cx='517' cy='332' r='0.55' fill-opacity='0.18'/%3E%3Ccircle cx='311' cy='395' r='0.35' fill-opacity='0.55'/%3E%3Ccircle cx='83' cy='245' r='0.35' fill-opacity='0.28'/%3E%3Ccircle cx='318' cy='30' r='0.7' fill-opacity='0.28'/%3E%3Ccircle cx='274' cy='311' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='341' cy='292' r='0.35' fill-opacity='0.4'/%3E%3Ccircle cx='154' cy='7' r='0.35' fill-opacity='0.18'/%3E%3Ccircle cx='81' cy='392' r='0.45' fill-opacity='0.55'/%3E%3Ccircle cx='389' cy='26' r='0.9' fill-opacity='0.75'/%3E%3Ccircle cx='38' cy='471' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='506' cy='127' r='0.45' fill-opacity='0.55'/%3E%3Ccircle cx='376' cy='244' r='0.9' fill-opacity='0.55'/%3E%3Ccircle cx='314' cy='60' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='106' cy='27' r='0.45' fill-opacity='0.18'/%3E%3Ccircle cx='230' cy='347' r='0.45' fill-opacity='0.28'/%3E%3Ccircle cx='303' cy='218' r='0.55' fill-opacity='0.28'/%3E%3Ccircle cx='519' cy='495' r='0.55' fill-opacity='0.18'/%3E%3Ccircle cx='59' cy='464' r='0.55' fill-opacity='0.4'/%3E%3C/svg%3E");
	background:
		var(--ipa-stars) 0 0 / 520px 520px,
		var(--ipa-stars) 190px 110px / 820px 820px,
		radial-gradient(ellipse 70% 45% at 50% 100%, rgb(30 74 150 / .28), transparent 70%),
		var(--c-bg);
}

/* Horizon arc (spec §7): the rim of a planet wider than the page (markup: ipa_horizon()).
   The rim leaves the page through both side edges; a soft glow sits above it. */
.ipa-horizon { position: absolute; left: 0; z-index: 1; width: 100%; height: max(40px, 8.68vw); color: var(--ipa-gold); pointer-events: none; transform-origin: 50% 100%; will-change: transform; }
.ipa-horizon svg { position: absolute; inset: 0; width: 100%; height: 100%; max-width: none; overflow: visible; }
.ipa-horizon path { vector-effect: non-scaling-stroke; }
.ipa-horizon__glow path { fill: currentColor; }
.ipa-horizon__glow { clip-path: inset(-60px -60px 0 -60px); filter: drop-shadow(0 0 6px color-mix(in srgb, var(--ipa-gold) 80%, transparent)) drop-shadow(0 0 22px color-mix(in srgb, var(--ipa-gold) 45%, transparent)); }
.ipa-horizon__band { stroke: none; }
.ipa-horizon--top { bottom: 100%; margin-bottom: -1px; }
.ipa-horizon--top .ipa-horizon__body { fill: var(--c-bg); }
.ipa-horizon--bottom { bottom: -1px; }
.ipa-horizon--bottom .ipa-horizon__body { fill: var(--ipa-navy); }
.ipa-section.has-horizon-top { z-index: 2; overflow: visible; overflow-x: clip; }

/* Rise: as the boundary comes up the screen the planet lifts and its curve
   steepens. Scroll-driven where supported (runs off the main thread); ipa.js
   drives the same transform elsewhere. Anchored at the bottom edge, so no gap
   ever opens at the section boundary. */
@keyframes ipa-rise { from { transform: scale(1.14, .28); } to { transform: none; } }
@media (prefers-reduced-motion: no-preference) {
	@supports (animation-timeline: view()) {
		.ipa-horizon { animation: ipa-rise linear both; animation-timeline: view(); animation-range: entry 0% cover 50%; }
		/* The footer arc sits near the end of the page, so finish before scrolling runs out. */
		.ipa-horizon--bottom { animation-range: entry 0% cover 30%; }
	}
}

/* About */
.ipa-about h2 { max-width: 600px; }
.ipa-about .ipa-stack p { line-height: 1.6; }

/* "Read more" reveal (core/details, style Read more). Content is in the DOM on load. */
.wp-block-details.is-style-reveal { margin: 0; }
.wp-block-details.is-style-reveal > summary {
	display: inline-flex;
	align-items: center;
	gap: 12px;
	list-style: none;
	color: var(--c-link);
	font: 500 16px/14px var(--font-mono);
	letter-spacing: var(--track-ui);
	text-transform: uppercase;
	cursor: pointer;
}
.wp-block-details.is-style-reveal > summary::-webkit-details-marker { display: none; }
.wp-block-details.is-style-reveal > summary::after {
	content: "";
	width: 14px;
	height: 14px;
	background:
		linear-gradient(currentColor, currentColor) 50% 0 / 2px 5px no-repeat,
		linear-gradient(currentColor, currentColor) 50% 100% / 2px 5px no-repeat,
		linear-gradient(currentColor, currentColor) 0 50% / 5px 2px no-repeat,
		linear-gradient(currentColor, currentColor) 100% 50% / 5px 2px no-repeat;
	transition: transform .28s ease-out;
}
.wp-block-details.is-style-reveal[open] > summary::after { transform: rotate(45deg); }
.wp-block-details.is-style-reveal > summary + * { margin-top: 20px; }
.wp-block-details.is-style-reveal > p + p { margin-top: 20px; }
.ipa-stack > .wp-block-details.is-style-reveal { margin-top: -6px !important; }

/* Statement */
.ipa-section--statement {
	display: flex;
	align-items: center;
	min-height: clamp(440px, 34.7vw, 600px);
	padding-block: 56px calc(max(28px, 6.94vw) + 40px);
}
.ipa-section--statement .ipa-section__inner { width: 100%; }
.ipa-statement { display: flex; flex-direction: column; align-items: center; gap: clamp(12px, 1.4vw, 20px); text-align: center; } /* Mark sits close to the quote (Jake, 24 Sep; was 34px). */
.ipa-statement > * { margin: 0 !important; }
/* Feature: a statement band with artwork layers (the hero's astronaut + swoosh) on the right and the
   copy left-aligned. Built for the video-hero homepage variant (Jake, 24 Sep). Tall enough that the
   layer scene is not cropped to a sliver. */
.ipa-section--feature { display: flex; align-items: center; min-height: clamp(560px, 52vw, 900px); padding-block: clamp(72px, 8vw, 120px); }
.ipa-section--feature .ipa-section__inner { width: 100%; }
.ipa-section--feature .ipa-statement { align-items: flex-start; text-align: left; }
.ipa-section--feature .ipa-statement > *, .ipa-section--feature .ipa-statement > .wp-block-quote.is-style-statement { max-width: min(600px, 48%); }
.ipa-section--feature .ipa-statement > .wp-block-quote.is-style-statement { margin: 0; }
.ipa-section--feature .wp-block-quote.is-style-statement p { text-wrap: pretty; }
@media (max-width: 899px) {
	.ipa-section--feature { align-items: flex-end; min-height: min(720px, 110vw); }
	.ipa-section--feature .ipa-statement > *, .ipa-section--feature .ipa-statement > .wp-block-quote.is-style-statement { max-width: none; }
	.ipa-section--feature .ipa-section__overlay.is-hero, .ipa-section--feature .has-scene ~ .ipa-section__overlay.is-hero { background: linear-gradient(0deg, var(--ipa-navy) 25%, rgb(25 33 80 / .55) 70%, rgb(25 33 80 / .2) 100%); }
}
.ipa-mark { display: flex; justify-content: center; }
.ipa-mark svg { width: 80px; height: auto; }
.wp-block-quote.is-style-statement { max-width: 1000px; margin: 0 auto; padding: 0; border: 0; }
.wp-block-quote.is-style-statement p {
	color: var(--ipa-white);
	font: 700 var(--type-h2)/1.27 var(--font-display);
	letter-spacing: -.02em;
	text-wrap: balance;
}
.wp-block-quote.is-style-statement cite {
	display: block;
	margin-top: 8px;
	color: var(--ipa-gold);
	font: 500 14px/40px var(--font-mono);
	font-style: normal;
	letter-spacing: 1px;
	text-transform: uppercase;
}

/* Halftone overlay (decor option "Halftone"). Dots grow toward the edges and
   vanish behind the text. A soft dot field is screened with a density
   gradient (white clears the dots), then a contrast filter snaps every soft
   dot to a hard one whose size follows the gradient: real halftone, no image.
   Inverted to white dots and screened over the media. */
.ipa-section__halftone { position: absolute; inset: 0; overflow: hidden; pointer-events: none; opacity: .18; mix-blend-mode: screen; }
.ipa-section__halftone::before {
	content: "";
	position: absolute;
	inset: -10px;
	background:
		radial-gradient(circle at center, #000 0, #fff 64%) 0 0 / 7px 7px,
		radial-gradient(ellipse 62% 74% at 50% 44%, #fff 36%, #a0a0a0 68%, #202020 100%);
	background-blend-mode: screen;
	filter: contrast(30) invert(1);
}

/* Swoosh divider and standalone mark (core/separator styles). */
.ipa-swoosh-divider { display: flex; align-items: center; gap: 28px; }
.ipa-swoosh-divider::before, .ipa-swoosh-divider::after { content: ""; flex: 1; height: 1px; background: var(--c-rule); }
.ipa-swoosh-divider svg { flex: none; width: 80px; height: auto; }

/* Statistics band (spec §9) */
.ipa-stats { position: relative; padding: clamp(56px, 6.7vw, 96px) 0; background: var(--ipa-surface); }
.ipa-stats__inner { display: flex; flex-direction: column; gap: clamp(32px, 3.5vw, 48px); width: min(var(--ipa-container), 100% - 2 * var(--ipa-gutter)); margin-inline: auto; }
.ipa-stats__framing { max-width: 820px; color: var(--ipa-navy); font-size: clamp(26px, 20px + 1vw, 34px); line-height: 1.24; letter-spacing: -.02em; }
.ipa-stats__grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 32px 24px; margin: 0; }
@media (min-width: 900px) { .ipa-stats__grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.ipa-stat { position: relative; display: flex; flex-direction: column-reverse; justify-content: flex-end; gap: 10px; padding-top: 23px; }
.ipa-stat::before { content: ""; position: absolute; inset: 0 0 auto; height: 3px; background: var(--ipa-stripes); }
.ipa-stat__figure { margin: 0; color: var(--ipa-navy); font: 700 clamp(38px, 28px + 1.5vw, 52px)/1.08 var(--font-display); letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
/* Fixed two-line label height so every cell ends on the same line (spec §9). */
.ipa-stat__figure { white-space: nowrap; }
/* Count-up fades in with the settle (ipa.js: .is-pending until it starts, .is-counting for its 0.9s run). */
.js-ipa-count.is-pending { opacity: 0; }
@media print { .js-ipa-count.is-pending { opacity: 1; } }
.js-ipa-count.is-counting { animation: ipa-count-in .9s cubic-bezier(.25, 1, .5, 1) both; }
@keyframes ipa-count-in { from { opacity: 0; } }
@media (max-width: 599px) { .ipa-stat__unit { font-size: .5em; letter-spacing: 0; } }
.ipa-stat__label { color: var(--ipa-ink-muted); font-size: 16px; line-height: 24px; } /* Never clamped: approved copy is shown whole (was two lines with an ellipsis). */
.ipa-stats__sources { color: var(--ipa-ink-subtle); font: 500 11px/1.6 var(--font-mono); letter-spacing: var(--track-ui); text-align: center; text-transform: uppercase; }
/* Inline: inside another section (About), no band of its own. */
.ipa-stats.is-inline { margin-top: clamp(48px, 5vw, 72px); padding: 0; background: none; }
.ipa-stats.is-inline .ipa-stats__inner { width: 100%; }
.ipa-stats.is-inline.is-draft { outline-offset: 12px; }
.ipa-stats__draft { align-self: flex-start; padding: 8px 12px; border: 1px dashed var(--ipa-navy-300); color: var(--ipa-navy); font: 500 12px/1.4 var(--font-mono); letter-spacing: .5px; text-transform: uppercase; }
.ipa-stats.is-draft { outline: 2px dashed var(--ipa-navy-300); outline-offset: -8px; }

/* Programs */
.ipa-programs { padding: clamp(8px, 40px - 2vw, 32px) 0 0; }
.ipa-programs .ipa-section-head p { max-width: 1100px; }
.ipa-pillars { margin-top: clamp(40px, 3.5vw, 60px); }
.ipa-pillar { position: relative; display: grid; gap: 32px; padding-block: 56px; }
.ipa-pillar:first-child { padding-top: 0; }
/* Landing from the nav (/#educate…): the first program has no top padding, so leave a little air above its photo. */
.ipa-pillar { scroll-margin-top: 0; }
.ipa-pillar:first-child { scroll-margin-top: 32px; }
.ipa-pillar:nth-child(even) { --c-bg: var(--ipa-surface); --grid-line: var(--ipa-white); --area-bg: var(--ipa-white); background: var(--ipa-surface); }
.ipa-pillar > * { position: relative; }
/* Striped bar along the top edge only: at least 8px tall, straddling the
   edge so it overlaps the photo, same width as the photo, no sideways offset.
   Transparent gaps, so the photo and ground show through. */
.ipa-pillar__media { --bar: clamp(8px, .7vw, 12px); position: relative; aspect-ratio: 780 / 629; }
/* Photo shadow: a faint navy hatch plate offset down and toward the copy (replaced the gold stripe bar, 24 Sep). */
.ipa-pillar__media { --shadow: clamp(10px, 1vw, 16px); isolation: isolate; }
.ipa-pillar__media::after { content: ""; position: absolute; z-index: -1; top: var(--shadow); bottom: calc(var(--shadow) * -1); left: 0; right: calc(var(--shadow) * -1); background: var(--ipa-hatch-navy); opacity: .4; pointer-events: none; }
.ipa-pillar.is-image-right .ipa-pillar__media::after { left: calc(var(--shadow) * -1); right: 0; }
.ipa-pillar__picture { display: block; overflow: hidden; background: var(--ipa-navy-100); }
.ipa-pillar__picture, .ipa-pillar__picture img { width: 100%; height: 100%; object-fit: cover; }
.ipa-pillar__content { display: flex; flex-direction: column; align-items: flex-start; gap: 15px; width: min(600px, 100% - 2 * var(--ipa-gutter)); margin-inline: auto; }
/* Index numeral as a faint watermark behind the text column. Decorative (aria-hidden). */
@media (max-width: 599px) { .ipa-pillar__watermark { opacity: .035; } }
.ipa-pillar__content { isolation: isolate; }
.ipa-pillar__watermark { position: absolute; top: -.18em; right: -.02em; z-index: -1; color: var(--ipa-navy); font: 700 clamp(110px, 17vw, 300px)/.8 var(--font-display); letter-spacing: -.06em; opacity: .045; pointer-events: none; user-select: none; }
.ipa-pillar__name { font-size: var(--type-h2); line-height: 1.27; letter-spacing: -.02em; }
.ipa-pillar__intro { color: var(--ipa-ink-muted); }
.ipa-pillar__action { margin-top: 7px; }
@media (min-width: 600px) and (max-width: 899px) {
	.ipa-pillar__media { aspect-ratio: 16 / 9; }
}
@media (min-width: 900px) {
	/* minmax(0, …) + align-self: start keep the aspect-ratio image from widening its column when an open toggle makes the text taller. */
	.ipa-pillar { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0; padding-block: 100px; }
	.ipa-pillar:first-child { padding-top: 0; }
	/* Shorter than the Figma 780:629 since the pillar button went (Jake, 23 Sep). */
	.ipa-pillar__media { grid-row: 1; grid-column: 1; justify-self: start; width: calc(100% - clamp(40px, 4.86vw, 84px)); aspect-ratio: 780 / 540; align-self: start; }
	.ipa-pillar__content { grid-row: 1; grid-column: 2; align-self: center; justify-self: start; width: min(600px, 100% - var(--ipa-gutter)); margin: 0; }
	.ipa-pillar.is-image-right .ipa-pillar__media { grid-column: 2; justify-self: end; }
	.ipa-pillar.is-image-right .ipa-pillar__content { grid-column: 1; justify-self: end; }
}

/* Focus areas: <details> toggles, one open per pillar (shared name). */
.ipa-areas { display: flex; flex-direction: column; gap: 10px; width: 100%; margin: 2px 0 0; padding: 20px 0; border-top: 1px solid var(--ipa-rule); list-style: none; }
.ipa-area {
	--area-accent: var(--ipa-gold);
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: 16px;
	width: 100%;
	min-height: 52px;
	padding: 13px 18px 13px 23px;
	border: 0;
	position: relative;
	background: var(--area-bg, var(--ipa-surface));
	color: var(--ipa-navy);
	font: 700 18px/1.3 var(--font-display);
	letter-spacing: -.01em;
	text-align: left;
	cursor: pointer;
	list-style: none;
	transition: background-color .3s var(--ipa-ease);
}
.ipa-area::-webkit-details-marker { display: none; }
.ipa-area:hover { background-color: var(--ipa-navy-100); }
.ipa-area:focus-visible { outline-offset: -2px; }
.ipa-area__icon { flex: none; width: 18px; height: 18px; transition: transform .35s var(--ipa-ease); }
.ipa-area:hover .ipa-area__icon, .ipa-area:focus-visible .ipa-area__icon { transform: rotate(90deg); }
/* Open: the crosshair turns to a close mark. */
.ipa-area-toggle[open] .ipa-area__icon { transform: rotate(45deg); }
.ipa-area-toggle[open] .ipa-area:hover .ipa-area__icon { transform: rotate(135deg); }
/* The stripe column runs down the whole toggle, row and panel together. */
.ipa-area-toggle { position: relative; background: var(--area-bg, var(--ipa-surface)); }
.ipa-area-toggle::before { content: ""; position: absolute; inset: 0 auto 0 0; z-index: 1; width: 3px; background: var(--ipa-stripes); pointer-events: none; transition: width .3s var(--ipa-ease); }
.ipa-area-toggle:hover::before, .ipa-area-toggle[open]::before { width: 6px; }
.ipa-area__detail { padding: 2px 24px 22px 23px; color: var(--ipa-ink-muted); font-size: 17px; line-height: 1.65; }
.ipa-area__detail > * + * { margin-top: 12px; }
/* Height animates where the browser can size to auto; elsewhere it snaps open. */
@media (prefers-reduced-motion: no-preference) {
	.ipa-area-toggle { interpolate-size: allow-keywords; }
	.ipa-area-toggle::details-content { block-size: 0; overflow: clip; transition: block-size .4s var(--ipa-ease), content-visibility .4s allow-discrete; }
	.ipa-area-toggle[open]::details-content { block-size: auto; }
	.ipa-area__detail { opacity: 0; translate: 0 -6px; transition: opacity .3s var(--ipa-ease), translate .4s var(--ipa-ease); }
	.ipa-area-toggle[open] .ipa-area__detail { opacity: 1; translate: none; }
}

/* Team */
.ipa-team-section { padding: clamp(64px, 7vw, 100px) 0 clamp(80px, 9vw, 150px); }
.ipa-team-section .ipa-split { padding-bottom: clamp(24px, 3vw, 50px); }
.ipa-team-section .ipa-split p { color: var(--ipa-white); }
.ipa-team { display: flex; flex-direction: column; gap: 31px; }
.ipa-team__head { display: flex; align-items: center; gap: 40px; }
.ipa-team__heading { flex: none; font-size: var(--type-h4); line-height: 1; }
.ipa-team__head .ipa-waterline { flex: 1; }
.ipa-team__grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 40px 20px; margin: 0; padding: 0; list-style: none; }
@media (min-width: 900px) {
	.ipa-team__grid { grid-template-columns: repeat(var(--cols, 5), minmax(0, 183px)); justify-content: space-between; column-gap: 24px; }
}
.ipa-member { position: relative; display: flex; flex-direction: column; align-items: flex-start; }
/* Portrait frame (Jake, 25 Sep): chamfered top-right and bottom-left corners (the gold corner brackets
   were tried and removed). With a bio, the whole card opens it (the View bio button's hit area is stretched over
   the card, so there is still one control) and hover or focus shows a "View bio" cue. */
.ipa-member__photo { --cut: clamp(12px, 1.2vw, 18px); position: relative; width: 100%; aspect-ratio: 4 / 5; }
.ipa-member__frame { position: absolute; inset: 0; overflow: hidden; background: var(--ipa-navy-700); clip-path: polygon(0 0, calc(100% - var(--cut)) 0, 100% var(--cut), 100% 100%, var(--cut) 100%, 0 calc(100% - var(--cut))); }
.ipa-member__frame picture, .ipa-member__frame img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 20%; transition: transform .6s var(--ipa-ease); }
.ipa-member__cue { position: absolute; inset: 0; display: grid; place-content: center; justify-items: center; gap: 10px; background: linear-gradient(0deg, rgb(25 33 80 / .9), rgb(25 33 80 / .55)); color: var(--ipa-gold); font: 500 12px/1 var(--font-mono); letter-spacing: var(--track-ui); text-transform: uppercase; opacity: 0; transition: opacity .35s var(--ipa-ease); }
.ipa-member__cue-icon { width: 22px; height: 22px; transition: rotate .6s var(--ipa-ease); }
.ipa-member__bio-link::before { content: ""; position: absolute; inset: 0; z-index: 2; }
.ipa-member:has(.ipa-member__bio-link:is(:hover, :focus-visible)) :is(img) { transform: scale(1.04); }
.ipa-member:has(.ipa-member__bio-link:is(:hover, :focus-visible)) .ipa-member__cue { opacity: 1; }
.ipa-member:has(.ipa-member__bio-link:is(:hover, :focus-visible)) .ipa-member__cue-icon { rotate: 90deg; }
.ipa-member__bio-link:focus-visible { outline-offset: 4px; }
.ipa-member__designation { margin-top: 20px; color: var(--ipa-gold) !important; font: 500 11px/16px var(--font-mono); letter-spacing: .8px; text-transform: uppercase; }
.ipa-member__name { margin-top: 6px; color: var(--ipa-white); font-size: 18px; line-height: 24px; }
/* Fixed two-line height so every "View bio" sits on one line across the row (spec §5.5). */
.ipa-member__role { display: -webkit-box; height: 42px; margin-top: 6px; overflow: hidden; color: rgb(255 255 255 / .72) !important; font-size: 15px; line-height: 21px; -webkit-box-orient: vertical; -webkit-line-clamp: 2; line-clamp: 2; }
.ipa-member__bio-link { margin-top: 18px; padding: 0 0 2px; font-size: 12px; line-height: 16px; }
.ipa-member__bio-link.is-placeholder { display: block; height: 18px; }

/* Photo strip */
.ipa-strip { position: relative; background: var(--ipa-navy); }
.ipa-strip__track { overflow-x: auto; overscroll-behavior-x: contain; scroll-snap-type: x mandatory; scrollbar-width: none; }
.ipa-strip__track::-webkit-scrollbar { display: none; }
.ipa-strip__track:focus-visible { outline: 2px solid var(--ipa-gold); outline-offset: -4px; }
.ipa-strip__list { display: flex; margin: 0; padding: 0; list-style: none; }
.ipa-strip__item { flex: 0 0 82vw; height: clamp(260px, 25.35vw, 438px); scroll-snap-align: start; overflow: hidden; }
.ipa-strip__item picture, .ipa-strip__item img { width: 100%; height: 100%; object-fit: cover; }
.ipa-strip__item img { transition: transform 1.2s var(--ipa-ease); }
.ipa-strip__item:hover img { transform: scale(1.03); }
@media (min-width: 600px) { .ipa-strip__item { flex-basis: 45vw; } }
@media (min-width: 1200px) { .ipa-strip__item { flex-basis: 25vw; } }
.ipa-strip__controls { display: none; }
.ipa-strip.is-ready .ipa-strip__controls { display: block; }
.ipa-strip__btn {
	position: absolute;
	top: 50%;
	z-index: 1;
	display: grid;
	place-items: center;
	width: 52px;
	height: 52px;
	padding: 0;
	border: 0;
	border-radius: 50%;
	background: rgb(25 33 80 / .82);
	color: var(--ipa-white);
	cursor: pointer;
	opacity: 0;
	transform: translateY(-50%);
	transition: opacity .3s var(--ipa-ease), background-color .3s var(--ipa-ease);
	-webkit-backdrop-filter: blur(6px);
	backdrop-filter: blur(6px);
}
.ipa-strip__btn.is-prev { left: 20px; }
.ipa-strip__btn.is-prev svg { transform: scaleX(-1); }
.ipa-strip__btn.is-next { right: 20px; }
.ipa-strip:hover .ipa-strip__btn:not(:disabled), .ipa-strip__btn:focus-visible, .ipa-strip:focus-within .ipa-strip__btn:not(:disabled) { opacity: 1; }
.ipa-strip__btn:hover { background: var(--ipa-navy); }
.ipa-strip__btn:disabled { cursor: default; }
.ipa-strip__btn:focus-visible { outline-color: var(--ipa-white); }
@media (hover: none) { .ipa-strip__btn { display: none; } }

/* Marquee mode (ipa.js): the list drifts continuously; drag, wheel, arrows and
   the buttons still move it. Pauses on hover, focus, off-screen, or the toggle. */
.ipa-strip.is-marquee .ipa-strip__track { overflow: hidden; scroll-snap-type: none; cursor: grab; touch-action: pan-y; }
.ipa-strip.is-marquee .ipa-strip__track.is-dragging { cursor: grabbing; }
.ipa-strip.is-marquee .ipa-strip__list { will-change: transform; }
.ipa-strip.is-marquee .ipa-strip__item img { -webkit-user-drag: none; user-select: none; }
.ipa-strip__toggle { position: absolute; right: 20px; bottom: 20px; z-index: 2; display: grid; place-items: center; width: 40px; height: 40px; padding: 0; border: 0; border-radius: 50%; background: rgb(25 33 80 / .82); color: var(--ipa-white); cursor: pointer; -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); transition: background-color .25s var(--ipa-ease); }
.ipa-strip__toggle[hidden] { display: none; }
.ipa-strip__toggle:hover { background: var(--ipa-navy); }
.ipa-strip__toggle:focus-visible { outline-color: var(--ipa-white); }
.ipa-strip__toggle .is-play, .ipa-strip__toggle[aria-pressed="true"] .is-pause { display: none; }
.ipa-strip__toggle[aria-pressed="true"] .is-play { display: block; }

/* Ways to Give */
.ipa-give-section { padding: clamp(64px, 7vw, 100px) 0 clamp(96px, 10.5vw, 180px); }
.ipa-give-section .ipa-section__inner { display: flex; flex-direction: column; gap: 60px; }
.ipa-give-section .ipa-section__inner > * { margin-block: 0; }
.ipa-section__rings { position: absolute; top: -348px; left: calc(50% + 146px); width: 1576px; max-width: none; height: 1576px; pointer-events: none; }

/* Orbiting bodies. Periods follow Kepler's third law (T ∝ r^1.5), so the
   inner body laps the outer ones, and the gold planet carries a moon. */
.ipa-section__rings .ipa-orbit, .ipa-section__rings .ipa-moon { transform-box: view-box; }
.ipa-section__rings .ipa-orbit { transform-origin: 788px 788px; transform: rotate(calc(var(--p) * 360deg)); }
.ipa-body { fill: var(--ipa-white); opacity: .85; }
.ipa-body.is-gold { fill: var(--ipa-gold); opacity: 1; }
.ipa-body.is-moon { opacity: .7; }
.ipa-body.is-far { fill: var(--ipa-navy-300); opacity: .7; }
.ipa-body.is-dust { opacity: .35; }
@keyframes ipa-orbit { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: no-preference) {
	.ipa-section__rings .ipa-orbit { animation: ipa-orbit var(--t) linear infinite; animation-delay: calc(var(--t) * var(--p) * -1); }
	.ipa-section__rings .ipa-moon { animation: ipa-orbit var(--t) linear infinite; }
	.is-offscreen .ipa-section__rings .ipa-orbit, .is-offscreen .ipa-section__rings .ipa-moon { animation-play-state: paused; }
}
.ipa-give { display: grid; grid-template-columns: minmax(0, 1fr); gap: 48px; align-items: start; }
.ipa-give__intro { display: flex; flex-direction: column; gap: 34px; }
.ipa-give__intro > * { margin: 0 !important; }
.ipa-give__intro p { color: var(--ipa-white); }
@media (min-width: 900px) {
	.ipa-give { grid-template-columns: minmax(0, 540px) minmax(0, 584px); justify-content: space-between; column-gap: 48px; }
	.ipa-donate-panel { position: sticky; top: 32px; }
}
.ipa-giving { display: flex; flex-direction: column; gap: 34px; margin: 0; padding: 0; list-style: none; }
.ipa-giving__item { display: flex; flex-direction: column; align-items: flex-start; gap: 14px; }
.ipa-giving__title { color: var(--ipa-white); font: 700 22px/1.2 var(--font-body); margin-bottom: -8px; }
.ipa-giving__body { color: var(--ipa-white) !important; }

.ipa-cta { display: flex; flex-direction: column; align-items: center; gap: 20px; max-width: 820px; padding-bottom: 60px; text-align: center; }
.ipa-cta > * { margin: 0 !important; }
.ipa-cta p { color: var(--ipa-white); }
.ipa-cta p + p { margin-top: 10px !important; }
.ipa-cta .wp-block-buttons { justify-content: center; margin-top: 10px !important; }

/* Donation module */
.ipa-donate { margin: 0; }
.ipa-donate fieldset { min-width: 0; margin: 0; padding: 0; border: 0; }
.ipa-donate__radio { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.ipa-donate__freq { display: grid; grid-template-columns: 1fr 1fr; }
.ipa-donate__tab {
	display: grid;
	place-items: center;
	height: 46px;
	border: 1px solid var(--ipa-white);
	border-bottom: 0;
	background: var(--ipa-navy);
	color: var(--ipa-surface);
	font: 500 16px/14px var(--font-mono);
	letter-spacing: var(--track-ui);
	text-transform: uppercase;
	cursor: pointer;
	transition: background-color .25s var(--ipa-ease), color .25s var(--ipa-ease);
}
.ipa-donate__tab + .ipa-donate__radio + .ipa-donate__tab { border-left: 0; }
.ipa-donate__radio:checked + .ipa-donate__tab { background: var(--ipa-gold); color: var(--ipa-navy); }
.ipa-donate__tab:hover { background: var(--ipa-navy-700); }
.ipa-donate__radio:checked + .ipa-donate__tab:hover { background: var(--ipa-gold-hover); }
.ipa-donate__radio:focus-visible + label { outline: 2px solid var(--ipa-white); outline-offset: -5px; }
.ipa-donate__radio:checked:focus-visible + label { outline-color: var(--ipa-navy); }
.ipa-donate__body { display: flex; flex-direction: column; gap: 15px; padding: clamp(20px, 3vw, 32px) clamp(20px, 3vw, 36px); border: 1px solid var(--ipa-white); border-top: 0; background: var(--ipa-navy-700); }
.ipa-donate__amounts { margin-bottom: 17px !important; }
.ipa-donate__designation { display: flex; flex-direction: column; gap: 8px; margin-bottom: 8px; }
.ipa-donate__label { color: var(--ipa-navy-100); font: 500 13px/1.3 var(--font-mono); letter-spacing: var(--track-ui); text-transform: uppercase; }
.ipa-donate__select {
	width: 100%;
	height: 45px;
	padding: 0 48px 0 18px;
	border: 0;
	border-radius: 0;
	background: rgb(255 255 255 / .04) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Cpath d='M3 6l5 5 5-5' fill='none' stroke='%23FFCF40' stroke-width='2'/%3E%3C/svg%3E") no-repeat right 16px center / 16px;
	box-shadow: inset 0 0 0 1px rgb(255 255 255 / .22);
	color: var(--ipa-white);
	font: 400 18px/1 var(--font-body);
	cursor: pointer;
	-webkit-appearance: none;
	appearance: none;
}
.ipa-donate__select:hover { box-shadow: inset 0 0 0 1px rgb(255 255 255 / .6); }
.ipa-donate__select:focus-visible { outline: 2px solid var(--ipa-gold); outline-offset: 3px; }
.ipa-donate__select option { background: var(--ipa-navy); color: var(--ipa-white); }
.ipa-giving__email { margin-top: -6px; }
.ipa-giving__email a { color: var(--ipa-navy-100); font-size: 16px; text-underline-offset: 3px; }
.ipa-giving__email a:hover { color: var(--ipa-white); }
.ipa-donate__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
@media (min-width: 600px) { .ipa-donate__grid { gap: 23px; } }
.ipa-donate__amount {
	display: grid;
	place-items: center;
	height: 45px;
	box-shadow: inset 0 0 0 1px rgb(255 255 255 / .22);
	color: var(--ipa-white);
	font: 500 16px/14px var(--font-mono);
	letter-spacing: var(--track-ui);
	cursor: pointer;
	transition: background-color .2s var(--ipa-ease), box-shadow .2s var(--ipa-ease), color .2s var(--ipa-ease), outline-color .2s;
	outline: 2px solid transparent;
	outline-offset: 1px;
}
.ipa-donate__amount:hover { box-shadow: inset 0 0 0 1px rgb(255 255 255 / .7); }
.ipa-donate__radio:checked + .ipa-donate__amount { background: var(--ipa-white); color: var(--ipa-navy); outline-color: var(--ipa-white); }
.ipa-donate__radio:focus-visible + .ipa-donate__amount { outline: 2px solid var(--ipa-gold); outline-offset: 3px; }
.ipa-donate__other { position: relative; display: flex; align-items: center; gap: 9px; height: 45px; margin-top: 23px; padding: 0 14px 0 22px; background: rgb(255 255 255 / .04); box-shadow: inset 0 0 0 1px rgb(255 255 255 / .22); transition: box-shadow .2s var(--ipa-ease); }
.ipa-donate__other:focus-within { box-shadow: inset 0 0 0 2px var(--ipa-white); }
.ipa-donate__other.is-active { box-shadow: inset 0 0 0 2px var(--ipa-white); background: rgb(255 255 255 / .08); }
.ipa-donate__currency { color: var(--ipa-white); font: 500 16px/14px var(--font-mono); }
.ipa-donate__input { flex: 1; min-width: 0; height: 100%; padding: 0; border: 0; background: none; color: var(--ipa-white); font: 400 19px/1 var(--font-body); }
.ipa-donate__input::placeholder { color: var(--ipa-navy-300); opacity: 1; }
.ipa-donate__input:focus { outline: none; }
.ipa-donate__input[aria-invalid="true"] { text-decoration: underline wavy var(--ipa-error) 1px; }
.ipa-donate__other:has([aria-invalid="true"]) { box-shadow: inset 0 0 0 2px var(--ipa-error); }
.ipa-donate__error { display: flex; align-items: flex-start; gap: 10px; color: var(--ipa-error); font-size: 16px; line-height: 1.4; }
.ipa-donate__error[hidden] { display: none; }
.ipa-donate__error svg { flex: none; margin-top: 1px; }
/* Trust line, policy links and any counsel-required disclosure (Stripe's site checklist). */
.ipa-donate__trust { display: flex; flex-direction: column; gap: 6px; }
.ipa-donate__caption { display: flex; align-items: baseline; gap: 8px; color: var(--ipa-navy-300) !important; font-size: 16px; line-height: 1.5; }
.ipa-donate__lock { flex: none; position: relative; top: 1px; }
.ipa-donate__legal { display: flex; flex-wrap: wrap; gap: 4px 20px; color: var(--ipa-navy-300) !important; font: 500 13px/1.6 var(--font-mono); letter-spacing: var(--track-ui); text-transform: uppercase; }
.ipa-donate__legal a { color: inherit; text-decoration: underline; text-decoration-color: rgb(255 255 255 / .3); text-underline-offset: 3px; }
.ipa-donate__legal a:hover { color: var(--ipa-white); text-decoration-color: var(--ipa-gold); }
.ipa-donate__disclosure { color: var(--ipa-navy-300) !important; font-size: 13px; line-height: 1.5; }
.ipa-donate__suffix { color: var(--ipa-navy-300); font: 500 13px/1 var(--font-mono); letter-spacing: var(--track-ui); }
/* Monthly suggestion. */
.ipa-donate__nudge { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; padding: 10px 14px 10px 17px; position: relative; background: rgb(255 255 255 / .05); color: var(--ipa-white) !important; font-size: 16px; line-height: 1.5; }
.ipa-donate__nudge::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 3px; background: var(--ipa-gold); }
.ipa-donate__nudge[hidden] { display: none; }
.ipa-donate__nudge .ipa-link { padding: 0; border: 0; background-color: transparent; color: var(--ipa-gold); font: inherit; font-weight: 600; cursor: pointer; }
/* Cover the fees. */
.ipa-donate__fee { display: flex; align-items: flex-start; gap: 12px; color: var(--ipa-white); font-size: 16px; line-height: 1.45; cursor: pointer; }
.ipa-donate__check { flex: none; width: 20px; height: 20px; margin: 1px 0 0; accent-color: var(--ipa-gold); cursor: pointer; }
.ipa-donate__status { position: relative; padding: 12px 16px 12px 19px; background: rgb(255 255 255 / .06); color: var(--ipa-white) !important; font-size: 17px; line-height: 1.5; }
.ipa-donate__status[hidden] { display: none; }
.ipa-donate__status::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 3px; background: var(--ipa-stripes); }

/* Modals: native <dialog> (focus containment, Esc, top layer). */
/* Modals: native <dialog> (focus containment, Esc, top layer), dressed in the
   button language. Open: the card opens like a hatch from a horizontal band,
   its gold border draws itself around the card and closes at the top into
   one solid line, and the content steps in. Close: a faster reverse (ipa.js adds .is-closing and
   closes when it ends). Phones get a bottom sheet. Reduced motion: instant. */
.ipa-modal {
	--modal-in: .32s;
	--modal-out: .16s;
	width: min(960px, 100% - 32px);
	max-width: none;
	max-height: calc(100dvh - 32px);
	padding: 0;
	border: 0;
	background: transparent;
	color: var(--ipa-white);
	overflow: visible;
}
.ipa-modal::backdrop { background: rgb(15 17 21 / .74); -webkit-backdrop-filter: blur(6px); backdrop-filter: blur(6px); }
.ipa-modal__card {
	position: relative;
	max-height: calc(100dvh - 32px);
	padding: clamp(28px, 4vw, 56px);
	overflow-y: auto;
	overscroll-behavior: contain;
	background: var(--ipa-navy-700);
	box-shadow: inset 0 0 0 1px rgb(255 255 255 / .1), 0 30px 80px -20px rgb(0 0 0 / .6);
	scrollbar-width: thin;
	scrollbar-color: rgb(255 255 255 / .25) transparent;
}
.ipa-modal__trace { position: absolute; inset: 1px; width: calc(100% - 2px); height: calc(100% - 2px); overflow: visible; pointer-events: none; }
.ipa-modal__trace rect { fill: none; stroke: var(--ipa-gold); stroke-width: 1.5; stroke-dasharray: 100 100; stroke-dashoffset: 0; }

/* Close: a square outline button with the gold trace, like the secondary button on navy. */
.ipa-modal__close {
	position: absolute;
	top: 14px;
	right: 14px;
	z-index: 2;
	display: grid;
	place-items: center;
	width: 44px;
	height: 44px;
	padding: 0;
	border: 0;
	background: rgb(255 255 255 / 0);
	box-shadow: inset 0 0 0 1px rgb(255 255 255 / .2);
	color: var(--ipa-white);
	cursor: pointer;
	transition: background-color .2s var(--ipa-ease), box-shadow .2s var(--ipa-ease), color .2s var(--ipa-ease);
}
.ipa-modal__close > svg:not(.ipa-trace) { width: 18px; height: 18px; transition: transform .35s var(--ipa-ease); }
.ipa-modal__close .ipa-trace rect { stroke: var(--ipa-gold); }
.ipa-modal__close:hover, .ipa-modal__close:focus-visible { background: rgb(255 255 255 / .05); box-shadow: inset 0 0 0 1px var(--ipa-white); color: var(--ipa-gold); }
.ipa-modal__close:hover > svg:not(.ipa-trace) { transform: rotate(90deg); }
.ipa-modal__close:hover .ipa-trace rect, .ipa-modal__close:focus-visible .ipa-trace rect { animation: ipa-trace var(--ipa-trace-ms) var(--ipa-ease) both; }

.ipa-modal__title { margin-bottom: 24px; padding-right: 56px; font-size: clamp(28px, 3vw, 36px); line-height: 1.1; letter-spacing: -.02em; }
.ipa-modal--donate { width: min(640px, 100% - 32px); }
.ipa-modal--donate .ipa-modal__card { padding-top: clamp(32px, 4vw, 48px); }
.ipa-modal--donate .ipa-donate__body { background: var(--ipa-navy); }

@media (prefers-reduced-motion: no-preference) {
	.ipa-modal[open] .ipa-modal__card { animation: ipa-hatch-in var(--modal-in) var(--ipa-ease) both; }
	.ipa-modal[open] .ipa-modal__card > :not(.ipa-modal__close) { animation: ipa-step-in .34s var(--ipa-ease) .12s both; }
	.ipa-modal[open] .ipa-modal__card > :nth-child(3) { animation-delay: .16s; }
	.ipa-modal[open] .ipa-modal__card > :nth-child(n+4) { animation-delay: .2s; }
	.ipa-modal[open] .ipa-modal__close { animation: ipa-step-in .3s var(--ipa-ease) .18s both; }
	.ipa-modal[open] .ipa-modal__trace rect { animation: ipa-card-trace .7s cubic-bezier(.45, 0, .2, 1) .1s both; }
	.ipa-modal[open]::backdrop { animation: ipa-fade .24s ease both; }
	.ipa-modal.is-closing .ipa-modal__card { animation: ipa-hatch-out var(--modal-out) cubic-bezier(.4, 0, 1, 1) both; }
	.ipa-modal.is-closing::backdrop { animation: ipa-fade-out var(--modal-out) ease both; }
	.ipa-modal.is-closing .ipa-modal__trace { opacity: 0; transition: opacity var(--modal-out) ease; }
}
@keyframes ipa-hatch-in {
	from { clip-path: inset(46% 0 46% 0); transform: scale(.985); opacity: .3; }
	55% { opacity: 1; }
	to { clip-path: inset(0); transform: none; }
}
@keyframes ipa-hatch-out {
	from { clip-path: inset(0); opacity: 1; }
	to { clip-path: inset(48% 0 48% 0); transform: scale(.99); opacity: 0; }
}
@keyframes ipa-step-in { from { opacity: 0; transform: translateY(10px); } }
/* The border draws itself clockwise from the top-left corner and closes back
   at the top into one solid gold line, which stays. */
@keyframes ipa-card-trace { from { stroke-dashoffset: 100; } to { stroke-dashoffset: 0; } }
@keyframes ipa-fade { from { opacity: 0; } }
@keyframes ipa-fade-out { to { opacity: 0; } }

/* Phones: bottom sheet. */
@media (max-width: 599px) {
	.ipa-modal { width: 100%; max-width: 100%; max-height: 92dvh; margin: auto 0 0; }
	.ipa-modal__card { max-height: 92dvh; padding: 36px 20px 28px; }
	@media (prefers-reduced-motion: no-preference) {
		.ipa-modal[open] .ipa-modal__card { animation: ipa-sheet-in .3s var(--ipa-ease) both; }
		.ipa-modal.is-closing .ipa-modal__card { animation: ipa-sheet-out .18s cubic-bezier(.4, 0, 1, 1) both; }
	}
}
@keyframes ipa-sheet-in { from { transform: translateY(100%); } }
@keyframes ipa-sheet-out { to { transform: translateY(100%); } }

html:has(.ipa-modal[open]) { overflow: hidden; }

.ipa-checkout { display: flex; flex-direction: column; gap: 16px; }
.ipa-checkout[hidden] { display: none; }
.ipa-checkout__back { align-self: flex-start; }
.ipa-checkout__frame iframe { display: block; width: 100%; height: min(760px, 70dvh); border: 0; background: var(--ipa-white); }

/* Donate modal intro + thank-you modal */
.ipa-modal__intro { margin: -8px 0 24px; color: rgb(255 255 255 / .86); font-size: 18px; line-height: 1.55; }
.ipa-modal--thanks { width: min(560px, 100% - 32px); text-align: center; }
.ipa-thanks { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 12px 0 8px; }
.ipa-thanks__mark { width: 88px; height: auto; margin-bottom: 18px; }
.ipa-thanks__text { color: rgb(255 255 255 / .86); font-size: 19px; line-height: 1.55; }
.ipa-btn[aria-busy="true"] { cursor: progress; opacity: .85; }

/* Focus-area modal */
.ipa-modal--area { width: min(720px, 100% - 32px); }
.ipa-area-modal { max-width: 640px; }
.ipa-area-modal__title { padding-right: 40px; font-size: clamp(28px, 3vw, 36px); line-height: 1.15; letter-spacing: -.02em; }
.ipa-area-modal__text { margin-top: 20px; color: rgb(255 255 255 / .86); font-size: 18px; line-height: 1.65; }
.ipa-area-modal__text p + p { margin-top: 14px; }
.ipa-rich > * + * { margin-top: 14px; }
.ipa-rich h2, .ipa-rich h3, .ipa-rich h4 { margin-top: 26px; color: var(--ipa-white); font-size: var(--type-h4); line-height: 1.2; }
.ipa-rich ul, .ipa-rich ol { padding-left: 1.2em; }
.ipa-rich li + li { margin-top: 6px; }
.ipa-rich a { color: var(--ipa-gold); text-underline-offset: 3px; }
.ipa-rich img { height: auto; }

/* Bio modal */
.ipa-bio { display: grid; gap: 28px; }
@media (min-width: 720px) { .ipa-bio { grid-template-columns: 260px 1fr; gap: 44px; align-items: start; } }
.ipa-bio__photo { width: min(260px, 60%); aspect-ratio: 4 / 5; overflow: hidden; }
@media (min-width: 720px) { .ipa-bio__photo { position: sticky; top: 0; width: 100%; } }
.ipa-bio__photo picture, .ipa-bio__photo img { width: 100%; height: 100%; object-fit: cover; object-position: 50% 20%; }
.ipa-bio__designation { color: var(--ipa-gold); font: 500 12px/16px var(--font-mono); letter-spacing: .8px; text-transform: uppercase; }
.ipa-bio__name { margin-top: 10px; font-size: clamp(30px, 3vw, 36px); line-height: 1.1; letter-spacing: -.02em; }
.ipa-bio__role { margin-top: 8px; color: rgb(255 255 255 / .8); font-size: 19px; }
.ipa-bio__stats { display: grid; grid-template-columns: repeat(2, 1fr); gap: 1px; margin: 28px 0 0; background: rgb(255 255 255 / .14); border: 1px solid rgb(255 255 255 / .14); }
@media (min-width: 720px) { .ipa-bio__stats { grid-template-columns: repeat(4, 1fr); } }
.ipa-bio__stat { display: flex; flex-direction: column-reverse; justify-content: flex-end; gap: 6px; padding: 16px; background: var(--ipa-navy-700); }
.ipa-bio__stat dt { color: rgb(255 255 255 / .72); font: 500 11px/1.35 var(--font-mono); letter-spacing: .8px; text-transform: uppercase; }
.ipa-bio__stat dd { margin: 0; color: var(--ipa-gold); font: 700 clamp(30px, 3vw, 40px)/1 var(--font-display); letter-spacing: -.02em; }
.ipa-bio__duties { margin-top: 28px; padding-top: 24px; border-top: 1px solid rgb(216 216 216 / .42); color: var(--ipa-white); font-size: 20px; line-height: 1.55; }
.ipa-bio__text { margin-top: 20px; color: rgb(255 255 255 / .86); font-size: 17px; line-height: 1.65; }
.ipa-bio__text p + p { margin-top: 14px; }

/* Footer */
.ipa-footer { position: relative; overflow: hidden; background: var(--ipa-navy); color: var(--ipa-white); padding-top: clamp(48px, 5vw, 70px); }
.ipa-footer__inner { display: flex; flex-direction: column; gap: 28px; width: min(var(--ipa-container), 100% - 2 * var(--ipa-gutter)); margin-inline: auto; }
/* When the page ends on a planet rim, the footer tucks up under it so the logo sits inside the curve.
   The rim's inner edge clears the container corners by about 18px at 1280, 41px at 1440 and 64px at 1600
   (ipa_horizon geometry), so the pull grows with the width and keeps a ~14px gap below the gold band. */
.ipa-main:has(.entry-content > .has-horizon-bottom:last-child) + .ipa-site-footer .ipa-footer { display: flow-root; padding-top: 0; overflow: visible; overflow-x: clip; }
.ipa-main:has(.entry-content > .has-horizon-bottom:last-child) + .ipa-site-footer .ipa-footer__inner { position: relative; z-index: 2; margin-top: 12px; }
/* Desktop gets more room under the rim (Jake, 25 Sep: 12-14px at 1280-1600 felt tight). The gold band clears
   the container corner by ~18px at 1024-1280, 41px at 1440, 64px at 1600 and 105px at 1920; these margins
   keep the logo about 40px below it at 1024, then 60-75px from 1280 up. */
@media (min-width: 1024px) {
	.ipa-main:has(.entry-content > .has-horizon-bottom:last-child) + .ipa-site-footer .ipa-footer__inner { margin-top: calc(22px + (100vw - 1024px) * .078); }
}
@media (min-width: 1280px) {
	.ipa-main:has(.entry-content > .has-horizon-bottom:last-child) + .ipa-site-footer .ipa-footer__inner { margin-top: clamp(-30px, calc(42px - (100vw - 1280px) * .1125), 42px); }
}
.ipa-footer__top { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 28px 40px; padding-bottom: 34px; border-bottom: 1px solid var(--ipa-navy-700); }
.ipa-footer__logo .ipa-logo { height: 54px; }
.ipa-footer__nav { display: flex; flex-wrap: wrap; align-items: center; gap: 24px 40px; }
.ipa-footer__nav .ipa-nav__list { flex-wrap: wrap; gap: 16px 32px; }
.ipa-footer__address { display: flex; flex-direction: column; color: var(--ipa-navy-300); font: 500 14px/22px var(--font-mono); font-style: normal; letter-spacing: var(--track-ui); text-transform: uppercase; }
.ipa-footer__address a { text-decoration: none; }
.ipa-footer__address a:hover { color: var(--ipa-white); text-decoration: underline; text-underline-offset: 3px; }
.ipa-footer__dot { margin-inline: 12px; }
.ipa-footer__bottom { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 16px 40px; }
.ipa-footer__copyright { color: var(--ipa-navy-300); font-size: 19px; line-height: 1.6; }
/* Copyright and legal links are muted like the address (Jake, 24 Sep); links brighten on hover. */
.ipa-footer__legal, .ipa-footer__legal a { color: var(--ipa-navy-300); }
.ipa-footer__legal a:hover, .ipa-footer__legal a:focus-visible { color: var(--ipa-white); }
.ipa-footer__legal { display: flex; flex-wrap: wrap; margin: 0; padding: 0; list-style: none; font: 500 16px/14px var(--font-mono); letter-spacing: var(--track-ui); text-transform: uppercase; }
.ipa-footer__legal { gap: 14px 0; }
.ipa-footer__legal li + li::before { content: "|"; margin-inline: 16px; }
@media (max-width: 599px) {
	.ipa-footer__legal { flex-direction: column; }
	.ipa-footer__legal li + li::before { content: none; }
}
.ipa-footer__legal a { text-decoration: none; }
.ipa-footer__legal a:hover { text-decoration: underline; text-decoration-color: var(--ipa-gold); text-underline-offset: 4px; }
.ipa-footer__lockup {
	--base: rgb(139 153 196 / .2);
	/* The letters bleed off the bottom edge. Clipped by the line itself (not the footer, which has to
	   let the logo rise into the rim above), so nothing hangs below the page. */
	height: .8em;
	margin: clamp(32px, 3vw, 52px) 0 0;
	overflow: hidden;
	color: var(--base);
	/* 149vw / characters: the comp's 3.82vw at 39 characters, so any line spans the page. */
	font: 500 calc(149vw / var(--chars, 39))/1 var(--font-mono);
	letter-spacing: .017em;
	text-align: center;
	text-transform: uppercase;
	white-space: nowrap;
	user-select: none;
}
/* Flair (24 Sep): the line fades in left to right as the footer scrolls into view, then a faint gold
   glint drifts across the letters every few seconds. */
@media (prefers-reduced-motion: no-preference) {
	.ipa-footer__lockup {
		color: transparent;
		background: linear-gradient(100deg, var(--base) 0 42%, rgb(255 207 64 / .42) 50%, var(--base) 58% 100%) 100% 0 / 260% 100% no-repeat;
		-webkit-background-clip: text;
		background-clip: text;
		-webkit-mask: linear-gradient(90deg, #000 40%, transparent 60%) 0 0 / 250% 100% no-repeat;
		mask: linear-gradient(90deg, #000 40%, transparent 60%) 0 0 / 250% 100% no-repeat;
		animation: ipa-lockup-in linear both, ipa-lockup-glint 9s cubic-bezier(.455, .03, .515, .955) 1.2s infinite;
		animation-timeline: view(), auto;
		animation-range: entry 0% entry 100%, normal;
	}
	@keyframes ipa-lockup-in { from { -webkit-mask-position: 100% 0; mask-position: 100% 0; } to { -webkit-mask-position: 0 0; mask-position: 0 0; } }
	@keyframes ipa-lockup-glint { 0%, 55% { background-position: 100% 0; } 100% { background-position: 0 0; } }
}

/* Interior page header (section layout "Page header"). Header overlays it. */
.ipa-section--page { padding: calc(var(--ipa-header-h) + clamp(56px, 7vw, 112px)) 0 clamp(64px, 8vw, 120px); }
.ipa-section--page .ipa-section__rings { top: -520px; left: calc(50% + 260px); opacity: .9; }
.ipa-page-hero { display: flex; flex-direction: column; align-items: flex-start; gap: 24px; }
.ipa-page-hero > * { margin: 0 !important; }
.ipa-page-hero h1 { max-width: 16ch; color: var(--ipa-white); font-size: clamp(38px, 26px + 2.4vw, 64px); line-height: 1.08; letter-spacing: -.025em; }
.ipa-page-hero .wp-block-separator { width: 100%; max-width: 680px; margin-top: 8px !important; }
.ipa-page-hero p { max-width: 640px; color: rgb(255 255 255 / .86); }
.ipa-page-hero .is-style-lead { color: var(--ipa-white); font-size: clamp(19px, 17px + .4vw, 22px); line-height: 1.5; }
.ipa-page-hero__kicker { color: var(--ipa-gold) !important; font: 700 clamp(20px, 18px + .5vw, 24px)/1.3 var(--font-display); letter-spacing: -.01em; }

/* Contact: directory + form panel */
.ipa-contact-body { padding-block: clamp(64px, 8vw, 120px); }
.ipa-contact { display: grid; grid-template-columns: minmax(0, 1fr); gap: 56px; align-items: start; }
@media (min-width: 1000px) {
	.ipa-contact { grid-template-columns: minmax(0, 640px) minmax(0, 480px); justify-content: space-between; gap: 64px; }
	.ipa-form-panel { position: sticky; top: 32px; }
}
.ipa-directory { display: flex; flex-direction: column; }
.ipa-directory__item { display: flex; flex-direction: column; align-items: flex-start; gap: 10px; padding: 30px 0; border-top: 1px solid var(--ipa-rule); }
.ipa-directory__item:first-child { position: relative; padding-top: 0; border-top: 0; }
.ipa-directory__item > * { margin: 0 !important; }
.ipa-directory .ipa-directory__title { margin-bottom: 4px !important; color: var(--ipa-navy); font-size: var(--type-h4); line-height: 1.15; letter-spacing: -.01em; }
.ipa-directory__item p { color: var(--ipa-ink-muted); font-size: 18px; line-height: 1.6; }
.ipa-directory__address { color: var(--ipa-ink) !important; }
.ipa-directory__label { margin-top: 8px !important; color: var(--ipa-ink-subtle) !important; font: 500 12px/1.3 var(--font-mono) !important; letter-spacing: var(--track-ui); text-transform: uppercase; }
.ipa-directory__label + p { margin-top: -2px !important; }
.ipa-directory .ipa-link { font-size: 15px; text-transform: none; letter-spacing: .02em; }
.ipa-designations { display: flex; flex-wrap: wrap; gap: 8px; margin: 4px 0 6px !important; padding: 0; list-style: none; }
.ipa-designations li { padding: 7px 12px; border: 1px solid var(--ipa-rule); background: var(--ipa-white); color: var(--ipa-navy); font: 500 12px/1.2 var(--font-mono); letter-spacing: .8px; text-transform: uppercase; }

.ipa-form-panel { padding: clamp(28px, 4vw, 48px); border: 1px solid var(--ipa-navy-700); background: var(--ipa-navy); color: var(--ipa-white); scroll-margin-top: 32px; }
.ipa-form-panel > * { margin: 0 !important; }
.ipa-form-panel .ipa-form-panel__title { margin-bottom: 28px !important; color: var(--ipa-white); font-size: clamp(28px, 22px + 1vw, 36px); line-height: 1.1; letter-spacing: -.02em; }
#send-a-message { scroll-margin-top: 24px; }

/* Donate page */
.ipa-intro { display: flex; flex-direction: column; align-items: flex-start; gap: 12px; }
.ipa-intro > * { margin: 0 !important; }
.ipa-intro p { max-width: 720px; }
.ipa-mission .ipa-section__inner, .ipa-other-ways .ipa-section__inner { display: flex; flex-direction: column; gap: clamp(32px, 4vw, 48px); }
.ipa-mission .ipa-section__inner > *, .ipa-other-ways .ipa-section__inner > * { margin-block: 0; }
.ipa-cards { display: grid; grid-template-columns: minmax(0, 1fr); gap: 32px 24px; }
@media (min-width: 900px) { .ipa-cards--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.ipa-card { position: relative; display: flex; flex-direction: column; gap: 12px; padding-top: 23px; }
.ipa-card::before { content: ""; position: absolute; inset: 0 0 auto; height: 3px; background: var(--ipa-stripes); }
.ipa-card > * { margin: 0 !important; }
.ipa-card .ipa-card__title { color: var(--ipa-navy); font-size: var(--type-h4); line-height: 1.15; letter-spacing: -.01em; }
.ipa-card p { color: var(--ipa-ink-muted); }
.ipa-ways { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0 24px; margin-block: 0; padding: 0; list-style: none; }
@media (min-width: 600px) { .ipa-ways { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1000px) { .ipa-ways { grid-template-columns: repeat(5, minmax(0, 1fr)); } }
.ipa-ways li { padding: 16px 0; border-top: 1px solid var(--ipa-rule); color: var(--ipa-navy); font: 700 18px/1.3 var(--font-display); letter-spacing: -.01em; }
.ipa-ways__contact { color: var(--ipa-ink-muted); line-height: 2; }
.ipa-ways__contact .ipa-link { font-size: 15px; text-transform: none; letter-spacing: .02em; }
.ipa-give-section--page { padding-bottom: clamp(64px, 7vw, 100px); }
.ipa-donate-closing { padding-bottom: clamp(120px, 12vw, 200px); }
.ipa-cta .ipa-cta__sub { margin-top: 14px !important; color: var(--ipa-gold); font-size: var(--type-h4); line-height: 1.2; }
#ways-to-give, #ways-to-give-form { scroll-margin-top: 24px; }

/* Interior pages (placeholders until their designs land) */
.ipa-page-head { padding: clamp(56px, 7vw, 100px) 0 clamp(40px, 5vw, 64px); background: var(--ipa-navy); }
.ipa-page-head > * { width: min(var(--ipa-container), 100% - 2 * var(--ipa-gutter)); margin-inline: auto; }
.ipa-page-title { color: var(--ipa-white); font-size: var(--type-h2); line-height: 1.15; letter-spacing: -.02em; }
.ipa-main .ipa-prose { width: min(760px, 100% - 2 * var(--ipa-gutter)); margin: clamp(48px, 6vw, 80px) auto 0; padding-bottom: clamp(56px, 7vw, 96px); color: var(--ipa-ink-muted); } /* Bottom space is padding: WP's flow layout zeroes the last child's bottom margin. */
/* Outranks WP's flow-layout margin reset. */
.ipa-main .ipa-prose > * + * { margin-block-start: 20px; }
.ipa-prose h2 { font-size: var(--type-h4); line-height: 1.2; }
/* Policy pages (Privacy, Terms): long-form rhythm. */
.ipa-main .ipa-prose > h2 { margin-block-start: clamp(40px, 4vw, 56px); color: var(--ipa-navy); }
.ipa-main .ipa-prose > h2 + * { margin-block-start: 14px; }
.ipa-prose ul { padding-left: 1.2em; }
.ipa-prose li + li { margin-top: 10px; }
.ipa-prose li::marker { color: var(--ipa-gold-dark, var(--ipa-navy)); }
.ipa-prose strong { color: var(--ipa-ink); }
.ipa-prose a { color: var(--ipa-navy); text-decoration: underline; text-decoration-color: var(--ipa-gold); text-underline-offset: 3px; }
.ipa-legal-note { position: relative; padding: 16px 20px 16px 23px; background: var(--ipa-surface); color: var(--ipa-ink); font-size: 16px; line-height: 1.55; }
.ipa-legal-note::before { content: ""; position: absolute; inset: 0 auto 0 0; width: 3px; background: var(--ipa-gold); }
.ipa-prose:empty { display: none; }
.ipa-prose .ipa-donate-panel { max-width: 584px; }

.ipa-block-empty { padding: 24px; border: 1px dashed var(--ipa-navy-300); color: var(--ipa-ink-muted); font: 500 13px/1.4 var(--font-mono); text-transform: uppercase; }

/* Reduced motion: no trace, no sweeps, no zooms. Colour changes remain. */
@media (prefers-reduced-motion: reduce) {
	*, *::before, *::after { animation-duration: .01ms !important; animation-iteration-count: 1 !important; transition-duration: .01ms !important; }
	.ipa-btn:hover .ipa-trace rect, .ipa-btn:focus-visible .ipa-trace rect { animation: none; }
	.ipa-link:hover { animation: none; }
}

/* ------------------------------------------------------------ Mobile pass (Jake, 24 Sep) */
@media (max-width: 899px) {
	/* Grid: quieter and larger on small screens, where it competed with the text. */
	.ipa-section.has-grid::before, .ipa-pillar:nth-child(even)::before { --grid-o: .28; --grid: 96px; }
	/* Program numerals: smaller, and kept inside the text column instead of rising into the photo. */
	.ipa-pillar__watermark { top: .06em; font-size: clamp(96px, 27vw, 180px); }
	/* Stats: the full label, not two clamped lines, when the columns are narrow. */
	.ipa-stat__label { display: block; height: auto; -webkit-line-clamp: unset; line-clamp: unset; }
	/* Give: intro, divider, then the donation module, then the other ways to give. */
	.ipa-give { gap: 34px; }
	.ipa-give__intro { display: contents; }
	.ipa-give > .ipa-donate-panel { order: 1; }
	.ipa-give__intro > .ipa-giving { order: 2; }
}
@media (max-width: 599px) {
	/* Footer: logo, nav and Donate centred; address, copyright and legal stay left. */
	.ipa-footer__top { flex-direction: column; justify-content: center; text-align: center; }
	.ipa-footer__nav { flex-direction: column; justify-content: center; }
	.ipa-footer__nav .ipa-nav__list { justify-content: center; }
}
@media (max-width: 599px) {
	/* Tagline audit: one line at 149vw/chars is ~15px on a phone and the bottom clip read as a bug.
	   Two balanced lines at a legible size, still bleeding off the bottom edge. */
	.ipa-footer__lockup { height: 1.8em; font-size: 7.4vw; white-space: normal; text-wrap: balance; }
}
/* Tablet pass (24 Sep). */
@media (min-width: 600px) and (max-width: 899px) {
	/* Two columns gave 330px-wide portraits at 768; three reads as a board, not a gallery. */
	.ipa-team__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
	/* The donate module keeps its designed width instead of stretching across the page. */
	.ipa-give > .ipa-donate-panel { width: 100%; max-width: 584px; }
}

/* Mobile menu (below 1000px), two styles picked in Site Settings: .is-orbit (default) and .is-horizon.
   Both copy the header row (logo, Donate, close where the menu button sits), stagger the links in, lock
   the page scroll, and ride on the Popover API (Esc, outside click, focus return for free). Motion is
   transform, opacity and clip-path only, and collapses under reduced motion. */
@media (max-width: 999px) {
	.ipa-nav[popover] { position: fixed; inset: 0; width: 100%; max-width: none; height: 100dvh; max-height: none; margin: 0; padding: 0; border: 0; background: transparent; overflow: hidden auto; }
	html:has(.ipa-nav:popover-open) { overflow: hidden; }
	.ipa-nav__bar, .ipa-nav .ipa-nav__list { width: min(var(--ipa-container), 100% - 2 * var(--ipa-gutter)); margin-inline: auto; }
	.ipa-nav__bar { position: relative; z-index: 2; display: flex; align-items: center; justify-content: space-between; gap: 16px; min-height: var(--ipa-header-h); padding-block: 14px; }
	.ipa-nav__home { display: block; }
	.ipa-nav__close { display: grid; place-items: center; width: 44px; height: 44px; padding: 0; border: 0; background: none; color: inherit; cursor: pointer; }
	/* The close icon is the menu icon (ipa_menu_icon()) folded into an X: on open the bars gather on the
	   centre line, then rotate; on close they rotate back, then spread. Two steps, so it never passes
	   through an arrow. */
	.ipa-nav:popover-open .ipa-nav__close .is-l1 { translate: 0 0; rotate: 45deg; }
	.ipa-nav:popover-open .ipa-nav__close .is-l2 { opacity: 0; }
	.ipa-nav:popover-open .ipa-nav__close .is-l3 { translate: 0 0; scale: 1; rotate: -45deg; }
	.ipa-nav .ipa-nav__list { position: relative; z-index: 2; flex: 1; flex-direction: column; justify-content: center; gap: 2px; padding-block: clamp(16px, 4vh, 36px); }
	.ipa-nav .ipa-nav__link { display: inline-flex; align-items: baseline; gap: 14px; padding-block: 6px; font: 700 clamp(28px, 7.4vw, 40px)/1.15 var(--font-display); letter-spacing: -.02em; text-transform: none; }
	.ipa-nav .ipa-nav__link::after { bottom: 2px; }
	.ipa-nav__index { position: relative; top: -.9em; color: var(--ipa-navy-300); font: 500 12px/1 var(--font-mono); letter-spacing: var(--track-ui); }

	/* Orbit: navy, centred, over two rings with a gold moon on the inner one. */
	.ipa-nav.is-orbit { color: var(--ipa-white); }
	.ipa-nav.is-orbit::backdrop { background: transparent; }
	.is-orbit .ipa-nav__sheet { position: relative; display: flex; flex-direction: column; min-height: 100dvh; background: radial-gradient(120% 70% at 50% 45%, var(--ipa-navy-700) 0%, var(--ipa-navy) 75%); }
	.is-orbit .ipa-nav__list { align-items: center; text-align: center; }
	.is-orbit .ipa-nav__link { color: var(--ipa-white); }
	.is-orbit .ipa-nav__link:hover, .is-orbit .ipa-nav__link[aria-current="page"] { color: var(--ipa-gold); }
	.is-orbit .ipa-nav__index { display: none; }
	.ipa-nav__orbits { position: absolute; inset: 0; overflow: hidden; pointer-events: none; }
	.ipa-nav__ring { position: absolute; left: 50%; top: 50%; width: min(92vw, 560px); aspect-ratio: 1; border: 1px solid rgb(255 207 64 / .28); border-radius: 50%; translate: -50% -50%; }
	.ipa-nav__ring.is-outer { width: min(132vw, 800px); border-color: rgb(255 255 255 / .1); }
	.ipa-nav__moon { position: absolute; inset: 0; border-radius: 50%; }
	.ipa-nav__moon::before { content: ""; position: absolute; left: 50%; top: -4px; width: 8px; height: 8px; margin-left: -4px; border-radius: 50%; background: var(--ipa-gold); box-shadow: 0 0 12px rgb(255 207 64 / .8); }
	.ipa-nav__tag { position: relative; z-index: 2; margin: 0; padding: 0 var(--ipa-gutter) clamp(20px, 4vh, 32px); color: rgb(255 255 255 / .38) !important; font: 500 11px/1.5 var(--font-mono); letter-spacing: .2em; text-align: center; text-transform: uppercase; }

	/* Horizon: a white sheet with the planet rim as its lower edge. */
	.ipa-nav.is-horizon { color: var(--ipa-navy); }
	.ipa-nav.is-horizon::backdrop { background: rgb(9 12 28 / .5); }
	.is-horizon .ipa-nav__sheet { --rim: max(48px, 12vw); position: relative; display: flex; flex-direction: column; min-height: min(640px, calc(100dvh - var(--rim) - 40px)); padding-bottom: clamp(20px, 4vh, 36px); background: var(--ipa-white); }
	.is-horizon .ipa-nav__home .ipa-logo [fill="white"] { fill: var(--ipa-navy); }
	.is-horizon .ipa-nav__link, .is-horizon .ipa-nav__link:hover, .is-horizon .ipa-nav__link[aria-current="page"] { color: var(--ipa-navy); }
	.ipa-nav__rim { position: absolute; top: calc(100% - 1px); left: 0; width: 100%; height: var(--rim); overflow: visible; pointer-events: none; }
	.ipa-nav__sky { fill: var(--ipa-white); }
	.ipa-nav__band { fill: var(--ipa-gold); filter: drop-shadow(0 0 6px rgb(255 207 64 / .55)); }
}
@media (max-width: 999px) and (prefers-reduced-motion: no-preference) {
	.ipa-nav[popover], .ipa-nav[popover]::backdrop { transition: display .8s allow-discrete, overlay .8s allow-discrete, opacity .45s ease; }
	.ipa-nav.is-horizon::backdrop { opacity: 0; }
	.ipa-nav.is-horizon:popover-open::backdrop { opacity: 1; }
	.ipa-nav .ipa-nav__list li { opacity: 0; transform: translateY(16px); transition: opacity .35s ease, transform .5s cubic-bezier(.2, .7, .2, 1); }
	.ipa-nav:popover-open .ipa-nav__list li { opacity: 1; transform: none; transition-duration: .5s; }
	.ipa-nav:popover-open .ipa-nav__list li:nth-child(1) { transition-delay: .26s; }
	.ipa-nav:popover-open .ipa-nav__list li:nth-child(2) { transition-delay: .32s; }
	.ipa-nav:popover-open .ipa-nav__list li:nth-child(3) { transition-delay: .38s; }
	.ipa-nav:popover-open .ipa-nav__list li:nth-child(4) { transition-delay: .44s; }
	.ipa-nav:popover-open .ipa-nav__list li:nth-child(n+5) { transition-delay: .50s; }
	.ipa-nav__close path { transition: rotate .24s cubic-bezier(.4, 0, .2, 1), translate .22s ease .2s, scale .22s ease .2s, opacity .15s ease .24s; }
	.ipa-nav:popover-open .ipa-nav__close path { transition: translate .22s ease .12s, scale .22s ease .12s, opacity .12s ease .12s, rotate .3s cubic-bezier(.2, .7, .2, 1) .34s; }
	/* Orbit: the circle grows out of the menu button; the rings settle; the moon keeps orbiting. */
	.is-orbit .ipa-nav__sheet { clip-path: circle(0 at calc(100% - var(--ipa-gutter) - 22px) calc(var(--ipa-header-h) / 2 + 4px)); transition: clip-path .7s cubic-bezier(.3, .6, .2, 1); }
	.is-orbit:popover-open .ipa-nav__sheet { clip-path: circle(150% at calc(100% - var(--ipa-gutter) - 22px) calc(var(--ipa-header-h) / 2 + 4px)); }
	.is-orbit .ipa-nav__list li { transform: translateY(18px) rotate(-2deg); }
	.is-orbit:popover-open .ipa-nav__list li { transform: none; }
	.ipa-nav__ring { opacity: 0; scale: .7; transition: scale .8s cubic-bezier(.2, .7, .2, 1) .1s, opacity .6s ease .1s; }
	.is-orbit:popover-open .ipa-nav__ring { opacity: 1; scale: 1; }
	.is-orbit:popover-open .ipa-nav__moon { animation: ipa-moon 22s linear infinite; }
	.ipa-nav__tag { opacity: 0; transition: opacity .4s ease; }
	.is-orbit:popover-open .ipa-nav__tag { opacity: 1; transition-delay: .6s; }
	/* Horizon: the sheet drops from the top. */
	.is-horizon .ipa-nav__sheet { transform: translateY(calc(-100% - var(--rim) - 24px)); transition: transform .74s cubic-bezier(.22, .68, .24, 1); }
	.is-horizon:popover-open .ipa-nav__sheet { transform: none; }
	@starting-style {
		.ipa-nav.is-horizon:popover-open::backdrop { opacity: 0; }
		.is-horizon:popover-open .ipa-nav__sheet { transform: translateY(calc(-100% - var(--rim) - 24px)); }
		.is-orbit:popover-open .ipa-nav__sheet { clip-path: circle(0 at calc(100% - var(--ipa-gutter) - 22px) calc(var(--ipa-header-h) / 2 + 4px)); }
		.is-orbit:popover-open .ipa-nav__ring { opacity: 0; scale: .7; }
		.is-orbit:popover-open .ipa-nav__tag { opacity: 0; }
		.ipa-nav:popover-open .ipa-nav__list li { opacity: 0; transform: translateY(16px); }
		.is-orbit:popover-open .ipa-nav__list li { transform: translateY(18px) rotate(-2deg); }
		.ipa-nav:popover-open .ipa-nav__close .is-l1 { translate: 0 -5px; rotate: 0deg; }
		.ipa-nav:popover-open .ipa-nav__close .is-l2 { opacity: 1; }
		.ipa-nav:popover-open .ipa-nav__close .is-l3 { translate: 3px 5px; scale: .667 1; rotate: 0deg; }
	}
}
@keyframes ipa-moon { to { transform: rotate(1turn); } }
/* Long quotes on phones run past balance's line limit: at least avoid a one-word last line. */
@media (max-width: 599px) { .wp-block-quote.is-style-statement p { text-wrap: pretty; } }

/* Busy buttons (contact form "Sending", donate form "Opening secure checkout"): a small spinner before
   the label and the outline segment circling the button until the request answers. */
.ipa-btn:is(.is-sending, [aria-busy="true"]) { cursor: progress; }
.ipa-btn:is(.is-sending, [aria-busy="true"]) .ipa-btn__label { display: inline-flex; align-items: center; gap: 10px; }
.ipa-btn:is(.is-sending, [aria-busy="true"]) .ipa-btn__label::before { content: ""; flex: none; width: 13px; height: 13px; border: 2px solid currentColor; border-right-color: transparent; border-radius: 50%; animation: ipa-spin .7s linear infinite; }
.ipa-btn:is(.is-sending, [aria-busy="true"]) .ipa-trace rect { animation: ipa-trace-loop 1.2s linear infinite; }
@keyframes ipa-spin { to { transform: rotate(1turn); } }
@keyframes ipa-trace-loop { from { stroke-dashoffset: 26; } to { stroke-dashoffset: -74; } }
