/*
 * Maine AA Area 28 — theme base + component styles (Phase 1, GP-native reshape).
 * Maine AA Area 28 · GeneratePress child theme
 * ---------------------------------------------------------------------------
 * Adapted from the VALIDATED playground (.scratch/pg-shell.html); its .st-*
 * components are renamed to .maineaa-* here, keeping the exact structure,
 * spacing, radii, shadows and responsive rules.
 *
 * COLOR SOURCE (reshape §5): the palette is no longer authored here. Our engine
 * derives it and writes GeneratePress's own global_colors (inc/gp-populate.php),
 * so GP emits it natively as :root{--contrast…--accent-2…}. Components read
 * those GP vars DIRECTLY — the old html:root override bridge is gone. The engine
 * tokens fold onto GP slots per §5:
 *   ink→--contrast   muted→--contrast-2   dim→--contrast-3
 *   soft→--base   bg→--base-2   surface→--base-3   brand→--accent   accent→--accent-2
 * Only the 6 guarded helpers GP's 7-slot model can't express survive as
 * --maineaa-* (brand-text, on-brand, brand-dark, on-accent, line, border-strong),
 * emitted inline by MaineAA_Token_CSS; plus the non-color scales (space/radius/
 * type/shadow/font) in tokens.css. Light-only — the reshape dropped dark mode.
 *
 * Layering:
 *   L2  Targeted GP chrome + global base (body/headings/links/buttons/…)
 *   L3  Content components GP does NOT provide (hero, cards, tabs, …)
 *   L4  A11y utilities (skip-link, sr-only, font-size control)
 *   L5  Reduced-motion
 *
 * Type scaling: the A-/A/A+ control (theme.js) writes --maineaa-font-scale on
 * <html>; every type size is calc(<size> * var(--maineaa-font-scale)) so the
 * control scales the whole typographic surface. Do NOT re-declare the scales
 * from tokens.css here — this file only consumes them.
 *
 * See .implans/phase-1-gp-native-reshape.md §5.
 */

/* ==========================================================================
   Tier discipline  (reshape §5)
   --------------------------------------------------------------------------
   GeneratePress emits the derived palette natively on :root (--contrast{,-2,-3},
   --base{,-2,-3}, --accent, plus the custom --accent-2 — all written by
   inc/gp-populate.php from our engine), so the components below read those GP
   vars DIRECTLY. There is no override bridge.

   --contrast-3 is the lowest-contrast text token (meets non-text 3.0, NOT body
   4.5). Per H-4 (WCAG 1.4.3), NO text in this file is colored with it — every
   glyph, down to the faintest doc/card/sidebar meta, uses --contrast-2
   (secondary) or --contrast (primary). Hairlines/borders use --maineaa-line. */

/* ==========================================================================
   L2 — Global base + targeted GP chrome  (Wave4 §1c)
   --------------------------------------------------------------------------
   A thin set of single-class / element rules for the handful of GP chrome
   pieces whose role our model splits differently than GP's flat ramp
   (page-canvas vs surface; link-text = brand-text; button on-color). GP's
   canonical selectors at single-class specificity — no !important.
   ========================================================================== */

body {
  background: var(--base-2);
  color: var(--contrast);
  font-family: var(--maineaa-font-body);
  font-size: calc(var(--maineaa-text-base) * var(--maineaa-font-scale));
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
  text-rendering: optimizeLegibility;
}

/* H-1 — responsive heading sizes from the tokens.css type ladder (:47-53) +
   Eric's -0.01em tracking. GP's main.min.css hard-codes fixed px (h1 42 / h2 35 /
   h3 29 …) with no media query; theme.css prints after it, so these (0,0,1) rules
   tie on specificity and win on source order. Weight stays GP-native (the
   typography store assigns all-headings → Syne 500). Sizes carry the A-/A/A+
   font-scale like every other type size in this file. */
h1, h2, h3, h4, h5, h6 {
  color: var(--contrast);
  font-family: var(--maineaa-font-display);
  letter-spacing: -.01em;
}
h1 { font-size: calc(var(--maineaa-text-3xl)  * var(--maineaa-font-scale)); }
h2 { font-size: calc(var(--maineaa-text-2xl)  * var(--maineaa-font-scale)); }
h3 { font-size: calc(var(--maineaa-text-xl)   * var(--maineaa-font-scale)); }
h4 { font-size: calc(var(--maineaa-text-lg)   * var(--maineaa-font-scale)); }
h5 { font-size: calc(var(--maineaa-text-md)   * var(--maineaa-font-scale)); }
/* Item 9 — H6 is the only heading that maps to body size (--maineaa-text-base);
   on narrow viewports the clamp bottoms at 1rem/16px, which puts Syne below its
   ~18px legibility floor. max() lifts H6's floor to 1.125rem (18px) so no
   heading equals body size and Syne never renders sub-18px. H1–H5 already clear
   body (H4 = text-lg ≈ 23–26px), so the plan's "H4 = body" premise is stale and
   H1–H5 need no change. */
h6 { font-size: calc(max(1.125rem, var(--maineaa-text-base)) * var(--maineaa-font-scale)); }

/* Content links — the brand-text token (an AA-legible teal on our light
   surfaces; the reading-legible variant of --accent, which GP uses to color bare
   <a> links). Broad on purpose: this base rule is NOT hand-scoped away from
   nav/buttons — their own higher-specificity FILL rules (GP's site-title +
   .main-navigation … a below, .button, .maineaa-btn*) win over a bare `a`, so it
   only reaches content / widget / entry / comment links. hover/focus re-assert
   the same token; no text-decoration here, so nav chrome is untouched. */
a {
  color: var(--maineaa-brand-text);
}
a:hover,
a:focus {
  color: var(--maineaa-brand-text);
}

/* Item 8 — inline body-content links carry an underline (WCAG 1.4.1). Nav,
   buttons, pathway pills and cards keep their own no-underline treatment; the
   :not() guards keep block/GP buttons that live inside .entry-content clean. */
.entry-content a:not(.button):not(.wp-element-button):not(.wp-block-button__link),
.maineaa-panel__body a {
  text-decoration: underline;
  text-underline-offset: 0.2em;
  text-decoration-thickness: from-font;
}

::selection {
  background: var(--accent);
  color: var(--maineaa-on-brand);
}

/* Focus-visible ring — brand-text is AA-legible on our light surfaces. */
a:focus-visible,
button:focus-visible,
input:focus-visible,
select:focus-visible,
textarea:focus-visible,
summary:focus-visible,
[tabindex]:focus-visible {
  outline: 2px solid var(--maineaa-brand-text);
  outline-offset: 2px;
  border-radius: var(--maineaa-radius-sm);
}

/* H-6 — the doc rows, accordion summaries and A-/A/A+ buttons live inside
   overflow:hidden wrappers (.maineaa-doclist / .maineaa-accordion /
   .maineaa-font-size), which clip the offset outline above (WCAG 2.4.11 fail: a
   single-item list loses all four sides). Swap to an INSET box-shadow ring —
   painted inside the border box, so the wrapper's clip can never reach it. These
   selectors out-specify the generic *:focus-visible rule above. */
.maineaa-doc:focus-visible,
.maineaa-accordion summary:focus-visible,
.maineaa-font-size__btn:focus-visible {
  outline: none;
  box-shadow: inset 0 0 0 2px var(--maineaa-brand-text);
}

/* --- GP header / nav / footer chrome --------------------------------------
   GP renders these; we only re-tint them from the token bridge. */
.site-header {
  background: var(--base-3);
}

.main-navigation,
.main-navigation .inside-navigation {
  background: var(--base-3);
}

.main-navigation .main-nav ul li a {
  color: var(--contrast);
}

.main-navigation .main-nav ul li:hover > a,
.main-navigation .main-nav ul li[class*="current-menu"] > a {
  color: var(--maineaa-brand-text);
}

.main-navigation ul ul {
  background: var(--base-3);
  border-color: var(--maineaa-line);
}

/* Item 3 — minimal floating navbar. MOBILE-ONLY (≤768px): GP's drawer only
   functions ≤768px, so a hamburger trigger is meaningful only there; on desktop
   the persistent help pill (item 5) covers always-available access and the nav
   returns on scroll-up. Hidden off-canvas until JS adds --visible on scroll past
   the header. Fill/border/shadow all tokenized. */
.maineaa-floatnav {
  display: none;
}
.maineaa-floatnav__title {
  font-family: var(--maineaa-font-display);
  font-weight: 600;
  font-size: calc(1.125rem * var(--maineaa-font-scale));
  color: var(--contrast);
  text-decoration: none;
}
.maineaa-floatnav__toggle {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: var(--maineaa-space-2);
  background: transparent;
  border: 0;
  color: var(--contrast);
  cursor: pointer;
  border-radius: var(--maineaa-radius-sm);
}
.maineaa-floatnav__icon svg {
  display: block;
  width: 1.5rem;
  height: 1.5rem;
}
@media (max-width: 768px) {
  .maineaa-floatnav {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    z-index: 9999;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: var(--maineaa-space-3);
    padding: var(--maineaa-space-3) var(--maineaa-space-5);
    background: var(--base-3);
    border-bottom: 1px solid var(--maineaa-line);
    transform: translateY(-100%);
    transition: transform 0.25s ease;
    /* Off-canvas: remove from tab order + a11y tree so keyboard/SR users don't
       hit the phantom title link + toggle before the bar slides in (WCAG 2.4.3,
       2.4.7, 1.3.2). Snaps (no transition on visibility) — reduced-motion path
       unchanged. */
    visibility: hidden;
  }
  .maineaa-floatnav--visible {
    transform: translateY(0);
    box-shadow: var(--maineaa-shadow-md);
    visibility: visible;
  }
}
/* When the float-nav bar is visible and the user taps ITS hamburger, GP opens
   #site-navigation in-flow at the header's original (scrolled-off) position —
   far above the viewport, so the menu appears dead. While the bar is active
   (body.maineaa-floatnav-active, set by theme.js), pin GP's opened .toggled
   drawer as a fixed overlay dropping down directly beneath the bar. GP's
   menu.min.js keeps owning open/close/aria/focus — this only relocates WHERE the
   already-open menu renders. z-index sits below the bar (9999) so the bar stays
   on top; covering the help bar (9998) while open is acceptable. */
@media (max-width: 768px) {
  body.maineaa-floatnav-active #site-navigation.toggled {
    position: fixed;
    /* 4rem ≈ the bar's rendered height (padding var(--maineaa-space-3) around a
       1.5rem icon + title); the menu drops flush under it. */
    top: 4rem;
    /* GP gives #site-navigation a default top margin (header↔nav spacing); as a
       fixed overlay that margin only opens a gap below the bar — collapse it. */
    margin-top: 0;
    left: 0;
    right: 0;
    max-height: calc(100vh - 4rem);
    overflow-y: auto;
    z-index: 9998;
    box-shadow: var(--maineaa-shadow-lg);
  }
}

/* Guardrail: kill the slide for reduced-motion users (the only new transition
   in this wave). */
@media (prefers-reduced-motion: reduce) {
  .maineaa-floatnav {
    transition: none;
  }
}

/* Mobile burger — token-colored only; GP owns the drawer behavior. */
.main-navigation .menu-toggle,
.main-navigation .menu-bar-items {
  color: var(--contrast);
}

/* Item 4 — hide the display controls from the mobile bar (they eat header
   width next to the hamburger); reveal the ALREADY-rendered second copy inside
   the slide-out drawer when it is open. CSS-only: GP renders .maineaa-controls
   twice, so no PHP/JS. 768px = GP's real mobile breakpoint. The leading `body`
   raises specificity to (1,4,1) so the reveal beats GP's own
   `.has-inline-mobile-toggle #site-navigation .inside-navigation > *:not(...)`
   hide rule (1,4,0). */
@media (max-width: 768px) {
  #mobile-menu-control-wrapper .maineaa-controls {
    display: none;
  }
  body.has-inline-mobile-toggle #site-navigation.toggled .inside-navigation > .menu-bar-items {
    display: flex;
  }
}

.site-footer,
.site-info {
  background: var(--base-3);
  color: var(--contrast-2);
}

/* --- GP / block-editor buttons --------------------------------------------
   H-5/P-7: paint every GP-core + block button teal-on-brand at pill radius and
   weight 600. The sidebar Search submit is
   <button class="wp-block-search__button wp-element-button"> — matched ONLY by
   .wp-element-button, whose WP-core rule is `:root :where(.wp-element-button)`
   (0,1,0) and paints it grey/square. `:root .wp-element-button` (0,2,0) prints
   after WP-core's global styles and wins. */
.button,
button.button,
input[type="submit"],
.wp-block-button__link,
:root .wp-element-button {
  background: var(--accent);
  color: var(--maineaa-on-brand);
  border-radius: var(--maineaa-radius-pill);
  font-weight: 600;
}

.button:hover,
.button:focus,
button.button:hover,
button.button:focus,
input[type="submit"]:hover,
input[type="submit"]:focus,
.wp-block-button__link:hover,
.wp-block-button__link:focus,
:root .wp-element-button:hover,
:root .wp-element-button:focus {
  background: var(--maineaa-brand-dark);
  color: var(--maineaa-on-brand);
}

/* ==========================================================================
   L3 — Content components  (Wave4 §Decision 2; from pg-shell.html .st-*)
   ========================================================================== */

/* --- Hero band (owns the single <h1>) — pg-shell.html L256-260 ------------- */
.maineaa-hero {
  padding: var(--maineaa-space-8) var(--maineaa-space-6);
  background: linear-gradient(160deg, var(--base), var(--base-3));
  border-bottom: 1px solid var(--maineaa-line);
}
.maineaa-hero__eyebrow {
  font-family: var(--maineaa-font-body);
  font-size: calc(.78rem * var(--maineaa-font-scale));
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--maineaa-brand-text);
  font-weight: 700;
  margin: 0 0 var(--maineaa-space-3);
}
.maineaa-hero__title {
  font-family: var(--maineaa-font-display);
  font-weight: 500; /* syne-500: Eric's heading weight */
  font-size: calc(var(--maineaa-text-3xl) * var(--maineaa-font-scale));
  line-height: 1.08;
  letter-spacing: -.02em;
  margin: 0 0 var(--maineaa-space-4);
  color: var(--contrast);
  text-wrap: balance;
  max-width: 18ch;
}
.maineaa-hero__lede {
  font-size: calc(var(--maineaa-text-md) * var(--maineaa-font-scale));
  color: var(--contrast-2);
  max-width: 46ch;
  margin: 0 0 var(--maineaa-space-6);
  line-height: 1.5;
}
.maineaa-hero__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--maineaa-space-3);
}

/* --- Buttons (pill; on-brand / on-accent) — pg-shell.html L263-268 --------- */
.maineaa-btn {
  font-family: var(--maineaa-font-body);
  font-size: calc(.98rem * var(--maineaa-font-scale));
  font-weight: 600;
  padding: calc(var(--maineaa-space-3) + 1px) var(--maineaa-space-5);
  border-radius: var(--maineaa-radius-pill);
  border: 1.5px solid transparent;
  cursor: pointer;
  text-decoration: none;
  display: inline-flex;
  align-items: center;
  gap: var(--maineaa-space-2);
  line-height: 1;
}
.maineaa-btn--primary {
  background: var(--accent);
  color: var(--maineaa-on-brand);
  box-shadow: var(--maineaa-shadow-sm);
}
.maineaa-btn--primary:hover {
  background: var(--maineaa-brand-dark);
}
.maineaa-btn--accent {
  background: var(--accent-2);
  color: var(--maineaa-on-accent);
  box-shadow: var(--maineaa-shadow-sm);
}
.maineaa-btn--ghost {
  background: transparent;
  color: var(--maineaa-brand-text);
  border-color: var(--maineaa-border-strong);
}
.maineaa-btn--ghost:hover {
  border-color: var(--accent);
  background: var(--base);
}

/* --- Section rhythm — pg-shell.html L271-276 ------------------------------- */
.maineaa-section {
  padding: var(--maineaa-space-7) var(--maineaa-space-6);
}
.maineaa-section + .maineaa-section {
  border-top: 1px solid var(--maineaa-line);
}
.maineaa-section__head {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: var(--maineaa-space-4);
  margin-bottom: var(--maineaa-space-5);
}
.maineaa-section__head h2,
.maineaa-section__title {
  font-family: var(--maineaa-font-display);
  font-weight: 500; /* syne-500: Eric's heading weight */
  font-size: calc(var(--maineaa-text-xl) * var(--maineaa-font-scale));
  margin: 0;
  letter-spacing: -.01em;
  color: var(--contrast);
}
.maineaa-section__more {
  color: var(--maineaa-brand-text);
  text-decoration: none;
  font-size: calc(.9rem * var(--maineaa-font-scale));
  font-weight: 600;
  white-space: nowrap;
}
.maineaa-section__more:hover {
  text-decoration: underline;
}

/* --- Card grid + cards — pg-shell.html L279-288 ---------------------------- */
.maineaa-cardgrid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr));
  gap: var(--maineaa-space-5);
}
/* Assemblies are feature items (usually just one upcoming). Wider tracks +
   auto-fit so a lone assembly stretches full-width instead of sitting narrow,
   while several still flow into columns. */
.maineaa-cardgrid--assembly {
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 24rem), 1fr));
}
.maineaa-card,
.maineaa-event-card {
  background: var(--base-3);
  border: 1px solid var(--maineaa-line);
  border-radius: var(--maineaa-radius);
  box-shadow: var(--maineaa-shadow-sm);
  padding: var(--maineaa-space-5);
  display: flex;
  flex-direction: column;
  gap: var(--maineaa-space-2);
}
.maineaa-card:hover,
.maineaa-event-card:hover {
  box-shadow: var(--maineaa-shadow-md);
}
.maineaa-card h3,
.maineaa-card__title,
.maineaa-event-card h3 {
  font-family: var(--maineaa-font-display);
  font-weight: 500; /* syne-500: Eric's heading weight */
  font-size: calc(var(--maineaa-text-md) * var(--maineaa-font-scale));
  margin: 2px 0 0;
  line-height: 1.2;
  color: var(--contrast);
}
.maineaa-card p,
.maineaa-event-card p {
  margin: 2px 0 0;
  font-size: calc(.92rem * var(--maineaa-font-scale));
  color: var(--contrast-2);
  line-height: 1.5;
}
.maineaa-card__meta {
  font-size: calc(.82rem * var(--maineaa-font-scale));
  color: var(--contrast-2); /* H-4: was --contrast-3 (event date failed 4.5:1) */
  font-weight: 500;
}
.maineaa-card__kv {
  display: flex;
  gap: var(--maineaa-space-2);
  font-size: calc(.86rem * var(--maineaa-font-scale));
}
.maineaa-card__kv b {
  color: var(--contrast);
  font-weight: 600;
}
.maineaa-card__kv span {
  color: var(--contrast-2);
}

/* --- Chip / pill (reusable + card + event) — pg-shell.html L282-283 -------- */
.maineaa-chip,
.maineaa-card__chip {
  align-self: flex-start;
  font-size: calc(.72rem * var(--maineaa-font-scale));
  font-weight: 700;
  letter-spacing: .05em;
  text-transform: uppercase;
  color: var(--maineaa-on-accent);
  background: var(--accent-2);
  padding: 3px 9px;
  border-radius: var(--maineaa-radius-pill);
}
.maineaa-chip--soft,
.maineaa-card__chip--soft {
  color: var(--maineaa-brand-text);
  background: var(--base);
}

/* --- Split: main + committee sidebar — pg-shell.html L291-299 -------------- */
.maineaa-split {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--maineaa-space-6);
}
@media (min-width: 800px) {
  .maineaa-split {
    grid-template-columns: 1.7fr 1fr;
  }
}
.maineaa-sidebar {
  background: var(--base);
  border: 1px solid var(--maineaa-line);
  border-radius: var(--maineaa-radius-lg);
  padding: var(--maineaa-space-5);
  align-self: start;
}
.maineaa-sidebar h3,
.maineaa-sidebar__title {
  font-family: var(--maineaa-font-display);
  font-weight: 500; /* syne-500: Eric's heading weight (was heading-default) */
  margin: 0 0 var(--maineaa-space-3);
  font-size: calc(var(--maineaa-text-md) * var(--maineaa-font-scale));
  color: var(--contrast);
}
.maineaa-sidebar__row {
  display: flex;
  justify-content: space-between;
  gap: var(--maineaa-space-3);
  padding: var(--maineaa-space-3) 0;
  border-top: 1px solid var(--maineaa-line);
  font-size: calc(.9rem * var(--maineaa-font-scale));
}
.maineaa-sidebar__row:first-of-type {
  border-top: 0;
}
.maineaa-sidebar__row span {
  color: var(--contrast-2); /* H-4: was --contrast-3 (label failed 4.5:1) */
}
.maineaa-sidebar__row b {
  color: var(--contrast);
  font-weight: 600;
  text-align: right;
}
.maineaa-sidebar__vacancy {
  margin-top: var(--maineaa-space-4);
  padding: var(--maineaa-space-3) var(--maineaa-space-4);
  border-radius: var(--maineaa-radius-sm);
  background: var(--base-3);
  border: 1px dashed var(--maineaa-border-strong);
  font-size: calc(.85rem * var(--maineaa-font-scale));
  color: var(--contrast-2);
}
.maineaa-sidebar__vacancy a {
  color: var(--maineaa-brand-text);
  font-weight: 600;
}

/* --- Tabs (ARIA; behavior in theme.js) — pg-shell.html L302-306 ------------ */
.maineaa-tabs__list {
  display: flex;
  flex-wrap: wrap;
  gap: 2px;
  border-bottom: 1px solid var(--maineaa-line);
  margin-bottom: var(--maineaa-space-4);
}
.maineaa-tab {
  appearance: none;
  border: 0;
  background: transparent;
  font-family: var(--maineaa-font-body);
  font-size: calc(.95rem * var(--maineaa-font-scale));
  font-weight: 600;
  color: var(--contrast-2);
  padding: var(--maineaa-space-3) var(--maineaa-space-4);
  cursor: pointer;
  border-bottom: 2.5px solid transparent;
  margin-bottom: -1px;
}
.maineaa-tab[aria-selected="true"] {
  color: var(--maineaa-brand-text);
  border-bottom-color: var(--accent);
}
/* Keep the tab transparent on hover/focus: bare <button> otherwise inherits the
   GP/core button teal fill, which lands teal-on-teal (illegible). Signal with a
   colour + a soft underline hint instead. */
.maineaa-tab:hover,
.maineaa-tab:focus {
  background: transparent;
  color: var(--maineaa-brand-text);
}
.maineaa-tab:not([aria-selected="true"]):hover {
  border-bottom-color: var(--maineaa-line);
}
.maineaa-tabpanel {
  font-size: calc(.94rem * var(--maineaa-font-scale));
  color: var(--contrast-2);
  line-height: 1.6;
}
.maineaa-tabpanel[hidden] {
  display: none;
}

/* --- Accordion (native <details>/<summary>) — pg-shell.html L309-315 ------- */
.maineaa-accordion {
  border: 1px solid var(--maineaa-line);
  border-radius: var(--maineaa-radius);
  overflow: hidden;
  background: var(--base-3);
}
.maineaa-accordion details + details {
  border-top: 1px solid var(--maineaa-line);
}
.maineaa-accordion summary {
  cursor: pointer;
  padding: var(--maineaa-space-4) var(--maineaa-space-5);
  font-family: var(--maineaa-font-body);
  font-weight: 600;
  font-size: calc(.98rem * var(--maineaa-font-scale));
  color: var(--contrast);
  list-style: none;
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: var(--maineaa-space-3);
}
.maineaa-accordion summary::-webkit-details-marker {
  display: none;
}
.maineaa-accordion summary::after {
  content: "+";
  color: var(--maineaa-brand-text);
  font-size: 1.2em;
  font-weight: 700;
  line-height: 1;
}
.maineaa-accordion details[open] summary::after {
  content: "\2013"; /* en dash */
}
.maineaa-accordion__body {
  padding: 0 var(--maineaa-space-5) var(--maineaa-space-4);
  font-size: calc(.92rem * var(--maineaa-font-scale));
  color: var(--contrast-2);
  line-height: 1.6;
}

/* --- Document list — pg-shell.html L318-327 ------------------------------- */
.maineaa-doclist {
  display: flex;
  flex-direction: column;
  /* Reset the list box: this is a bordered card container, NOT a content list.
     GeneratePress styles content `ul` with margin: 0 0 1.5em 3em — that 3em
     left margin was insetting the whole doc-list ~48px past its heading/siblings
     (glaring on a ~380px mobile column, subtle on desktop). Zero it so the card
     aligns to the content edge like every other block. */
  margin: 0;
  padding: 0;
  list-style: none;
  border: 1px solid var(--maineaa-line);
  border-radius: var(--maineaa-radius);
  overflow: hidden;
}
.maineaa-doc {
  display: flex;
  align-items: center;
  gap: var(--maineaa-space-4);
  padding: var(--maineaa-space-4) var(--maineaa-space-5);
  background: var(--base-3);
  text-decoration: none;
  color: inherit;
}
/* P-6: each row is wrapped in its own <li> (doc-list-item.php), so no two
   .maineaa-doc are adjacent siblings — the inter-row separator must key off
   adjacent list items instead. */
.maineaa-doclist li + li .maineaa-doc {
  border-top: 1px solid var(--maineaa-line);
}
.maineaa-doc:hover {
  background: var(--base);
}
.maineaa-doc__icon {
  width: 34px;
  height: 34px;
  flex: none;
  border-radius: var(--maineaa-radius-sm);
  background: var(--base);
  color: var(--maineaa-brand-text);
  display: grid;
  place-items: center;
  font-family: var(--maineaa-font-body);
  font-size: 10px;
  font-weight: 700;
  letter-spacing: .02em;
  border: 1px solid var(--maineaa-line);
}
.maineaa-doc__title {
  flex: 1;
  min-width: 0;
}
/* H-2: doc-list-item.php emits .maineaa-doc__name (the document title) and
   .maineaa-doc__meta (the secondary line) — NOT `b`/`span`. Title is primary
   ink/bold; meta is secondary (H-4: --contrast-2, was the failing --contrast-3). */
.maineaa-doc__name {
  display: block;
  font-size: calc(.95rem * var(--maineaa-font-scale));
  color: var(--contrast);
  font-weight: 600;
}
.maineaa-doc__meta {
  display: block;
  font-size: calc(.8rem * var(--maineaa-font-scale));
  color: var(--contrast-2);
}
.maineaa-doc__tag {
  font-family: var(--maineaa-font-body);
  font-size: calc(.68rem * var(--maineaa-font-scale));
  letter-spacing: .04em;
  color: var(--contrast-2);
  border: 1px solid var(--maineaa-border-strong);
  padding: 2px 7px;
  border-radius: var(--maineaa-radius-pill);
  white-space: nowrap;
}
.maineaa-doc__ext {
  color: var(--maineaa-brand-text);
  font-weight: 700;
}

/* H-3 — below 480px the fixed 34px icon + non-shrinking tag can squeeze the
   title flex item to ~0 (one glyph per line, ~1000px row height). Wrap the title
   to its own full-width line so it reads as a normal stacked row — BUT only for
   rows that actually carry an icon or tag (the squeeze case). A SIMPLE row (just
   a title + the trailing ↗ affordance — e.g. the Service-resources links) has
   nothing squeezing the title; forcing it full-width there only orphans the ↗
   onto its own line. Scope the full-width title to icon/tag rows so simple rows
   keep the title + right-aligned ↗ on one line, matching desktop. */
@media (max-width: 480px) {
  .maineaa-doc {
    flex-wrap: wrap;
  }
  .maineaa-doc:has( .maineaa-doc__icon, .maineaa-doc__tag ) .maineaa-doc__title {
    flex-basis: 100%;
  }
  .maineaa-doc__tag {
    white-space: normal;
  }
}

/* --- Document row, multi-action variant (§H doc-list block) ----------------
   A row that carries N action pills instead of being one link. Same bordered
   card as .maineaa-doc, but it stacks (title/meta block, then a wrapping row of
   pills) and is a static <div>, so it drops the whole-row link hover. */
.maineaa-doc--actions {
  flex-direction: column;
  align-items: stretch;
  gap: var(--maineaa-space-3);
}
.maineaa-doc--actions:hover {
  background: var(--base-3);
}
.maineaa-doc__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--maineaa-space-2);
  margin-top: var(--maineaa-space-1);
}
.maineaa-doc__action {
  display: inline-flex;
  align-items: center;
  gap: var(--maineaa-space-2);
  font-family: var(--maineaa-font-body);
  font-size: calc(.82rem * var(--maineaa-font-scale));
  font-weight: 600;
  line-height: 1;
  padding: calc(var(--maineaa-space-2) + 1px) var(--maineaa-space-4);
  color: var(--maineaa-brand-text);
  background: transparent;
  border: 1.5px solid var(--maineaa-brand-text);
  border-radius: var(--maineaa-radius-pill);
  text-decoration: none;
  white-space: nowrap;
}
.maineaa-doc__action:hover {
  background: var(--accent);
  color: var(--maineaa-on-brand);
  border-color: var(--accent);
}
.maineaa-doc__action-ext {
  font-size: calc(.66rem * var(--maineaa-font-scale));
  font-weight: 700;
  letter-spacing: .04em;
  opacity: .75;
}

/* --- Filter chip row (§D News All/Area/GSO; reusable) — a segmented control ---
   A rounded track holding pill links; the active chip is teal-filled (matching
   .maineaa-btn--primary). Distinct from .maineaa-tabs — this navigates (real
   links), tabs swap panels. Wraps on narrow screens. */
.maineaa-filter {
  display: inline-flex;
  flex-wrap: wrap;
  gap: 2px;
  margin: 0 0 var(--maineaa-space-6);
  padding: 3px;
  background: var(--base-3);
  border: 1px solid var(--maineaa-line);
  border-radius: var(--maineaa-radius-pill);
}
.maineaa-filter__link {
  padding: var(--maineaa-space-2) var(--maineaa-space-4);
  border-radius: var(--maineaa-radius-pill);
  font-size: calc(.9rem * var(--maineaa-font-scale));
  font-weight: 600;
  line-height: 1;
  color: var(--contrast-2);
  text-decoration: none;
}
.maineaa-filter__link:hover {
  color: var(--maineaa-brand-text);
}
.maineaa-filter__link.is-active {
  background: var(--accent);
  color: var(--maineaa-on-brand);
}

/* ==========================================================================
   L4 — A11y utilities + nav embellishments
   ========================================================================== */

/* --- Skip link (helpers.php: .maineaa-skip-link.screen-reader-text -> #main).
   Hidden state comes from GP's .screen-reader-text; this fully defines the
   :focus reveal, token-driven and self-contained. safe-area-aware. --------- */
.maineaa-skip-link:focus {
  position: fixed;
  top: calc(env(safe-area-inset-top, 0px) + var(--maineaa-space-3));
  left: calc(env(safe-area-inset-left, 0px) + var(--maineaa-space-3));
  z-index: 100000;
  width: auto;
  height: auto;
  clip: auto;
  clip-path: none;
  padding: var(--maineaa-space-3) var(--maineaa-space-5);
  background: var(--accent);
  color: var(--maineaa-on-brand);
  border-radius: var(--maineaa-radius-pill);
  font-family: var(--maineaa-font-body);
  font-weight: 600;
  text-decoration: none;
  box-shadow: var(--maineaa-shadow-lg);
}

/* --- Visually-hidden utility (theme's own; GP also ships .screen-reader-text) */
.maineaa-sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

/* --- Utility-controls wrapper (site-controls.php, in generate_menu_bar_items) */
.maineaa-site-controls {
  display: inline-flex;
  align-items: center;
  gap: var(--maineaa-space-3);
}

/* --- Font-size control (helpers.php markup) — segmented A- / A / A+ -------- */
.maineaa-font-size {
  display: inline-flex;
  align-items: center;
  gap: var(--maineaa-space-2);
}
/* Pill group (design-language §6): three rounded pills; teal-fill on hover.
   Each button is a UNIFORM box (fixed width/height, glyph centered) so the three
   pills form one clean, aligned row. The graduated glyph below still previews the
   step (A− smaller … A+ larger), but the BUTTON no longer sizes to its glyph —
   that is what made them mismatched sizes and stair-stepped (worst on mobile).
   And the control is chrome: its size is FIXED and does not track
   --maineaa-font-scale, so it stays put as the reader bumps the text size. */
.maineaa-font-size__btn {
  appearance: none;
  cursor: pointer;
  font-family: var(--maineaa-font-body);
  font-weight: 700;
  color: var(--contrast-2);
  background: var(--base-3);
  border: 1px solid var(--maineaa-border-strong);
  border-radius: var(--maineaa-radius-pill);
  width: 44px;
  height: 36px;
  padding: 0;
  line-height: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 1px;
}
.maineaa-font-size__btn:hover {
  color: var(--maineaa-on-brand);
  background: var(--accent);
  border-color: var(--accent);
}
.maineaa-font-size__btn[data-maineaa-font-size="decrease"] {
  font-size: .82rem;
}
.maineaa-font-size__btn[data-maineaa-font-size="reset"] {
  font-size: 1rem;
}
.maineaa-font-size__btn[data-maineaa-font-size="increase"] {
  font-size: 1.18rem;
}

/* ==========================================================================
   L5 — Motion
   --------------------------------------------------------------------------
   Transitions on the interactive surfaces only; killed under reduced-motion
   (playground L221-222 pattern). Scoped to our own classes + the GP chrome we
   restyle, so no !important and no specificity war.
   ========================================================================== */
/* Smooth in-page scrolling for anchor links — the home pathways scrolling to
   their panel (§G), and any #fragment nav. Gated on no-preference so
   reduced-motion users get the default instant jump. */
@media (prefers-reduced-motion: no-preference) {
  html {
    scroll-behavior: smooth;
  }
}
.maineaa-btn,
.maineaa-card,
.maineaa-event-card,
.maineaa-doc,
.maineaa-tab,
.maineaa-chip,
.maineaa-card__chip,
.maineaa-section__more,
.maineaa-sidebar__vacancy a,
.maineaa-font-size__btn,
.maineaa-filter__link,
.button,
button.button,
input[type="submit"],
.wp-block-button__link,
.wp-element-button {
  transition:
    background-color .25s ease,
    color .25s ease,
    border-color .25s ease,
    box-shadow .25s ease;
}

@media (prefers-reduced-motion: reduce) {
  .maineaa-btn,
  .maineaa-card,
  .maineaa-event-card,
  .maineaa-doc,
  .maineaa-tab,
  .maineaa-chip,
  .maineaa-card__chip,
  .maineaa-section__more,
  .maineaa-sidebar__vacancy a,
  .maineaa-font-size__btn,
  .maineaa-filter__link,
  .maineaa-skip-link:focus,
  .button,
  button.button,
  input[type="submit"],
  .wp-block-button__link,
  .wp-element-button {
    transition: none;
  }
}

/* ==========================================================================
   L4 — Homepage (Wave 4): pathway hero, content panels, callout row
   Parity target: maineaa.ericbigelow.me — warm ground, white rounded cards,
   a full-bleed photo hero with anchored entry buttons. Tones per the L3 map
   (bg→--base-2 · surface→--base-3 · soft→--base · brand→--accent).
   ========================================================================== */

/* The hero breaks out to the viewport edge (100vw); clip any resulting
   horizontal overflow at the page edge. `clip` (not `hidden`) does NOT create a
   scroll container, so GP's sticky header keeps working. Scoped to the home. */
body.home {
  overflow-x: clip;
}

.maineaa-home__body {
  max-width: 60rem; /* ~960px readable column, matching the prototype */
  margin-inline: auto;
  padding: var(--maineaa-space-7) var(--maineaa-space-5) var(--maineaa-space-8);
  display: flex;
  flex-direction: column;
  gap: var(--maineaa-space-6);
}

/* --- Pathway hero (full-bleed photo + entry buttons) ---------------------- */
.maineaa-homehero {
  position: relative;
  left: 50%;
  right: 50%;
  width: 100vw;
  max-width: 100vw;
  margin-left: -50vw;
  margin-right: -50vw;
  min-height: clamp(22rem, 46vw, 34rem);
  display: flex;
  align-items: flex-start;
  background-color: var(--base); /* tone shown behind / around the photo */
  background-size: cover;
  background-position: center 32%;
  background-repeat: no-repeat;
}
.maineaa-homehero--plain {
  /* No photo set: a calm brand band so the buttons still have a ground. The
     brand-gradient token runs brand -> a lighter, hue-rotated brand (engine-derived)
     so the band reads as depth, not the old flat brand -> brand-8%L. */
  background-image: var(--maineaa-brand-gradient);
}
/* Left-anchored scrim so the white pills stay legible over a busy photo. */
.maineaa-homehero__scrim {
  position: absolute;
  inset: 0;
  background: linear-gradient(
    90deg,
    rgba(18, 30, 35, 0.44) 0%,
    rgba(18, 30, 35, 0.14) 36%,
    rgba(18, 30, 35, 0) 62%
  );
  pointer-events: none;
}
.maineaa-homehero--plain .maineaa-homehero__scrim {
  display: none;
}
.maineaa-homehero__inner {
  position: relative; /* above the scrim */
  width: 100%;
  max-width: 60rem;
  margin-inline: auto;
  padding: var(--maineaa-space-6) var(--maineaa-space-5);
}

/* --- Pathway buttons ------------------------------------------------------ */
.maineaa-pathways {
  display: flex;
  flex-direction: column;
  gap: var(--maineaa-space-3);
  max-width: 22rem;
}
.maineaa-pathway {
  display: inline-flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--maineaa-space-3);
  background: var(--base-3);
  color: var(--contrast);
  text-decoration: none;
  font-family: var(--maineaa-font-body);
  font-weight: 600;
  font-size: calc(1rem * var(--maineaa-font-scale));
  line-height: 1.25;
  padding: calc(var(--maineaa-space-3) + 2px) var(--maineaa-space-5);
  border-radius: var(--maineaa-radius-pill);
  border: 1px solid transparent;
  box-shadow: var(--maineaa-shadow-md);
  transition:
    background-color 0.2s ease,
    color 0.2s ease;
}
.maineaa-pathway__arrow {
  color: var(--maineaa-brand-text);
  transition:
    color 0.2s ease,
    transform 0.2s ease;
}
.maineaa-pathway:hover,
.maineaa-pathway:focus-visible {
  background: var(--accent);
  color: var(--maineaa-on-brand);
}
.maineaa-pathway:hover .maineaa-pathway__arrow,
.maineaa-pathway:focus-visible .maineaa-pathway__arrow {
  color: var(--maineaa-on-brand);
  transform: translateX(3px);
}
.maineaa-pathway--static {
  /* An entry with no destination: a chip, not a dead-end link. */
  cursor: default;
  box-shadow: var(--maineaa-shadow-sm);
}

/* Item 1 — larger, tappier pathway pills on small viewports. */
@media (max-width: 600px) {
  .maineaa-pathways {
    gap: var(--maineaa-space-4);
  }
  .maineaa-pathway {
    font-size: calc(1.0625rem * var(--maineaa-font-scale));
    padding: var(--maineaa-space-4) var(--maineaa-space-5);
  }
  .maineaa-pathway__arrow {
    font-size: 1.125rem;
  }
}

/* --- Content panels (intro card carries the <h1>; situational cards) ------ */
.maineaa-panel {
  display: flex;
  flex-direction: column;
  background: var(--base-3);
  border: 1px solid var(--maineaa-line);
  border-radius: var(--maineaa-radius-lg);
  box-shadow: var(--maineaa-shadow-sm);
  padding: var(--maineaa-space-6);
  /* When a header pathway (#anchor) scrolls to a panel, clear the sticky header +
     give a little breathing room above (§G). */
  scroll-margin-top: var(--maineaa-space-7);
}
.maineaa-panel__title {
  font-family: var(--maineaa-font-display);
  font-weight: 500; /* syne-500: Eric's heading weight */
  font-size: calc(var(--maineaa-text-xl) * var(--maineaa-font-scale));
  line-height: 1.12;
  letter-spacing: -0.01em;
  color: var(--contrast);
  margin: 0;
  text-wrap: balance;
}
/* The intro card's heading is the page's <h1> — give it more presence. */
.maineaa-panel__title:is(h1) {
  font-size: calc(var(--maineaa-text-2xl) * var(--maineaa-font-scale));
}
.maineaa-panel__body {
  margin-top: var(--maineaa-space-4);
  color: var(--contrast-2);
  font-size: calc(1rem * var(--maineaa-font-scale));
  line-height: 1.6;
}
.maineaa-panel__body > :first-child {
  margin-top: 0;
}
.maineaa-panel__body > :last-child {
  margin-bottom: 0;
}
.maineaa-panel__body a {
  color: var(--maineaa-brand-text);
  font-weight: 600;
}
/* Read-more (§G): a bottom-right link → the full page. align-self pins it to the
   panel's trailing edge; margin-top pushes it below the body. */
.maineaa-panel__more {
  align-self: flex-end;
  margin-top: var(--maineaa-space-5);
  font-weight: 600;
  color: var(--maineaa-brand-text);
  text-decoration: none;
  white-space: nowrap;
}
.maineaa-panel__more:hover .maineaa-panel__more-arrow {
  margin-left: 3px;
}
.maineaa-panel__more-arrow {
  display: inline-block;
  transition: margin-left .15s ease;
}

/* --- Callout row (3-up warm quick-reference band) ------------------------- */
.maineaa-callouts {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 15rem), 1fr));
  gap: var(--maineaa-space-5);
}
.maineaa-callout {
  background: var(--base);
  border: 1px solid var(--maineaa-line);
  border-radius: var(--maineaa-radius-lg);
  padding: var(--maineaa-space-5);
}
.maineaa-callout__title {
  font-family: var(--maineaa-font-display);
  font-weight: 500; /* syne-500: Eric's heading weight */
  font-size: calc(var(--maineaa-text-md) * var(--maineaa-font-scale));
  color: var(--contrast);
  margin: 0 0 var(--maineaa-space-3);
}
.maineaa-callout__body {
  color: var(--contrast-2);
  font-size: calc(0.94rem * var(--maineaa-font-scale));
  line-height: 1.55;
}
.maineaa-callout__body > :first-child {
  margin-top: 0;
}
.maineaa-callout__body > :last-child {
  margin-bottom: 0;
}
.maineaa-callout__body a {
  color: var(--maineaa-brand-text);
  font-weight: 600;
}

@media (prefers-reduced-motion: reduce) {
  .maineaa-pathway,
  .maineaa-pathway__arrow {
    transition: none;
  }
  .maineaa-pathway:hover .maineaa-pathway__arrow,
  .maineaa-pathway:focus-visible .maineaa-pathway__arrow {
    transform: none;
  }
}

/* ==========================================================================
   L6 — Design-language shell + lift  (see .implans/design-language.md §3–4)
   --------------------------------------------------------------------------
   The prototype's signature move: an interior page presents its main content in
   ONE contained, rounded, softly-shadowed gradient panel floating on the light
   ground — the page title lives inside the panel's head, not in a full-bleed
   band. The home keeps its own composition (.maineaa-home__body), so every rule
   here is scoped off `body:not(.home)`. Kept as a single trailing layer so the
   language reads (and reverts) in one place.
   ========================================================================== */

:root {
  /* The one texture in the system — white shading into the soft warm tint;
     barely-there depth, not color. Used by the shell (and, later, panels). */
  --maineaa-panel-fill: linear-gradient(150deg, var(--base-3) 0%, var(--base) 100%);
}

/* The page-shell panel. `.site-main` is GP's content column; on interior pages
   it becomes the contained panel.

   CENTERING: GP's flexbox sheet (all.min.css) ships
   `.site-main{margin-left:0!important;margin-right:0!important}` — it assumes the
   column fills the content container, so the flex parent handles placement. Our
   shell is a NARROWER contained panel (62rem inside GP's ~75rem container), so we
   must re-assert AUTO side-margins to actually centre it — otherwise it pins left
   (40px gutter left, ~248px right). Physical margins + !important at this rule's
   higher specificity (`body:not(.home) .site-main`) beat GP's physical !important;
   justified exactly like the Events-Manager override (overriding a vendor's own
   !important sheet, not an internal specificity war). */
body:not(.home) .site-main {
  max-width: 62rem;
  margin-left: auto !important;
  margin-right: auto !important;
  background: var(--maineaa-panel-fill);
  border: 1px solid var(--maineaa-line);
  border-radius: var(--maineaa-radius-xl);
  box-shadow: var(--maineaa-shadow-lg);
  padding: clamp(1.5rem, 3vw, 2.75rem);
}

/* Inside the shell the hero is the panel's HEAD: drop the full-bleed band's
   background, divider and heavy padding so the title + lede sit cleanly on top. */
body:not(.home) .maineaa-hero {
  background: none;
  border-bottom: 0;
  padding: 0 0 var(--maineaa-space-5);
}

/* Sections stop adding side gutters (the shell already pads); the vertical
   rhythm and the inter-section hairline stay. */
body:not(.home) .maineaa-section {
  padding-inline: 0;
}
body:not(.home) .maineaa-section:first-of-type {
  padding-top: var(--maineaa-space-3);
}

/* Gentle lift (design-language §3): cards float at rest and rise 2px on hover,
   shadow blooming sm-tier → lg-tier. Overrides the L3 rest/hover shadows by
   source order; adds `transform` to the eased properties. */
.maineaa-card,
.maineaa-event-card {
  box-shadow: var(--maineaa-shadow-md);
  transition:
    background-color .2s ease,
    color .2s ease,
    border-color .2s ease,
    box-shadow .2s ease,
    transform .2s ease;
}
.maineaa-card:hover,
.maineaa-event-card:hover {
  transform: translateY(-2px);
  box-shadow: var(--maineaa-shadow-lg);
}
@media (prefers-reduced-motion: reduce) {
  .maineaa-card,
  .maineaa-event-card {
    transition: none;
  }
  .maineaa-card:hover,
  .maineaa-event-card:hover {
    transform: none;
  }
}

/* --- Footer band (design-language §6; inc/footer.php + site-footer.php) -------
   Sits on GP's .site-footer ground (--base-3, set in L2) above GP's copyright
   rule. Warm-greige top hairline, columns of resource + contact links, circular
   social chips, a hotline. Columns auto-fit and collapse to one on narrow. */
.maineaa-footer {
  border-top: 1px solid var(--maineaa-line);
  padding: var(--maineaa-space-7) var(--maineaa-space-5) var(--maineaa-space-6);
}
.maineaa-footer__inner {
  max-width: 70rem;
  margin-inline: auto;
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 14rem), 1fr));
  gap: var(--maineaa-space-6);
}
.maineaa-footer__heading {
  font-family: var(--maineaa-font-body);
  font-size: calc(.78rem * var(--maineaa-font-scale));
  font-weight: 800;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--contrast-2);
  margin: 0 0 var(--maineaa-space-4);
}
.maineaa-footer__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--maineaa-space-3);
}
.maineaa-footer__list a,
.maineaa-footer__hotline a {
  color: var(--maineaa-brand-text);
  text-decoration: none;
  font-size: calc(.95rem * var(--maineaa-font-scale));
}
.maineaa-footer__list a:hover,
.maineaa-footer__hotline a:hover {
  text-decoration: underline;
}
.maineaa-footer__social {
  display: inline-flex;
  flex-wrap: wrap;
  gap: var(--maineaa-space-3);
  margin-bottom: var(--maineaa-space-4);
}
.maineaa-footer__chip {
  width: 2.25rem;
  height: 2.25rem;
  border-radius: var(--maineaa-radius-pill);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border: 1px solid var(--maineaa-line);
  background: var(--base-3);
  color: var(--contrast-2);
  transition:
    color .2s ease,
    border-color .2s ease,
    background-color .2s ease,
    transform .2s ease;
}
.maineaa-footer__chip:hover {
  color: var(--maineaa-brand-text);
  border-color: var(--accent);
  transform: translateY(-2px);
}
.maineaa-footer__chip svg {
  width: 1.05rem;
  height: 1.05rem;
  fill: currentColor;
}
.maineaa-footer__hotline {
  margin: 0;
  font-size: calc(.95rem * var(--maineaa-font-scale));
  color: var(--contrast-2);
  line-height: 1.5;
}
.maineaa-footer__hotline-label {
  display: block;
  font-weight: 600;
  color: var(--contrast);
}
@media (prefers-reduced-motion: reduce) {
  .maineaa-footer__chip {
    transition: none;
  }
  .maineaa-footer__chip:hover {
    transform: none;
  }
}

/* --- Schedule table (blocks.php: maineaa_render_committee_schedule) ----------
   Aggregated committee meeting times + join coordinates, data-driven. Scrolls
   inside its own container on narrow so the shell/page never scrolls sideways. */
.maineaa-schedule {
  overflow-x: auto;
}
.maineaa-schedule__table {
  width: 100%;
  border-collapse: collapse;
  font-size: calc(0.92rem * var(--maineaa-font-scale));
}
.maineaa-schedule__table th,
.maineaa-schedule__table td {
  text-align: left;
  padding: var(--maineaa-space-3) var(--maineaa-space-4);
  border-bottom: 1px solid var(--maineaa-line);
  vertical-align: baseline;
}
.maineaa-schedule__table thead th {
  font-family: var(--maineaa-font-body);
  font-size: calc(0.72rem * var(--maineaa-font-scale));
  font-weight: 800;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--contrast-2);
  border-bottom: 1.5px solid var(--maineaa-border-strong);
  white-space: nowrap;
}
.maineaa-schedule__table tbody th {
  font-weight: 600;
  color: var(--contrast);
}
.maineaa-schedule__table tbody th a {
  color: var(--maineaa-brand-text);
  text-decoration: none;
  font-weight: 600;
}
.maineaa-schedule__table tbody th a:hover {
  text-decoration: underline;
}
.maineaa-schedule__table td {
  color: var(--contrast-2);
}
.maineaa-schedule__table tbody tr:last-child th,
.maineaa-schedule__table tbody tr:last-child td {
  border-bottom: 0;
}
.maineaa-schedule__pass {
  white-space: nowrap;
}

/* --- Committee detail: nav rail + main + stat-cards (single-committee.php) ----
   Committee-detail parity: a left committee-nav to switch committees, the key
   facts promoted to bordered stat-cards up top. Single column on narrow. */
.maineaa-committee {
  display: grid;
  grid-template-columns: 1fr;
  gap: var(--maineaa-space-6);
}
@media (min-width: 860px) {
  .maineaa-committee {
    grid-template-columns: 15rem 1fr;
  }
  /* The nav sticks while the (often long) main column scrolls. */
  .maineaa-committee__nav {
    position: sticky;
    top: var(--maineaa-space-5);
    align-self: start;
  }
}
.maineaa-committee__main {
  min-width: 0;
}
.maineaa-committee__cta {
  margin-top: var(--maineaa-space-6);
}

/* Committee side-nav */
.maineaa-cnav__title {
  font-family: var(--maineaa-font-display);
  font-weight: 500;
  font-size: calc(var(--maineaa-text-md) * var(--maineaa-font-scale));
  margin: 0 0 var(--maineaa-space-4);
  color: var(--contrast);
}
.maineaa-cnav__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: var(--maineaa-space-2);
}
.maineaa-cnav__link {
  display: block;
  padding: calc(var(--maineaa-space-2) + 1px) var(--maineaa-space-4);
  border-radius: var(--maineaa-radius);
  border: 1px solid transparent;
  color: var(--maineaa-brand-text);
  text-decoration: none;
  font-weight: 600;
  font-size: calc(0.92rem * var(--maineaa-font-scale));
  line-height: 1.3;
  transition:
    background-color 0.2s ease,
    border-color 0.2s ease,
    color 0.2s ease;
}
.maineaa-cnav__link:hover {
  background: var(--base);
  border-color: var(--maineaa-line);
}
.maineaa-cnav__link.is-active {
  background: var(--base);
  border-color: var(--maineaa-line);
  color: var(--contrast);
  box-shadow: var(--maineaa-shadow-sm);
}
.maineaa-cnav__link.is-muted {
  color: var(--contrast-2);
}

/* Stat cards — prominent key facts */
.maineaa-statgrid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 11rem), 1fr));
  gap: var(--maineaa-space-4);
  margin-bottom: var(--maineaa-space-6);
}
.maineaa-stat {
  background: var(--base-3);
  border: 1px solid var(--maineaa-line);
  border-radius: var(--maineaa-radius);
  box-shadow: var(--maineaa-shadow-sm);
  padding: var(--maineaa-space-4) var(--maineaa-space-5);
  display: flex;
  flex-direction: column;
  gap: var(--maineaa-space-2);
}
.maineaa-stat__label {
  font-family: var(--maineaa-font-body);
  font-size: calc(0.72rem * var(--maineaa-font-scale));
  font-weight: 800;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--contrast-2);
}
.maineaa-stat__value {
  font-size: calc(1rem * var(--maineaa-font-scale));
  color: var(--contrast);
  font-weight: 600;
  line-height: 1.35;
}
.maineaa-stat__value a {
  color: var(--maineaa-brand-text);
  text-decoration: none;
  font-weight: 600;
}
.maineaa-stat__value a:hover {
  text-decoration: underline;
}
.maineaa-stat__link {
  font-size: calc(0.85rem * var(--maineaa-font-scale));
  color: var(--maineaa-brand-text);
  text-decoration: none;
  font-weight: 600;
}
.maineaa-stat__link:hover {
  text-decoration: underline;
}
@media (prefers-reduced-motion: reduce) {
  .maineaa-cnav__link {
    transition: none;
  }
}

/* Committee tabs — Meeting + Get Involved panels (single-committee.php) --------
   Rendered inside .maineaa-tabpanel via the tabs component, which already sets
   the panel colour + line-height; these style the tab-specific blocks. */
.maineaa-meeting__facts {
  display: grid;
  gap: var(--maineaa-space-3);
  margin: 0 0 var(--maineaa-space-5);
}
.maineaa-meeting__facts > div {
  display: flex;
  flex-wrap: wrap;
  gap: var(--maineaa-space-1) var(--maineaa-space-4);
}
.maineaa-meeting__facts dt {
  min-width: 7rem;
  padding-top: 0.15em;
  font-family: var(--maineaa-font-body);
  font-size: calc(0.72rem * var(--maineaa-font-scale));
  font-weight: 800;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--contrast-2);
}
.maineaa-meeting__facts dd {
  margin: 0;
  color: var(--contrast);
  font-weight: 600;
}
.maineaa-meeting__pass {
  font-weight: 500;
  color: var(--contrast-2);
}
.maineaa-getinvolved__lede {
  margin: 0 0 var(--maineaa-space-3);
  color: var(--contrast);
  font-weight: 600;
}
.maineaa-getinvolved__opening {
  margin: 0 0 var(--maineaa-space-3);
  color: var(--maineaa-brand-text);
  font-weight: 600;
}
.maineaa-getinvolved__openings {
  list-style: none;
  margin: 0 0 var(--maineaa-space-4);
  padding: 0;
  display: grid;
  gap: var(--maineaa-space-2);
}
.maineaa-getinvolved__openings li {
  padding: var(--maineaa-space-3) var(--maineaa-space-4);
  border-radius: var(--maineaa-radius-sm);
  background: var(--base-3);
  border: 1px dashed var(--maineaa-border-strong);
}
.maineaa-getinvolved__role {
  font-weight: 600;
  color: var(--contrast);
}
.maineaa-getinvolved__note {
  color: var(--contrast-2);
  font-size: calc(.9rem * var(--maineaa-font-scale));
}
.maineaa-getinvolved__contact {
  margin: 0 0 var(--maineaa-space-4);
}

/* --- Wordmark: two-line brand (name + kicker) — design-language §6 ------------
   GP stacks the site title (.main-title) over the tagline (.site-description);
   style the tagline as the prototype's uppercase "AREA 28 · PANEL 76" kicker and
   tighten the title so the two lines read as one mark. The title/kicker STRINGS
   are the WP site name + tagline (content); this only styles them. */
.site-branding .main-title {
  line-height: 1.05;
  letter-spacing: -0.01em;
}
.site-description {
  margin-top: 3px;
  font-family: var(--maineaa-font-body);
  font-size: calc(0.72rem * var(--maineaa-font-scale));
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--contrast-2);
}

/* --- Area 28 mark in the site-branding lockup --------------------------------
   inc/generatepress.php injects <span class="maineaa-site-mark"> as the first
   child of .site-branding (and adds .maineaa-has-mark) ONLY when the asset
   assets/images/area28-mark.svg exists — so with no asset the wordmark stands
   alone and none of this applies. The mark is a CSS mask (single-tone), painted in
   the brand token via background-color; the "28" is a knockout that shows the
   header surface (var(--base-3)) behind it. Recolour = change background-color.
   The mark carries no motion, so it is reduced-motion-safe by construction. */
.site-branding.maineaa-has-mark {
  display: grid;
  grid-template-columns: auto 1fr;
  align-items: center;
  column-gap: var(--maineaa-space-3);
}
.site-branding.maineaa-has-mark .main-title,
.site-branding.maineaa-has-mark .site-description {
  grid-column: 2;
}
.maineaa-site-mark {
  grid-row: 1 / span 2;
  width: clamp(2.25rem, 6vw, 2.75rem);
  aspect-ratio: 1;
  background-color: var(--accent);
  -webkit-mask: url("../images/area28-mark.svg") center / contain no-repeat;
  mask: url("../images/area28-mark.svg") center / contain no-repeat;
}

/* --- Events Manager frontend — brand its default palette ----------------------
   EM ships its own blue links + blue "read more" button + green accent bar, and
   colors them with `!important` from its own frontend sheet (events-manager.css,
   e.g. `.em-item-title a{color:var(--default-color)!important}`). theme.css loads
   AFTER that sheet, so matching `!important` at equal specificity wins — the one
   sanctioned use of `!important` here: overriding a third-party plugin's own
   !important frontend styles. Scoped strictly to EM's `.em-item*` classes. */
.em-item-title,
.em-item-title a {
  font-family: var(--maineaa-font-display);
}
.em-event.em-item .em-item-title a,
h3.em-item-title a {
  color: var(--maineaa-brand-text) !important;
}
.em-event.em-item .em-item-title a:hover,
h3.em-item-title a:hover {
  color: var(--maineaa-brand-dark) !important;
}
.em-item-info {
  border-left-color: var(--accent) !important; /* EM's green accent bar -> teal */
}
.em-item-read-more.button {
  background: transparent !important;
  color: var(--maineaa-brand-text) !important;
  border-color: var(--maineaa-brand-text) !important;
  border-radius: var(--maineaa-radius-pill);
}
.em-item-read-more.button:hover {
  background: var(--accent) !important;
  color: var(--maineaa-on-brand) !important;
  border-color: var(--accent) !important;
}

/* --- Events Manager submission form — brand the [em_event_submission_form] -----
   §F. The event-submission shortcode renders EM's full event editor (form.em-
   event-editor), skinned by EM's bundled `pixelbones` micro-framework: Raleway
   body, blue `.button-primary`, thin grey 1px/4px inputs. We do NOT patch the
   plugin's templates (upgrade-safe) — this is the theme-side skin.

   COLOUR is re-tinted at the source: pixelbones derives its whole accent
   (`--accent-color` → links, button-primary bg+border, input focus borders) from
   three HSL component vars. Overriding those on the form re-points EM's own rules
   to our teal with NO specificity war — cleaner and more complete than chasing
   each accent property with !important. A darker L than EM's default (57% → 28%)
   only improves the white-on-accent contrast EM already ships. (A few widgets —
   the selectize option highlight, the flatpickr/timepicker popups — hardcode
   literal blue/coral instead of reading --accent-color; those are overridden
   explicitly further down.)

   SHAPE/TYPE still needs !important, because EM's pixelbones + WP core
   `buttons.min.css` load after theme.css and set radius/font/size with high
   specificity. Those rules are rooted at `.em-event-editor.em.pixelbones` (all
   three classes are on the form element) so they clear pixelbones' own
   `.em.pixelbones …` rules. Everything is scoped to the form; nothing leaks.

   Scope note: we deliberately DON'T touch the TinyMCE toolbar internals
   (`.mce-*`) or the quicktags toolbar (`.ed_button`/`.button-small`) — those are
   recognisable editor chrome and fragile to re-skin; we only frame the editor
   shell. */

/* Colour source-of-truth: re-tint EM's accent HSL to our teal (#0f7d7f ≈
   hsl(181 79% 28%)); pull the whole form onto Manrope (pixelbones forces Raleway
   on the controls, overridden explicitly below; headings already inherit Syne). */
.em-event-editor,
.em-event-editor .em {
  /* EM re-declares --accent-hue AND --font-family on EVERY `.em` element, so
     overriding the form alone leaves nested `.em` wrappers (and the controls in
     them) blue / Raleway — the override has to ride every `.em` in the subtree.
     Re-pointing pixelbones' own vars here re-tints its accent to teal and its
     type to Manrope at the source, with no per-property !important war. */
  --accent-hue: 181;
  --accent-s: 79%;
  --accent-l: 28%;
  --font-family: var(--maineaa-font-body);
}
.em-event-editor {
  font-family: var(--maineaa-font-body);
}
.em-event-editor label,
.em-event-editor .em-event-text,
.em-event-editor p {
  font-family: var(--maineaa-font-body);
}

/* Text-like fields + selects + selectize + textarea → our line, radius, surface,
   Manrope. (Focus border already goes teal via --accent-color; the ring below is
   the extra affordance.) */
.em-event-editor.em.pixelbones :is(
  input[type="text"], input[type="email"], input[type="url"], input[type="tel"],
  input[type="number"], input[type="search"], input[type="password"],
  input[type="date"], select, textarea, .selectize-input):not([data-nostyle]) {
  font-family: var(--maineaa-font-body) !important;
  font-size: calc(1rem * var(--maineaa-font-scale)) !important;
  color: var(--contrast) !important;
  background-color: var(--base-3) !important;
  border: 1px solid var(--maineaa-line) !important;
  border-radius: var(--maineaa-radius-sm) !important;
  padding: .55rem .8rem !important;
  box-shadow: none !important;
}
.em-event-editor input::placeholder,
.em-event-editor textarea::placeholder,
.em-event-editor .selectize-input .placeholder {
  color: var(--contrast-2) !important;
  opacity: 1;
}
/* Mouse/keyboard focus → brand border + soft teal ring (the global
   *:focus-visible outline still fires for keyboard, so a11y is unaffected). */
.em-event-editor.em.pixelbones input:focus,
.em-event-editor.em.pixelbones select:focus,
.em-event-editor.em.pixelbones textarea:focus,
.em-event-editor.em.pixelbones .selectize-input.focus {
  border-color: var(--maineaa-brand-text) !important;
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--accent) 18%, transparent) !important;
}

/* Selectize dropdown (open) — Timezone / Country / weekly-days. EM hardcodes
   literal Bootstrap blue on the selected option and grey on the hovered option
   (NOT via --accent-color, so the HSL re-tint can't reach them). The dropdown DOM
   lives inside the form, so a scoped override lands; neither EM rule is
   !important, so this wins on the added .em-event-editor class + load order. */
.em-event-editor .selectize-dropdown .selected {
  background-color: var(--accent) !important;
  color: var(--maineaa-on-brand) !important;
}
.em-event-editor .selectize-dropdown .active:not(.selected) {
  background-color: color-mix(in srgb, var(--accent) 12%, transparent) !important;
  color: var(--contrast) !important;
}
.em-event-editor.em.pixelbones .selectize-control.em-selectize .selectize-dropdown {
  background-color: var(--base-3) !important;
}

/* Primary submit → the site's pill CTA. Colour is inherited from --accent-color
   (teal, set above); here we only reshape it (pixelbones renders it 4px/11px/
   uppercase/Raleway). */
.em-event-editor.em.pixelbones input[type="submit"]:not([data-nostyle]),
.em-event-editor.em.pixelbones button.button-primary:not([data-nostyle]),
.em-event-editor.em.pixelbones .button-primary:not([data-nostyle]) {
  border-radius: var(--maineaa-radius-pill) !important;
  font-family: var(--maineaa-font-body) !important;
  font-weight: 600 !important;
  font-size: calc(.95rem * var(--maineaa-font-scale)) !important;
  text-transform: none !important;
  letter-spacing: normal !important;
  padding: .7rem 1.7rem !important;
  height: auto !important;
  line-height: 1.3 !important;
}
/* Secondary actions (Add Time Slot, recurrence add) → teal outline pill. Excludes
   `.button-small` so the HTML-editor quicktags keep their native toolbar sizing. */
.em-event-editor.em.pixelbones .button-secondary:not(.button-small):not([data-nostyle]),
.em-event-editor.em.pixelbones .em-timerange-add:not([data-nostyle]),
.em-event-editor.em.pixelbones .em-add-recurrence-set:not([data-nostyle]) {
  background: transparent !important;
  color: var(--maineaa-brand-text) !important;
  border: 1px solid var(--maineaa-brand-text) !important;
  border-radius: var(--maineaa-radius-pill) !important;
  font-family: var(--maineaa-font-body) !important;
  font-weight: 600 !important;
  font-size: calc(.82rem * var(--maineaa-font-scale)) !important;
  letter-spacing: .02em !important;
  text-transform: none !important;
  padding: .5rem 1.1rem !important;
}
.em-event-editor.em.pixelbones .button-secondary:not(.button-small):not([data-nostyle]):hover,
.em-event-editor.em.pixelbones .em-timerange-add:not([data-nostyle]):hover,
.em-event-editor.em.pixelbones .em-add-recurrence-set:not([data-nostyle]):hover {
  background: var(--accent) !important;
  border-color: var(--accent) !important;
  color: var(--maineaa-on-brand) !important;
}

/* Event Image dropzone (filepond) → recolour its three grey panel layers
   (#f1f0ef) to a warm field; filepond already rounds them 8px. "Browse" → brand.
   (The label text keeps filepond's near-identical muted grey — not worth fighting
   its late-loading sheet for an imperceptible shift.) */
.em-event-editor.em.pixelbones .em-input-upload.input .filepond--panel-root {
  background-color: var(--base-2) !important;
}
.em-event-editor .filepond--drop-label {
  font-family: var(--maineaa-font-body) !important;
}
.em-event-editor .filepond--label-action {
  color: var(--maineaa-brand-text) !important;
  text-decoration-color: var(--maineaa-brand-text) !important;
}

/* Details editor (TinyMCE) → frame the shell as one of our fields; toolbar
   internals stay native. */
.em-event-editor .mce-tinymce.mce-container,
.em-event-editor .wp-editor-container {
  border: 1px solid var(--maineaa-line) !important;
  border-radius: var(--maineaa-radius-sm) !important;
  box-shadow: none !important;
  overflow: hidden;
}

/* --- Layout: give EM's flat sections real rhythm + grouping ------------------
   Pure CSS over the plugin markup (no template edits). EM stacks every field
   full-width under 36px Syne section headings — too sparse/uneven. We form-scale
   the headings, put short pairs in two columns, tidy the labels, and even out the
   vertical rhythm. */

/* Section headings → form-scale + a delineating rule (the bare <h3> otherwise
   renders at page-title size and crowds the dense fields below it). */
.em-event-editor.em.pixelbones h3 {
  font-size: calc(1.35rem * var(--maineaa-font-scale)) !important;
  line-height: 1.25 !important;
  margin: var(--maineaa-space-6) 0 var(--maineaa-space-4) !important;
  padding-bottom: var(--maineaa-space-3) !important;
  border-bottom: 1px solid var(--maineaa-line) !important;
}
.em-event-editor.em.pixelbones > .em-event-editor-section:first-child h3 {
  margin-top: var(--maineaa-space-3) !important;
}

/* Field labels → consistent tidy form labels above each control. (Scoped to the
   field-wrapper contexts, so the timerange/checkbox toggle labels are untouched.) */
.em-event-editor.em.pixelbones .input > p > label,
.em-event-editor.em.pixelbones .em-input-field > label,
.em-event-editor.em.pixelbones .em-timezone > label,
.em-event-editor.em.pixelbones .em-datepicker > label,
.em-event-editor.em.pixelbones .em-location-data .input > label {
  display: block;
  font-size: calc(.8rem * var(--maineaa-font-scale));
  font-weight: 600;
  letter-spacing: .01em;
  color: var(--contrast);
  margin-bottom: .35rem;
}

/* Even vertical rhythm between field groups. */
.em-event-editor.em.pixelbones .em-input-field,
.em-event-editor.em.pixelbones .em-timezone,
.em-event-editor.em.pixelbones .em-datepicker {
  margin-bottom: var(--maineaa-space-4);
}
.em-event-editor.em.pixelbones .multi-day-event-info {
  color: var(--contrast-2) !important;
  font-size: calc(.85rem * var(--maineaa-font-scale)) !important;
  margin: .4rem 0 var(--maineaa-space-4) !important;
}

/* Your Details → two columns (Name | Email). */
.em-event-editor.em.pixelbones .event-form-submitter > .input {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--maineaa-space-3) var(--maineaa-space-5);
}
.em-event-editor.em.pixelbones .event-form-submitter > .input > p {
  margin: 0;
}

/* Where → grid the address fields two-up; name / street / URL stay full-width.
   (Shown only when a physical location is chosen.) */
.em-event-editor.em.pixelbones .em-location-data.input {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--maineaa-space-3) var(--maineaa-space-5);
}
.em-event-editor.em.pixelbones .em-location-data.input > .em-location-data-name,
.em-event-editor.em.pixelbones .em-location-data.input > .em-location-data-address,
.em-event-editor.em.pixelbones .em-location-data.input > .em-location-data-country,
.em-event-editor.em.pixelbones .em-location-data.input > .em-location-data-url {
  grid-column: 1 / -1;
}
.em-event-editor.em.pixelbones .em-location-data.input > .input {
  margin-bottom: 0;
}

/* Stack the grids on narrow screens. */
@media (max-width: 600px) {
  .em-event-editor.em.pixelbones .event-form-submitter > .input,
  .em-event-editor.em.pixelbones .em-location-data.input {
    grid-template-columns: 1fr;
  }
}

/* --- Date / time picker popups (flatpickr + jQuery timepicker) ---------------
   DELIBERATE scope deviation: both widgets append their popup to <body>, OUTSIDE
   .em-event-editor, so — unlike every other rule in this EM block — these can't
   be form-scoped. The class prefixes (.flatpickr-*, .ui-em_timepicker-*) are
   EM-widget-specific and, on the front end, only the submission form renders a
   date/time input, so a body-level rule is safe in practice. Theme CSS only; no
   plugin edits. */

/* flatpickr date-range calendar — EM themes the selected/range days flatpickr's
   stock coral #ff5a5f; retint the accents to teal (the calendar chrome is already
   a neutral light panel — left as-is). Order matters: the soft-tint rules
   (hover / inRange) come FIRST, the solid selected/range endpoints LAST, so an
   endpoint that also carries .inRange still renders solid teal, not the tint. */
.flatpickr-day:hover,
.flatpickr-day:focus {
  background: color-mix(in srgb, var(--accent) 12%, transparent) !important;
  border-color: color-mix(in srgb, var(--accent) 12%, transparent) !important;
}
.flatpickr-day.inRange {
  background: color-mix(in srgb, var(--accent) 12%, transparent) !important;
  border-color: color-mix(in srgb, var(--accent) 12%, transparent) !important;
  box-shadow: -5px 0 0 color-mix(in srgb, var(--accent) 12%, transparent),
               5px 0 0 color-mix(in srgb, var(--accent) 12%, transparent) !important;
}
.flatpickr-day.today {
  border-color: var(--maineaa-brand-text) !important;
}
.flatpickr-day.selected,
.flatpickr-day.startRange,
.flatpickr-day.endRange,
.flatpickr-day.selected:hover,
.flatpickr-day.startRange:hover,
.flatpickr-day.endRange:hover {
  background: var(--accent) !important;
  border-color: var(--accent) !important;
  color: var(--maineaa-on-brand) !important;
}

/* jQuery timepicker list — EM colours the selected/hovered rows blue #1980ec;
   retint to teal and warm the panel + ink. */
.ui-em_timepicker-wrapper {
  background: var(--base-3) !important;
  border-color: var(--maineaa-line) !important;
}
.ui-em_timepicker-list li {
  color: var(--contrast) !important;
  font-family: var(--maineaa-font-body) !important;
}
.ui-em_timepicker-list li:hover,
.ui-em_timepicker-list li.ui-em_timepicker-selected,
.ui-em_timepicker-list li.ui-em_timepicker-selected:hover {
  background: var(--accent) !important;
  color: var(--maineaa-on-brand) !important;
}

/* --- Announcement band (inc/announcements.php + theme.js rotator) -------------
   Full-bleed band above the header. Each notice carries its own colour
   (--announce-bg) + an auto-picked legible text colour (--announce-fg). One shows
   at a time; the rotator toggles .is-current. No JS -> only the first shows.
   Reduced motion -> every active notice stacks (no auto-advance). */
.maineaa-announce__item {
  display: none;
  background: var(--announce-bg, var(--accent));
  color: var(--announce-fg, #fff);
  padding: var(--maineaa-space-3) var(--maineaa-space-5);
  font-family: var(--maineaa-font-body);
  font-weight: 600;
  font-size: calc(0.95rem * var(--maineaa-font-scale));
  letter-spacing: 0.02em;
  text-align: center;
  line-height: 1.4;
}
.maineaa-announce__item.is-current {
  display: block;
}
.maineaa-announce__inner {
  max-width: 70rem;
  margin-inline: auto;
}
.maineaa-announce__item a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 2px;
}
@media (prefers-reduced-motion: reduce) {
  .maineaa-announce__item {
    display: block;
  }
}

/* --- CTA hero (template-parts/cta-hero.php) — teal gradient feature card -------
   The prototype's "Want to Get Involved?" band, generalised. A bold gradient card
   inside the shell; a white CTA pill for contrast on the teal. Reusable across
   landing pages + index heros. */
.maineaa-cta-hero {
  background: var(--maineaa-brand-gradient);
  color: var(--maineaa-on-brand);
  border-radius: var(--maineaa-radius-xl);
  padding: clamp(1.75rem, 4vw, 3rem);
  box-shadow: var(--maineaa-shadow-md);
}
.maineaa-cta-hero__inner {
  max-width: 46rem;
}
.maineaa-cta-hero__eyebrow {
  font-family: var(--maineaa-font-body);
  font-size: calc(0.78rem * var(--maineaa-font-scale));
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  margin: 0 0 var(--maineaa-space-3);
  color: var(--maineaa-on-brand);
  opacity: 0.85;
}
.maineaa-cta-hero__title {
  font-family: var(--maineaa-font-display);
  font-weight: 500;
  color: var(--maineaa-on-brand);
  font-size: calc(var(--maineaa-text-2xl) * var(--maineaa-font-scale));
  line-height: 1.1;
  letter-spacing: -0.01em;
  margin: 0;
  text-wrap: balance;
}
.maineaa-cta-hero__body {
  margin-top: var(--maineaa-space-4);
  font-size: calc(var(--maineaa-text-md) * var(--maineaa-font-scale));
  line-height: 1.55;
  color: var(--maineaa-on-brand);
  opacity: 0.94;
}
.maineaa-cta-hero__body > :first-child {
  margin-top: 0;
}
.maineaa-cta-hero__body > :last-child {
  margin-bottom: 0;
}
.maineaa-cta-hero__body a {
  color: inherit;
  text-decoration: underline;
  text-underline-offset: 2px;
}
.maineaa-cta-hero__cta {
  margin-top: var(--maineaa-space-5);
  background: #ffffff;
  color: var(--maineaa-brand-text);
}
.maineaa-cta-hero__cta:hover {
  background: var(--base);
  color: var(--maineaa-brand-dark);
}

/* ==========================================================================
   View Settings (Stream 2) — editor surfaces for the generated views
   --------------------------------------------------------------------------
   Additive: these classes only engage when a View Settings screen supplies a
   header image or intro body. With nothing set the archives render exactly as
   before (the base .maineaa-hero / .maineaa-cta-hero rules above are untouched).
   ========================================================================== */

/* --- Hero as a photo banner (header image + fixed scrim) ------------------- */
/* The inline background-image (scrim gradient + url) beats the interior shell's
   `background: none`; this pair restores the banner padding/treatment that the
   shell strips, and forces white text over the scrim (guaranteed legible). */
.maineaa-hero--image,
body:not(.home) .maineaa-hero--image {
  background-size: cover;
  background-repeat: no-repeat;
  border-radius: var(--maineaa-radius-lg);
  border-bottom: 0;
  padding: clamp(2rem, 5vw, 3.75rem) clamp(1.5rem, 4vw, 2.75rem);
  overflow: hidden;
}
.maineaa-hero--image .maineaa-hero__eyebrow,
.maineaa-hero--image .maineaa-hero__title,
.maineaa-hero--image .maineaa-hero__lede {
  color: #fff;
}
.maineaa-hero--image .maineaa-hero__lede {
  opacity: 0.95;
}

/* --- CTA hero (Documents) with a photo behind the gradient card ------------ */
.maineaa-cta-hero--image {
  background-size: cover;
  background-repeat: no-repeat;
}
.maineaa-cta-hero--image,
.maineaa-cta-hero--image .maineaa-cta-hero__eyebrow,
.maineaa-cta-hero--image .maineaa-cta-hero__title,
.maineaa-cta-hero--image .maineaa-cta-hero__body {
  color: #fff;
}
.maineaa-cta-hero--image .maineaa-cta-hero__eyebrow {
  opacity: 0.9;
}

/* --- Intro prose (Intro Text, above or below a generated list) ------------- */
.maineaa-view-intro {
  margin: var(--maineaa-space-6) 0;
  max-width: 70ch;
  font-size: calc(var(--maineaa-text-md) * var(--maineaa-font-scale));
  line-height: 1.6;
  color: var(--contrast-2);
}
.maineaa-view-intro > :first-child {
  margin-top: 0;
}
.maineaa-view-intro > :last-child {
  margin-bottom: 0;
}
.maineaa-view-intro a {
  color: var(--maineaa-brand-text);
  text-decoration: underline;
  text-underline-offset: 2px;
}

/* Item 5 — persistent help chrome. Mobile: full-width fixed bottom bar. Desktop:
   compact pill bottom-right. brand-dark fill / on-brand text is the AA-guarded
   pair. z-index below the floatnav (9999); on mobile they sit at opposite edges
   so never overlap. No entrance transition (always present) → no reduced-motion
   entry needed. */
.maineaa-helpbar {
  position: fixed;
  z-index: 9998;
  background: var(--maineaa-brand-dark);
  color: var(--maineaa-on-brand);
  box-shadow: var(--maineaa-shadow-md);
}
.maineaa-helpbar__link {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: var(--maineaa-space-3);
  color: var(--maineaa-on-brand);
  text-decoration: none;
  font-family: var(--maineaa-font-body);
  font-weight: 600;
  font-size: calc(1rem * var(--maineaa-font-scale));
}
.maineaa-helpbar__icon svg {
  display: block;
  width: 1.25em;
  height: 1.25em;
}
@media (min-width: 769px) {
  .maineaa-helpbar {
    bottom: var(--maineaa-space-5);
    right: var(--maineaa-space-5);
    border-radius: var(--maineaa-radius-pill);
  }
  .maineaa-helpbar__link {
    padding: var(--maineaa-space-3) var(--maineaa-space-5);
  }
}
@media (max-width: 768px) {
  .maineaa-helpbar {
    left: 0;
    right: 0;
    bottom: 0;
    padding-bottom: env(safe-area-inset-bottom);
  }
  .maineaa-helpbar__link {
    padding: var(--maineaa-space-4) var(--maineaa-space-5);
  }
  /* Clear the fixed bar so it never covers page-bottom content. */
  body {
    padding-bottom: calc(var(--maineaa-space-8) + env(safe-area-inset-bottom));
  }
}

/* "Find a Meeting" pill. Mirrors the help bar's pill treatment (shape, size,
   shadow, radius, typography); fill comes from the sibling guarded pair
   (--maineaa-accent / --maineaa-on-accent) so the two pills read as one
   coordinated system while staying instantly distinguishable (accent vs brand).
   Desktop: bottom-LEFT, mirroring the help bar's bottom-right. Mobile: a compact
   FAB pill floating ABOVE the full-width help bar, right-aligned. The popover
   expands upward and rides the wrapper's raised stacking context above all fixed
   chrome when open. */
.maineaa-meetpill {
  position: fixed;
  z-index: 9998;
}
.maineaa-meetpill--open {
  z-index: 10000; /* lift pill + panel above the float nav (9999) while open */
}
.maineaa-meetpill__toggle {
  display: inline-flex;
  align-items: center;
  gap: var(--maineaa-space-3);
  padding: var(--maineaa-space-3) var(--maineaa-space-5);
  background: var(--accent);
  color: var(--maineaa-on-accent);
  border: 0;
  border-radius: var(--maineaa-radius-pill);
  box-shadow: var(--maineaa-shadow-md);
  font-family: var(--maineaa-font-body);
  font-weight: 600;
  font-size: calc(1rem * var(--maineaa-font-scale));
  cursor: pointer;
}
.maineaa-meetpill__icon svg {
  display: block;
  width: 1.25em;
  height: 1.25em;
}
.maineaa-meetpill__panel {
  position: absolute;
  bottom: calc(100% + var(--maineaa-space-3));
  width: min(20rem, calc(100vw - 2 * var(--maineaa-space-4)));
  display: flex;
  flex-direction: column;
  gap: var(--maineaa-space-2);
  padding: var(--maineaa-space-4);
  background: var(--base-3);
  color: var(--maineaa-brand-text);
  border: 1px solid var(--maineaa-line);
  border-radius: var(--maineaa-radius-lg);
  box-shadow: var(--maineaa-shadow-lg);
  opacity: 0;
  visibility: hidden; /* snaps (removes from tab + a11y tree when closed, like .maineaa-floatnav) */
  transform: translateY(var(--maineaa-space-2));
  transition: opacity 0.18s ease, transform 0.18s ease;
}
.maineaa-meetpill--open .maineaa-meetpill__panel {
  opacity: 1;
  visibility: visible;
  transform: none;
}
.maineaa-meetpill__lead {
  margin: 0 0 var(--maineaa-space-1);
  font-family: var(--maineaa-font-body);
  font-size: calc(0.875rem * var(--maineaa-font-scale));
  color: var(--maineaa-brand-text);
}
.maineaa-meetpill__app,
.maineaa-meetpill__list {
  display: block;
  padding: var(--maineaa-space-2) var(--maineaa-space-3);
  border-radius: var(--maineaa-radius-sm);
  font-family: var(--maineaa-font-body);
  font-weight: 600;
  text-decoration: none;
}
.maineaa-meetpill__app {
  color: var(--maineaa-on-brand);
  background: var(--maineaa-brand-dark);
}
.maineaa-meetpill__list {
  color: var(--maineaa-brand-text);
  background: var(--base-2);
  border: 1px solid var(--maineaa-line);
}
/* Re-assert on-brand text through hover/focus. The global a:hover,a:focus rule
   (theme.css:101-103, color: brand-text, specificity 0,1,1) otherwise beats the
   single-class base rule (0,1,0) and paints the app links teal-on-teal — the
   first app link is auto-focused on open, so this defect shows immediately.
   This selector is 0,2,0, so it wins; token stays guarded on-brand. */
.maineaa-meetpill__app:hover,
.maineaa-meetpill__app:focus {
  color: var(--maineaa-on-brand);
}
.maineaa-meetpill__toggle:focus-visible,
.maineaa-meetpill__app:focus-visible,
.maineaa-meetpill__list:focus-visible {
  outline: 2px solid var(--maineaa-brand-text);
  outline-offset: 2px;
}
@media (min-width: 769px) {
  .maineaa-meetpill {
    bottom: var(--maineaa-space-5);
    left: var(--maineaa-space-5); /* mirror of help bar's bottom/right space-5 (theme.css:2235-2236) */
  }
  .maineaa-meetpill__panel {
    left: 0;
  }
}
@media (max-width: 768px) {
  .maineaa-meetpill {
    right: var(--maineaa-space-4);
    /* Clear the full-width help bar: it pins to bottom:0 with ~space-8 of height
       (theme.css:2243-2256) plus the safe-area inset. Float this pill above it. */
    bottom: calc(var(--maineaa-space-8) + var(--maineaa-space-3) + env(safe-area-inset-bottom));
  }
  .maineaa-meetpill__toggle {
    padding: var(--maineaa-space-3) var(--maineaa-space-4);
  }
  .maineaa-meetpill__panel {
    right: 0;
  }
}
/* Guardrail: kill the popover transition for reduced-motion users (the only new
   transition this change introduces). Mirrors theme.css:259-263. */
@media (prefers-reduced-motion: reduce) {
  .maineaa-meetpill__panel {
    transition: none;
  }
}

/* --- Site search (backlog item 5; inc/search.php + searchform.php) ----------
   Two surfaces, both NEW — nothing else in this file styled a text input, and
   the theme had no search affordance at all:

     .maineaa-searchlink*   the chrome link, printed into GeneratePress's
                            `.menu-bar-items` by maineaa_search_link()
                            (inc/search.php, generate_menu_bar_items @5).
     .maineaa-searchform*   the one form, printed by searchform.php for EVERY
                            get_search_form() call site — our search.php, our
                            404.php, and GP's own content-404.php / no-results.php.

   Every other class those files emit is existing vocabulary and is already
   styled above: .maineaa-hero (:329 / :1279), .maineaa-btn--ghost (:399),
   .maineaa-section (:406), .maineaa-doclist / .maineaa-doc (:668),
   .maineaa-filter (:816, the facet chips). Nothing here is fixed or floating, so
   the 9998–10000 corridor (helpbar / floatnav / meetpill) is untouched and the
   mobile bottom edge keeps exactly one reservation (theme.css:2253-2256).

   Appended rather than filed under an L-banner: the L2…L6 headings are
   historical waves (L4 appears twice, at :847 and :1000) and override behaviour
   in this file is SOURCE ORDER — see the note at theme.css:69-72. */

/* Chrome link. Sibling of `.maineaa-controls` inside GP's `.menu-bar-items`
   flex row, never a child of it (that group is role="group" aria-label="Display
   settings"), so its own margin supplies the gap — `.maineaa-site-controls`
   at :887 is dead CSS (the emitted class is `.maineaa-controls`).
   Like the A-/A/A+ stepper (:900-906) this is CHROME: its size is FIXED and does
   NOT track --maineaa-font-scale, so the header does not reflow as a reader
   bumps the text size. min-height 44px clears WCAG 2.2 SC 2.5.8 comfortably. */
.maineaa-searchlink {
  display: inline-flex;
  align-items: center;
  gap: var(--maineaa-space-2);
  min-height: 44px;
  margin-right: var(--maineaa-space-2);
  padding: 0 var(--maineaa-space-3);
  border-radius: var(--maineaa-radius-pill);
  font-family: var(--maineaa-font-body);
  font-size: .95rem;
  font-weight: 600;
  line-height: 1;
  color: var(--contrast);
  text-decoration: none;
  transition: background-color .25s ease, color .25s ease;
}
.maineaa-searchlink__icon svg {
  display: block;
  width: 1.25em;
  height: 1.25em;
}
/* Teal fill on hover/focus, matching .maineaa-font-size__btn:hover (:930-934).
   This selector is (0,2,0) ON PURPOSE: the global `a:hover, a:focus` rule at
   :101-104 is (0,1,1) and would otherwise beat a single-class rule and repaint
   the label brand-text over the teal fill. Same defect, same fix, as the meeting
   pill's app links at :2341-2349. */
.maineaa-searchlink:hover,
.maineaa-searchlink:focus {
  background: var(--accent);
  color: var(--maineaa-on-brand);
}

/* GP fires generate_menu_bar_items TWICE (desktop bar + mobile control wrapper),
   so this link is in the DOM twice and CSS decides which copy is visible. The
   stepper hides the mobile-bar copy and reveals the drawer copy (:278-285);
   search INVERTS that, deliberately — a cold arrival looking for search should
   not have to open the hamburger first. So: keep the mobile-bar copy beside the
   burger, hide the copy inside the slide-out drawer.

   This targets the LINK, not its `.menu-bar-items` container, so it never
   competes with the (1,4,1) drawer-reveal rule at :283-285 — that rule keeps
   revealing the container for the stepper, which is untouched here.

   The label is clipped rather than removed at this width: the burger already
   claims the row at 360px, and clip-path/`clip` (the .maineaa-sr-only recipe,
   :874-885) keeps the text in the accessibility tree, so the icon-only control
   still has an accessible name. */
@media (max-width: 768px) {
  #site-navigation .inside-navigation > .menu-bar-items > .maineaa-searchlink {
    display: none;
  }
  .maineaa-searchlink {
    justify-content: center;
    min-width: 44px;
    padding: 0 var(--maineaa-space-2);
  }
  .maineaa-searchlink__label {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    clip-path: inset(50%);
    white-space: nowrap;
    border: 0;
  }
}

/* The form. In-flow only — never fixed — so a focused field is scrolled into
   view by the browser and can never be trapped under the mobile keyboard or
   behind the fixed help bar. Capped at a comfortable line so the field does not
   stretch the full 62rem shell. */
.maineaa-searchform {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--maineaa-space-3);
  max-width: 34rem;
  margin: 0 0 var(--maineaa-space-6);
}
/* Permanently visible label (searchform.php ships no placeholder), on its own
   row above the field. Not micro-caps: this is read by someone who may be
   cognitively loaded, so it stays sentence-case at body weight. */
.maineaa-searchform__label {
  flex: 0 0 100%;
  font-family: var(--maineaa-font-body);
  font-size: calc(.95rem * var(--maineaa-font-scale));
  font-weight: 600;
  line-height: 1.4;
  color: var(--contrast);
}
/* The theme's first text input. `appearance: none` strips Safari's native search
   chrome so the field takes the token surface, border and radius like every
   other bordered element here.

   The max() floor keeps the COMPUTED size at or above 1rem even at the A- end of
   the stepper's 0.75–1.375 band (theme.js:45-46), because iOS Safari zooms the
   viewport on focus for anything under 16px — while still honouring the reader's
   scale upward. min-height + height:auto (never a fixed height) so the box grows
   with the type instead of clipping at the 1.375x ceiling. */
.maineaa-searchform__field {
  flex: 1 1 12rem;
  min-width: 0;
  appearance: none;
  height: auto;
  min-height: 48px;
  padding: var(--maineaa-space-3) var(--maineaa-space-4);
  font-family: var(--maineaa-font-body);
  font-size: max(1rem, calc(1rem * var(--maineaa-font-scale)));
  line-height: 1.4;
  color: var(--contrast);
  background: var(--base-3);
  border: 1px solid var(--maineaa-border-strong);
  border-radius: var(--maineaa-radius-sm);
}
/* Submit already carries .maineaa-btn .maineaa-btn--primary (:368-393), so it
   inherits the pill fill, the guarded on-brand text and the L5 transition +
   reduced-motion kill (:955-998). Only the height needs to agree with the field. */
.maineaa-searchform__submit {
  flex: 0 0 auto;
  min-height: 48px;
}
/* One tap target per row on a phone. */
@media (max-width: 768px) {
  .maineaa-searchform__field {
    flex-basis: 100%;
  }
  .maineaa-searchform__submit {
    width: 100%;
    justify-content: center;
  }
}
/* No focus rule is needed for the form: nothing here sits inside an
   overflow:hidden wrapper, so the global offset ring at :121-132 applies
   correctly and the H-6 inset variant (:134-145) would be wrong. The result rows
   DO need the inset variant and already have it (`.maineaa-doc:focus-visible`).

   Guardrail: the chrome link's hover transition above is the only motion this
   feature introduces; the submit button's is already covered at :978-998. */
@media (prefers-reduced-motion: reduce) {
  .maineaa-searchlink {
    transition: none;
  }
}
