/**
 * Interior page sections.
 *
 * Split out of base.css rather than added to it: base.css already carried the
 * site chrome plus every homepage section at ~1,400 lines, and the seven
 * interior pages in the client's comps would have more than doubled that. See
 * elpis_enqueue_assets() in functions.php for the loading decision.
 *
 * Motion belongs in animation.css. Nothing here animates, so nothing here
 * needs a reduced-motion guard — keeping the two files separate is what makes
 * that guard auditable.
 *
 * Everything above the "Page-specific" divider is shared by two or more of the
 * seven comps and is written once here. Anything used by exactly one page
 * lives below that divider, grouped by page.
 */

/* ===========================================================================
   Shared: the page hero
   =========================================================================== */

/*
 * Every interior comp opens the same way: a teal-deep band carrying a
 * breadcrumb, an h1, a short intro, and sometimes actions, with a photograph
 * bleeding in from the right behind a curved gold edge.
 *
 * The photograph is a marked placeholder everywhere (CLAUDE.md: no stock
 * photography of children), so what renders today is the neutral fill below.
 * The band's own teal is what guarantees contrast for the text either way —
 * text never sits over the image area, which is why this hero needs no scrim
 * where the homepage's full-bleed one does.
 */
.elpis-page-hero {
	position: relative;
	overflow: hidden;
	background-color: var( --wp--preset--color--teal-deep );
	color: var( --wp--preset--color--base );
}

.elpis-page-hero-inner {
	position: relative;
	z-index: 2;
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var( --wp--preset--spacing--50 );
	align-items: center;
	max-width: var( --wp--style--global--wide-size );
	margin-inline: auto;
	padding-block: var( --wp--preset--spacing--60 );
}

@media ( max-width: 900px ) {
	.elpis-page-hero-inner {
		grid-template-columns: 1fr;
	}
}

.elpis-page-hero-text h1 {
	margin: 0;
	color: var( --wp--preset--color--base );
}

/*
 * The short gold rule under each interior h1, per the comps. This is the gold
 * arc's one surviving decorative relative -- CLAUDE.md retired the arc as a
 * section divider but kept it as the active-nav underline, and this reads as
 * the same gesture applied to a page title rather than a new flourish. accent
 * on teal-deep measures 4.38:1, well past the 3:1 a graphic needs.
 */
.elpis-page-hero-rule,
.elpis-rule-gold {
	display: block;
	width: var( --wp--preset--spacing--60 );
	height: 3px;
	margin-top: var( --wp--preset--spacing--30 );
	background-color: var( --wp--preset--color--accent );
}

.elpis-page-hero-lede {
	margin: var( --wp--preset--spacing--40 ) 0 0;
	max-width: 46ch;
	color: var( --wp--preset--color--primary-tint );
}

.elpis-page-hero-eyebrow {
	margin: 0 0 var( --wp--preset--spacing--20 );
	color: var( --wp--preset--color--accent );
	font-size: var( --wp--preset--font-size--small );
	font-weight: 700;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}

.elpis-page-hero-actions {
	display: flex;
	flex-wrap: wrap;
	gap: var( --wp--preset--spacing--30 );
	margin-top: var( --wp--preset--spacing--40 );
}

/* PLACEHOLDER IMAGE slot. Empty <img> with no src (see any page pattern), so
   nothing is requested and this fill is what shows. */
.elpis-page-hero-media {
	aspect-ratio: 16 / 10;
	border-radius: 4px;
	background-color: var( --wp--preset--color--primary-deep );
	overflow: hidden;
}

.elpis-page-hero-media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* ---------------------------------------------------------------------------
   Breadcrumb
   --------------------------------------------------------------------------- */

.elpis-breadcrumb {
	margin: 0 0 var( --wp--preset--spacing--30 );
	font-size: var( --wp--preset--font-size--x-small );
	color: var( --wp--preset--color--primary-tint );
}

.elpis-breadcrumb ol {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: var( --wp--preset--spacing--20 );
	list-style: none;
	margin: 0;
	padding: 0;
}

.elpis-breadcrumb a,
.elpis-breadcrumb a:hover,
.elpis-breadcrumb a:focus {
	color: var( --wp--preset--color--base );
}

/* The separator is generated content on purpose: it is punctuation between
   two links, not a list item a screen reader should announce. */
.elpis-breadcrumb li + li::before {
	content: "\203A";
	margin-right: var( --wp--preset--spacing--20 );
	color: var( --wp--preset--color--primary-tint );
}

/* ===========================================================================
   Shared: section heading with flanking gold rules
   =========================================================================== */

/*
 * The comps centre most interior section headings between two short gold
 * rules. Drawn with flex and two empty spans rather than ::before/::after on
 * the heading, because the rules must sit outside the text box and shrink
 * with the container -- pseudo-elements on an inline heading cannot do that
 * without absolute positioning and a known text width.
 */
.elpis-section-head {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: var( --wp--preset--spacing--30 );
	margin-bottom: var( --wp--preset--spacing--20 );
}

.elpis-section-head h2 {
	margin: 0;
	text-align: center;
	font-size: var( --wp--preset--font-size--x-large );
	text-transform: uppercase;
	letter-spacing: 0.02em;
}

.elpis-section-head::before,
.elpis-section-head::after {
	content: "";
	flex: 0 1 var( --wp--preset--spacing--60 );
	height: 2px;
	background-color: var( --wp--preset--color--accent );
}

.elpis-section-lede {
	margin: 0 auto var( --wp--preset--spacing--50 );
	max-width: 62ch;
	text-align: center;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--small );
}

/* On a dark band the gold rules stay, but the muted lede would vanish. */
.elpis-on-dark .elpis-section-head h2 {
	color: var( --wp--preset--color--base );
}

.elpis-on-dark .elpis-section-lede {
	color: var( --wp--preset--color--primary-tint );
}

/* ===========================================================================
   Shared: card grid
   =========================================================================== */

/*
 * Most interior sections are a row of equal cards -- documents, programs,
 * commitments, ways to help. One grid with a column-count modifier rather than
 * a bespoke grid per section.
 *
 * auto-fit with a minimum rather than a hard column count: several of these
 * rows carry five items (Transparency's document groups, Programs' five
 * approved programs), which never divides evenly into a responsive step-down,
 * and auto-fit reflows them without a media query per count.
 */
.elpis-cards {
	display: grid;
	grid-template-columns: repeat( auto-fit, minmax( 200px, 1fr ) );
	gap: var( --wp--preset--spacing--40 );
}

.elpis-cards--wide {
	grid-template-columns: repeat( auto-fit, minmax( 260px, 1fr ) );
}

.elpis-card {
	display: flex;
	flex-direction: column;
	align-items: flex-start;
	height: 100%;
	padding: var( --wp--preset--spacing--40 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--base );
	box-shadow: var( --wp--preset--shadow--lift );
}

.elpis-card--center {
	align-items: center;
	text-align: center;
}

.elpis-card h3 {
	margin: var( --wp--preset--spacing--30 ) 0 0;
	font-size: var( --wp--preset--font-size--large );
}

.elpis-card > p {
	margin: var( --wp--preset--spacing--20 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--small );
}

/*
 * The round icon well every card in the comps carries. Neutral by default;
 * the route/section colour modifiers below tint it where a section is
 * colour-coded. A glyph on a tinted disc is a graphic (3:1), never text.
 */
.elpis-card-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	flex: 0 0 auto;
	width: var( --wp--preset--spacing--60 );
	height: var( --wp--preset--spacing--60 );
	border-radius: 50%;
	background-color: var( --wp--preset--color--primary-tint );
	color: var( --wp--preset--color--primary-deep );
}

.elpis-card-icon svg {
	width: 50%;
	height: 50%;
}

.elpis-card-icon--teal { background-color: var( --wp--preset--color--teal-mid ); color: var( --wp--preset--color--base ); }
.elpis-card-icon--gold { background-color: var( --wp--preset--color--gold-cta ); color: var( --wp--preset--color--contrast ); }
.elpis-card-icon--leaf { background-color: var( --wp--preset--color--leaf ); color: var( --wp--preset--color--base ); }
.elpis-card-icon--coral { background-color: var( --wp--preset--color--coral ); color: var( --wp--preset--color--base ); }

/*
 * Card headings that carry a section colour use the darkened text tints, never
 * the disc colour beside them -- gold-cta (2.31:1), coral (3.68:1) and leaf
 * (4.48:1) all fail the 4.5:1 text threshold. Same rule, same tokens, as the
 * homepage route cards in base.css.
 */
.elpis-card h3.is-teal { color: var( --wp--preset--color--teal-mid ); }
.elpis-card h3.is-gold { color: var( --wp--preset--color--accent-deep ); }
.elpis-card h3.is-leaf { color: var( --wp--preset--color--leaf-deep ); }
.elpis-card h3.is-coral { color: var( --wp--preset--color--coral-deep ); }

/* ---------------------------------------------------------------------------
   Check lists inside cards
   --------------------------------------------------------------------------- */

.elpis-check-list {
	list-style: none;
	margin: var( --wp--preset--spacing--30 ) 0 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var( --wp--preset--spacing--20 );
	font-size: var( --wp--preset--font-size--small );
	width: 100%;
}

.elpis-check-list li {
	display: flex;
	align-items: flex-start;
	gap: var( --wp--preset--spacing--20 );
}

.elpis-check-list svg {
	flex: 0 0 auto;
	width: var( --wp--custom--icon--sm );
	height: var( --wp--custom--icon--sm );
	/* Optical alignment with the first line of a 1.7 line-height label. */
	margin-top: 0.2em;
	color: var( --wp--preset--color--primary-deep );
}

.elpis-check-list--gold svg { color: var( --wp--preset--color--accent-deep ); }
.elpis-check-list--leaf svg { color: var( --wp--preset--color--leaf-deep ); }
.elpis-check-list--coral svg { color: var( --wp--preset--color--coral-deep ); }
.elpis-check-list--teal svg { color: var( --wp--preset--color--teal-mid ); }

/* ===========================================================================
   Shared: buttons
   =========================================================================== */

/*
 * Hand-built anchors again, for the reason patterns/hero.php gives: the comps
 * put icons inside button labels, and inline SVG inside a core wp:button's
 * link fails that block's content validation. Geometry matches theme.json's
 * own button element exactly.
 */
.elpis-btn {
	/*
	 * Required, not decorative. WordPress ships no universal border-box reset,
	 * so the several buttons below that take width:100% inside a card -- the
	 * document downloads, the programme actions -- would otherwise compute as
	 * 100% PLUS 3.5rem of horizontal padding and push past the card, the
	 * section, and the viewport. Measured at 390px before this line: a right
	 * edge of 424px against a 390px body.
	 */
	box-sizing: border-box;
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: var( --wp--preset--spacing--20 );
	min-height: 44px;
	padding: 0.9rem 1.75rem;
	border: 1px solid transparent;
	border-radius: 4px;
	font-family: var( --wp--preset--font-family--body );
	font-size: var( --wp--preset--font-size--small );
	font-weight: 700;
	line-height: 1.2;
	text-align: center;
	text-decoration: none;
}

.elpis-btn svg {
	flex: 0 0 auto;
	width: var( --wp--custom--icon--sm );
	height: var( --wp--custom--icon--sm );
}

/* CLAUDE.md's gold button rule: ink on gold-cta at 7.55:1, never white at
   2.73:1. All states pinned so the guarantee does not depend on the cascade. */
.elpis-btn--gold,
.elpis-btn--gold:hover,
.elpis-btn--gold:focus {
	background-color: var( --wp--preset--color--gold-cta );
	color: var( --wp--preset--color--contrast );
}

.elpis-btn--teal,
.elpis-btn--teal:hover,
.elpis-btn--teal:focus {
	background-color: var( --wp--preset--color--teal-deep );
	color: var( --wp--preset--color--base );
}

.elpis-btn--leaf,
.elpis-btn--leaf:hover,
.elpis-btn--leaf:focus {
	background-color: var( --wp--preset--color--leaf-deep );
	color: var( --wp--preset--color--base );
}

.elpis-btn--coral,
.elpis-btn--coral:hover,
.elpis-btn--coral:focus {
	background-color: var( --wp--preset--color--coral-deep );
	color: var( --wp--preset--color--base );
}

/* Outline on a light surface. */
.elpis-btn--outline {
	border-color: var( --wp--preset--color--primary-deep );
}

.elpis-btn--outline,
.elpis-btn--outline:hover,
.elpis-btn--outline:focus {
	color: var( --wp--preset--color--primary-deep );
}

.elpis-btn--outline:hover,
.elpis-btn--outline:focus {
	background-color: var( --wp--preset--color--primary-tint );
}

/* Outline on a dark band. */
.elpis-btn--ghost {
	border-color: var( --wp--preset--color--base );
	color: var( --wp--preset--color--base );
}

.elpis-btn--ghost:hover,
.elpis-btn--ghost:focus {
	background-color: var( --wp--preset--color--base );
	color: var( --wp--preset--color--teal-deep );
}

/* ===========================================================================
   Shared: FAQ accordion
   =========================================================================== */

/*
 * <details>/<summary>, no JavaScript. The element is keyboard operable, has a
 * native expanded/collapsed state announced by screen readers, and needs no
 * ARIA. A scripted accordion here would be strictly worse on every count and
 * would break with JS off.
 *
 * Nothing animates on open. CLAUDE.md's motion budget covers scroll reveal and
 * the hero parallax only, and an unguarded height transition here would be a
 * new motion source needing its own reduced-motion wrapper for no benefit.
 */
.elpis-faq {
	display: flex;
	flex-direction: column;
	gap: var( --wp--preset--spacing--20 );
}

.elpis-faq details {
	border: 1px solid var( --wp--preset--color--primary-tint );
	border-radius: 4px;
	background-color: var( --wp--preset--color--base );
}

.elpis-faq summary {
	display: flex;
	align-items: center;
	justify-content: space-between;
	gap: var( --wp--preset--spacing--30 );
	min-height: 44px;
	padding: var( --wp--preset--spacing--30 ) var( --wp--preset--spacing--40 );
	cursor: pointer;
	font-size: var( --wp--preset--font-size--small );
	font-weight: 700;
	color: var( --wp--preset--color--primary-deep );
	/* Removes the default disclosure triangle so the +/- below is the only
	   marker; the native one cannot be positioned to the right. */
	list-style: none;
}

.elpis-faq summary::-webkit-details-marker {
	display: none;
}

/*
 * The +/- marker. Generated content, so it is not announced -- correct here,
 * because <details> already exposes its own open/closed state to assistive
 * technology and a spoken "plus" would duplicate that.
 */
.elpis-faq summary::after {
	content: "+";
	flex: 0 0 auto;
	font-size: var( --wp--preset--font-size--large );
	font-weight: 400;
	line-height: 1;
	color: var( --wp--preset--color--muted );
}

.elpis-faq details[open] summary::after {
	content: "\2212";
}

.elpis-faq details > p {
	margin: 0;
	padding: 0 var( --wp--preset--spacing--40 ) var( --wp--preset--spacing--40 );
	font-size: var( --wp--preset--font-size--small );
	color: var( --wp--preset--color--muted );
}

/* The Programs comp puts its FAQ on the teal band as three open columns
   rather than a collapsing list. */
.elpis-faq--dark details {
	background-color: transparent;
	border-color: rgba( 255, 255, 255, 0.2 );
}

.elpis-faq--dark summary {
	color: var( --wp--preset--color--base );
}

.elpis-faq--dark details > p {
	color: var( --wp--preset--color--primary-tint );
}

.elpis-faq-note {
	margin: var( --wp--preset--spacing--30 ) 0 0;
	font-size: var( --wp--preset--font-size--x-small );
	color: var( --wp--preset--color--muted );
}

/* ===========================================================================
   Shared: process flow
   =========================================================================== */

/*
 * "How we serve" (Programs) and "The volunteer journey" (Get involved): a row
 * of numbered steps with arrows between them.
 *
 * An ordered list, because the sequence is the meaning -- a screen reader
 * should announce these as 1 of 9, not as nine unrelated labels. The arrows
 * are generated content between items and are therefore not announced, which
 * is correct: the list already conveys ordering.
 */
.elpis-flow {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	justify-content: center;
	gap: var( --wp--preset--spacing--30 );
	list-style: none;
	margin: 0;
	padding: 0;
	counter-reset: elpis-flow;
}

.elpis-flow li {
	display: flex;
	align-items: center;
	gap: var( --wp--preset--spacing--30 );
}

.elpis-flow li + li::before {
	content: "\2192";
	color: var( --wp--preset--color--accent );
	font-size: var( --wp--preset--font-size--large );
	line-height: 1;
}

.elpis-flow-step {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var( --wp--preset--spacing--20 );
	width: 8rem;
	text-align: center;
	font-size: var( --wp--preset--font-size--x-small );
	font-weight: 700;
	color: var( --wp--preset--color--primary-deep );
}

.elpis-flow-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: var( --wp--preset--spacing--60 );
	height: var( --wp--preset--spacing--60 );
	border-radius: 50%;
	background-color: var( --wp--preset--color--primary-tint );
	color: var( --wp--preset--color--primary-deep );
}

.elpis-flow-icon svg {
	width: 50%;
	height: 50%;
}

/* ===========================================================================
   Shared: closing CTA band
   =========================================================================== */

/*
 * Every interior comp closes with the same teal-deep band: a mark, a heading
 * and one line on the left, a row of actions on the right.
 *
 * Several comps draw four actions here. CLAUDE.md allows only one PRIMARY call
 * to action per viewport, which is why exactly one of them is gold in every
 * instance below and the rest are ghost outlines -- the rule is about
 * competing primaries, not about link count.
 */
.elpis-cta-band {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var( --wp--preset--spacing--40 );
	padding: var( --wp--preset--spacing--50 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--teal-deep );
	color: var( --wp--preset--color--base );
}

.elpis-cta-band-text {
	display: flex;
	align-items: center;
	gap: var( --wp--preset--spacing--40 );
	flex: 1 1 20rem;
}

.elpis-cta-band-text h2 {
	margin: 0;
	color: var( --wp--preset--color--base );
	font-size: var( --wp--preset--font-size--x-large );
}

.elpis-cta-band-text p {
	margin: var( --wp--preset--spacing--20 ) 0 0;
	color: var( --wp--preset--color--primary-tint );
	font-size: var( --wp--preset--font-size--small );
}

.elpis-cta-band-mark {
	flex: 0 0 auto;
	display: flex;
	align-items: center;
	justify-content: center;
	width: var( --wp--preset--spacing--70 );
	height: var( --wp--preset--spacing--70 );
	border-radius: 50%;
	background-color: var( --wp--preset--color--primary-deep );
	color: var( --wp--preset--color--accent );
}

.elpis-cta-band-mark svg {
	width: 50%;
	height: 50%;
}

.elpis-cta-band-actions {
	display: flex;
	flex-wrap: wrap;
	gap: var( --wp--preset--spacing--30 );
}

/* ===========================================================================
   Shared: page section rhythm
   =========================================================================== */

.elpis-section {
	padding-block: var( --wp--preset--spacing--70 );
}

/*
 * Cap section content at wideSize and centre it.
 *
 * This has to be done here rather than left to core, and the reason is worth
 * recording: these sections are raw <section> elements inside wp:html blocks,
 * not wp:group blocks. Core therefore never adds `is-layout-constrained` to
 * them, and `.alignwide` on a child does nothing at all without that ancestor
 * class -- the class is inert on its own, it only means something to a layout
 * container's generated rules.
 *
 * The visible symptom was card grids running the full width of the viewport
 * instead of stopping at 1200px. The homepage does not have the problem
 * because its sections ARE wp:group blocks, which is exactly why this only
 * showed up once the interior pages were rendered in real WordPress; a static
 * preview that hand-waves core's layout CSS will happily hide it.
 *
 * The alignfull sections still get their horizontal padding from core, via
 * `.has-global-padding > .alignfull` on <main> -- that part does work, because
 * it keys off the PARENT's class, not the section's own.
 */
.elpis-section > * {
	max-width: var( --wp--style--global--wide-size );
	margin-inline: auto;
}

.elpis-section--tight {
	padding-block: var( --wp--preset--spacing--60 );
}

.elpis-section--shell {
	background-color: var( --wp--preset--color--shell );
}

.elpis-section--cream {
	background-color: var( --wp--preset--color--cream );
}

.elpis-section--dark {
	background-color: var( --wp--preset--color--teal-deep );
	color: var( --wp--preset--color--base );
}

.elpis-section--dark h2,
.elpis-section--dark h3 {
	color: var( --wp--preset--color--base );
}

/* ===========================================================================
   Page-specific
   ===========================================================================
   Everything below is used by exactly one page. Anything that a second page
   starts needing should move above this divider rather than being copied.
   =========================================================================== */

/* ---------------------------------------------------------------------------
   About us
   --------------------------------------------------------------------------- */

/*
 * The comp floats the four pillar cards over the seam between the teal hero
 * and the shell band below it. The negative margin is what lifts them; the
 * section's own top padding is removed to compensate so the band does not gain
 * height from a card that is sitting outside it.
 *
 * Only above 900px. Below that the hero stacks its photograph under its text
 * (.elpis-page-hero-inner), and pulling the cards up into that would overlap
 * the image rather than a flat band edge.
 */
.elpis-about-pillars {
	position: relative;
}

@media ( min-width: 901px ) {
	/*
	 * A half-step lift, not a full one. At spacing--60 the cards' top edge
	 * rose above the last line of the hero's own copy -- the comp overlaps the
	 * band seam, it does not crowd the text. The hero pays for the overlap
	 * with matching extra bottom padding below, so the visual gap between the
	 * last line of copy and the first card is preserved rather than eaten.
	 */
	.elpis-about-pillars {
		margin-top: calc( var( --wp--preset--spacing--50 ) * -1 );
	}

	.elpis-section--tight:has( .elpis-about-pillars ) {
		padding-top: 0;
	}

	.elpis-page-hero--pillars .elpis-page-hero-inner {
		padding-bottom: var( --wp--preset--spacing--70 );
	}
}

.elpis-about-story {
	display: grid;
	grid-template-columns: 4fr 6fr;
	gap: var( --wp--preset--spacing--60 );
	align-items: start;
}

@media ( max-width: 900px ) {
	.elpis-about-story {
		grid-template-columns: 1fr;
	}
}

.elpis-about-story-text > p {
	margin: var( --wp--preset--spacing--40 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--small );
}

.elpis-about-story-text .elpis-btn {
	margin-top: var( --wp--preset--spacing--40 );
}

/*
 * The milestone timeline. An <ol> because the sequence carries the meaning --
 * a screen reader should announce these as a numbered series. The connecting
 * line is drawn on the list, behind the year markers, rather than as a border
 * on each item, so it does not extend past the first and last markers.
 */
.elpis-timeline {
	position: relative;
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var( --wp--preset--spacing--30 );
}

.elpis-timeline li {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: var( --wp--preset--spacing--40 );
	align-items: center;
}

.elpis-timeline-year {
	position: relative;
	z-index: 1;
	display: flex;
	align-items: center;
	justify-content: center;
	width: 4rem;
	height: 4rem;
	border: 1px solid var( --wp--preset--color--accent );
	border-radius: 50%;
	background-color: var( --wp--preset--color--base );
	color: var( --wp--preset--color--primary-deep );
	font-family: var( --wp--preset--font-family--heading );
	font-size: var( --wp--preset--font-size--small );
	font-weight: 600;
}

/* The vertical connector, inset to the year markers' centre line. */
.elpis-timeline::before {
	content: "";
	position: absolute;
	top: 2rem;
	bottom: 2rem;
	left: 2rem;
	width: 1px;
	background-color: var( --wp--preset--color--accent );
}

.elpis-timeline-card {
	padding: var( --wp--preset--spacing--30 ) var( --wp--preset--spacing--40 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--base );
	box-shadow: var( --wp--preset--shadow--lift );
}

.elpis-timeline-card h3 {
	margin: 0;
	font-size: var( --wp--preset--font-size--large );
	color: var( --wp--preset--color--primary-deep );
}

.elpis-timeline-card p {
	margin: var( --wp--preset--spacing--20 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--small );
}

.elpis-about-drives {
	display: grid;
	grid-template-columns: auto 1fr 1fr;
	gap: var( --wp--preset--spacing--40 );
	align-items: center;
	margin-top: var( --wp--preset--spacing--60 );
	padding: var( --wp--preset--spacing--40 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--base );
}

@media ( max-width: 700px ) {
	.elpis-about-drives {
		grid-template-columns: 1fr;
	}
}

.elpis-about-drives h3 {
	margin: 0;
	font-size: var( --wp--preset--font-size--large );
	color: var( --wp--preset--color--primary-deep );
}

.elpis-about-drives p {
	margin: var( --wp--preset--spacing--20 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--small );
}

/* PLACEHOLDER IMAGE slot -- neutral fill, no src on the img inside. */
.elpis-about-drives-media {
	aspect-ratio: 16 / 7;
	border-radius: 4px;
	background-color: var( --wp--preset--color--primary-tint );
	overflow: hidden;
}

.elpis-about-drives-media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/*
 * The About comp separates its four figures with hairlines, where the
 * homepage's band does not. A left border on every item but the first, rather
 * than a right border on all but the last, so it survives the 2-column
 * reflow -- at two per row the item starting each row is the one that must
 * lose its rule, and :nth-child does that cleanly where :last-child cannot.
 */
.elpis-stat-row--ruled .elpis-stat + .elpis-stat {
	border-left: 1px solid rgba( 255, 255, 255, 0.2 );
}

@media ( max-width: 600px ) {
	.elpis-stat-row--ruled .elpis-stat:nth-child( odd ) {
		border-left: 0;
	}
}

/* ---------------------------------------------------------------------------
   Our programs
   --------------------------------------------------------------------------- */

/*
 * A fifth tint for the programme rows. The comp uses purple here; theme.json
 * has none and none is added -- CLAUDE.md's colour discipline reserves the four
 * category colours for the four homepage routes and warns that a colour used
 * for anything else stops carrying meaning. primary-deep is an existing token,
 * already the theme's link colour, and reads as distinct from teal-mid beside
 * it. See patterns/page-programs.php for the full reasoning.
 */
.elpis-card-icon--deep {
	background-color: var( --wp--preset--color--primary-deep );
	color: var( --wp--preset--color--base );
}

.elpis-card h3.is-deep {
	color: var( --wp--preset--color--primary-deep );
}

.elpis-help-card-link--primary-deep,
.elpis-help-card-link--primary-deep:hover,
.elpis-help-card-link--primary-deep:focus {
	color: var( --wp--preset--color--primary-deep );
}

/* The comp's supporting paragraph under the hero lede -- longer and quieter
   than the lede itself. */
.elpis-page-hero-note {
	margin: var( --wp--preset--spacing--30 ) 0 0;
	max-width: 58ch;
	color: var( --wp--preset--color--primary-tint );
	font-size: var( --wp--preset--font-size--small );
}

/*
 * Five across at full width. An explicit count rather than the shared auto-fit
 * grid: five equal programmes are a set, and auto-fit would reflow them 4+1 at
 * some widths, which reads as one programme being different from the rest.
 */
.elpis-programs-summary,
.elpis-programs-detail {
	grid-template-columns: repeat( 5, 1fr );
}

@media ( max-width: 1100px ) {
	.elpis-programs-summary,
	.elpis-programs-detail {
		grid-template-columns: repeat( 2, 1fr );
	}
}

@media ( max-width: 600px ) {
	.elpis-programs-summary,
	.elpis-programs-detail {
		grid-template-columns: 1fr;
	}
}

/*
 * The tinted programme tile. Each carries a faint wash of its own hue, per the
 * comp. Drawn with color-mix against white rather than five new palette
 * entries: these are sub-12% surfaces, not design tokens anything else will
 * reuse, and adding five near-white slugs to theme.json would put them in the
 * editor's colour picker where they have no business being.
 */
.elpis-program-tile {
	position: relative;
	padding-top: var( --wp--preset--spacing--50 );
}

.elpis-program-tile--teal { background-color: color-mix( in srgb, var( --wp--preset--color--teal-mid ) 7%, #FFFFFF ); }
.elpis-program-tile--leaf { background-color: color-mix( in srgb, var( --wp--preset--color--leaf ) 9%, #FFFFFF ); }
.elpis-program-tile--gold { background-color: color-mix( in srgb, var( --wp--preset--color--gold-cta ) 12%, #FFFFFF ); }
.elpis-program-tile--deep { background-color: color-mix( in srgb, var( --wp--preset--color--primary-deep ) 7%, #FFFFFF ); }
.elpis-program-tile--coral { background-color: color-mix( in srgb, var( --wp--preset--color--coral ) 10%, #FFFFFF ); }

/*
 * The number badge. aria-hidden in the markup: the cards are already an
 * ordered set visually, and the number is decoration above a heading that
 * names the programme -- announcing "1" before that name adds nothing.
 */
.elpis-program-num {
	position: absolute;
	top: var( --wp--preset--spacing--30 );
	left: var( --wp--preset--spacing--30 );
	display: flex;
	align-items: center;
	justify-content: center;
	width: 1.75rem;
	height: 1.75rem;
	border-radius: 50%;
	background-color: var( --wp--preset--color--base );
	box-shadow: var( --wp--preset--shadow--lift );
	color: var( --wp--preset--color--primary-deep );
	font-family: var( --wp--preset--font-family--heading );
	font-size: var( --wp--preset--font-size--x-small );
	font-weight: 600;
}

/* Five programme names across one row need a step down from the shared card
   heading size, or every one of them wraps to four lines. */
.elpis-programs-summary .elpis-card h3 {
	font-size: var( --wp--preset--font-size--medium );
}

.elpis-program-detail {
	position: relative;
	padding-top: 0;
	overflow: hidden;
}

/* PLACEHOLDER IMAGE slot, bled to the card's edges -- so its own negative
   margins cancel the card padding that everything below it keeps. */
.elpis-program-media {
	aspect-ratio: 3 / 2;
	width: calc( 100% + var( --wp--preset--spacing--40 ) * 2 );
	margin: 0 calc( var( --wp--preset--spacing--40 ) * -1 ) var( --wp--preset--spacing--40 );
	background-color: var( --wp--preset--color--primary-tint );
	overflow: hidden;
}

.elpis-program-media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.elpis-program-detail h3 {
	margin-top: 0;
	font-size: var( --wp--preset--font-size--large );
}

.elpis-program-detail h4 {
	margin: var( --wp--preset--spacing--40 ) 0 0;
	font-size: var( --wp--preset--font-size--small );
	font-weight: 700;
	color: var( --wp--preset--color--contrast );
}

/* "Our flagship program". accent-deep ink on a 25% gold tint measures 5.4:1. */
.elpis-program-badge {
	display: inline-block;
	margin: var( --wp--preset--spacing--20 ) 0 0;
	padding: 0.15rem var( --wp--preset--spacing--30 );
	border-radius: 999px;
	background-color: color-mix( in srgb, var( --wp--preset--color--gold-cta ) 25%, #FFFFFF );
	color: var( --wp--preset--color--accent-deep );
	font-size: var( --wp--preset--font-size--x-small );
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

/*
 * The "Elpis does not provide therapy" caveat. Set apart deliberately: it
 * corrects a reasonable misreading of the programme's own name, and burying it
 * in body copy is how a family ends up applying for the wrong thing.
 */
.elpis-program-note {
	margin: var( --wp--preset--spacing--30 ) 0 0;
	padding: var( --wp--preset--spacing--30 );
	border-left: 3px solid var( --wp--preset--color--accent );
	background-color: var( --wp--preset--color--shell );
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--x-small );
}

/* Pins each detail card's action to the foot of the shared row height, so the
   five buttons line up across cards whose sub-lists differ in length. */
.elpis-program-detail .elpis-btn {
	width: 100%;
	margin-top: auto;
}

.elpis-program-detail .elpis-check-list {
	margin-bottom: var( --wp--preset--spacing--40 );
}

/*
 * The Programs comp lays its FAQ out as three open columns on the teal band
 * rather than one stacked accordion. The <details> elements stay -- still the
 * right element, still collapsing on narrow screens where three will not fit.
 */
.elpis-faq--columns {
	display: grid;
	grid-template-columns: repeat( 3, 1fr );
	gap: var( --wp--preset--spacing--40 );
	align-items: start;
}

@media ( max-width: 900px ) {
	.elpis-faq--columns {
		grid-template-columns: 1fr;
	}
}

/* ---------------------------------------------------------------------------
   Resources & forms, and Transparency — document cards
   --------------------------------------------------------------------------- */

/* The comp's "1. Beneficiary assistance" heading: an icon disc, then the
   numbered title, centred as a unit. */
.elpis-numbered-head {
	display: flex;
	align-items: center;
	justify-content: center;
	gap: var( --wp--preset--spacing--30 );
	margin-bottom: var( --wp--preset--spacing--20 );
}

.elpis-numbered-head h2 {
	margin: 0;
	font-size: var( --wp--preset--font-size--x-large );
	text-transform: uppercase;
	letter-spacing: 0.02em;
}

.elpis-doc-card {
	justify-content: flex-start;
}

/* The form code, e.g. "(D-01)". Sits directly under its title as one unit, so
   the shared card-paragraph top margin is removed. */
.elpis-doc-code {
	margin: var( --wp--preset--spacing--10 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--x-small );
	font-weight: 700;
}

/* Pins each card's download action to the foot of the shared row height, so
   the buttons line up across cards whose descriptions differ in length. */
.elpis-doc-btn {
	width: 100%;
	margin-top: auto;
}

.elpis-doc-card > p:not( .elpis-doc-code ) {
	margin-bottom: var( --wp--preset--spacing--40 );
}

/*
 * "Coming soon" is plain text, not a disabled button -- a disabled control
 * that a keyboard user can still reach but never operate is worse than a
 * statement of fact. See patterns/page-transparency.php.
 */
.elpis-doc-pending {
	/* Same reason as .elpis-btn: width:100% plus padding, and no universal
	   border-box reset in WordPress. */
	box-sizing: border-box;
	width: 100%;
	margin-top: auto;
	padding: 0.9rem var( --wp--preset--spacing--30 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--shell );
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--x-small );
	font-weight: 700;
	text-align: center;
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

/* Five document cards per row where they exist as a set of five. */
.elpis-cards--five {
	grid-template-columns: repeat( 5, 1fr );
}

@media ( max-width: 1100px ) {
	.elpis-cards--five {
		grid-template-columns: repeat( 2, 1fr );
	}
}

@media ( max-width: 600px ) {
	.elpis-cards--five {
		grid-template-columns: 1fr;
	}
}

.elpis-cards--pair {
	grid-template-columns: repeat( 2, 1fr );
}

@media ( max-width: 800px ) {
	.elpis-cards--pair {
		grid-template-columns: 1fr;
	}
}

/* A wide single-document card: icon, text, action in one row. */
.elpis-doc-row {
	display: grid;
	grid-template-columns: auto 1fr auto;
	gap: var( --wp--preset--spacing--40 );
	align-items: center;
	text-align: left;
}

@media ( max-width: 700px ) {
	.elpis-doc-row {
		grid-template-columns: 1fr;
		justify-items: start;
	}
}

.elpis-doc-row-text h3 {
	margin: 0;
	font-size: var( --wp--preset--font-size--large );
}

.elpis-doc-row-text p {
	margin: var( --wp--preset--spacing--20 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--small );
}

/* The "Important reminder" strip. */
.elpis-notice {
	display: grid;
	grid-template-columns: auto 1fr auto;
	gap: var( --wp--preset--spacing--40 );
	align-items: center;
	margin-top: var( --wp--preset--spacing--50 );
	padding: var( --wp--preset--spacing--40 );
	border-radius: 4px;
	border: 1px solid var( --wp--preset--color--primary-tint );
	background-color: var( --wp--preset--color--base );
}

@media ( max-width: 800px ) {
	.elpis-notice {
		grid-template-columns: 1fr;
	}
}

.elpis-notice-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: var( --wp--preset--spacing--50 );
	height: var( --wp--preset--spacing--50 );
	border-radius: 50%;
	background-color: var( --wp--preset--color--primary-deep );
	color: var( --wp--preset--color--base );
}

.elpis-notice-icon svg {
	width: 60%;
	height: 60%;
}

.elpis-notice h3 {
	margin: 0;
	font-size: var( --wp--preset--font-size--small );
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
	color: var( --wp--preset--color--primary-deep );
}

.elpis-notice p {
	margin: var( --wp--preset--spacing--10 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--small );
}

.elpis-notice-link {
	display: inline-flex;
	align-items: center;
	gap: var( --wp--preset--spacing--20 );
	min-height: 44px;
	font-size: var( --wp--preset--font-size--small );
	font-weight: 700;
}

.elpis-notice-link svg {
	flex: 0 0 auto;
	width: var( --wp--custom--icon--sm );
	height: var( --wp--custom--icon--sm );
}

/* ---------------------------------------------------------------------------
   Transparency — the commitment/FAQ split
   --------------------------------------------------------------------------- */

.elpis-transparency-split {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var( --wp--preset--spacing--50 );
	align-items: start;
}

@media ( max-width: 900px ) {
	.elpis-transparency-split {
		grid-template-columns: 1fr;
	}
}

.elpis-panel {
	padding: var( --wp--preset--spacing--50 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--base );
	box-shadow: var( --wp--preset--shadow--lift );
}

.elpis-panel > h2 {
	margin: 0 0 var( --wp--preset--spacing--40 );
	font-size: var( --wp--preset--font-size--x-large );
	text-align: center;
	text-transform: uppercase;
	letter-spacing: 0.02em;
}

.elpis-panel--dark {
	background-color: var( --wp--preset--color--teal-deep );
	color: var( --wp--preset--color--base );
}

.elpis-panel--dark > h2 {
	color: var( --wp--preset--color--base );
	text-align: left;
	text-transform: none;
	letter-spacing: -0.01em;
}

.elpis-panel--dark > p {
	margin: 0 0 var( --wp--preset--spacing--40 );
	color: var( --wp--preset--color--primary-tint );
	font-size: var( --wp--preset--font-size--small );
}

.elpis-commitment-list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var( --wp--preset--spacing--40 );
}

.elpis-commitment-list li {
	display: grid;
	grid-template-columns: auto 1fr;
	gap: var( --wp--preset--spacing--30 );
	align-items: center;
}

.elpis-commitment-list p {
	margin: 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--small );
}

.elpis-contact-list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var( --wp--preset--spacing--20 );
	font-size: var( --wp--preset--font-size--small );
}

.elpis-contact-list li {
	display: flex;
	align-items: flex-start;
	gap: var( --wp--preset--spacing--30 );
	min-height: 44px;
}

.elpis-contact-list svg {
	flex: 0 0 auto;
	width: var( --wp--custom--icon--sm );
	height: var( --wp--custom--icon--sm );
	/* Optical alignment with the first line of a 1.7 line-height label. */
	margin-top: 0.55em;
	color: var( --wp--preset--color--accent );
}

/* White on teal-deep, 10.34:1 -- theme.json's global link colour would be
   near-invisible here, the same problem the footer and utility bar solve. */
.elpis-contact-list a,
.elpis-contact-list a:hover,
.elpis-contact-list a:focus {
	color: var( --wp--preset--color--base );
	overflow-wrap: anywhere;
}

/* ---------------------------------------------------------------------------
   Our people
   --------------------------------------------------------------------------- */

.elpis-people {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	gap: var( --wp--preset--spacing--40 );
}

.elpis-people--five { grid-template-columns: repeat( 5, 1fr ); }
.elpis-people--six { grid-template-columns: repeat( 6, 1fr ); }
.elpis-people--seven { grid-template-columns: repeat( 7, 1fr ); }

@media ( max-width: 1100px ) {
	.elpis-people--five,
	.elpis-people--six,
	.elpis-people--seven {
		grid-template-columns: repeat( 3, 1fr );
	}
}

@media ( max-width: 700px ) {
	.elpis-people--five,
	.elpis-people--six,
	.elpis-people--seven {
		grid-template-columns: repeat( 2, 1fr );
	}
}

.elpis-person {
	display: flex;
	flex-direction: column;
	align-items: center;
	height: 100%;
	padding: var( --wp--preset--spacing--40 ) var( --wp--preset--spacing--30 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--base );
	box-shadow: var( --wp--preset--shadow--lift );
	text-align: center;
}

/*
 * The comp renders trustees, partners and ambassadors as dark gold-framed
 * portrait cards. Without photographs that treatment would be a dark rectangle
 * with a name in it, so the frame is kept and the portrait area carries an
 * initials monogram instead of an invented image.
 */
.elpis-person--formal {
	background-color: var( --wp--preset--color--teal-deep );
	border: 1px solid var( --wp--preset--color--accent );
	color: var( --wp--preset--color--base );
}

/*
 * PLACEHOLDER IMAGE: an initials monogram, aria-hidden in the markup because
 * the name beside it already carries the meaning. Replace with a real <img>
 * and real alt text once the organisation supplies portraits.
 */
.elpis-person-photo {
	display: flex;
	align-items: center;
	justify-content: center;
	width: var( --wp--preset--spacing--70 );
	height: var( --wp--preset--spacing--70 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--primary-deep );
	color: var( --wp--preset--color--accent );
	font-family: var( --wp--preset--font-family--heading );
	font-size: var( --wp--preset--font-size--x-large );
	font-weight: 600;
	letter-spacing: 0.02em;
}

.elpis-person-photo--round {
	border-radius: 50%;
	background-color: var( --wp--preset--color--primary-tint );
	color: var( --wp--preset--color--primary-deep );
}

.elpis-person-name {
	margin: var( --wp--preset--spacing--30 ) 0 0;
	font-size: var( --wp--preset--font-size--small );
	font-weight: 600;
	text-transform: uppercase;
	letter-spacing: 0.02em;
}

.elpis-person--formal .elpis-person-name {
	color: var( --wp--preset--color--base );
}

/* accent on teal-deep measures 4.38:1 -- past the 4.5:1 threshold only for
   large text, so the role sits at x-small BOLD and takes the lighter
   primary-tint instead (8.90:1) on the dark cards. */
.elpis-person-role {
	margin: var( --wp--preset--spacing--20 ) 0 0;
	padding: 0.1rem var( --wp--preset--spacing--30 );
	border-radius: 999px;
	background-color: var( --wp--preset--color--primary-deep );
	color: var( --wp--preset--color--primary-tint );
	font-size: var( --wp--preset--font-size--x-small );
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

.elpis-person-role--gold {
	background-color: transparent;
	padding: 0;
	color: var( --wp--preset--color--accent-deep );
}

.elpis-person-quote {
	margin: var( --wp--preset--spacing--30 ) 0 0;
	padding: 0;
	border: 0;
}

.elpis-person-quote p {
	margin: 0;
	color: var( --wp--preset--color--primary-tint );
	font-family: var( --wp--preset--font-family--heading );
	font-size: var( --wp--preset--font-size--x-small );
	font-style: italic;
	line-height: 1.5;
}

.elpis-person-meta {
	margin: var( --wp--preset--spacing--20 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--x-small );
}

.elpis-person-bio {
	margin: var( --wp--preset--spacing--20 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--x-small );
}

/* ---------------------------------------------------------------------------
   Our people — organisational chart
   --------------------------------------------------------------------------- */

.elpis-people-structure {
	display: grid;
	grid-template-columns: 3fr 2fr;
	gap: var( --wp--preset--spacing--50 );
	align-items: start;
}

@media ( max-width: 900px ) {
	.elpis-people-structure {
		grid-template-columns: 1fr;
	}
}

/*
 * Nested lists, not a drawn diagram. The parent/child relationships are in the
 * markup where a screen reader can walk them; the CSS only draws boxes. An SVG
 * chart would need every one of those relationships restated in a text
 * alternative to convey as much.
 */
.elpis-orgchart,
.elpis-orgchart ul {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var( --wp--preset--spacing--20 );
}

/*
 * The officer row runs horizontally under "Board of trustees", per the comp.
 * `.elpis-orgchart ul` above is class-plus-element and would otherwise
 * out-specify a plain `.elpis-orgchart-row`, leaving the five officers stacked
 * in one column — so the nested case is spelled out explicitly rather than
 * relying on source order.
 */
.elpis-orgchart-row,
.elpis-orgchart ul.elpis-orgchart-row {
	display: flex;
	flex-direction: row;
	flex-wrap: wrap;
	justify-content: center;
	gap: var( --wp--preset--spacing--20 );
	list-style: none;
	margin: var( --wp--preset--spacing--20 ) 0 0;
	padding: 0;
}

.elpis-orgchart-node {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	padding: var( --wp--preset--spacing--20 ) var( --wp--preset--spacing--30 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--primary-deep );
	color: var( --wp--preset--color--base );
	font-size: var( --wp--preset--font-size--x-small );
	font-weight: 700;
	text-align: center;
}

.elpis-orgchart-node--top {
	background-color: var( --wp--preset--color--teal-deep );
}

/* Ink on gold, 7.55:1 -- CLAUDE.md's gold rule applies to a filled surface
   here exactly as it does to a button. */
.elpis-orgchart-node--gold {
	background-color: var( --wp--preset--color--gold-cta );
	color: var( --wp--preset--color--contrast );
}

.elpis-orgchart-committees {
	margin-top: var( --wp--preset--spacing--30 );
}

.elpis-orgchart-base {
	margin: var( --wp--preset--spacing--30 ) 0 0;
	text-align: center;
}

.elpis-culture {
	padding: var( --wp--preset--spacing--50 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--base );
	box-shadow: var( --wp--preset--shadow--lift );
}

.elpis-culture h2 {
	margin: 0 0 var( --wp--preset--spacing--40 );
	font-size: var( --wp--preset--font-size--x-large );
	text-align: center;
}

.elpis-culture dl {
	margin: 0;
	display: flex;
	flex-direction: column;
	gap: var( --wp--preset--spacing--40 );
}

.elpis-culture dl > div {
	display: grid;
	grid-template-columns: auto 1fr;
	grid-template-rows: auto auto;
	column-gap: var( --wp--preset--spacing--30 );
	align-items: center;
}

.elpis-culture-icon {
	grid-row: 1 / 3;
	display: flex;
	align-items: center;
	justify-content: center;
	width: var( --wp--preset--spacing--50 );
	height: var( --wp--preset--spacing--50 );
	color: var( --wp--preset--color--primary-deep );
}

.elpis-culture-icon svg {
	width: 70%;
	height: 70%;
}

.elpis-culture dt {
	font-weight: 700;
	font-size: var( --wp--preset--font-size--small );
	color: var( --wp--preset--color--primary-deep );
}

.elpis-culture dd {
	margin: 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--x-small );
}

/* ---------------------------------------------------------------------------
   News & events
   --------------------------------------------------------------------------- */

.elpis-featured {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var( --wp--preset--spacing--50 );
	align-items: center;
	padding: var( --wp--preset--spacing--40 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--base );
	box-shadow: var( --wp--preset--shadow--lift );
}

@media ( max-width: 900px ) {
	.elpis-featured {
		grid-template-columns: 1fr;
	}
}

/* PLACEHOLDER IMAGE slot. */
.elpis-featured-media {
	aspect-ratio: 16 / 10;
	border-radius: 4px;
	background-color: var( --wp--preset--color--primary-tint );
	overflow: hidden;
}

.elpis-featured-media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

/* accent-deep, 6.11:1 -- not the gold-cta the comp uses, which is 2.31:1 and
   fails outright as text. */
.elpis-featured-date {
	margin: 0;
	color: var( --wp--preset--color--accent-deep );
	font-size: var( --wp--preset--font-size--x-small );
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: 0.04em;
}

.elpis-featured-text h3 {
	margin: var( --wp--preset--spacing--20 ) 0 0;
	font-size: var( --wp--preset--font-size--xx-large );
	line-height: 1.2;
}

.elpis-featured-text > p {
	margin: var( --wp--preset--spacing--30 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--small );
}

.elpis-featured-facts {
	display: grid;
	grid-template-columns: repeat( 3, 1fr );
	gap: var( --wp--preset--spacing--30 );
	margin: var( --wp--preset--spacing--40 ) 0;
}

@media ( max-width: 600px ) {
	.elpis-featured-facts {
		grid-template-columns: 1fr;
	}
}

.elpis-featured-facts dt {
	font-family: var( --wp--preset--font-family--heading );
	font-size: var( --wp--preset--font-size--large );
	font-weight: 600;
	color: var( --wp--preset--color--primary-deep );
}

.elpis-featured-facts dd {
	margin: 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--x-small );
}

.elpis-news-split {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: var( --wp--preset--spacing--50 );
	align-items: start;
}

@media ( max-width: 900px ) {
	.elpis-news-split {
		grid-template-columns: 1fr;
	}
}

.elpis-panel-head {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: space-between;
	gap: var( --wp--preset--spacing--30 );
	margin-bottom: var( --wp--preset--spacing--40 );
}

.elpis-panel-head h2 {
	margin: 0;
	font-size: var( --wp--preset--font-size--x-large );
	text-transform: uppercase;
	letter-spacing: 0.02em;
}

.elpis-btn--small {
	min-height: 44px;
	padding: 0.5rem var( --wp--preset--spacing--30 );
	font-size: var( --wp--preset--font-size--x-small );
}

.elpis-event-list {
	list-style: none;
	margin: 0;
	padding: 0;
	display: flex;
	flex-direction: column;
	gap: var( --wp--preset--spacing--30 );
}

.elpis-event-list li {
	display: grid;
	grid-template-columns: auto 1fr auto;
	gap: var( --wp--preset--spacing--30 );
	align-items: center;
	padding: var( --wp--preset--spacing--30 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--base );
	box-shadow: var( --wp--preset--shadow--lift );
}

@media ( max-width: 600px ) {
	.elpis-event-list li {
		grid-template-columns: auto 1fr;
	}
}

.elpis-event-list h3 {
	margin: 0;
	font-size: var( --wp--preset--font-size--small );
	font-weight: 700;
	color: var( --wp--preset--color--primary-deep );
}

.elpis-event-list p {
	margin: var( --wp--preset--spacing--10 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--x-small );
}

.elpis-event-details {
	display: inline-flex;
	align-items: center;
	gap: var( --wp--preset--spacing--20 );
	min-height: 44px;
	font-size: var( --wp--preset--font-size--x-small );
	font-weight: 700;
	text-decoration: none;
}

.elpis-event-details svg {
	flex: 0 0 auto;
	width: var( --wp--custom--icon--sm );
	height: var( --wp--custom--icon--sm );
}

/*
 * PLACEHOLDER IMAGE x5. Empty slots with a neutral fill -- no stock
 * photography of children ships (CLAUDE.md). The container is aria-hidden in
 * the markup because empty slots are decoration; that attribute must come off
 * when real photographs and their alt text go in.
 */
.elpis-gallery {
	display: grid;
	grid-template-columns: repeat( 3, 1fr );
	gap: var( --wp--preset--spacing--20 );
}

.elpis-gallery-slot {
	aspect-ratio: 1;
	border-radius: 4px;
	background-color: var( --wp--preset--color--primary-tint );
}

.elpis-gallery-slot--wide {
	grid-column: span 3 / span 3;
	aspect-ratio: 3 / 1;
}

@media ( min-width: 601px ) {
	.elpis-gallery-slot--wide {
		grid-column: span 3 / span 3;
		aspect-ratio: 5 / 2;
	}
}

/* ---------------------------------------------------------------------------
   Figure rows (News & events, Get involved)
   --------------------------------------------------------------------------- */

.elpis-figure-row {
	display: grid;
	grid-template-columns: repeat( 6, 1fr );
	gap: var( --wp--preset--spacing--30 );
	margin: 0;
}

@media ( max-width: 1000px ) {
	.elpis-figure-row {
		grid-template-columns: repeat( 3, 1fr );
	}
}

@media ( max-width: 560px ) {
	.elpis-figure-row {
		grid-template-columns: repeat( 2, 1fr );
	}
}

.elpis-figure {
	padding: var( --wp--preset--spacing--40 ) var( --wp--preset--spacing--30 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--base );
	box-shadow: var( --wp--preset--shadow--lift );
	text-align: center;
}

.elpis-figure dt {
	font-family: var( --wp--preset--font-family--heading );
	font-size: var( --wp--preset--font-size--xx-large );
	font-weight: 600;
	color: var( --wp--preset--color--primary-deep );
}

.elpis-figure dd {
	margin: var( --wp--preset--spacing--10 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--x-small );
}

/* ---------------------------------------------------------------------------
   Get involved
   --------------------------------------------------------------------------- */

.elpis-page-hero-aside {
	display: flex;
	flex-direction: column;
	gap: var( --wp--preset--spacing--40 );
}

.elpis-hero-quote {
	margin: 0;
	padding: 0 0 0 var( --wp--preset--spacing--40 );
	border-left: 3px solid var( --wp--preset--color--accent );
}

.elpis-hero-quote p {
	margin: 0;
	color: var( --wp--preset--color--base );
	font-family: var( --wp--preset--font-family--heading );
	font-size: var( --wp--preset--font-size--large );
	font-style: italic;
	line-height: 1.5;
}

.elpis-help-grid {
	grid-template-columns: repeat( 3, 1fr );
}

@media ( max-width: 1000px ) {
	.elpis-help-grid {
		grid-template-columns: repeat( 2, 1fr );
	}
}

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

.elpis-way-card {
	padding-top: 0;
	overflow: hidden;
}

/* PLACEHOLDER IMAGE slot, bled to the card edges with the icon disc overlapping
   its lower-left corner as the comp draws it. */
.elpis-way-media {
	position: relative;
	aspect-ratio: 5 / 2;
	width: calc( 100% + var( --wp--preset--spacing--40 ) * 2 );
	margin: 0 calc( var( --wp--preset--spacing--40 ) * -1 ) var( --wp--preset--spacing--40 );
	background-color: var( --wp--preset--color--primary-tint );
}

.elpis-way-media img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
}

.elpis-way-media .elpis-card-icon {
	position: absolute;
	left: var( --wp--preset--spacing--40 );
	bottom: calc( var( --wp--preset--spacing--30 ) * -1 );
}

.elpis-way-card h3 {
	margin-top: 0;
	text-transform: uppercase;
	font-size: var( --wp--preset--font-size--large );
}

.elpis-way-card .elpis-btn {
	margin-top: auto;
}

.elpis-way-card > p {
	margin-bottom: var( --wp--preset--spacing--40 );
}

.elpis-give-row {
	list-style: none;
	margin: 0;
	padding: 0;
	display: grid;
	grid-template-columns: repeat( 9, 1fr );
	gap: var( --wp--preset--spacing--20 );
}

@media ( max-width: 1100px ) {
	.elpis-give-row {
		grid-template-columns: repeat( 5, 1fr );
	}
}

@media ( max-width: 700px ) {
	.elpis-give-row {
		grid-template-columns: repeat( 3, 1fr );
	}
}

.elpis-give-row li {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: var( --wp--preset--spacing--20 );
	padding: var( --wp--preset--spacing--30 ) var( --wp--preset--spacing--20 );
	border-radius: 4px;
	background-color: var( --wp--preset--color--shell );
	text-align: center;
	font-size: var( --wp--preset--font-size--x-small );
	font-weight: 700;
	color: var( --wp--preset--color--primary-deep );
}

.elpis-give-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: var( --wp--preset--spacing--50 );
	height: var( --wp--preset--spacing--50 );
	color: var( --wp--preset--color--primary-deep );
}

.elpis-give-icon svg {
	width: 100%;
	height: 100%;
}

.elpis-impact-together {
	display: grid;
	grid-template-columns: 1fr 3fr;
	gap: var( --wp--preset--spacing--50 );
	align-items: center;
}

@media ( max-width: 900px ) {
	.elpis-impact-together {
		grid-template-columns: 1fr;
	}
}

.elpis-impact-together h2 {
	margin: 0;
	font-size: var( --wp--preset--font-size--x-large );
	text-transform: uppercase;
	letter-spacing: 0.02em;
}

.elpis-impact-together > div > p {
	margin: var( --wp--preset--spacing--30 ) 0 0;
	color: var( --wp--preset--color--muted );
	font-size: var( --wp--preset--font-size--small );
}
