 
/* ============================================================
   The Kansas Informer — Centralized stylesheet
   Linked by every page in this project.
   Tokens: prairie navy + sunflower gold + slate (from the logo).
   ============================================================ */

/* =========================
     TOKENS — light/dark
     ========================= */
  :root {
    /* Brand: pulled from the logo SVG (flat colors).
       Navy #002569 · Gold #E8A825 · Slate #4D5965
       (-mid/-bright/-soft are derived tints for hovers and dark mode) */
    --navy:         #002569;
    --navy-mid:     #00338F;
    --gold:         #E8A825;
    --gold-bright:  #F5C04A;
    --slate:        #4D5965;
    --slate-soft:   #5E6B78;  /* muted text — ≥4.5:1 on white AND on --bg-elev */

    --brand:        var(--navy-mid);
    --brand-deep:   var(--navy);
    --bg:           #ffffff;
    --bg-elev:      #f5f7fa;
    --surface:      #ffffff;
    --ink:          #101b2b;
    --ink-soft:     var(--slate);
    --ink-mute:     var(--slate-soft);
    --rule:         var(--navy);
    --rule-soft:    #e2e7ee;
    --rule-input:   #7E8C9A;  /* form-control borders — ≥3:1 on white (WCAG 1.4.11) */
    --accent:       var(--navy-mid);
    --accent-2:     var(--gold);
    --primary:      var(--navy-mid);
    --primary-ink:  #ffffff;
    --cta:          var(--navy);
    --cta-ink:      #ffffff;
    --btn-gold:     var(--gold); /* CTA gold — exactly the logo gold */
    --btn-gold-ink: var(--navy);
    --shadow:       0 1px 0 rgba(0,33,71,0.05);

    --font-display: "Inter", system-ui, sans-serif;
    --font-serif:   "Source Serif 4", Georgia, serif;
    --font-sans:    "Inter", system-ui, sans-serif;
    --font-mono:    "IBM Plex Mono", ui-monospace, monospace;

    --display-weight: 700;
    --display-italic: normal;
    --display-tracking: -0.035em;

    --radius: 0px;
    --radius-lg: 2px;
    --rule-weight: 1px;

    --pad: 40px;
    --pad-lg: 72px;
    --maxw: 1240px;
  }

  /* ========= DARK MODE ========= */
  :is(html[data-theme="dark"], html.dark) {
    --bg:           #0b1220;
    --bg-elev:      #121c2c;
    --surface:      #121c2c;
    --ink:          #e8eef6;
    --ink-soft:     #c0cbd9;
    --ink-mute:     #7f8da0;
    --rule:         #46587c;
    --rule-soft:    #24344c;
    --accent:       #82aee3;
    --brand:        #82aee3;
    --brand-deep:   #82aee3;
    --primary:      #82aee3;
    --primary-ink:  #0b1220;
    --gold:         #F5C04A;
    --gold-bright:  #F5C04A;
    --cta:          #82aee3;
    --cta-ink:      #0b1220;
    --btn-gold:     #F5C04A;
    --btn-gold-ink: #0b1220;
  }
  :is(html[data-theme="dark"], html.dark) .kicker { color: var(--primary); }
  :is(html[data-theme="dark"], html.dark) .archive-head .kicker { color: var(--primary); }
  :is(html[data-theme="dark"], html.dark) .archive-head .count b { color: var(--primary); }
  :is(html[data-theme="dark"], html.dark) .subnav-row a.active,
  :is(html[data-theme="dark"], html.dark) .subnav-row button.active {
    color: var(--primary);
    background: color-mix(in oklab, var(--primary) 14%, transparent);
    border-color: color-mix(in oklab, var(--primary) 45%, transparent);
  }
  :is(html[data-theme="dark"], html.dark) .subnav-row a:hover,
  :is(html[data-theme="dark"], html.dark) .subnav-row button:hover {
    color: var(--ink);
    background: color-mix(in oklab, var(--primary) 14%, transparent);
  }
  :is(html[data-theme="dark"], html.dark) .subnav-row .subnav-subscribe {
    background: var(--navy) !important;
    border-color: rgba(255,255,255,0.22) !important;
    color: #fff !important;
  }
  :is(html[data-theme="dark"], html.dark) .subnav-row .subnav-subscribe:hover {
    background: var(--navy-mid) !important;
    border-color: rgba(255,255,255,0.35) !important;
    color: #fff !important;
  }
  :is(html[data-theme="dark"], html.dark) .subnav-row .subnav-notices {
    background: var(--bg-elev) !important;
    border-color: var(--rule-soft) !important;
    color: var(--ink-soft) !important;
  }
  :is(html[data-theme="dark"], html.dark) .subnav-row .subnav-notices:hover {
    color: var(--accent) !important;
    border-color: var(--accent) !important;
    background: color-mix(in oklab, var(--accent) 12%, var(--bg-elev)) !important;
  }


  /* =========================
     BASE
     ========================= */
  * { box-sizing: border-box; }
  html, body { margin: 0; padding: 0; }
  body {
    background: var(--bg);
    color: var(--ink);
    font-family: var(--font-sans);
    font-size: 16px;
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
    transition: background-color .35s ease, color .35s ease;
  }

  a { color: inherit; text-decoration: none; }
  a:hover { color: var(--primary); }

  button { font: inherit; cursor: pointer; }

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

  .rule { border: 0; border-top: var(--rule-weight) solid var(--rule); margin: 0; }
  .rule-soft { border: 0; border-top: 1px solid var(--rule-soft); margin: 0; }
  .rule-double { border: 0; border-top: 1px solid var(--rule); border-bottom: 1px solid var(--rule); height: 4px; margin: 0; }

  .mono { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; }
  .small-caps { font-family: var(--font-sans); font-size: 11px; letter-spacing: 0.18em; text-transform: uppercase; font-weight: 600; }

  /* =========================
     ACCESSIBILITY BASICS
     ========================= */
  /* Visible keyboard focus everywhere; gold on navy/dark surfaces. */
  :focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
  .newsletter :focus-visible,
  .site-footer :focus-visible,
  .hero-feature :focus-visible { outline-color: var(--gold-bright); }

  /* Skip link — first focusable element on every page (header partial). */
  .skip-link {
    position: absolute; left: 0; top: -100px;
    z-index: 999;
    background: var(--navy); color: #ffffff;
    padding: 12px 20px;
    font-family: var(--font-sans); font-weight: 600; font-size: 14px;
  }
  .skip-link:focus { top: 0; }
  .skip-link:focus-visible { outline-color: var(--gold-bright); }

  @media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
      transition-duration: 0.01ms !important;
      animation-duration: 0.01ms !important;
    }
    .reveal { opacity: 1 !important; transform: none !important; }
    html { scroll-behavior: auto !important; }
  }

  /* =========================
     TOP UTILITY BAR
     ========================= */
  .utility {
    background: var(--bg);
    border-bottom: 1px solid var(--rule-soft);
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.06em;
    color: var(--ink-soft);
  }
  .utility-row {
    display: flex; align-items: center; justify-content: space-between;
    height: 40px; gap: 20px;
  }
  .utility-row .left {
    display: flex; align-items: center; gap: 12px;
    text-transform: uppercase;
  }
  .utility-row .right {
    display: flex; align-items: center; gap: 8px;
  }

  .icon-btn {
    display: inline-flex; align-items: center; gap: 7px;
    height: 28px; padding: 0 12px;
    background: transparent;
    border: 1px solid var(--rule-soft);
    color: var(--ink-soft);
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    border-radius: 999px;
    transition: border-color .15s ease, color .15s ease, background .15s ease;
  }
  .icon-btn:hover { border-color: var(--accent); color: var(--accent); }
  .icon-btn svg { width: 13px; height: 13px; flex-shrink: 0; }
  .icon-btn .icon-sun { display: inline-flex; }
  .icon-btn .icon-moon { display: none; }
  /* Search dialog */
  .search-overlay {
    position: fixed; inset: 0;
    background: color-mix(in oklab, var(--ink) 60%, transparent);
    backdrop-filter: blur(6px);
    z-index: 200;
    display: none;
    align-items: flex-start; justify-content: center;
    padding-top: 12vh;
  }
  .search-overlay.open { display: flex; }
  .search-box {
    width: min(640px, 92%);
    background: var(--surface);
    border: 1px solid var(--rule);
    padding: 8px;
    box-shadow: 0 30px 80px rgba(0,0,0,0.35);
  }
  .search-input-row {
    display: flex; align-items: center; gap: 12px;
    padding: 18px 20px;
    border-bottom: 1px solid var(--rule-soft);
  }
  .search-input-row svg { width: 20px; height: 20px; color: var(--ink-mute); flex-shrink: 0; }
  .search-input-row input {
    flex: 1;
    background: transparent; border: 0; outline: none;
    font-family: var(--font-display);
    font-weight: 600;
    font-size: 22px;
    color: var(--ink);
    letter-spacing: -0.01em;
  }  .search-input-row input::placeholder { color: var(--ink-mute); }
  .search-esc {
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-mute);
    border: 1px solid var(--rule-soft);
    padding: 3px 8px;
  }
  .search-suggestions {
    padding: 6px 8px 14px;
  }
  .search-suggestions .suggest-block + .suggest-block {
    margin-top: 4px;
    border-top: 1px solid var(--rule-soft);
    padding-top: 6px;
  }
  .search-suggestions .suggest-head {
    display: flex; align-items: center; justify-content: space-between;
    padding: 10px 12px 4px;
  }
  .search-suggestions .label {
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.16em;
    text-transform: uppercase; color: var(--ink-mute);
  }
  .search-suggestions .suggest-clear {
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-mute);
    background: transparent; border: 0; cursor: pointer; padding: 2px 4px;
  }
  .search-suggestions .suggest-clear:hover { color: var(--accent); }
  .search-suggestions .suggest-list { display: flex; flex-direction: column; }
  .search-suggestions a, .search-suggestions .recent-row {
    display: flex; justify-content: space-between; align-items: center;
    padding: 10px 12px;
    font-family: var(--font-sans); font-size: 14px;
    color: var(--ink-soft);
    background: transparent; border: 0; text-align: left; width: 100%; cursor: pointer;
  }
  .search-suggestions a:hover, .search-suggestions .recent-row:hover {
    background: var(--bg-elev); color: var(--ink);
  }
  .search-suggestions a .tag, .search-suggestions .recent-row .tag {
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-mute);
  }
  .search-suggestions .recent-row .term { display: inline-flex; align-items: center; gap: 10px; }
  .search-suggestions .recent-row .term svg { width: 13px; height: 13px; color: var(--ink-mute); flex: none; }

  /* =========================
     MASTHEAD
     ========================= */
  .masthead { padding: 20px 0 14px; text-align: center; position: relative; }
  .masthead-inner { display: flex; flex-direction: column; align-items: center; gap: 10px; }
  /* Logo is wrapped in a home link; size the link (against the masthead) and
     let the image fill it, so it stays centered instead of stretching. */
  .masthead-inner a { display: inline-flex; width: min(420px, 62%); }

  .logo {
    width: 100%;
    height: auto;
    display: block;
    filter: none;
  }
  /* Light/dark logo variants are separate SVGs (assets/logo.svg and
     assets/logo-dark.svg); the theme shows one and hides the other. */
  .logo.logo-dark { display: none; }
  :is(html[data-theme="dark"], html.dark) .logo.logo-light { display: none; }
  :is(html[data-theme="dark"], html.dark) .logo.logo-dark { display: block; }
  .tagline {
    font-family: var(--font-serif);
    font-style: italic;
    font-size: 17px;
    color: var(--ink-soft);
    max-width: 640px;
    text-align: center;
    margin-top: 4px;
    text-wrap: balance;
  }
  .dateline {
    display: flex; align-items: center; justify-content: center; gap: 18px;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-mute);
    padding-top: 6px;
  }
  .dateline .sep { width: 4px; height: 4px; background: var(--ink-mute); border-radius: 50%; }

  /* =========================
     NAV
     ========================= */
  nav.primary {
    border-top: 2px solid var(--rule);
    border-bottom: 1px solid var(--rule-soft);
    background: var(--bg);
  }  .nav-row {
    display: flex; align-items: center; justify-content: center; gap: 44px;
    justify-content: safe center;
    height: 54px;
    overflow-x: auto;
    scrollbar-width: none;
  }
  .nav-row::-webkit-scrollbar { display: none; }
  .nav-row a {
    font-family: var(--font-sans);
    font-weight: 600;
    font-size: 13px;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ink);
    position: relative;
    padding: 4px 2px;
  }  .nav-row a:hover { color: var(--primary); }
  .nav-row a[aria-current="page"]::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: -2px;
    height: 3px; background: var(--gold);
  }

  /* =========================
     SUBNAV — contextual, sits under primary nav
     ========================= */
  nav.subnav {
    background: var(--bg);
    border-bottom: 1px solid var(--rule-soft);
  }
  .subnav-row {
    display: flex; align-items: center; justify-content: center; gap: 4px;
    justify-content: safe center;
    height: 44px;
    overflow-x: auto;
    scrollbar-width: none;
    position: relative;
  }
  .subnav-row::-webkit-scrollbar { display: none; }
  .subnav-row a, .subnav-row button {
    font-family: var(--font-sans);
    font-size: 12px;
    font-weight: 500;
    letter-spacing: 0.04em;
    color: var(--ink-soft);
    padding: 6px 12px;
    border-radius: 2px;
    white-space: nowrap;
    background: transparent;
    border: 1px solid transparent;
    cursor: pointer;
    transition: color 0.12s, background 0.12s, border-color 0.12s;
  }
  .subnav-row a:hover, .subnav-row button:hover {
    color: var(--ink);
    background: color-mix(in oklab, var(--primary) 10%, transparent);
  }
  .subnav-row a.active, .subnav-row button.active {
    color: var(--primary);
    border-color: color-mix(in oklab, var(--primary) 35%, transparent);
    background: color-mix(in oklab, var(--primary) 10%, transparent);
  }

  /* Vertical divider separating section jumps from CTAs */
  .subnav-divider {
    width: 1px; height: 18px;
    background: var(--rule-soft);
    margin: 0 10px;
    flex: none;
  }

  /* Public Notices — secondary, outlined */
  .subnav-row .subnav-notices {
    padding: 6px 12px !important;
    border: 1px solid var(--rule-soft) !important;
    background: var(--bg) !important;
    color: var(--ink-soft) !important;
    border-radius: 2px;
    display: inline-flex; align-items: center; gap: 8px;
    text-transform: uppercase;
    transition: color 0.12s, border-color 0.12s, background 0.12s;
  }
  .subnav-row .subnav-notices:hover {
    color: var(--accent) !important;
    border-color: var(--accent) !important;
    background: color-mix(in oklab, var(--accent) 6%, var(--bg)) !important;
  }
  .subnav-row .subnav-subscribe::before {
    content: "";
    width: 13px;
    height: 13px;
    background-color: currentColor;
    -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='5' width='18' height='14' rx='2'/><path d='m3 7 9 6 9-6'/></svg>") no-repeat center / contain;
            mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><rect x='3' y='5' width='18' height='14' rx='2'/><path d='m3 7 9 6 9-6'/></svg>") no-repeat center / contain;
    display: inline-block;
    flex: none;
  }
  .subnav-row .subnav-notices::before {
    content: "";
    width: 13px;
    height: 13px;
    background-color: currentColor;
    -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M14 3v4a1 1 0 0 0 1 1h4'/><path d='M17 21H7a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7l5 5v11a2 2 0 0 1-2 2z'/><path d='M9 9h1M9 13h6M9 17h6'/></svg>") no-repeat center / contain;
            mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='M14 3v4a1 1 0 0 0 1 1h4'/><path d='M17 21H7a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h7l5 5v11a2 2 0 0 1-2 2z'/><path d='M9 9h1M9 13h6M9 17h6'/></svg>") no-repeat center / contain;
    display: inline-block;
    flex: none;
  }
  /* HERO — the home page uses the matted ".hero-feature" treatment,
     which lives in the PAGE-LEVEL STYLES section at the foot of this file. */

  .kicker {
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.2em;
    text-transform: uppercase;
    color: color-mix(in oklab, var(--primary) 75%, var(--ink));
    margin-bottom: 18px;
    display: inline-flex; align-items: center; gap: 10px;
  }
  .kicker::before {
    content: ""; width: 22px; height: 2px; background: var(--gold);
  }

  .byline {
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--ink-mute);
    display: flex; gap: 14px; flex-wrap: wrap; align-items: center;
  }
  .byline .author { color: var(--ink); }
  .byline .sep { width: 3px; height: 3px; background: var(--ink-mute); border-radius: 50%; }

  .read-more {
    margin-top: 28px;
    display: inline-flex; align-items: center; gap: 10px;
    font-family: var(--font-sans); font-weight: 600; font-size: 14px;
    letter-spacing: 0.04em; color: var(--ink);
    padding: 12px 20px;
    border: 1px solid var(--rule);
    border-radius: var(--radius);
    background: transparent;
    transition: background .15s ease, color .15s ease;
  }
  .read-more:hover { background: var(--ink); color: var(--bg); }
  .read-more .arr { transition: transform .2s ease; }
  .read-more:hover .arr { transform: translateX(3px); }

  /* Placeholder image */
  .ph {
    width: 100%;
    aspect-ratio: 4 / 3;
    background-size: cover;
    background-position: center;
    background-color: var(--bg-elev);
    /* When .ph is an <img> (Bricks code-block featured image), crop it to fill
       the 4:3 box so there are no gaps above/below. Inert on the prototype's
       background-image <div class="ph">. */
    object-fit: cover;
    object-position: center;
    border: 1px solid var(--rule-soft);
    display: flex; align-items: center; justify-content: center;
    position: relative;
    overflow: hidden;
  }
  .ph.tall { aspect-ratio: 3 / 4; }
  .ph.wide { aspect-ratio: 16 / 9; }
  /* Featured image rendered as a real <img> INSIDE .ph — e.g. a Bricks code
     block outputting {featured_image} as <img class="attachment-full size-full">.
     Force it to fill the box and crop; otherwise its natural ratio leaves the
     grey gaps above/below. (.ph is position:relative; overflow:hidden already.) */
  .ph img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
  }
  .ph-label {
    font-family: var(--font-mono);
    font-size: 10px;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--ink-mute);
    background: var(--bg-elev);
    padding: 6px 10px;
    border: 1px solid var(--rule-soft);
  }
  .ph-cap {
    position: absolute; bottom: 8px; left: 8px;
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em;
    color: var(--ink-mute); text-transform: uppercase;
    background: var(--bg);
    padding: 3px 7px;
    border: 1px solid var(--rule-soft);
  }

  /* =========================
     CATEGORY SECTIONS
     ========================= */
  .section {
    padding: 64px 0;
    border-bottom: 1px solid var(--rule-soft);
  }
  .section-head {
    display: flex; align-items: baseline; justify-content: space-between;
    margin-bottom: 32px;
    gap: 20px;
    padding-bottom: 14px;
    border-bottom: 2px solid var(--rule);
    position: relative;
  }
  /* Short gold tick under the section title — echoes the logo's gold rule. */
  .section-head::after {
    content: ""; position: absolute; left: 0; bottom: -2px;
    width: 64px; height: 2px; background: var(--gold);
  }
  .section-head h2 {
    font-family: var(--font-display);
    font-style: var(--display-italic);
    font-weight: var(--display-weight);
    font-size: clamp(28px, 3.6vw, 46px);
    letter-spacing: var(--display-tracking);
    margin: 0;
    line-height: 1;
  }  .section-head .archive {
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-mute);
    display: inline-flex; align-items: center; gap: 8px;
  }
  .section-head .archive:hover { color: var(--primary); }

  .story-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 40px;
  }
  @media (max-width: 900px) {
    .story-grid { grid-template-columns: 1fr; gap: 32px; }
  }

  .story { display: flex; flex-direction: column; gap: 14px; }
  .story .ph { margin-bottom: 6px; }
  /* Category label above a card / archive row (navy accent). */
  .story .small-caps,
  .related .small-caps { color: var(--accent); }
  .arch-cat { color: var(--accent); margin-bottom: 6px; }
  .story h3 {
    font-family: var(--font-display);
    font-weight: var(--display-weight);
    font-style: var(--display-italic);
    font-size: 24px;
    line-height: 1.15;
    letter-spacing: -0.005em;
    margin: 0;
    text-wrap: balance;
  }  .story h3 a:hover { color: var(--primary); }
  .story .dek {
    font-family: var(--font-serif);
    font-size: 15px;
    line-height: 1.5;
    color: var(--ink-soft);
    text-wrap: pretty;
    margin: 0;
  }
  /* Legislature header retains default ink. */
  .section.legislature .section-head h2 { color: var(--ink); }

  /* =========================
     NEWSLETTER
     ========================= */
  .newsletter {
    background: linear-gradient(180deg, #002569 0%, #001B4D 100%);
    color: #ffffff;
    padding: 88px 0;
    position: relative;
    overflow: hidden;
    border-top: 3px solid var(--gold);
  }
  :is(html[data-theme="dark"], html.dark) .newsletter { background: #001335; }  .newsletter-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 56px;
    align-items: center;
  }
  @media (max-width: 900px) { .newsletter-grid { grid-template-columns: 1fr; gap: 32px; } }

  .newsletter .kicker { color: var(--gold-bright); }
  .newsletter .kicker::before { background: var(--gold-bright); }
  .newsletter h2 {
    font-family: var(--font-display);
    font-weight: var(--display-weight);
    font-style: var(--display-italic);
    font-size: clamp(36px, 4.6vw, 58px);
    line-height: 1.02;
    letter-spacing: var(--display-tracking);
    margin: 0 0 16px;
    text-wrap: balance;
  }  .newsletter p {
    font-family: var(--font-serif);
    font-size: 17px; line-height: 1.55;
    color: rgba(255,255,255,0.92);
    max-width: 46ch; margin: 0;
  }
  .nl-form {
    display: flex; flex-direction: column; gap: 14px;
  }
  .nl-row {
    display: flex;
    background: rgba(255,255,255,0.06);
    border: 1px solid rgba(255,255,255,0.45);
    border-radius: 4px;
    overflow: hidden;
    transition: border-color .2s ease, background .2s ease;
  }
  .nl-row:focus-within {
    border-color: var(--btn-gold);
    background: rgba(255,255,255,0.06);
  }
  .nl-row input {
    flex: 1;
    background: transparent;
    border: 0;
    padding: 18px 20px;
    color: inherit;
    font: inherit;
    font-size: 16px;
    outline: none;
  }
  .nl-row input::placeholder { color: rgba(255,255,255,0.55); }
  .nl-row button {
    background: #ffffff;
    color: var(--navy);
    border: 0;
    padding: 0 28px;
    font-family: var(--font-sans);
    font-weight: 700;
    font-size: 13px;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    cursor: pointer;
    transition: background .15s ease, transform .15s ease;
  }
  .nl-row button:hover {
    background: #e9eef6;
  }
  .nl-row button:active {
    background: #dde4ee;
  }

  .nl-meta {
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em;
    text-transform: uppercase; color: rgba(255,255,255,0.65);
  }
  /* White button: AA contrast for the label (white-on-FB-blue fails 4.5:1)
     and no blue-on-navy dark-on-dark against the newsletter band. */
  .fb-btn {
    display: inline-flex; align-items: center; gap: 10px;
    padding: 12px 18px;
    background: #ffffff;
    color: var(--navy);
    font-family: var(--font-sans);
    font-weight: 600;
    font-size: 14px;
    letter-spacing: 0.02em;
    border-radius: 4px;
    border: 0;
    transition: background .2s ease, transform .2s ease;
  }
  .fb-btn:hover { background: #e9eef6; color: var(--navy); transform: translateY(-1px); }
  .fb-btn svg { width: 18px; height: 18px; color: #1877F2; }

  .follow-row {
    display: flex; align-items: center; gap: 18px; margin-top: 26px;
    flex-wrap: wrap;
  }
  .follow-row .follow-label {
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em;
    text-transform: uppercase; color: rgba(255,255,255,0.65);
  }
  /* =========================
     FOOTER — navy band, single row
     (scoped to .site-footer so article <footer>s are unaffected — works on any
     tag, so a <div class="site-footer"> inside a Bricks footer template matches)
     ========================= */
  .site-footer {
    background: var(--bg);
    color: var(--ink-soft);
    padding: 30px 0;
    border-top: 3px solid var(--gold);
  }
  /* Logo left, links centred, Subscribe right — 1fr auto 1fr keeps the
     links page-centred regardless of the logo/button widths. */
  .footer-row {
    display: grid;
    grid-template-columns: 1fr auto 1fr;
    align-items: center;
    gap: 24px;
  }
  /* Wordmark image — full-colour navy logo on the white footer; the
     dark-theme variant (assets/logo-dark.svg) swaps in for dark mode. */
  .footer-row .footer-logo { display: inline-flex; align-items: center; justify-self: start; }
  .footer-row .footer-logo img { height: 52px; width: auto; display: block; }
  .footer-row .footer-logo .logo-dark { display: none; }
  :is(html[data-theme="dark"], html.dark) .footer-row .footer-logo .logo-light { display: none; }
  :is(html[data-theme="dark"], html.dark) .footer-row .footer-logo .logo-dark { display: block; }
  .footer-row .f-links {
    display: flex; align-items: center; gap: 0; justify-self: center;
    font-family: var(--font-sans); font-size: 13px;
    color: var(--ink-soft);
  }
  .footer-row .f-links a {
    color: var(--ink-soft);
    padding: 0 18px;
    position: relative;
  }
  .footer-row .f-links a + a::before {
    content: "★";
    position: absolute; left: -4px; top: 50%;
    transform: translateY(-50%);
    width: 8px; height: auto;
    background: transparent;
    color: var(--gold);
    font-size: 10px;
    line-height: 1;
    display: flex; align-items: center; justify-content: center;
  }
  .footer-row .f-links a:first-child { padding-left: 0; }
  .footer-row .f-links a:last-child { padding-right: 0; }
  .footer-row .f-links a:hover { color: var(--primary); }
  /* Subscribe — navy CTA, white text, on the right; balances the logo. */
  .footer-row .f-subscribe {
    justify-self: end;
    display: inline-flex; align-items: center; gap: 8px;
    background: var(--navy); color: #fff;
    font-family: var(--font-sans); font-weight: 700; font-size: 12px;
    letter-spacing: 0.08em; text-transform: uppercase;
    padding: 10px 18px; border-radius: 2px; border: 1px solid var(--navy);
    transition: background .15s, border-color .15s;
  }
  .footer-row .f-subscribe svg { width: 14px; height: 14px; flex: none; }
  .footer-row .f-subscribe:hover { background: var(--navy-mid); border-color: var(--navy-mid); color: #fff; }
  /* Dark mode: subtle light border so the navy button reads on the dark footer. */
  :is(html[data-theme="dark"], html.dark) .footer-row .f-subscribe { border-color: rgba(255,255,255,0.22); }
  :is(html[data-theme="dark"], html.dark) .footer-row .f-subscribe:hover { border-color: rgba(255,255,255,0.35); }
  /* Copyright — its own centred row below, under a hairline that spans
     the footer content width. */
  .footer-copy {
    text-align: center; margin-top: 24px; padding-top: 20px;
    border-top: 1px solid var(--rule-soft);
  }
  .footer-copy .f-copy {
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.1em;
    text-transform: uppercase; color: var(--ink-mute);
  }
  @media (max-width: 700px) {
    .footer-row { grid-template-columns: 1fr; justify-items: center; gap: 16px; }
    .footer-row .footer-logo, .footer-row .f-links, .footer-row .f-subscribe { justify-self: center; }
  }
/* =========================
     REVEAL / INTRO
     ========================= */
  .reveal { opacity: 0; transform: translateY(8px); transition: opacity .6s ease, transform .6s ease; }
  .reveal.in { opacity: 1; transform: none; }


  /* ============ ARCHIVE PAGE ============ */
  .archive-head {
    padding: 24px 0 28px;
    border-bottom: 1px solid var(--rule-soft);
  }
  .archive-head .wrap { display: grid; grid-template-columns: 1fr auto; gap: 32px; align-items: end; }
  .archive-head .kicker { color: color-mix(in oklab, var(--primary) 75%, var(--ink)); }
  .archive-head h1 {
    font-family: var(--font-display);
    font-weight: var(--display-weight);
    font-style: var(--display-italic);
    letter-spacing: var(--display-tracking);
    font-size: clamp(48px, 6.4vw, 88px);
    line-height: 0.98; margin: 8px 0 16px;
  }  .archive-head .lede {
    font-family: var(--font-serif);
    font-size: 19px; line-height: 1.5;
    color: var(--ink-soft);
    max-width: 58ch; margin: 0;
  }  .archive-head .count {
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.18em;
    text-transform: uppercase; color: var(--ink-mute);
    text-align: right; white-space: nowrap;
    padding-bottom: 6px;
  }
  .archive-head .count b { color: color-mix(in oklab, var(--primary) 65%, var(--ink)); font-weight: 500; font-size: 22px; display: block; font-family: var(--font-display); letter-spacing: 0; }
  @media (max-width: 700px) {
    .archive-head .wrap { grid-template-columns: 1fr; }
    .archive-head .count { text-align: left; }
  }






  /* Archive list */
  .archive-list {
    padding: 32px 0 64px;
    border-bottom: 1px solid var(--rule-soft);
  }
  .arch-article {
    display: grid;
    grid-template-columns: 220px 1fr auto;
    gap: 28px;
    padding: 28px 0;
    border-bottom: 1px solid var(--rule-soft);
    align-items: center;
  }
  .arch-thumb {
    aspect-ratio: 4 / 3;
    background-size: cover;
    background-position: center;
    background-color: var(--bg-elev);
    border: 1px solid var(--rule-soft);
    overflow: hidden;
    position: relative;
  }
  /* Absolute-fill so the image covers the whole thumb regardless of its natural
     ratio (WP serves 3:2) or any theme `img { height:auto }` rule. */
  .arch-thumb img { position: absolute; inset: 0; display: block; width: 100%; height: 100%; object-fit: cover; }
  .arch-body h3 {
    font-family: var(--font-display);
    font-weight: var(--display-weight);
    font-style: var(--display-italic);
    font-size: clamp(22px, 2.1vw, 30px);
    line-height: 1.12; margin: 0 0 10px;
    text-wrap: balance;
  }  .arch-body h3 a { color: var(--ink); }
  .arch-body h3 a:hover { color: var(--primary); }
  .arch-body .dek {
    font-family: var(--font-serif);
    font-size: 16px; line-height: 1.5;
    color: var(--ink-soft); margin: 0 0 12px;
    max-width: 62ch;
  }  .arch-meta {
    display: flex; flex-wrap: wrap; gap: 10px; align-items: center;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.06em;
    color: var(--ink-mute); text-transform: uppercase;
  }
  .arch-meta .tag {
    padding: 2px 8px;
    border: 1px solid var(--rule-soft);
    color: var(--ink-soft);
    border-radius: 2px;
    text-transform: none; letter-spacing: 0.02em;
    font-family: var(--font-sans); font-size: 11px;
  }
  .arch-meta .author { color: var(--ink); }
  .arch-date {
    text-align: right;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.1em;
    text-transform: uppercase; color: var(--ink-mute);
    min-width: 90px;
  }
  .arch-date b { display: block; font-size: 22px; color: var(--ink); font-family: var(--font-display); letter-spacing: 0; font-weight: 500; margin-bottom: 2px; }  @media (max-width: 800px) {
    .arch-article { grid-template-columns: 120px 1fr; }
    .arch-date { grid-column: 1 / -1; text-align: left; display: flex; gap: 8px; align-items: baseline; min-width: 0; }
    .arch-date b { font-size: 14px; display: inline; }
  }
  /* Phones — stack each row: full-width image on top, then text, then date. */
  @media (max-width: 640px) {
    .arch-article {
      grid-template-columns: 1fr;
      gap: 14px;
      padding: 22px 0;
      align-items: start;
    }
    .arch-thumb { aspect-ratio: 16 / 9; width: 100%; }
    .arch-body h3 { font-size: 21px; line-height: 1.18; margin: 0 0 8px; }
    .arch-body .dek { font-size: 15px; margin: 0 0 10px; max-width: none; }
    .arch-meta { gap: 8px; }
    .arch-date { grid-column: 1; margin-top: 2px; }
  }

  /* Pagination — matches the Bricks .bricks-pagination look above. */
  .pagination {
    display: flex; flex-wrap: wrap; align-items: center; justify-content: center;
    gap: 6px; padding: 48px 0;
  }
  .pagination a, .pagination span {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 38px; height: 38px; padding: 0 10px; text-decoration: none;
    border: 1px solid var(--rule-soft); font-family: var(--font-mono); font-size: 13px;
    color: var(--ink-soft); transition: color .15s, border-color .15s, background .15s;
  }
  .pagination a:hover { border-color: var(--accent); color: var(--accent); }
  .pagination .cur { background: var(--navy); border-color: var(--navy); color: #fff; }
  .pagination span:not(.cur) { border: 0; min-width: auto; padding: 0 4px; }  /* ellipsis */
  .pagination .prev, .pagination .next { min-width: auto; padding: 0 14px; letter-spacing: 0.1em; text-transform: uppercase; }

  .no-js-note { padding: 48px 0; color: var(--ink-soft); }

  /* empty state when filters too narrow */
  .no-results {
    text-align: center;
    padding: 80px 20px;
    border: 1px dashed var(--rule-soft);
    margin: 32px 0;
  }
  .no-results h3 { font-family: var(--font-display); font-size: 32px; margin: 0 0 10px; font-style: italic; }
  .no-results p { color: var(--ink-mute); margin: 0; }



  /* =========================
     BRAND BUTTONS (subnav + newsletter)
     ========================= */
  /* Subnav Subscribe — primary, navy-filled, white text */
  .subnav-row .subnav-subscribe {
    padding: 6px 12px !important;
    background: var(--navy) !important;
    border: 1px solid var(--navy) !important;
    color: #fff !important;
    border-radius: 2px !important;
    display: inline-flex !important;
    align-items: center !important;
    gap: 8px !important;
    text-transform: uppercase;
    font-weight: 700 !important;
    transition: background 0.15s, border-color 0.15s !important;
  }
  .subnav-row .subnav-subscribe:hover {
    background: var(--navy-mid) !important;
    border-color: var(--navy-mid) !important;
    color: #fff !important;
  }
  /* Newsletter Subscribe button — white, navy text, on the navy band. */
  .nl-row button {
    background: #ffffff !important;
    color: var(--navy) !important;
    border: 0 !important;
    transition: background .15s ease !important;
  }
  .nl-row button:hover {
    background: #e9eef6 !important;
    color: var(--navy) !important;
  }
  .nl-row button:active {
    background: #dde4ee !important;
  }


/* ============================================================
   PAGE-LEVEL STYLES
   Migrated here from the per-page inline <style> blocks so that
   every page now loads the same single stylesheet.
   Sections: Home · Post · Contact · Search · 404
   ============================================================ */

/* ============================================================
   HOME — hero feature
   One featured story in a matted frame.
   ============================================================ */
  .hero {
    background: var(--bg-elev);
    border-bottom: 1px solid var(--rule-soft);
  }
  .hero .wrap {
    padding-top: 26px;
    padding-bottom: 44px;
  }

  /* The matte frame */
  .hero-feature {
    position: relative;
    background: var(--bg);
    border: 1px solid var(--rule);
    padding: 14px;
    box-shadow: 0 1px 0 rgba(0,0,0,0.04), 0 24px 40px -28px rgba(0,0,0,0.18);
  }
  /* Corner label — top-left of the photo. */
  .hero-feature .corner-label {
    position: absolute;
    top: 14px;
    left: 14px;
    z-index: 3;
    display: inline-flex;
    align-items: center;
    gap: 10px;
    padding: 10px 14px;
    line-height: 1;
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    font-weight: 500;
    color: #fff;
    background: var(--ink);
    box-shadow: 0 8px 22px -10px rgba(0,0,0,0.55);
  }
  .hero-feature .corner-label::before {
    content: "";
    width: 6px; height: 6px; border-radius: 50%;
    background: var(--gold-bright);
    flex: none;
  }
  :is(html[data-theme="dark"], html.dark) .hero-feature .corner-label {
    background: #fff;
    color: var(--navy);
  }
  :is(html[data-theme="dark"], html.dark) .hero-feature {
    background: #0e1726;
    border-color: rgba(255,255,255,0.18);
    box-shadow: 0 1px 0 rgba(255,255,255,0.04), 0 24px 40px -28px rgba(0,0,0,0.6);
  }

  /* The photo + overlaid copy */
  .hero-feature .feature-media {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 9;
    background-color: #122036;
    background-size: cover;
    background-position: center;
    overflow: hidden;
    isolation: isolate;
  }
  .hero-feature .feature-media::before {
    content: "";
    position: absolute; inset: 0;
    background: linear-gradient(
      to top,
      rgba(0,0,0,0.55) 0%,
      rgba(0,0,0,0.35) 30%,
      rgba(0,0,0,0.10) 55%,
      rgba(0,0,0,0)    80%
    );
    z-index: 1;
    pointer-events: none;
  }
  .hero-feature .feature-media::after {
    content: "";
    position: absolute; left: 0; right: 0; bottom: 0;
    height: 62%;
    background: linear-gradient(
      to top,
      rgba(8,10,14,0.92) 0%,
      rgba(8,10,14,0.78) 35%,
      rgba(8,10,14,0.38) 70%,
      rgba(8,10,14,0)    100%
    );
    z-index: 1;
    pointer-events: none;
  }
  /* Foreground photo — a real <img> (Bricks Image element bound to the featured
     image) instead of a CSS background, so it comes in as an element. Sits below
     the gradient scrims: img z-index 0 < ::before/::after at 1 < body at 2. */
  .hero-feature .feature-media .feature-img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    object-fit: cover;
    z-index: 0;
  }
  .hero-feature .feature-body {
    position: relative;
    z-index: 2;
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    padding: clamp(20px, 3vw, 44px) clamp(24px, 3.6vw, 52px) clamp(22px, 2.4vw, 32px);
    color: #fff;
  }
  .hero-feature .kicker {
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.24em;
    text-transform: uppercase;
    color: #fff;
    font-weight: 500;
    display: block;              /* was inline-flex: dynamic data outputs a list of
                                    terms (often links), so let them flow + wrap */
    margin: 0 0 18px;
  }
  /* Gold bar leads the first line as an inline-block, so the term list flows and
     wraps after it. (Flex 'gap' would put 10px between every term and comma.) */
  .hero-feature .kicker::before {
    content: "";
    display: inline-block;
    width: 22px; height: 2px;
    background: var(--gold-bright);
    vertical-align: middle;
    margin-right: 10px;
  }
  /* Category terms arrive as <a> links from dynamic data — match the kicker
     colour instead of the default link colour, and drop the underline. */
  .hero-feature .kicker a { color: inherit; text-decoration: none; }
  .hero-feature .kicker a:hover { color: var(--gold-bright); }
  .hero-feature h1 {
    font-family: "Fraunces", "Source Serif 4", Georgia, serif;
    font-weight: 500;
    font-size: clamp(30px, 4.2vw, 56px);
    line-height: 1.04;
    letter-spacing: -0.022em;
    color: #fff;
    margin: 0;
    width: 100%;
    max-width: none;
    text-wrap: pretty;
    text-shadow: 0 2px 28px rgba(0,0,0,0.45);
  }
  .hero-feature h1 a { color: inherit; }
  .hero-feature h1 a:hover { color: #fff; text-decoration: underline; text-underline-offset: 6px; text-decoration-thickness: 1px; }

  /* Read CTA — right side of meta row */
  .hero-feature .read-more {
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.18em;
    text-transform: uppercase;
    color: #fff;
    font-weight: 500;
    display: inline-flex; align-items: center; gap: 8px;
    margin: 0;
    padding: 0;
    background: transparent;
    border: 0;
    white-space: nowrap;
  }
  .hero-feature .read-more:hover { text-decoration: underline; text-underline-offset: 4px; }
  .hero-feature .read-more .arrow { transition: transform 160ms ease; }
  .hero-feature .read-more:hover .arrow { transform: translateX(3px); }

  /* Meta row — byline left, read-more right. */
  .hero-feature .feature-foot {
    margin-top: 16px;
    padding-top: 16px;
    border-top: 1px solid rgba(255,255,255,0.38);
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    line-height: 1;
  }
  .hero-feature .byline {
    font-family: var(--font-mono);
    font-size: 11px;
    letter-spacing: 0.16em;
    text-transform: uppercase;
    color: rgba(255,255,255,0.78);
    text-shadow: 0 1px 12px rgba(0,0,0,0.6);
  }
  .hero-feature .byline .author { color: #fff; }

  @media (max-width: 760px) {
    .hero-feature { padding: 10px; }
    .hero-feature .feature-media { aspect-ratio: 4 / 5; }
    .hero-feature .feature-media::after { height: 86%; }
    /* More breathing room and a tighter type scale so the overlaid copy
       doesn't crowd the bottom of the photo. */
    .hero-feature .feature-body { padding: 24px 20px 22px; }
    .hero-feature .corner-label {
      top: 10px; left: 10px; padding: 8px 11px;
      font-size: 10px; letter-spacing: 0.18em; gap: 8px;
    }
    .hero-feature .kicker { margin-bottom: 12px; font-size: 10px; letter-spacing: 0.18em; }
    .hero-feature h1 { font-size: clamp(26px, 7vw, 34px); line-height: 1.08; }
    /* Stack the meta row: byline on its own lines, CTA underneath. */
    .hero-feature .feature-foot {
      flex-direction: column; align-items: flex-start;
      gap: 12px; margin-top: 16px; padding-top: 14px;
    }
    .hero-feature .byline { letter-spacing: 0.06em; line-height: 1.55; }
    .hero-feature .read-more { letter-spacing: 0.14em; }
  }

  /* HOME — Partner: tinted bg, gold left-rule cards, no photos. */
  .section.partner { background: var(--bg-elev); }
  .section.partner .story { border-left: 3px solid var(--gold); padding-left: 20px; }
  .section.partner .story .ph { display: none; }
  .section.partner .story h3 { font-size: 22px; }
  :is(html[data-theme="dark"], html.dark) .section.partner { background: #101927; }

  .section-head .rss-pill {
    display: inline-flex; align-items: center; gap: 8px;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-mute);
  }
  .section-head .rss-pill svg { width: 12px; height: 12px; color: var(--gold); }


/* ============================================================
   POST — single article
   ============================================================ */
  .post { background: var(--bg); }

  .post-head {
    background: var(--bg-elev);
    border-bottom: 1px solid var(--rule-soft);
    padding: 28px 0 36px;
  }
  .post-head-inner { max-width: 900px; margin: 0 auto; padding: 0 var(--pad); }

  .breadcrumb {
    display: flex; align-items: center; gap: 8px;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.12em;
    text-transform: uppercase; color: var(--ink-mute); margin-bottom: 20px;
  }
  .breadcrumb a { color: var(--ink-mute); text-decoration: none; transition: color .12s; }
  .breadcrumb a:hover { color: var(--primary); }
  .breadcrumb span:not(.current) { opacity: 0.5; }
  .breadcrumb .current { color: var(--ink-soft); }

  .post-head .kicker {
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.2em;
    text-transform: uppercase; color: color-mix(in oklab, var(--primary) 75%, var(--ink));
    display: block; margin-bottom: 14px;   /* was inline-flex + gap: dynamic data
                                              outputs a list of terms (often links),
                                              so let them flow + wrap. Flex 'gap'
                                              spaced every term AND comma. */
  }
  /* Gold bar leads the line as an inline-block so the term list flows after it. */
  .post-head .kicker::before {
    content: ""; display: inline-block; width: 22px; height: 2px;
    background: var(--gold); vertical-align: middle; margin-right: 8px;
  }
  /* Category terms arrive as <a> links from dynamic data — inherit the kicker
     colour instead of the default link colour, and drop the underline. */
  .post-head .kicker a { color: inherit; text-decoration: none; }
  .post-head .kicker a:hover { color: var(--gold-bright); }

  .post-title {
    font-family: var(--font-display);
    font-weight: var(--display-weight);
    font-style: var(--display-italic);
    letter-spacing: var(--display-tracking);
    font-size: clamp(32px, 4.6vw, 56px);
    line-height: 1.05; color: var(--ink);
    margin: 0 0 18px 0; max-width: none; text-wrap: balance;
  }
  .post-standfirst {
    font-family: var(--font-serif);
    font-size: clamp(17px, 1.4vw, 20px);
    line-height: 1.5; color: var(--ink-soft);
    max-width: none; margin: 0 0 28px 0; text-wrap: pretty;
  }

  .post-meta {
    display: grid; grid-template-columns: 1fr auto; gap: 24px;
    align-items: center; padding-top: 20px; border-top: 1px solid var(--rule-soft);
  }
  /* Byline + date/read-time grouped together on the left. */
  .post-meta-main { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
  /* Bullet between the byline and the date/read-time. Drawn as a pseudo-element
     on the byline (a real, content-bearing element) so Bricks can't strip it —
     an empty <span> separator gets removed on render. */
  .post-meta-main > .post-byline::after,
  .post-meta-main > .byline-name::after {
    content: ""; display: inline-block; vertical-align: middle;
    width: 3px; height: 3px; border-radius: 50%; background: var(--ink-mute);
    margin-left: 12px;   /* matches .post-meta-main gap → bullet sits centred */
  }
  /* Single-author byline — no avatar, no title/position. */
  .post-byline {
    font-family: var(--font-sans); font-size: 14px; font-weight: 600;
    color: var(--ink); line-height: 1.3;
  }
  /* Underline the author link whether it's nested in .post-byline ("By <a>…")
     OR the link itself carries the class (Bricks dynamic author renders
     <a class="post-byline">…</a>). Uses text-decoration, NOT border-bottom, so
     the underline covers only the name — a border-bottom would also run under the
     inline-block "·" separator that follows the link in the Bricks markup. */
  .post-byline a, a.post-byline {
    color: var(--ink);
    text-decoration: underline;
    text-decoration-color: var(--rule-soft);
    text-decoration-thickness: 1px;
    text-underline-offset: 3px;
    transition: color .15s, text-decoration-color .15s;
  }
  .post-byline a:hover, a.post-byline:hover {
    color: var(--accent); text-decoration-color: var(--accent);
  }
  /* "By" as a SEPARATE Bricks element (Basic Text, class .byline-prefix) grouped
     with the dynamic author link inside a Block (class .byline-name). The block is
     forced to block flow with inline children, so "By" + the name read as one line
     and the separator dot (above) sits after the whole group. */
  .post-meta-main > .byline-name { display: block; }
  .byline-name .byline-prefix {
    display: inline; margin-right: 0.3em;   /* the space after "By" */
    font-family: var(--font-sans); font-size: 14px; font-weight: 600;
    color: var(--ink); line-height: 1.3;
  }
  .post-dates {
    display: flex; align-items: center; gap: 10px;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.06em;
    color: var(--ink-mute); flex-wrap: wrap; justify-content: flex-start;
  }
  /* Bullet before every term after the first (date · read-time). Uses '* + *'
     not 'span + span' so it matches whatever element Bricks outputs for each
     term — no empty separator element for Bricks to strip. */
  .post-dates > * + *::before {
    content: ""; display: inline-block; vertical-align: middle;
    width: 3px; height: 3px; border-radius: 50%; background: var(--ink-mute);
    margin-right: 10px;   /* matches .post-dates gap → bullet sits centred */
  }

  .post-actions { display: flex; gap: 6px; flex-wrap: wrap; }
  .post-actions .post-action {
    display: inline-flex; align-items: center; justify-content: center; gap: 6px;
    width: 36px; height: 36px; padding: 0;
    background: var(--bg); color: var(--ink-soft);
    border: 1px solid var(--rule-soft); border-radius: 50%;
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.12em;
    text-transform: uppercase; cursor: pointer;
    transition: color .15s, border-color .15s, background .15s, transform .15s;
    position: relative;
  }
  .post-actions .post-action svg { width: 15px; height: 15px; flex-shrink: 0; }
  .post-actions .post-action:hover {
    color: var(--ink); border-color: var(--ink); background: var(--bg); transform: translateY(-1px);
  }
  .post-actions .post-action.act-x:hover       { color: #fff; background: #131313; border-color: #131313; }
  .post-actions .post-action.act-facebook:hover{ color: #fff; background: #1877F2; border-color: #1877F2; }
  .post-actions .post-action.act-linkedin:hover{ color: #fff; background: #0A66C2; border-color: #0A66C2; }
  .post-actions .post-action.act-email:hover   { color: var(--ink); border-color: var(--ink); }
  .post-actions .post-action.act-copy:hover    { color: var(--accent); border-color: var(--accent); }
  .post-actions .post-action.act-print:hover   { color: var(--ink); border-color: var(--ink); }
  /* Tooltip */
  .post-actions .post-action::after {
    content: attr(data-label);
    position: absolute; bottom: calc(100% + 8px); left: 50%;
    transform: translateX(-50%) translateY(4px);
    padding: 4px 8px; background: var(--ink); color: var(--bg);
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em;
    text-transform: uppercase; white-space: nowrap; border-radius: 2px;
    opacity: 0; pointer-events: none; transition: opacity .15s, transform .15s; z-index: 10;
  }
  .post-actions .post-action:hover::after,
  .post-actions .post-action:focus-visible::after {
    opacity: 1; transform: translateX(-50%) translateY(0);
  }
  .post-actions .post-action.is-copied { color: #fff; background: #1B7A3E; border-color: #1B7A3E; }
  .post-actions .post-action.is-copied::after {
    content: "Copied!"; opacity: 1; transform: translateX(-50%) translateY(0); background: #1B7A3E;
  }
  /* Vertical rule between the share buttons and the copy/print buttons. Drawn as
     an absolutely-positioned pseudo-element on the copy button (already
     position: relative), sitting in the gap to its left so it never shifts the
     icon — replaces an empty <span> that Bricks would strip. */
  .post-actions .act-copy { margin-left: 14px; }
  .post-actions .act-copy::before {
    content: ""; position: absolute; top: 50%; left: -10px;
    transform: translateY(-50%);
    width: 1px; height: 20px; background: var(--rule-soft);
  }
  /* Hero image — contained to the article measure, not full-bleed. */
  .post-hero { margin: 0 auto; padding: 36px var(--pad) 0; background: var(--bg); max-width: 900px; }
  .post-hero-img {
    width: 100%;
    aspect-ratio: 16 / 9; max-height: 520px;
    background-size: cover; background-position: center; background-color: var(--bg-elev);
    border: 1px solid var(--rule-soft);
  }
  /* Real <img> inside the hero (e.g. a Bricks Image element) — keep it in normal
     flow with the same 16:9 crop as .post-hero-img. Without this, a Bricks
     "cover" image set to position:absolute drops out of flow and the caption
     below it gets overlapped. */
  .post-hero img {
    display: block; width: 100%;
    aspect-ratio: 16 / 9; max-height: 520px; object-fit: cover;
    position: static;
    background-color: var(--bg-elev);
    border: 1px solid var(--rule-soft);
  }
  /* Featured-image caption: STACKED — an italic-serif caption, then a small mono
     credit on the line below. Matches both a nested .post-hero figcaption and a
     standalone .post-hero-caption (Bricks figcaption). */
  .post-hero figcaption,
  .post-hero-caption {
    margin: 16px 0 0; padding: 0 0 28px;
    display: block;
    border-bottom: 1px solid var(--rule-soft);
  }
  .post-hero figcaption .cap-text,
  .post-hero-caption .cap-text {
    display: block;
    font-family: var(--font-serif); font-style: italic;
    font-size: 15px; line-height: 1.55; color: var(--ink-soft);
  }
  .post-hero figcaption .cap-credit,
  .post-hero-caption .cap-credit {
    display: block; margin-top: 6px;
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.12em;
    text-transform: uppercase; color: var(--ink-mute);
  }

  /* Body: single centered column, aligned to the article measure. */
  .post-body-wrap { padding: 48px 0 72px; }
  .post-body-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    justify-content: center;
    max-width: 900px;
  }

  .sidebar-label {
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.2em;
    text-transform: uppercase; color: var(--ink-mute);
    padding-bottom: 8px; border-bottom: 1px solid var(--ink); margin-bottom: 12px;
  }

  /* Body copy */
  .post-body { font-family: var(--font-serif); font-size: 19px; line-height: 1.7; color: var(--ink); }
  .post-body > p { margin: 0 0 22px 0; text-wrap: pretty; }
  /* Lead paragraph + drop cap applied STRUCTURALLY — no hand-added .lede /
     .dropcap classes — so they work on Bricks dynamic post content, where every
     paragraph is just a plain <p> you can't class individually. */
  .post-body > p:first-of-type { font-size: 21px; line-height: 1.55; }
  .post-body > p:first-of-type::first-letter {
    float: left; font-family: var(--font-display); font-weight: 700;
    font-size: 72px; line-height: 0.85; padding: 6px 10px 0 0; color: var(--ink);
  }
  .post-body h2 {
    font-family: var(--font-display); font-weight: 700; font-size: 28px;
    letter-spacing: -0.02em; line-height: 1.15; color: var(--ink);
    margin: 48px 0 16px; padding-top: 24px; border-top: 1px solid var(--rule-soft);
  }
  .post-body a {
    color: var(--ink); text-decoration: none;
    border-bottom: 1px solid color-mix(in oklab, var(--accent) 50%, var(--rule-soft));
    transition: color .12s, border-color .12s;
  }
  .post-body a:hover { color: var(--accent); border-bottom-color: var(--accent); }
  .post-body strong { font-weight: 700; }

  /* Pull quote */
  .pullquote {
    margin: 36px 0 36px -80px; padding: 20px 0 20px 28px;
    border-left: 3px solid var(--gold); max-width: 560px;
  }
  .pullquote p {
    font-family: var(--font-display); font-weight: 500; font-style: italic;
    font-size: 28px; line-height: 1.25; letter-spacing: -0.015em;
    color: var(--ink); margin: 0 0 12px 0;
  }
  .pullquote cite {
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-mute); font-style: normal;
  }

  /* Inline figure */
  .inline-figure { margin: 36px -80px; }
  .inline-figure .inline-img {
    width: 100%; aspect-ratio: 16 / 9; background-size: cover; background-position: center;
  }
  .inline-figure figcaption {
    font-family: var(--font-sans); font-size: 13px; line-height: 1.5;
    color: var(--ink-mute); margin-top: 10px; padding-top: 10px; border-top: 1px solid var(--rule-soft);
  }

  /* Callout / by-the-numbers */
  .callout {
    margin: 36px 0; padding: 24px 28px; background: var(--bg-elev);
    border: 1px solid var(--rule-soft); border-left: 3px solid var(--gold);
  }
  .callout-label {
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.2em;
    text-transform: uppercase; color: var(--ink-mute); margin-bottom: 16px;
  }
  .callout-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px 32px; }
  .callout-grid .big {
    font-family: var(--font-display); font-weight: 700; font-size: 32px;
    line-height: 1; letter-spacing: -0.03em;
    color: color-mix(in oklab, var(--primary) 70%, var(--ink)); margin-bottom: 6px;
  }
  .callout-grid .small { font-family: var(--font-sans); font-size: 13px; line-height: 1.4; color: var(--ink-soft); }

  /* End mark */
  .post-ending {
    text-align: center; font-family: var(--font-display); font-size: 24px;
    color: var(--ink-mute); margin: 40px 0 20px; letter-spacing: 0.4em;
  }

  /* Post footer: tags + attribution */
  .post-footer { margin-top: 16px; background: transparent; }
  /* Tags. Bricks outputs these as a COMMA-SEPARATED list of bare <a> links
     ("<a>Blah</a>, <a>Test</a>"), so the styling targets `.tags a` — not a
     `.tag` class — and `font-size: 0` on the container collapses the literal
     ", " + whitespace text nodes to zero width. Each link is restored to a pill
     below. (Bare `.tags` so it covers the standalone Bricks element and the
     prototype footer alike — `.tags` is used nowhere else.) */
  .tags {
    font-size: 0;            /* hides the ", " separators between the links */
    margin-bottom: 32px;
  }
  .tags a {
    display: inline-flex; align-items: center; height: 28px; padding: 0 12px;
    margin: 0 8px 8px 0;     /* spacing between pills (replaces the old flex gap) */
    background: transparent; border: 1px solid var(--rule-soft); border-radius: 999px;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em;
    text-transform: uppercase; color: var(--ink-soft); text-decoration: none;
    transition: color .12s, border-color .12s, background .12s;
  }
  .tags a:hover {
    border-color: var(--accent); color: var(--accent);
    background: color-mix(in oklab, var(--accent) 5%, var(--bg));
  }
  /* Author box — maps to the post author's WordPress user fields
     (photo → Gravatar or local avatar · bio → Biographical Info ·
      website → Website · email → Email). */
  .post-author-box {
    display: grid; grid-template-columns: 88px 1fr; gap: 22px; align-items: start;
    padding: 26px 0 0; margin-bottom: 32px;
    border-top: 1px solid var(--rule-soft);
  }
  /* Second column of the author grid — the wrapper that groups name + bio + links
     so they stack beside the avatar. Mostly structural (its children carry the
     styling); min-width: 0 lets long text wrap instead of stretching the 1fr
     track. REQUIRED: in Bricks the name/bio/links must sit inside one element
     with this class, or each becomes its own grid cell and the layout breaks. */
  .post-author-box .pa-info { min-width: 0; }
  /* Avatar. Works whether .pa-photo is the <img> itself (prototype) OR a wrapper
     <div> around an <img> (Bricks renders <div class="pa-photo"><img …></div>).
     overflow: hidden clips the inner img to the circle; object-fit covers it. */
  .post-author-box .pa-photo {
    width: 88px; height: 88px; flex: none;
    border-radius: 50%; overflow: hidden; object-fit: cover;
    background: var(--bg-elev); border: 1px solid var(--rule-soft); display: block;
  }
  .post-author-box .pa-photo img {
    width: 100%; height: 100%; object-fit: cover; display: block;
    border-radius: 50%;
  }
  .post-author-box .pa-name {
    font-family: var(--font-display); font-weight: var(--display-weight);
    font-size: 19px; color: var(--ink); margin: 0 0 6px;
  }
  .post-author-box .pa-bio {
    font-family: var(--font-serif); font-size: 15px; line-height: 1.6;
    color: var(--ink-soft); margin: 0 0 12px; max-width: 64ch;
  }
  .post-author-box .pa-links {
    display: flex; flex-wrap: wrap; gap: 18px;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase;
  }
  .post-author-box .pa-links a {
    display: inline-flex; align-items: center; gap: 7px;
    color: var(--accent); border-bottom: 1px solid transparent; padding-bottom: 1px;
  }
  .post-author-box .pa-links a:hover { border-bottom-color: var(--accent); }
  .post-author-box .pa-links svg { width: 13px; height: 13px; flex: none; }
  @media (max-width: 640px) {
    .post-author-box { grid-template-columns: 64px 1fr; gap: 16px; }
    .post-author-box .pa-photo { width: 64px; height: 64px; }
  }

  /* Related section */
  .related { background: var(--bg-elev); padding: 56px 0 72px; border-top: 1px solid var(--rule-soft); }
  .related-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 32px; margin-top: 24px; }

  /* ── Bricks "Related Posts" element ───────────────────────────────────────
     Add the class `related` to the Bricks Related Posts element. These rules map
     its generated markup onto the prototype's story-card look:
       ul.related-posts > li.repeater-item > figure > a > img
                                           > .post-content > h3 (title)
                                                           + div.dynamic (date)
                                                           + div.dynamic (excerpt)
     Self-responsive grid, so no extra media query needed. */
  .related ul.related-posts {
    list-style: none; margin: 24px 0 0; padding: 0;
    display: grid; grid-template-columns: repeat(auto-fit, minmax(min(240px, 100%), 1fr));
    gap: 32px;
  }
  .related .repeater-item { display: flex; flex-direction: column; gap: 14px; margin: 0; }
  /* Image / figure intentionally NOT styled — Bricks' own image handling is left
     alone. Only the text below (title, date, excerpt) is styled. */
  /* Text column */
  /* Block flow (not flex column) so the byline's author + date can share a line. */
  .related .post-content { display: block; }
  .related .post-content > * { margin: 0; }
  .related .post-content h3 {
    font-family: var(--font-display); font-weight: var(--display-weight);
    font-size: 24px; line-height: 1.15; letter-spacing: -0.005em;
    margin: 0 0 10px; text-wrap: balance;
  }
  .related .post-content h3 a { color: var(--ink); text-decoration: none; }
  .related .post-content h3 a:hover { color: var(--primary); }
  /* Fields below the title, matching the home-page story cards:
       first .dynamic       = excerpt          → styled like .dek (serif)
       last two .dynamic     = author + date     → the .byline, ON ONE LINE, joined
                                                   by a · divider (author = 2nd-to-
                                                   last field, date = last field). */
  .related .post-content > div.dynamic:first-of-type {        /* excerpt → .dek */
    font-family: var(--font-serif); font-size: 15px; line-height: 1.5;
    color: var(--ink-soft); text-wrap: pretty; margin: 0 0 12px;
  }
  .related .post-content > div.dynamic:nth-last-of-type(2),   /* author */
  .related .post-content > div.dynamic:nth-last-of-type(1) {  /* date */
    display: inline;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em;
    text-transform: uppercase;
  }
  .related .post-content > div.dynamic:nth-last-of-type(2) { color: var(--ink); }      /* author (darker) */
  .related .post-content > div.dynamic:nth-last-of-type(1) { color: var(--ink-mute); } /* date (muted) */
  /* Dot divider between author and date — mirrors .byline .sep. */
  .related .post-content > div.dynamic:nth-last-of-type(1)::before {
    content: ""; display: inline-block; vertical-align: middle;
    width: 3px; height: 3px; border-radius: 50%; background: var(--ink-mute);
    margin: 0 10px;
  }

  @media (max-width: 980px) {
    .pullquote { margin-left: 0; }
    .inline-figure { margin: 36px 0; }
    .post-meta { grid-template-columns: 1fr; gap: 14px; }
    .related-grid { grid-template-columns: 1fr; }
  }
  @media (max-width: 640px) {
    .post-head { padding: 20px 0 28px; }
    .post-body { font-size: 17px; }
    .post-body > p:first-of-type { font-size: 19px; }
    .post-body > p:first-of-type::first-letter { font-size: 56px; }
    .post-body h2 { font-size: 22px; margin-top: 36px; }
    .pullquote p { font-size: 22px; }
    .callout-grid { grid-template-columns: 1fr; }
  }


/* ============================================================
   SHARED — centered page header (Contact · Search · 404)
   ============================================================ */
  .page-head {
    padding: 72px 0 48px;
    text-align: center;
    border-bottom: 1px solid var(--rule-soft);
  }
  .page-head .kicker { justify-content: center; }
  .page-head .kicker::after {
    content: ""; width: 22px; height: 2px; background: var(--gold);
  }
  .page-head h1.title {
    font-family: var(--font-display); font-weight: var(--display-weight);
    font-style: var(--display-italic); letter-spacing: var(--display-tracking);
    font-size: clamp(40px, 5.4vw, 68px); line-height: 1.02;
    margin: 0 0 18px; text-wrap: balance;
  }
  .page-head .lede {
    font-family: var(--font-serif); font-size: 19px; line-height: 1.55;
    color: var(--ink-soft); max-width: 60ch; margin: 0 auto; text-wrap: pretty;
  }


/* ============================================================
   CONTACT — trimmed for a small newsroom
   ============================================================ */
  .contact-layout {
    display: grid;
    grid-template-columns: 1.15fr 0.85fr;
    gap: 64px;
    padding: 64px 0 72px;
    align-items: start;
  }
  @media (max-width: 880px) {
    .contact-layout { grid-template-columns: 1fr; gap: 48px; padding: 48px 0 56px; }
  }

  .contact-panel {
    background: var(--surface);
    border: 1px solid var(--rule-soft);
    padding: 36px;
  }
  .contact-panel h2 {
    font-family: var(--font-display); font-weight: var(--display-weight);
    font-style: var(--display-italic); letter-spacing: var(--display-tracking);
    font-size: 30px; margin: 0 0 8px; line-height: 1.1;
  }
  .contact-panel .sub {
    font-family: var(--font-serif); color: var(--ink-soft);
    font-size: 15px; line-height: 1.55; margin: 0 0 28px; max-width: 52ch;
  }

  /* Form */
  .field { margin-bottom: 18px; }
  .field label {
    display: block; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-mute); margin-bottom: 8px;
  }
  .field input, .field textarea {
    width: 100%; background: var(--bg); border: 1px solid var(--rule-input);
    padding: 14px 16px; font-family: var(--font-sans); font-size: 15px; color: var(--ink);
    outline: none; border-radius: 0; transition: border-color .15s ease, background .15s ease;
  }
  .field input:focus, .field textarea:focus { border-color: var(--ink); background: var(--bg-elev); }
  .field textarea { min-height: 150px; resize: vertical; font-family: var(--font-serif); font-size: 16px; line-height: 1.5; }
  .row-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
  @media (max-width: 540px) { .row-2 { grid-template-columns: 1fr; } }

  .submit {
    display: inline-flex; align-items: center; gap: 10px;
    background: var(--ink); color: var(--bg); border: 0; padding: 16px 28px;
    font-family: var(--font-sans); font-weight: 600; font-size: 13px;
    letter-spacing: 0.12em; text-transform: uppercase;
    transition: background .2s ease, transform .2s ease;
  }
  .submit:hover { background: var(--accent); transform: translateY(-1px); }
  .form-note {
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.1em;
    text-transform: uppercase; color: var(--ink-mute); margin-top: 14px;
  }
  .form-note.is-sent { color: var(--accent); }

  /* Essentials — a short, scannable list (no five-channel grid). */
  .contact-essentials { display: grid; gap: 0; }
  .contact-essentials .row {
    padding: 20px 0; border-bottom: 1px solid var(--rule-soft);
  }
  .contact-essentials .row:first-child { padding-top: 0; }
  .contact-essentials .k {
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em;
    text-transform: uppercase; color: var(--ink-mute); margin-bottom: 8px;
  }
  .contact-essentials .v {
    font-family: var(--font-serif); font-size: 16px; line-height: 1.5; color: var(--ink);
  }
  .contact-essentials a {
    font-family: var(--font-mono); font-size: 13px; letter-spacing: 0.02em;
    color: var(--ink); border-bottom: 1px solid var(--rule);
  }
  .contact-essentials a:hover { color: var(--accent); border-bottom-color: var(--accent); }


/* ============================================================
   SEARCH RESULTS
   ============================================================ */
  .search-field {
    display: flex; align-items: center; gap: 12px;
    max-width: 560px; margin: 22px auto 0;
    border: 1px solid var(--rule); background: var(--bg);
    padding: 12px 16px;
  }
  .search-field svg { width: 18px; height: 18px; color: var(--ink-mute); flex: none; }
  .search-field input {
    flex: 1; border: 0; outline: 0; background: transparent;
    font-family: var(--font-display); font-weight: 600; font-size: 18px; color: var(--ink);
  }
  .search-field button {
    border: 0; background: var(--ink); color: var(--bg);
    font-family: var(--font-sans); font-weight: 600; font-size: 12px;
    letter-spacing: 0.1em; text-transform: uppercase; padding: 10px 18px;
    transition: background .2s ease;
  }
  .search-field button:hover { background: var(--accent); }
  /* Search layout — filter sidebar + results grid.
     Bricks: Query Loop + Filter–Checkbox (Category), Filter–Datepicker
     (Date range), Active Filters, results count. */
  .search-layout {
    display: grid; grid-template-columns: 248px 1fr; gap: 40px;
    /* vertical-only padding so the .wrap class on this same element keeps its
       horizontal gutters (a `padding` shorthand here would zero them). */
    padding-top: 40px; padding-bottom: 72px; align-items: start;
  }
  @media (max-width: 900px) { .search-layout { grid-template-columns: 1fr; gap: 28px; padding-top: 28px; } }

  .search-filters { border: 1px solid var(--rule-soft); background: var(--surface); }
  .sf-head {
    background: var(--navy); color: #fff;
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.18em;
    text-transform: uppercase; padding: 14px 18px;
  }
  .sf-group { padding: 18px; border-bottom: 1px solid var(--rule-soft); }
  .sf-label {
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em;
    text-transform: uppercase; color: var(--ink-mute); margin-bottom: 12px;
  }
  .sf-check {
    display: flex; align-items: center; gap: 10px; padding: 7px 0; cursor: pointer;
    font-family: var(--font-sans); font-size: 14px; color: var(--ink-soft);
  }
  .sf-check input { width: 15px; height: 15px; accent-color: var(--navy); flex: none; margin: 0; cursor: pointer; }
  .sf-check .sf-name { flex: 1; }
  .sf-check .sf-count { font-family: var(--font-mono); font-size: 11px; color: var(--ink-mute); }
  .sf-check:hover .sf-name { color: var(--ink); }
  .sf-date {
    width: 100%; background: var(--bg); border: 1px solid var(--rule-input);
    padding: 10px 12px; font-family: var(--font-sans); font-size: 14px; color: var(--ink);
    outline: none; border-radius: 0;
  }
  .sf-date:focus { border-color: var(--ink); }
  .sf-actions { display: flex; gap: 10px; padding: 18px; border-bottom: 1px solid var(--rule-soft); }
  .sf-apply {
    flex: 1; background: var(--navy); color: #fff; border: 1px solid var(--navy);
    font-family: var(--font-sans); font-weight: 600; font-size: 12px; letter-spacing: 0.08em;
    text-transform: uppercase; padding: 11px 0; cursor: pointer; transition: background .15s, border-color .15s;
  }
  .sf-apply:hover { background: var(--navy-mid); border-color: var(--navy-mid); }
  .sf-reset {
    flex: 1; background: transparent; color: var(--ink-soft); border: 1px solid var(--rule-input);
    font-family: var(--font-sans); font-weight: 600; font-size: 12px; letter-spacing: 0.08em;
    text-transform: uppercase; padding: 11px 0; cursor: pointer; transition: color .15s, border-color .15s;
  }
  .sf-reset:hover { color: var(--ink); border-color: var(--ink); }
  .sf-active { border-bottom: 0; }
  .sf-chips { display: flex; flex-wrap: wrap; gap: 8px; }
  .sf-chip {
    display: inline-flex; align-items: center; gap: 6px;
    background: var(--bg-elev); border: 1px solid var(--rule-soft); border-radius: 2px;
    padding: 5px 10px; font-family: var(--font-mono); font-size: 11px; color: var(--ink-soft);
  }
  button.sf-chip { cursor: pointer; }
  button.sf-chip:hover { border-color: var(--accent); color: var(--accent); }
  .sf-chip span { font-size: 13px; line-height: 1; }

  .search-results-head {
    display: flex; align-items: baseline; justify-content: space-between;
    padding-bottom: 14px; margin-bottom: 24px; border-bottom: 2px solid var(--rule);
  }
  .sr-count { font-family: var(--font-sans); font-size: 15px; color: var(--ink-soft); }
  .sr-count b { color: var(--ink); font-weight: 700; }
  .result-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
  @media (max-width: 620px) { .result-grid { grid-template-columns: 1fr; } }
  .result-grid .no-results { grid-column: 1 / -1; }
  .result-card {
    border: 1px solid var(--rule-soft); background: var(--surface);
    padding: 20px 22px; display: flex; flex-direction: column; gap: 8px;
    transition: border-color .15s, box-shadow .15s;
  }
  .result-card:hover { border-color: var(--rule); box-shadow: 0 6px 20px -14px rgba(0,33,71,0.4); }
  .rc-badges { display: flex; flex-wrap: wrap; gap: 6px; }
  .rc-badge {
    display: inline-flex; align-items: center; height: 20px; padding: 0 8px;
    background: var(--navy); color: #fff; border-radius: 2px;
    font-family: var(--font-sans); font-weight: 600; font-size: 10px;
    letter-spacing: 0.08em; text-transform: uppercase;
  }
  .rc-badge--archive { background: var(--slate); }
  .rc-badge--opinion { background: var(--gold); color: var(--navy); }
  /* Dark mode: navy/slate fills vanish on dark cards — flip to the
     light-blue brand accent and a light slate, both with dark text. */
  :is(html[data-theme="dark"], html.dark) .rc-badge { background: var(--primary); color: var(--bg); }
  :is(html[data-theme="dark"], html.dark) .rc-badge--archive { background: var(--ink-mute); color: var(--bg); }
  :is(html[data-theme="dark"], html.dark) .rc-badge--opinion { background: var(--gold); color: var(--navy); }
  .rc-meta { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.04em; color: var(--ink-mute); }
  .rc-title {
    font-family: var(--font-display); font-weight: var(--display-weight);
    font-size: 19px; line-height: 1.2; letter-spacing: -0.005em; margin: 0; text-wrap: balance;
  }
  .rc-title a { color: var(--ink); }
  .rc-title a:hover { color: var(--primary); }
  .rc-excerpt { font-family: var(--font-serif); font-size: 14px; line-height: 1.5; color: var(--ink-soft); margin: 0; }

  /* ----------------------------------------------------------------
     SEARCH — Bricks build hooks. The Bricks markup reuses the class
     names above, but a few generated parts can't be targeted directly:
     the query loop wraps EACH card in its own .result-grid, the
     category links, the datepicker field, the pagination, and the
     filter checkbox labels. These rules cover those.
     ---------------------------------------------------------------- */

  /* Two-column grid: Bricks repeats .result-grid per item, so the real
     grid lives on the wrappers' (class-less) parent — match it via :has. */
  .brxe-div:has(> .result-grid) {
    display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 20px; align-content: start;
  }
  .brxe-div:has(> .result-grid) > .search-results-head,
  .brxe-div:has(> .result-grid) > .search-pagination { grid-column: 1 / -1; }
  /* Each loop wrapper holds one card — make it a single full-width cell. */
  .brxe-div.result-grid { display: grid; grid-template-columns: 1fr; }
  @media (max-width: 620px) { .brxe-div:has(> .result-grid) { grid-template-columns: 1fr; } }

  /* Category badges — Bricks outputs comma-separated <a> links inside
     .rc-badges; style the links as pills and hide the ", " text nodes. */
  .rc-badges { font-size: 0; }
  .rc-badges a {
    display: inline-flex; align-items: center; height: 20px; padding: 0 8px;
    background: var(--navy); color: #fff; border-radius: 2px;
    font-family: var(--font-sans); font-weight: 600; font-size: 10px;
    letter-spacing: 0.08em; text-transform: uppercase; text-decoration: none;
    transition: background .15s;
  }
  .rc-badges a:hover { background: var(--navy-mid); color: #fff; }
  .rc-badges a[href*="/category/opinion"] { background: var(--gold); color: var(--navy); }
  :is(html[data-theme="dark"], html.dark) .rc-badges a { background: var(--primary); color: var(--bg); }
  :is(html[data-theme="dark"], html.dark) .rc-badges a[href*="/category/opinion"] { background: var(--gold); color: var(--navy); }

  /* Category filter — Bricks Filter–Checkbox (native input hidden, the
     .brx-input-indicator is the drawn box). Matches the .sf-check look. */
  .search-filters .brxe-filter-checkbox { list-style: none; margin: 0; padding: 0; }
  .search-filters .brxe-filter-checkbox li { margin: 0; }
  .search-filters .brxe-filter-checkbox label {
    display: flex; align-items: center; gap: 10px; padding: 7px 0; cursor: pointer;
    font-family: var(--font-sans); font-size: 14px; color: var(--ink-soft);
  }
  .search-filters .brxe-filter-checkbox input.brx-a11y-hidden {
    position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none;
  }
  .search-filters .brxe-filter-checkbox .brx-input-indicator {
    flex: none; position: relative; width: 16px; height: 16px;
    border: 1px solid var(--rule-input); background: var(--bg); border-radius: 2px;
    transition: background .12s, border-color .12s;
  }
  .search-filters .brxe-filter-checkbox input:checked + .brx-input-indicator {
    background: var(--navy); border-color: var(--navy);
  }
  .search-filters .brxe-filter-checkbox input:checked + .brx-input-indicator::after {
    content: ""; position: absolute; left: 5px; top: 1px;
    width: 4px; height: 8px; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg);
  }
  .search-filters .brxe-filter-checkbox .brx-option-text {
    flex: 1; display: flex; align-items: center; justify-content: space-between; gap: 8px;
  }
  .search-filters .brxe-filter-checkbox label:hover .brx-option-text { color: var(--ink); }
  .search-filters .brxe-filter-checkbox .brx-option-count {
    font-family: var(--font-mono); font-size: 11px; color: var(--ink-mute);
  }

  /* Date range — Bricks Filter–Datepicker renders its own field; match .sf-date. */
  .search-filters .brxe-filter-datepicker .form-control,
  .search-filters .brxe-filter-datepicker input.input,
  .search-filters .brxe-filter-datepicker input[type="text"] {
    width: 100%; background: var(--bg); border: 1px solid var(--rule-input);
    padding: 10px 12px; font-family: var(--font-sans); font-size: 14px; color: var(--ink);
    outline: none; border-radius: 0; cursor: pointer;
  }
  .search-filters .brxe-filter-datepicker .form-control:focus,
  .search-filters .brxe-filter-datepicker input.input:focus { border-color: var(--ink); }
  .search-filters .brxe-filter-datepicker input::placeholder { color: var(--ink-mute); }
  /* flatpickr popup — brand the selected/in-range days (calendar mounts to body). */
  .flatpickr-day.selected, .flatpickr-day.startRange, .flatpickr-day.endRange,
  .flatpickr-day.selected:hover, .flatpickr-day.startRange:hover, .flatpickr-day.endRange:hover {
    background: var(--navy); border-color: var(--navy); color: #fff;
  }
  .flatpickr-day.inRange { background: var(--bg-elev); border-color: var(--rule-soft); box-shadow: none; }

  /* Active filters — Bricks Active-Filters chips (the .sf-chip equivalent). */
  .active-filter-button { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; }
  .active-filter-button li { margin: 0; }
  .active-filter-button button {
    display: inline-flex; align-items: center; gap: 6px;
    background: var(--bg-elev); border: 1px solid var(--rule-soft); border-radius: 2px;
    padding: 5px 10px; font-family: var(--font-mono); font-size: 11px; color: var(--ink-soft);
    cursor: pointer; transition: color .15s, border-color .15s;
  }
  .active-filter-button button:hover { border-color: var(--accent); color: var(--accent); }
  .active-filter-button button:empty { display: none; }

  /* Pagination — shared look for EVERY Bricks Pagination element (search
     results, category/archive, …). NOTE: the class "page-numbers" is on BOTH
     the <ul> and each link/span, so button styling must be scoped to items
     inside <li> — otherwise the whole <ul> gets boxed. */
  .bricks-pagination ul.page-numbers {
    list-style: none; display: flex; flex-wrap: wrap; align-items: center;
    justify-content: center; gap: 6px; margin: 0; padding: 0; border: 0;
  }
  .bricks-pagination li { margin: 0; list-style: none; }
  .bricks-pagination li .page-numbers {
    display: inline-flex; align-items: center; justify-content: center;
    min-width: 38px; height: 38px; padding: 0 10px; text-decoration: none;
    border: 1px solid var(--rule-soft); font-family: var(--font-mono); font-size: 13px;
    color: var(--ink-soft); transition: color .15s, border-color .15s, background .15s;
  }
  .bricks-pagination li a.page-numbers:hover { border-color: var(--accent); color: var(--accent); }
  .bricks-pagination li .page-numbers.current { background: var(--navy); border-color: var(--navy); color: #fff; }
  .bricks-pagination li .page-numbers.dots { border: 0; min-width: auto; padding: 0 4px; }
  /* Prev / Next: Bricks outputs only the arrow glyphs — add the words beside
     them (::before keeps "Next →", ::after keeps "← Previous"). */
  .bricks-pagination li .prev.page-numbers,
  .bricks-pagination li .next.page-numbers {
    min-width: auto; padding: 0 14px; white-space: nowrap;
    letter-spacing: 0.1em; text-transform: uppercase;
  }
  .bricks-pagination li .next.page-numbers::before { content: "Next "; }
  .bricks-pagination li .prev.page-numbers::after  { content: " Previous"; }
  /* Search results: divider + spacing above the full-width pagination row. */
  .search-pagination { border-top: 1px solid var(--rule-soft); padding-top: 24px; margin-top: 4px; }


/* ============================================================
   404 — not found
   ============================================================ */
  .error-page {
    text-align: center;
    padding: clamp(56px, 10vw, 120px) 0 clamp(72px, 12vw, 140px);
    border-bottom: 1px solid var(--rule-soft);
  }
  .error-code {
    font-family: var(--font-display); font-weight: var(--display-weight);
    font-style: var(--display-italic); letter-spacing: var(--display-tracking);
    font-size: clamp(96px, 22vw, 220px); line-height: 0.9; color: var(--ink); margin: 0;
  }
  .error-code .dot { color: var(--gold); }
  .error-page h1 {
    font-family: var(--font-display); font-weight: var(--display-weight);
    font-style: var(--display-italic); letter-spacing: var(--display-tracking);
    font-size: clamp(28px, 4vw, 44px); line-height: 1.05;
    margin: 8px 0 14px; text-wrap: balance;
  }
  .error-page p {
    font-family: var(--font-serif); font-size: 18px; line-height: 1.55;
    color: var(--ink-soft); max-width: 52ch; margin: 0 auto 8px; text-wrap: pretty;
  }
  .error-links {
    display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; margin-top: 32px;
  }
  .error-links a {
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-soft);
    border: 1px solid var(--rule-soft); padding: 10px 18px;
    transition: color .15s, border-color .15s, background .15s;
  }
  .error-links a:hover { color: var(--ink); border-color: var(--ink); }


/* ============================================================
   AD SLOTS — house / programmatic placeholders
   Reserved-height containers so ads never shift the layout (CLS).
   Porting to Bricks: keep the .ad-slot wrapper (label + reserved
   height) and swap the inner .ad-fill for an Ad Inserter block /
   shortcode, or a Query Loop bound to a "sponsor" CPT's featured
   image. Size modifiers map to the slot inventory:
   leaderboard (A) · billboard (B) · rect (C) · listband (D/E).
   ============================================================ */
  .ad-row { padding: 16px 0; }
  /* In-feed ads: tighten the surrounding gap and bracket the ad with a
     divider top and bottom (the section's own border is dropped so the
     lines don't double up). */
  .ad-row:has(.ad--billboard) {
    border-top: 1px solid var(--rule-soft);
    border-bottom: 1px solid var(--rule-soft);
  }
  .section:has(+ .ad-row) { padding-bottom: 24px; border-bottom: 0; }
  .ad-slot {
    display: flex; flex-direction: column; align-items: center; gap: 8px;
    /* width:100% so the slot fills its container even as a grid/flex ITEM —
       otherwise `margin: 0 auto` makes a grid item shrink-wrap to its content
       (e.g. inside Bricks' content grid) instead of spanning the column. */
    width: 100%; margin: 0 auto; text-align: center;
  }
  .ad-inline { margin: 36px auto; }
  /* Ad that closes the article, sitting after the author box — a top rule +
     balanced spacing so it reads as an intentional unit instead of an ad adrift
     in the whitespace before the related section. */
  .ad-row--end, .post-footer + .ad-row {
    border-top: 1px solid var(--rule-soft);
    margin-top: 0; padding-top: 28px;   /* author box already adds ~32px above */
  }
  .ad-slot-label {
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.2em;
    text-transform: uppercase; color: var(--ink-mute);
  }
  .ad-fill {
    width: 100%;
    display: flex; align-items: center; justify-content: center;
    min-height: 90px;
    background:
      repeating-linear-gradient(45deg, color-mix(in oklab, var(--ink) 4%, transparent) 0 1px, transparent 1px 9px),
      var(--bg-elev);
    border: 1px dashed var(--rule-input);
    color: var(--ink-mute);
    font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.14em;
    text-transform: uppercase;
  }
  .ad--leaderboard .ad-fill { max-width: 970px; min-height: 90px; }
  .ad--billboard  .ad-fill { max-width: 970px; min-height: 250px; }
  .ad--rect       .ad-fill { max-width: 300px; min-height: 250px; }
  .ad--listband   .ad-fill { max-width: 728px; min-height: 90px; }
  @media (max-width: 900px) {
    .ad--billboard .ad-fill { max-width: 728px; min-height: 90px; }
  }
  @media (max-width: 600px) {
    .ad--leaderboard .ad-fill { min-height: 100px; }
    .ad--billboard  .ad-fill { max-width: 320px; min-height: 250px; }
    .ad--listband   .ad-fill { max-width: 300px; min-height: 250px; }
  }


/* ============================================================
   CONTACT (full-width form) · ABOUT page · compact page head
   ============================================================ */
  /* Smaller centered page header — used by Contact and About. */
  .page-head--compact { padding: 20px 0 28px; }
  .page-head--compact h1.title { font-size: clamp(26px, 3vw, 38px); }

  /* Native <select> styled to match .field inputs (Contact subject). */
  .field select {
    width: 100%; background: var(--bg); border: 1px solid var(--rule-input);
    padding: 14px 16px; font-family: var(--font-sans); font-size: 15px; color: var(--ink);
    outline: none; border-radius: 0; cursor: pointer;
    -webkit-appearance: none; -moz-appearance: none; appearance: none;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'><path fill='none' stroke='%23888' stroke-width='1.4' d='M1 1.5l4 3 4-3'/></svg>");
    background-repeat: no-repeat; background-position: right 16px center; background-size: 11px;
    transition: border-color .15s ease, background-color .15s ease;
  }
  .field select:focus { border-color: var(--ink); background-color: var(--bg-elev); }

  /* ── Bricks Pro Forms → mirror the prototype's .field form ──────────────────
     Maps Bricks' markup (.form-group wrappers, label, input/select/textarea,
     .bricks-button) onto the contact-form look. Styling ONLY — nothing here
     touches validation, required state, or the data-* attributes. */
  .brxe-brf-pro-forms .form-group { margin-bottom: 18px; }
  .brxe-brf-pro-forms label {
    display: block; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em;
    text-transform: uppercase; color: var(--ink-mute); margin-bottom: 8px;
  }
  .brxe-brf-pro-forms input,
  .brxe-brf-pro-forms textarea,
  .brxe-brf-pro-forms select {
    width: 100%; background: var(--bg); border: 1px solid var(--rule-input);
    padding: 14px 16px; font-family: var(--font-sans); font-size: 15px; color: var(--ink);
    outline: none; border-radius: 0; transition: border-color .15s ease, background .15s ease;
  }
  .brxe-brf-pro-forms input:focus,
  .brxe-brf-pro-forms textarea:focus,
  .brxe-brf-pro-forms select:focus {
    border-color: var(--ink); background-color: var(--bg-elev);
  }
  .brxe-brf-pro-forms textarea {
    min-height: 150px; resize: vertical;
    font-family: var(--font-serif); font-size: 16px; line-height: 1.5;
  }
  /* Custom caret, matching the prototype's native-select treatment. */
  .brxe-brf-pro-forms select {
    -webkit-appearance: none; -moz-appearance: none; appearance: none; cursor: pointer;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'><path fill='none' stroke='%23888' stroke-width='1.4' d='M1 1.5l4 3 4-3'/></svg>");
    background-repeat: no-repeat; background-position: right 16px center; background-size: 11px;
  }
  /* Submit button → matches .submit */
  .brxe-brf-pro-forms .bricks-button {
    display: inline-flex; align-items: center; gap: 10px;
    background: var(--ink); color: var(--bg); border: 0; padding: 16px 28px;
    font-family: var(--font-sans); font-weight: 600; font-size: 13px;
    letter-spacing: 0.12em; text-transform: uppercase; cursor: pointer; width: auto;
    transition: background .2s ease, transform .2s ease;
  }
  .brxe-brf-pro-forms .bricks-button:hover { background: var(--accent); transform: translateY(-1px); }
  /* Wrap two fields (e.g. Name + Email) in a div with class "form-row" to sit
     them side by side; stacks on narrow screens. Inner fields drop their bottom
     margin so the row keeps the same 18px rhythm as single fields. */
  .brxe-brf-pro-forms .form-row {
    display: grid; grid-template-columns: 1fr 1fr; gap: 0 16px; margin-bottom: 18px;
    width: 100%;   /* the wrapper isn't a .form-group, so it needs this to fill
                      the form width like the other fields do (else it shrink-wraps). */
  }
  .brxe-brf-pro-forms .form-row .form-group { margin-bottom: 0; }
  @media (max-width: 540px) {
    .brxe-brf-pro-forms .form-row { grid-template-columns: 1fr; gap: 18px 0; }
  }

  /* Full-width contact form (sidebar removed). */
  .contact-panel--full { margin: 44px 0 64px; }
  .form-required { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-mute); margin: 0 0 22px; }
  .req { color: #C62828; margin-left: 3px; font-weight: 600; }
  :is(html[data-theme="dark"], html.dark) .req { color: #F2998E; }

  /* ABOUT page */
  .about { padding: 48px 0 64px; }
  /* Mission line runs full width — no awkward two-line wrap. */
  body[data-page="about"] .page-head .lede { max-width: none; }
  @media (min-width: 768px) {
    body[data-page="about"] .page-head .lede { white-space: nowrap; }
  }
  .about-block { max-width: 760px; margin: 0 auto 40px; }
  .about-h {
    font-family: var(--font-display); font-weight: var(--display-weight);
    font-style: var(--display-italic); letter-spacing: var(--display-tracking);
    font-size: clamp(24px, 3vw, 34px); color: var(--ink);
    margin: 0 0 18px; padding-bottom: 12px; border-bottom: 2px solid var(--rule); position: relative;
  }
  .about-h::after { content: ""; position: absolute; left: 0; bottom: -2px; width: 56px; height: 2px; background: var(--gold); }
  .about-block > p {
    font-family: var(--font-serif); font-size: 18px; line-height: 1.7; color: var(--ink);
    margin: 0 0 18px; text-wrap: pretty;
  }
  .about-person { display: grid; grid-template-columns: 200px 1fr; gap: 32px; align-items: start; }
  .about-photo { width: 100%; height: auto; display: block; border: 1px solid var(--rule-soft); background: var(--bg-elev); }
  .about-name { font-family: var(--font-display); font-weight: var(--display-weight); font-size: 22px; color: var(--ink); }
  .about-role { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--ink-mute); margin: 3px 0 8px; }
  .about-email { font-family: var(--font-mono); font-size: 13px; color: var(--accent); border-bottom: 1px solid var(--rule-soft); }
  .about-email:hover { border-bottom-color: var(--accent); color: var(--accent); }
  .about-bio > p { font-family: var(--font-serif); font-size: 16px; line-height: 1.65; color: var(--ink-soft); margin: 14px 0; }
  .about-more { font-family: var(--font-mono); font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--accent); }
  .about-more:hover { color: var(--ink); }
  .about-notes { max-width: 760px; margin: 4px auto 0; display: grid; gap: 18px; }
  .about-note { background: var(--bg-elev); border: 1px solid var(--rule-soft); border-left: 3px solid var(--gold); padding: 18px 22px; }
  .about-note h3 { font-family: var(--font-display); font-weight: var(--display-weight); font-size: 16px; color: var(--ink); margin: 0 0 8px; }
  .about-note p { font-family: var(--font-serif); font-size: 14.5px; line-height: 1.6; color: var(--ink-soft); margin: 0; }
  .about-note a { color: var(--accent); border-bottom: 1px solid var(--rule-soft); }
  .about-note a:hover { border-bottom-color: var(--accent); }
  @media (max-width: 640px) {
    .about-person { grid-template-columns: 1fr; gap: 18px; }
    .about-photo { max-width: 220px; }
  }


/* ============================================================
   MOBILE / RESPONSIVE — global small-screen tuning
   Per-component breakpoints live with their sections above;
   this consolidates gutters, chrome, and section rhythm.
   ============================================================ */
  @media (max-width: 900px) {
    .nav-row { gap: 26px; }
  }
  @media (max-width: 640px) {
    :root { --pad: 20px; --pad-lg: 30px; }
    .masthead { padding: 16px 0 12px; }
    .masthead-inner a { width: min(300px, 78%); }
    .nav-row { gap: 16px; height: 50px; }
    .nav-row a { font-size: 12px; letter-spacing: 0.04em; }
    .section { padding: 44px 0; }
    .section-head { margin-bottom: 24px; }
    .page-head { padding: 44px 0 30px; }
    .post-body-wrap { padding: 32px 0 56px; }
    .post-hero { padding-top: 24px; }
    .related { padding: 44px 0 56px; }
    .newsletter { padding: 56px 0; }
    .about { padding: 36px 0 48px; }
  }
  @media (max-width: 560px) {
    .icon-btn > span:not(.icon-sun):not(.icon-moon) { display: none; }
    .icon-btn { padding: 0 9px; gap: 0; }
    .utility-row { gap: 10px; height: 38px; }
    #util-datetime { font-size: 10px; letter-spacing: 0.03em; }
  }


/* ============================================================
   MOBILE NAV MENU — hamburger toggle + full-screen panel.
   The inline nav links and the section subnav collapse into this
   menu under 700px; app.js clones the links in.
   ============================================================ */
  .nav-toggle { display: none; }
  .mobile-menu { display: none; }
  body.menu-open { overflow: hidden; }

  @media (max-width: 700px) {
    .nav-row { justify-content: center; }
    .nav-row a[data-nav] { display: none; }
    nav.subnav { display: none; }
    .nav-toggle {
      display: inline-flex; align-items: center; gap: 10px;
      background: transparent; border: 0; cursor: pointer; padding: 0;
      font-family: var(--font-sans); font-weight: 600; font-size: 13px;
      letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink);
    }
    .nav-toggle-bars { display: inline-flex; flex-direction: column; gap: 4px; width: 20px; }
    .nav-toggle-bars span { height: 2px; background: var(--ink); border-radius: 2px; }
  }

  .mobile-menu.open {
    display: flex; flex-direction: column;
    position: fixed; inset: 0; z-index: 250;
    background: var(--bg); overflow-y: auto;
  }
  .mobile-menu-top {
    display: flex; align-items: center; justify-content: space-between;
    padding: 16px var(--pad);
    border-bottom: 1px solid var(--rule-soft);
  }
  .mobile-menu-top .mm-title {
    font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.2em;
    text-transform: uppercase; color: var(--ink-mute);
  }
  .mm-close {
    width: 40px; height: 40px; display: inline-flex; align-items: center; justify-content: center;
    background: transparent; border: 1px solid var(--rule-soft); border-radius: 50%;
    color: var(--ink); cursor: pointer;
  }
  .mm-close svg { width: 18px; height: 18px; }
  .mobile-menu-panel { padding: 8px var(--pad) 48px; }
  .mm-primary { display: flex; flex-direction: column; }
  .mm-primary a {
    font-family: var(--font-sans); font-weight: 600; font-size: 20px;
    color: var(--ink); padding: 16px 2px; border-bottom: 1px solid var(--rule-soft);
  }
  .mm-primary a[aria-current="page"] { color: var(--accent); }
  .mm-subnav-label {
    font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.18em;
    text-transform: uppercase; color: var(--ink-mute); margin: 26px 0 6px;
  }
  .mm-subnav { display: flex; flex-direction: column; }
  .mm-subnav a {
    font-family: var(--font-sans); font-size: 16px; color: var(--ink-soft);
    padding: 12px 2px; border-bottom: 1px solid var(--rule-soft);
  }
  .mm-primary a:hover, .mm-subnav a:hover { color: var(--primary); }

/* ============================================================
   MAINTENANCE PAGE
   Bricks: build as a "Template" and assign it under
   Bricks → Settings → Maintenance. Do NOT include the site
   Header part — with no theme toggle, no data-theme is ever
   set, so the site's dark rules never apply and the page stays
   light by design.
   No empty elements: the gold rule is a ::before on the
   heading (Bricks strips empty elements).
   ============================================================ */
  .maint-section {
    min-height: 100vh;
    display: flex; align-items: center; justify-content: center;
    padding: 48px 24px; background: var(--bg);
  }
  .maint { width: 100%; max-width: 480px; text-align: center; }
  .maint-logo { width: 100%; max-width: 300px; height: auto; margin: 0 auto 32px; }
  .maint-title {
    font-family: var(--font-display);
    font-size: clamp(28px, 5vw, 40px); font-weight: 700; line-height: 1.15;
    letter-spacing: -0.02em; color: var(--ink); margin: 0 0 16px;
  }
  /* the one brand accent — gold rule, drawn on real content (not an empty element) */
  .maint-title::before {
    content: ""; display: block; width: 56px; height: 3px;
    background: var(--gold); margin: 0 auto 28px;
  }
  .maint-text {
    font-family: var(--font-display);
    font-size: 17px; line-height: 1.6; color: var(--ink-soft);
    margin: 0 auto 28px; max-width: 40ch;
  }
  .maint-contact {
    font-family: var(--font-display);
    font-size: 15px; color: var(--ink-mute); margin: 0 auto;
  }
  .maint-contact a { color: var(--accent); font-weight: 600; text-decoration: none; }
  .maint-contact a:hover { text-decoration: underline; }
  .maint-foot {
    font-family: var(--font-display);
    font-size: 13px; color: var(--ink-mute); margin: 40px 0 0;
  }