/* ============================================================
   CMBA — Canadian Mortgage Brokers Association
   Landing page styles
   ============================================================ */

:root {
  --green:        #1d5632;   /* primary brand green */
  --green-hero:   #203b30;   /* dark hero background */
  --green-footer: #13311e;   /* footer background   */
  --beige:        #ece9de;   /* magazine caption bg */
  --beige-border: #ccc5a9;
  --ink:          #111111;
  --muted:        rgba(255, 255, 255, 0.75);
  --container:    1200px;
}

* { box-sizing: border-box; }

html { scroll-behavior: smooth; }

body {
  margin: 0;
  font-family: "Outfit", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  color: var(--ink);
  background: #fff;
  -webkit-font-smoothing: antialiased;
  line-height: 1.5;
}

img { display: block; max-width: 100%; }

p { margin: 0; }

a { color: inherit; text-decoration: none; }

.container {
  width: 100%;
  max-width: var(--container);
  margin-inline: auto;
  padding-inline: 24px;
}

.accent { color: var(--green); }

/* ---------- Buttons ---------- */
.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  border-radius: 500px;
  padding: 15px 40px;
  font-size: 18px;
  font-weight: 500;
  letter-spacing: 0.05em;
  cursor: pointer;
  border: 1px solid var(--green);
  transition: transform 0.15s ease, background 0.15s ease, color 0.15s ease;
  white-space: nowrap;
}
.btn:hover { transform: translateY(-2px); }
.btn--solid   { background: var(--green); color: #fff; }
.btn--solid:hover { background: #17452a; }
.btn--outline { background: #fff; color: var(--green); }
.btn--outline:hover { background: #f2f6f3; }
.btn--block   { width: 100%; }

/* ============================================================
   Header — sticky; collapses into a floating frosted "pill" on scroll
   ============================================================ */

/* The header/footer partials are injected INTO their [data-include]
   wrapper (include.js sets innerHTML). Left as normal blocks, that
   wrapper would be only as tall as the header and would trap the
   sticky header inside it — so it scrolls out of view after one
   header's height. display:contents removes the wrapper's own box so
   the sticky .site-header is positioned relative to <body> (the full
   page) and stays pinned while scrolling. */
[data-include] { display: contents; }

.site-header {
  position: sticky;
  top: 0;
  z-index: 50;
  background: rgba(255, 255, 255, 0.9);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-bottom: 1px solid rgba(0, 0, 0, 0.06);
  transition: background 0.35s ease, border-color 0.35s ease, padding 0.35s ease;
}
.header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 32px;
  padding-block: 10px;
  transition: max-width 0.35s ease, padding 0.35s ease, background 0.35s ease,
    border-color 0.35s ease, box-shadow 0.35s ease, border-radius 0.35s ease;
  border: 1px solid transparent;
}
.logo img {
  height: 56px;
  width: auto;
  transition: height 0.35s ease;
}
.nav {
  display: flex;
  align-items: center;
  gap: 12px;
}
.nav-links {
  display: flex;
  gap: 4px;
  font-size: 15px;
}
.nav-contact {
  padding: 11px 30px;
  font-size: 15px;
  margin-left: 8px;
}
/* Contact button: fill solid green on hover, and stay put (no lift). */
.nav-contact:hover {
  background: var(--green);
  border-color: var(--green);
  color: #fff;
  transform: none;
}

.nav-toggle {
  display: none;
  background: none;
  border: 0;
  font-size: 28px;
  cursor: pointer;
  color: var(--green);
}

/* ---------- Scrolled state ---------- */
/* Mobile / shared: the bar just gains a soft elevation. */
.site-header.is-scrolled {
  background: rgba(255, 255, 255, 0.82);
  border-bottom-color: transparent;
  box-shadow: 0 6px 24px rgba(13, 40, 24, 0.08);
}
/* Desktop: the inner container detaches into a centered floating pill. */
@media (min-width: 981px) {
  .site-header.is-scrolled {
    background: transparent;
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    box-shadow: none;
    padding-top: 14px;
    padding-bottom: 2px;
  }
  .site-header.is-scrolled .header-inner {
    max-width: 1080px;
    padding: 8px 8px 8px 26px;
    background: rgba(255, 255, 255, 0.85);
    backdrop-filter: blur(18px) saturate(140%);
    -webkit-backdrop-filter: blur(18px) saturate(140%);
    border-color: rgba(0, 0, 0, 0.07);
    border-radius: 999px;
    box-shadow: 0 12px 32px rgba(13, 40, 24, 0.14), 0 2px 6px rgba(0, 0, 0, 0.05);
  }
  .site-header.is-scrolled .logo img { height: 44px; }
}
@media (prefers-reduced-motion: reduce) {
  .site-header, .header-inner, .logo img { transition: none; }
}

/* ============================================================
   Hero
   ============================================================ */
.hero {
  position: relative;
  background: var(--green-hero);
  overflow: hidden;
  text-align: center;
}
.hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background: url("assets/hero-bg.jpg") center top / cover no-repeat;
  opacity: 0.9;
}
.hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(255,255,255,0.85) 10%, rgba(255,255,255,0.15) 70%, rgba(32,59,48,0.35) 100%);
}
.hero-inner {
  position: relative;
  z-index: 1;
  padding-block: 96px 120px;
}
.hero h1 {
  margin: 0 auto;
  max-width: 820px;
  font-size: clamp(38px, 5vw, 65px);
  font-weight: 200;
  line-height: 1.15;
  color: var(--ink);
}
.hero h1 b { font-weight: 700; }
.hero-actions {
  display: flex;
  justify-content: center;
  gap: 24px;
  margin-top: 48px;
  flex-wrap: wrap;
}

/* ============================================================
   Generic section
   ============================================================ */
.section { padding-block: 88px; }
.section-tight { padding-block: 56px; }

.lead-heading {
  font-size: clamp(30px, 3.4vw, 44px);
  font-weight: 200;
  line-height: 1.3;
  margin-bottom: 24px;
}
.lead-heading .semibold { font-weight: 600; }
.body-lg { font-size: 20px; line-height: 1.6; }

/* ---------- Split (image + text) ---------- */
.split {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 64px;
  align-items: center;
}
.split img.media {
  width: 100%;
  border-radius: 24px;
  object-fit: cover;
  aspect-ratio: 1 / 1;
}
.split--reverse .media-col { order: 2; }

/* province search box */
.province-search {
  margin-top: 32px;
  display: flex;
  align-items: center;
  gap: 12px;
  max-width: 569px;
  border: 1px solid rgba(0, 0, 0, 0.25);
  border-radius: 12px;
  padding: 18px 22px;
  color: #555;
  font-weight: 300;
  font-size: 18px;
}
.province-search svg { flex: none; }

/* ============================================================
   Mandate card
   ============================================================ */
.mandate {
  position: relative;
  border-radius: 30px;
  overflow: hidden;
  color: #fff;
  text-align: center;
  padding: 64px clamp(24px, 5vw, 90px);
}
.mandate::before {
  content: "";
  position: absolute;
  inset: 0;
  background: url("assets/mandate-bg.png") center / cover no-repeat;
}
.mandate::after {
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(29, 86, 50, 0.9);
}
.mandate > * { position: relative; z-index: 1; }
.mandate h2 { font-size: clamp(30px, 3.4vw, 46px); font-weight: 500; margin: 0 0 24px; }
.mandate p { max-width: 1100px; margin-inline: auto; font-size: 20px; line-height: 1.7; letter-spacing: 0.02em; }

/* ============================================================
   Activities / cooperative agenda
   ============================================================ */
.activities {
  position: relative;
  text-align: center;
  overflow: hidden;
  padding-block: 88px;
}
.activities::before {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 70%;
  background: url("assets/activities-bg.png") center / cover no-repeat;
  -webkit-mask-image: linear-gradient(180deg, transparent, #000 45%, transparent);
          mask-image: linear-gradient(180deg, transparent, #000 45%, transparent);
  opacity: 0.5;
}
.activities > * { position: relative; z-index: 1; }
.activities h2 {
  font-size: clamp(28px, 3.2vw, 46px);
  font-weight: 400;
  line-height: 1.3;
  max-width: 1000px;
  margin: 0 auto 56px;
}
.pill-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 420px));
  gap: 24px 48px;
  justify-content: center;
  margin-bottom: 56px;
}
.pill {
  display: flex;
  align-items: center;
  gap: 16px;
  background: #fff;
  border: 1px solid #d9d9d9;
  border-radius: 500px;
  padding: 12px 26px;
  height: 60px;
  text-align: left;
  font-weight: 600;
  font-size: 20px;
}
.pill img { width: 32px; height: 32px; flex: none; }

.province-buttons {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 32px;
}
.province-buttons .btn {
  background: var(--green);
  color: #fff;
  border-radius: 20px;
  min-width: 220px;
  height: 80px;
  font-size: 24px;
  letter-spacing: 0.08em;
}

/* ============================================================
   Government relations
   ============================================================ */
.gov .split { gap: 56px; align-items: stretch; }
.gov-copy { display: flex; flex-direction: column; gap: 30px; }
.gov-meta { display: flex; flex-direction: column; gap: 8px; }
.gov h2 { font-size: clamp(30px, 3.4vw, 46px); font-weight: 200; margin: 0; }
.gov h2 .semibold { font-weight: 600; }
.gov-role { font-size: 20px; font-weight: 500; }
.gov-date { font-size: 20px; }
.gov-body { font-size: 18px; line-height: 1.7; }
.gov-actions { display: flex; flex-direction: column; gap: 20px; max-width: 465px; }
.gov img.media { border-radius: 35px; height: 100%; }

/* ============================================================
   Benefits
   ============================================================ */
.benefits h2 {
  text-align: center;
  font-size: clamp(34px, 4vw, 52px);
  font-weight: 300;
  margin: 0 0 56px;
}
.benefits h2 .semibold { font-weight: 600; }
.benefits-layout {
  display: grid;
  grid-template-columns: 1fr 1.3fr;
  gap: 64px;
  align-items: center;
}
.benefits-photo {
  width: 100%;
  aspect-ratio: 1 / 1;
  object-fit: cover;
  border-radius: 999px;
}
.benefits-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 48px 40px;
}
.benefit-icon { width: 40px; height: 40px; }
.benefit h3 { margin: 16px 0 10px; font-size: 20px; font-weight: 500; color: var(--green); }
.benefit p { font-size: 16px; line-height: 1.5; }

/* ============================================================
   Publications
   ============================================================ */
.publications { text-align: center; }
.publications h2 {
  font-size: clamp(34px, 4vw, 56px);
  font-weight: 500;
  margin: 0 0 56px;
}
.pub-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 40px 30px;
}
.pub-card {
  display: flex;
  flex-direction: column;
  border-radius: 4px;
  overflow: hidden;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.08);
  background: #fff;
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.pub-card:hover { transform: translateY(-4px); box-shadow: 0 12px 28px rgba(0,0,0,0.14); }
.pub-card img { width: 100%; aspect-ratio: 621 / 792; object-fit: cover; }
.pub-caption {
  background: var(--beige);
  border: 1px solid var(--beige-border);
  border-top: 0;
  padding: 18px 16px;
  font-size: 16px;
  font-weight: 500;
  line-height: 1.35;
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
}

/* ============================================================
   CTA
   ============================================================ */
.cta {
  position: relative;
  overflow: hidden;
  border-radius: 30px;
  background: var(--green);
  background: linear-gradient(135deg, var(--green), #246a3d);
  color: #fff;
  padding: 56px clamp(28px, 5vw, 60px);
  display: flex;
  align-items: center;
  gap: 40px;
  flex-wrap: wrap;
}
.cta-rings {
  position: absolute;
  right: -60px;
  top: 50%;
  transform: translateY(-50%);
  pointer-events: none;
}
.cta-rings span {
  position: absolute;
  border: 2px solid rgba(255, 255, 255, 0.22);
  border-radius: 999px;
  transform: rotate(-25deg);
  right: 0;
  top: 50%;
}
.cta-rings span:nth-child(1) { width: 360px; height: 470px; margin: -235px -40px 0 0; }
.cta-rings span:nth-child(2) { width: 440px; height: 500px; margin: -250px -140px 0 0; }
.cta-rings span:nth-child(3) { width: 440px; height: 740px; margin: -370px -260px 0 0; }
.cta > * { position: relative; z-index: 1; }
.cta h2 { font-size: clamp(38px, 4.4vw, 50px); font-weight: 700; line-height: 1.2; margin: 0; flex: none; }
.cta p { flex: 1; min-width: 260px; font-size: 18px; font-weight: 600; line-height: 1.7; letter-spacing: 0.02em; }
.cta-arrow {
  flex: none;
  width: 90px;
  height: 90px;
  border-radius: 20px;
  background: rgba(255, 255, 255, 0.22);
  border: 1px solid #fff;
  box-shadow: 0 4px 4px rgba(0, 0, 0, 0.25);
  display: grid;
  place-items: center;
  color: #fff;
  transition: background 0.15s ease;
}
.cta-arrow:hover { background: rgba(255, 255, 255, 0.34); }

/* ============================================================
   Footer
   ============================================================ */
.site-footer {
  background: var(--green-footer);
  color: #fff;
  padding-block: 80px 0;
}
.footer-grid {
  display: grid;
  grid-template-columns: 2fr 1fr 1fr;
  gap: 56px;
  padding-bottom: 64px;
}
.footer-about img { height: 60px; width: auto; margin-bottom: 28px; }
.footer-about p {
  font-size: 15px;
  line-height: 1.8;
  color: rgba(255, 255, 255, 0.68);
  max-width: 400px;
}

/* Column headings get a short accent underline for a more finished look */
.footer-col h3 {
  position: relative;
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: #fff;
  margin: 4px 0 26px;
  padding-bottom: 14px;
}
.footer-col h3::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 34px;
  height: 2px;
  border-radius: 2px;
  background: rgba(255, 255, 255, 0.4);
}
.footer-links { display: flex; flex-direction: column; gap: 13px; }
.footer-links a {
  font-size: 15px;
  font-weight: 500;
  color: rgba(255, 255, 255, 0.68);
  display: inline-flex;
  align-items: center;
  gap: 8px;
  width: fit-content;
  transition: color 0.15s ease, transform 0.15s ease;
}
/* Small chevron that slides in on hover */
.footer-links a::before {
  content: "";
  width: 6px;
  height: 6px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(-45deg) scale(0.6);
  opacity: 0;
  transition: opacity 0.15s ease, transform 0.15s ease;
}
.footer-links a:hover { color: #fff; transform: translateX(3px); }
.footer-links a:hover::before { opacity: 0.8; transform: rotate(-45deg) scale(1); }
.footer-email {
  color: #fff !important;
  font-weight: 600 !important;
  margin-top: 10px;
}
.footer-email::before { display: none; }

.footer-bottom {
  background: rgba(0, 0, 0, 0.22);
  border-top: 1px solid rgba(255, 255, 255, 0.08);
  color: rgba(255, 255, 255, 0.6);
  font-size: 13px;
}

/* ============================================================
   Responsive
   ============================================================ */
@media (max-width: 980px) {
  .nav-links, .nav-contact { display: none; }
  .nav-toggle { display: block; }
  .split, .gov .split, .benefits-layout { grid-template-columns: 1fr; gap: 40px; }
  .split--reverse .media-col { order: 0; }
  .benefits-photo { max-width: 380px; margin-inline: auto; }
  .pub-grid { grid-template-columns: repeat(2, 1fr); }
  .footer-grid { grid-template-columns: 1fr; gap: 48px; }
}

@media (max-width: 680px) {
  .section { padding-block: 60px; }
  .pill-grid { grid-template-columns: 1fr; }
  .benefits-grid { grid-template-columns: 1fr; }
  .pub-grid { grid-template-columns: 1fr; }
  .footer-contacts { grid-template-columns: 1fr; }
  .cta { flex-direction: column; align-items: flex-start; text-align: left; }
  .province-buttons .btn { min-width: 140px; height: 64px; font-size: 20px; }
}

/* ============================================================
   ============================================================
   FOUNDATION PHASE — new shared components
   (nav dropdowns, page-hero, data-table, person-card, form,
   archive-group, assoc-card). Existing rules above are untouched.
   ============================================================
   ============================================================ */

/* ------------------------------------------------------------
   Nav — pill-shaped items, dropdowns, active state
   ------------------------------------------------------------ */
.nav-item {
  position: relative;
  display: flex;
  align-items: center;
  gap: 0;
}

/* Pill-shaped nav links */
.nav-link {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: inherit;
  font-size: 15px;
  font-weight: 500;
  white-space: nowrap;
  background: none;
  border: 0;
  padding: 9px 16px;
  border-radius: 999px;
  font-family: inherit;
  cursor: pointer;
  transition: background 0.2s ease, color 0.2s ease;
}
.nav-link:hover {
  background: rgba(29, 86, 50, 0.06);
  color: var(--green);
}
.nav-link--toggle { font-weight: 500; }

/* Active page indicator — green pill background */
.nav-link.active,
.nav-item.active > .nav-link {
  color: var(--green);
  font-weight: 600;
  background: rgba(29, 86, 50, 0.08);
}

/* Split "link + caret" items (Events): pull the caret tight to its
   label so it matches the inline carets on the pure-toggle menus. */
.nav-link:has(+ .nav-caret) { padding-right: 4px; }
.nav-caret {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: none;
  border: 0;
  padding: 9px 12px 9px 4px;
  margin-left: -2px;
  border-radius: 999px;
  cursor: pointer;
  color: inherit;
  line-height: 0;
  transition: background 0.2s ease, color 0.2s ease;
}
.nav-caret:hover { background: rgba(29, 86, 50, 0.06); color: var(--green); }

/* Caret chevron */
.caret {
  width: 8px;
  height: 8px;
  border-right: 2px solid currentColor;
  border-bottom: 2px solid currentColor;
  transform: rotate(45deg);
  transition: transform 0.2s ease;
  display: inline-block;
  margin-top: -3px;
}
.nav-item--has-menu.open .caret,
.nav-item--has-menu:hover .caret { transform: rotate(-135deg); margin-top: 2px; }

/* Events is the only split "link + caret" menu. On desktop, make the
   link and caret share ONE continuous pill (like the single-button
   menus) instead of highlighting just the word "Events" and leaving the
   caret detached outside the pill. */
@media (min-width: 981px) {
  .nav-item--has-menu:has(> .nav-caret) {
    border-radius: 999px;
    transition: background 0.2s ease;
  }
  .nav-item--has-menu:has(> .nav-caret):hover,
  .nav-item--has-menu:has(> .nav-caret):focus-within,
  .nav-item--has-menu:has(> .nav-caret).open,
  .nav-item--has-menu:has(> .nav-caret).active {
    background: rgba(29, 86, 50, 0.08);
  }
  /* Children ride transparently on the shared pill (no double pill / seam) */
  .nav-item--has-menu:has(> .nav-caret) .nav-link,
  .nav-item--has-menu:has(> .nav-caret) .nav-caret { background: transparent; }
  .nav-item--has-menu:has(> .nav-caret):hover .nav-link,
  .nav-item--has-menu:has(> .nav-caret):focus-within .nav-link,
  .nav-item--has-menu:has(> .nav-caret).open .nav-link,
  .nav-item--has-menu:has(> .nav-caret).active .nav-link { color: var(--green); }
}

/* Dropdown panel — gap bridge technique fixes the hover miss */
.dropdown {
  display: none;
  flex-direction: column;
  gap: 2px;
  position: absolute;
  top: 100%;                     /* flush with the nav item */
  left: 0;
  min-width: 260px;
  padding-top: 10px;             /* invisible bridge — fills the gap */
  z-index: 60;
}
/* The visible dropdown card sits inside, after the padding bridge */
.dropdown::before {
  content: "";
  position: absolute;
  top: 10px;
  left: 0;
  right: 0;
  bottom: 0;
  background: #fff;
  border: 1px solid rgba(0, 0, 0, 0.06);
  border-radius: 16px;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.1), 0 2px 6px rgba(0, 0, 0, 0.04);
  z-index: -1;
}
.dropdown a {
  position: relative;
  padding: 11px 18px;
  border-radius: 10px;
  font-size: 14px;
  font-weight: 500;
  color: var(--ink);
  margin: 0 8px;
  transition: background 0.15s ease, color 0.15s ease;
}
.dropdown a:first-child { margin-top: 14px; }
.dropdown a:last-child { margin-bottom: 8px; }
.dropdown a:hover,
.dropdown a:focus-visible { background: rgba(29, 86, 50, 0.06); color: var(--green); }
.dropdown a.active { color: var(--green); font-weight: 700; }

.nav-item--has-menu:hover .dropdown,
.nav-item--has-menu:focus-within .dropdown,
.nav-item--has-menu.open .dropdown { display: flex; }

/* ------------------------------------------------------------
   Mobile nav collapse (extends existing @media 980px rule)
   ------------------------------------------------------------ */
@media (max-width: 980px) {
  .nav {
    align-items: stretch;
  }
  .nav.nav--open .nav-links,
  .nav.nav--open .nav-contact {
    display: flex;
  }
  .nav-links {
    position: absolute;
    top: 100%;
    left: 0;
    right: 0;
    flex-direction: column;
    gap: 0;
    background: #fff;
    border-bottom: 1px solid #eee;
    box-shadow: 0 16px 30px rgba(0, 0, 0, 0.1);
    padding: 8px 4px;
  }
  .nav-contact {
    position: absolute;
    top: calc(100% + 1px);
    left: 0;
    right: 0;
    margin: 0;
    border-radius: 0;
    justify-content: center;
    background: var(--beige);
  }
  .nav-item {
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    border-bottom: 1px solid #f1f1f1;
  }
  .nav-item:last-child { border-bottom: 0; }
  .nav-item > .nav-link,
  .nav-item > .nav-link--toggle {
    width: 100%;
    justify-content: space-between;
    padding: 16px 18px;
  }
  .nav-item--has-menu {
    flex-wrap: wrap;
  }
  .nav-item--has-menu .nav-link { flex: 1; padding: 16px 18px; }
  .nav-item--has-menu .nav-caret {
    padding: 16px 18px;
  }
  .nav-link { border-radius: 0; }
  .dropdown {
    display: none;
    position: static;
    box-shadow: none;
    border: 0;
    border-radius: 0;
    background: var(--beige);
    width: 100%;
    padding: 4px 10px 10px 28px;
  }
  .dropdown::before { display: none; }
  .dropdown a { margin: 0; }
  .dropdown a:first-child { margin-top: 0; }
  .dropdown a:last-child { margin-bottom: 0; }
  .nav-item--has-menu.open .dropdown { display: flex; }
  .nav-item--has-menu:hover .dropdown,
  .nav-item--has-menu:focus-within .dropdown {
    display: none; /* hover shouldn't open on touch/mobile */
  }
  .nav-item--has-menu.open:hover .dropdown,
  .nav-item--has-menu.open:focus-within .dropdown,
  .nav-item--has-menu.open .dropdown {
    display: flex;
  }
}

/* ------------------------------------------------------------
   Page hero — compact inner-page banner
   ------------------------------------------------------------ */
.page-hero {
  position: relative;
  background: var(--green-hero);
  overflow: hidden;
  color: #fff;
}
.page-hero::before {
  content: "";
  position: absolute;
  inset: 0;
  background: url("assets/hero-bg.jpg") center top / cover no-repeat;
  opacity: 0.35;
}
.page-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(32,59,48,0.55) 0%, rgba(32,59,48,0.92) 100%);
}
.page-hero-inner {
  position: relative;
  z-index: 1;
  padding-block: 56px 44px;
}
.page-hero h1 {
  margin: 0 0 14px;
  font-size: clamp(30px, 3.6vw, 48px);
  font-weight: 200;
  line-height: 1.2;
}
.page-hero .breadcrumb {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  font-size: 15px;
  color: var(--muted);
  letter-spacing: 0.02em;
}
.page-hero .breadcrumb a { color: var(--muted); }
.page-hero .breadcrumb a:hover { color: #fff; }
.page-hero .breadcrumb span[aria-hidden] { color: rgba(255,255,255,0.5); }
.page-hero .breadcrumb .current { color: #fff; font-weight: 600; }

/* ------------------------------------------------------------
   Data table — AGM agenda / gov-relations submissions
   ------------------------------------------------------------ */
.table-responsive {
  width: 100%;
  overflow-x: auto;
  border-radius: 16px;
  border: 1px solid var(--beige-border);
}
.data-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 16px;
  min-width: 560px;
}
.data-table thead th {
  background: var(--green);
  color: #fff;
  text-align: left;
  font-weight: 600;
  padding: 16px 20px;
  white-space: nowrap;
}
.data-table tbody td {
  padding: 14px 20px;
  border-bottom: 1px solid var(--beige-border);
  vertical-align: top;
}
.data-table tbody tr:nth-child(even) { background: var(--beige); }
.data-table tbody tr:last-child td { border-bottom: 0; }
.data-table a { color: var(--green); font-weight: 600; text-decoration: underline; }

/* ------------------------------------------------------------
   Person card — board of directors grid
   ------------------------------------------------------------ */
.person-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(240px, 1fr));
  gap: 32px;
}
.person-card {
  background: #fff;
  border: 1px solid #ececec;
  border-radius: 20px;
  padding: 36px 28px;
  text-align: center;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.06);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.person-card:hover { transform: translateY(-4px); box-shadow: 0 12px 28px rgba(0,0,0,0.12); }
.person-avatar {
  width: 92px;
  height: 92px;
  margin: 0 auto 20px;
  border-radius: 50%;
  background: var(--green);
  color: #fff;
  display: grid;
  place-items: center;
  font-size: 28px;
  font-weight: 600;
  letter-spacing: 0.02em;
  overflow: hidden;
}
.person-avatar img { width: 100%; height: 100%; object-fit: cover; }
.person-card h3 { margin: 0 0 6px; font-size: 20px; font-weight: 600; }
.person-role { font-size: 15px; font-weight: 600; color: var(--green); margin-bottom: 4px; }
.person-assoc { font-size: 14px; color: #555; }

/* ------------------------------------------------------------
   Form — contact page
   ------------------------------------------------------------ */
.form { display: flex; flex-direction: column; gap: 22px; max-width: 640px; }
.form-group { display: flex; flex-direction: column; gap: 8px; }
.form-group label { font-size: 15px; font-weight: 600; }
.form-required { color: #b3261e; margin-left: 2px; }
.form-group input,
.form-group textarea {
  font: inherit;
  font-size: 16px;
  padding: 14px 18px;
  border: 1px solid rgba(0, 0, 0, 0.2);
  border-radius: 12px;
  background: #fff;
  color: var(--ink);
  transition: border-color 0.15s ease, box-shadow 0.15s ease;
}
.form-group textarea { min-height: 160px; resize: vertical; }
.form-group input:focus,
.form-group textarea:focus {
  outline: none;
  border-color: var(--green);
  box-shadow: 0 0 0 3px rgba(29, 86, 50, 0.15);
}
.form-note { font-size: 14px; color: #666; }
.form .btn { align-self: flex-start; }

/* ------------------------------------------------------------
   Archive group — magazine archive, year-grouped
   ------------------------------------------------------------ */
.archive-group { margin-bottom: 64px; }
.archive-group:last-child { margin-bottom: 0; }
.archive-group h2 {
  display: inline-flex;
  align-items: baseline;
  gap: 14px;
  font-size: clamp(26px, 3vw, 36px);
  font-weight: 600;
  color: var(--green);
  margin: 0 0 28px;
  padding-bottom: 12px;
  border-bottom: 3px solid var(--green);
}

/* ------------------------------------------------------------
   Association card — redesigned with hero image + overlapping logo
   ------------------------------------------------------------ */
.assoc-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
  gap: 32px;
}
.assoc-card {
  position: relative;
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid #ececec;
  border-radius: 20px;
  overflow: hidden;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.06);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.assoc-card:hover { transform: translateY(-4px); box-shadow: 0 12px 28px rgba(0,0,0,0.12); }

/* ---------- Hero image strip ---------- */
.assoc-card__hero {
  position: relative;
  width: 100%;
  height: 140px;
  overflow: hidden;
  flex-shrink: 0;
}
.assoc-card__hero img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.4s ease;
}
.assoc-card:hover .assoc-card__hero img { transform: scale(1.05); }
/* Dark gradient overlay so the logo reads on any photo */
.assoc-card__hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(13, 40, 24, 0.55) 0%, rgba(13, 40, 24, 0.1) 50%, transparent 100%);
  pointer-events: none;
}

/* ---------- Logo — overlaps the hero/content boundary ---------- */
.assoc-card__logo {
  display: block;
  width: 72px;
  height: 72px;
  margin: -36px auto 0;
  border-radius: 16px;
  border: 3px solid #fff;
  background: #fff;
  object-fit: contain;
  object-position: center;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
  position: relative;
  z-index: 1;
  flex-shrink: 0;
}

/* ---------- Card body (text + contact below the logo) ---------- */
.assoc-card__body {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  padding: 16px 26px 28px;
  flex: 1;
}

/* Title */
.assoc-card h3 {
  margin: 12px 0 0;
  font-size: 20px;
  line-height: 1.3;
  font-weight: 700;
  color: var(--green);
}
/* Thin divider between title and contact */
.assoc-card__divider {
  width: 40px;
  height: 2px;
  background: var(--green);
  border: none;
  margin: 12px auto 14px;
  opacity: 0.3;
  border-radius: 1px;
}
/* Contact details */
.assoc-card address,
.assoc-card p {
  flex: 1;
  font-style: normal;
  font-size: 14px;
  line-height: 1.8;
  color: #555;
  margin: 0;
}
.assoc-card address a,
.assoc-card p a { color: var(--green); font-weight: 600; text-decoration: none; }
.assoc-card address a:hover,
.assoc-card p a:hover { text-decoration: underline; }

/* Small glyph before phone / email links */
.assoc-card address a[href^="tel:"]::before,
.assoc-card address a[href^="mailto:"]::before,
.assoc-card p a[href^="mailto:"]::before {
  content: "";
  display: inline-block;
  width: 13px;
  height: 13px;
  margin-right: 5px;
  vertical-align: -1px;
  background: currentColor;
  opacity: 0.85;
}
.assoc-card address a[href^="tel:"]::before {
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z'/%3E%3C/svg%3E") center / contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72c.127.96.361 1.903.7 2.81a2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45c.907.339 1.85.573 2.81.7A2 2 0 0 1 22 16.92z'/%3E%3C/svg%3E") center / contain no-repeat;
}
.assoc-card address a[href^="mailto:"]::before,
.assoc-card p a[href^="mailto:"]::before {
  -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='4' width='20' height='16' rx='2'/%3E%3Cpath d='m22 6-10 7L2 6'/%3E%3C/svg%3E") center / contain no-repeat;
  mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23000' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='2' y='4' width='20' height='16' rx='2'/%3E%3Cpath d='m22 6-10 7L2 6'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* Full-width CTA at bottom */
.assoc-card .btn {
  align-self: stretch;
  margin-top: 20px;
  padding: 13px 18px;
  font-size: 15px;
  white-space: normal;
  text-align: center;
  line-height: 1.3;
}

/* ---------- No-hero fallback ----------
   Cards without .assoc-card__hero (404, member-directory, membership)
   get standard padding so they don't collapse. */
.assoc-card:not(:has(.assoc-card__hero)) {
  padding: 32px 28px;
  align-items: center;
  text-align: center;
}
.assoc-card:not(:has(.assoc-card__hero)) h3 { margin-top: 0; }
.assoc-card:not(:has(.assoc-card__hero)) p { margin-bottom: 0; }

/* ------------------------------------------------------------
   Footer legal bar — bilingual (EN/FR) + copyright.
   Single source of truth (an earlier duplicate block was removed).
   Desktop: legal links left, copyright right. Mobile: stacked, centered.
   ------------------------------------------------------------ */
.footer-bottom-inner {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 10px 22px;
  padding-block: 22px;
}
.footer-legal {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px 14px;
  font-size: 13.5px;
  letter-spacing: 0.01em;
  color: rgba(255, 255, 255, 0.6);
}
/* Thin divider between the English and French legal groups */
.footer-legal--fr {
  padding-left: 22px;
  border-left: 1px solid rgba(255, 255, 255, 0.16);
}
.footer-legal a {
  color: rgba(255, 255, 255, 0.6);
  transition: color 0.15s ease;
}
.footer-legal a:hover { color: #fff; text-decoration: underline; text-underline-offset: 3px; }
/* Push the copyright to the right edge on desktop */
.footer-copy {
  margin-left: auto;
  font-size: 13px;
  color: rgba(255, 255, 255, 0.5);
}
@media (max-width: 680px) {
  .footer-bottom-inner { flex-direction: column; text-align: center; }
  .footer-legal--fr { padding-left: 0; border-left: 0; }
  .footer-copy { margin-left: 0; }
}

/* ------------------------------------------------------------
   Foundation-phase responsive tweaks
   ------------------------------------------------------------ */
@media (max-width: 980px) {
  .page-hero-inner { padding-block: 44px 36px; }
}
@media (max-width: 680px) {
  .person-grid { grid-template-columns: 1fr; }
  .assoc-grid { grid-template-columns: 1fr; }
  .data-table { min-width: 480px; }
}

/* ------------------------------------------------------------
   Provincial Associations — Leaflet map of Canada + association cards
   ------------------------------------------------------------ */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* Spacing between the two intro paragraphs above the map (scoped to
   this page's intro so the shared .body-lg rule stays untouched). */
.provincial-intro-lead + .provincial-intro-lead { margin-top: 20px; }

/* Small label heading above each column of the map/cards pair —
   generic + reusable wherever a section needs a lightweight
   sub-heading above a panel. */
.panel-heading {
  margin: 0 0 18px;
  font-size: 15px;
  font-weight: 600;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: var(--green);
}

/* Bulleted list used under a .panel-heading outside a .resp-card —
   same spacing rhythm as .resp-card ul for consistency. */
.role-list {
  margin: 0 0 20px;
  padding-left: 22px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}

/* ------------------------------------------------------------
   Region explorer — a split view: a large, flat, zoomed interactive
   map on the LEFT, the four association cards (2×2) on the RIGHT at
   equal height. A live readout replaces the old stacked map tooltips.
   ------------------------------------------------------------ */

/* Split layout: map | cards. The map gets the larger share; both
   columns stretch to equal height so neither leaves dead space. */
.region-explorer {
  display: grid;
  grid-template-columns: minmax(0, 1.25fr) minmax(0, 1fr);
  gap: 32px;
  align-items: stretch;
}

/* The map panel: a clean, light card matching the site's card language
   (rounded, soft shadow, beige border) — no 3D tilt, no dark stage.
   Flex column so the map stage grows to fill the column height. */
.region-map {
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid var(--beige-border);
  border-radius: 24px;
  padding: 24px;
  box-shadow: 0 8px 30px rgba(0, 0, 0, 0.06);
}

/* Header row: section label on the left, live hover readout on the right. */
.region-map__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 12px 20px;
  margin-bottom: 18px;
}
.region-map__head .panel-heading { margin: 0; }

/* Live readout — updates on hover/focus (aria-live). Neutral hint at
   rest; green when a region is active; muted grey for prairies. */
.region-readout {
  display: flex;
  align-items: baseline;
  gap: 10px;
  min-height: 24px;
  padding: 8px 16px;
  border-radius: 999px;
  background: var(--beige);
  border: 1px solid var(--beige-border);
  transition: background 0.2s ease, border-color 0.2s ease;
}
.region-readout__hint {
  font-size: 14px;
  color: #6b6b60;
}
.region-readout__label {
  font-size: 15px;
  font-weight: 700;
  color: var(--ink);
}
.region-readout__sub {
  font-size: 13px;
  font-weight: 600;
  color: var(--green);
}
.region-readout__sub::before {
  content: "";
  display: inline-block;
  width: 1px;
  height: 12px;
  margin-right: 10px;
  vertical-align: -1px;
  background: var(--beige-border);
}
.region-readout--active {
  background: rgba(29, 86, 50, 0.08);
  border-color: rgba(29, 86, 50, 0.3);
}
.region-readout--muted .region-readout__sub { color: #8a8575; }

/* Map stage: a large, flat, beige-framed container that grows to fill
   the panel so the map has maximum room in its column. */
.region-map__stage {
  flex: 1;
  display: flex;
  min-height: 460px;
  border-radius: 16px;
  overflow: hidden;
  background: #f4f1e6;
  border: 1px solid var(--beige-border);
}
.leaflet-map {
  flex: 1;
  width: 100%;
  height: auto;
  min-height: 460px;
  background: #f4f1e6;
  font-family: "Outfit", system-ui, sans-serif;
}

/* Smooth, GPU-cheap hover: transition the SVG region paths directly so
   highlighting eases in/out instead of snapping (replaces the old
   per-hover fly-to-zoom, which was the source of the jank). */
.leaflet-region {
  transition: fill-opacity 0.25s ease, stroke-width 0.2s ease, stroke 0.2s ease;
}
.leaflet-region--interactive { cursor: pointer; }
.leaflet-region--muted { cursor: default; }

/* Leaflet's own chrome, restyled to sit quietly inside the theme. */
.leaflet-map .leaflet-control-attribution {
  background: rgba(255, 255, 255, 0.82);
  font-size: 10px;
  color: #666;
}
.leaflet-map .leaflet-control-attribution a { color: var(--green); }

/* Legend: doubles as the guaranteed-keyboard-accessible equivalent of
   the four map regions, and fills out the map column's height so it
   balances against the association-cards column. */
.map-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 14px;
  list-style: none;
  margin: 18px 0 0;
  padding: 0;
}
.map-legend__item { display: flex; align-items: center; }
.map-legend__item--muted {
  font-size: 14px;
  color: #666;
  display: flex;
  align-items: center;
  gap: 8px;
}
.map-legend__btn {
  display: flex;
  align-items: center;
  gap: 8px;
  font: inherit;
  font-size: 14px;
  font-weight: 600;
  color: var(--ink);
  background: var(--beige);
  border: 1px solid var(--beige-border);
  border-radius: 999px;
  padding: 8px 16px;
  cursor: pointer;
  transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
}
.map-legend__btn:hover,
.map-legend__btn:focus-visible,
.map-legend__btn.is-active {
  background: var(--green);
  border-color: var(--green);
  color: #fff;
  transform: translateY(-2px);
}
.map-legend__btn:focus-visible { outline: 3px solid var(--green-hero); outline-offset: 2px; }
.map-legend__swatch {
  width: 14px;
  height: 14px;
  border-radius: 4px;
  background: var(--green);
  flex-shrink: 0;
}
.map-legend__btn:hover .map-legend__swatch,
.map-legend__btn:focus-visible .map-legend__swatch,
.map-legend__btn.is-active .map-legend__swatch {
  background: #fff;
}
.map-legend__swatch--muted { background: var(--beige-border); }

.map-caption {
  margin: 16px 0 0;
  font-size: 14px;
  color: #666;
}
.map-caption a { color: var(--green); font-weight: 600; }

/* Right column: heading + a 2×2 grid of association cards, filling the
   column height so it balances against the map. */
.region-cards {
  display: flex;
  flex-direction: column;
}
.region-cards .panel-heading { margin-bottom: 18px; }
.assoc-grid--four {
  grid-template-columns: repeat(2, 1fr);
  gap: 22px;
  flex: 1;
}

/* Highlight pulse when a card is targeted from the map or legend */
.assoc-card--active {
  border-color: var(--green);
  box-shadow: 0 0 0 3px rgba(29, 86, 50, 0.25), 0 12px 28px rgba(0, 0, 0, 0.12);
  transform: translateY(-4px);
}

/* Tablet: stack the split — map on top, cards below in a 2×2. */
@media (max-width: 980px) {
  .region-explorer { grid-template-columns: 1fr; gap: 28px; }
  .region-map__stage, .leaflet-map { min-height: 420px; }
}
/* Mobile: single-column cards, shorter map. */
@media (max-width: 680px) {
  .assoc-grid--four { grid-template-columns: 1fr; }
  .region-map__stage, .leaflet-map { min-height: 340px; }
  .region-map { padding: 18px; }
  .map-legend__item--muted { width: 100%; }
  .region-map__head { align-items: flex-start; }
}

/* ============================================================
   Legal / long-form prose pages (terms, privacy, modalités, etc.)
   ============================================================ */
.legal {
  max-width: 760px;
  margin-inline: auto;
}
.legal > * + * { margin-top: 22px; }
.legal h2 {
  font-size: 26px;
  font-weight: 700;
  color: var(--green);
  margin: 44px 0 4px;
}
.legal h2:first-child { margin-top: 0; }
.legal h3 {
  font-size: 19px;
  font-weight: 600;
  color: var(--ink);
  margin: 32px 0 4px;
}
.legal p {
  font-size: 16px;
  line-height: 1.75;
  color: #333;
}
.legal ul,
.legal ol {
  margin: 0;
  padding-left: 22px;
  display: flex;
  flex-direction: column;
  gap: 10px;
  font-size: 16px;
  line-height: 1.65;
  color: #333;
}
.legal ol ol,
.legal ul ul {
  margin-top: 10px;
}
.legal a { color: var(--green); font-weight: 600; text-decoration: underline; }
.legal address { font-style: normal; line-height: 1.8; }
.legal hr {
  border: none;
  border-top: 1px solid var(--beige-border);
  margin: 40px 0;
}
.legal-updated {
  font-size: 14px;
  color: #666;
  margin-bottom: 8px;
}

/* ============================================================
   CONSOLIDATED PAGE COMPONENTS
   Folded in from the per-page scoped <style> blocks that used to
   live in about / agm-2025 / contact / contactez-nous / education /
   events / imbf-summit-2025 / member-directory / profil-achc /
   publications / quebec. Additive only — nothing here is used by
   index.html, so the frozen homepage is unaffected.
   ============================================================ */

/* ---------- Centered narrow intro / CTA copy ----------
   Replaces the three near-identical scoped rules (.edu-cta,
   .directory-intro, .imbf-cta) with one shared utility. */
.prose-center {
  text-align: center;
  max-width: 720px;
  margin-inline: auto;
}
.prose-center p { max-width: 640px; margin-inline: auto; }
.prose-center > :last-child { margin-bottom: 0; }
/* Trailing-space modifiers, for when the block is itself a lead-in paragraph. */
.prose-center--tight { margin-bottom: 8px; }
.prose-center--gap { margin-bottom: 48px; }

/* ---------- Two-column responsive list block ----------
   Shared by about.html and profil-achc.html (was duplicated). */
.resp-cols {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
}
.resp-cols h3 {
  font-size: 22px;
  font-weight: 600;
  color: var(--green);
  margin: 0 0 18px;
}
.resp-cols ul {
  margin: 0;
  padding-left: 20px;
  display: flex;
  flex-direction: column;
  gap: 14px;
  font-size: 17px;
  line-height: 1.5;
}

/* ---------- About: stylized MB mark + tagline ---------- */
.about-mb {
  text-align: center;
  padding: 48px clamp(24px, 5vw, 90px);
  border-radius: 30px;
  background: var(--green-hero);
  color: #fff;
}
.about-mb__mark {
  width: 84px;
  height: 84px;
  margin: 0 auto 22px;
  border-radius: 50%;
  background: #fff;
  display: grid;
  place-items: center;
  padding: 12px;
}
.about-mb__mark img {
  width: 100%;
  height: 100%;
  object-fit: contain;
  border-radius: 6px;
}
.about-mb__tagline {
  font-size: clamp(20px, 2.2vw, 27px);
  font-weight: 300;
  font-style: italic;
  max-width: 780px;
  margin-inline: auto;
  line-height: 1.4;
}

/* ---------- Bordered notice band (AGM details) ---------- */
.notice-band {
  border: 1px solid var(--beige-border);
  background: var(--beige);
  border-radius: 24px;
  padding: 40px clamp(24px, 4vw, 56px);
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 32px;
  margin-bottom: 56px;
}
.notice-band__item h3 {
  margin: 0 0 8px;
  font-size: 15px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--green);
}
.notice-band__item p {
  font-size: 18px;
  line-height: 1.5;
}

/* ---------- Addresses inside light association cards ----------
   .assoc-card sits on white, so it needs the plain (non-italic)
   treatment; the italic default only suits the dark footer. */
.assoc-card address { font-style: normal; line-height: 1.7; }
.assoc-card address a { color: var(--green); font-weight: 600; }

/* ---------- Compact name/role cards (Quebec board) ---------- */
.board-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 20px;
  margin-top: 24px;
}
.board-card {
  background: var(--beige);
  border: 1px solid var(--beige-border);
  border-radius: 14px;
  padding: 18px 20px;
}
.board-card strong { display: block; color: var(--green); font-size: 17px; }
.board-card span { font-size: 14px; color: #555; }

/* ---------- Publications: current issue + alt-lenders feature ---------- */
.issue-hero {
  display: grid;
  grid-template-columns: 260px 1fr;
  gap: 48px;
  align-items: center;
}
.issue-hero__cover,
.alt-lenders__cover {
  border-radius: 4px;
  overflow: hidden;
  box-shadow: 0 12px 32px rgba(0, 0, 0, 0.16);
}
.issue-hero__cover img,
.alt-lenders__cover img {
  width: 100%;
  aspect-ratio: 621 / 792;
  object-fit: cover;
  display: block;
}
.issue-hero__kicker {
  display: inline-block;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--green);
  background: var(--beige);
  border: 1px solid var(--beige-border);
  border-radius: 999px;
  padding: 6px 16px;
  margin-bottom: 18px;
}
.issue-hero h2,
.alt-lenders h2 { margin: 0 0 14px; }
.issue-hero__actions { margin-top: 26px; display: flex; gap: 16px; flex-wrap: wrap; }
.alt-lenders {
  display: grid;
  grid-template-columns: 1fr 220px;
  gap: 48px;
  align-items: center;
  background: var(--beige);
  border: 1px solid var(--beige-border);
  border-radius: 24px;
  padding: 48px clamp(24px, 5vw, 56px);
}
.alt-lenders__cover { box-shadow: 0 10px 26px rgba(0, 0, 0, 0.12); }
.alt-lenders .btn { margin-top: 22px; }

/* ---------- Consolidated component responsive rules ---------- */
@media (max-width: 980px) {
  .resp-cols { grid-template-columns: 1fr; gap: 36px; }
}
@media (max-width: 780px) {
  .issue-hero,
  .alt-lenders { grid-template-columns: 1fr; text-align: center; }
  .issue-hero__cover,
  .alt-lenders__cover { max-width: 220px; margin-inline: auto; }
  .issue-hero__actions { justify-content: center; }
}

/* ------------------------------------------------------------
   Contact page — primary form band (form + orienting aside)
   Form leads the page; association directory is secondary below.
   ------------------------------------------------------------ */
.contact-layout {
  display: grid;
  grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
  gap: 56px;
  align-items: start;
}
.contact-form-col .lead-heading { margin-bottom: 32px; }
.form-row {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 22px;
}
.contact-aside {
  background: var(--beige);
  border: 1px solid var(--beige-border);
  border-radius: 24px;
  padding: 40px 32px;
}
.contact-aside h3 {
  margin: 0 0 16px;
  font-size: 22px;
  font-weight: 700;
  color: var(--green);
}
.contact-aside p {
  font-size: 16px;
  line-height: 1.7;
  color: #333;
}
.contact-aside p + p { margin-top: 16px; }
/* Jump list to the association cards below, so the aside carries its own
   height against the tall form instead of dead-ending mid-column. */
.contact-aside__links {
  list-style: none;
  margin: 24px 0 0;
  padding: 22px 0 0;
  border-top: 1px solid var(--beige-border);
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.contact-aside__links a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 11px 0;
  font-size: 16px;
  font-weight: 600;
  color: var(--green);
  border-bottom: 1px solid rgba(204, 197, 169, 0.5);
  transition: padding-inline-start 0.15s ease;
}
.contact-aside__links li:last-child a { border-bottom: 0; }
.contact-aside__links a::after { content: "\2192"; font-weight: 400; }
.contact-aside__links a:hover { padding-inline-start: 6px; }
@media (prefers-reduced-motion: reduce) {
  .contact-aside__links a { transition: none; }
  .contact-aside__links a:hover { padding-inline-start: 0; }
}

@media (max-width: 980px) {
  .contact-layout { grid-template-columns: 1fr; gap: 40px; }
}
@media (max-width: 680px) {
  .form-row { grid-template-columns: 1fr; }
}

/* ------------------------------------------------------------
   Section heading helpers + responsibility cards (About / Profil)
   Gives inner pages one consistent alignment axis and stops
   naked lists floating in whitespace.
   ------------------------------------------------------------ */
.section-head { margin-bottom: 48px; }
.section-head--center { text-align: center; }
.section-head--center .lead-heading { margin-inline: auto; }
.section-head--center .body-lg { max-width: 720px; margin-inline: auto; }
.section-head .lead-heading { margin-bottom: 16px; }
.section-head .body-lg { color: #444; }

/* Responsibility panels — the two-column list block, now given a real
   surface so it reads as content rather than stray text. */
.resp-card {
  background: var(--beige);
  border: 1px solid var(--beige-border);
  border-radius: 24px;
  padding: 36px 34px;
}
.resp-card h3 {
  margin: 0 0 18px;
  padding-bottom: 14px;
  border-bottom: 1px solid var(--beige-border);
  font-size: 20px;
  font-weight: 700;
  color: var(--green);
}
.resp-card ul {
  margin: 0;
  padding-left: 20px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  font-size: 17px;
  line-height: 1.5;
  color: #333;
}

/* ------------------------------------------------------------
   Province picker — search field + region buttons on ONE axis.
   Previously the field was left-aligned at 569px while the buttons
   were centred, so the two blocks visually collided.
   ------------------------------------------------------------ */
.province-picker {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 28px;
}
.province-picker .province-search {
  margin-top: 0;
  width: 100%;
  max-width: 569px;
}
.province-picker .province-buttons { width: 100%; }

/* Secondary aside note — for "no association in this region"-style
   caveats that should read as supporting, not as body copy. */
/* Compact, icon-led note. Sizes to its content and centers, so it reads
   as an intentional caption rather than a full-width floating banner.
   The info icon is a CSS ::before, so no page markup needs to change. */
.aside-note {
  display: flex;
  align-items: flex-start;
  gap: 11px;
  width: fit-content;
  max-width: 640px;
  margin: 22px auto 0;
  padding: 12px 20px 12px 16px;
  background: #f6f5ef;
  border: 1px solid var(--beige-border);
  border-radius: 12px;
  font-size: 15px;
  line-height: 1.55;
  color: #555;
  text-align: left;
}
.aside-note::before {
  content: "";
  flex: none;
  width: 19px;
  height: 19px;
  margin-top: 1px;
  background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%231d5632' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='10'/%3E%3Cline x1='12' y1='16' x2='12' y2='12'/%3E%3Cline x1='12' y1='8' x2='12.01' y2='8'/%3E%3C/svg%3E") center / contain no-repeat;
}
.aside-note a { color: var(--green); font-weight: 600; text-decoration: underline; }

/* Vacant-seat person cards — keeps placeholder seats legible as
   deliberate rather than looking like unfinished content. */
.person-card--vacant { opacity: 0.72; }
.person-card--vacant .person-avatar {
  background: #e6e6e6;
  color: #777;
}

/* ------------------------------------------------------------
   Paragraph rhythm. The global reset sets `p { margin: 0 }` for the
   homepage's single-paragraph blocks, so consecutive paragraphs ran
   together as one slab. Restore spacing only where they stack.
   ------------------------------------------------------------ */
.body-lg + .body-lg,
.prose-center p + p { margin-top: 18px; }
/* A button directly after copy was butting against the last text line. */
p + .btn,
.body-lg + .btn { margin-top: 28px; }

/* ------------------------------------------------------------
   Inner-page rhythm + brand CTA
   ------------------------------------------------------------ */

/* Two stacked .section blocks compounded to 176px of gap, which read as
   dead space on the shorter inner pages. Tighten the join — scoped away
   from the homepage, whose long-form rhythm depends on the full value. */
body:not([data-page="home"]) .section + .section { padding-top: 24px; }
body:not([data-page="home"]) .section + .section-tight,
body:not([data-page="home"]) .section-tight + .section { padding-top: 16px; }

/* ------------------------------------------------------------
   Collapsible archive years (regulations). Scoped to details.* so the
   plain div.archive-group used on magazine-archive is unaffected.
   Collapsed rows must stack tightly — the open-state margins left ~160px
   of empty space between every collapsed year.
   ------------------------------------------------------------ */
details.archive-group {
  margin-bottom: 0;
  border-bottom: 1px solid var(--beige-border);
}
details.archive-group summary {
  cursor: pointer;
  padding: 20px 0;
  list-style: none;
  display: flex;
  align-items: center;
  gap: 14px;
}
details.archive-group summary::-webkit-details-marker { display: none; }
/* Custom chevron, rotated when the group is open. */
details.archive-group summary::after {
  content: "";
  width: 9px;
  height: 9px;
  border-right: 2px solid var(--green);
  border-bottom: 2px solid var(--green);
  transform: rotate(45deg);
  transition: transform 0.18s ease;
}
details.archive-group[open] summary::after { transform: rotate(-135deg); }
details.archive-group summary h2 {
  margin: 0;
  padding-bottom: 0;
  border-bottom: 0;
  font-size: clamp(22px, 2.2vw, 28px);
}
details.archive-group summary:hover h2 { opacity: 0.75; }
details.archive-group[open] { padding-bottom: 36px; }
details.archive-group[open] summary { margin-bottom: 18px; }
@media (prefers-reduced-motion: reduce) {
  details.archive-group summary::after { transition: none; }
}

/* A .section-head that is the only child of its section has nothing to
   space itself from — its 48px bottom margin just compounded the gap. */
.section > .container > .section-head:last-child,
.section-tight > .container > .section-head:last-child { margin-bottom: 0; }

/* ============================================================
   DESIGN ELEVATION — shared components (photo heroes, headshot
   board hierarchy, stat band, badges, elevated cards).
   Additive; authentic-content only. Used across all pages.
   ============================================================ */

/* ---------- Photo page-hero ----------
   Real photograph behind the dark-green banner, so inner pages stop
   sharing one flat fill. Add .page-hero--photo and set --hero-img. */
.page-hero--photo::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: var(--hero-img);
  background-size: cover;
  background-position: center;
  opacity: 0.28;
  z-index: 0;
}
.page-hero--photo::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(120deg, rgba(19,49,30,0.92) 0%, rgba(32,59,48,0.72) 55%, rgba(29,86,50,0.45) 100%);
  z-index: 0;
}
.page-hero--photo .page-hero-inner { padding-block: 76px 60px; }
.page-hero--photo .lead-in {
  max-width: 620px;
  margin-top: 14px;
  font-size: 18px;
  line-height: 1.6;
  color: rgba(255,255,255,0.88);
}

/* ---------- Stat / credibility band (TRUE facts only) ---------- */
.stat-band {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 24px;
  padding: 40px clamp(24px, 4vw, 56px);
  background: var(--beige);
  border: 1px solid var(--beige-border);
  border-radius: 24px;
}
.stat { text-align: center; }
.stat__num {
  font-size: clamp(32px, 4vw, 46px);
  font-weight: 700;
  line-height: 1;
  color: var(--green);
  letter-spacing: -0.01em;
}
.stat__label {
  margin-top: 10px;
  font-size: 15px;
  line-height: 1.4;
  color: #555;
}

/* ---------- Badge / kicker pill ---------- */
.badge {
  display: inline-block;
  font-size: 13px;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--green);
  background: var(--beige);
  border: 1px solid var(--beige-border);
  border-radius: 999px;
  padding: 6px 16px;
}
.badge--solid { background: var(--green); color: #fff; border-color: var(--green); }

/* ---------- Board of Directors — real headshots + hierarchy ----------
   Featured leadership row (President/VP larger), then the elected grid,
   then the Executive Director band. Photo-forward, clear seniority. */
.board-lead {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 32px;
  margin-bottom: 32px;
}
.board-lead .person-card { text-align: left; }
.board-lead .person-card {
  display: grid;
  grid-template-columns: 132px 1fr;
  gap: 26px;
  align-items: center;
  padding: 28px 30px;
}
.board-lead .person-avatar {
  width: 132px;
  height: 132px;
  margin: 0;
}
.board-lead .person-card h3 { font-size: 24px; }
.board-lead .person-role { font-size: 16px; }

/* Photo headshots sit on a soft ring; initials keep the green fill. */
.person-avatar--photo { background: #eef1ee; box-shadow: inset 0 0 0 3px rgba(29,86,50,0.12); }
.person-card--lead { border-top: 3px solid var(--green); }

/* Executive Director — distinct single band, not a lonely grid cell. */
.exec-band {
  display: grid;
  grid-template-columns: 150px 1fr;
  gap: 36px;
  align-items: center;
  background: var(--green-hero);
  color: #fff;
  border-radius: 24px;
  padding: 40px clamp(28px, 4vw, 52px);
}
.exec-band .person-avatar { width: 150px; height: 150px; margin: 0; }
.exec-band h3 { margin: 0 0 6px; font-size: 26px; font-weight: 600; }
.exec-band .exec-role { color: #cfe3d6; font-weight: 600; margin-bottom: 14px; }
.exec-band p { color: rgba(255,255,255,0.85); line-height: 1.6; max-width: 620px; }
.exec-band a.exec-link { color: #fff; font-weight: 600; text-decoration: underline; }

/* ---------- Responsive ---------- */
@media (max-width: 900px) {
  .stat-band { grid-template-columns: repeat(2, 1fr); gap: 28px 20px; }
  .board-lead { grid-template-columns: 1fr; }
}
@media (max-width: 680px) {
  .board-lead .person-card { grid-template-columns: 96px 1fr; gap: 18px; padding: 22px; }
  .board-lead .person-avatar { width: 96px; height: 96px; }
  .exec-band { grid-template-columns: 1fr; text-align: center; justify-items: center; }
  .exec-band .person-avatar { margin: 0 auto; }
}

/* ---------- Per-page hero imagery ----------
   Keyed on <body data-page>, so pages set no inline styles. Each page
   gets a DISTINCT photo — retiring the one-flat-hero-everywhere look.
   Uses only authentic on-disk assets (photos, magazine covers). */
body[data-page="directors"]   .page-hero--photo { --hero-img: url('assets/directors/john-woods.jpg'); }
body[data-page="about"]       .page-hero--photo { --hero-img: url('assets/handshake.jpg'); }
body[data-page="provincial"]  .page-hero--photo { --hero-img: url('assets/gov-relations.jpg'); }
body[data-page="membership"]  .page-hero--photo { --hero-img: url('assets/benefits.jpg'); }
body[data-page="education"]   .page-hero--photo { --hero-img: url('assets/education.jpg'); }
body[data-page="member-directory"] .page-hero--photo { --hero-img: url('assets/handshake.jpg'); }
body[data-page="events"]      .page-hero--photo { --hero-img: url('assets/gov-relations.jpg'); }
body[data-page="imbf-summit-2025"] .page-hero--photo { --hero-img: url('assets/handshake.jpg'); }
body[data-page="agm-2025"]    .page-hero--photo { --hero-img: url('assets/gov-relations.jpg'); }
body[data-page="regulations"] .page-hero--photo { --hero-img: url('assets/gov-relations.jpg'); }
body[data-page="contact"]     .page-hero--photo { --hero-img: url('assets/benefits.jpg'); }
body[data-page="publications"] .page-hero--photo { --hero-img: url('assets/magazines/cmb-fall-2025-current.jpg'); }
body[data-page="magazine-archive"] .page-hero--photo { --hero-img: url('assets/magazines/cmb-fall-2025-current.jpg'); }
body[data-page="quebec"]      .page-hero--photo { --hero-img: url('assets/gov-relations.jpg'); }
body[data-page="profil-achc"] .page-hero--photo { --hero-img: url('assets/handshake.jpg'); }
body[data-page="contactez-nous"] .page-hero--photo { --hero-img: url('assets/benefits.jpg'); }

/* ============================================================
   CONCISE INNER PAGES — density pass.
   Inner pages carry far less content than the homepage, so the 88px
   homepage rhythm left them mostly whitespace. Tighten aggressively so
   information is visible with minimal scrolling. Homepage unaffected.
   ============================================================ */
body:not([data-page="home"]) .section { padding-block: 48px; }
body:not([data-page="home"]) .section-tight { padding-block: 32px; }
body:not([data-page="home"]) .section + .section,
body:not([data-page="home"]) .section-tight + .section-tight,
body:not([data-page="home"]) .section + .section-tight,
body:not([data-page="home"]) .section-tight + .section { padding-top: 0; }

/* Compact photo hero — shorter band. */
body:not([data-page="home"]) .page-hero--photo .page-hero-inner { padding-block: 44px 36px; }
body:not([data-page="home"]) .page-hero .page-hero-inner { padding-block: 40px 32px; }

/* Tighter section-head so the label/heading/intro stack is compact. */
body:not([data-page="home"]) .section-head { margin-bottom: 28px; }
body:not([data-page="home"]) .section-head .lead-heading { margin-bottom: 10px; }
body:not([data-page="home"]) .lead-heading { font-size: clamp(26px, 2.6vw, 34px); margin-bottom: 16px; }
body:not([data-page="home"]) .body-lg { font-size: 17px; }

/* Compact person cards — smaller footprint, denser grid. */
body:not([data-page="home"]) .person-card { padding: 22px 18px; }
body:not([data-page="home"]) .person-avatar { width: 76px; height: 76px; margin-bottom: 14px; }
.person-grid { gap: 20px; }

/* Compact board-lead officer cards. */
body:not([data-page="home"]) .board-lead { gap: 20px; margin-bottom: 20px; }
body:not([data-page="home"]) .board-lead .person-card { grid-template-columns: 88px 1fr; gap: 18px; padding: 18px 22px; }
body:not([data-page="home"]) .board-lead .person-avatar { width: 88px; height: 88px; margin: 0; }
body:not([data-page="home"]) .board-lead .person-card h3 { font-size: 20px; }

/* Compact exec band. */
body:not([data-page="home"]) .exec-band { grid-template-columns: 104px 1fr; gap: 24px; padding: 26px 32px; }
body:not([data-page="home"]) .exec-band .person-avatar { width: 104px; height: 104px; }
body:not([data-page="home"]) .exec-band h3 { font-size: 21px; }

/* Directors: officers row sits directly above the members grid. */
.person-grid--tight { margin-top: 4px; }
body:not([data-page="home"]) .exec-band { margin-top: 28px; }

/* ============================================================
   TEAM GRID — clean, dense board/people layout (replaces the
   over-large "featured officer" cards that left huge empty space).
   Even cards, prominent photos, robust at every width.
   ============================================================ */
.team-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 18px;
}
.team-card {
  background: #fff;
  border: 1px solid #e8e8e8;
  border-top: 3px solid #e8e8e8;
  border-radius: 16px;
  padding: 26px 20px;
  text-align: center;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.05);
  transition: transform 0.15s ease, box-shadow 0.15s ease;
}
.team-card:hover { transform: translateY(-3px); box-shadow: 0 12px 26px rgba(0, 0, 0, 0.1); }
.team-card__photo {
  width: 108px;
  height: 108px;
  border-radius: 50%;
  margin: 0 auto 16px;
  object-fit: cover;
  background: #eef1ee;
  box-shadow: inset 0 0 0 3px rgba(29, 86, 50, 0.1);
}
.team-card__name { font-size: 18px; font-weight: 700; line-height: 1.25; }
.team-card__role { color: var(--green); font-weight: 600; font-size: 14px; margin-top: 5px; }
.team-card__assoc { color: #666; font-size: 13px; margin-top: 3px; }
.team-card--officer { border-top-color: var(--green); }
.team-card--vacant { opacity: 0.6; }
.team-card--vacant .team-card__photo {
  display: grid;
  place-items: center;
  background: #ededed;
  color: #999;
  font-weight: 700;
  font-size: 22px;
  box-shadow: none;
}

/* Executive Director — slim dark strip, well-proportioned. */
.exec-card {
  display: flex;
  align-items: center;
  gap: 26px;
  background: var(--green-hero);
  color: #fff;
  border-radius: 16px;
  padding: 24px 30px;
  margin-top: 20px;
}
.exec-card__photo { width: 92px; height: 92px; border-radius: 50%; flex: none; object-fit: cover; }
.exec-card__name { font-size: 20px; font-weight: 600; }
.exec-card__role { color: #bcd6c4; font-weight: 600; font-size: 14px; margin-top: 3px; }
.exec-card__desc { color: rgba(255, 255, 255, 0.8); font-size: 14px; line-height: 1.55; margin-top: 8px; max-width: 640px; }

@media (max-width: 900px) { .team-grid { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 480px) {
  .team-grid { grid-template-columns: 1fr 1fr; gap: 12px; }
  .team-card { padding: 20px 12px; }
  .team-card__photo { width: 84px; height: 84px; }
  .exec-card { flex-direction: column; text-align: center; }
}

/* ------------------------------------------------------------
   Cream region cards (reusable) — the beige/parchment treatment
   from the Publications space, applied to region/join card grids.
   Pairs with solid, uniform-width CTAs that bottom-align cleanly.
   ------------------------------------------------------------ */
.assoc-card.card-beige {
  background: var(--beige);
  border: 1px solid var(--beige-border);
  box-shadow: none;
  padding: 30px 28px;
}
.assoc-card.card-beige:hover { transform: translateY(-3px); box-shadow: 0 10px 24px rgba(0, 0, 0, 0.08); }
/* One-line region names don't need the 2-line title reservation, which
   was only there to align wrapping titles across a row. */
.assoc-card.card-beige h3 { min-height: 0; margin-bottom: 10px; }
.assoc-card.card-beige p { margin-bottom: 22px; }

/* ============================================================
   Cooperative-agenda section (homepage) — redesigned.
   Replaces the dated white-pills-over-washed-image block with a
   clean centered checklist + province image cards that carry an
   always-visible CTA. Province photos help users self-identify.
   ============================================================ */
.check-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 14px 30px;
}
.check-list--center { max-width: 860px; margin-inline: auto; }
.check-list li {
  display: flex;
  align-items: center;
  gap: 11px;
  font-size: 17px;
  font-weight: 500;
}
.check-list li::before {
  content: "";
  flex: none;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  background: var(--green) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23ffffff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E") center / 13px no-repeat;
}

.coop-provinces-head { text-align: center; margin-top: 48px; margin-bottom: 24px; }
.coop-provinces-head h3 { font-size: clamp(22px, 2.2vw, 30px); font-weight: 300; margin: 0; }

/* Province cards — image + gradient + always-visible CTA, whole card clickable. */
.province-cards {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 22px;
}
.province-card {
  position: relative;
  display: block;
  aspect-ratio: 4 / 5;
  border-radius: 20px;
  overflow: hidden;
  isolation: isolate;
  box-shadow: 0 8px 24px rgba(0, 0, 0, 0.14);
}
.province-card__img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform 0.4s ease;
}
.province-card::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(16, 43, 27, 0.92) 4%, rgba(16, 43, 27, 0.4) 40%, rgba(16, 43, 27, 0) 72%);
}
.province-card__body {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1;
  padding: 22px 22px 24px;
  color: #fff;
}
.province-card__name { display: block; font-size: 21px; font-weight: 700; }
.province-card__cta {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  margin-top: 8px;
  font-size: 14px;
  font-weight: 600;
  letter-spacing: 0.03em;
  color: #fff;
}
.province-card__cta svg { width: 16px; height: 16px; transition: transform 0.2s ease; }
.province-card:hover .province-card__img { transform: scale(1.06); }
.province-card:hover .province-card__cta svg { transform: translateX(4px); }

@media (max-width: 900px) { .province-cards { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 520px) {
  .province-cards { gap: 14px; }
  .province-card { aspect-ratio: 5 / 4; }
}
@media (prefers-reduced-motion: reduce) {
  .province-card__img, .province-card__cta svg { transition: none; }
  .province-card:hover .province-card__img { transform: none; }
}

/* Verbatim-content helpers */
.prose-subhead { font-size: 18px; font-weight: 600; color: var(--green); margin: 8px 0 6px; }
.prose-center .prose-subhead { text-align: center; }
.agm-agenda {
  max-width: 760px;
  margin: 20px 0 0;
  padding-left: 22px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  font-size: 17px;
  line-height: 1.55;
  color: #333;
}

.exec-card__link {
  display: inline-block;
  margin-top: 12px;
  font-size: 14px;
  font-weight: 600;
  color: #fff;
  text-decoration: underline;
}

/* ------------------------------------------------------------
   Issuu in-page viewer — a modal overlay so magazine covers and the
   "View" CTAs open a smooth embedded flip-book instead of pushing the
   visitor off-site to issuu.com in a new tab.
   ------------------------------------------------------------ */
.issuu-modal {
  position: fixed;
  inset: 0;
  z-index: 1000;
  display: none;
  align-items: center;
  justify-content: center;
  padding: 40px 20px;
}
.issuu-modal.is-open { display: flex; }
body.issuu-modal-open { overflow: hidden; }
.issuu-modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(17, 17, 17, 0.75);
}
.issuu-modal__panel {
  position: relative;
  width: min(1000px, 100%);
  max-height: calc(100vh - 80px);
  aspect-ratio: 800 / 519;
  background: #111;
  border-radius: 16px;
  overflow: hidden;
  box-shadow: 0 30px 80px rgba(0, 0, 0, 0.45);
}
.issuu-modal__frame, .issuu-modal__frame iframe {
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}
.issuu-modal__close {
  position: absolute;
  top: 12px;
  right: 12px;
  z-index: 2;
  width: 40px;
  height: 40px;
  border-radius: 50%;
  background: rgba(0, 0, 0, 0.55);
  color: #fff;
  border: none;
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
  display: grid;
  place-items: center;
  transition: background 0.15s ease;
}
.issuu-modal__close:hover { background: rgba(0, 0, 0, 0.8); }
@media (prefers-reduced-motion: no-preference) {
  .issuu-modal.is-open .issuu-modal__panel { animation: issuu-modal-pop 0.18s ease; }
}
@keyframes issuu-modal-pop {
  from { transform: scale(0.96); opacity: 0; }
  to { transform: scale(1); opacity: 1; }
}
@media (max-width: 680px) {
  .issuu-modal { padding: 16px; }
  .issuu-modal__panel { max-height: calc(100vh - 32px); }
}
