/*
Theme Name:        Langley Strong (Kika)
Theme URI:         https://langleystrong.ca
Author:            Langley Strong Coalition
Author URI:        https://langleystrong.ca
Description:       Drag-and-drop WordPress theme for the Langley Strong campaign site. A complete municipal-campaign build: editorial hero, 12-column CSS Grid, token-driven design system (edit :root to re-skin), plus self-contained Events, News, Candidates, and Endorsements post types. Activate it and the full site — pages, menus, and placeholder content — appears out of the box, no plugins required.
Version:           1.64.0
Requires at least: 6.0
Tested up to:      7.0
Requires PHP:      7.4
License:           GNU General Public License v2 or later
License URI:       https://www.gnu.org/licenses/gpl-2.0.html
Text Domain:       ls-kika
Tags:              one-column, custom-colors, custom-logo, custom-menu, featured-images, translation-ready, community

  ---------------------------------------------------------------------------
  DEVELOPER NOTE
  ---------------------------------------------------------------------------
  Everything below this header is the site's design system, copied verbatim
  from the approved static build (ls-kika/style.css) so the WordPress render
  is pixel-identical. Two layers:
    1. GLOBAL  — :root design tokens, reset, header, footer, buttons, shared
                 components. Applies to every page.
    2. PER-PAGE— each page's rules, scoped under a `.page-<name>` class that
                 the theme adds to <body> (see ls_kika_body_class() in
                 functions.php). Re-skin the whole site by editing the
                 :root tokens only.
  The theme Version above is the single source of truth for cache-busting —
  functions.php enqueues every asset with wp_get_theme()->get('Version').
  ---------------------------------------------------------------------------
*/

/* =============================================================================
   LANGLEY STRONG  |  style.css  (single stylesheet)

   HANDOVER NOTES
   --------------
   • Design tokens live in :root below — re-skin by editing tokens only.
   • Type: Outfit (display + body), Barlow Condensed (labels/eyebrows), Caveat
     (script accent). Loaded from Google Fonts in each page <head>. Reference the
     stacks via the --font-* tokens, never hardcoded strings.
   • Script accent (Caveat) is used in exactly ONE place: the hero heading, via
     `.hero h1 .script`. Nowhere else — CTA bands and body emphasis stay in Outfit.
   • Button colour roles: gold = primary, green = donate, blue = action/green.
   • Cards share one look: white fill with a hard black offset border (1px all
     round + 4px on the left & bottom edges). See the .card-frame helper note.
   • Header is a light (white) bar; the FOOTER is also white — its logo is the
     colour SVG (assets/langley-strong-logo.svg), not the white variant.
   • Structure of this file:
       1–16  GLOBAL layer — tokens, reset, header, footer, buttons, shared bits.
             These apply to every page.
       17+   PAGE-SCOPED layer — one section per page, every rule prefixed with a
             `.page-<name>` class that also sits on that page's <body>. Pages reuse
             generic class names (.hero, .eyebrow, .filter …) with different values,
             so scoping keeps them from colliding. To edit one page, jump to its
             `.page-<name>` banner.
   • Colours/spacing use CSS custom properties; placeholder art is the .ph block;
     dashed tags (.anno-tag) flag copy needing review.
   ============================================================================= */

/* ===== 1. DESIGN TOKENS ===== */
:root {
	/* Colour palette — the complete set; reuse these, never new hexes.
	   (Placeholder .ph hatches and the .anno-tag wireframe flags keep their
	   own literal colours since they are scaffolding, not brand.) */
	--green-900: #0e3863; /* darkest blue — dark bands, headings, header text */
	--green-800: #175ea5; /* baltic blue — hero band, links, action buttons */
	--green-700: #417cb6; /* light blue — dark-card fills, quiet links */
	--jade: #009765; /* green — Donate button only */
	--gold: #ffd071; /* brand yellow — highlight fills, on-dark accents */
	--gold-dark: #626262; /* grey — section-label text on light grounds */
	--cream: #fffae9; /* warm cream — page/section background */
	--ink: #1c2a21; /* primary body text (near-black) */
	--ink-soft: #45525e; /* secondary text (grey) */
	--muted: #5f6b77; /* muted blue-grey labels (pillars/team eyebrows) — AA on cream */
	--line: #e2dbc8; /* hairline card/divider border */
	--white: #ffffff;
	--error: #b3261e; /* form validation only — no brand colour reads as "wrong",
	                     and #dc3232 (the Contact Form 7 default) misses AA on
	                     white. Not for decorative use. */

	/* Type */
	--font-display: 'Outfit', 'Helvetica Neue', Arial, sans-serif;
	--font-body: 'Outfit', 'Helvetica Neue', Arial, sans-serif;
	--font-label: 'Barlow Condensed', 'Arial Narrow', sans-serif;
	--font-accent: 'Caveat', cursive;

	/* Radii + layout */
	--radius-lg: 16px;
	--radius-md: 12px;
	--radius-sm: 8px;
	--maxw: 1160px;
	--maxw-narrow: 880px;
}

/* ===== 2. RESET & BASE ===== */
* {
	box-sizing: border-box;
	margin: 0;
	padding: 0;
}

html {
	scroll-behavior: smooth;
}

body {
	background: var(--cream);
	color: var(--ink);
	font-size: 16px;
	line-height: 1.6;
	font-family: var(--font-body);
}

h1,
h2,
h3,
.display {
	font-weight: 600;
	line-height: 1.15;
	font-family: var(--font-display);
}

a {
	color: inherit;
}

.wrap {
	margin: 0 auto;
	padding: 0 32px;
	max-width: var(--maxw);
}

/* Holds a phrase together across a line break. Available inside every editable
   heading, because `span class` is on the inline allow-list. Its one job so far
   is hyphenated compounds: a line is allowed to break after the hyphen in
   "one-man show", which strands "one-" at the end of a line. */
.nowrap {
	white-space: nowrap;
}

@media (prefers-reduced-motion: reduce) {
	* {
		animation: none !important;
		transition: none !important;
	}
	html {
		scroll-behavior: auto;
	}
}

/* ===== 3. SHARED COMPONENTS ===== */
/* Image/embed placeholder — hatched cream wireframe block (reference). The
   caption text indicates what photo/embed belongs there. */
.ph {
	display: flex;
	justify-content: center;
	align-items: center;
	border: 1px dashed #b9b19a;
	border-radius: var(--radius-md);
	background: repeating-linear-gradient(45deg, rgba(29, 61, 44, 0.08) 0 1px, transparent 1px 14px), repeating-linear-gradient(-45deg, rgba(29, 61, 44, 0.08) 0 1px, transparent 1px 14px), #e9e2d0;
	padding: 12px;
	color: #7a755f;
	font-size: 12px;
	letter-spacing: 0.08em;
	text-align: center;
	text-transform: uppercase;
}

/* A .ph box holding a real image instead of placeholder art. Every .ph is
   sized by its own scoped rule (aspect-ratio, radius, margins), so keeping the
   wrapper and filling it means photos inherit the designed box everywhere
   rather than rendering at their intrinsic size. */
.ph.is-filled {
	border: 0;
	padding: 0;
	overflow: hidden;
	background: none;
}
.ph.is-filled img {
	display: block;
	width: 100%;
	height: 100%;
	object-fit: cover;
	/* Top-aligned: portraits crop from the bottom, so faces stay in frame. */
	object-position: center top;
}
/* Dark variant — hatched lighter blue, for placeholders on the blue bands. */
.ph.dark {
	border-color: rgba(247, 241, 227, 0.35);
	background: repeating-linear-gradient(45deg, rgba(247, 241, 227, 0.07) 0 1px, transparent 1px 14px), repeating-linear-gradient(-45deg, rgba(247, 241, 227, 0.07) 0 1px, transparent 1px 14px), var(--green-700);
	color: rgba(247, 241, 227, 0.7);
}

/* Section rhythm + eyebrow labels */
section {
	padding: 84px 0;
}

/* Section eyebrow label — Barlow Condensed, grey, upper-tracked. */
.section-label {
	margin-bottom: 16px;
	color: var(--gold-dark);
	font-weight: 600;
	font-size: 16px;
	font-family: var(--font-label);
	letter-spacing: 0.1em;
	text-transform: uppercase;
}

/* Section titles are coloured by each page's `.page-* .section-title` rule
   (dark navy, var(--green-900)); the font comes from the global h2 rule. */
/* Heading emphasis: light-blue on LIGHT sections; dark bands override the
   <em> to brand gold (see the per-band rules in the page layer). */
.section-title em,
h2 em {
	color: var(--green-700);
	font-style: normal;
}
h1 em {
	font-style: normal;
}

/* Hero eyebrow — borderless gold Barlow Condensed text (reference). Every
   eyebrow on the site sits on a blue hero band. inline-flex keeps the span an
   atomic inline-level box so the vertical margins below actually apply. */
.eyebrow {
	display: inline-flex;
	/* 8px above / 20px below keep the eyebrow→heading gap on the same rhythm
	   as the heading→paragraph gap (h1 margin-bottom 20px). */
	margin-top: 8px;
	margin-bottom: 20px;
	color: var(--gold);
	font-weight: 500;
	font-size: 16px;
	font-family: var(--font-label);
	letter-spacing: 0.18em;
	text-transform: uppercase;
}

/* ===== Breadcrumbs (inside hero) ===== */
.breadcrumbs {
	margin-bottom: 16px;
}
.breadcrumbs ol {
	margin: 0;
	padding: 0;
	list-style: none;
	/* inline items inherit the hero's own text-align:
	   centered on .wrap heroes, left on .wrap.hero-grid heroes */
	font-family: var(--font-body); /* Outfit — quiet, not a label */
	font-size: 12px;
	font-weight: 400;
}
.breadcrumbs li {
	display: inline;
}
.breadcrumbs li + li::before {
	content: "\203A"; /* › separator */
	margin: 0 6px;
	color: rgba(247, 241, 227, 0.4);
}
.breadcrumbs a {
	color: rgba(247, 241, 227, 0.75);
	font-weight: 400;
	text-decoration: none;
}
.breadcrumbs a:hover {
	color: var(--gold);
}
.breadcrumbs [aria-current="page"] {
	color: rgba(247, 241, 227, 0.9);
	font-weight: 500;
}

/* Card frames — two tiers (reference):
   • CONTENT cards (pillars, news/resource/plan/event/form cards) get the hard
     black offset frame: 1px solid #000 all round + 4px on left & bottom.
   • PEOPLE & SOCIAL cards (candidates, team features, endorsements, posts)
     get a quiet hairline: 1px solid var(--line). */

/* Hero band — solid baltic blue, cream text. Per-page rules set their own
   padding/layout but inherit this ground (no diagonal hatch overlay). */
.hero {
	background: var(--green-800);
	padding: 84px 0 72px;
	color: var(--cream);
}

/* The heading is pure white in every mockup, while the lede below it stays
   cream — the band's own colour. Setting it here covers all seven heroes. */
.hero h1 {
	color: #fff;
}

/* Hero heading with a Caveat script accent. Normal leading — the "tuck" is
   done on the script line itself (below), NOT by collapsing the heading's
   line-height: a tight global leading made plain lines overlap each other
   (and the eyebrow) whenever the heading wrapped or carried a <br>. */
.hero h1:has(.script) {
	line-height: 1.05;
}

/* Hero script accent — Caveat, pollen, always lowercase. */
.hero h1 .script {
	color: var(--gold);
	font-weight: 700;
	/* Sized per hero rather than as 1.4em of it: the em landed on 78.4 and
	   89.6, and every step here has to be a multiple of four. The clamps
	   below also sit closer to the mockups (81.2 / 84 / 89.1) than one
	   ratio managed. Pages with a 56px hero use this; the two larger heroes
	   override it. */
	font-size: clamp(56px, 6.7vw, 80px);
	line-height: 1;
	font-family: var(--font-accent);
	text-transform: lowercase;
}
/* 60px heroes — About, Team. */
.page-about .hero h1 .script,
.page-the-team .hero h1 .script {
	font-size: clamp(56px, 7vw, 84px);
}
/* 64px hero — home. */
.page-index .hero h1 .script {
	font-size: clamp(60px, 7.3vw, 88px);
}

/* Leading is not one value across the site. The three large heroes (home 64px,
   About and Team 60px) are drawn at 1.05, which is what the rule above gives
   them. The 56px heroes listed below are drawn tight — leading equal to the
   size — and their script accent tighter still at 0.8, which is what closes the
   gap between the two lines. Without the second rule the accent's taller line
   box holds the lines apart no matter what the heading is set to.

   Not every 56px hero is in this list, and that is not an oversight: News,
   FAQs, Resources and Events set headings short enough to stay on one line, so
   their leading never shows. Donate is here because "Power the campaign for a
   stronger Township." wraps, which is the only reason the gap was visible. Add
   a page here when its heading starts wrapping, not because of its size. */
.page-platform .hero h1:has(.script),
.page-contact .hero h1:has(.script),
.page-get-involved .hero h1:has(.script),
.page-subscribe .hero h1:has(.script),
.page-donate .hero h1:has(.script) {
	line-height: 1;
}
/* 0.7, not the 0.8 the mockup states. In Figma the accent is a separate
   overlaid layer, so its leading never affects the heading's line rhythm — all
   three lines sit evenly. Inline, an accent whose line box is taller than the
   heading's pushes its line away from the one above. That only shows where the
   accent lands on a middle line, which is Get Involved: its first gap measured
   64px against 56px for the second. Zero takes the accent's box out of the
   line-height calculation altogether, so the heading's own leading governs all
   three lines and the accent overhangs without pushing anything — which is
   exactly what an overlaid layer does. Matching what the mockup looks like
   rather than what it says. */
.page-platform .hero h1 .script,
.page-contact .hero h1 .script,
.page-get-involved .hero h1 .script,
.page-subscribe .hero h1 .script,
.page-donate .hero h1 .script {
	line-height: 0;
}

/* Script accent alone on its line (home: "A Positive Path" / "Forward."):
   pull it up so it tucks tight under the heading text — the signature hero
   look. `:last-child` is doing real work here. An accent that merely starts a
   line but shares it with other words — Get Involved's "stronger Township" —
   must stay inline, or making it a block pushes the rest of its line down and
   the heading gains a line the mockup does not have. Inline accents mid-line
   (e.g. "One team. One goal.") never matched this in the first place. */
.hero h1 br + .script:last-child {
	display: block;
	margin-top: -0.3em;
}

/* Team "for" script accent (role-lines + candidate cards) — Caveat, per the
   approved reference, always lowercase. Endorsements' own `.for` uses a
   different selector (Outfit italic, not Caveat). */
.role-line .for,
.cand span .for {
	margin-right: 2px;
	font-weight: 600;
	font-size: 1.4em;
	font-family: var(--font-accent);
	letter-spacing: 0;
	text-transform: lowercase;
}

/* Hero band contrast pass: eyebrow + labels turn pollen on the baltic ground */
.hero .section-label {
	color: var(--gold);
}

/* ===== 4. BUTTONS ===== */
.btn {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	transition:
		transform 0.15s ease,
		background 0.15s ease,
		color 0.15s ease;
	cursor: pointer;
	border: 2px solid transparent;
	border-radius: 999px;
	padding: 12px 24px;
	font-weight: 700;
	font-size: 16px;
	text-decoration: none;
	white-space: nowrap;
}

.btn:focus-visible {
	outline: 3px solid var(--gold);
	outline-offset: 2px;
}

/* Donate button — green fill, white text. Green is reserved for this button. */
.btn-donate {
	background: var(--jade);
	color: var(--white);
}
.btn-donate:hover {
	background: #007a52;
}

/* Primary CTA — gold fill, dark-blue text. */
.btn-primary {
	background: var(--gold);
	color: var(--green-900);
}
.btn-primary:hover {
	/* Darker gold keeps the navy label readable (grey hover failed contrast). */
	background: #ecc068;
}

.btn-outline-light {
	border-color: rgba(247, 241, 227, 0.6);
	color: var(--cream);
}
.btn-outline-light:hover {
	background: rgba(247, 241, 227, 0.12);
}

.btn-outline-dark {
	border-color: var(--green-800);
	color: var(--green-800);
}
.btn-outline-dark:hover {
	background: var(--white);
}

/* Action button — solid baltic blue. (Overridden to gold inside the donate band.) */
.btn-green {
	background: var(--green-800);
	color: var(--cream);
}
.btn-green:hover {
	background: var(--green-700);
}

/* Quiet text link button */
.btn-text {
	padding: 12px 8px;
	color: var(--green-800);
	font-weight: 600;
	text-decoration: none;
}
.btn-text:hover {
	text-decoration: underline;
}

.arrow {
	font-family: var(--font-body);
}

/* ===== 5. HEADER ===== */
/* Light latte header (matches ls-static); contents are dark-on-light. */
header {
	position: sticky;
	top: 0;
	z-index: 50;
	border-bottom: 1px solid rgba(23, 94, 165, 0.18);
	background: var(--white);
}

.nav {
	display: flex;
	align-items: center;
	gap: 40px;
	margin: 0 auto;
	padding: 0 24px;
	max-width: 1280px;
	height: 76px;
}

/* Logo is the shared SVG (assets/langley-strong-logo.svg), rendered as <img>. */
.logo {
	display: flex;
	align-items: center;
	color: var(--green-900);
	text-decoration: none;
}
.logo img {
	display: block;
	width: auto;
	height: 44px;
}
/* Footer logo runs larger than the header's (reference). */
footer .logo img {
	height: 52px;
}

/* Eight links have to share the row with the logo and CTAs, so the desktop
   nav runs slightly tighter than body copy; nowrap keeps every label on one
   line (the ≤1240px hamburger takes over before the row can overflow). */
nav.primary {
	display: flex;
	gap: 20px;
	margin-left: 0;
}

nav.primary a {
	border-bottom: 2px solid transparent;
	padding: 8px 0;
	color: var(--green-900);
	font-weight: 600;
	font-size: 16px;
	text-decoration: none;
	white-space: nowrap;
}

nav.primary a:hover,
nav.primary a.active {
	border-bottom-color: var(--green-800);
	color: var(--green-900);
}

.nav-cta {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-left: auto;
}

.nav-cta .btn {
	padding: 8px 20px;
	font-size: 12px;
}

/* "Get Involved" outline sits on the light header -> blue outline */
header .btn-outline-light {
	border-color: var(--green-800);
	color: var(--green-800);
}
header .btn-outline-light:hover {
	background: rgba(23, 94, 165, 0.08);
}

.btn-subscribe {
	padding: 8px 12px;
	color: var(--green-800);
	font-weight: 600;
	font-size: 12px;
	text-decoration: none;
}
.btn-subscribe:hover {
	color: var(--green-900);
	text-decoration: underline;
}

/* Linktree — solid brand-blue disc; the green brand icon is flipped to white
   via filter so it stays legible on the blue ground. */
.linktree {
	display: flex;
	justify-content: center;
	align-items: center;
	border: 1.5px solid transparent;
	border-radius: 50%;
	background: var(--green-800);
	width: 38px;
	height: 38px;
	color: var(--white);
	font-size: 16px;
	text-decoration: none;
}
.linktree:hover {
	background: var(--green-900);
}
.linktree img {
	display: block;
	filter: brightness(0) invert(1);
	width: auto;
	height: 18px;
}

/* Mobile nav — at ≤1240px the primary links collapse behind a hamburger
   (.nav-toggle, hidden on desktop). script.js toggles `nav-open` on <body>;
   the open menu drops down as a panel under the sticky header. */
.nav-toggle {
	display: none;
	flex-direction: column;
	justify-content: center;
	align-items: center;
	gap: 4px;
	cursor: pointer;
	border: 0;
	background: none;
	padding: 8px;
	width: 40px;
	height: 40px;
}
.nav-toggle span {
	display: block;
	transition:
		transform 0.15s ease,
		opacity 0.15s ease;
	border-radius: 1px;
	background: var(--green-900);
	width: 20px;
	height: 2px;
}
body.nav-open .nav-toggle span:nth-child(1) {
	transform: translateY(6px) rotate(45deg);
}
body.nav-open .nav-toggle span:nth-child(2) {
	opacity: 0;
}
body.nav-open .nav-toggle span:nth-child(3) {
	transform: translateY(-6px) rotate(-45deg);
}
@media (max-width: 1240px) {
	.nav-toggle {
		display: flex;
	}
	nav.primary {
		display: none;
		position: absolute;
		top: 100%;
		right: 0;
		left: 0;
		flex-direction: column;
		gap: 0;
		margin-left: 0;
		box-shadow: 0 16px 24px rgba(14, 56, 99, 0.08);
		border-bottom: 1px solid rgba(23, 94, 165, 0.18);
		background: var(--white);
		padding: 8px 24px 16px;
	}
	body.nav-open nav.primary {
		display: flex;
	}
	nav.primary a {
		border-bottom: 1px solid rgba(23, 94, 165, 0.1);
		padding: 14px 0;
		font-size: 16px;
	}
	nav.primary a:hover,
	nav.primary a.active {
		border-bottom-color: var(--green-800);
	}
}
/* Phones: drop the Linktree disc and tighten the header row so the logo,
   Donate button, and hamburger all fit. */
@media (max-width: 640px) {
	.nav {
		gap: 12px;
	}
	.linktree {
		display: none;
	}
}

/* ===== 6. FOOTER ===== */
/* White footer — dark-on-light. Uses the colour logo (assets/langley-strong-logo.svg),
   NOT the white variant, so it stays visible on the light ground. */
footer {
	background: var(--white);
	padding: 64px 0 32px;
	color: var(--ink-soft);
}

.foot-grid {
	display: grid;
	grid-template-columns: 1.3fr 1fr 1fr;
	gap: 48px;
	border-bottom: 1px solid rgba(0, 0, 0, 0.15);
	padding-bottom: 44px;
}

.foot-grid h4 {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: 20px;
	font-family: var(--font-display);
}

.foot-sub {
	display: flex;
	margin-top: 16px;
	max-width: 360px;
}

.foot-sub input {
	flex: 1;
	border: 1px solid rgba(0, 0, 0, 0.35);
	border-radius: 999px 0 0 999px;
	background: rgba(0, 0, 0, 0.04);
	padding: 12px 16px;
	color: #000;
	font-size: 16px;
	font-family: var(--font-body);
}
.foot-sub input::placeholder {
	color: rgba(0, 0, 0, 0.5);
}

.foot-sub button {
	cursor: pointer;
	border: none;
	border-radius: 0 999px 999px 0;
	background: var(--gold);
	padding: 12px 20px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 16px;
}

footer nav {
	display: flex;
	flex-direction: column;
	gap: 8px;
}
footer nav a {
	color: var(--ink-soft);
	font-size: 16px;
	text-decoration: none;
}
footer nav a:hover {
	color: var(--green-800);
	text-decoration: underline;
}

.foot-social {
	display: flex;
	gap: 12px;
	margin-top: 16px;
}
/* Ring and glyph both take the Figma footer's values: a 1.23px hairline of
   baltic blue at 18%, with the mark itself in the darkest blue. The icons are
   inline SVG using currentColor, so `color` here drives the glyph and the two
   can be moved together on hover. */
.foot-social a {
	display: flex;
	justify-content: center;
	align-items: center;
	transition: background-color 0.15s ease, border-color 0.15s ease;
	border: 1.23px solid rgba(23, 94, 165, 0.18);
	border-radius: 50%;
	width: 44px;
	height: 44px;
	color: var(--green-900);
	text-decoration: none;
}
.foot-social a:hover {
	border-color: rgba(23, 94, 165, 0.45);
	background: rgba(23, 94, 165, 0.08);
}
/* The glyph is drawn against the icon's own 44px artboard, so the SVG fills the
   circle rather than being sized independently — the padding is already in the
   path coordinates. */
.foot-social .social-icon {
	display: block;
	width: 100%;
	height: 100%;
}

.foot-legal {
	display: flex;
	flex-direction: column;
	gap: 8px;
	padding-top: 28px;
	color: var(--ink-soft);
	font-size: 12px;
}
.foot-legal a {
	color: var(--ink-soft);
}


/* Visually-hidden text (WordPress core markup uses this class, e.g. the
   pagination's "Posts navigation" heading and the search form label). */
.screen-reader-text {
	position: absolute !important;
	clip-path: inset(50%);
	margin: -1px;
	border: 0;
	padding: 0;
	width: 1px;
	height: 1px;
	overflow: hidden;
	white-space: nowrap;
	word-wrap: normal;
}
.screen-reader-text:focus {
	display: block;
	top: 5px;
	left: 5px;
	z-index: 100000;
	clip-path: none;
	background: var(--white);
	padding: 16px 24px;
	width: auto;
	height: auto;
	color: var(--ink);
	font-size: 16px;
	text-decoration: none;
}

/* =========================================================================
   PAGE-SCOPED STYLES
   Each page's <body> carries a `page-<name>` class; the rules below are
   scoped to it so pages that reuse the same class names never collide.
   ========================================================================= */

/* ===== 17. PAGE — Home  (.page-index) ===== */
.page-index img {
	display: block;
	max-width: 100%;
}
/* Dark placeholders on the blue bands — hatched lighter blue (reference). */
/* Full-bleed video band. The height is pinned to the mockup's 3.24:1 hero
   rather than left to the content, so the band never reflows as the copy is
   edited and the clip always crops to a known shape. clamp() keeps that ratio
   in the middle while stopping it collapsing on a phone or running away on an
   ultrawide. The blue underneath shows through before the poster decodes. */
.page-index .hero {
	display: flex;
	position: relative;
	align-items: center;
	background: var(--green-800);
	padding: 0;
	min-height: clamp(420px, 30.9vw, 760px);
	overflow: hidden;
	color: var(--cream);
}
.page-index .hero-media {
	position: absolute;
	inset: 0;
	z-index: 0;
}
.page-index .hero-media .hero-video {
	display: block;
	width: 100%;
	height: 100%;
	/* Centred cover: the band is far wider than 16:9, so the clip is cropped
	   top and bottom and the middle of the frame is what survives. */
	object-fit: cover;
	object-position: center;
}
/* The scrim. Opaque at the left edge where the copy sits, gone by the right so
   the footage reads cleanly, plus a light wash across the whole band to keep
   the video on-brand and stop a bright frame fighting the cream text. */
.page-index .hero::after {
	position: absolute;
	inset: 0;
	z-index: 1;
	background:
		linear-gradient(90deg, var(--green-800) 0%, rgba(23, 94, 165, 0.94) 26%, rgba(23, 94, 165, 0.72) 44%, rgba(23, 94, 165, 0.32) 66%, rgba(23, 94, 165, 0.1) 100%),
		linear-gradient(0deg, rgba(14, 56, 99, 0.28) 0%, rgba(14, 56, 99, 0.08) 55%, rgba(14, 56, 99, 0.22) 100%);
	pointer-events: none;
	content: "";
}
.page-index .hero-inner {
	position: relative;
	z-index: 2;
	/* Flex items are `0 1 auto`, so without this the band's only child shrinks
	   to fit its text and the auto margins centre that narrow box — putting the
	   copy a third of the way in instead of on the page's left grid line. */
	width: 100%;
	padding-top: 40px;
	padding-bottom: 40px;
	max-width: var(--maxw);
}
/* The copy column stops well short of the full width so it never runs into the
   part of the frame the scrim has already released. */
.page-index .hero-inner .lede,
.page-index .hero-inner h1 {
	max-width: 34ch;
}
.page-index .hero h1 {
	margin-bottom: 20px;
	color: var(--white);
	font-weight: 600;
	font-size: clamp(44px, 5.2vw, 64px);
}
/* Hero script accent is styled globally via `.hero h1 .script`. */
.page-index .hero p.lede {
	margin-bottom: 32px;
	/* 638.34 Figma px across, which is 518 here. Set in px rather than ch
	   because the mockup's five lines are what is being matched, and a ch is
	   the width of a "0" in whatever font happens to load. */
	max-width: 518px;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-index .hero-ctas {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 16px;
}
/* Motion here is pure decoration, so anyone who has asked the OS for less of it
   gets a still band. Handled in script.js by pausing the element rather than in
   CSS by hiding it: a hidden <video> takes its poster with it and would leave
   the band empty blue, whereas a paused one keeps its frame on screen. */
.page-index .donate-band {
	background: var(--green-900);
}
.page-index .donate-inner {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 28px;
	/* Keep .wrap's 32px side padding — zeroing it here shoved the band's
	   content flush against the viewport edge. */
	padding: 28px 32px;
}
.page-index .donate-inner h2 {
	color: var(--gold);
	font-weight: 600;
	font-size: 20px;
	text-transform: uppercase;
}
.page-index .donate-inner p {
	color: var(--white);
	font-size: 16px;
	white-space: nowrap;
}
.page-index .amounts {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
	margin-left: auto;
}
/* Amount chips sit on the dark donate band -> light-on-dark pills. */
.page-index .chip {
	transition: background-color 120ms ease;
	cursor: pointer;
	border: 1px solid rgba(255, 255, 255, 0.24);
	border-radius: 999px;
	background: rgba(255, 255, 255, 0.08);
	padding: 8px 16px;
	color: var(--white);
	font-weight: 500;
	font-size: 16px;
	line-height: 1.25;
}
.page-index .chip:hover {
	background: rgba(255, 255, 255, 0.16);
}
/* Donate CTA stays gold (global .btn-green is blue). */
.page-index .donate-inner .btn-green {
	padding: 12px 28px;
	background: var(--gold);
	color: var(--green-900);
}
.page-index .donate-inner .btn-green:hover {
	background: #ecc068; /* darker step of the gold (var(--gold)) */
}
.page-index .section-title {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(32px, 3.4vw, 44px);
}
/* Reference's --ink-soft is black — index secondary copy renders #000. */
.page-index .section-sub {
	max-width: 62ch;
	color: #000;
	font-size: 16px;
}
.page-index .team .section-sub {
	font-size: 20px;
}
.page-index .intro {
	padding: 80px 0 24px;
	text-align: center;
}
.page-index .intro .display {
	margin: 0 auto;
	max-width: 30ch;
	color: var(--green-900);
	font-weight: 500;
	font-size: clamp(24px, 2.6vw, 32px);
	line-height: 1.4;
}
.page-index .intro .display em {
	color: var(--green-700);
	font-style: normal;
}
.page-index .pillars-head {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: flex-end;
	gap: 24px;
	margin-bottom: 40px;
}
.page-index .pillars-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
}
.page-index .pillar {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 32px 28px;
}
.page-index .pillar h3 {
	margin-bottom: 20px;
	color: var(--green-900);
	font-size: 20px;
	line-height: 1.38;
}
.page-index .pillar p {
	color: var(--ink-soft);
	font-size: 16px;
}
/* Pillars & team eyebrows use the muted blue-grey (reference), not the grey label. */
.page-index .pillars-section .section-label,
.page-index .team .section-label {
	color: var(--muted);
}
.page-index .team {
	background: var(--white);
}
.page-index .team-jay {
	display: grid;
	grid-template-columns: 0.9fr 1.1fr;
	align-items: center;
	gap: 40px;
	margin: 44px 0 28px;
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 36px;
}
/* Portrait box matches the Figma mockup's 432x463 frame — the photo is a
   head-and-shoulders portrait, and the old 4/3.4 landscape box cropped it to
   a letterbox. Kept as a ratio so the column can flex. */
.page-index .team-jay .ph {
	border-radius: var(--radius-md);
	aspect-ratio: 432/463;
}
.page-index .team-jay h3 {
	margin-bottom: 0;
	color: var(--green-900);
	font-size: 40px;
	line-height: 1;
	text-transform: uppercase;
}
/* Role line under the name — "MAYORAL CANDIDATE". The homepage drops the
   Caveat "for" accent the other team surfaces use: the Figma home mockup
   states the status outright, so there is no "for <office>" to lead into.
   Uppercasing here rather than in the data keeps the stored status readable
   in wp-admin ("Incumbent Councillor"). */
.page-index .role-line {
	margin-bottom: 16px;
	color: var(--green-900);
	font-weight: 600;
	font-size: 16px;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
/* Beats `.team-jay p` on specificity — the office line is blue in the mockup,
   and the rule below it would otherwise repaint it as body copy. */
.page-index .team-jay .role-line {
	color: var(--green-800);
}
.page-index .team-jay p {
	margin-bottom: 24px;
	max-width: 52ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-index .candidate-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 20px;
}
.page-index .cand {
	transition: transform 0.15s ease;
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 16px;
	text-decoration: none;
}
.page-index .cand:hover {
	transform: translateY(-3px);
}
.page-index .cand .ph {
	margin-bottom: 12px;
	border-radius: var(--radius-sm);
	aspect-ratio: 1/1;
}
.page-index .cand h4 {
	color: var(--green-900);
	font-size: 20px;
	line-height: 1.15;
	font-family: var(--font-display);
	text-transform: uppercase;
}
.page-index .cand span {
	color: var(--green-800);
	font-weight: 600;
	font-size: 12px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.page-index .team-cta {
	margin-top: 36px;
	text-align: center;
}
/* Featured-video band — solid baltic blue with light text (matches reference). */
.page-index .video-section {
	background: var(--green-800);
	color: var(--cream);
}
.page-index .video-section .section-label,
.page-index .video-section .quote {
	color: var(--gold);
}
.page-index .video-section .section-title,
.page-index .video-section .section-sub {
	color: var(--white);
}
.page-index .video-section .btn-text {
	color: var(--gold);
}
.page-index .video-grid {
	display: grid;
	grid-template-columns: 1.15fr 0.85fr;
	align-items: center;
	gap: 48px;
	margin-top: 8px;
}
.page-index .video-frame {
	position: relative;
}
.page-index .video-frame .ph {
	border-color: rgba(247, 241, 227, 0.4);
	border-radius: var(--radius-lg);
	background: repeating-linear-gradient(45deg, rgba(247, 241, 227, 0.07) 0 1px, transparent 1px 14px), repeating-linear-gradient(-45deg, rgba(247, 241, 227, 0.07) 0 1px, transparent 1px 14px), var(--green-700);
	aspect-ratio: 16/9;
	color: rgba(247, 241, 227, 0.75);
}
.page-index .play {
	display: flex;
	position: absolute;
	justify-content: center;
	align-items: center;
	cursor: pointer;
	margin: auto;
	inset: 0;
	box-shadow: 0 8px 30px rgba(22, 48, 31, 0.3);
	border: none;
	border-radius: 50%;
	background: var(--gold);
	width: 76px;
	height: 76px;
	color: var(--green-900);
	font-size: 28px;
	/* The control is an <a> when a video is set, so it can still reach YouTube
	   without JavaScript. Undo the link styling the button never needed. */
	text-decoration: none;
	line-height: 1;
}
/* Once the facade is swapped for the real player, the frame itself becomes the
   16/9 box — the .ph that used to hold that shape has been replaced. */
.page-index .video-frame.is-playing {
	border-radius: var(--radius-lg);
	overflow: hidden;
	aspect-ratio: 16/9;
}
.page-index .video-frame iframe {
	display: block;
	border: 0;
	width: 100%;
	height: 100%;
}
/* No color here — the gold comes from .video-section .quote above; a color
   set at equal specificity in this later rule would override it. */
.page-index .video-side .quote {
	margin: 24px 0;
	border-left: 3px solid var(--gold);
	padding-left: 20px;
	font-weight: 400;
	font-size: 24px;
	line-height: 1.45;
	/* Barlow Condensed in the mockup, like the other pull quotes. */
	font-family: var(--font-label);
}
/* Light news section (matches reference): white ground, dark text, white cards. */
.page-index .news {
	background: var(--white);
	color: var(--ink);
}
.page-index .news .section-label {
	color: var(--gold-dark);
}
.page-index .news .section-title {
	color: var(--green-900);
}
/* "All news" outline button sits on white -> blue outline. */
.page-index .news .btn-outline-light {
	border-color: var(--green-800);
	color: var(--green-800);
}
.page-index .news .btn-outline-light:hover {
	background: rgba(23, 94, 165, 0.08);
}
.page-index .news-head {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: flex-end;
	gap: 24px;
	margin-bottom: 40px;
}
.page-index .news-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
}
.page-index .news-card {
	display: flex;
	flex-direction: column;
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-md);
	background: var(--white);
	overflow: hidden;
}
/* News thumbnails sit on white cards -> light cream hatch (reference). */
.page-index .news-card .ph.dark {
	border-top: none;
	border-right: none;
	border-left: none;
	border-radius: 0;
	background: repeating-linear-gradient(45deg, rgba(29, 61, 44, 0.08) 0 1px, transparent 1px 14px), repeating-linear-gradient(-45deg, rgba(29, 61, 44, 0.08) 0 1px, transparent 1px 14px), #e9e2d0;
	aspect-ratio: 16/9;
	color: #7a755f;
}
.page-index .news-body {
	display: flex;
	flex: 1;
	flex-direction: column;
	gap: 12px;
	padding: 24px;
}
/* Outfit here, not the condensed label face — this is the one small-caps line
   in the mockups set in the body font (15px, tracked 1px). */
.page-index .news-body time,
.page-index .news-body .news-cat {
	color: var(--green-900);
	font-weight: 600;
	font-size: 12px;
	font-family: var(--font-display);
	letter-spacing: 0.07em;
	text-transform: uppercase;
}
.page-index .news-body h3 {
	display: -webkit-box;
	overflow: hidden;
	min-height: calc(1.15em * 3);
	color: #000;
	/* Barlow Condensed SemiBold at 36px in the mockup — 28px here. */
	font-family: var(--font-label);
	font-weight: 600;
	font-size: 28px;
	line-height: 1.15;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 3;
	line-clamp: 3;
}
/* The headline is a link, and `.news-body a` below sets 16px/700 for the
   "Read more" line — which was landing on the headline too and shrinking it
   to body size. Inherit the heading's own type instead. */
.page-index .news-body h3 a {
	color: inherit;
	font-weight: inherit;
	font-size: inherit;
	font-family: inherit;
	line-height: inherit;
	text-decoration: none;
}
.page-index .news-body a {
	margin-top: auto;
	color: var(--green-700);
	font-weight: 700;
	font-size: 16px;
	text-decoration: none;
}
.page-index .social-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 40px;
}
/* Shortcode output standing in for the card grid. A feed plugin brings its own
   layout, so this only matches the grid's top margin and stops wide embeds
   pushing the page sideways. */
.page-index .social-embed {
	margin-top: 40px;
}
.page-index .social-embed img,
.page-index .social-embed iframe,
.page-index .social-embed video {
	max-width: 100%;
}
.page-index .post {
	display: flex;
	flex-direction: column;
	gap: 12px;
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 20px;
}
.page-index .post-head {
	display: flex;
	align-items: center;
	gap: 12px;
}
.page-index .avatar {
	display: flex;
	justify-content: center;
	align-items: center;
	border-radius: 50%;
	background: var(--green-800);
	width: 36px;
	height: 36px;
	color: var(--cream);
	font-weight: 700;
	font-size: 12px;
	font-family: var(--font-display);
}
.page-index .post-head strong {
	display: block;
	color: var(--green-900);
	font-size: 16px;
	line-height: 1.2;
}
.page-index .post-head span {
	color: #000;
	font-size: 12px;
}
.page-index .post .ph {
	aspect-ratio: 4/3;
}
.page-index .post p {
	color: var(--ink-soft);
	font-size: 16px;
}
.page-index .social-cta {
	margin-top: 36px;
	text-align: center;
}
.page-index .foot-sub {
	display: flex;
	margin-top: 16px;
	max-width: 360px;
}
.page-index .anno-tag {
	display: inline-block;
	position: relative;
	transform: translateY(50%);
	z-index: 2;
	border: 1px dashed var(--gold-dark);
	border-radius: 4px;
	background: #fff3d6;
	padding: 4px 12px;
	color: #6b5410;
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
@media (max-width: 1024px) {
	.page-index .video-grid,
	.page-index .team-jay {
		grid-template-columns: 1fr;
	}
	/* Narrow enough that the copy spans the band, so a left-to-right fade has
	   nothing left to fade into — swap it for an even wash that darkens the
	   whole frame instead. */
	.page-index .hero::after {
		background:
			linear-gradient(90deg, var(--green-800) 0%, rgba(23, 94, 165, 0.9) 40%, rgba(23, 94, 165, 0.78) 100%),
			linear-gradient(0deg, rgba(14, 56, 99, 0.35) 0%, rgba(14, 56, 99, 0.15) 100%);
	}
	.page-index .hero-inner .lede,
	.page-index .hero-inner h1 {
		max-width: none;
	}
	.page-index .pillars-grid,
	.page-index .news-grid,
	.page-index .social-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-index .candidate-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-index .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-index .pillars-grid,
	.page-index .news-grid,
	.page-index .social-grid,
	.page-index .candidate-grid,
	.page-index .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-index .nav-cta .btn-outline-light,
	.page-index .btn-subscribe {
		display: none;
	}
	.page-index section {
		padding: 60px 0;
	}
	/* The donate-band tagline is nowrap for the desktop one-line band; on
	   phones it must wrap or it forces the page to scroll sideways. */
	.page-index .donate-inner p {
		white-space: normal;
	}
}

/* ===== 18. PAGE — About  (.page-about) ===== */
.page-about .hero {
	background: var(--green-800);
	padding: 88px 0;
	color: var(--cream);
	text-align: center;
}
.page-about .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 5vw, 60px);
}
.page-about .hero p {
	margin: 0 auto;
	max-width: 60ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-about .section-title {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(32px, 3.4vw, 44px);
}
.page-about .section-sub {
	max-width: 62ch;
	color: #000;
	font-size: 16px;
}
.page-about .origin-grid {
	display: grid;
	/* The story column is the wider of the two: it carries six paragraphs, and
	   the stakes box beside it is a single short read. */
	grid-template-columns: 1.15fr 0.85fr;
	align-items: start;
	gap: 56px;
}
.page-about .origin-copy p {
	margin-bottom: 20px;
	max-width: 58ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-about .origin-copy p strong {
	color: var(--green-900);
}
/* Drop the box level with the story's first paragraph rather than its label,
   so the two columns read as copy-beside-copy instead of a floating card. */
.page-about .origin-aside {
	padding-top: 96px;
}
/* Edge to edge and flush: the band is the separator between the story and the
   mission, so the usual 84px section rhythm would leave it floating in cream. */
.page-about .photo-band {
	padding: 0;
}
.page-about .photo-band img {
	display: block;
	width: 100%;
	/* The band is a letterbox crop, not a photo shown whole — the height is the
	   design's, and the subject stays centred as the viewport narrows. */
	aspect-ratio: 2366/1084;
	object-fit: cover;
	object-position: center;
}
.page-about .stakes {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 24px 28px;
}
.page-about .stakes h3 {
	margin-bottom: 8px;
	color: var(--green-900);
	font-size: 20px;
}
.page-about .stakes p {
	margin: 0;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-about .mission {
	background: var(--white);
}
.page-about .mission-statement {
	margin: 24px 0 48px;
	max-width: 34ch;
	color: var(--green-900);
	font-weight: 500;
	font-size: clamp(24px, 2.4vw, 28px);
	line-height: 1.45;
	font-family: var(--font-display);
}
.page-about .mission-statement em {
	/* The light blue every other emphasis on a cream ground uses. This was the
	   grey reserved for section labels, which read as de-emphasis on the one
	   phrase the sentence is built around. */
	color: var(--green-700);
	font-style: normal;
}
.page-about .commit-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
}
.page-about .commit {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 32px 28px;
}
.page-about .commit .num {
	margin-bottom: 12px;
	color: var(--gold-dark);
	font-style: italic;
	font-weight: 600;
	font-size: 16px;
	font-family: var(--font-display);
}
.page-about .commit h3 {
	margin-bottom: 12px;
	color: var(--green-900);
	font-size: 20px;
}
.page-about .commit p {
	margin-bottom: 16px;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-about .commit ul {
	list-style: none;
}
.page-about .commit li {
	position: relative;
	margin-bottom: 8px;
	padding-left: 28px;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-about .commit li::before {
	position: absolute;
	top: 0;
	left: 0;
	content: '\2713';
	color: var(--gold-dark);
	font-weight: 700;
}
.page-about .diff-grid {
	display: grid;
	grid-template-columns: 0.95fr 1.05fr;
	align-items: center;
	gap: 56px;
}
.page-about .diff-media img {
	display: block;
	border-radius: var(--radius-lg);
	width: 100%;
	aspect-ratio: 5/4;
	object-fit: cover;
}
.page-about .diff-points {
	display: grid;
	gap: 16px;
	margin-top: 28px;
}
/* Gold-edged rather than the black-edged card used elsewhere on this page. The
   three commitments above are the page's assertions and carry the heavy border;
   these are supporting detail, and the lighter edge keeps them from competing. */
.page-about .diff-point {
	display: flex;
	align-items: flex-start;
	gap: 16px;
	border: 1px solid var(--gold);
	border-left: 4px solid var(--gold);
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 20px 24px;
}
.page-about .diff-icon {
	display: flex;
	flex: none;
	justify-content: center;
	align-items: center;
	width: 42px;
	height: 42px;
	color: var(--green-800);
	font-size: 20px;
}
.page-about .diff-icon img {
	display: block;
	width: 42px;
	height: auto;
}
.page-about .diff-point h3 {
	margin-bottom: 4px;
	color: var(--green-900);
	font-size: 16px;
}
.page-about .diff-point p {
	color: var(--ink-soft);
	font-size: 16px;
}
.page-about .oneteam {
	background: var(--green-800);
	color: var(--cream);
}
.page-about .oneteam .section-label {
	color: var(--gold);
}
.page-about .oneteam .section-title {
	color: var(--cream);
}
.page-about .oneteam .section-title em {
	/* Dark band -> gold emphasis. */
	color: var(--gold);
}
.page-about .oneteam .section-sub {
	color: rgba(247, 241, 227, 0.8);
}
.page-about .roles-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 44px;
}
.page-about .role {
	border: 1px solid rgba(247, 241, 227, 0.14);
	border-radius: var(--radius-md);
	background: var(--green-700);
	padding: 28px;
}
.page-about .role .role-tag {
	display: inline-block;
	margin-bottom: 16px;
	border-radius: 999px;
	background: var(--gold);
	padding: 4px 12px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.page-about .role h3 {
	margin-bottom: 12px;
	color: var(--cream);
	font-size: 20px;
}
.page-about .role p {
	color: rgba(247, 241, 227, 0.78);
	font-size: 16px;
}
.page-about .oneteam-note {
	margin-top: 28px;
	color: rgba(247, 241, 227, 0.75);
	font-size: 20px;
	font-family: var(--font-display);
	text-align: center;
}
.page-about .proof-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 44px;
}
.page-about .proof {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	background: var(--white);
	overflow: hidden;
}
.page-about .proof .ph {
	border: none;
	border-bottom: 1px solid var(--line);
	border-radius: 0;
	aspect-ratio: 16/9;
}
.page-about .proof-body {
	display: flex;
	flex: 1;
	flex-direction: column;
	gap: 12px;
	padding: 24px;
}
.page-about .proof-body .tag {
	align-self: flex-start;
	border: 1px solid var(--gold-dark);
	border-radius: 999px;
	padding: 4px 12px;
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.page-about .proof-body h3 {
	color: var(--green-900);
	font-size: 20px;
}
.page-about .proof-body p {
	flex: 1;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-about .gallery {
	background: var(--white);
}
.page-about .gallery-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	grid-auto-rows: 170px;
	gap: 16px;
	margin-top: 44px;
}
/* Shortcode output standing in for the grid. A feed plugin brings its own
   layout, so this only matches the grid's top margin and stops wide embeds
   pushing the page sideways. */
.page-about .gallery-embed {
	margin-top: 44px;
}
.page-about .gallery-embed img,
.page-about .gallery-embed iframe,
.page-about .gallery-embed video {
	max-width: 100%;
}
.page-about .gallery-grid .ph:nth-child(1) {
	grid-row: span 2;
	grid-column: span 2;
}
.page-about .gallery-grid .ph:nth-child(4) {
	grid-row: span 2;
}
.page-about .gallery-grid .ph:nth-child(6) {
	grid-column: span 2;
}
.page-about .cta-band {
	background: var(--green-900);
	padding: 76px 0;
	color: var(--cream);
}
.page-about .cta-inner {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: center;
	gap: 32px;
}
.page-about .cta-inner h2 {
	max-width: 22ch;
	font-size: clamp(28px, 3vw, 40px);
}
.page-about .cta-inner h2 em {
	/* Plain gold emphasis (no script accent — Caveat is hero-only). */
	color: var(--gold);
	font-style: normal;
	font-weight: 700;
}
.page-about .cta-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 16px;
}
@media (max-width: 1024px) {
	.page-about .origin-grid,
	.page-about .diff-grid,
	.page-about .cta-inner {
		grid-template-columns: 1fr;
	}
	.page-about .diff-grid {
		display: block;
	}
	.page-about .diff-media {
		margin-bottom: 32px;
	}
	.page-about .commit-grid,
	.page-about .roles-grid,
	.page-about .proof-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-about .gallery-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-about .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-about .origin-grid {
		display: block;
	}
	/* Stacked, the box follows the story it belongs to, so the top padding that
	   aligned the two columns is just a gap. */
	.page-about .origin-aside {
		margin-top: 32px;
		padding-top: 0;
	}
	/* A 2.18:1 letterbox is a slot at phone width. Let it deepen so the crowd
	   in the photo stays legible. */
	.page-about .photo-band img {
		aspect-ratio: 16/9;
	}
}
@media (max-width: 640px) {
	.page-about .commit-grid,
	.page-about .roles-grid,
	.page-about .proof-grid,
	.page-about .gallery-grid,
	.page-about .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-about .gallery-grid .ph {
		grid-row: span 1 !important;
		grid-column: span 1 !important;
	}
	.page-about .nav-cta .btn-outline-light,
	.page-about .btn-subscribe {
		display: none;
	}
	.page-about section {
		padding: 60px 0;
	}
}

/* ===== 19. PAGE — Platform  (.page-platform) ===== */
.page-platform .hero {
	background: var(--green-800);
	padding: 88px 0 72px;
	color: var(--cream);
	text-align: center;
}
.page-platform .hero h1 {
	margin-right: auto;
	margin-bottom: 20px;
	margin-left: auto;
	max-width: 20ch;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-platform .hero p {
	margin: 0 auto 32px;
	max-width: 58ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-platform .hero-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 16px;
}
.page-platform .index-panel {
	margin: 44px auto 0;
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 28px 32px;
	max-width: var(--maxw-narrow);
	text-align: left;
}
.page-platform .index-panel h2 {
	margin-bottom: 16px;
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 12px;
	font-family: var(--font-body);
	letter-spacing: 0.2em;
	text-transform: uppercase;
}
.page-platform .index-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 0 40px;
}
.page-platform .index-link {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 16px;
	border-bottom: 1px solid var(--line);
	padding: 12px 2px;
	color: var(--green-900);
	font-weight: 600;
	font-size: 16px;
	font-family: var(--font-display);
	text-decoration: none;
}
.page-platform .index-grid .index-link:nth-last-child(1),
.page-platform .index-grid .index-link:nth-last-child(2) {
	border-bottom: none;
}
.page-platform .index-link .arrow {
	transition: transform 0.15s ease;
	color: var(--green-800);
	font-size: 16px;
}
.page-platform .index-link:hover .arrow {
	transform: translateX(4px);
}
.page-platform .index-link:hover {
	color: var(--green-800);
}
.page-platform .policy-media {
	margin: 20px 0;
	max-width: 560px;
}
.page-platform .policy-media .ph {
	aspect-ratio: 16/9;
}
.page-platform .policy-media.social .ph {
	aspect-ratio: 4/3;
	max-width: 400px;
}
.page-platform .policy-media figcaption {
	margin-top: 8px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-platform .related {
	margin-top: 20px;
}
.page-platform .related h4 {
	margin-bottom: 12px;
}
.page-platform .article-link {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 16px;
	margin-bottom: 8px;
	border: 1px solid var(--line);
	border-radius: var(--radius-sm);
	background: var(--cream);
	padding: 12px 20px;
	text-decoration: none;
}
.page-platform .article-link:hover {
	border-color: var(--gold-dark);
	background: var(--white);
}
.page-platform .article-link .al-copy strong {
	display: block;
	color: var(--green-900);
	font-weight: 600;
	font-size: 16px;
	font-family: var(--font-display);
}
.page-platform .article-link .al-copy span {
	color: var(--ink-soft);
	font-size: 12px;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}
.page-platform .article-link .arrow {
	flex: none;
	color: var(--gold-dark);
}
.page-platform .platform {
	padding: 72px 0 40px;
}
.page-platform .plat-intro {
	margin-bottom: 56px;
	text-align: center;
}
.page-platform .plat-intro h2 {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(28px, 3vw, 40px);
}
.page-platform .plat-intro p {
	margin: 0 auto;
	max-width: 64ch;
	color: var(--ink-soft);
}
/* "Full platform coming in September" — two-column listening intro (copy
   left, candid photo right), mirroring the About page's origin story. */
.page-platform .listening-grid {
	display: grid;
	grid-template-columns: 1.05fr 0.95fr;
	align-items: center;
	gap: 56px;
}
.page-platform .listening-copy h2 {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(28px, 3vw, 40px);
}
.page-platform .listening-copy p {
	margin-bottom: 20px;
	max-width: 58ch;
	color: var(--ink-soft);
	font-size: 16px;
}
/* The paragraphs above carry a bottom margin of their own, so the button only
   needs the difference to sit clear of the last one. */
.page-platform .listening-copy .btn {
	margin-top: 8px;
}
.page-platform .listening-media img {
	display: block;
	border-radius: var(--radius-lg);
	width: 100%;
	aspect-ratio: 5/4;
	object-fit: cover;
}
@media (max-width: 1024px) {
	.page-platform .listening-grid {
		display: block;
	}
	.page-platform .listening-media {
		margin-top: 32px;
	}
}
.page-platform .category {
	margin: 0 auto 36px;
	padding: 0 32px;
	max-width: var(--maxw-narrow);
	scroll-margin-top: 150px;
}
.page-platform .cat-card {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	overflow: hidden;
}
.page-platform .cat-head {
	display: flex;
	align-items: flex-start;
	gap: 20px;
	background: var(--green-800);
	padding: 28px 32px;
	color: var(--cream);
}
.page-platform .cat-head h2 {
	margin-bottom: 8px;
	color: var(--cream);
	font-size: 24px;
}
.page-platform .cat-head p {
	max-width: 64ch;
	color: rgba(247, 241, 227, 0.8);
	font-size: 16px;
}
.page-platform details.policy {
	border-top: 1px solid var(--line);
}
.page-platform details.policy:first-of-type {
	border-top: none;
}
.page-platform details.policy summary {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 20px;
	cursor: pointer;
	padding: 20px 32px;
	color: var(--green-900);
	font-weight: 600;
	font-size: 20px;
	font-family: var(--font-display);
	list-style: none;
}
.page-platform details.policy summary::-webkit-details-marker {
	display: none;
}
.page-platform details.policy summary:hover {
	background: var(--white);
}
.page-platform details.policy summary:focus-visible {
	outline: 3px solid var(--gold);
	outline-offset: -3px;
}
.page-platform .plus {
	display: flex;
	flex: none;
	justify-content: center;
	align-items: center;
	transition: transform 0.2s ease;
	border: 2px solid var(--green-800);
	border-radius: 50%;
	width: 32px;
	height: 32px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 20px;
	font-family: var(--font-body);
}
.page-platform details.policy[open] .plus {
	transform: rotate(45deg);
	border-color: var(--gold);
	background: var(--gold);
	color: var(--green-900);
}
.page-platform .policy-body {
	padding: 0 32px 28px;
}
.page-platform .policy-body p.position {
	margin-bottom: 16px;
	max-width: 66ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-platform .policy-body h4 {
	margin-bottom: 12px;
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 12px;
	font-family: var(--font-body);
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.page-platform .policy-body ul {
	margin-bottom: 16px;
	list-style: none;
}
.page-platform .policy-body li {
	position: relative;
	margin-bottom: 8px;
	padding-left: 28px;
	color: var(--ink);
	font-size: 16px;
}
.page-platform .policy-body li::before {
	position: absolute;
	top: 0;
	left: 0;
	content: '\2713';
	color: var(--gold-dark);
	font-weight: 700;
}
.page-platform .source {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	border: 1px dashed var(--gold-dark);
	border-radius: var(--radius-sm);
	background: var(--cream);
	padding: 8px 12px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-platform .source strong {
	color: var(--gold-dark);
}
.page-platform .download {
	margin-top: 48px;
	background: var(--white);
	padding: 64px 0;
}
.page-platform .download-inner {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: center;
	gap: 32px;
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 36px 40px;
}
.page-platform .download-copy {
	display: flex;
	align-items: center;
	gap: 24px;
}
.page-platform .pdf-icon {
	display: flex;
	position: relative;
	flex: none;
	flex-direction: column;
	justify-content: center;
	align-items: center;
	border: 1px solid var(--green-900);
	border-radius: 6px;
	background: var(--green-800);
	width: 64px;
	height: 80px;
	color: var(--gold);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.08em;
}
.page-platform .pdf-icon::after {
	position: absolute;
	top: 0;
	right: 0;
	border-width: 0 16px 16px 0;
	border-style: solid;
	border-color: transparent var(--cream) transparent transparent;
	content: '';
}
.page-platform .download-copy h2 {
	margin-bottom: 8px;
	color: var(--green-900);
	font-size: 24px;
}
.page-platform .download-copy p {
	max-width: 46ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-platform .cta-band {
	background: var(--green-900);
	padding: 80px 0;
	color: var(--cream);
	text-align: center;
}
.page-platform .cta-band h2 {
	margin: 0 auto 16px;
	max-width: 26ch;
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-platform .cta-band h2 em {
	/* Plain gold emphasis (no script accent — Caveat is hero-only). */
	color: var(--gold);
	font-style: normal;
	font-weight: 700;
}
.page-platform .cta-band p {
	margin: 0 auto 32px;
	max-width: 56ch;
	color: rgba(247, 241, 227, 0.85);
}
.page-platform .cta-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 16px;
}
@media (max-width: 1024px) {
	.page-platform .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-platform .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-platform .index-grid {
		grid-template-columns: 1fr;
	}
	.page-platform .index-grid .index-link:nth-last-child(2) {
		border-bottom: 1px solid rgba(247, 241, 227, 0.15);
	}
	.page-platform .index-panel {
		padding: 24px;
	}
	.page-platform .nav-cta .btn-outline-light,
	.page-platform .btn-subscribe {
		display: none;
	}
	.page-platform .cat-head {
		flex-direction: column;
		gap: 8px;
		padding: 24px;
	}
	.page-platform details.policy summary {
		padding: 20px 24px;
		font-size: 16px;
	}
	.page-platform .policy-body {
		padding: 0 24px 24px;
	}
	.page-platform .download-inner {
		padding: 28px;
	}
	.page-platform .download-copy {
		flex-direction: column;
		align-items: flex-start;
	}
}

/* ===== 20. PAGE — The Team  (.page-the-team) ===== */
.page-the-team .hero {
	background: var(--green-800);
	padding: 88px 0;
	color: var(--cream);
	text-align: center;
}
.page-the-team .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 5vw, 60px);
}
.page-the-team .hero p {
	margin: 0 auto;
	max-width: 60ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-the-team .section-title {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(32px, 3.4vw, 44px);
}
.page-the-team .section-sub {
	max-width: 62ch;
	color: #000;
	font-size: 16px;
}
.page-the-team .jay-card {
	display: grid;
	position: relative;
	grid-template-columns: 0.85fr 1.15fr;
	align-items: center;
	gap: 44px;
	margin-top: 44px;
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 40px;
	overflow: hidden;
}
/* 432/463, not the old landscape 4/3.6 — Jay's is a portrait photo, and this
   is the same featured-candidate ratio the homepage and /meet-jay/ use, so one
   export covers all three of his slots. */
.page-the-team .jay-card .ph {
	border-radius: var(--radius-md);
	aspect-ratio: 432/463;
}
.page-the-team .role-tag {
	display: inline-block;
	margin-bottom: 16px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.page-the-team .role-tag.gold {
	color: var(--green-800);
}
.page-the-team .jay-card h2 {
	margin-bottom: 12px;
	color: var(--green-900);
	font-size: 40px;
}
.page-the-team .jay-card .one-liner {
	margin-bottom: 16px;
	color: var(--jade);
	font-size: 20px;
	/* Barlow Condensed in the mockup, like the other pull quotes. */
	font-family: var(--font-label);
}
.page-the-team .jay-card p.bio {
	margin-bottom: 24px;
	max-width: 54ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-the-team .jay-ctas {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 16px;
}
.page-the-team .council {
	background: var(--white);
}
.page-the-team .cand-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 44px;
}
/* Sub-heading within an office — the School Board's two districts. Ruled off
   rather than merely bolder, because it has to read as a divider between two
   grids of identical cards rather than as a caption on the row below it. */
.page-the-team .cand-group {
	margin: 48px 0 0;
	border-bottom: 1px solid var(--line);
	padding-bottom: 16px;
	color: var(--ink-soft);
	font-weight: 700;
	font-size: 20px;
	/* A single-line label, so the mockup sets its leading to the cap height
	   rather than the paragraph default; inheriting 1.6 padded the rule below
	   it by 12px. */
	line-height: 1;
	letter-spacing: 0.072em;
	text-transform: uppercase;
}
/* The first group sits right under the section's own sub-heading. */
.page-the-team .cand-group:first-of-type {
	margin-top: 32px;
}
.page-the-team .cand-group + .cand-grid {
	margin-top: 28px;
}
.page-the-team .cand {
	display: flex;
	flex-direction: column;
	/* Anchors the card-wide hit area below. */
	position: relative;
	transition:
		transform 0.15s ease,
		border-color 0.15s ease;
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 20px;
}
/* The whole card opens the profile, the way the home page cards do.
   These cards cannot simply be wrapped in an <a> like the home page ones:
   they already contain an email address, social accounts and a "View
   profile" link, and nesting anchors is invalid — the mailto would be
   swallowed. So the name's link grows a transparent layer across the card
   instead, and every other target is lifted above it. */
.page-the-team .cand h3 a::after {
	position: absolute;
	inset: 0;
	content: "";
}
.page-the-team .cand-email,
.page-the-team .cand-social a,
.page-the-team .profile-link {
	position: relative;
	z-index: 1;
}
.page-the-team .cand:hover {
	transform: translateY(-4px);
}
.page-the-team .cand .ph {
	margin-bottom: 16px;
	border-radius: var(--radius-sm);
	aspect-ratio: 1/1;
}
.page-the-team .cand h3 {
	margin-bottom: 8px;
	color: var(--green-900);
	font-size: 20px;
	text-transform: uppercase;
}
.page-the-team .cand h3 a {
	color: inherit;
	text-decoration: none;
}
.page-the-team .cand h3 a:hover {
	color: var(--gold-dark);
}
.page-the-team .status {
	align-self: flex-start;
	margin-bottom: 12px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.page-the-team .status.gold {
	color: var(--green-800);
}
.page-the-team .cand-email {
	margin-bottom: 16px;
	color: var(--ink-soft);
	font-size: 12px;
	text-decoration: none;
	word-break: break-all;
}
.page-the-team .cand-email:hover {
	color: var(--gold-dark);
	text-decoration: underline;
}
.page-the-team .cand-foot {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 12px;
	margin-top: auto;
	border-top: 1px solid var(--line);
	padding-top: 16px;
}
.page-the-team .cand-social {
	display: flex;
	gap: 8px;
}
.page-the-team .cand-social a {
	display: flex;
	justify-content: center;
	align-items: center;
	border: 1.5px solid var(--green-800);
	border-radius: 50%;
	width: 30px;
	height: 30px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
	text-decoration: none;
}
.page-the-team .cand-social a:hover {
	background: var(--green-800);
	color: var(--cream);
}
.page-the-team .cand .profile-link {
	/* The mockup's light blue, not the grey used for section labels. */
	color: var(--green-700);
	font-weight: 700;
	font-size: 16px;
	text-decoration: none;
}
.page-the-team .trustee-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 44px;
}
.page-the-team .cta-band {
	background: var(--green-900);
	padding: 80px 0;
	color: var(--cream);
	text-align: center;
}
.page-the-team .cta-band h2 {
	margin: 0 auto 16px;
	max-width: 26ch;
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-the-team .cta-band h2 em {
	/* Plain gold emphasis (no script accent — Caveat is hero-only). */
	color: var(--gold);
	font-style: normal;
	font-weight: 700;
}
.page-the-team .cta-band p {
	margin: 0 auto 32px;
	max-width: 56ch;
	color: rgba(247, 241, 227, 0.85);
}
.page-the-team .cta-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 16px;
}
@media (max-width: 1024px) {
	.page-the-team .jay-card {
		grid-template-columns: 1fr;
	}
	.page-the-team .cand-grid,
	.page-the-team .trustee-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-the-team .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-the-team .cand-grid,
	.page-the-team .trustee-grid,
	.page-the-team .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-the-team .nav-cta .btn-outline-light,
	.page-the-team .btn-subscribe {
		display: none;
	}
	.page-the-team section {
		padding: 60px 0;
	}
	.page-the-team .jay-card {
		padding: 24px;
	}
}

/* ===== 21. PAGE — Meet Jay ===== */
/* Meet Jay now shares the Candidate Profile layout: the page uses the
   .page-candidate-profile-template body class and the styles in section 22,
   which also carries the vision band preserved from the original design. */

/* ===== 22. PAGE — Candidate Profile (template)  (.page-candidate-profile-template) ===== */
.page-candidate-profile-template .hero {
	background: var(--green-800);
	padding: 80px 0;
	color: var(--cream);
}
.page-candidate-profile-template .hero-grid {
	display: grid;
	grid-template-columns: 1.1fr 0.9fr;
	align-items: center;
	column-gap: 56px;
	row-gap: 0;
}
/* Breadcrumb pulled to the top of the hero, its top aligned with the top of
   the portrait; the portrait spans both rows while the name/contact block
   stays vertically centred against it. */
.page-candidate-profile-template .hero .breadcrumbs {
	grid-column: 1;
	grid-row: 1;
	align-self: start;
	margin-bottom: 24px;
}
.page-candidate-profile-template .hero-grid > div:not(.hero-media) {
	grid-column: 1;
	grid-row: 2;
}
.page-candidate-profile-template .hero-media {
	grid-column: 2;
	grid-row: 1 / 3;
	align-self: start;
}
.page-candidate-profile-template .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 5vw, 60px);
}
.page-candidate-profile-template .hero .identity {
	margin-bottom: 20px;
	max-width: 44ch;
	color: var(--gold);
	font-style: italic;
	font-size: 20px;
	line-height: 1.4;
	font-family: var(--font-display);
}
.page-candidate-profile-template .hero .contact-row {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 20px;
	margin-bottom: 28px;
}
.page-candidate-profile-template .hero .contact-row a.email {
	color: rgba(247, 241, 227, 0.85);
	font-size: 16px;
	text-decoration: none;
}
.page-candidate-profile-template .hero .contact-row a.email:hover {
	color: var(--cream);
	text-decoration: underline;
}
.page-candidate-profile-template .hero-social {
	display: flex;
	gap: 8px;
}
.page-candidate-profile-template .hero-social a {
	display: flex;
	justify-content: center;
	align-items: center;
	border: 1.5px solid rgba(247, 241, 227, 0.5);
	border-radius: 50%;
	width: 34px;
	height: 34px;
	color: var(--cream);
	font-weight: 700;
	font-size: 12px;
	text-decoration: none;
}
.page-candidate-profile-template .hero-social a:hover {
	background: rgba(247, 241, 227, 0.12);
}
/* Portrait slots are normalised onto the two ratios the Figma mockup draws —
   432/463 for a featured candidate, 1/1 for everyone in a card — so one
   correctly framed photo per person serves every slot on the site. The photos
   ship pre-cropped to the designer's framing (head size and eye-line are
   normalised across shots taken at different distances, which no automated
   crop rule reproduces), so any slot on a third ratio would have to re-crop an
   already-cropped image.

   This rule is the featured-candidate case and covers /meet-jay/; the eight
   council and trustee profiles override it to 1/1 below. The two share the
   page-candidate-profile-template body class, so `single-ls_candidate` — which
   WordPress adds only on a real ls_candidate post — is what separates them. */
.page-candidate-profile-template .hero-media .ph.dark {
	border-radius: var(--radius-lg);
	aspect-ratio: 432/463;
}
body.single-ls_candidate .hero-media .ph.dark {
	aspect-ratio: 1/1;
}
.page-candidate-profile-template .section-title {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-candidate-profile-template .section-sub {
	max-width: 62ch;
	color: #000;
	font-size: 16px;
}
.page-candidate-profile-template .intro-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	align-items: center;
	gap: 56px;
}
.page-candidate-profile-template .intro-copy p {
	margin-bottom: 20px;
	max-width: 56ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-candidate-profile-template .video-frame {
	position: relative;
}
.page-candidate-profile-template .video-frame .ph {
	border-radius: var(--radius-lg);
	aspect-ratio: 16/9;
}
.page-candidate-profile-template .play {
	display: flex;
	position: absolute;
	justify-content: center;
	align-items: center;
	cursor: pointer;
	margin: auto;
	inset: 0;
	box-shadow: 0 8px 30px rgba(22, 48, 31, 0.3);
	border: none;
	border-radius: 50%;
	background: var(--gold);
	width: 70px;
	height: 70px;
	color: var(--green-900);
	font-size: 24px;
}
.page-candidate-profile-template .video-caption {
	margin-top: 12px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-candidate-profile-template .quals {
	background: var(--white);
}
.page-candidate-profile-template .quals-grid {
	display: grid;
	grid-template-columns: 0.95fr 1.05fr;
	align-items: center;
	gap: 56px;
}
.page-candidate-profile-template .quals-media .ph {
	border-radius: var(--radius-lg);
	aspect-ratio: 4/3.4;
}
.page-candidate-profile-template .qual-list {
	margin-top: 28px;
	list-style: none;
}
.page-candidate-profile-template .qual-list li {
	margin-bottom: 16px;
	border: 1px solid var(--line);
	border-left: 4px solid var(--gold);
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 20px 24px;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-candidate-profile-template .qual-list li strong {
	display: block;
	margin-bottom: 4px;
	color: var(--green-900);
	font-size: 16px;
	font-family: var(--font-display);
}
/* Vision band — used on the Meet Jay page only. */
.page-candidate-profile-template .vision {
	background: var(--green-800);
	color: var(--cream);
}
.page-candidate-profile-template .vision .section-label {
	color: var(--gold);
}
.page-candidate-profile-template .vision .section-title {
	color: var(--cream);
}
.page-candidate-profile-template .vision .section-title em {
	/* Dark band -> gold emphasis. */
	color: var(--gold);
}
.page-candidate-profile-template .vision .section-sub {
	color: rgba(247, 241, 227, 0.8);
}
.page-candidate-profile-template .vision-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 44px;
}
.page-candidate-profile-template .vision-card {
	border: 1px solid rgba(247, 241, 227, 0.14);
	border-radius: var(--radius-md);
	background: var(--green-700);
	padding: 28px;
}
.page-candidate-profile-template .vision-card .num {
	margin-bottom: 12px;
	color: var(--gold);
	font-style: italic;
	font-weight: 600;
	font-size: 16px;
	font-family: var(--font-display);
}
.page-candidate-profile-template .vision-card h3 {
	margin-bottom: 12px;
	color: var(--cream);
	font-size: 20px;
}
.page-candidate-profile-template .vision-card p {
	color: rgba(247, 241, 227, 0.78);
	font-size: 16px;
}
.page-candidate-profile-template .videos {
	background: var(--white);
}
.page-candidate-profile-template .video-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 44px;
}
.page-candidate-profile-template .vcard {
	position: relative;
}
.page-candidate-profile-template .vcard .ph {
	border-radius: var(--radius-md);
	aspect-ratio: 9/12;
}
.page-candidate-profile-template .vcard .play {
	display: flex;
	position: absolute;
	justify-content: center;
	align-items: center;
	cursor: pointer;
	margin: auto;
	inset: 0;
	box-shadow: 0 8px 30px rgba(22, 48, 31, 0.3);
	border: none;
	border-radius: 50%;
	background: var(--gold);
	width: 58px;
	height: 58px;
	color: var(--green-900);
	font-size: 20px;
}
.page-candidate-profile-template .vcard-meta {
	margin-top: 16px;
	text-align: center;
}
.page-candidate-profile-template .vcard-meta strong {
	display: block;
	color: var(--green-900);
	font-size: 20px;
	font-family: var(--font-display);
}
.page-candidate-profile-template .vcard-meta span {
	color: var(--ink-soft);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}
.page-candidate-profile-template .videos-cta {
	margin-top: 40px;
	text-align: center;
}
.page-candidate-profile-template .faqs {
	background: var(--white);
}
.page-candidate-profile-template .faq-card {
	margin: 44px auto 0;
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	max-width: var(--maxw-narrow);
	overflow: hidden;
}
.page-candidate-profile-template details.faq {
	border-top: 1px solid var(--line);
}
.page-candidate-profile-template details.faq:first-of-type {
	border-top: none;
}
.page-candidate-profile-template details.faq summary {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 20px;
	cursor: pointer;
	padding: 24px 32px;
	color: var(--green-900);
	font-weight: 600;
	font-size: 20px;
	font-family: var(--font-display);
	list-style: none;
}
.page-candidate-profile-template details.faq summary::-webkit-details-marker {
	display: none;
}
.page-candidate-profile-template details.faq summary:hover {
	background: var(--white);
}
.page-candidate-profile-template details.faq summary:focus-visible {
	outline: 3px solid var(--gold);
	outline-offset: -3px;
}
.page-candidate-profile-template .plus {
	display: flex;
	flex: none;
	justify-content: center;
	align-items: center;
	transition: transform 0.2s ease;
	border: 2px solid var(--green-800);
	border-radius: 50%;
	width: 32px;
	height: 32px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 20px;
	font-family: var(--font-body);
}
.page-candidate-profile-template details.faq[open] .plus {
	transform: rotate(45deg);
	border-color: var(--gold);
	background: var(--gold);
	color: var(--green-900);
}
.page-candidate-profile-template .faq-body {
	padding: 0 32px 28px;
}
.page-candidate-profile-template .faq-body p {
	margin-bottom: 16px;
	max-width: 68ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-candidate-profile-template .faq-body .ph {
	margin-top: 8px;
	aspect-ratio: 16/7;
	max-width: 480px;
}
.page-candidate-profile-template .gallery-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	grid-auto-rows: 170px;
	gap: 16px;
	margin-top: 44px;
}
.page-candidate-profile-template .gallery-grid .ph:nth-child(1) {
	grid-row: span 2;
	grid-column: span 2;
}
.page-candidate-profile-template .gallery-grid .ph:nth-child(4) {
	grid-row: span 2;
}
.page-candidate-profile-template .gallery-grid .ph:nth-child(6) {
	grid-column: span 2;
}
.page-candidate-profile-template .endorse {
	background: var(--green-800);
	color: var(--cream);
	text-align: center;
}
.page-candidate-profile-template .endorse blockquote {
	margin: 0 auto 28px;
	max-width: 32ch;
	font-style: italic;
	font-weight: 500;
	font-size: clamp(24px, 2.8vw, 32px);
	line-height: 1.45;
	font-family: var(--font-display);
}
.page-candidate-profile-template .endorse blockquote em {
	color: var(--gold);
}
.page-candidate-profile-template .endorse-attrib {
	display: flex;
	justify-content: center;
	align-items: center;
	gap: 16px;
}
.page-candidate-profile-template .endorse-attrib .ph.dark {
	flex: none;
	border-radius: 50%;
	padding: 4px;
	width: 56px;
	height: 56px;
	font-size: 8px;
}
.page-candidate-profile-template .endorse-attrib strong {
	display: block;
	color: var(--cream);
	font-size: 16px;
	font-family: var(--font-display);
}
.page-candidate-profile-template .endorse-attrib span {
	color: rgba(247, 241, 227, 0.85);
	font-size: 12px;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}
.page-candidate-profile-template .endorse .btn {
	margin-top: 32px;
}
.page-candidate-profile-template .donate-cta {
	background: var(--gold);
	padding: 72px 0;
	text-align: center;
}
.page-candidate-profile-template .donate-cta h2 {
	margin: 0 auto 16px;
	max-width: 24ch;
	color: var(--green-900);
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-candidate-profile-template .donate-cta p {
	margin: 0 auto 32px;
	max-width: 52ch;
	color: rgba(14, 42, 71, 0.72);
	font-size: 16px;
}
.page-candidate-profile-template .donate-cta .amounts {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 12px;
	margin-bottom: 28px;
}
.page-candidate-profile-template .chip {
	cursor: pointer;
	border: 1.5px solid rgba(28, 42, 33, 0.25);
	border-radius: 999px;
	background: rgba(247, 241, 227, 0.55);
	padding: 8px 20px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 16px;
}
.page-candidate-profile-template .chip:hover {
	background: var(--cream);
}
.page-candidate-profile-template .slider-head {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: flex-end;
	gap: 24px;
	margin-bottom: 36px;
}
.page-candidate-profile-template .slider-nav {
	display: flex;
	gap: 12px;
}
.page-candidate-profile-template .slider-nav button {
	cursor: pointer;
	border: 2px solid var(--green-800);
	border-radius: 50%;
	background: transparent;
	width: 44px;
	height: 44px;
	color: var(--green-800);
	font-size: 20px;
}
.page-candidate-profile-template .slider-nav button:hover {
	background: var(--green-800);
	color: var(--cream);
}
.page-candidate-profile-template .slider-nav button:focus-visible {
	outline: 3px solid var(--gold);
	outline-offset: 2px;
}
.page-candidate-profile-template .cand-slider {
	display: flex;
	gap: 20px;
	padding-bottom: 12px;
	overflow-x: auto;
	scroll-behavior: smooth;
	scroll-snap-type: x mandatory;
}
.page-candidate-profile-template .cand-slider::-webkit-scrollbar {
	height: 8px;
}
.page-candidate-profile-template .cand-slider::-webkit-scrollbar-thumb {
	border-radius: 999px;
	background: var(--line);
}
.page-candidate-profile-template .slide-card {
	display: flex;
	flex: 0 0 260px;
	flex-direction: column;
	transition: transform 0.15s ease;
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 20px;
	scroll-snap-align: start;
}
.page-candidate-profile-template .slide-card:hover {
	transform: translateY(-3px);
}
.page-candidate-profile-template .slide-card .ph {
	margin-bottom: 16px;
	border-radius: var(--radius-sm);
	aspect-ratio: 1/1;
}
.page-candidate-profile-template .slide-card h3 {
	margin-bottom: 8px;
	color: var(--green-900);
	font-size: 20px;
}
.page-candidate-profile-template .slide-card h3 a {
	color: inherit;
	text-decoration: none;
}
.page-candidate-profile-template .slide-card h3 a:hover {
	color: var(--gold-dark);
}
.page-candidate-profile-template .slide-status {
	align-self: flex-start;
	margin-bottom: 12px;
	border: 1px solid var(--green-800); /* blue outline on the plain (non-gold) pills */
	border-radius: 999px;
	background: var(--white);
	padding: 5px 12px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
	line-height: 1.25; /* tighter when the label wraps to two lines */
	letter-spacing: 0.12em;
	text-align: center;
	text-transform: uppercase;
}
.page-candidate-profile-template .slide-status.gold {
	border-color: var(--gold);
	background: var(--gold);
	color: var(--green-900);
}
.page-candidate-profile-template .slide-card .profile-link {
	margin-top: auto;
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 12px;
	text-decoration: none;
}
.page-candidate-profile-template .cta-band {
	background: var(--green-900);
	padding: 80px 0;
	color: var(--cream);
	text-align: center;
}
.page-candidate-profile-template .cta-band h2 {
	margin: 0 auto 16px;
	max-width: 26ch;
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-candidate-profile-template .cta-band h2 em {
	/* Plain gold emphasis (no script accent — Caveat is hero-only). */
	color: var(--gold);
	font-style: normal;
	font-weight: 700;
}
.page-candidate-profile-template .cta-band p {
	margin: 0 auto 32px;
	max-width: 56ch;
	color: rgba(247, 241, 227, 0.85);
}
.page-candidate-profile-template .cta-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 16px;
}
@media (max-width: 1024px) {
	.page-candidate-profile-template .hero-grid,
	.page-candidate-profile-template .intro-grid,
	.page-candidate-profile-template .quals-grid {
		grid-template-columns: 1fr;
	}
	/* Single column: undo the two-row hero placement so breadcrumb, text
	   and portrait stack in source order. */
	.page-candidate-profile-template .hero .breadcrumbs,
	.page-candidate-profile-template .hero-grid > div:not(.hero-media),
	.page-candidate-profile-template .hero-media {
		grid-column: auto;
		grid-row: auto;
	}
	.page-candidate-profile-template .vision-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-candidate-profile-template .video-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-candidate-profile-template .gallery-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-candidate-profile-template .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-candidate-profile-template .vision-grid,
	.page-candidate-profile-template .video-grid,
	.page-candidate-profile-template .gallery-grid,
	.page-candidate-profile-template .foot-grid {
		grid-template-columns: 1fr;
	}
	/* Long CTA label ("See all endorsements…") is wider than a phone
	   screen as a nowrap pill — let it wrap. */
	.page-candidate-profile-template .videos-cta .btn {
		white-space: normal;
	}
	.page-candidate-profile-template .gallery-grid .ph {
		grid-row: span 1 !important;
		grid-column: span 1 !important;
	}
	.page-candidate-profile-template .nav-cta .btn-outline-light,
	.page-candidate-profile-template .btn-subscribe {
		display: none;
	}
	.page-candidate-profile-template section {
		padding: 60px 0;
	}
	.page-candidate-profile-template details.faq summary {
		padding: 20px 24px;
		font-size: 16px;
	}
	.page-candidate-profile-template .faq-body {
		padding: 0 24px 24px;
	}
}

/* ===== 23. PAGE — Endorsements  (.page-endorsements) ===== */
.page-endorsements .hero {
	background: var(--green-800);
	padding: 88px 0;
	color: var(--cream);
	text-align: center;
}
.page-endorsements .hero h1 {
	margin-right: auto;
	margin-bottom: 20px;
	margin-left: auto;
	max-width: 22ch;
	font-size: clamp(40px, 4.8vw, 60px);
}
.page-endorsements .hero p {
	margin: 0 auto;
	max-width: 56ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-endorsements .section-title {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-endorsements .section-sub {
	max-width: 62ch;
	color: #000;
	font-size: 16px;
}
.page-endorsements .filter-bar {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
	margin: 36px 0 40px;
}
.page-endorsements .filter {
	cursor: pointer;
	border: 1.5px solid var(--green-800);
	border-radius: 999px;
	background: transparent;
	padding: 8px 20px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
}
.page-endorsements .filter:hover {
	background: var(--white);
}
.page-endorsements .filter.active {
	background: var(--green-800);
	color: var(--cream);
}
.page-endorsements .filter:focus-visible {
	outline: 3px solid var(--gold);
	outline-offset: 2px;
}
.page-endorsements .endorse-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
}
.page-endorsements .ecard {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	background: var(--white);
	overflow: hidden;
	text-align: center;
}
.page-endorsements .ecard-top {
	padding: 20px 20px 0;
}
.page-endorsements .ecard-role {
	margin-bottom: 8px;
	color: var(--ink-soft);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.16em;
	text-transform: uppercase;
}
.page-endorsements .ecard-name {
	color: var(--green-900);
	font-weight: 600;
	font-size: 24px;
	font-family: var(--font-display);
}
.page-endorsements .ecard .ph {
	margin-top: 16px;
	border-right: none;
	border-left: none;
	border-radius: 0;
	aspect-ratio: 1/0.85;
}
.page-endorsements .ecard-endorses {
	flex: 1;
	background: var(--green-800);
	padding: 20px 20px;
	color: var(--cream);
}
.page-endorsements .ecard-endorses .dashes {
	display: block;
	margin-bottom: 8px;
	color: var(--gold);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.24em;
	text-transform: uppercase;
}
.page-endorsements .ecard-endorses strong {
	display: block;
	font-weight: 600;
	font-size: 20px;
	line-height: 1.25;
	font-family: var(--font-display);
}
.page-endorsements .ecard-endorses span.for {
	color: var(--gold);
	font-style: italic;
	font-size: 16px;
	font-family: var(--font-display);
}
.page-endorsements .ecard-date {
	background: var(--gold);
	padding: 8px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.page-endorsements .videos {
	background: var(--white);
}
.page-endorsements .video-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 44px;
}
.page-endorsements .vcard {
	position: relative;
}
.page-endorsements .vcard .ph {
	border-radius: var(--radius-md);
	aspect-ratio: 9/12;
}
.page-endorsements .vcard .play {
	display: flex;
	position: absolute;
	justify-content: center;
	align-items: center;
	cursor: pointer;
	margin: auto;
	inset: 0;
	box-shadow: 0 8px 30px rgba(22, 48, 31, 0.3);
	border: none;
	border-radius: 50%;
	background: var(--gold);
	width: 58px;
	height: 58px;
	color: var(--green-900);
	font-size: 20px;
}
.page-endorsements .vcard-meta {
	margin-top: 16px;
	text-align: center;
}
.page-endorsements .vcard-meta strong {
	display: block;
	color: var(--green-900);
	font-size: 20px;
	font-family: var(--font-display);
}
.page-endorsements .vcard-meta span {
	color: var(--ink-soft);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}
.page-endorsements .ecard {
	position: relative;
	cursor: pointer;
}
.page-endorsements .ecard:focus-visible {
	outline: 3px solid var(--gold);
	outline-offset: 2px;
}
.page-endorsements .ecard-hover {
	display: flex;
	position: absolute;
	flex-direction: column;
	justify-content: center;
	align-items: center;
	gap: 12px;
	opacity: 0;
	z-index: 2;
	transition: opacity 0.18s ease;
	inset: 0;
	border-radius: var(--radius-md);
	background: rgba(23, 94, 165, 0.92); /* brand baltic blue */
	padding: 24px;
	color: var(--cream);
	text-align: center;
}
.page-endorsements .ecard:hover .ecard-hover,
.page-endorsements .ecard:focus-visible .ecard-hover {
	opacity: 1;
}
.page-endorsements .ecard-hover .hover-icon {
	display: flex;
	justify-content: center;
	align-items: center;
	border-radius: 50%;
	background: var(--gold);
	width: 58px;
	height: 58px;
	color: var(--green-900);
	font-size: 20px;
}
.page-endorsements .ecard-hover strong {
	font-weight: 600;
	font-size: 20px;
	font-family: var(--font-display);
}
.page-endorsements .ecard-hover span {
	color: rgba(247, 241, 227, 0.75);
	font-size: 12px;
}
.page-endorsements .modal-overlay {
	display: none;
	position: fixed;
	justify-content: center;
	align-items: center;
	z-index: 100;
	inset: 0;
	background: rgba(22, 48, 31, 0.7);
	padding: 24px;
}
.page-endorsements .modal-overlay.open {
	display: flex;
}
.page-endorsements .modal {
	position: relative;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 36px;
	width: 100%;
	max-width: 640px;
	max-height: 88vh;
	overflow: auto;
}
.page-endorsements .modal-close {
	position: absolute;
	top: 16px;
	right: 16px;
	cursor: pointer;
	border: 2px solid var(--green-800);
	border-radius: 50%;
	background: transparent;
	width: 38px;
	height: 38px;
	color: var(--green-800);
	font-size: 16px;
}
.page-endorsements .modal-close:hover {
	background: var(--green-800);
	color: var(--cream);
}
.page-endorsements .modal .ph {
	margin-bottom: 20px;
	aspect-ratio: 16/9;
}
.page-endorsements .modal blockquote {
	margin-bottom: 20px;
	color: var(--green-900);
	font-style: italic;
	font-size: 20px;
	line-height: 1.5;
	font-family: var(--font-display);
}
.page-endorsements .modal .m-attrib strong {
	display: block;
	color: var(--green-900);
	font-size: 16px;
	font-family: var(--font-display);
}
.page-endorsements .modal .m-attrib span {
	color: var(--ink-soft);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}
.page-endorsements .videos-cta {
	margin-top: 40px;
	text-align: center;
}
.page-endorsements .addname {
	background: var(--green-800);
	color: var(--cream);
}
.page-endorsements .addname-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	align-items: center;
	gap: 56px;
}
.page-endorsements .addname .section-label {
	color: var(--gold);
}
.page-endorsements .addname .section-title {
	color: var(--cream);
}
.page-endorsements .addname .section-title em {
	/* Dark band -> gold emphasis. */
	color: var(--gold);
}
.page-endorsements .addname p.lede {
	margin-bottom: 24px;
	max-width: 48ch;
	color: rgba(247, 241, 227, 0.85);
	font-size: 16px;
}
.page-endorsements .addname ul {
	margin-bottom: 28px;
	list-style: none;
}
.page-endorsements .addname li {
	position: relative;
	margin-bottom: 12px;
	padding-left: 28px;
	color: rgba(247, 241, 227, 0.85);
	font-size: 16px;
}
.page-endorsements .addname li::before {
	position: absolute;
	left: 0;
	content: '\2713';
	color: var(--gold);
	font-weight: 700;
}
.page-endorsements .form-card {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 36px;
	color: var(--ink);
}
.page-endorsements .form-card h3 {
	margin-bottom: 8px;
	color: var(--green-900);
	font-size: 24px;
}
.page-endorsements .form-card .form-note {
	margin-bottom: 24px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-endorsements .field {
	margin-bottom: 16px;
}
.page-endorsements .field label {
	display: block;
	margin-bottom: 8px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 12px;
}
.page-endorsements .field label .req {
	color: var(--gold-dark);
}
.page-endorsements .field input,
.page-endorsements .field textarea,
.page-endorsements .field select {
	border: 1px solid var(--line);
	border-radius: var(--radius-sm);
	background: var(--white);
	padding: 12px 16px;
	width: 100%;
	color: var(--ink);
	font-size: 16px;
	font-family: var(--font-body);
}
.page-endorsements .field textarea {
	min-height: 90px;
	resize: vertical;
}
.page-endorsements .field input:focus,
.page-endorsements .field textarea:focus,
.page-endorsements .field select:focus {
	outline: 3px solid var(--gold);
	outline-offset: 1px;
	border-color: var(--gold-dark);
}
.page-endorsements .field-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 16px;
}
.page-endorsements .consent {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	margin: 20px 0 24px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-endorsements .consent input {
	flex: none;
	margin-top: 3px;
}
.page-endorsements .form-card .btn {
	justify-content: center;
	width: 100%;
}
@media (max-width: 1024px) {
	.page-endorsements .endorse-grid,
	.page-endorsements .video-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-endorsements .addname-grid {
		grid-template-columns: 1fr;
	}
	.page-endorsements .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-endorsements .endorse-grid,
	.page-endorsements .video-grid,
	.page-endorsements .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-endorsements .nav-cta .btn-outline-light,
	.page-endorsements .btn-subscribe {
		display: none;
	}
	/* Long CTA label ("See all video endorsements…") is wider than a phone
	   screen as a nowrap pill — let it wrap. */
	.page-endorsements .videos-cta .btn {
		white-space: normal;
	}
	.page-endorsements section {
		padding: 60px 0;
	}
	.page-endorsements .field-row {
		grid-template-columns: 1fr;
	}
	.page-endorsements .form-card {
		padding: 24px;
	}
}

/* ===== 24. PAGE — Resources  (.page-resources) ===== */
.page-resources .hero {
	background: var(--green-800);
	padding: 88px 0;
	color: var(--cream);
	text-align: center;
}
.page-resources .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-resources .hero p {
	margin: 0 auto;
	max-width: 54ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-resources .resources {
	padding: 84px 0;
}
.page-resources .res-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 28px;
}
.page-resources .res-card {
	display: flex;
	flex-direction: column;
	transition:
		transform 0.15s ease,
		border-color 0.15s ease;
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	overflow: hidden;
	text-decoration: none;
}
.page-resources .res-card:hover {
	transform: translateY(-4px);
}
.page-resources .res-card .ph {
	border-top: none;
	border-right: none;
	border-left: none;
	border-radius: 0;
	aspect-ratio: 16/8;
}
.page-resources .res-card .ph.dark {
	border-top: none;
	border-right: none;
	border-left: none;
}
.page-resources .res-body {
	display: flex;
	flex: 1;
	flex-direction: column;
	padding: 32px;
}
.page-resources .res-tag {
	align-self: flex-start;
	margin-bottom: 16px;
	border-radius: 999px;
	background: var(--green-800);
	padding: 4px 12px;
	color: var(--white);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.page-resources .res-tag.gold {
	background: var(--gold);
	color: var(--green-900);
}
.page-resources .res-body h2 {
	margin-bottom: 12px;
	color: var(--green-900);
	font-size: 28px;
}
.page-resources .res-body p {
	flex: 1;
	margin-bottom: 24px;
	max-width: 52ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-resources .res-link {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 16px;
}
.page-resources .cta-band {
	background: var(--green-900);
	padding: 76px 0;
	color: var(--cream);
	text-align: center;
}
.page-resources .cta-band h2 {
	margin: 0 auto 16px;
	max-width: 26ch;
	font-size: clamp(28px, 3vw, 40px);
}
.page-resources .cta-band h2 em {
	/* Plain gold emphasis (no script accent — Caveat is hero-only). */
	color: var(--gold);
	font-style: normal;
	font-weight: 700;
}
.page-resources .cta-band p {
	margin: 0 auto 32px;
	max-width: 52ch;
	color: rgba(247, 241, 227, 0.85);
}
.page-resources .cta-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 16px;
}
@media (max-width: 1024px) {
	.page-resources .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-resources .res-grid,
	.page-resources .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-resources .nav-cta .btn-outline-light,
	.page-resources .btn-subscribe {
		display: none;
	}
	.page-resources .resources {
		padding: 60px 0;
	}
	.page-resources .res-body {
		padding: 24px;
	}
}

/* ===== 25. PAGE — Supporter Toolkit  (.page-supporter-toolkit) ===== */
.page-supporter-toolkit .hero {
	background: var(--green-800);
	padding: 80px 0 64px;
	color: var(--cream);
	text-align: center;
}
.page-supporter-toolkit .hero h1 {
	margin-right: auto;
	margin-bottom: 20px;
	margin-left: auto;
	max-width: 22ch;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-supporter-toolkit .hero p {
	margin: 0 auto;
	max-width: 56ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-supporter-toolkit .index-panel {
	margin: 44px auto 0;
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 28px 32px;
	max-width: 880px;
	text-align: left;
}
.page-supporter-toolkit .index-panel h2 {
	margin-bottom: 16px;
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 12px;
	font-family: var(--font-body);
	letter-spacing: 0.2em;
	text-transform: uppercase;
}
.page-supporter-toolkit .index-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 0 40px;
}
.page-supporter-toolkit .index-link {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 16px;
	border-bottom: 1px solid var(--line);
	padding: 12px 2px;
	color: var(--green-900);
	font-weight: 600;
	font-size: 16px;
	font-family: var(--font-display);
	text-decoration: none;
}
.page-supporter-toolkit .index-grid .index-link:nth-last-child(1),
.page-supporter-toolkit .index-grid .index-link:nth-last-child(2) {
	border-bottom: none;
}
.page-supporter-toolkit .index-link .arrow {
	transition: transform 0.15s ease;
	color: var(--green-800);
	font-size: 16px;
}
.page-supporter-toolkit .index-link:hover .arrow {
	transform: translateX(4px);
}
.page-supporter-toolkit .index-link:hover {
	color: var(--green-800);
}
.page-supporter-toolkit .toolkit {
	padding: 64px 0;
}
.page-supporter-toolkit .tool-block {
	display: grid;
	grid-template-columns: 0.9fr 1.1fr;
	align-items: center;
	gap: 44px;
	margin: 0 auto 28px;
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 40px;
	max-width: var(--maxw);
	scroll-margin-top: 110px;
}
.page-supporter-toolkit .tool-block.flip {
	grid-template-columns: 1.1fr 0.9fr;
}
.page-supporter-toolkit .tool-block.flip .tool-copy {
	order: 2;
}
.page-supporter-toolkit .tool-block.flip .tool-preview {
	order: 1;
}
.page-supporter-toolkit .tool-copy h2 {
	margin-bottom: 12px;
	color: var(--green-900);
	font-size: 28px;
}
.page-supporter-toolkit .tool-copy p {
	margin-bottom: 24px;
	max-width: 44ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-supporter-toolkit .tool-preview .ph {
	border-radius: var(--radius-md);
	aspect-ratio: 16/10;
}
.page-supporter-toolkit .spec-list {
	margin: -8px 0 24px;
	list-style: none;
}
.page-supporter-toolkit .spec-list li {
	position: relative;
	margin-bottom: 8px;
	padding-left: 24px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-supporter-toolkit .spec-list li::before {
	position: absolute;
	left: 0;
	content: '\2713';
	color: var(--gold-dark);
	font-weight: 700;
}
.page-supporter-toolkit .frame-demo {
	display: flex;
	justify-content: center;
	align-items: center;
	gap: 24px;
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 20px;
	aspect-ratio: 16/10;
}
.page-supporter-toolkit .avatar-ph {
	flex: none;
	border-radius: 50%;
	padding: 8px;
	width: 110px;
	height: 110px;
	font-size: 8px;
}
.page-supporter-toolkit .frame-demo .arrow-big {
	color: var(--green-800);
	font-size: 28px;
}
.page-supporter-toolkit .avatar-framed {
	position: relative;
	flex: none;
	width: 110px;
	height: 110px;
}
.page-supporter-toolkit .avatar-framed .avatar-ph {
	position: absolute;
	inset: 0;
	width: 100%;
	height: 100%;
}
.page-supporter-toolkit .avatar-framed::after {
	position: absolute;
	bottom: -6px;
	left: 50%;
	transform: translateX(-50%) rotate(-4deg);
	box-shadow: 0 2px 8px rgba(22, 48, 31, 0.25);
	border-radius: 999px;
	background: var(--gold);
	padding: 4px 12px;
	content: "I'M WITH JAY";
	color: var(--green-900);
	font-weight: 800;
	font-size: 8px;
	letter-spacing: 0.1em;
	white-space: nowrap;
}
.page-supporter-toolkit .cta-band {
	background: var(--green-900);
	padding: 76px 0;
	color: var(--cream);
}
.page-supporter-toolkit .cta-inner {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: center;
	gap: 32px;
}
.page-supporter-toolkit .cta-inner h2 {
	max-width: 24ch;
	font-size: clamp(28px, 3vw, 36px);
}
.page-supporter-toolkit .cta-inner h2 em {
	/* Plain gold emphasis (no script accent — Caveat is hero-only). */
	color: var(--gold);
	font-style: normal;
	font-weight: 700;
}
@media (max-width: 1024px) {
	.page-supporter-toolkit .tool-block,
	.page-supporter-toolkit .tool-block.flip {
		grid-template-columns: 1fr;
	}
	.page-supporter-toolkit .tool-block.flip .tool-copy {
		order: 1;
	}
	.page-supporter-toolkit .tool-block.flip .tool-preview {
		order: 2;
	}
	.page-supporter-toolkit .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-supporter-toolkit .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-supporter-toolkit .index-grid {
		grid-template-columns: 1fr;
	}
	.page-supporter-toolkit .index-grid .index-link:nth-last-child(2) {
		border-bottom: 1px solid rgba(247, 241, 227, 0.15);
	}
	.page-supporter-toolkit .index-panel {
		padding: 24px;
	}
	.page-supporter-toolkit .nav-cta .btn-outline-light,
	.page-supporter-toolkit .btn-subscribe {
		display: none;
	}
	.page-supporter-toolkit .tool-block {
		padding: 24px;
	}
	.page-supporter-toolkit .anchor-inner {
		gap: 20px;
	}
}

/* ===== 26. PAGE — FAQs  (.page-faqs) ===== */
.page-faqs .hero {
	background: var(--green-800);
	padding: 88px 0 72px;
	color: var(--cream);
	text-align: center;
}
.page-faqs .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-faqs .hero p {
	margin: 0 auto;
	max-width: 54ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-faqs .index-panel {
	margin: 44px auto 0;
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 28px 32px;
	max-width: 760px;
	text-align: left;
}
.page-faqs .index-panel h2 {
	margin-bottom: 16px;
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 12px;
	font-family: var(--font-body);
	letter-spacing: 0.2em;
	text-transform: uppercase;
}
.page-faqs .index-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 0 40px;
}
.page-faqs .index-link {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 16px;
	border-bottom: 1px solid var(--line);
	padding: 12px 2px;
	color: var(--green-900);
	font-weight: 600;
	font-size: 16px;
	font-family: var(--font-display);
	text-decoration: none;
}
.page-faqs .index-grid .index-link:nth-last-child(1),
.page-faqs .index-grid .index-link:nth-last-child(2) {
	border-bottom: none;
}
.page-faqs .index-link .arrow {
	transition: transform 0.15s ease;
	color: var(--green-800);
	font-size: 16px;
}
.page-faqs .index-link:hover .arrow {
	transform: translateX(4px);
}
.page-faqs .index-link:hover {
	color: var(--green-800);
}
.page-faqs .faqs {
	padding: 72px 0 40px;
}
.page-faqs .category {
	margin: 0 auto 36px;
	padding: 0 32px;
	max-width: var(--maxw-narrow);
	scroll-margin-top: 110px;
}
.page-faqs .cat-card {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	overflow: hidden;
}
.page-faqs .cat-head {
	background: var(--green-800);
	padding: 28px 32px;
	color: var(--cream);
}
.page-faqs .cat-head h2 {
	margin-bottom: 8px;
	color: var(--cream);
	font-size: 24px;
}
.page-faqs .cat-head p {
	max-width: 64ch;
	color: rgba(247, 241, 227, 0.8);
	font-size: 16px;
}
.page-faqs details.faq {
	border-top: 1px solid var(--line);
}
.page-faqs details.faq:first-of-type {
	border-top: none;
}
.page-faqs details.faq summary {
	display: flex;
	justify-content: space-between;
	align-items: center;
	gap: 20px;
	cursor: pointer;
	padding: 20px 32px;
	color: var(--green-900);
	font-weight: 600;
	font-size: 20px;
	font-family: var(--font-display);
	list-style: none;
}
.page-faqs details.faq summary::-webkit-details-marker {
	display: none;
}
.page-faqs details.faq summary:hover {
	background: var(--white);
}
.page-faqs details.faq summary:focus-visible {
	outline: 3px solid var(--gold);
	outline-offset: -3px;
}
.page-faqs .plus {
	display: flex;
	flex: none;
	justify-content: center;
	align-items: center;
	transition: transform 0.2s ease;
	border: 2px solid var(--green-800);
	border-radius: 50%;
	width: 32px;
	height: 32px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 20px;
	font-family: var(--font-body);
}
.page-faqs details.faq[open] .plus {
	transform: rotate(45deg);
	border-color: var(--gold);
	background: var(--gold);
	color: var(--green-900);
}
.page-faqs .faq-body {
	padding: 0 32px 28px;
}
.page-faqs .faq-body p {
	margin-bottom: 16px;
	max-width: 66ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-faqs .faq-body ul {
	margin-bottom: 16px;
	list-style: none;
}
.page-faqs .faq-body li {
	position: relative;
	margin-bottom: 8px;
	padding-left: 28px;
	color: var(--ink);
	font-size: 16px;
}
.page-faqs .faq-body li::before {
	position: absolute;
	top: 0;
	left: 0;
	content: '\2713';
	color: var(--gold-dark);
	font-weight: 700;
}
.page-faqs .source {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	border: 1px dashed var(--gold-dark);
	border-radius: var(--radius-sm);
	background: var(--cream);
	padding: 8px 12px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-faqs .source strong {
	color: var(--gold-dark);
}
.page-faqs .faq-body a.inline {
	color: var(--gold-dark);
	font-weight: 600;
}
.page-faqs .cta-band {
	background: var(--green-900);
	padding: 76px 0;
	color: var(--cream);
	text-align: center;
}
.page-faqs .cta-band h2 {
	margin: 0 auto 16px;
	max-width: 26ch;
	font-size: clamp(28px, 3vw, 40px);
}
.page-faqs .cta-band h2 em {
	/* Plain gold emphasis (no script accent — Caveat is hero-only). */
	color: var(--gold);
	font-style: normal;
	font-weight: 700;
}
.page-faqs .cta-band p {
	margin: 0 auto 32px;
	max-width: 52ch;
	color: rgba(247, 241, 227, 0.85);
}
.page-faqs .cta-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 16px;
}
@media (max-width: 1024px) {
	.page-faqs .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-faqs .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-faqs .index-grid {
		grid-template-columns: 1fr;
	}
	.page-faqs .index-grid .index-link:nth-last-child(2) {
		border-bottom: 1px solid rgba(247, 241, 227, 0.15);
	}
	.page-faqs .index-panel {
		padding: 24px;
	}
	.page-faqs .nav-cta .btn-outline-light,
	.page-faqs .btn-subscribe {
		display: none;
	}
	.page-faqs .cat-head {
		padding: 24px;
	}
	.page-faqs details.faq summary {
		padding: 20px 24px;
		font-size: 16px;
	}
	.page-faqs .faq-body {
		padding: 0 24px 24px;
	}
}

/* ===== 27. PAGE — Legends of Langley  (.page-legends-of-langley) ===== */
.page-legends-of-langley .hero {
	background: var(--green-800);
	padding: 84px 0;
	color: var(--cream);
}
.page-legends-of-langley .hero-grid {
	display: grid;
	grid-template-columns: 1.15fr 0.85fr;
	align-items: center;
	gap: 56px;
}
.page-legends-of-langley .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 5vw, 60px);
}
.page-legends-of-langley .hero .tagline {
	margin-bottom: 28px;
	max-width: 42ch;
	color: rgba(247, 241, 227, 0.9);
	font-style: italic;
	font-size: 20px;
	line-height: 1.4;
	font-family: var(--font-display);
}
.page-legends-of-langley .hero-platforms {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 12px;
}
.page-legends-of-langley .platform-icon {
	display: flex;
	justify-content: center;
	align-items: center;
	transition: background 0.15s ease;
	border: 1.5px solid rgba(247, 241, 227, 0.5);
	border-radius: 50%;
	width: 46px;
	height: 46px;
	color: var(--cream);
	font-weight: 800;
	font-size: 12px;
	text-decoration: none;
}
.page-legends-of-langley .platform-icon:hover {
	border-color: var(--gold);
	background: var(--gold);
	color: var(--green-900);
}
.page-legends-of-langley .hero-media .ph.dark {
	border-radius: var(--radius-lg);
	aspect-ratio: 1/1;
}
.page-legends-of-langley .facts {
	background: var(--gold);
}
.page-legends-of-langley .facts-grid {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 0;
}
.page-legends-of-langley .fact {
	border-left: 1px solid rgba(28, 42, 33, 0.18);
	padding: 28px 28px;
}
.page-legends-of-langley .fact:first-child {
	border-left: none;
}
.page-legends-of-langley .fact h3 {
	margin-bottom: 8px;
	color: rgba(14, 42, 71, 0.72);
	font-weight: 800;
	font-size: 12px;
	font-family: var(--font-body);
	letter-spacing: 0.16em;
	text-transform: uppercase;
}
.page-legends-of-langley .fact p {
	color: var(--green-900);
	font-weight: 600;
	font-size: 16px;
	line-height: 1.45;
}
.page-legends-of-langley .section-title {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-legends-of-langley .section-sub {
	max-width: 62ch;
	color: #000;
	font-size: 16px;
}
.page-legends-of-langley .about-grid {
	display: grid;
	grid-template-columns: 1.05fr 0.95fr;
	align-items: center;
	gap: 56px;
}
.page-legends-of-langley .about-copy p {
	margin-bottom: 20px;
	max-width: 58ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-legends-of-langley .about-media .ph {
	border-radius: var(--radius-lg);
	aspect-ratio: 4/3.4;
}
.page-legends-of-langley .episodes {
	background: var(--white);
}
.page-legends-of-langley .playlist-frame {
	margin-top: 44px;
}
.page-legends-of-langley .playlist-frame .ph {
	border-radius: var(--radius-lg);
	aspect-ratio: 16/8.5;
}
.page-legends-of-langley .episodes-cta {
	margin-top: 36px;
	text-align: center;
}
.page-legends-of-langley .listen-grid {
	display: grid;
	grid-template-columns: repeat(5, 1fr);
	gap: 20px;
	margin-top: 44px;
}
.page-legends-of-langley .listen-card {
	display: flex;
	flex-direction: column;
	align-items: center;
	gap: 12px;
	transition:
		transform 0.15s ease,
		border-color 0.15s ease;
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 28px 20px;
	text-align: center;
	text-decoration: none;
}
.page-legends-of-langley .listen-card:hover {
	transform: translateY(-4px);
}
.page-legends-of-langley .listen-icon {
	display: flex;
	justify-content: center;
	align-items: center;
	border-radius: 50%;
	background: var(--green-800);
	width: 52px;
	height: 52px;
	color: var(--gold);
	font-weight: 800;
	font-size: 16px;
}
.page-legends-of-langley .listen-card strong {
	color: var(--green-900);
	font-weight: 600;
	font-size: 16px;
	font-family: var(--font-display);
}
.page-legends-of-langley .listen-card span {
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 12px;
}
.page-legends-of-langley .host {
	background: var(--green-800);
	color: var(--cream);
}
.page-legends-of-langley .host .section-label {
	color: var(--gold);
}
.page-legends-of-langley .host .section-title {
	color: var(--cream);
}
.page-legends-of-langley .host .section-title em {
	/* Dark band -> gold emphasis. */
	color: var(--gold);
}
.page-legends-of-langley .host-grid {
	display: grid;
	grid-template-columns: 0.9fr 1.1fr;
	align-items: center;
	gap: 56px;
}
.page-legends-of-langley .host-media .ph.dark {
	border-radius: var(--radius-lg);
	aspect-ratio: 4/4.4;
}
.page-legends-of-langley .host-copy p {
	margin-bottom: 20px;
	max-width: 56ch;
	color: rgba(247, 241, 227, 0.85);
	font-size: 16px;
}
.page-legends-of-langley .guest-grid {
	display: grid;
	grid-template-columns: 1.05fr 0.95fr;
	align-items: start;
	gap: 56px;
}
.page-legends-of-langley .expect-list {
	margin-top: 28px;
	list-style: none;
}
.page-legends-of-langley .expect-list li {
	margin-bottom: 12px;
	border: 1px solid var(--line);
	border-left: 4px solid var(--gold);
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 16px 20px;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-legends-of-langley .expect-list li strong {
	color: var(--green-900);
}
.page-legends-of-langley .contact-card {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 32px;
}
.page-legends-of-langley .contact-card h3 {
	margin-bottom: 20px;
	color: var(--green-900);
	font-size: 24px;
}
.page-legends-of-langley .contact-card .btn {
	justify-content: center;
	margin-top: 8px;
	width: 100%;
}
.page-legends-of-langley .field {
	margin-bottom: 16px;
}
.page-legends-of-langley .field label {
	display: block;
	margin-bottom: 4px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 12px;
}
.page-legends-of-langley .field label .req {
	color: var(--gold-dark);
}
.page-legends-of-langley .field input,
.page-legends-of-langley .field textarea {
	border: 1px solid var(--line);
	border-radius: var(--radius-sm);
	background: var(--white);
	padding: 12px 12px;
	width: 100%;
	color: var(--ink);
	font-size: 16px;
	font-family: var(--font-body);
}
.page-legends-of-langley .field textarea {
	min-height: 84px;
	resize: vertical;
}
.page-legends-of-langley .field input:focus,
.page-legends-of-langley .field textarea:focus {
	outline: 3px solid var(--gold);
	outline-offset: 1px;
	border-color: var(--gold-dark);
}
.page-legends-of-langley .field-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 12px;
}
.page-legends-of-langley .mediakit-check {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	margin: 4px 0 20px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-legends-of-langley .mediakit-check input {
	flex: none;
	margin-top: 3px;
}
@media (max-width: 1024px) {
	.page-legends-of-langley .hero-grid,
	.page-legends-of-langley .about-grid,
	.page-legends-of-langley .host-grid,
	.page-legends-of-langley .guest-grid {
		grid-template-columns: 1fr;
	}
	.page-legends-of-langley .facts-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-legends-of-langley .facts-grid .fact:nth-child(3) {
		border-left: none;
	}
	.page-legends-of-langley .listen-grid {
		grid-template-columns: repeat(3, 1fr);
	}
	.page-legends-of-langley .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-legends-of-langley .facts-grid,
	.page-legends-of-langley .listen-grid,
	.page-legends-of-langley .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-legends-of-langley .fact {
		border-top: 1px solid rgba(28, 42, 33, 0.18);
		border-left: none;
	}
	.page-legends-of-langley .fact:first-child {
		border-top: none;
	}
	.page-legends-of-langley .nav-cta .btn-outline-light,
	.page-legends-of-langley .btn-subscribe {
		display: none;
	}
	.page-legends-of-langley section {
		padding: 60px 0;
	}
	.page-legends-of-langley .contact-card {
		padding: 24px;
	}
	.page-legends-of-langley .field-row {
		grid-template-columns: 1fr;
	}
}

/* ===== 28. PAGE — Events  (.page-events) ===== */
.page-events .hero {
	background: var(--green-800);
	padding: 84px 0 72px;
	color: var(--cream);
	text-align: center;
}
.page-events .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-events .hero p {
	margin: 0 auto;
	max-width: 54ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-events .section-title {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-events .section-sub {
	max-width: 62ch;
	color: #000;
	font-size: 16px;
}
.page-events .featured {
	padding-bottom: 0;
}
.page-events .feat-card {
	display: grid;
	position: relative;
	grid-template-columns: auto 1fr auto;
	align-items: center;
	gap: 32px;
	margin-top: 40px;
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 36px;
	overflow: hidden;
}
.page-events .date-block {
	flex: none;
	border-radius: var(--radius-md);
	background: var(--green-800);
	padding: 20px 12px;
	width: 110px;
	color: var(--cream);
	text-align: center;
}
.page-events .date-block .month {
	color: var(--gold);
	font-weight: 800;
	font-size: 12px;
	letter-spacing: 0.18em;
	text-transform: uppercase;
}
.page-events .date-block .day {
	font-weight: 600;
	font-size: 44px;
	line-height: 1.1;
	font-family: var(--font-display);
}
.page-events .date-block .dow {
	color: rgba(247, 241, 227, 0.75);
	font-size: 12px;
}
.page-events .feat-body .event-cat {
	display: inline-block;
	margin-bottom: 12px;
	border-radius: 999px;
	background: var(--white);
	padding: 4px 12px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.page-events .feat-body h2 {
	margin-bottom: 8px;
	color: var(--green-900);
	font-size: 28px;
}
.page-events .feat-body .meta {
	color: var(--ink-soft);
	font-size: 16px;
}
.page-events .feat-body .meta span {
	margin-right: 20px;
}
.page-events .feat-actions {
	display: flex;
	flex-direction: column;
	gap: 12px;
}
.page-events .controls {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 16px;
	margin: 44px 0 28px;
}
.page-events .view-toggle {
	display: inline-flex;
	border: 1.5px solid var(--green-800);
	border-radius: 999px;
	overflow: hidden;
}
.page-events .view-toggle button {
	cursor: pointer;
	border: none;
	background: transparent;
	padding: 8px 24px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
	font-family: var(--font-body);
}
.page-events .view-toggle button.active {
	background: var(--green-800);
	color: var(--cream);
}
.page-events .view-toggle button:focus-visible {
	outline: 3px solid var(--gold);
	outline-offset: -3px;
}
.page-events .filter-bar {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin-left: auto;
}
.page-events .filter {
	cursor: pointer;
	border: 1.5px solid var(--green-800);
	border-radius: 999px;
	background: transparent;
	padding: 8px 16px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
}
.page-events .filter:hover {
	background: var(--white);
}
.page-events .filter.active {
	background: var(--green-800);
	color: var(--cream);
}
.page-events .filter:focus-visible {
	outline: 3px solid var(--gold);
	outline-offset: 2px;
}
.page-events .plugin-note {
	display: inline-block;
	margin-bottom: 24px;
	border: 1px dashed var(--gold-dark);
	border-radius: var(--radius-sm);
	background: #fff3d6;
	padding: 8px 16px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-events .event-list {
	display: grid;
	gap: 16px;
}
.page-events .event-row {
	display: grid;
	grid-template-columns: auto 1fr auto;
	align-items: center;
	gap: 24px;
	transition: transform 0.15s ease;
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 20px 28px;
	text-decoration: none;
}
.page-events .event-row:hover {
	transform: translateY(-2px);
}
.page-events .event-row .date-block {
	padding: 12px 8px;
	width: 84px;
}
.page-events .event-row .date-block .day {
	font-size: 32px;
}
.page-events .event-row h3 {
	margin-bottom: 4px;
	color: var(--green-900);
	font-size: 20px;
}
.page-events .event-row .meta {
	color: var(--ink-soft);
	font-size: 12px;
}
.page-events .event-row .meta span {
	margin-right: 16px;
}
.page-events .event-row .event-cat {
	display: inline-block;
	margin-bottom: 8px;
	border-radius: 999px;
	background: var(--white);
	padding: 3px 12px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.page-events .event-row .row-link {
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 16px;
	white-space: nowrap;
}
.page-events .month-view {
	display: none;
}
.page-events .month-view.active {
	display: block;
}
.page-events .list-view.hidden {
	display: none;
}
.page-events .month-head {
	display: flex;
	justify-content: space-between;
	align-items: center;
	margin-bottom: 16px;
}
.page-events .month-head h3 {
	color: var(--green-900);
	font-size: 24px;
}
.page-events .month-nav {
	display: flex;
	gap: 8px;
}
.page-events .month-nav button {
	cursor: pointer;
	border: 2px solid var(--green-800);
	border-radius: 50%;
	background: transparent;
	width: 38px;
	height: 38px;
	color: var(--green-800);
	font-size: 16px;
}
.page-events .month-nav button:hover {
	background: var(--green-800);
	color: var(--cream);
}
.page-events .month-grid {
	display: grid;
	grid-template-columns: repeat(7, 1fr);
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	background: var(--white);
	overflow: hidden;
}
.page-events .dow-cell {
	background: var(--green-800);
	padding: 12px;
	color: var(--cream);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.1em;
	text-align: center;
	text-transform: uppercase;
}
.page-events .day-cell {
	position: relative;
	border-top: 1px solid var(--line);
	border-left: 1px solid var(--line);
	padding: 8px;
	min-height: 92px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-events .day-cell:nth-child(7n + 8) {
	border-left: none;
}
.page-events .day-cell.muted {
	background: var(--white);
	color: var(--muted);
}
.page-events .day-event {
	display: block;
	margin-top: 8px;
	border-radius: 4px;
	background: var(--gold);
	padding: 3px 8px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 12px;
	line-height: 1.3;
	text-decoration: none;
}
.page-events .day-event.alt {
	background: var(--white);
	color: var(--green-800);
}
.page-events .detail {
	background: var(--white);
}
.page-events .anno-tag {
	display: inline-block;
	margin-bottom: 20px;
	border: 1px dashed var(--gold-dark);
	border-radius: 4px;
	background: #fff3d6;
	padding: 4px 12px;
	color: #6b5410;
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
.page-events .detail-card {
	display: grid;
	grid-template-columns: 1.05fr 0.95fr;
	gap: 44px;
	margin-top: 8px;
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 40px;
}
.page-events .detail-info .event-cat {
	display: inline-block;
	margin-bottom: 12px;
	border-radius: 999px;
	background: var(--white);
	padding: 4px 12px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.page-events .detail-info h1 {
	margin-bottom: 20px;
	color: var(--green-900);
	font-size: 32px;
}
.page-events .detail-meta {
	display: grid;
	gap: 12px;
	margin-bottom: 24px;
}
.page-events .meta-row {
	display: flex;
	align-items: flex-start;
	gap: 16px;
}
.page-events .meta-icon {
	display: flex;
	flex: none;
	justify-content: center;
	align-items: center;
	border-radius: 10px;
	background: var(--green-800);
	width: 38px;
	height: 38px;
	color: var(--gold);
	font-size: 16px;
}
.page-events .meta-row strong {
	display: block;
	color: var(--green-900);
	font-size: 16px;
}
.page-events .meta-row span {
	color: var(--ink-soft);
	font-size: 12px;
}
.page-events .detail-info p.desc {
	margin-bottom: 24px;
	max-width: 52ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-events .detail-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 12px;
}
.page-events .detail-map .ph {
	aspect-ratio: 4/3.4;
}
.page-events .detail-map figcaption {
	margin-top: 12px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-events .cta-band {
	background: var(--green-900);
	padding: 76px 0;
	color: var(--cream);
}
.page-events .cta-inner {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: center;
	gap: 32px;
}
.page-events .cta-inner h2 {
	max-width: 24ch;
	font-size: clamp(28px, 3vw, 36px);
}
.page-events .cta-inner h2 em {
	/* Plain gold emphasis (no script accent — Caveat is hero-only). */
	color: var(--gold);
	font-style: normal;
	font-weight: 700;
}
.page-events .cta-inner p {
	margin-top: 8px;
	max-width: 44ch;
	color: rgba(247, 241, 227, 0.8);
	font-size: 16px;
}
@media (max-width: 1024px) {
	.page-events .detail-card {
		grid-template-columns: 1fr;
	}
	.page-events .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-events .feat-card {
		grid-template-columns: auto 1fr;
	}
	.page-events .feat-actions {
		grid-column: 1/-1;
		flex-direction: row;
	}
}
@media (max-width: 640px) {
	.page-events .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-events .nav-cta .btn-outline-light,
	.page-events .btn-subscribe {
		display: none;
	}
	.page-events section {
		padding: 60px 0;
	}
	/* The 7-column month calendar can't compress to phone width (each cell's
	   event pill keeps it ~80px wide) — scroll it sideways instead of letting
	   .month-grid's overflow:hidden clip the second half of the week. */
	.page-events .month-view.active {
		overflow-x: auto;
		-webkit-overflow-scrolling: touch;
	}
	.page-events .month-grid {
		min-width: 560px;
	}
	.page-events .feat-card {
		grid-template-columns: 1fr;
		padding: 24px;
	}
	.page-events .event-row {
		grid-template-columns: auto 1fr;
	}
	.page-events .event-row .row-link {
		grid-column: 1/-1;
	}
	.page-events .filter-bar {
		margin-left: 0;
	}
	.page-events .detail-card {
		padding: 24px;
	}
	.page-events .day-cell {
		min-height: 60px;
	}
}

/* ===== 29. PAGE — News & Articles  (.page-news-articles) ===== */
.page-news-articles .hero {
	background: var(--green-800);
	padding: 84px 0 72px;
	color: var(--cream);
	text-align: center;
}
.page-news-articles .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-news-articles .hero p {
	margin: 0 auto;
	max-width: 54ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-news-articles .section-title {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-news-articles .filter-bar {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 36px 0 36px;
}
.page-news-articles .filter {
	cursor: pointer;
	border: 1.5px solid var(--green-800);
	border-radius: 999px;
	background: transparent;
	padding: 8px 20px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
}
.page-news-articles .filter:hover {
	background: var(--white);
}
.page-news-articles .filter.active {
	background: var(--green-800);
	color: var(--cream);
}
.page-news-articles .filter:focus-visible {
	outline: 3px solid var(--gold);
	outline-offset: 2px;
}
.page-news-articles .news-list {
	display: grid;
	gap: 20px;
}
/* Listing cards (Figma 67:8888). A hairline card, not the heavy black-edged
   tier — the black left/bottom rules live on the Continue-reading minis on the
   single page instead, which is what the two frames draw. */
.page-news-articles .news-row {
	display: grid;
	grid-template-columns: 280px 1fr;
	align-items: center;
	gap: 28px;
	transition: transform 0.15s ease;
	border: 1px solid var(--line);
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 24px 28px;
	line-height: 26px;
	text-decoration: none;
}
.page-news-articles .news-row:hover {
	transform: translateY(-2px);
}
.page-news-articles .news-row .ph {
	border-radius: var(--radius-sm);
	aspect-ratio: 280/174;
}
/* Category and date on one line. The pipe is a ::before on the <time> so it
   only appears when there is a category to separate it from. */
.page-news-articles .news-meta {
	margin-bottom: 10px;
	font-weight: 700;
	font-size: 12px;
	/* Stated, not inherited: body's 1.6 lands these small-caps runs on 19.2px,
	   which is neither even nor the mockup's leading (23.66 -> 19.2 -> 20). */
	line-height: 20px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.page-news-articles .news-row .news-cat {
	color: var(--green-800);
}
.page-news-articles .news-meta time {
	color: var(--gold-dark);
}
.page-news-articles .news-meta .news-cat + time::before {
	margin: 0 0.35em 0 0.15em;
	content: "|";
}
.page-news-articles .news-row h3 {
	margin-bottom: 12px;
	color: var(--green-900);
	font-weight: 600;
	font-size: 28px;
	font-family: var(--font-label);
	line-height: 1;
}
/* :not(.news-meta) matters — the meta line is a <p> too, and a bare
   `.news-row p` outranks `.news-meta` on specificity, which rendered the
   category and date at 16px. */
.page-news-articles .news-row p:not(.news-meta) {
	margin-bottom: 12px;
	max-width: 66ch;
	color: var(--ink-soft);
	font-size: 16px;
	line-height: 26px;
}
.page-news-articles .news-row .row-link {
	color: var(--green-700);
	font-weight: 700;
	font-size: 16px;
	line-height: 26px;
}
/* Pagination. The selectors cover both the static markup
   (.pagination > a.current) and WordPress's the_posts_pagination() output
   (nav.pagination > .nav-links > a/span.page-numbers.current). */
.page-news-articles .pagination,
.page-news-articles .pagination .nav-links {
	display: flex;
	justify-content: center;
	gap: 8px;
	margin-top: 44px;
}
.page-news-articles .pagination .nav-links {
	margin-top: 0;
}
.page-news-articles .pagination a,
.page-news-articles .pagination .page-numbers {
	display: flex;
	justify-content: center;
	align-items: center;
	border: 1.5px solid var(--green-800);
	border-radius: 50%;
	width: 42px;
	height: 42px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 16px;
	text-decoration: none;
}
.page-news-articles .pagination a.current,
.page-news-articles .pagination .page-numbers.current {
	background: var(--green-800);
	color: var(--cream);
}
.page-news-articles .pagination a:hover,
.page-news-articles .pagination a.page-numbers:hover {
	background: var(--white);
}
.page-news-articles .pagination a.current:hover,
.page-news-articles .pagination .page-numbers.current:hover {
	background: var(--green-800);
}
.page-news-articles .single {
	background: var(--white);
}
.page-news-articles .anno-tag {
	display: inline-block;
	margin-bottom: 20px;
	border: 1px dashed var(--gold-dark);
	border-radius: 4px;
	background: #fff3d6;
	padding: 4px 12px;
	color: #6b5410;
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
/* Single post (Figma 67:8756). The article sits straight on white — no card,
   no border, no fill — so the 880px column is the hero image's own width. */
.page-news-articles .post-card {
	margin: 0 auto;
	max-width: var(--maxw-narrow);
}
.page-news-articles .post-head {
	margin: 0 auto 32px;
	max-width: 60ch;
	text-align: center;
}
.page-news-articles .post-head .news-cat {
	display: inline-block;
	margin-bottom: 16px;
	border-radius: 999px;
	background: var(--green-800);
	padding: 6px 12px;
	color: var(--white);
	font-weight: 700;
	font-size: 12px;
	line-height: 16px; /* 16 + 2x6 padding = the mockup's 28px chip. */
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.page-news-articles .post-head h2 {
	margin-bottom: 16px;
	color: var(--green-900);
	font-weight: 600;
	font-size: 42px;
	font-family: var(--font-label);
	line-height: 42px;
}
.page-news-articles .post-head time {
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 12px;
	line-height: 20px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.page-news-articles .post-hero .ph {
	margin-bottom: 32px;
	border-radius: var(--radius-md);
	aspect-ratio: 16/8;
}
.page-news-articles .post-body {
	margin: 0 auto;
	max-width: 64ch;
}
.page-news-articles .post-body p {
	margin-bottom: 20px;
	color: var(--ink-soft);
	font-size: 16px;
	line-height: 26px;
}
.page-news-articles .post-body p.lede {
	color: var(--ink);
	font-weight: 500;
	font-size: 20px;
}
.page-news-articles .share-row {
	display: flex;
	align-items: center;
	gap: 16px;
	margin: 32px auto 0;
	border-top: 1px solid var(--line);
	padding-top: 24px;
	max-width: 64ch;
}
.page-news-articles .share-row span {
	color: var(--ink-soft);
	font-weight: 700;
	font-size: 12px;
	line-height: 20px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.page-news-articles .share-icons {
	display: flex;
	gap: 8px;
}
.page-news-articles .share-icons a {
	display: flex;
	justify-content: center;
	align-items: center;
	border: 1.5px solid var(--green-800);
	border-radius: 50%;
	width: 36px;
	height: 36px;
	color: var(--green-800);
	font-weight: 700;
	font-size: 12px;
	text-decoration: none;
}
.page-news-articles .share-icons a:hover {
	background: var(--green-800);
	color: var(--cream);
}
/* Continue reading — its own full-width cream band below the white article. */
.page-news-articles .continue {
	background: var(--cream);
	padding: 82px 0;
	line-height: 26px;
}
.page-news-articles .continue .wrap {
	max-width: calc(var(--maxw-narrow) + 64px);
}
.page-news-articles .continue h3 {
	margin-bottom: 20px;
	color: var(--green-900);
	font-weight: 600;
	font-size: 24px;
	line-height: 28px;
}
.page-news-articles .continue-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 20px;
}
/* Continue-reading cards keep the heavy black left/bottom edge the listing
   cards gave up — that is how Figma 67:8777 draws them. */
.page-news-articles .mini-card {
	display: flex;
	flex-direction: column;
	transition: transform 0.15s ease;
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 0;
	line-height: 26px;
	overflow: hidden;
	text-decoration: none;
}
.page-news-articles .mini-card:hover {
	transform: translateY(-3px);
}
.page-news-articles .mini-card .ph {
	border-top: none;
	border-right: none;
	border-left: none;
	border-radius: 0;
	aspect-ratio: 280/158;
}
.page-news-articles .mini-body {
	display: flex;
	flex: 1;
	flex-direction: column;
	gap: 8px;
	padding: 18px;
}
.page-news-articles .mini-body .mini-cat {
	color: var(--green-900);
	font-weight: 700;
	font-size: 10px;
	line-height: 20px;
	letter-spacing: 0.12em;
	text-transform: uppercase;
}
.page-news-articles .mini-body h4 {
	flex: 1;
	color: var(--ink);
	font-weight: 600;
	font-size: 20px;
	font-family: var(--font-label);
	line-height: 20px;
}
.page-news-articles .mini-body .mini-link {
	color: var(--green-700);
	font-weight: 700;
	font-size: 12px;
	line-height: 20px;
}
.page-news-articles .media-contact {
	background: var(--green-800);
	padding: 76px 0;
	color: var(--cream);
}
.page-news-articles .mc-inner {
	display: flex;
	flex-wrap: wrap;
	justify-content: space-between;
	align-items: center;
	gap: 32px;
}
.page-news-articles .mc-inner h2 {
	margin-bottom: 8px;
	font-size: clamp(28px, 3vw, 36px);
}
.page-news-articles .mc-inner h2 em {
	color: var(--gold);
	font-style: normal;
}
.page-news-articles .mc-inner p {
	max-width: 44ch;
	color: rgba(247, 241, 227, 0.8);
	font-size: 16px;
}
.page-news-articles .mc-card {
	border: 1px solid var(--line);
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 28px 32px;
	min-width: 300px;
}
.page-news-articles .mc-card .c-role {
	margin-bottom: 8px;
	color: var(--gold-dark);
	font-weight: 800;
	font-size: 12px;
	letter-spacing: 0.14em;
	text-transform: uppercase;
}
.page-news-articles .mc-card strong {
	display: block;
	margin-bottom: 4px;
	color: var(--green-900);
	font-size: 20px;
	font-family: var(--font-display);
}
.page-news-articles .mc-card a {
	display: block;
	color: var(--ink-soft);
	font-size: 16px;
	text-decoration: none;
}
.page-news-articles .mc-card a:hover {
	color: var(--green-800);
	text-decoration: underline;
}
@media (max-width: 1024px) {
	.page-news-articles .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-news-articles .news-row {
		grid-template-columns: 220px 1fr;
	}
	.page-news-articles .continue-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-news-articles .foot-grid,
	.page-news-articles .continue-grid {
		grid-template-columns: 1fr;
	}
	.page-news-articles .news-row {
		grid-template-columns: 1fr;
	}
	.page-news-articles .nav-cta .btn-outline-light,
	.page-news-articles .btn-subscribe {
		display: none;
	}
	.page-news-articles section {
		padding: 60px 0;
	}
	/* The listing headline and the article title are both set from the
	   desktop mockup; step them down rather than letting them wrap to four
	   lines on a phone. */
	.page-news-articles .post-head h2 {
		font-size: 32px;
	}
	.page-news-articles .news-row h3 {
		font-size: 24px;
	}
}

/* ===== 30. PAGE — Subscribe  (.page-subscribe) ===== */
.page-subscribe .hero {
	background: var(--green-800);
	padding: 84px 0;
	color: var(--cream);
}
.page-subscribe .hero-grid {
	display: grid;
	grid-template-columns: 1.05fr 0.95fr;
	align-items: center;
	gap: 56px;
}
.page-subscribe .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-subscribe .hero p.lede {
	margin-bottom: 28px;
	max-width: 48ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 16px;
}
.page-subscribe .value-list {
	list-style: none;
}
.page-subscribe .value-list li {
	position: relative;
	margin-bottom: 12px;
	padding-left: 32px;
	color: rgba(247, 241, 227, 0.9);
	font-size: 16px;
}
.page-subscribe .value-list li::before {
	position: absolute;
	left: 0;
	content: '\2713';
	color: var(--gold);
	font-weight: 700;
}
.page-subscribe .value-list li strong {
	color: var(--cream);
}
.page-subscribe .form-card {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 36px;
	color: var(--ink);
}
.page-subscribe .form-card h2 {
	margin-bottom: 8px;
	color: var(--green-900);
	font-size: 24px;
}
.page-subscribe .form-card .form-note {
	margin-bottom: 24px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-subscribe .field {
	margin-bottom: 16px;
}
.page-subscribe .field label {
	display: block;
	margin-bottom: 8px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 12px;
}
.page-subscribe .field label .req {
	color: var(--gold-dark);
}
.page-subscribe .field input {
	border: 1px solid var(--line);
	border-radius: var(--radius-sm);
	background: var(--white);
	padding: 12px 16px;
	width: 100%;
	color: var(--ink);
	font-size: 16px;
	font-family: var(--font-body);
}
.page-subscribe .field input:focus {
	outline: 3px solid var(--gold);
	outline-offset: 1px;
	border-color: var(--gold-dark);
}
.page-subscribe .field-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 16px;
}
.page-subscribe .consent {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	margin: 20px 0 24px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-subscribe .consent input {
	flex: none;
	margin-top: 3px;
}
.page-subscribe .form-card .btn {
	justify-content: center;
	width: 100%;
}
.page-subscribe .anno-inline {
	display: inline-block;
	margin-top: 12px;
	border: 1px dashed var(--gold-dark);
	border-radius: 4px;
	background: #fff3d6;
	padding: 3px 12px;
	color: #6b5410;
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.06em;
	text-transform: uppercase;
}
.page-subscribe .section-title {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-subscribe .section-sub {
	max-width: 62ch;
	color: #000;
	font-size: 16px;
}
.page-subscribe .expect-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 44px;
}
.page-subscribe .expect-card {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 32px 28px;
}
/* Drawn icons on the card ground, as the mockup has them — the filled tile
   they used to sit in was carrying emoji that needed the contrast. */
.page-subscribe .expect-icon {
	display: flex;
	justify-content: flex-start;
	align-items: center;
	margin-bottom: 16px;
	width: 46px;
	height: 46px;
	color: var(--green-800);
	font-size: 20px;
}
.page-subscribe .expect-icon img {
	display: block;
	width: 42px;
	height: auto;
}
.page-subscribe .expect-card h3 {
	margin-bottom: 12px;
	color: var(--green-900);
	font-size: 20px;
}
.page-subscribe .expect-card p {
	color: var(--ink-soft);
	font-size: 16px;
}
.page-subscribe .frequency-note {
	margin-top: 32px;
	color: var(--ink-soft);
	/* Upright in the mockup — the italic was ours, not the design's. */
	font-size: 20px;
	font-family: var(--font-display);
	text-align: center;
}
.page-subscribe .frequency-note strong {
	color: var(--green-900);
}
.page-subscribe .social-band {
	background: var(--green-800);
	padding: 76px 0;
	color: var(--cream);
	text-align: center;
}
.page-subscribe .social-band h2 {
	margin: 0 auto 16px;
	max-width: 26ch;
	font-size: clamp(28px, 3vw, 36px);
}
.page-subscribe .social-band h2 em {
	color: var(--gold);
	font-style: normal;
}
.page-subscribe .social-band p {
	margin: 0 auto 32px;
	max-width: 48ch;
	color: rgba(247, 241, 227, 0.85);
}
.page-subscribe .social-row {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 16px;
}
.page-subscribe .social-row a {
	display: flex;
	justify-content: center;
	align-items: center;
	transition: background 0.15s ease;
	border: 1.5px solid rgba(247, 241, 227, 0.5);
	border-radius: 50%;
	width: 54px;
	height: 54px;
	color: var(--cream);
	font-weight: 800;
	font-size: 16px;
	text-decoration: none;
}
.page-subscribe .social-row a:hover {
	border-color: var(--gold);
	background: var(--gold);
	color: var(--green-900);
}
@media (max-width: 1024px) {
	.page-subscribe .hero-grid {
		grid-template-columns: 1fr;
	}
	.page-subscribe .expect-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-subscribe .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-subscribe .expect-grid,
	.page-subscribe .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-subscribe .nav-cta .btn-outline-light,
	.page-subscribe .btn-subscribe {
		display: none;
	}
	.page-subscribe section {
		padding: 60px 0;
	}
	.page-subscribe .form-card {
		padding: 24px;
	}
	.page-subscribe .field-row {
		grid-template-columns: 1fr;
	}
}

/* ===== 31. PAGE — Donate  (.page-donate) ===== */
.page-donate h1,
.page-donate h2,
.page-donate h3 {
	font-weight: 600;
	line-height: 1.15;
	font-family: var(--font-display);
}
.page-donate .hero {
	background: var(--green-800);
	padding: 84px 0;
	color: var(--cream);
	text-align: center;
}
.page-donate .hero h1 {
	margin-right: auto;
	margin-bottom: 20px;
	margin-left: auto;
	max-width: 22ch;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-donate .hero p {
	margin: 0 auto;
	max-width: 54ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-donate .donate-embed {
	padding: 72px 0 96px;
}
.page-donate .embed-frame {
	margin: 0 auto;
	max-width: 760px;
}
.page-donate .anno-tag {
	display: inline-block;
	margin-bottom: 16px;
	border: 1px dashed var(--gold-dark);
	border-radius: 4px;
	background: #fff3d6;
	padding: 4px 12px;
	color: #6b5410;
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.08em;
	text-transform: uppercase;
}
.page-donate .embed-frame .ph {
	background-color: var(--white);
	min-height: 900px;
}

/* =============================================================================
   GIVEWP OUTPUT (Donate page)

   The card the donation form sits in, plus enough normalisation that the
   plugin's own controls read as part of this site rather than as a plugin
   dropped into it. Same job the Contact Form 7 and Gravity Forms sections do
   further down, and the same reasoning: the form is styled by its plugin, and
   the plugin does not know about this palette.

   Written against GiveWP's legacy form markup (`.give-form`, `.give-btn`,
   `#give-purchase-button`), which is what a `[give_form]` shortcode renders.
   GiveWP 3's newer visual builder forms render inside an iframe instead —
   nothing here can reach inside one, so those are styled in the plugin and the
   iframe rule below just makes sure the frame is not clipped.

   NOT VERIFIED AGAINST THE PLUGIN — it is not installed on the local site, so
   these selectors are written from GiveWP's documented markup and want a pass
   once the real shortcode is in.
   ========================================================================== */

/* Card treatment, matching the Contact and Get Involved form cards. Applied
   only when a form is actually embedded — see page-donate.php. */
.page-donate .embed-frame.is-embedded {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 36px;
	color: var(--ink);
}
@media (max-width: 640px) {
	.page-donate .embed-frame.is-embedded {
		padding: 24px;
	}
}

/* An iframe-based form (GiveWP 3) sizes itself; give it the full width of the
   card and no border of its own. */
.page-donate .embed-frame.is-embedded iframe {
	display: block;
	border: 0;
	width: 100%;
}

/* The plugin sets its own font stack; inherit the site's instead. */
.page-donate .give-form-wrap,
.page-donate .give-form,
.page-donate .give-form input,
.page-donate .give-form select,
.page-donate .give-form textarea,
.page-donate .give-form label {
	font-family: var(--font-body);
}
.page-donate .give-form legend,
.page-donate .give-form .give-section-title {
	color: var(--green-900);
	font-weight: 600;
	font-size: 20px;
	font-family: var(--font-display);
}
.page-donate .give-form label {
	color: var(--green-900);
	font-weight: 700;
	font-size: 12px;
	letter-spacing: 0.02em;
}

/* Text inputs and selects, matching the fields on Contact and Get Involved. */
.page-donate .give-form input[type="text"],
.page-donate .give-form input[type="email"],
.page-donate .give-form input[type="tel"],
.page-donate .give-form input[type="number"],
.page-donate .give-form select,
.page-donate .give-form textarea {
	border: 1px solid var(--line);
	border-radius: var(--radius-sm);
	background: var(--white);
	padding: 12px 16px;
	width: 100%;
	color: var(--ink);
	font-size: 16px;
}
.page-donate .give-form input:focus-visible,
.page-donate .give-form select:focus-visible,
.page-donate .give-form textarea:focus-visible {
	outline: 2px solid var(--green-800);
	outline-offset: 1px;
}

/* Amount buttons: quiet until chosen, then the campaign's gold — the same
   treatment the donate band on the home page gives its amounts. */
.page-donate .give-form .give-donation-level-btn {
	border: 1px solid var(--line);
	border-radius: 999px;
	background: var(--white);
	padding: 10px 20px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 16px;
}
.page-donate .give-form .give-donation-level-btn.give-default-level,
.page-donate .give-form .give-donation-level-btn:hover {
	border-color: var(--gold);
	background: var(--gold);
	color: var(--green-900);
}

/* The submit button is the one green button on the site — donate, and only
   donate, per the button-colour roles at the top of this file. */
.page-donate .give-form #give-purchase-button,
.page-donate .give-form .give-submit,
.page-donate .give-form input[type="submit"] {
	border: 0;
	border-radius: 999px;
	background: var(--jade);
	padding: 16px 32px;
	width: auto;
	color: var(--white);
	font-weight: 700;
	font-size: 16px;
	font-family: var(--font-body);
	cursor: pointer;
}
.page-donate .give-form #give-purchase-button:hover,
.page-donate .give-form .give-submit:hover,
.page-donate .give-form input[type="submit"]:hover {
	background: #00814f;
}

/* Totals row and the plugin's own notices, re-tinted off its default blues. */
.page-donate .give-form #give-final-total-wrap {
	border-top: 1px solid var(--line);
	padding-top: 16px;
	color: var(--green-900);
	font-weight: 700;
}
.page-donate .give_error,
.page-donate .give_success,
.page-donate .give_warning {
	border: 1px solid var(--line);
	border-left: 4px solid var(--gold);
	border-radius: var(--radius-sm);
	background: var(--white);
	padding: 14px 16px;
	color: var(--ink-soft);
	font-size: 15px;
}
.page-donate .give_error {
	border-left-color: var(--error);
}
.page-donate .give_success {
	border-left-color: var(--jade);
}
@media (max-width: 1024px) {
	.page-donate .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-donate .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-donate .nav-cta .btn-outline-light,
	.page-donate .btn-subscribe {
		display: none;
	}
	.page-donate .donate-embed {
		padding: 48px 0 64px;
	}
}

/* ===== 32. PAGE — Contact  (.page-contact) ===== */
.page-contact h1,
.page-contact h2,
.page-contact h3 {
	font-weight: 600;
	line-height: 1.15;
	font-family: var(--font-display);
}
.page-contact .hero {
	background: var(--green-800);
	padding: 84px 0;
	color: var(--cream);
}
.page-contact .hero-grid {
	display: grid;
	grid-template-columns: 1fr 1fr;
	align-items: start;
	gap: 56px;
}
.page-contact .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-contact .hero p.lede {
	margin-bottom: 28px;
	max-width: 46ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 16px;
}
.page-contact .expect-list {
	margin-bottom: 32px;
	list-style: none;
}
.page-contact .expect-list li {
	position: relative;
	margin-bottom: 12px;
	padding-left: 32px;
	color: rgba(247, 241, 227, 0.9);
	font-size: 16px;
}
.page-contact .expect-list li::before {
	position: absolute;
	left: 0;
	content: '\2713';
	color: var(--gold);
	font-weight: 700;
}
/* A light-blue card on the blue band, per the mockup — it was a white card,
   which read as a second form rather than as an aside beside one. */
.page-contact .faq-nudge {
	border: 1px solid rgba(247, 241, 227, 0.4);
	border-radius: var(--radius-md);
	background: var(--green-700);
	padding: 20px 24px;
}
.page-contact .faq-nudge h3 {
	margin-bottom: 8px;
	color: var(--white);
	font-size: 20px;
}
.page-contact .faq-nudge p {
	margin-bottom: 12px;
	color: var(--white);
	font-size: 16px;
}
.page-contact .faq-nudge a {
	color: var(--gold);
	font-weight: 700;
	font-size: 16px;
	text-decoration: none;
}
.page-contact .faq-nudge a:hover {
	text-decoration: underline;
}
.page-contact .form-card {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 36px;
	color: var(--ink);
}
.page-contact .form-card h2 {
	margin-bottom: 8px;
	color: var(--green-900);
	font-size: 24px;
}
.page-contact .form-card .form-note {
	margin-bottom: 24px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-contact .field {
	margin-bottom: 16px;
}
.page-contact .field label {
	display: block;
	margin-bottom: 8px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 12px;
}
.page-contact .field label .req {
	color: var(--gold-dark);
}
.page-contact .field input,
.page-contact .field textarea,
.page-contact .field select {
	border: 1px solid var(--line);
	border-radius: var(--radius-sm);
	background: var(--white);
	padding: 12px 16px;
	width: 100%;
	color: var(--ink);
	font-size: 16px;
	font-family: var(--font-body);
}
.page-contact .field textarea {
	min-height: 130px;
	resize: vertical;
}
.page-contact .field input:focus,
.page-contact .field textarea:focus,
.page-contact .field select:focus {
	outline: 3px solid var(--gold);
	outline-offset: 1px;
	border-color: var(--gold-dark);
}
.page-contact .field-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 16px;
}
.page-contact .consent {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	margin: 20px 0 24px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-contact .consent input {
	flex: none;
	margin-top: 3px;
}
.page-contact .form-card .btn {
	justify-content: center;
	width: 100%;
}
@media (max-width: 1024px) {
	.page-contact .hero-grid {
		grid-template-columns: 1fr;
	}
	.page-contact .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-contact .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-contact .nav-cta .btn-outline-light,
	.page-contact .btn-subscribe {
		display: none;
	}
	.page-contact .form-card {
		padding: 24px;
	}
	.page-contact .field-row {
		grid-template-columns: 1fr;
	}
}

/* =============================================================================
   SCHOOL BOARD PAGE (page-school-board.php)
   Shares the-team card styles via the page-the-team body class; the rules
   below cover the school-specific platform + commentary cards up top.
   ========================================================================== */
/* Alternating section grounds: blue hero → cream schools-platform → white
   trustee grid → dark CTA band, matching the-team page rhythm. */
.page-school-board .trustees {
	background: var(--white);
}
.page-school-board .sb-points {
	display: grid;
	grid-template-columns: repeat(2, 1fr);
	gap: 24px;
	margin-top: 40px;
}
.page-school-board .sb-point {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 32px;
}
.page-school-board .sb-point h3 {
	margin-bottom: 12px;
	color: var(--green-900);
	font-size: 24px;
}
.page-school-board .sb-point p {
	color: var(--ink-soft);
}
.page-school-board .sb-point ul {
	margin: 12px 0 0 18px;
	color: var(--ink-soft);
}
.page-school-board .sb-point li {
	margin-bottom: 8px;
}
.page-school-board .sb-point a {
	color: var(--gold-dark);
	font-weight: 600;
	text-decoration: none;
}
.page-school-board .sb-point a:hover {
	text-decoration: underline;
}
@media (max-width: 860px) {
	.page-school-board .sb-points {
		grid-template-columns: 1fr;
	}
}

/* ===== 33. PAGE — Thank You  (.page-thank-you) ===== */
/* Reached only by redirect from a form. Deliberately built from the components
   the other interior pages already use — centred hero, a checkmark list, and
   the shared dark cta-band — so it reads as part of the site rather than as a
   system page. */
.page-thank-you .hero {
	background: var(--green-800);
	padding: 88px 0;
	color: var(--cream);
	text-align: center;
}
.page-thank-you .hero h1 {
	margin: 0 auto 20px;
	max-width: 20ch;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-thank-you .hero p.lede {
	margin: 0 auto;
	max-width: 54ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 20px;
}
.page-thank-you .ty-next {
	background: var(--cream);
	padding: 76px 0;
}
.page-thank-you .ty-next h2 {
	margin: 0 auto 32px;
	max-width: 24ch;
	color: var(--green-900);
	font-size: clamp(28px, 3vw, 40px);
	text-align: center;
}
/* The list is centred as a block but the items stay left-aligned: centred
   body text is hard to scan once a line wraps. */
.page-thank-you .ty-steps {
	margin: 0 auto;
	max-width: 60ch;
	list-style: none;
}
.page-thank-you .ty-steps li {
	position: relative;
	margin-bottom: 16px;
	border-bottom: 1px solid var(--line);
	padding: 0 0 16px 36px;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-thank-you .ty-steps li:last-child {
	margin-bottom: 0;
	border-bottom: none;
	padding-bottom: 0;
}
/* The other two checkmark lists (Contact, Subscribe) sit on the blue hero and
   use gold. This is the first on a light ground, so it needs its own colour:
   --jade manages only 3.58:1 on cream, short of the 4.5:1 the gold-on-blue
   pattern already clears. --green-800 is the accent colour for light grounds
   and reaches 6.32:1. */
.page-thank-you .ty-steps li::before {
	position: absolute;
	left: 0;
	content: '\2713';
	color: var(--green-800);
	font-weight: 700;
}
.page-thank-you .cta-band {
	background: var(--green-900);
	padding: 76px 0;
	color: var(--cream);
	text-align: center;
}
.page-thank-you .cta-band h2 {
	margin: 0 auto 16px;
	max-width: 26ch;
	font-size: clamp(28px, 3vw, 40px);
}
.page-thank-you .cta-band h2 em {
	/* Plain gold emphasis (no script accent — Caveat is hero-only). */
	color: var(--gold);
	font-style: normal;
	font-weight: 700;
}
.page-thank-you .cta-band p {
	margin: 0 auto 32px;
	max-width: 52ch;
	color: rgba(247, 241, 227, 0.85);
}
.page-thank-you .cta-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 16px;
}
@media (max-width: 1024px) {
	.page-thank-you .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-thank-you .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-thank-you .nav-cta .btn-outline-light,
	.page-thank-you .btn-subscribe {
		display: none;
	}
	.page-thank-you .hero,
	.page-thank-you .ty-next,
	.page-thank-you .cta-band {
		padding: 60px 0;
	}
}

/* ===== 34. PAGE — Get Involved  (.page-get-involved) ===== */
/* Built from components the interior pages already use: the Contact/Subscribe
   hero-grid with a form card beside it, the offset-framed card, the home page's
   pillar grid, and the shared dark cta-band. The three things it adds are the
   checkbox grid inside the form ("How would you like to help?"), the six
   ways-to-help cards, and the numbered pillar.

   Section grounds alternate blue hero -> white ways -> cream vision -> dark
   band, the same rhythm as The Team and School Board.

   The form appears once, at the top. Every "sign up" on the page is a link to
   #get-involved-form rather than a second copy of it — two live forms on one
   page means duplicated field IDs and entries split across both. */
.page-get-involved .hero {
	background: var(--green-800);
	padding: 84px 0;
	color: var(--cream);
}
.page-get-involved .hero-grid {
	display: grid;
	grid-template-columns: 1.05fr 0.95fr;
	align-items: start;
	gap: 56px;
}
.page-get-involved .hero h1 {
	margin-bottom: 20px;
	font-size: clamp(40px, 4.8vw, 56px);
}
.page-get-involved .hero p.lede {
	margin-bottom: 28px;
	max-width: 46ch;
	color: rgba(247, 241, 227, 0.85);
	font-weight: 300;
	font-size: 16px;
}
.page-get-involved .value-list {
	margin-bottom: 32px;
	list-style: none;
}
.page-get-involved .value-list li {
	position: relative;
	margin-bottom: 12px;
	padding-left: 32px;
	color: rgba(247, 241, 227, 0.9);
	font-size: 16px;
}
.page-get-involved .value-list li::before {
	position: absolute;
	left: 0;
	content: '\2713';
	color: var(--gold);
	font-weight: 700;
}
.page-get-involved .value-list li strong {
	color: var(--cream);
}
.page-get-involved .hero-actions {
	display: flex;
	flex-wrap: wrap;
	gap: 16px;
}

/* --- Form card ----------------------------------------------------------- */
/* scroll-margin-top clears the sticky header: the jump links on this page all
   land here, and without it the card's heading sits behind the masthead. */
.page-get-involved .form-card {
	scroll-margin-top: 110px;
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-lg);
	background: var(--white);
	padding: 36px;
	color: var(--ink);
}
.page-get-involved .form-card h2 {
	margin-bottom: 8px;
	color: var(--green-900);
	font-size: 24px;
}
.page-get-involved .form-card .form-note {
	margin-bottom: 24px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-get-involved .field {
	margin-bottom: 16px;
}
/* Direct children only. The checkbox options below are labels inside a .field
   too, and a plain `.field label` would out-specify their own rule and hand
   them this bold 12px treatment. */
.page-get-involved .field > label,
.page-get-involved .help-field legend {
	display: block;
	margin-bottom: 8px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 12px;
}
.page-get-involved .field > label .req,
.page-get-involved .help-field legend .req {
	color: var(--gold-dark);
}
.page-get-involved .field input,
.page-get-involved .field textarea {
	border: 1px solid var(--line);
	border-radius: var(--radius-sm);
	background: var(--white);
	padding: 12px 16px;
	width: 100%;
	color: var(--ink);
	font-size: 16px;
	font-family: var(--font-body);
}
.page-get-involved .field textarea {
	min-height: 130px;
	resize: vertical;
}
.page-get-involved .field input:focus,
.page-get-involved .field textarea:focus {
	outline: 3px solid var(--gold);
	outline-offset: 1px;
	border-color: var(--gold-dark);
}
.page-get-involved .field-row {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 16px;
}

/* --- "How would you like to help?" --------------------------------------
   A fieldset, because the six boxes answer one question and a legend is what
   names that group for a screen reader. The default fieldset border and
   padding are removed so it sits on the same rhythm as the .field blocks
   around it.

   The options are chips that wrap, not a two-column grid. The labels differ a
   lot in length — "Invite Jay to speak" against "Host a 24x18in lawn sign" —
   and a grid sizes every cell to the widest one, so the long labels wrapped to
   two lines and dragged their whole row taller. Chips size to their own
   content and flow, which fits the same six options into roughly two thirds
   the height with no ragged half-empty cells.

   The pill shape is the site's existing multi-select vocabulary: the Events
   and News filter bars are the same 999px chip with the same gold focus ring.
   The border here is the quiet hairline rather than the filter bar's blue —
   these sit inside a form card among other inputs, and a row of blue-outlined
   pills would out-shout the fields above them.

   The checkbox itself stays visible. Chips alone read as single-select, and
   "choose as many as you like" is exactly what this question means. */
.page-get-involved .help-field {
	border: 0;
	padding: 0;
}
.page-get-involved .help-grid {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
}
.page-get-involved .help-option {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	transition:
		border-color 0.15s ease,
		background 0.15s ease;
	cursor: pointer;
	border: 1.5px solid var(--line);
	border-radius: 999px;
	padding: 7px 14px;
	color: var(--ink);
	font-weight: 500;
	font-size: 12px;
	line-height: 1.3;
}
.page-get-involved .help-option:hover {
	border-color: var(--gold-dark);
}
/* Selected: the chip carries the state as well as the box, so a filled-in
   answer is legible at a glance rather than only at checkbox size. */
.page-get-involved .help-option:has(input:checked) {
	border-color: var(--green-800);
	background: #eef3f9;
	color: var(--green-900);
	font-weight: 700;
}
.page-get-involved .help-option input[type="checkbox"] {
	flex: none;
	accent-color: var(--green-800);
	cursor: pointer;
	width: 15px;
	height: 15px;
}
/* Outline only — see the note on the Gravity chips: the border carries the
   checked state, so focus must not repaint it. The box inside the chip is an
   input too and would otherwise draw a second ring of its own. */
.page-get-involved .help-option:focus-within {
	outline: 3px solid var(--gold);
	outline-offset: 1px;
}
.page-get-involved .help-option input[type="checkbox"]:focus {
	outline: none;
}

.page-get-involved .consent {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	margin: 20px 0 24px;
	color: var(--ink-soft);
	font-size: 12px;
}
.page-get-involved .consent input {
	flex: none;
	margin-top: 3px;
}
.page-get-involved .consent a {
	color: var(--green-800);
	font-weight: 600;
}
.page-get-involved .form-card .btn {
	justify-content: center;
	width: 100%;
}
.page-get-involved .form-micro {
	margin-top: 16px;
	color: var(--ink-soft);
	font-size: 12px;
	text-align: center;
}
.page-get-involved .form-micro a {
	color: var(--green-800);
	font-weight: 700;
}

/* --- Ways to help -------------------------------------------------------- */
/* The hero's "See the ways to help" button lands here, so this section needs
   the same sticky-header clearance the form card has — without it the section
   label and heading arrive underneath the masthead. */
.page-get-involved .ways {
	scroll-margin-top: 110px;
	background: var(--white);
}
.page-get-involved .section-title {
	margin-bottom: 16px;
	color: var(--green-900);
	font-size: clamp(28px, 3.2vw, 40px);
}
.page-get-involved .section-sub {
	max-width: 62ch;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-get-involved .ways-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 44px;
}
.page-get-involved .way {
	display: flex;
	flex-direction: column;
	transition: transform 0.15s ease;
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 32px 28px;
}
.page-get-involved .way:hover {
	transform: translateY(-4px);
}
/* The mockup draws these bare — a blue line icon sitting straight on the card,
   no tinted chip behind it. The chip was ours, from when the field held an
   emoji and needed something to sit against. An emoji left in the field still
   lands here, so the box keeps a size and a colour for that case. */
.page-get-involved .way-icon {
	display: flex;
	justify-content: flex-start;
	align-items: center;
	margin-bottom: 28px;
	height: 34px;
	color: var(--green-800);
	font-size: 28px;
}
/* 42px in the frame, which is 34 here. Width follows the artwork: these six
   run 40.6 to 46 wide at the same height, so a fixed width would squash them
   unevenly. */
.page-get-involved .way-icon img {
	display: block;
	width: auto;
	height: 34px;
}
.page-get-involved .way h3 {
	margin-bottom: 12px;
	color: var(--green-900);
	font-size: 20px;
}
.page-get-involved .way p {
	flex: 1;
	margin-bottom: 20px;
	color: var(--ink-soft);
	font-size: 16px;
}
.page-get-involved .way-link {
	display: inline-flex;
	align-self: flex-start;
	align-items: center;
	gap: 8px;
	color: var(--gold-dark);
	font-weight: 700;
	font-size: 16px;
	text-decoration: none;
}
.page-get-involved .way-link:hover {
	text-decoration: underline;
}
/* The two cards that leave the page — Donate and the social hub — are the only
   ones whose action is not "fill in the form above", so they carry the cream
   ground and a filled button to say so. */
.page-get-involved .way.feature {
	background: var(--cream);
}
/* Featured cards used to invert the chip. With the chip gone the icon is the
   same blue on both card styles, which is what the frame shows — Donate and
   Spread the word carry the identical treatment to the other four. */
.page-get-involved .way.feature .way-link {
	justify-content: center;
	align-self: stretch;
	transition: background 0.15s ease;
	border-radius: 999px;
	background: var(--green-800);
	padding: 12px 24px;
	color: var(--cream);
}
.page-get-involved .way.feature .way-link:hover {
	background: var(--green-700);
	text-decoration: none;
}

/* --- Why it matters ------------------------------------------------------ */
.page-get-involved .vision .section-label {
	color: var(--muted);
}
.page-get-involved .pillars-grid {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 24px;
	margin-top: 44px;
}
.page-get-involved .pillar {
	border: 1px solid #000;
	border-left: 4px solid #000;
	border-bottom: 4px solid #000;
	border-radius: var(--radius-md);
	background: var(--white);
	padding: 32px 28px;
}
/* The numeral is decoration, not a heading — it carries no information the
   pillar's own title does not, so it is styled rather than marked up. Matches
   the About page's commitment numerals: Outfit italic, not a Barlow label. */
.page-get-involved .pillar-num {
	display: block;
	margin-bottom: 12px;
	color: var(--gold-dark);
	font-style: italic;
	font-weight: 600;
	font-size: 16px;
	font-family: var(--font-display);
}
.page-get-involved .pillar h3 {
	margin-bottom: 12px;
	color: var(--green-900);
	font-size: 20px;
	line-height: 1.38;
}
/* The commitments heading is the 54.221px one in the mockup — 44px here —
   where the rest of this page's section titles are the 49.292px / 40px size. */
.page-get-involved .vision .section-title {
	font-size: clamp(32px, 3.4vw, 44px);
}
.page-get-involved .pillar p {
	color: var(--ink-soft);
	font-size: 16px;
}

/* --- Join the team band -------------------------------------------------- */
.page-get-involved .cta-band {
	background: var(--green-900);
	padding: 76px 0;
	color: var(--cream);
	text-align: center;
}
.page-get-involved .cta-band .section-label {
	color: var(--gold);
}
.page-get-involved .cta-band h2 {
	margin: 0 auto 16px;
	max-width: 26ch;
	font-size: clamp(28px, 3vw, 40px);
}
.page-get-involved .cta-band h2 em {
	/* Plain gold emphasis (no script accent — Caveat is hero-only). */
	color: var(--gold);
	font-style: normal;
	font-weight: 700;
}
.page-get-involved .cta-band p {
	margin: 0 auto 24px;
	max-width: 52ch;
	color: rgba(247, 241, 227, 0.85);
}
.page-get-involved .cta-list {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 12px 32px;
	margin: 0 auto 32px;
	list-style: none;
}
.page-get-involved .cta-list li {
	position: relative;
	padding-left: 28px;
	color: rgba(247, 241, 227, 0.9);
	font-size: 16px;
	text-align: left;
}
.page-get-involved .cta-list li::before {
	position: absolute;
	left: 0;
	content: '\2713';
	color: var(--gold);
	font-weight: 700;
}
.page-get-involved .cta-actions {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	gap: 16px;
}

@media (max-width: 1024px) {
	.page-get-involved .hero-grid {
		grid-template-columns: 1fr;
	}
	.page-get-involved .ways-grid,
	.page-get-involved .pillars-grid {
		grid-template-columns: 1fr 1fr;
	}
	.page-get-involved .foot-grid {
		grid-template-columns: 1fr 1fr;
	}
}
@media (max-width: 640px) {
	.page-get-involved .ways-grid,
	.page-get-involved .pillars-grid,
	.page-get-involved .foot-grid {
		grid-template-columns: 1fr;
	}
	.page-get-involved .nav-cta .btn-outline-light,
	.page-get-involved .btn-subscribe {
		display: none;
	}
	.page-get-involved section {
		padding: 60px 0;
	}
	.page-get-involved .form-card {
		padding: 24px;
	}
	.page-get-involved .field-row {
		grid-template-columns: 1fr;
	}
}

/* =============================================================================
   CONTACT FORM 7 OUTPUT (see inc/forms-cf7.php)
   The form cards were designed as static markup. CF7 re-renders the same fields
   wrapped in its own spans and adds four elements the design never had — a
   status box, per-field error tips, a spinner, and a screen-reader log.

   Scoped to .form-card rather than to one page, so Contact, Subscribe,
   Endorsements and Legends of Langley all inherit it as they are wired up.

   Selectors here deliberately outweigh the plugin's own stylesheet (its
   strongest is .wpcf7 form .wpcf7-response-output) so the result does not
   depend on which stylesheet is enqueued last.
   ========================================================================== */

/* CF7 wraps every control in an inline <span>. Left inline it breaks the
   .field block rhythm and the 100%-width inputs size against the wrong box. */
.form-card .wpcf7-form-control-wrap {
	display: block;
}

/* CF7 emits <input type="submit">, which — unlike the <button> in the design —
   does not inherit the body font. */
.form-card input.wpcf7-submit {
	font-family: var(--font-body);
}

/* --- Consent row ---------------------------------------------------------
   The design had the checkbox and its text as two flex children of .consent.
   [acceptance] nests the checkbox inside its own <label> three spans deep, so
   the original .consent input rule no longer reaches it. Move the flex onto
   CF7's label instead: the layout is identical and clicking the text still
   toggles the box. */
.form-card .consent .wpcf7-list-item {
	display: block;
	margin: 0;
}
.form-card .consent .wpcf7-list-item label {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	cursor: pointer;
}
.form-card .consent input[type="checkbox"] {
	flex: none;
	margin-top: 3px;
}
/* The plugin pads its label with literal spaces; the flex gap already spaces
   the row. */
.form-card .consent .wpcf7-list-item-label::before,
.form-card .consent .wpcf7-list-item-label::after {
	content: none;
}

/* --- Per-field errors ---------------------------------------------------- */
.form-card .wpcf7-not-valid-tip {
	display: block;
	margin-top: 6px;
	color: var(--error);
	font-weight: 600;
	font-size: 12px;
}
.form-card .field input.wpcf7-not-valid,
.form-card .field textarea.wpcf7-not-valid,
.form-card .field select.wpcf7-not-valid {
	border-color: var(--error);
}

/* --- Status box ----------------------------------------------------------
   The plugin ships a 2px box in its own blues, greens and yellows, none of
   which are in this palette. Re-tinted to the brand and given the card's
   corner radius. */
.form-card .wpcf7 form .wpcf7-response-output {
	margin: 20px 0 0;
	border: 1px solid var(--line);
	border-radius: var(--radius-sm);
	background: var(--cream);
	padding: 12px 16px;
	color: var(--ink);
	font-size: 16px;
	line-height: 1.5;
}
.form-card .wpcf7 form.sent .wpcf7-response-output {
	border-color: var(--jade);
}
.form-card .wpcf7 form.invalid .wpcf7-response-output,
.form-card .wpcf7 form.unaccepted .wpcf7-response-output,
.form-card .wpcf7 form.payment-required .wpcf7-response-output {
	border-color: var(--gold);
}
.form-card .wpcf7 form.failed .wpcf7-response-output,
.form-card .wpcf7 form.aborted .wpcf7-response-output,
.form-card .wpcf7 form.spam .wpcf7-response-output {
	border-color: var(--error);
	color: var(--error);
}

/* --- Spinner -------------------------------------------------------------
   Injected immediately after the submit button, which is full-width here, so
   the default side margins would push it off-centre on its own line. */
.form-card .wpcf7-spinner {
	display: block;
	margin: 12px auto 0;
	background-color: var(--green-800);
}

/* =============================================================================
   GRAVITY FORMS OUTPUT (see inc/forms-gravity.php)
   Gravity Forms drives the live forms. Unlike Contact Form 7 — whose editor
   held this theme's own markup, so its forms inherited the .field rules above
   and needed only small overrides — Gravity Forms generates its own markup and
   ships a themed stylesheet in a palette that is not this one. inc/forms-gravity.php
   turns that stylesheet off, so everything below is the form's entire
   appearance rather than a set of corrections on top of the plugin's.

   The markup being styled, per field:

     div.gfield.gfield--width-{half,full}    ← the .field block
       label.gfield_label                    ← the .field label
         span.gform-field-label__text
         span.gfield_required_asterisk       ← the .req asterisk
       div.ginput_container                  ← wrapper around the control
         input | select | textarea
       div.gfield_validation_message         ← per-field error

   Scoped to .form-card rather than to one page, so Contact, Subscribe,
   Endorsements and Legends of Langley all inherit it as they are wired up. The
   plugin still prints a small inline <style> of unused --gf-* custom
   properties; with its stylesheets disabled nothing reads them.
   ========================================================================== */

/* --- Field grid ----------------------------------------------------------
   The plugin lays its fields out on a 12-column grid and marks each field's
   span with a `gfield--width-*` class. That is the same idea as the design's
   .field-row, so the grid is reproduced here and the two-column name row falls
   out of the two half-width fields the form defines. */
.form-card .gform_fields {
	display: grid;
	grid-template-columns: repeat(12, 1fr);
	gap: 0 16px;
	margin: 0;
	padding: 0;
	list-style: none;
}
.form-card .gfield {
	grid-column: span 12;
	margin-bottom: 16px;
	min-width: 0;
}
.form-card .gfield--width-half {
	grid-column: span 6;
}
@media (max-width: 640px) {
	/* Matches the .field-row collapse at the same breakpoint. */
	.form-card .gfield--width-half {
		grid-column: span 12;
	}
}

/* --- The required-field note --------------------------------------------
   inc/forms-gravity.php rewords this to the design's copy; here it takes the
   place of the .form-note paragraph the placeholder form renders. */
.form-card .gform_required_legend {
	margin-bottom: 24px;
	color: var(--ink-soft);
	font-size: 12px;
}
.form-card .gfield_required_asterisk,
.form-card .gform_required_legend .gfield_required {
	color: var(--gold-dark);
}

/* --- Labels and controls -------------------------------------------------
   Values match the .field rules above; the plugin's label is a <label> with
   its text in a nested span, and complex fields use <legend> instead. */
.form-card .gfield_label {
	display: block;
	margin-bottom: 8px;
	color: var(--green-900);
	font-weight: 700;
	font-size: 12px;
}
/* The design writes "First name *"; the plugin puts the asterisk flush
   against the label text with no separating space. */
.form-card .gfield_label .gfield_required {
	margin-left: 0.25em;
}
.form-card .ginput_container input,
.form-card .ginput_container textarea,
.form-card .ginput_container select {
	border: 1px solid var(--line);
	border-radius: var(--radius-sm);
	background: var(--white);
	padding: 12px 16px;
	width: 100%;
	color: var(--ink);
	font-size: 16px;
	font-family: var(--font-body);
}
/* The design sizes the message box with min-height and lets the visitor drag
   it taller. The plugin sets rows='10', which would otherwise stand the box up
   at roughly twice the designed height, so the height is stated outright. */
.form-card .ginput_container textarea {
	height: 130px;
	min-height: 130px;
	resize: vertical;
}
.form-card .ginput_container input:focus,
.form-card .ginput_container textarea:focus,
.form-card .ginput_container select:focus {
	outline: 3px solid var(--gold);
	outline-offset: 1px;
	border-color: var(--gold-dark);
}
/* --- Checkbox group ------------------------------------------------------
   The Get Involved form's "How would you like to help?" question. The plugin
   renders a checkbox field as a <fieldset> whose <legend> carries the
   gfield_label class styled above, wrapping a .gfield_checkbox container of
   .gchoice rows. Everything here selects on those classes rather than on the
   elements, because Gravity Forms has shipped that container as both a list
   and a set of divs across versions — it is divs as of 2.9. The design's
   two-column grid goes on the container, and each row becomes the click target
   rather than the 16px box alone, which is what makes the question usable on a
   phone.

   The control rules above give every input inside a .ginput_container a full
   width, a border and 12px of padding; a checkbox needs none of that, hence
   the reset here. */
.form-card .gfield--type-checkbox {
	border: 0;
	padding: 0;
}
.form-card legend.gfield_label {
	padding: 0;
}
.form-card .gfield_checkbox {
	display: flex;
	flex-wrap: wrap;
	gap: 8px;
	margin: 0;
	padding: 0;
	list-style: none;
}
/* The row is the click target, not the 15px box — .gchoice carries the chip
   and the label inside it stretches to fill it, so the padding is clickable
   too. Wrapping is left to the flex container: chips size to their own label,
   which is what keeps six options of very different lengths from stacking into
   a tall ragged grid. See the .help-option note in the Get Involved page
   section for the reasoning. */
.form-card .gfield_checkbox .gchoice {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	transition:
		border-color 0.15s ease,
		background 0.15s ease;
	border: 1.5px solid var(--line);
	border-radius: 999px;
	padding: 7px 14px;
}
.form-card .gfield_checkbox .gchoice:hover {
	border-color: var(--gold-dark);
}
.form-card .gfield_checkbox .gchoice:has(input:checked) {
	border-color: var(--green-800);
	background: #eef3f9;
}
/* Outline only. Elsewhere on the site a focused control also darkens its
   border, but here the border is what says "selected" — repainting it would
   make a checked chip look unchecked for as long as it has focus. */
.form-card .gfield_checkbox .gchoice:focus-within {
	outline: 3px solid var(--gold);
	outline-offset: 1px;
}
/* The box inside the chip is also an input, so the control rules above give it
   its own gold ring — two concentric rings for one focused thing. The chip's
   is the one that matches the target you actually click, so the inner one goes.
   Focus is still indicated; it is drawn once instead of twice. */
.form-card .gfield_checkbox input[type="checkbox"]:focus {
	outline: none;
}
.form-card .gfield_checkbox input[type="checkbox"] {
	flex: none;
	accent-color: var(--green-800);
	cursor: pointer;
	margin: 0;
	border: 0;
	background: none;
	padding: 0;
	width: 15px;
	height: 15px;
}
/* No white-space: nowrap. It would hold every chip on one line at any width,
   and the longest label plus its chrome overflows the card below about a
   300px screen. Letting a chip wrap on the narrowest phones is the graceful
   version of that. */
.form-card .gfield_checkbox label {
	margin: 0;
	color: var(--ink);
	font-weight: 500;
	font-size: 12px;
	line-height: 1.3;
	cursor: pointer;
}
.form-card .gfield_checkbox .gchoice:has(input:checked) label {
	color: var(--green-900);
	font-weight: 700;
}

/* --- Consent row ---------------------------------------------------------
   A consent field is a <fieldset> whose <legend> is marked hidden_label — the
   design has no heading above the checkbox, only the sentence beside it. It
   still names the fieldset for assistive technology, so it is hidden visually
   rather than removed. */
.form-card .gfield--type-consent.hidden_label > .gfield_label {
	position: absolute;
	clip-path: inset(50%);
	width: 1px;
	height: 1px;
	overflow: hidden;
	white-space: nowrap;
}
.form-card .gfield--type-consent {
	margin: 20px 0 24px;
	border: 0;
	padding: 0;
}
.form-card .ginput_container_consent {
	display: flex;
	align-items: flex-start;
	gap: 12px;
	color: var(--ink-soft);
	font-size: 12px;
}
/* Overrides the 100% width the control rules above give every input. */
.form-card .ginput_container_consent input[type="checkbox"] {
	flex: none;
	margin-top: 3px;
	padding: 0;
	width: auto;
}
.form-card .gfield_consent_label {
	margin: 0;
	color: inherit;
	font-weight: 400;
	font-size: inherit;
	cursor: pointer;
}

/* --- Submit --------------------------------------------------------------
   inc/forms-gravity.php gives the button the site's .btn.btn-green classes, so
   only the design's full-width treatment is left to state. */
.form-card .gform_footer {
	margin: 0;
	padding: 0;
}
.form-card .gform_footer .gform_button {
	justify-content: center;
	width: 100%;
}

/* --- Errors --------------------------------------------------------------
   The plugin ships its errors in its own reds on a tinted panel; re-tinted to
   the brand and given the card's corner radius, matching the CF7 block. */
.form-card .gfield_validation_message {
	margin-top: 6px;
	color: var(--error);
	font-weight: 600;
	font-size: 12px;
}
.form-card .gfield_error .ginput_container input,
.form-card .gfield_error .ginput_container textarea,
.form-card .gfield_error .ginput_container select {
	border-color: var(--error);
}
/* The summary the plugin puts above a failed form. The design never had one —
   it is kept because it takes focus on failure and links to each field that
   needs fixing, which the per-field messages alone cannot do — and re-tinted
   to the brand, like the CF7 status box above it. */
.form-card .gform_validation_errors {
	margin: 0 0 20px;
	border: 1px solid var(--error);
	border-radius: var(--radius-sm);
	background: var(--cream);
	padding: 12px 16px;
	color: var(--error);
	font-size: 16px;
	line-height: 1.5;
}
.form-card .gform_validation_errors > h2 {
	margin: 0;
	color: inherit;
	font-size: 16px;
}
.form-card .gform_validation_errors ol {
	margin: 8px 0 0;
	padding-left: 20px;
}
.form-card .gform_validation_error_link {
	color: inherit;
}
/* An icon-font glyph from the stylesheet this theme does not load; without it
   the span is an empty box the summary heading still has to make room for. */
.form-card .gform_validation_errors .gform-icon {
	display: none;
}

/* --- Confirmation --------------------------------------------------------
   Only seen when the visitor has JavaScript disabled or the redirect in
   assets/script.js does not fire; otherwise a successful submission leaves for
   the thank-you page. Styled anyway so that fallback is not unstyled. */
.form-card .gform_confirmation_message {
	border: 1px solid var(--jade);
	border-radius: var(--radius-sm);
	background: var(--cream);
	padding: 12px 16px;
	color: var(--ink);
	font-size: 16px;
	line-height: 1.5;
}

/* The plugin's AJAX iframe is display:none inline, but it is still a grid item
   of the card and the anchor div leaves a gap above the heading. */
.form-card .gform_anchor {
	display: block;
	height: 0;
}

/* Get Involved — the platform link beside the three commitments. Block-level so
   it sits on its own line under the heading, where the paragraph it replaced was. */
/* Matches the same link on the home page: a bordered blue pill, not a
   plain text link — that is how the mockup draws it. */
.page-get-involved .vision-link {
	display: inline-block;
	margin-bottom: 32px;
}
