/* ConfederationHH brand stylesheet — hand-written, no framework, no build.
 *
 * GDPR Art. 9: masonic affiliation is sensitive data and this site is
 * EU-only by design. NO Google Fonts / third-party CDN <link> or @import
 * (the Google Fonts CDN logs visitor IPs in the US). The fonts below are
 * self-hosted: the "Cormorant Garamond" and "Inter" .woff2 files are
 * vendored under /static/fonts/ and served same-origin via @font-face.
 * There is still zero third-party request — the GDPR posture is preserved
 * (no visitor IP/referrer ever leaks to a CDN). Both families keep their
 * system fallbacks so a blocked/failed font load degrades gracefully.
 */

/* ---- Self-hosted webfonts (same-origin, SIL OFL) -------------------- */

@font-face {
  font-family: "Cormorant Garamond";
  src: url("/static/fonts/cormorant-garamond-600.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Cormorant Garamond";
  src: url("/static/fonts/cormorant-garamond-700.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Inter";
  src: url("/static/fonts/inter-400.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Inter";
  src: url("/static/fonts/inter-600.woff2") format("woff2");
  font-weight: 600;
  font-style: normal;
  font-display: swap;
}

:root {
  /* Brand aliases consume the canonical tokens from _tokens.css (#25).
     Old --primary / --secondary / --accent names retained to avoid churn
     in every component selector — they now resolve to --color-gold /
     --color-blue, with --accent folded into blue per the two-color rule. */
  --primary: var(--color-gold);
  --primary-dark: var(--color-gold-soft);
  --secondary: var(--color-blue);
  --accent: var(--color-blue);
  --bg: #fdfcf7;
  --surface: #f8f6f0;
  --text: #1a1a1a;
  --muted: #5c5c5c;
  --error: #c0392b;
  --success: #27ae60;
  --border: #e5e0d4;

  /* Derived alert surfaces (kept legible: dark ink on a pale tint). */
  --error-bg: #fdecea;
  --error-ink: #8a1c1c;
  --ok-bg: #eaf6ec;
  --ok-ink: #1c5a2a;

  /* --font-body comes from _tokens.css. --font-heading is kept as an
     alias to --font-display so existing component selectors keep working. */
  --font-heading: var(--font-display);

  /* Spacing scale (1.25rem base rhythm, ~×ratio steps). */
  --space-1: 0.25rem;
  --space-2: 0.5rem;
  --space-3: 0.75rem;
  --space-4: 1rem;
  --space-5: 1.5rem;
  --space-6: 2rem;
  --space-7: 3rem;
  --space-8: 4rem;

  /* Container widths (narrow matches the existing .site-main). */
  --container-wide: 1140px;
  --container-narrow: 760px;

  /* Radius scale. */
  --radius-sm: 4px;
  --radius-md: 6px;
  --radius-lg: 10px;

  /* Shadow scale — restrained, institutional (low spread, soft ink). */
  --shadow-sm: 0 1px 2px rgba(26, 35, 50, 0.06),
    0 1px 3px rgba(26, 35, 50, 0.08);
  --shadow-md: 0 2px 6px rgba(26, 35, 50, 0.08),
    0 6px 16px rgba(26, 35, 50, 0.1);
  --shadow-lg: 0 6px 18px rgba(26, 35, 50, 0.12),
    0 14px 36px rgba(26, 35, 50, 0.14);
}

* {
  box-sizing: border-box;
}

html {
  -webkit-text-size-adjust: 100%;
}

body {
  margin: 0;
  font-family: var(--font-body);
  /* WCAG AA: body copy is always --text on --bg, never the gold token. */
  color: var(--text);
  background: var(--bg);
  line-height: 1.6;
}

h1,
h2,
h3 {
  font-family: var(--font-heading);
  color: var(--secondary);
  line-height: 1.2;
  font-weight: 600;
}

a {
  color: var(--accent);
  text-decoration: underline;
  text-underline-offset: 0.15em;
}

a:hover {
  color: var(--primary-dark);
}

/* ---- Header + navigation -------------------------------------------- */

.site-header {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem 1rem;
  padding: 1rem 1.5rem;
  background: var(--secondary);
  /* Keep the existing 3px gold accent rule — core brand identity. */
  border-bottom: 3px solid var(--primary);
}

.brand {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: var(--size-lg);
  color: #fdfcf7;
  text-decoration: none;
}

.brand:hover {
  color: var(--primary);
}

.site-nav {
  display: flex;
  flex-wrap: wrap;
  gap: 1.25rem;
}

.site-nav a {
  color: #f1ede1;
  text-decoration: none;
  font-size: var(--size-xs);
}

.site-nav a:hover {
  color: var(--primary);
}

/* Language switch — small, accessible, JS-free anchors. */
.lang-switch {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: var(--size-xs);
}

.lang-option {
  padding: 0.15rem 0.45rem;
  border-radius: 3px;
  text-decoration: none;
  color: #f1ede1;
  border: 1px solid transparent;
}

a.lang-option:hover {
  color: var(--primary);
  border-color: var(--primary);
}

.lang-option.is-active {
  color: var(--secondary);
  background: var(--primary);
  font-weight: 700;
}

/* ---- Main layout ---------------------------------------------------- */

.site-main {
  max-width: 760px;
  margin: 0 auto;
  padding: 2.5rem 1.5rem 3rem;
}

.hero {
  margin-bottom: 2.5rem;
}

.hero h1 {
  font-size: var(--size-lg);
  margin: 0 0 0.5rem;
}

.lead {
  color: var(--muted);
  font-size: var(--size-md);
}

section + section {
  margin-top: 2.5rem;
}

.home-charter,
.home-values,
.home-count {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 1.5rem;
}

.home-charter h2,
.home-values h2 {
  margin-top: 0;
}

.values-grid {
  list-style: none;
  margin: 1rem 0 0;
  padding: 0;
  display: grid;
  gap: 0.75rem;
}

.values-grid .value {
  background: var(--bg);
  border-left: 3px solid var(--primary);
  padding: 0.85rem 1rem;
  border-radius: 0 4px 4px 0;
}

.home-count .lead {
  margin: 0;
}

/* ---- Buttons -------------------------------------------------------- */

.btn {
  display: inline-block;
  padding: 0.65rem 1.3rem;
  border: 1px solid var(--primary);
  border-radius: 4px;
  background: transparent;
  color: var(--secondary);
  cursor: pointer;
  text-decoration: none;
  font-size: var(--size-md);
  font-weight: 600;
}

.btn:hover {
  border-color: var(--primary-dark);
  color: var(--primary-dark);
}

.btn-primary {
  /* Gold background with dark ink: #1a2332 on #d1b466 clears WCAG AA. */
  background: var(--primary);
  color: var(--secondary);
  border-color: var(--primary);
}

.btn-primary:hover {
  background: var(--primary-dark);
  border-color: var(--primary-dark);
  color: var(--secondary);
}

.cta-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  margin-top: 1.5rem;
}

/* ---- Lodge directory + lodge page ----------------------------------- */

.lodge-list {
  list-style: none;
  margin: 1.5rem 0 0;
  padding: 0;
}

.lodge-list-item {
  padding: 1rem 0;
  border-bottom: 1px solid var(--border);
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.5rem 0.75rem;
}

.lodge-list-item a {
  font-family: var(--font-heading);
  font-size: var(--size-lg);
  font-weight: 600;
  text-decoration: none;
}

.lodge-short-name,
.lodge-continent,
.lodge-country {
  color: var(--muted);
  font-size: var(--size-xs);
}

.lodge-header {
  border-bottom: 2px solid var(--primary);
  padding-bottom: 1rem;
  margin-bottom: 1.5rem;
}

.lodge-header h1 {
  margin-bottom: 0.25rem;
}

.lodge-location {
  color: var(--muted);
  display: flex;
  gap: 0.75rem;
}

.lodge-bio {
  margin-top: 1.5rem;
}

.lodge-private-bio {
  margin-top: 2rem;
  background: var(--surface);
  border: 1px solid var(--border);
  border-left: 3px solid var(--accent);
  border-radius: 0 6px 6px 0;
  padding: 1.25rem 1.5rem;
}

/* ---- Article feed + article page ------------------------------------ */

.article-list {
  list-style: none;
  margin: 1.5rem 0 0;
  padding: 0;
}

.article-card {
  padding: 1.25rem 0;
  border-bottom: 1px solid var(--border);
}

.article-card-title {
  margin: 0 0 0.35rem;
  font-size: var(--size-lg);
}

.article-card-title a {
  text-decoration: none;
}

.article-card-excerpt {
  margin: 0.35rem 0;
}

.article-card-meta,
.article-meta {
  color: var(--muted);
  font-size: var(--size-xs);
}

.article-language {
  margin-left: 0.75rem;
}

.article-header {
  border-bottom: 2px solid var(--primary);
  padding-bottom: 1rem;
  margin-bottom: 1.5rem;
}

.article-body {
  font-size: var(--size-md);
}

.article-body img {
  max-width: 100%;
  height: auto;
}

/* ---- Forms ---------------------------------------------------------- */

.auth-form {
  max-width: 26rem;
}

.auth-form label {
  display: block;
  margin-top: 1rem;
  font-weight: 600;
}

.auth-form input {
  width: 100%;
  padding: 0.6rem;
  margin-top: 0.3rem;
  border: 1px solid var(--border);
  border-radius: 4px;
  font-size: var(--size-md);
  font-family: inherit;
  background: #fff;
  color: var(--text);
}

.auth-form input:focus {
  outline: 2px solid var(--primary);
  outline-offset: 1px;
  border-color: var(--primary-dark);
}

.auth-form button {
  margin-top: 1.5rem;
}

/* ---- Alerts --------------------------------------------------------- */

.alert {
  padding: 0.85rem 1rem;
  border-radius: 4px;
  margin: 1rem 0;
}

.alert-error {
  background: var(--error-bg);
  color: var(--error-ink);
  border: 1px solid var(--error);
}

.alert-ok {
  background: var(--ok-bg);
  color: var(--ok-ink);
  border: 1px solid var(--success);
}

/* ---- Error page ----------------------------------------------------- */

.error-page {
  text-align: center;
  padding: 2rem 0;
}

.error-page h1 {
  font-size: var(--size-lg);
  color: var(--primary);
  margin-bottom: 0;
}

/* ---- Footer --------------------------------------------------------- */

.site-footer {
  text-align: center;
  padding: 2rem 1.5rem;
  color: var(--muted);
  font-size: var(--size-xs);
  border-top: 1px solid var(--border);
  background: var(--surface);
}

.empty-state {
  color: var(--muted);
  font-style: italic;
}

/* ---- Responsive (single breakpoint) --------------------------------- */

@media (min-width: 768px) {
  .site-header {
    flex-wrap: nowrap;
    padding: 1.1rem 2rem;
  }

  .hero h1 {
    font-size: var(--size-hero);
  }

  .site-main {
    padding: 3rem 1.5rem 4rem;
  }
}

/* ===================================================================== *
 *  DESIGN SYSTEM — Phase 1 layout primitives (additive)                 *
 *  New, opt-in classes only. Nothing above this banner was modified.    *
 * ===================================================================== */

/* ---- Container ------------------------------------------------------ */

.container {
  max-width: var(--container-wide);
  margin: 0 auto;
  padding: 0 var(--space-5);
  width: 100%;
}

.container--narrow {
  max-width: var(--container-narrow);
}

/* ---- Section rhythm bands ------------------------------------------- */

.section {
  padding: var(--space-7) 0;
}

.section--alt {
  background: var(--surface);
}

.section--tight {
  padding: var(--space-6) 0;
}

.section-head {
  text-align: center;
  margin-bottom: var(--space-6);
}

.section-head h2 {
  margin: 0 0 var(--space-2);
  font-size: var(--size-lg);
}

.section-head .lead {
  margin: 0;
}

/* Small uppercase gold eyebrow (the "UNITED IN FRATERNITY" kicker). */
.eyebrow {
  display: inline-block;
  margin: 0 0 var(--space-3);
  font-family: var(--font-body);
  font-size: var(--size-xs);
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--primary-dark);
}

/* ---- Responsive auto-fit grid -------------------------------------- */

.grid {
  display: grid;
  gap: var(--space-5);
  grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
}

.grid--tight {
  gap: var(--space-4);
}

.grid--3 {
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
}

/* ---- Card ----------------------------------------------------------- */

.card {
  background: var(--bg);
  border: 1px solid var(--border);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-sm);
  padding: var(--space-5);
  transition: box-shadow 0.18s ease, transform 0.18s ease;
}

.card:hover {
  box-shadow: var(--shadow-md);
  transform: translateY(-2px);
}

.card--flat {
  box-shadow: none;
}

.card--flat:hover {
  box-shadow: var(--shadow-sm);
  transform: none;
}

.card h3 {
  margin-top: 0;
}

/* Centered icon/value card (the FRATERNITY / SAGESSE / CHARITY row). */
.card--value {
  text-align: center;
}

.card--value .card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 3rem;
  height: 3rem;
  margin-bottom: var(--space-3);
  color: var(--primary-dark);
  font-size: var(--size-lg);
}

/* ---- Hero band (full-bleed homepage hero) -------------------------- */

.hero--band {
  /* Full-bleed navy band; gold accents; light ink — WCAG AA on #1a2332. */
  background: var(--secondary);
  color: #f1ede1;
  padding: var(--space-8) 0;
  text-align: center;
}

.hero--band .container {
  max-width: var(--container-narrow);
}

.hero--band .eyebrow {
  /* Gold #d1b466 on navy #1a2332 ≈ 7.2:1 — clears WCAG AA. */
  color: var(--primary);
}

.hero--band h1 {
  /* Light serif headline on navy: #f6f3ea on #1a2332 clears AA large. */
  color: #f6f3ea;
  font-size: var(--size-hero);
  font-weight: 700;
  margin: 0 0 var(--space-4);
}

.hero--band .lead {
  color: #d8d3c4;
  font-size: var(--size-md);
  max-width: 44ch;
  margin: 0 auto var(--space-6);
}

.hero--band .cta-row {
  justify-content: center;
}

/* ---- Header — extended top-bar variant ----------------------------- */

.site-header--bar {
  /* Inherits the base .site-header (navy bg + 3px gold border) when both
     classes are present. This adds a brand-slot / nav / lang layout. */
  gap: var(--space-4) var(--space-5);
}

.site-header--bar .header-brand {
  display: flex;
  align-items: center;
  gap: var(--space-3);
}

.site-header--bar .header-brand img,
.site-header--bar .header-brand svg {
  height: 2.25rem;
  width: auto;
}

.site-header--bar .header-actions {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--space-4) var(--space-5);
}

/* ---- Footer — multi-column variant --------------------------------- */

.site-footer--cols {
  text-align: left;
  padding: var(--space-7) 0 var(--space-5);
}

.site-footer--cols .footer-inner {
  max-width: var(--container-wide);
  margin: 0 auto;
  padding: 0 var(--space-5);
  display: grid;
  gap: var(--space-6);
  grid-template-columns: 1fr;
}

.site-footer--cols .footer-col h3,
.site-footer--cols .footer-col h4 {
  margin: 0 0 var(--space-3);
  font-size: var(--size-xs);
  font-weight: 600;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--secondary);
}

.site-footer--cols .footer-col ul {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: var(--space-2);
}

.site-footer--cols .footer-col a {
  color: var(--muted);
  text-decoration: none;
}

.site-footer--cols .footer-col a:hover {
  color: var(--primary-dark);
  text-decoration: underline;
}

.site-footer--cols .footer-brand {
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: var(--size-md);
  color: var(--secondary);
}

.site-footer--cols .footer-brand-tagline {
  margin: var(--space-2) 0 0;
  font-size: var(--size-xs);
  color: var(--muted);
}

.site-footer--cols .copyright {
  max-width: var(--container-wide);
  margin: var(--space-6) auto 0;
  padding: var(--space-4) var(--space-5) 0;
  border-top: 1px solid var(--border);
  text-align: center;
  font-size: var(--size-xs);
  color: var(--muted);
}

/* ---- Badge (count pill, e.g. "17 Grandes Loges") ------------------- */

.badge {
  display: inline-block;
  padding: 0.28rem 0.7rem;
  border-radius: 999px;
  background: var(--surface);
  border: 1px solid var(--border);
  font-family: var(--font-body);
  font-size: var(--size-xs);
  font-weight: 600;
  letter-spacing: 0.06em;
  color: var(--secondary);
  text-transform: uppercase;
}

.badge--gold {
  background: var(--primary);
  border-color: var(--primary);
  color: var(--secondary);
}

.badge--ghost {
  background: transparent;
}

/* On a navy band the ghost badge needs light ink + gold border. */
.hero--band .badge--ghost {
  color: var(--primary);
  border-color: var(--primary);
}

/* ---- Table (admin lists) ------------------------------------------- */

.table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--size-xs);
}

.table th,
.table td {
  padding: var(--space-3) var(--space-4);
  text-align: left;
  border-bottom: 1px solid var(--border);
}

.table thead th {
  background: var(--surface);
  color: var(--secondary);
  font-weight: 600;
  border-bottom: 2px solid var(--border);
}

.table tbody tr:nth-child(even) {
  background: var(--surface);
}

.table tbody tr:hover {
  background: #f3efe4;
}

.table caption {
  caption-side: top;
  text-align: left;
  padding-bottom: var(--space-3);
  color: var(--muted);
  font-size: var(--size-xs);
}

/* ---- Refined form controls (additive — NOT .auth-form) ------------- */

.form {
  display: grid;
  gap: var(--space-5);
  max-width: 32rem;
}

.form-field {
  display: grid;
  gap: var(--space-2);
}

.form-field label {
  font-weight: 600;
  font-size: var(--size-xs);
  color: var(--secondary);
}

.form-field .field-hint {
  font-size: var(--size-xs);
  color: var(--muted);
}

.form-field input,
.form-field select,
.form-field textarea {
  width: 100%;
  padding: 0.6rem 0.75rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  font-size: var(--size-md);
  font-family: inherit;
  background: #fff;
  color: var(--text);
}

.form-field textarea {
  min-height: 7rem;
  resize: vertical;
}

.form-field input:focus,
.form-field select:focus,
.form-field textarea:focus {
  outline: 2px solid var(--primary);
  outline-offset: 1px;
  border-color: var(--primary-dark);
}

.form-field.is-error input,
.form-field.is-error select,
.form-field.is-error textarea {
  border-color: var(--error);
}

.form-field.is-error input:focus,
.form-field.is-error select:focus,
.form-field.is-error textarea:focus {
  outline-color: var(--error);
}

.form-field .field-error {
  font-size: var(--size-xs);
  color: var(--error-ink);
}

.form-actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--space-3);
  margin-top: var(--space-2);
}

/* ---- Button modifiers (existing .btn / .btn-primary untouched) ----- */

.btn--lg {
  padding: 0.85rem 1.8rem;
  font-size: var(--size-md);
}

.btn--ghost {
  background: transparent;
  border-color: #f1ede1;
  color: #f1ede1;
}

.btn--ghost:hover {
  border-color: var(--primary);
  color: var(--primary);
}

/* ---- Responsive — primitives at >= 768px --------------------------- */

@media (min-width: 768px) {
  .site-footer--cols .footer-inner {
    grid-template-columns: 2fr 1fr 1fr 1fr;
    gap: var(--space-7);
  }

  .hero--band h1 {
    font-size: var(--size-hero);
  }

  .hero--band {
    padding: calc(var(--space-8) * 1.4) 0;
  }

  .section {
    padding: var(--space-8) 0;
  }
}

/* Optional wider breakpoint — only kicks in on large desktops. */
@media (min-width: 1024px) {
  .section-head h2 {
    font-size: var(--size-lg);
  }
}

/* ===================================================================== *
 *  QA-FIX PASS — mobile nav, logout button, closing CTA, about blocks   *
 *  Additive only. Nothing above this banner was modified.               *
 * ===================================================================== */

/* ---- P1-2: CSS-only mobile nav (checkbox :checked sibling, zero JS) -- */

/* The toggle checkbox: visually hidden but FOCUSABLE (sr-only / clip
   pattern, NOT display:none) so the :checked sibling selector still
   fires and keyboard users can tab to it and toggle with Space. */
.nav-toggle {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}

/* The visible hamburger control. Hidden by default (desktop-first base);
   the <768px block below reveals it. Gold glyph on the navy header. */
.nav-burger {
  display: none;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
  padding: var(--space-2);
  font-size: var(--size-lg);
  line-height: 1;
  color: var(--primary);
  cursor: pointer;
  user-select: none;
  border-radius: var(--radius-sm);
  border: 1px solid transparent;
}

.nav-burger:hover {
  color: #f6f3ea;
}

/* Accessibility: visible focus ring on the burger when the (hidden)
   checkbox receives keyboard focus. */
.nav-toggle:focus-visible ~ .nav-burger {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
  border-color: var(--primary);
}

/* ---- P3-6: logout control matches text nav links ------------------- */

/* The logout <form> sits inline among text nav links. Strip its box so
   the button reads as a peer of `.site-nav a` (same ink, size, weight,
   gold hover, no border/background). Markup stays a real <button>. */
.logout-form {
  display: inline-flex;
  align-items: center;
  margin: 0;
}

.logout-form button {
  appearance: none;
  -webkit-appearance: none;
  background: transparent;
  border: 0;
  margin: 0;
  padding: 0;
  font-family: inherit;
  font-size: var(--size-xs);
  font-weight: 400;
  line-height: inherit;
  color: #f1ede1;
  text-decoration: none;
  cursor: pointer;
}

.logout-form button:hover,
.logout-form button:focus-visible {
  color: var(--primary);
}

.logout-form button:focus-visible {
  outline: 2px solid var(--primary);
  outline-offset: 2px;
  border-radius: var(--radius-sm);
}

/* ---- Closing CTA band (full-bleed, before the footer) -------------- */

.closing-cta {
  /* Mirrors .hero--band weight but reads as a closing banner: navy
     ground, gold accents, generous vertical air. */
  background: var(--secondary);
  color: #f1ede1;
  padding: var(--space-8) 0;
  text-align: center;
  border-top: 3px solid var(--primary);
}

.closing-cta .container {
  max-width: var(--container-narrow);
}

.closing-cta .eyebrow {
  /* Gold #d1b466 on navy #1a2332 ≈ 7.2:1 — clears WCAG AA. */
  color: var(--primary);
}

.closing-cta h2 {
  /* Light serif on navy: #f6f3ea on #1a2332 clears AA (large text). */
  color: #f6f3ea;
  font-size: var(--size-lg);
  font-weight: 700;
  margin: 0 0 var(--space-4);
}

.closing-cta .lead {
  /* #d8d3c4 on #1a2332 ≈ 9:1 — clears WCAG AA for body text. */
  color: #d8d3c4;
  font-size: var(--size-md);
  max-width: 46ch;
  margin: 0 auto var(--space-6);
}

.closing-cta .cta-row {
  justify-content: center;
  margin-top: 0;
}

/* On the navy CTA band the default outline .btn needs light ink so it
   stays legible (mirrors how .btn--ghost behaves on .hero--band). */
.closing-cta .btn {
  border-color: var(--primary);
  color: #f6f3ea;
}

.closing-cta .btn:hover {
  border-color: var(--primary);
  color: var(--primary);
}

.closing-cta .btn-primary {
  background: var(--primary);
  border-color: var(--primary);
  color: var(--secondary);
}

.closing-cta .btn-primary:hover {
  background: var(--primary-dark);
  border-color: var(--primary-dark);
  color: var(--secondary);
}

/* ---- About "Qui sommes-nous?" — intro + principles ----------------- */

.about-intro {
  display: grid;
  gap: var(--space-6);
  grid-template-columns: 1fr;
  align-items: start;
  margin-bottom: var(--space-7);
}

.about-intro p {
  /* Comfortable reading measure for institutional prose. */
  max-width: 68ch;
  font-size: var(--size-md);
}

.about-intro p:first-child {
  margin-top: 0;
}

.about-intro .about-aside {
  background: var(--surface);
  border: 1px solid var(--border);
  border-left: 3px solid var(--primary);
  border-radius: 0 var(--radius-md) var(--radius-md) 0;
  padding: var(--space-5);
  font-size: var(--size-xs);
  color: var(--muted);
}

.about-intro .about-aside h3 {
  margin-top: 0;
  font-size: var(--size-md);
}

/* 3-up dignified institutional cards. Composes with .grid / .grid--3
   (already defined above) but stands alone if used without them. */
.principles {
  display: grid;
  gap: var(--space-5);
  grid-template-columns: 1fr;
  margin-top: var(--space-5);
}

.principle-card {
  background: var(--bg);
  border: 1px solid var(--border);
  border-top: 3px solid var(--primary);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-sm);
  padding: var(--space-5);
}

.principle-card h3 {
  margin: 0 0 var(--space-3);
  font-family: var(--font-heading);
  font-size: var(--size-lg);
  color: var(--secondary);
}

.principle-card p {
  margin: 0;
  font-family: var(--font-body);
  color: var(--text);
  font-size: var(--size-md);
}

/* ---- Mobile collapse — below the desktop breakpoint ---------------- */

@media (max-width: 767.98px) {
  /* Reveal the hamburger; ≥44px tap target already set on the base. */
  .nav-burger {
    display: inline-flex;
  }

  /* Collapse the nav by default on small screens. */
  .site-nav {
    display: none;
    flex-direction: column;
    flex-wrap: nowrap;
    gap: 0;
    width: 100%;
    /* Full-width navy panel, consistent with the header ground. */
    background: var(--secondary);
    border-top: 1px solid rgba(209, 180, 102, 0.35);
  }

  /* Open state: checkbox checked → panel drops down stacked. */
  .nav-toggle:checked ~ .site-nav {
    display: flex;
  }

  /* Stacked links get generous tap spacing; gold hover preserved. */
  .site-nav a {
    display: block;
    width: 100%;
    padding: var(--space-4) var(--space-2);
    border-bottom: 1px solid rgba(209, 180, 102, 0.18);
  }

  .site-nav a:last-child {
    border-bottom: 0;
  }

  /* Logout row aligns with the stacked links inside the open panel. */
  .site-nav .logout-form {
    display: flex;
    width: 100%;
  }

  .site-nav .logout-form button {
    display: block;
    width: 100%;
    text-align: left;
    padding: var(--space-4) var(--space-2);
  }
}

/* ---- Desktop overrides for the QA-fix additions (>= 768px) --------- */

@media (min-width: 768px) {
  /* The burger never shows at desktop; the nav is always visible
     regardless of the (hidden) checkbox state — so resizing from
     mobile-open back to desktop never leaves the nav stuck hidden. */
  .nav-burger {
    display: none;
  }

  .site-nav,
  .nav-toggle:checked ~ .site-nav {
    display: flex;
  }

  .closing-cta h2 {
    font-size: var(--size-lg);
  }

  .about-intro {
    grid-template-columns: 2fr 1fr;
    gap: var(--space-7);
  }

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

/* --- Visual-parity pass: logo, charter 2-col, grand-lodge map ------ */

/* Header crest (replaces the text wordmark). Constrain by height so the
   navy bar keeps its proportions; width auto-scales. */
.brand-logo {
  display: block;
  height: 2.6rem;
  width: auto;
  max-width: 100%;
}

/* Founding-charter block: photo + text, two columns >=768px, stacked
   (image first) on mobile. Mirrors the live 2-col charter section. */
.charter-2col {
  display: grid;
  gap: var(--space-5);
  align-items: center;
}

.charter-2col-media img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-md);
}

.charter-2col-body .eyebrow {
  margin-bottom: var(--space-2);
}

.gl-map-wrap {
  margin: var(--space-5) 0;
}

/* Static decorative world map — never wider than the reading column,
   subtly dropped onto the gold band. */
.gl-map {
  display: block;
  width: 100%;
  max-width: 720px;
  height: auto;
  margin: 0 auto;
  opacity: 0.92;
}

@media (min-width: 768px) {
  .charter-2col {
    grid-template-columns: 1fr 1fr;
    gap: var(--space-7);
  }
}

/* ===================================================================== *
 *  INTERIOR-PAGE PRIMITIVES — page-hero banner + breadcrumb trail        *
 *  Additive only. Nothing above this banner was modified.                *
 * ===================================================================== */

/* ---- .page-hero — full-bleed navy top banner ----------------------- */

/* Full-bleed achieved the same way .hero--band and .closing-cta do it:
   .page-hero is a direct child of <body> / a sibling of .site-main, so
   it naturally spans the full viewport width with no negative-margin or
   100vw hack needed. The template wraps content in <div class="container">
   which then centers it to --container-wide with side gutters. */
.page-hero {
  background: var(--secondary);
  /* Gold bottom border mirrors the 3px gold rule on .site-header and
     .closing-cta (border-top) — consistent brand identity cadence. */
  border-bottom: 3px solid var(--primary);
  color: #f1ede1;
  padding: var(--space-7) 0;
}

.page-hero h1 {
  font-family: var(--font-heading);
  /* Light serif headline on navy: #f6f3ea on #1a2332 — same token as
     .hero--band h1 and .closing-cta h2, clears WCAG AA (large text). */
  color: #f6f3ea;
  font-size: var(--size-hero);
  font-weight: 700;
  margin: 0 0 var(--space-3);
  line-height: 1.15;
}

.page-hero .lead {
  /* #d8d3c4 on #1a2332 ≈ 9:1 — mirrors .hero--band .lead / .closing-cta
     .lead; clears WCAG AA for body text. */
  color: #d8d3c4;
  font-size: var(--size-md);
  margin: 0;
}

/* Gold eyebrow on navy: var(--primary) #d1b466 on #1a2332 ≈ 7.2:1,
   clears WCAG AA — mirrors .hero--band .eyebrow / .closing-cta .eyebrow. */
.page-hero .eyebrow {
  color: var(--primary);
}

/* ---- .breadcrumb — small navigation trail inside .page-hero -------- */

/* Sits above the h1 inside the .container; a separator ‹›› is provided
   by the template as literal text so only color/size/spacing are styled
   here — no content: pseudo-elements. */
.breadcrumb {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 0.2em 0.35em;
  margin: 0 0 var(--space-4);
  font-size: var(--size-xs);
  /* Slightly dimmed cream — legible on navy, visually subordinate to h1. */
  color: #b8b2a4;
  line-height: 1.4;
}

/* Breadcrumb links: cream at rest, gold on hover —
   mirrors .site-nav a / .site-nav a:hover on the navy header. */
.breadcrumb a {
  color: #f1ede1;
  text-decoration: none;
  text-underline-offset: 0.15em;
}

.breadcrumb a:hover {
  color: var(--primary);
  text-decoration: underline;
}

/* ---- Responsive — page-hero heading scales down on mobile ---------- */

@media (min-width: 768px) {
  .page-hero {
    padding: calc(var(--space-7) * 1.25) 0;
  }

  /* Desktop heading matches .hero--band h1 desktop size. */
  .page-hero h1 {
    font-size: var(--size-hero);
  }
}

/* ---- Contact page — form on left, contact cards on right ---------- */

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

.contact-grid {
  display: grid;
  gap: var(--space-5);
  grid-template-columns: 1fr;
}

@media (min-width: 900px) {
  .contact-grid {
    grid-template-columns: 2fr 1fr;
  }
}

.contact-form-card {
  padding: var(--space-6);
}

.contact-form {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
  margin-top: var(--space-4);
}

.contact-form .form-row {
  display: grid;
  gap: var(--space-4);
  grid-template-columns: 1fr;
}

@media (min-width: 600px) {
  .contact-form .form-row {
    grid-template-columns: 1fr 1fr;
  }
}

.contact-form input[type="text"],
.contact-form input[type="email"],
.contact-form textarea {
  font: inherit;
  width: 100%;
  padding: var(--space-3);
  background: var(--bg-muted, #f5f7fa);
  border: 1px solid transparent;
  border-radius: 6px;
  color: inherit;
}

.contact-form input:focus,
.contact-form textarea:focus {
  outline: 2px solid var(--primary);
  outline-offset: 1px;
  background: var(--bg);
}

.contact-form textarea {
  resize: vertical;
  min-height: 9rem;
}

.contact-form .consent {
  display: flex;
  align-items: flex-start;
  gap: var(--space-3);
  font-size: var(--size-xs);
}

.contact-form button[type="submit"] {
  align-self: flex-start;
}

.contact-cards {
  display: flex;
  flex-direction: column;
  gap: var(--space-4);
}

/* ===================================================================== *
 *  UI ELEVATION PASS — "chic" refinement                                *
 *                                                                       *
 *  Appended LAST so it wins on equal specificity. Goal: lift the same   *
 *  navy / gold / cream + Cormorant-serif identity to a more refined,    *
 *  editorial register — larger serif display moments, softer depth,     *
 *  and a few hairline gold details. Strictly within the two-colour and  *
 *  two-font rules; the only new sizing comes from the additive display  *
 *  tokens in _tokens.css. Nothing above this banner was modified.       *
 * ===================================================================== */

/* ---- Base rendering polish ----------------------------------------- */

body {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-rendering: optimizeLegibility;
}

::selection {
  background: var(--color-gold-thin);
  color: var(--secondary);
}

/* Serif headings get the tighter display leading + optical tracking. */
h1,
h2,
h3 {
  letter-spacing: var(--tracking-display);
}

/* ---- Eyebrow — flanked hairline on the centred (navy) bands -------- */

.eyebrow {
  letter-spacing: var(--tracking-eyebrow);
}

.hero--band .eyebrow,
.closing-cta .eyebrow,
.section-head .eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 0.75em;
}

.hero--band .eyebrow::before,
.hero--band .eyebrow::after,
.closing-cta .eyebrow::before,
.closing-cta .eyebrow::after {
  content: "";
  width: 1.75rem;
  height: 1px;
  background: var(--color-gold-faint);
}

/* ---- Header — soft lift so it reads as a fixed institutional bar ---- */

.site-header--bar {
  position: relative;
  z-index: 20;
  box-shadow: 0 2px 14px rgba(var(--color-blue-rgb), 0.18);
}

.brand-logo {
  height: 2.9rem;
}

/* ---- Hero band — depth gradient + display headline ----------------- */

.hero--band {
  /* Tone-on-tone navy gradient (lighter top-left → base navy): depth
     without a third hue — derived purely by lightening/darkening navy. */
  background:
    radial-gradient(
      120% 140% at 15% 0%,
      rgba(255, 255, 255, 0.08),
      rgba(255, 255, 255, 0) 55%
    ),
    linear-gradient(168deg, #013a86 0%, var(--color-blue) 58%, #00204f 100%);
  border-bottom: 3px solid var(--primary);
  padding: var(--space-8) 0;
}

.hero--band h1 {
  font-size: var(--size-display);
  line-height: var(--leading-display);
  letter-spacing: -0.015em;
  margin: var(--space-3) 0 var(--space-4);
}

.hero--band .lead {
  font-size: var(--size-lg);
  max-width: 46ch;
  line-height: 1.5;
}

/* ---- page-hero — fix invisible <h2>, scale up, add depth ----------- */

/* BUGFIX: contact + lodges put their title in an <h2>, which inherited the
   global navy heading colour → navy-on-navy (invisible). Cover both tags. */
.page-hero h1,
.page-hero h2 {
  font-family: var(--font-heading);
  color: #f6f3ea;
  font-size: var(--size-h1);
  font-weight: 700;
  line-height: 1.12;
  letter-spacing: -0.012em;
  margin: 0 0 var(--space-3);
}

.page-hero {
  background:
    radial-gradient(
      120% 160% at 12% 0%,
      rgba(255, 255, 255, 0.07),
      rgba(255, 255, 255, 0) 55%
    ),
    linear-gradient(168deg, #013a86 0%, var(--color-blue) 60%, #00204f 100%);
}

/* ---- Closing CTA — display headline + depth ------------------------ */

.closing-cta {
  background:
    radial-gradient(
      120% 160% at 85% 100%,
      rgba(255, 255, 255, 0.06),
      rgba(255, 255, 255, 0) 55%
    ),
    linear-gradient(168deg, #013a86 0%, var(--color-blue) 58%, #00204f 100%);
}

.closing-cta h2 {
  font-size: var(--size-h1);
  letter-spacing: -0.012em;
}

.closing-cta .lead {
  font-size: var(--size-lg);
}

/* ---- Section heads — bigger serif + signature gold rule ------------ */

.section-head h2,
.charter-2col-body h2 {
  font-size: var(--size-h2);
}

.section-head h2 {
  position: relative;
}

/* The short centred gold rule under a section head — an editorial mark
   that quietly threads the gold brand colour through every section. */
.section-head h2::after {
  content: "";
  display: block;
  width: 2.75rem;
  height: 2px;
  margin: var(--space-4) auto 0;
  background: var(--primary);
  border-radius: 2px;
}

/* ---- Grand-Lodge members band → gold (matches the design intent) --- */

/* The reference design renders this band in brand GOLD with the world map
   as a faint watermark — the rebuild had flattened it to a neutral tint.
   `.section--gold` restores it. Navy ink on gold clears WCAG AA. */
.section--gold {
  background:
    linear-gradient(
      180deg,
      rgba(255, 255, 255, 0.12),
      rgba(0, 0, 0, 0.04)
    ),
    var(--primary);
  border-top: 1px solid var(--color-gold-soft);
  border-bottom: 1px solid var(--color-gold-soft);
  position: relative;
  overflow: hidden;
}

.section--gold h2 {
  color: var(--secondary);
  font-size: var(--size-h2);
}

.section--gold .lead {
  color: rgba(var(--color-blue-rgb), 0.82);
}

/* World map as a tone-on-tone watermark behind the centred copy. */
.section--gold .gl-map {
  opacity: 0.22;
  mix-blend-mode: multiply;
  max-width: 760px;
}

/* On gold, the gold badge/CTA invert to navy for contrast. */
.section--gold .badge--gold {
  background: var(--secondary);
  border-color: var(--secondary);
  color: var(--primary);
}

.section--gold .badge--ghost {
  background: rgba(253, 252, 247, 0.35);
  border-color: rgba(var(--color-blue-rgb), 0.45);
  color: var(--secondary);
}

.section--gold .btn-primary {
  background: var(--secondary);
  border-color: var(--secondary);
  color: var(--primary);
}

.section--gold .btn-primary:hover {
  background: var(--color-blue-soft);
  border-color: var(--color-blue-soft);
  color: var(--primary);
}

/* ---- Cards — softer corners, warmer depth, refined hover ----------- */

.card {
  border-radius: var(--radius-lg);
  border-color: rgba(var(--color-blue-rgb), 0.1);
}

.card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-lg);
}

.principle-card {
  border-radius: var(--radius-lg);
  transition: box-shadow 0.18s ease, transform 0.18s ease;
}

.principle-card:hover {
  transform: translateY(-3px);
  box-shadow: var(--shadow-md);
}

/* Value-card icon nested in a soft gold disc. */
.card--value .card-icon {
  width: 4rem;
  height: 4rem;
  border-radius: 999px;
  background: var(--color-gold-thin);
  color: var(--primary-dark);
}

.card--value h3,
.principle-card h3 {
  font-size: var(--size-h3);
}

/* ---- Buttons — refined transitions, tracking, focus ring ----------- */

.btn {
  border-radius: var(--radius-sm);
  letter-spacing: 0.012em;
  transition: background-color 0.18s ease, border-color 0.18s ease,
    color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
}

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

.btn-primary {
  box-shadow: 0 1px 2px rgba(var(--color-blue-rgb), 0.16);
}

.btn-primary:hover {
  box-shadow: var(--shadow-md);
  transform: translateY(-1px);
}

.btn--lg {
  letter-spacing: 0.02em;
}

/* ---- Inputs — brand surface, comfortable height, gold focus -------- */

.form-field input,
.form-field select,
.form-field textarea,
.contact-form input[type="text"],
.contact-form input[type="email"],
.contact-form textarea,
.auth-form input {
  padding: 0.72rem 0.85rem;
  border: 1px solid var(--border);
  border-radius: var(--radius-sm);
  background: #fff;
  transition: border-color 0.16s ease, box-shadow 0.16s ease;
}

.form-field input:focus,
.form-field select:focus,
.form-field textarea:focus,
.contact-form input:focus,
.contact-form textarea:focus,
.auth-form input:focus {
  outline: none;
  border-color: var(--primary);
  box-shadow: 0 0 0 3px var(--color-gold-thin);
  background: #fff;
}

/* ---- Lodge directory cards — refined ------------------------------- */

.lodge-list-item.card {
  border-top: 3px solid var(--primary);
}

.lodge-list-item.card a {
  color: var(--secondary);
}

/* ---- Footer — gold hairline accent above the columns --------------- */

.site-footer--cols {
  border-top: 2px solid var(--primary);
}

/* ---- Reduced-motion: honour the user preference -------------------- */

@media (prefers-reduced-motion: reduce) {
  .card,
  .principle-card,
  .btn,
  .btn-primary:hover,
  .card:hover,
  .principle-card:hover {
    transition: none;
    transform: none;
  }
}

/* ---- Desktop crescendo — let the homepage hero breathe ------------- *
 * Font sizes are fluid via clamp() in _tokens.css, so they already grow
 * with the viewport and the heading hierarchy holds (hero display > page-
 * hero h1 > section h2). Only the hero's vertical air needs a desktop bump. */

@media (min-width: 768px) {
  .hero--band {
    padding: calc(var(--space-8) * 1.5) 0;
  }
}

/* ===================================================================== *
 *  FULL-BLEED BANDS + SQUARE-&-COMPASSES EMBLEM                          *
 *                                                                       *
 *  The templates render every page inside <main class="container">      *
 *  (max-width 1140px). The dramatic brand bands (navy hero, interior     *
 *  page-hero, gold members band, navy closing CTA) live INSIDE that      *
 *  column, so their *backgrounds* were being capped at 1140px instead of *
 *  spanning the viewport — leaving cream gutters on wide screens. Break   *
 *  those four out to full width while their inner .container keeps the    *
 *  CONTENT restrained: edge-to-edge backgrounds, readable text measure.   *
 *  The quieter .section / .section--alt sub-sections (whose text is NOT   *
 *  wrapped in an inner .container on the prose pages) intentionally stay  *
 *  inside the column.                                                     *
 * ===================================================================== */

html {
  /* A 100vw-wide band would otherwise add a hairline horizontal scrollbar
     whenever a vertical scrollbar is present. `clip` removes it without
     creating a scroll container (position: sticky etc. stay unaffected). */
  overflow-x: clip;
}

.hero--band,
.page-hero,
.closing-cta,
.section--gold {
  /* Full-bleed: reach both viewport edges regardless of the constrained
     parent. The negative margin equals the column's side gutter, so it is
     self-adjusting — it collapses to ~0 on mobile, where the column
     already fills the viewport. Inner .container re-holds the content. */
  margin-inline: calc(50% - 50vw);
}

/* Opt-in full-bleed for a .section--alt that has an inner .container (e.g. the
   about "principles" band): the alt background spans the viewport like the
   navy/gold bands while the inner .container re-holds the content. NOT applied
   to .section--alt globally — the prose pages (charter/legal/privacy) put text
   directly in the band with no inner container and must stay in-column. */
.section--bleed {
  margin-inline: calc(50% - 50vw);
}

/* ===================================================================== *
 *  ABOUT PAGE — figure, gold checklist, iconified principle cards        *
 *                                                                       *
 *  Additive only. Nothing above this banner was modified. Composes with  *
 *  the existing primitives (.section, .container, .section-head,         *
 *  .grid--3, .principle-card, .card-icon) so the about page picks up the  *
 *  homepage's level of finish without a new visual language.             *
 * ===================================================================== */

/* Atmospheric photo above "Who are we?" — held to the reading width with
   the same soft institutional depth as the homepage charter image. */
.about-figure {
  margin: 0 auto var(--space-6);
  max-width: 900px;
}

.about-figure img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-md);
}

/* Single-column reading measure for the "Who are we?" prose, centred under
   the section head (replaces the 2-col .about-intro, unused without aside). */
.about-prose {
  max-width: 68ch;
  margin: 0 auto;
}

.about-prose p {
  font-size: var(--size-md);
}

.about-prose p:first-child {
  margin-top: 0;
}

/* Gold-checked list for the three "Who are we?" points. The check is an
   inline-SVG data-URI (no emoji, no extra request); the gold mark is
   decorative — the <li> text carries the meaning. */
.about-checklist {
  list-style: none;
  margin: var(--space-5) 0 0;
  padding: 0;
  display: grid;
  gap: var(--space-3);
}

.about-checklist li {
  position: relative;
  padding-left: 2rem;
  font-size: var(--size-md);
  line-height: 1.5;
}

.about-checklist li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0.15em;
  width: 1.25rem;
  height: 1.25rem;
  background-repeat: no-repeat;
  background-position: center;
  background-size: contain;
  /* Navy disc + gold tick. Meets WCAG 1.4.11 non-text contrast: navy disc on
     cream ~16:1, gold tick on navy ~7:1 (the earlier gold-on-cream ring was
     ~2.5:1). The tick SHAPE keeps the cue legible without relying on colour. */
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Ccircle cx='12' cy='12' r='11' fill='%23002866'/%3E%3Cpath d='M7 12.4l3.2 3.3L17 8' fill='none' stroke='%23c79c4c' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
}

/* Gold-disc icon on each principle card — the homepage value-card treatment
   (.card--value .card-icon), but left-aligned to suit the longer prose. */
.principle-card .card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 3.5rem;
  height: 3.5rem;
  margin-bottom: var(--space-4);
  border-radius: 999px;
  /* Navy glyph on a solid brand-gold disc (~5.4:1, clears AA), ringed by a
     hairline navy edge so the disc boundary clears 3:1 against the cream card
     (gold-on-cream alone is only ~2:1). Reads as a navy-&-gold medallion and
     mirrors the checklist's solid-disc / contrast-mark treatment. */
  background: var(--primary);
  color: var(--secondary);
  box-shadow: 0 0 0 1.5px var(--secondary);
}

.principle-card .card-icon svg {
  width: 1.9rem;
  height: 1.9rem;
}

/* Long button labels (e.g. the loges CTA wrapping to two lines at 375px)
   centre cleanly instead of left-aligning inside a full-width button. */
.btn {
  text-align: center;
}

/* About-page hero: the clean navy band with the heritage image re-added ONLY
   as a heavily blurred, fully-desaturated, darkened texture. about-hero-bg.jpg
   is pre-processed (grayscale + sigma-55 blur + darkened) so the building is
   NOT identifiable; the strong navy gradient on top keeps the light hero text
   at the same WCAG-AA contrast as the solid navy interior heroes. Scoped to
   .page-hero--about so contact / lodges / charter heroes are untouched.
   Mirrors the base .page-hero radial top-left glow. */
.page-hero--about {
  background:
    radial-gradient(
      120% 160% at 12% 0%,
      rgba(255, 255, 255, 0.06),
      rgba(255, 255, 255, 0) 55%
    ),
    linear-gradient(
      168deg,
      rgba(1, 58, 134, 0.86) 0%,
      rgba(0, 40, 102, 0.92) 58%,
      rgba(0, 32, 79, 0.97) 100%
    ),
    url("/static/img/about-hero-bg.jpg");
  background-size: cover;
  background-position: center 35%;
}
