/* ============================================================================
   AccessAbility — shared accessibility suite (styles)
   Self-contained, no external deps. Used by every page in this site so the
   Listen reader, the comfort-toggle widget, the reading guide, and hands-free
   Voice commands stay identical site-wide. Colors come from each page's design
   tokens (--ink, --paper-2, --lime, …) so it inherits the brand automatically.
   Linked in <head> (render-blocking) so saved comfort prefs apply before paint.
   ========================================================================== */

/* Boldonse — bold, playful display face for the background symbols. Self-hosted
   (woff2, latin subset) so the site stays self-contained; SIL OFL. */
@font-face {
  font-family: "Boldonse";
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url("fonts/boldonse.woff2") format("woff2");
}

/* ---- comfort-toggle effects (driven by data-a11y-* on <html>) ---- */
html[data-a11y-text="lg"] { font-size: 118%; }
html[data-a11y-contrast="high"] { --ink: #000; --muted: #15120d; --paper: #fff; --paper-2: #fff; --rule: #6b665c; --rule-2: #2c2820; --mark: #6b665c; }
html[data-a11y-contrast="high"] body { background: #fff; }
/* lighten hard-coded container fills too (cards, media, toggles) */
html[data-a11y-contrast="high"] .media,
html[data-a11y-contrast="high"] .aa-toggle { background: #fff; }
html[data-a11y-contrast="high"] .aa-toggle[aria-pressed="true"] { background: var(--lime); }
html[data-a11y-contrast="high"] .kris-texture, html[data-a11y-contrast="high"] .aa-bg { display: none; } /* drop decorative drift for max clarity */
html[data-a11y-spacing="readable"] p,
html[data-a11y-spacing="readable"] li,
html[data-a11y-spacing="readable"] figcaption { letter-spacing: .03em; word-spacing: .08em; line-height: 1.9; }
html[data-a11y-motion="reduce"] *,
html[data-a11y-motion="reduce"] *::before,
html[data-a11y-motion="reduce"] *::after {
  animation-duration: .001ms !important; animation-iteration-count: 1 !important;
  transition-duration: .001ms !important; scroll-behavior: auto !important;
}
html[data-a11y-underline] a { text-decoration: underline; text-underline-offset: 2px; }
html[data-a11y-font="readable"] body,
html[data-a11y-font="readable"] button,
html[data-a11y-font="readable"] select { font-family: Verdana, Tahoma, "DejaVu Sans", "Segoe UI", sans-serif !important; }
html[data-a11y-cursor="big"], html[data-a11y-cursor="big"] * {
  cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='40' height='40' viewBox='0 0 40 40'%3E%3Cpath d='M7 4 L7 32 L14 25 L19 37 L25 34 L20 23 L31 23 Z' fill='white' stroke='black' stroke-width='2.2' stroke-linejoin='round'/%3E%3C/svg%3E") 7 4, auto;
}

/* reading guide bar that follows the cursor */
#aa-guide {
  position: fixed; left: 0; right: 0; height: 42px; pointer-events: none; z-index: 49; display: none;
  background: rgba(137,206,64,.16); border-top: 1px solid rgba(137,206,64,.45); border-bottom: 1px solid rgba(137,206,64,.45);
}
html[data-a11y-guide="1"] #aa-guide { display: block; }

/* ---- floating control buttons ---- */
.aa-fab {
  position: fixed; z-index: 51; display: inline-flex; align-items: center; gap: .5rem;
  border: 1px solid var(--rule-2); background: var(--paper-2); color: var(--ink);
  border-radius: 999px; padding: .65rem 1.05rem;
  font: 700 .8rem/1 ui-sans-serif, system-ui, sans-serif;
  box-shadow: 0 8px 24px -12px rgba(21,18,13,.35); cursor: pointer;
}
.aa-fab:focus-visible { outline: 3px solid var(--lime-deep, #4e7a1e); outline-offset: 2px; }
#aa-listen { left: 1rem; bottom: 1rem; z-index: 50; }
#aa-a11y-btn { left: 1rem; bottom: 4.25rem; }
#aa-voice-btn { right: 1rem; bottom: 1rem; }
#aa-voice-btn[aria-pressed="true"] { background: var(--lime); border-color: var(--lime-deep); }
#aa-voice-btn .aa-mic { position: relative; display: inline-flex; }
#aa-voice-btn[aria-pressed="true"] .aa-mic::after {
  content: ""; position: absolute; inset: -5px; border-radius: 999px;
  border: 2px solid var(--lime-deep); animation: aa-pulse 1.3s ease-out infinite;
}
@keyframes aa-pulse { 0% { transform: scale(.7); opacity: .9; } 100% { transform: scale(1.5); opacity: 0; } }
@media (prefers-reduced-motion: reduce) { #aa-voice-btn[aria-pressed="true"] .aa-mic::after { animation: none; } }

/* voice caption / heard-text bubble + command help */
#aa-voice-caption {
  position: fixed; right: 1rem; bottom: 4rem; z-index: 52; max-width: min(340px, calc(100vw - 2rem));
  display: none; background: var(--ink); color: var(--paper, #fff); border-radius: .8rem;
  padding: .6rem .85rem; font: 600 .82rem/1.35 ui-sans-serif, system-ui, sans-serif;
  box-shadow: 0 18px 50px -20px rgba(21,18,13,.6);
}
#aa-voice-caption[data-show="1"] { display: block; }
#aa-voice-caption .aa-vc-heard { opacity: .7; font-weight: 500; }
#aa-voice-caption ul { margin: .4rem 0 0; padding-left: 1.1rem; }
#aa-voice-caption li { margin: .12rem 0; }

/* ---- comfort-toggle panel ---- */
#aa-a11y-panel {
  position: fixed; left: 1rem; bottom: 7.7rem; z-index: 52; width: min(330px, calc(100vw - 2rem));
  max-height: min(70vh, 32rem); overflow-y: auto;
  background: var(--paper-2); border: 1px solid var(--rule-2); border-radius: 1rem;
  box-shadow: 0 24px 60px -24px rgba(21,18,13,.5); padding: 1rem 1.1rem; display: none;
}
#aa-a11y-panel[data-open="1"] { display: block; }
#aa-a11y-panel h2 { margin: 0 0 .5rem; font-size: .95rem; color: var(--ink); }
.aa-row { display: flex; align-items: center; justify-content: space-between; gap: .75rem; padding: .55rem 0; border-top: 1px solid var(--rule); }
.aa-row:first-of-type { border-top: 0; }
.aa-lab { font-size: .86rem; color: var(--ink); font-weight: 600; }
.aa-toggle { width: 44px; height: 25px; border-radius: 999px; border: 1px solid var(--rule-2); background: #e9e3d6; position: relative; cursor: pointer; flex: none; }
.aa-toggle[aria-pressed="true"] { background: var(--lime); border-color: var(--lime-deep); }
.aa-toggle b { position: absolute; top: 2px; left: 2px; width: 19px; height: 19px; border-radius: 999px; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.3); transition: left .15s; }
.aa-toggle[aria-pressed="true"] b { left: 21px; }
#aa-lang { border: 1px solid var(--rule-2); background: var(--paper); color: var(--ink); border-radius: .5rem; padding: .35rem .55rem; font: 600 .82rem/1 ui-sans-serif, system-ui, sans-serif; cursor: pointer; }
@media (prefers-reduced-motion: reduce) { .aa-toggle b { transition: none; } }

/* visually-hidden live region for screen-reader announcements */
.aa-sr-only {
  position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

/* ---- ElevenLabs voice select (matches the language select) ---- */
#aa-voice-select { border: 1px solid var(--rule-2); background: var(--paper); color: var(--ink); border-radius: .5rem; padding: .35rem .55rem; font: 600 .82rem/1 ui-sans-serif, system-ui, sans-serif; cursor: pointer; max-width: 11rem; }
.aa-panel-actions { display: flex; gap: .5rem; margin-top: .8rem; padding-top: .7rem; border-top: 1px solid var(--rule); }
.aa-panel-actions button { flex: 1; border: 1px solid var(--rule-2); background: var(--paper); color: var(--ink); border-radius: .55rem; padding: .5rem; font: 700 .76rem/1 ui-sans-serif, system-ui, sans-serif; cursor: pointer; }
.aa-panel-actions button:hover { border-color: var(--lime-deep); color: var(--lime-deep); }

/* ---- modals: command palette + keyboard shortcuts ---- */
.aa-modal { position: fixed; inset: 0; z-index: 60; display: grid; }
.aa-modal[hidden] { display: none; }
.aa-modal::before { content: ""; position: absolute; inset: 0; background: rgba(21,18,13,.5); }
#aa-cmdk { align-items: start; justify-items: center; padding-top: 12vh; }
.aa-cmdk-box { position: relative; width: min(560px, calc(100vw - 2rem)); background: var(--paper-2); border: 1px solid var(--rule-2); border-radius: 1rem; box-shadow: 0 30px 80px -30px rgba(21,18,13,.6); overflow: hidden; }
#aa-cmdk-input { width: 100%; border: 0; border-bottom: 1px solid var(--rule); background: transparent; color: var(--ink); padding: 1rem 1.1rem; font: 600 1rem/1.2 ui-sans-serif, system-ui, sans-serif; outline: none; }
#aa-cmdk-list { list-style: none; margin: 0; padding: .4rem; max-height: 52vh; overflow-y: auto; }
.aa-cmdk-group { padding: .55rem .7rem .2rem; font: 700 .66rem/1 ui-sans-serif, system-ui, sans-serif; text-transform: uppercase; letter-spacing: .12em; color: var(--muted); }
.aa-cmdk-row { display: flex; align-items: center; justify-content: space-between; gap: 1rem; padding: .6rem .7rem; border-radius: .6rem; cursor: pointer; color: var(--ink); font-weight: 600; }
.aa-cmdk-row .h { color: var(--muted); font-size: .78rem; font-weight: 600; }
.aa-cmdk-row[aria-selected="true"], .aa-cmdk-row:hover { background: var(--lime); color: var(--ink); }
.aa-cmdk-row[aria-selected="true"] .h { color: rgba(21,18,13,.7); }
.aa-cmdk-empty { padding: 1.2rem .8rem; color: var(--muted); }
.aa-cmdk-foot { padding: .5rem .85rem; border-top: 1px solid var(--rule); color: var(--muted); font-size: .74rem; display: flex; gap: 1rem; flex-wrap: wrap; }
#aa-keys { place-items: center; }
.aa-keys-box { position: relative; width: min(440px, calc(100vw - 2rem)); background: var(--paper-2); border: 1px solid var(--rule-2); border-radius: 1rem; box-shadow: 0 30px 80px -30px rgba(21,18,13,.6); padding: 1.4rem 1.6rem; }
.aa-keys-box h2 { margin: 0 0 1rem; font-size: 1.1rem; color: var(--ink); }
.aa-keys-box dl { display: grid; grid-template-columns: auto 1fr; gap: .6rem 1rem; margin: 0; align-items: center; }
.aa-keys-box dt { display: flex; gap: .3rem; }
.aa-keys-box dd { margin: 0; color: var(--muted); }
.aa-kbd { display: inline-block; min-width: 1.4rem; text-align: center; padding: .16rem .42rem; border: 1px solid var(--rule-2); border-bottom-width: 2px; border-radius: .35rem; background: var(--paper); font: 700 .76rem/1 ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--ink); }
.aa-keys-close { position: absolute; top: .6rem; right: .8rem; border: 0; background: transparent; font-size: 1.4rem; line-height: 1; cursor: pointer; color: var(--muted); }
.aa-keys-close:hover { color: var(--ink); }
@media (prefers-reduced-motion: no-preference) { .aa-cmdk-box, .aa-keys-box { animation: aa-pop .16s ease-out; } @keyframes aa-pop { from { transform: translateY(-8px); opacity: 0; } } }

/* ---- brand logo (header + footer) ---- */
.brand-logo { height: 4rem; width: auto; display: block; }
.foot-logo { height: 4.8rem; width: auto; display: block; margin-bottom: 1rem; }
@media (max-width: 760px) { .brand-logo { height: 3rem; } }

/* ---- responsive primary nav + hamburger menu ---- */
.nav-extra { display: none; }   /* extra links live in the footer on desktop; shown in the mobile drawer */
.nav-toggle { display: none; background: none; border: 0; cursor: pointer; padding: .55rem .35rem; margin-left: auto; color: var(--ink); }
.nav-toggle:focus-visible { outline: 3px solid var(--lime-deep); outline-offset: 2px; border-radius: 6px; }
.nav-toggle span { display: block; width: 26px; height: 2.5px; background: currentColor; border-radius: 2px; margin: 5.5px 0; transition: transform .22s ease, opacity .22s ease; }
header.nav-open .nav-toggle span:nth-child(1) { transform: translateY(8px) rotate(45deg); }
header.nav-open .nav-toggle span:nth-child(2) { opacity: 0; }
header.nav-open .nav-toggle span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }
@media (max-width: 920px) {
  .top { position: relative; flex-wrap: wrap; }
  .nav-toggle { display: block; }
  .nav {
    position: absolute; top: 100%; left: 0; right: 0; z-index: 40;
    flex-direction: column; align-items: stretch; gap: 0;
    background: var(--paper-2); border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule);
    box-shadow: 0 28px 44px -28px rgba(21, 18, 13, .45);
    max-height: 0; overflow: hidden; visibility: hidden; transition: max-height .26s ease;
  }
  header.nav-open .nav { max-height: 84vh; overflow-y: auto; visibility: visible; padding-bottom: .6rem; }
  .nav .nav-links { flex-direction: column; align-items: stretch; gap: 0; }
  .nav .nav-links a, .nav .phone, .nav .nav-extra { display: block; padding: .9rem clamp(1.25rem, 5vw, 2rem); border-top: 1px solid var(--rule); }
  .nav .nav-links a::after { display: none; }
  .nav .btn { margin: .8rem clamp(1.25rem, 5vw, 2rem) .3rem; justify-content: center; }
}
@media (prefers-reduced-motion: reduce) { .nav, .nav-toggle span { transition: none !important; } }

/* ---- page-background character drift (Kris's hero pattern, extended) ----
   A fixed, full-viewport layer of drifting letters/digits/symbols that lives
   BEHIND the centered content frame, so the motif fills the page background
   (most visible in the margins beside the column). Decorative + aria-hidden;
   all motion gated on prefers-reduced-motion. */
.aa-bg { position: fixed; inset: 0; z-index: 0; pointer-events: none; overflow: hidden; }
.aa-bgc { position: absolute; font-family: "Boldonse", ui-sans-serif, system-ui, sans-serif; font-weight: 400; line-height: 1; color: var(--lime-deep); transform: translate(-50%, -50%) rotate(var(--r, 0deg)); will-change: transform; }
html[data-a11y-contrast="high"] .aa-bg { display: none; } /* keep high-contrast clean */
@media (prefers-reduced-motion: no-preference) {
  .aa-bgc { animation: aa-drift var(--d, 16s) ease-in-out var(--dl, 0s) infinite alternate; }
  @keyframes aa-drift {
    from { transform: translate(-50%, -50%) rotate(var(--r, 0deg)) translateY(0); }
    to   { transform: translate(-50%, -50%) rotate(calc(var(--r, 0deg) * -1)) translateY(-9px); }
  }
}

/* ============================================================================
   Layout containment + control ergonomics
   Appended last, and aa-suite.css is the final stylesheet on all 11 pages, so
   these win over both styles.css and the per-page inline <style> blocks.
   ========================================================================== */

/* ---- Horizontal containment: the sideways drift while scrolling ----------
   .section::before / ::after draw the "+" marks on the frame's corner
   intersections using `left: 100%` + `translate(-50%, -50%)`, so half of each
   glyph (~8.8px) sits outside the frame's right edge. Measured: the document
   was 8px wider than the viewport on EVERY page (scrollWidth 1288 vs
   clientWidth 1280 at desktop, and the same 8px at 375px). That made the page
   horizontally scrollable by 8px, which is what read as a left/right wobble
   while scrolling — momentum scrolling on a trackpad or phone nudges the x
   axis, and the page had 8px of slack to move in.

   Clipping at the viewport keeps the marks looking exactly as designed while
   removing the scrollable slack. `clip` rather than `hidden` is deliberate:
   `hidden` would force overflow-y to compute to `auto`, turning the root into
   a scroll container (risking a second scrollbar and breaking position:
   sticky). `clip` pairs with `visible`, so the y axis is untouched.

   scrollbar-gutter reserves the scrollbar's space permanently so content can
   never jump sideways when a scrollbar appears or disappears — e.g. when the
   accessibility panel opens, or when a short page follows a long one. */
html {
  scrollbar-gutter: stable;
  overflow-x: clip;
}
/* body is the one that actually stops it. Measured: with the clip only on
   <html>, the paint was clipped but window.scrollX still reached exactly 8 —
   root-level overflow propagates to the viewport, which kept the 8px of scroll
   slack. Clipping on body removes the overflow from the scrollable area
   outright (scrollWidth drops to exactly clientWidth).

   body rather than .frame on purpose: below 1400px the frame's edges sit on
   the viewport edges, so the outer half of each mark is already cut off by the
   viewport and nothing changes visually; above 1400px the frame is centred and
   the marks fall well inside body, so they still render whole. Clipping .frame
   instead would slice them in half on large screens. */
body {
  overflow-x: clip;
}
@supports not (overflow-x: clip) {
  html, body { overflow-x: hidden; }
}

/* ---- Touch-target minimums (WCAG 2.5.5 Target Size, 44x44) ---------------
   Audited at 375px: 21 controls fell under 44px in at least one dimension,
   including the mobile menu button itself (37x47) and the header Donate
   button (40px tall). This site's audience includes people with motor and
   dexterity disabilities, so the AAA 44px bar is the right one here, not the
   24px AA floor.

   Scoped to navigation, footer, and action controls. Inline links inside
   running prose are deliberately left alone: WCAG exempts them, and padding
   them would break the line rhythm of the body copy. */

/* The hamburger was 37px wide — the one control a mobile visitor must hit
   before they can navigate at all. Only sized in the range where it renders,
   so the desktop `display: none` above is not disturbed. */
@media (max-width: 920px) {
  .nav-toggle {
    min-width: 44px;
    min-height: 44px;
    padding: 0;
    /* Column with an EXPLICIT gap, not grid + collapsed margins.
       The open state converges the bars with translateY(8px), a number that
       only works if the bar pitch is exactly 8px. Originally the toggle was
       display:block, where the bars' 5.5px top and bottom margins collapse
       against each other into a single 5.5px gap -> 2.5px bar + 5.5px = 8px
       pitch, and the X met in the middle.
       Switching to grid (for the 44px target) stopped that collapsing: the
       margins stacked to 11px, the pitch became 13.5px, and each stroke fell
       5.5px short of centre -- the X came out crooked. Setting the gap here
       and zeroing the margins restores an 8px pitch and states it outright,
       so the number is no longer load-bearing on margin-collapse behaviour. */
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 5.5px;
  }
  .nav-toggle span { margin: 0; }
}

/* Header phone link: 22px tall on desktop. In the mobile drawer it already
   gets .9rem of padding from the rule above, so this is desktop-only to avoid
   fighting that. */
@media (min-width: 921px) {
  .phone {
    display: inline-flex;
    align-items: center;
    min-height: 44px;
  }
}

/* Footer column links were 26px tall. Height comes from the target itself
   rather than margin, so adjacent targets stay visually separated. */
.foot-col a {
  display: flex;
  align-items: center;
  min-height: 44px;
  margin-bottom: 0;
}

/* The floating Listen / Accessibility / Voice controls computed to ~34px tall
   from padding alone. These are the site's accessibility affordances — they
   should clear the bar comfortably. */
.aa-fab {
  min-height: 44px;
}

/* ---- Floating controls must not cover the open mobile menu ---------------
   The Listen / Accessibility / Voice buttons are fixed at z-index 50–51; the
   nav drawer sits at z-index 40. With the menu open they overlapped its last
   rows — measured 6 collisions at 375px, including the phone number and the
   Accessibility link, which are exactly what someone opening the menu is most
   likely reaching for.

   Raising the drawer instead would leave the buttons stranded on top of the
   page behind it, so they're hidden for as long as the menu is open and come
   straight back when it closes. Nothing is lost: the drawer carries its own
   Accessibility link, and the menu is effectively modal while open. */
@media (max-width: 920px) {
  body:has(header.nav-open) .aa-fab,
  body:has(header.nav-open) #aa-voice-caption,
  body:has(header.nav-open) #aa-a11y-panel {
    display: none;
  }
}

/* The header Donate button computed to 40px tall — it takes a reduced height
   from the nav context so it fits the bar, which put it under the 44px floor.
   Set on the class so it covers every page: index/accessibility carry the size
   as an inline style (patched to match), the other nine inherit from
   styles.css. */
.nav .btn { min-height: 44px; }

/* ---- Data tables on small screens ---------------------------------------
   The emergency + CIL pages carry contact tables, all of them a simple
   two-column label -> value pair (Who/Number, County website/URL,
   Resource/Where). Squeezed to a 375px viewport they broke: the value column
   was only ~111px, so phone numbers wrapped across three lines
   ("(866) 246- 0133") and the column was cut off at the page edge.

   That cut-off matters more now the page itself cannot scroll sideways — the
   column would be unreachable rather than merely awkward.

   Rebalancing the columns rather than stacking them or giving the table its
   own sideways scroll. Measured against both alternatives: at 48%/52% this leaves zero
   cells overflowing and nothing clipped, stacking left two cells still
   overflowing, and a sideways scroll would hide a phone number behind a swipe
   the visitor has to discover — the wrong trade on an emergency page. It also
   keeps the real table semantics, which switching the cells to display:block
   would strip from screen readers. */
@media (max-width: 700px) {
  /* Scoped to TWO-column tables only. `:first-child:nth-last-child(2)` matches a
     first cell that is also second-from-last, i.e. a row with exactly two cells.
     donate.html carries 3-column tables (Category / Items / …) and an
     unconditional 48% first column squeezed the remaining two into 52%, pushing
     them past the container — so those keep automatic layout and simply wrap. */
  table:has(tr > *:first-child:nth-last-child(2)) { table-layout: fixed; width: 100%; }
  table:has(tr > *:first-child:nth-last-child(2)) td:first-child,
  table:has(tr > *:first-child:nth-last-child(2)) th:first-child { width: 48%; }
  table td, table th { overflow-wrap: anywhere; }
}

/* Desktop/tablet nav links were 28px tall. That clears WCAG 2.5.8 (24px) for a
   mouse, but every tablet above the 920px breakpoint is a touch device, so give
   them the full 44px. The header already contains 44px controls, so this adds
   no height to the bar. */
@media (min-width: 921px) {
  .nav-links a { display: inline-flex; align-items: center; min-height: 44px; }
}

/* Links inside table cells were single-line and ~18px tall, well under the
   44px floor. Height comes from the link itself so the row keeps its shape. */
td a, th a {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
}

/* ============================================================================
   Primary nav: grouped dropdowns
   The bar had 12 top-level links and wrapped labels onto two and three lines.
   Regrouped behind two disclosures (About, Programs) so the top level is five
   items plus the phone number and Donate.
   ========================================================================== */

/* No label may break across lines. */
.nav-links a, .nav-trigger { white-space: nowrap; }

.nav-trigger {
  font: inherit; font-weight: 600; color: inherit;
  background: none; border: 0; padding: 0; cursor: pointer;
  display: inline-flex; align-items: center; gap: .35rem;
}
.nav-trigger:focus-visible { outline: 3px solid var(--lime-deep); outline-offset: 3px; border-radius: 4px; }
.nav-caret {
  width: .4rem; height: .4rem; flex: none;
  border-right: 2px solid currentColor; border-bottom: 2px solid currentColor;
  transform: rotate(45deg) translate(-1px, -1px);
  transition: transform .18s ease;
}
.nav-group[data-open="1"] .nav-caret { transform: rotate(-135deg) translate(-1px, -1px); }
@media (prefers-reduced-motion: reduce) { .nav-caret { transition: none; } }

@media (min-width: 921px) {
  .nav-group { position: relative; display: inline-flex; align-items: center; }
  /* the trigger itself must carry the 44px target, not just its wrapper */
  .nav-trigger { min-height: 44px; }
  .nav-menu {
    position: absolute; top: 100%; left: 50%; transform: translateX(-50%); z-index: 45;
    display: none; flex-direction: column; min-width: 15rem; padding: .35rem;
    background: var(--paper-2); border: 1px solid var(--rule-2); border-radius: .75rem;
    box-shadow: 0 26px 52px -26px rgba(21, 18, 13, .45);
  }
  .nav-group[data-open="1"] .nav-menu { display: flex; }
  .nav-menu a {
    display: flex; align-items: center; min-height: 44px; padding: 0 .85rem;
    border-radius: .5rem; color: var(--ink); font-weight: 600; text-decoration: none;
  }
  /* the header's underline-sweep pseudo would streak across the panel */
  .nav-menu a::after { content: none; }
  .nav-menu a:hover, .nav-menu a:focus-visible { background: var(--lime); color: var(--ink); }
}

/* Under the breakpoint there are no dropdowns at all: the triggers are removed
   and every link sits flat in the hamburger drawer, so nothing is reachable
   only by hovering. The drawer's own row styling (.nav .nav-links a) already
   applies to these, since .nav-menu lives inside .nav-links. */
@media (max-width: 920px) {
  .nav-trigger { display: none; }
  .nav-group, .nav-menu { display: block; }
}

/* ============================================================================
   Team grid (our-team.html)
   ========================================================================== */
.team-grid {
  display: grid; gap: clamp(1rem, 2.5vw, 1.6rem); margin-top: 1.9rem;
  grid-template-columns: repeat(auto-fill, minmax(232px, 1fr));
}
.tmember {
  border: 1px solid var(--rule-2); border-radius: .85rem; background: var(--paper-2);
  padding: 1.15rem; text-align: center;
}
.tmember .tphoto {
  width: 128px; height: 128px; margin: 0 auto .9rem; border-radius: 999px;
  overflow: hidden; background: #ece6d8; border: 1px solid var(--rule-2);
}
.tmember .tphoto img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tmember .tname { font-weight: 800; font-size: 1.05rem; line-height: 1.25; color: var(--ink); }
.tmember .trole { font-size: .86rem; color: var(--muted); margin-top: .3rem; line-height: 1.45; }
/* Email is the one interactive element on each card, so it carries the 44px
   target rather than the card. */
.tmember .temail {
  display: inline-flex; align-items: center; justify-content: center;
  min-height: 44px; margin-top: .5rem; padding: 0 .4rem;
  font-size: .78rem; font-weight: 700; color: var(--lime-deep);
  text-decoration: none;
  /* break-all split addresses mid-word ("abilitysc.or / g"). The column is
     sized so a full address fits on one line; anywhere is only the fallback
     for the longest names at the narrowest column. */
  word-break: normal; overflow-wrap: anywhere;
}
.tmember .temail:hover { text-decoration: underline; }
/* Leadership reads first: a slightly heavier top rule, matching the old site's
   coloured bar above each member. */
.tmember.lead { border-top: 4px solid var(--lime); }

/* Embedded third-party form (survey.html). Fixed tall frame that scrolls
   internally; the page itself must not gain a horizontal scrollbar, and the
   iframe carries a title so screen readers can announce it. A direct link to
   the form sits beside it for anyone the embed does not work for. */
/* Google centres its ~640px card inside whatever width it gets, so a
   full-bleed frame left a lot of dead space either side. Capped to the
   site's reading measure and centred. */
.form-embed { max-width: 48rem; margin-inline: auto; margin-top: 1.6rem; border: 1px solid var(--rule-2); border-radius: .85rem; overflow: hidden; background: var(--paper-2); }
.form-embed iframe { display: block; width: 100%; max-width: 100%; height: 1400px; border: 0; }
@media (max-width: 700px) { .form-embed iframe { height: 1600px; } }
