/*
 * Self-hosted fonts (2026-09-17). Barlow / Barlow Condensed, SIL OFL —
 * see assets/fonts/README.md. Served from our own site so visitors' browsers
 * never call Google and the CSP needs no third-party font sources. Latin
 * subset only; adding a weight here means adding the file too.
 */
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('/assets/fonts/barlow-400.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
    U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/barlow-600.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
    U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Barlow';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/barlow-700.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
    U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 600;
  font-display: swap;
  src: url('/assets/fonts/barlow-condensed-600.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
    U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 700;
  font-display: swap;
  src: url('/assets/fonts/barlow-condensed-700.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
    U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'Barlow Condensed';
  font-style: normal;
  font-weight: 800;
  font-display: swap;
  src: url('/assets/fonts/barlow-condensed-800.woff2') format('woff2');
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC,
    U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/*
 * site.css — www.sjctfd.com design system
 * Created 2026-09-17.
 *
 * Palette is taken from the department logo (brand/sjct-fire-logo-master.pdf):
 * royal blue lettering, safety-yellow banner, apparatus red. Ryan asked for a
 * modern site with "wow factor" that still reads as a fire department.
 *
 * Rules this file follows (from Ryan's standing instructions):
 *  - CSS is used for light and atmosphere only (glows, gradients, the
 *    reflective chevron striping). No objects are drawn in CSS; anything that
 *    must look like a thing is artwork or photography.
 *  - All motion is disabled under prefers-reduced-motion.
 *  - Content must be fully visible without JavaScript: .reveal only hides
 *    when <html class="js"> is present.
 */

:root {
  --navy-950: #0a1030;
  --navy-900: #101a45;
  --navy-800: #18245c;
  --blue: #37489a;
  --blue-400: #5b6cc4;
  --yellow: #ffe81f;
  --yellow-600: #e8c400;
  --red: #c1343a;
  --red-600: #a4262c;
  --ember: #ff6a2b;
  --ink: #141828;
  --muted: #5b6078;
  --line: #e2e5f0;
  --paper: #ffffff;
  --paper-2: #f4f6fb;
  --ok: #2fbf71;
  --warn: #ffb020;

  --font-display: "Barlow Condensed", "Arial Narrow", "Roboto Condensed", system-ui, sans-serif;
  --font-body: "Barlow", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;

  --wrap: 1200px;
  --radius: 18px;
  --shadow-lg: 0 30px 80px -20px rgba(6, 10, 35, .45);
  --ease: cubic-bezier(.2, .7, .2, 1);
}

*, *::before, *::after { box-sizing: border-box; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  font: 400 1.0625rem/1.65 var(--font-body);
  color: var(--ink);
  background: var(--paper);
  overflow-x: hidden;
}
img { max-width: 100%; height: auto; display: block; }
a { color: var(--blue); text-underline-offset: .18em; }
a:hover { color: var(--red); }
:focus-visible { outline: 3px solid var(--yellow); outline-offset: 3px; border-radius: 4px; }
h1, h2, h3 { font-family: var(--font-display); line-height: 1.02; letter-spacing: .005em; margin: 0 0 .5em; }
p { margin: 0 0 1em; }

.wrap { width: min(var(--wrap), 100% - 32px); margin-inline: auto; }
.skip {
  position: absolute; left: -9999px; top: 8px; z-index: 100;
  background: var(--yellow); color: var(--ink); padding: 10px 16px; border-radius: 8px; font-weight: 700;
}
.skip:focus { left: 16px; }

.eyebrow {
  font: 700 .82rem/1 var(--font-body); letter-spacing: .22em; text-transform: uppercase;
  color: var(--red); margin-bottom: 14px; display: inline-flex; align-items: center; gap: 10px;
}
.eyebrow::before { content: ""; width: 28px; height: 3px; background: currentColor; border-radius: 2px; }

/* ---------- buttons ---------- */
.btn {
  --bg: var(--blue); --fg: #fff;
  display: inline-flex; align-items: center; justify-content: center; gap: .6em;
  padding: .95em 1.5em; border-radius: 999px; border: 0;
  background: var(--bg); color: var(--fg);
  font: 700 1rem/1 var(--font-body); letter-spacing: .02em; text-decoration: none;
  transition: transform .25s var(--ease), box-shadow .25s var(--ease), background .25s;
  box-shadow: 0 10px 24px -12px rgba(0,0,0,.5);
}
.btn:hover { color: var(--fg); transform: translateY(-2px); box-shadow: 0 16px 30px -12px rgba(0,0,0,.55); }
.btn-yellow { --bg: var(--yellow); --fg: var(--navy-900); }
.btn-yellow:hover { --bg: #fff04d; }
.btn-red { --bg: var(--red); }
.btn-ghost { --bg: rgba(255,255,255,.08); box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.45); backdrop-filter: blur(6px); }
.btn-ghost:hover { --bg: rgba(255,255,255,.16); }
.btn .arrow { transition: transform .25s var(--ease); }
.btn:hover .arrow { transform: translateX(4px); }

/* ---------- reflective chevron striping (apparatus rear markings) ---------- */
.chevrons {
  height: 10px;
  background: repeating-linear-gradient(135deg, var(--red) 0 18px, var(--yellow) 18px 36px);
}

/* ---------- utility bar ---------- */
.utility { background: var(--red); color: #fff; font-size: .9rem; position: relative; z-index: 30; }
.utility-inner { display: flex; justify-content: space-between; align-items: center; gap: 12px; min-height: 40px; }
.utility a { color: #fff; }
.utility-911 { font-weight: 800; letter-spacing: .04em; text-transform: uppercase; text-decoration: none; display: inline-flex; align-items: center; gap: 10px; }
.utility-nonemergency { opacity: .92; }
/* Members reach the portal from every page, 2026-09-18: the footer link alone
   was too easy to miss. Kept quiet so it never competes with the 911 line. */
/* The portal link, 2026-09-18.
   Two earlier tries were wrong. An outlined link vanished against the red bar.
   Filling it safety yellow put a THIRD yellow pill in the same corner as
   "Join the Crew" and "Resident services" — too much, and the white lettering
   washed out on it. (That white was a bug as well: `.utility a { color:#fff }`
   is more specific than a bare `.utility-members`, so the navy I set never
   applied. Hence `.utility a.utility-members` below.)

   So: a dark navy placard with white lettering. It carries the masthead's own
   colour rather than a call-to-action colour, which is what it is — a door to
   somewhere else, not an offer. White on navy is about 14:1, and the yellow
   marker ties it to the chevron stripe without shouting. */
.utility a.utility-members {
    display: inline-flex; align-items: center; gap: 8px; text-decoration: none;
    background: var(--navy-900); color: #fff; font-weight: 800; font-size: .76rem;
    letter-spacing: .1em; text-transform: uppercase;
    padding: 6px 15px; border-radius: 999px;
    box-shadow: 0 1px 0 rgba(0,0,0,.3), inset 0 0 0 1px rgba(255,255,255,.14);
}
/* A tilted square in safety yellow — a marker, not a picture of anything.
   NOTE: use --navy-900, not --navy: this stylesheet has no bare --navy, and an
   undefined custom property silently voids the whole declaration. That is why
   the first version of this button rendered transparent. */
.utility a.utility-members::before { content: ""; width: 7px; height: 7px; background: var(--yellow); transform: rotate(45deg); }
.utility a.utility-members:hover { background: #fff; color: var(--navy-900); }
.utility a.utility-members:hover::before { background: var(--red); }
.utility a.utility-members:focus-visible { outline: 3px solid #fff; outline-offset: 2px; }
.pulse { width: 9px; height: 9px; border-radius: 50%; background: #fff; box-shadow: 0 0 0 0 rgba(255,255,255,.7); animation: pulse 2s infinite; }
@keyframes pulse { 70% { box-shadow: 0 0 0 10px rgba(255,255,255,0); } 100% { box-shadow: 0 0 0 0 rgba(255,255,255,0); } }

/* ---------- masthead ---------- */
.masthead {
  position: sticky; top: 0; z-index: 25;
  background: rgba(16, 26, 69, .92);
  backdrop-filter: saturate(1.4) blur(14px);
  border-bottom: 1px solid rgba(255,255,255,.08);
  transition: background .3s, box-shadow .3s;
}
.has-hero .masthead { position: absolute; left: 0; right: 0; top: 40px; background: transparent; border-color: transparent; backdrop-filter: none; }
.has-hero .masthead.is-stuck { position: fixed; top: 0; background: rgba(16, 26, 69, .92); backdrop-filter: saturate(1.4) blur(14px); box-shadow: 0 10px 30px -15px rgba(0,0,0,.6); }
.masthead-inner { display: flex; align-items: center; justify-content: space-between; gap: 24px; min-height: 78px; }
.brand { display: flex; align-items: center; gap: 12px; text-decoration: none; color: #fff; }
.brand img { width: 58px; height: auto; filter: drop-shadow(0 4px 10px rgba(0,0,0,.35)); }
.brand-text { display: flex; flex-direction: column; line-height: 1; }
.brand-top { font: 600 .78rem/1.1 var(--font-body); letter-spacing: .14em; text-transform: uppercase; color: var(--yellow); }
.brand-main { font: 800 1.55rem/1.05 var(--font-display); text-transform: uppercase; letter-spacing: .02em; }
.brand:hover { color: #fff; }

.site-nav { display: flex; align-items: center; gap: 22px; }
.site-nav ul { display: flex; gap: 4px; list-style: none; margin: 0; padding: 0; }
.site-nav ul a {
  display: block; padding: 10px 12px; color: #e6e9f7; text-decoration: none;
  font: 600 .98rem/1 var(--font-body); position: relative;
}
.site-nav ul a::after {
  content: ""; position: absolute; left: 12px; right: 12px; bottom: 2px; height: 2px;
  background: var(--yellow); transform: scaleX(0); transform-origin: left; transition: transform .3s var(--ease);
}
.site-nav ul a:hover, .site-nav ul a[aria-current] { color: #fff; }
.site-nav ul a:hover::after, .site-nav ul a[aria-current]::after { transform: scaleX(1); }
.nav-cta { padding: .8em 1.25em; }
.menu-toggle { display: none; }

/* 1100px, not 960: with six nav items (Open Burning added 2026-09-17) the
   bar wrapped onto two lines at ~1024px. */
@media (max-width: 1100px) {
  .menu-toggle {
    display: inline-flex; align-items: center; gap: 10px; background: rgba(255,255,255,.1);
    border: 1px solid rgba(255,255,255,.25); color: #fff; border-radius: 999px; padding: 10px 16px;
    font: 700 .95rem/1 var(--font-body); cursor: pointer;
  }
  .menu-bars, .menu-bars::before, .menu-bars::after { display: block; width: 18px; height: 2px; background: currentColor; border-radius: 2px; position: relative; }
  .menu-bars::before, .menu-bars::after { content: ""; position: absolute; left: 0; }
  .menu-bars::before { top: -6px; } .menu-bars::after { top: 6px; }
  .site-nav {
    position: absolute; left: 16px; right: 16px; top: calc(100% + 8px);
    flex-direction: column; align-items: stretch; gap: 12px; padding: 16px;
    background: var(--navy-900); border-radius: var(--radius); box-shadow: var(--shadow-lg);
    border: 1px solid rgba(255,255,255,.1);
  }
  .js .site-nav { display: none; }
  .js .site-nav.is-open { display: flex; }
  .site-nav ul { flex-direction: column; }
  .site-nav ul a { padding: 14px 12px; font-size: 1.1rem; }
  .brand-main { font-size: 1.3rem; }
  .brand img { width: 48px; }
}
@media (max-width: 520px) {
  .utility-nonemergency { display: none; }
  /* The sign-in link stays: it is the only route in from a phone. */
  .utility a.utility-members { font-size: .7rem; padding: 4px 11px; letter-spacing: .05em; }
  .brand-top { font-size: .66rem; }
}

/* ---------- hero ---------- */
.hero {
  position: relative; isolation: isolate; overflow: hidden;
  min-height: min(100svh, 940px); color: #fff;
  display: flex; flex-direction: column; justify-content: flex-end;
  padding: 170px 0 48px;
  background: var(--navy-950);
}
.hero-media { position: absolute; inset: 0; z-index: -3; }
.hero-media img {
  width: 100%; height: 100%; object-fit: cover; object-position: 62% 60%;
  filter: saturate(1.15) contrast(1.08) brightness(.9);
  transform: scale(1.08); animation: drift 30s var(--ease) forwards;
}
@keyframes drift { to { transform: scale(1); } }
/* Light and atmosphere: navy wash from the left for legibility, a floor shadow,
   and a slow ember glow rising from the bottom edge. */
.hero::before {
  content: ""; position: absolute; inset: 0; z-index: -2;
  background:
    linear-gradient(90deg, rgba(10,16,48,.96) 0%, rgba(10,16,48,.82) 34%, rgba(10,16,48,.25) 64%, rgba(10,16,48,.1) 100%),
    linear-gradient(0deg, rgba(10,16,48,1) 0%, rgba(10,16,48,.2) 38%, rgba(10,16,48,0) 60%),
    linear-gradient(180deg, rgba(10,16,48,.75) 0%, rgba(10,16,48,0) 26%);
}
.hero::after {
  content: ""; position: absolute; inset: auto -10% -30% -10%; height: 70%; z-index: -1;
  background:
    radial-gradient(40% 60% at 20% 100%, rgba(255,106,43,.45), transparent 70%),
    radial-gradient(35% 50% at 55% 100%, rgba(193,52,58,.35), transparent 70%);
  mix-blend-mode: screen; filter: blur(10px);
  animation: ember 7s ease-in-out infinite alternate;
}
@keyframes ember { from { opacity: .55; transform: translateY(4%); } to { opacity: 1; transform: translateY(0); } }

.hero-copy { max-width: 760px; }
.hero .eyebrow { color: var(--yellow); }
.hero h1 {
  font-size: clamp(3.3rem, 9vw, 7.6rem); font-weight: 800; text-transform: uppercase;
  line-height: .88; letter-spacing: -.005em; margin-bottom: .3em;
  text-shadow: 0 6px 40px rgba(0,0,0,.45);
}
.hero h1 .hl {
  display: block;
  background: linear-gradient(95deg, var(--yellow) 0%, #ffd23a 45%, var(--ember) 100%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
.hero-lede { font-size: clamp(1.1rem, 1.8vw, 1.35rem); max-width: 560px; color: #dfe3f5; margin-bottom: 30px; }
.hero-actions { display: flex; flex-wrap: wrap; gap: 14px; }

.status-rail {
  margin-top: clamp(40px, 7vw, 80px);
  display: grid; grid-template-columns: minmax(230px, 1fr) 3fr; gap: 14px; align-items: stretch;
}
@media (max-width: 1000px) { .status-rail { grid-template-columns: 1fr; } }
.burn-card { justify-content: center; }
.burn-card .status-value { font-size: 1.9rem; }
.burn-more { margin-top: 10px; font-size: .85rem; font-weight: 700; color: var(--yellow); }
.burn-facts { list-style: none; margin: 12px 0 0; padding: 0; display: grid; gap: 5px; }
.burn-facts li {
  font-size: .78rem; color: #c9cee8; padding: 5px 9px; border-radius: 8px;
  background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.12);
}
.burn-facts b { color: #fff; font-weight: 700; }
/* Under a ban or a Red Flag Warning, "no burning" is the whole message. */
.status-ban .burn-facts { display: none; }
.status-card {
  position: relative; display: flex; flex-direction: column; gap: 6px;
  padding: 20px 22px; border-radius: var(--radius);
  background: linear-gradient(180deg, rgba(255,255,255,.12), rgba(255,255,255,.05));
  border: 1px solid rgba(255,255,255,.16);
  backdrop-filter: blur(16px) saturate(1.3);
  color: #fff; text-decoration: none; overflow: hidden;
  transition: transform .3s var(--ease), border-color .3s;
}
a.status-card:hover { color: #fff; transform: translateY(-3px); border-color: rgba(255,255,255,.35); }
.status-card::before {
  content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 4px; background: var(--state, var(--blue-400));
}
.status-open { --state: var(--ok); }
.status-ban { --state: var(--red); }
.status-unknown { --state: var(--warn); }
.status-caution { --state: #ff8a1f; }
.status-weather { --state: var(--yellow); }
.status-kicker { font: 700 .72rem/1 var(--font-body); letter-spacing: .2em; text-transform: uppercase; color: #b9c0e3; }
.status-value { font: 700 1.55rem/1.1 var(--font-display); display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.status-value .temp { font-size: 2.3rem; font-weight: 800; color: var(--yellow); }
.status-detail { font-size: .88rem; color: #c9cee8; }
.wx-row { display: flex; gap: 18px; font-size: .92rem; color: #e6e9f7; flex-wrap: wrap; }
.wx-row b { color: #b9c0e3; font-weight: 600; margin-right: 4px; }
.dot { width: 10px; height: 10px; border-radius: 50%; background: var(--state); box-shadow: 0 0 0 4px color-mix(in srgb, var(--state) 30%, transparent); flex: none; }
.status-ban .dot { animation: blink 1.4s ease-in-out infinite; }
@keyframes blink { 50% { opacity: .35; } }

/* ---------- live weather panel (home hero) ----------
   Graphics are data displays (compass, gauge, graph), not drawn objects.
   Weather "mood" effects live only inside this tile (Ryan, 2026-09-17):
   light and atmosphere via gradients; all motion stops under reduced motion. */
.wx-panel {
  position: relative; overflow: hidden; isolation: isolate;
  border-radius: var(--radius); padding: 18px 22px 0;
  background: linear-gradient(160deg, rgba(24,36,92,.78), rgba(10,16,48,.86));
  border: 1px solid rgba(255,255,255,.16);
  backdrop-filter: blur(16px) saturate(1.3);
  color: #fff;
}
.wx-fx { position: absolute; inset: 0; z-index: -1; pointer-events: none; transition: opacity .8s; }
.mood-clear .wx-fx { background: radial-gradient(60% 90% at 100% 0%, rgba(255,200,60,.28), transparent 60%); }
.mood-rain .wx-fx, .mood-storm .wx-fx {
  background:
    repeating-linear-gradient(105deg, rgba(160,200,255,.0) 0 14px, rgba(160,200,255,.13) 14px 15px, rgba(160,200,255,0) 15px 38px),
    radial-gradient(70% 90% at 100% 0%, rgba(80,140,255,.35), transparent 65%);
  background-size: 160px 160px, auto;
  animation: rainfall .9s linear infinite;
}
@keyframes rainfall { to { background-position: -40px 160px, 0 0; } }
.mood-storm::after {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background: radial-gradient(80% 80% at 70% 10%, rgba(220,230,255,.55), transparent 60%);
  opacity: 0; animation: flash 9s infinite;
}
@keyframes flash { 0%, 88%, 100% { opacity: 0; } 89% { opacity: .9; } 90% { opacity: .1; } 91.5% { opacity: .7; } 94% { opacity: 0; } }
.mood-alert { border-color: rgba(255,90,90,.55); box-shadow: 0 0 0 1px rgba(255,90,90,.25), 0 0 40px -10px rgba(255,60,60,.6); }
.mood-alert .wx-fx { background: radial-gradient(70% 90% at 100% 0%, rgba(255,70,70,.35), transparent 65%); animation: alertpulse 3s ease-in-out infinite; }
@keyframes alertpulse { 50% { opacity: .45; } }

.wx-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 8px; }
.live-badge {
  display: inline-flex; align-items: center; gap: 6px; padding: 3px 9px; border-radius: 999px;
  background: rgba(47,191,113,.18); color: #7ff0b1; font: 800 .68rem/1 var(--font-body); letter-spacing: .18em; text-transform: uppercase;
}
.live-dot { width: 7px; height: 7px; border-radius: 50%; background: #3ee08a; animation: blink 1.6s ease-in-out infinite; }
.is-stale .live-badge { background: rgba(255,176,32,.18); color: #ffd27a; }
.is-stale .live-dot { background: var(--warn); }
.wx-updated { margin-left: auto; font-size: .78rem; color: #aeb5d8; }

.wx-grid { display: grid; grid-template-columns: 1.25fr 1fr 1.05fr; gap: 18px; align-items: center; }
@media (max-width: 760px) { .wx-grid { grid-template-columns: 1fr 1fr; } .wx-now { grid-column: 1 / -1; } }
@media (max-width: 420px) { .wx-grid { grid-template-columns: 1fr; } }

.wx-temp { font: 800 4.4rem/.9 var(--font-display); letter-spacing: -.02em; display: flex; align-items: flex-start; }
.wx-temp .deg { font-size: 1.3rem; margin: .35rem 0 0 .2rem; color: var(--yellow); }
.wx-desc { font: 700 1.35rem/1.1 var(--font-display); text-transform: uppercase; letter-spacing: .04em; margin-top: 4px; }
.wx-feels { font-size: .85rem; color: #c9cee8; min-height: 1.2em; }
.spark { display: block; width: 100%; height: 54px; margin-top: 10px; overflow: visible; }
.spark-line { fill: none; stroke: var(--yellow); stroke-width: 2.2; vector-effect: non-scaling-stroke; stroke-linejoin: round; stroke-linecap: round; }
.js .spark.is-drawing .spark-line { stroke-dasharray: 1; stroke-dashoffset: 1; animation: draw 1.6s var(--ease) forwards; }
@keyframes draw { to { stroke-dashoffset: 0; } }
.spark-legend { display: flex; justify-content: space-between; font-size: .72rem; letter-spacing: .08em; text-transform: uppercase; color: #aeb5d8; margin-top: 2px; }

.wx-wind { text-align: center; }
.compass { width: 100%; max-width: 150px; height: auto; margin: 0 auto; display: block; overflow: visible; }
.compass .ring { fill: rgba(255,255,255,.04); stroke: rgba(255,255,255,.25); stroke-width: 1.2; }
.compass .ticks line { stroke: rgba(255,255,255,.3); stroke-width: 1; }
.compass .card { fill: #b9c0e3; font: 700 9px var(--font-body); text-anchor: middle; }
.compass .needle { fill: var(--yellow); transform-origin: 60px 60px; transition: transform 1.4s var(--ease); filter: drop-shadow(0 0 4px rgba(255,232,31,.7)); }
.compass .needle.is-hidden { opacity: 0; }
.compass .speed { fill: #fff; font: 800 26px var(--font-display); text-anchor: middle; }
.compass .unit { fill: #aeb5d8; font: 700 8px var(--font-body); text-anchor: middle; letter-spacing: .15em; text-transform: uppercase; }
.wx-label { margin: 4px 0 0; font-size: .85rem; line-height: 1.3; color: #c9cee8; }
.wx-label b { display: block; color: #fff; font-size: .95rem; }

.wx-side { display: flex; gap: 14px; align-items: center; }
.rh { text-align: center; flex: none; }
.rh-ring { width: 86px; height: 86px; display: block; }
.rh-track { fill: none; stroke: rgba(255,255,255,.12); stroke-width: 8; }
.rh-arc { fill: none; stroke: #5bc0ff; stroke-width: 8; stroke-linecap: round; transition: stroke-dashoffset 1.4s var(--ease); }
.rh-val { fill: #fff; font: 800 20px var(--font-display); text-anchor: middle; }
.wx-mini-label { font-size: .68rem; letter-spacing: .16em; text-transform: uppercase; color: #aeb5d8; }
.wx-stats { margin: 0; display: grid; gap: 8px; min-width: 0; }
.wx-stats div { display: flex; flex-direction: column; }
.wx-stats dt { font-size: .66rem; letter-spacing: .16em; text-transform: uppercase; color: #aeb5d8; }
.wx-stats dd { margin: 0; font-weight: 700; font-size: .95rem; }
.wx-stats .lightning.is-active dd { color: var(--yellow); }
.wx-stats .lightning.is-active dt::after { content: " ⚡"; }

.wx-alerts {
  margin: 16px -22px 0; padding: 12px 22px;
  border-top: 1px solid rgba(255,255,255,.12); background: rgba(0,0,0,.18);
  display: flex; flex-direction: column; gap: 6px;
}
.alert-chip { display: flex; align-items: center; gap: 10px; font-size: .88rem; color: #dfe3f5; text-decoration: none; }
.alert-chip.ok { --state: var(--ok); }
.alert-chip.bad { --state: var(--red); color: #fff; }
.alert-chip.bad strong { color: #ff9b9b; text-transform: uppercase; letter-spacing: .04em; }
.alert-chip.bad span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.alert-chip.bad .dot { animation: blink 1.2s ease-in-out infinite; }
.is-unavailable .wx-grid { opacity: .45; }

/* ---------- alert banners ---------- */
.alert { padding: 14px 0; font-size: .98rem; }
.alert-info { background: var(--blue); color: #fff; }
.alert-warn { background: var(--yellow); color: var(--ink); }
.alert-ban { background: var(--red-600); color: #fff; }
.alert a { color: inherit; font-weight: 700; }

/* ---------- sections ---------- */
.section { padding: clamp(72px, 10vw, 130px) 0; position: relative; }
.section-head { display: flex; justify-content: space-between; align-items: end; gap: 24px; margin-bottom: 44px; flex-wrap: wrap; }
.section-head h2, .section h2.big { font-size: clamp(2.4rem, 5vw, 4rem); text-transform: uppercase; font-weight: 800; margin: 0; color: var(--navy-900); }
.section-head p { max-width: 460px; color: var(--muted); margin: 0; }
.section-dark { background: var(--navy-900); color: #e6e9f7; overflow: hidden; }
/* `.section h2.big` (0,2,1) out-specifies both `.section-dark h2` and `.on-dark`,
   so a big heading on a dark band rendered navy-on-navy — invisible. The home
   page's "Neighbors protecting neighbors" had been unreadable since launch;
   found 2026-09-18 while building the history page. Matching specificity here,
   and later in the file, so dark bands always win. */
.section-dark h2, .section-dark h3 { color: #fff; }
.section-dark h2.big, .section-dark .on-dark { color: #fff; }
.section-tint { background: var(--paper-2); }

/* Task tiles: numbered, no icons (no drawn objects). */
.tasks { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; }
@media (max-width: 1000px) { .tasks { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 560px) { .tasks { grid-template-columns: 1fr; } }
.task {
  --accent: var(--blue);
  position: relative; display: flex; flex-direction: column; min-height: 270px;
  padding: 28px 26px; border-radius: var(--radius); text-decoration: none; color: var(--ink);
  background: var(--paper); border: 1px solid var(--line); overflow: hidden;
  transition: transform .35s var(--ease), box-shadow .35s var(--ease), border-color .35s;
}
.task::after {
  content: ""; position: absolute; inset: auto 0 0 0; height: 4px; background: var(--accent);
  transform: scaleX(.18); transform-origin: left; transition: transform .45s var(--ease);
}
.task:hover { transform: translateY(-6px); box-shadow: var(--shadow-lg); border-color: transparent; color: var(--ink); }
.task:hover::after { transform: scaleX(1); }
.task-num { font: 800 3.4rem/1 var(--font-display); color: transparent; -webkit-text-stroke: 1.5px var(--accent); margin-bottom: auto; }
.task h3 { font-size: 1.85rem; text-transform: uppercase; margin: 22px 0 8px; color: var(--navy-900); }
.task p { color: var(--muted); margin: 0 0 18px; font-size: .98rem; }
.task-go { font-weight: 700; color: var(--accent); display: inline-flex; gap: 8px; }
.task:nth-child(2) { --accent: var(--red); }
.task:nth-child(3) { --accent: #d49b00; }
.task:nth-child(4) { --accent: var(--navy-800); }

/* Heritage band */
.heritage { display: grid; grid-template-columns: 1.05fr 1fr; gap: clamp(32px, 6vw, 90px); align-items: center; }
@media (max-width: 900px) { .heritage { grid-template-columns: 1fr; } }
.years {
  font: 800 clamp(9rem, 24vw, 19rem)/.78 var(--font-display); letter-spacing: -.03em;
  background: linear-gradient(180deg, var(--yellow) 10%, var(--ember) 95%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
  filter: drop-shadow(0 20px 60px rgba(255,106,43,.25));
}
.years-label { font: 700 1.5rem/1.1 var(--font-display); text-transform: uppercase; letter-spacing: .12em; color: #fff; margin-top: 12px; }
.section-dark::before {
  content: ""; position: absolute; width: 900px; height: 900px; left: -300px; top: -200px; pointer-events: none;
  background: radial-gradient(circle, rgba(55,72,154,.55), transparent 60%);
}
.timeline { list-style: none; margin: 28px 0 32px; padding: 0; border-left: 2px solid rgba(255,255,255,.15); }
.timeline li { position: relative; padding: 0 0 22px 26px; }
.timeline li::before {
  content: ""; position: absolute; left: -7px; top: 6px; width: 12px; height: 12px; border-radius: 50%;
  background: var(--yellow); box-shadow: 0 0 0 4px rgba(255,232,31,.18);
}
.timeline b { display: block; font: 800 1.35rem/1.1 var(--font-display); color: var(--yellow); letter-spacing: .04em; }

/* Apparatus */
.rig-grid { display: grid; grid-template-columns: 1.5fr 1fr 1fr; grid-auto-rows: minmax(220px, auto); gap: 18px; }
.rig-grid .rig:first-child { grid-row: span 2; }
/* Four rigs: the feature card takes two rows, so the last card spans two columns to close the gap. */
.rig-grid .rig:nth-child(4):last-child { grid-column: span 2; }
@media (max-width: 900px) { .rig-grid { grid-template-columns: 1fr 1fr; } .rig-grid .rig:first-child { grid-column: span 2; grid-row: auto; min-height: 320px; } .rig-grid .rig:nth-child(4):last-child { grid-column: auto; } }
@media (max-width: 560px) { .rig-grid { grid-template-columns: 1fr; } .rig-grid .rig:first-child { grid-column: auto; } }
.rig {
  position: relative; border-radius: var(--radius); overflow: hidden; color: #fff; min-height: 220px;
  background: linear-gradient(145deg, var(--navy-800), var(--navy-950));
  display: flex; flex-direction: column; justify-content: flex-end;
  transition: transform .35s var(--ease);
}
.rig:hover { transform: translateY(-4px); }
.rig-media { position: absolute; inset: 0; }
.rig-media img { width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--ease); }
.rig:hover .rig-media img { transform: scale(1.05); }
.rig-media::after { content: ""; position: absolute; inset: 0; background: linear-gradient(0deg, rgba(10,16,48,.95) 0%, rgba(10,16,48,.1) 60%); }
.unit-numeral {
  position: absolute; right: -8px; top: -18px;
  font: 800 8.5rem/1 var(--font-display); color: transparent; -webkit-text-stroke: 1.5px rgba(255,232,31,.35);
}
.rig-body { position: relative; padding: 24px; }
.rig-unit { font: 700 .75rem/1 var(--font-body); letter-spacing: .2em; text-transform: uppercase; color: var(--yellow); margin-bottom: 8px; }
.rig h3 { font-size: 2rem; text-transform: uppercase; margin-bottom: 6px; }
.rig p { color: #c9cee8; margin: 0; font-size: .95rem; }
.rig .rig-date { margin-top: 8px; font-size: .82rem; letter-spacing: .06em; text-transform: uppercase; color: var(--yellow); }

/* Fleet lineup photo and retired-apparatus timeline (About page) */
.fleet { margin: 0 0 22px; border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow-lg); }
.fleet img { width: 100%; }
.retired-head { font-size: 1.9rem; text-transform: uppercase; color: var(--navy-900); margin-top: 48px; }
.timeline-light { border-left-color: var(--line); }
.timeline-light li::before { background: var(--red); box-shadow: 0 0 0 4px rgba(193,52,58,.15); }
.timeline-light b { color: var(--navy-900); }
.photo-credit { font-size: .85rem; color: var(--muted); margin-top: 16px; }

/* Join band */
.join {
  position: relative; overflow: hidden; border-radius: 28px;
  background: var(--yellow); color: var(--navy-900);
  padding: clamp(40px, 7vw, 90px);
  display: grid; grid-template-columns: 1.4fr 1fr; gap: 40px; align-items: center;
}
.join::before {
  content: ""; position: absolute; right: -80px; top: -80px; bottom: -80px; width: 45%;
  background: repeating-linear-gradient(135deg, rgba(193,52,58,.95) 0 34px, transparent 34px 68px);
  transform: skewX(-12deg); opacity: .9;
}
.join > * { position: relative; }
.join h2 { font-size: clamp(3rem, 7vw, 5.6rem); text-transform: uppercase; font-weight: 800; line-height: .9; margin-bottom: .3em; }
.join p { font-size: 1.15rem; max-width: 520px; }
.join-panel { background: var(--navy-900); color: #fff; border-radius: var(--radius); padding: 28px; box-shadow: var(--shadow-lg); }
.join-panel h3 { color: var(--yellow); font-size: 1.6rem; text-transform: uppercase; }
.join-panel ul { margin: 0 0 22px; padding-left: 1.1em; color: #dfe3f5; }
@media (max-width: 900px) { .join { grid-template-columns: 1fr; } .join::before { width: 30%; opacity: .5; } }

/* Upcoming events (from the department calendar) */
.event-list { display: grid; gap: 14px; }
.event { display: flex; gap: 18px; align-items: flex-start; background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius); padding: 20px 22px; }
.event-date { flex: none; width: 66px; text-align: center; border-radius: 12px; overflow: hidden; border: 1px solid var(--line); }
.event-mon { display: block; background: var(--red); color: #fff; font: 800 .72rem/1 var(--font-body); letter-spacing: .12em; padding: 6px 0; }
.event-day { display: block; font: 800 1.9rem/1 var(--font-display); color: var(--navy-900); padding: 6px 0 8px; }
.event-body h3 { font-size: 1.6rem; text-transform: uppercase; color: var(--navy-900); margin: 0 0 4px; }
.event-when { font-weight: 700; color: var(--ink); margin: 0 0 8px; }
.event-body p { color: var(--muted); margin: 0 0 8px; }
/* Month headings appear only when events span more than one month. */
.event-month { font-size: 1.35rem; text-transform: uppercase; color: var(--muted); margin: 22px 0 10px; letter-spacing: .06em; }
.event-month:first-child { margin-top: 0; }
.event-where-line { margin: 0 0 12px !important; }
.event-add-line { margin: 0 !important; }
.event-where { font-weight: 700; text-decoration: none; }
.event-add { display: inline-block; font-weight: 700; text-decoration: none; padding: 9px 16px; border-radius: 999px; background: var(--paper-2); border: 1px solid var(--line); font-size: .9rem; }
.event-add:hover { background: var(--navy-900); border-color: var(--navy-900); color: #fff; }
.next-event .event { border-color: rgba(55,72,154,.35); }
.event-where::before { content: ""; }

/* News */
.news-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 18px; }
.news-card { background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius); padding: 26px; transition: box-shadow .3s, transform .3s var(--ease); }
.news-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-3px); }
.news-card time { font: 700 .75rem/1 var(--font-body); letter-spacing: .16em; text-transform: uppercase; color: var(--red); }
.news-card h3 { font-size: 1.6rem; margin: 12px 0 8px; color: var(--navy-900); }
.news-card h3 a { color: inherit; text-decoration: none; }
.news-card p { color: var(--muted); margin: 0; }
.empty { color: var(--muted); font-style: italic; }
.social { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 18px; }
.social-icon {
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px; border-radius: 50%;
  border: 1px solid rgba(255,255,255,.25); color: #fff;
  transition: background .2s, color .2s, border-color .2s, transform .2s var(--ease);
}
.social-icon:hover { background: var(--yellow); border-color: var(--yellow); color: var(--navy-900); transform: translateY(-2px); }
.follow-head { margin-top: 26px; }
.site-footer .social { gap: 8px; flex-wrap: nowrap; }
.site-footer .social-icon { width: 38px; height: 38px; flex: none; }
.site-footer .social-icon svg { width: 18px; height: 18px; }
/* Phone numbers must not break across lines ("(269) 429-" / "4100"). */
a[href^="tel:"] { white-space: nowrap; }

/* ---------- interior pages ---------- */
.page-head {
  position: relative; overflow: hidden; color: #fff;
  background:
    radial-gradient(60% 120% at 85% 0%, rgba(91,108,196,.55), transparent 60%),
    radial-gradient(50% 80% at 10% 120%, rgba(255,106,43,.28), transparent 60%),
    var(--navy-900);
  padding: clamp(60px, 9vw, 110px) 0 0;
}
.page-head .wrap { padding-bottom: clamp(44px, 6vw, 70px); }
.page-head .eyebrow { color: var(--yellow); }
.page-head h1 { font-size: clamp(3rem, 8vw, 6rem); text-transform: uppercase; font-weight: 800; line-height: .9; margin-bottom: .25em; }
.page-head .lede { font-size: 1.25rem; color: #dfe3f5; max-width: 640px; margin: 0; }

.prose { max-width: 760px; }
.prose h2 { font-size: clamp(2rem, 4vw, 2.8rem); text-transform: uppercase; color: var(--navy-900); margin-top: 1.4em; }
.prose h3 { font-size: 1.6rem; color: var(--navy-900); margin-top: 1.2em; }
.prose h4 { font: 700 1.05rem/1.3 var(--font-body); color: var(--navy-900); margin: 1.4em 0 .5em; }
.prose ul { padding-left: 1.2em; }
.prose li { margin-bottom: .45em; }
.split { display: grid; grid-template-columns: 280px 1fr; gap: clamp(28px, 5vw, 70px); align-items: start; }
@media (max-width: 860px) { .split { grid-template-columns: 1fr; } }
.toc { position: sticky; top: 110px; display: flex; flex-direction: column; gap: 4px; border-left: 2px solid var(--line); }
.toc a { padding: 8px 16px; color: var(--muted); text-decoration: none; font-weight: 600; margin-left: -2px; border-left: 2px solid transparent; }
.toc a:hover { color: var(--navy-900); border-color: var(--red); }
@media (max-width: 860px) { .toc { position: static; flex-direction: row; flex-wrap: wrap; border: 0; } .toc a { border: 1px solid var(--line); border-radius: 999px; margin: 0; } }

.card-block {
  border: 1px solid var(--line); border-radius: var(--radius); padding: clamp(24px, 4vw, 40px);
  margin-bottom: 22px; background: var(--paper); scroll-margin-top: 110px;
}
.card-block h2 { margin-top: 0; }
.card-block .tag {
  display: inline-block; font: 700 .72rem/1 var(--font-body); letter-spacing: .16em; text-transform: uppercase;
  padding: 7px 10px; border-radius: 999px; background: rgba(55,72,154,.1); color: var(--blue); margin-bottom: 14px;
}
.card-block .tag.soon { background: rgba(255,176,32,.18); color: #8a5a00; }
.callout {
  display: flex; gap: 16px; align-items: center; justify-content: space-between; flex-wrap: wrap;
  padding: 18px 22px; border-radius: 14px; background: var(--paper-2); margin-top: 18px;
}
.callout strong { font-family: var(--font-display); font-size: 1.35rem; color: var(--navy-900); }

.checklist { list-style: none; padding: 0 !important; display: grid; gap: 10px; }
.checklist li {
  position: relative; padding: 14px 16px 14px 48px; background: var(--paper-2); border-radius: 12px; margin: 0 !important;
}
.checklist li::before {
  content: ""; position: absolute; left: 16px; top: 17px; width: 18px; height: 18px; border-radius: 5px;
  background: var(--blue); box-shadow: inset 0 0 0 5px var(--blue), inset 0 0 0 9px var(--yellow);
}

/* Numbered procedure list (Knox box ordering on /services/). Counter-driven so the
   numerals stay in step when steps are added or removed; the <h4> carries the step
   title so the list still reads as a list to a screen reader. */
.steps { list-style: none; padding: 0 !important; counter-reset: step; display: grid; gap: 14px; }
.steps > li {
  position: relative; counter-increment: step; margin: 0 !important;
  padding: 20px 22px 20px 74px; background: var(--paper-2); border-radius: 14px;
}
.steps > li::before {
  content: counter(step); position: absolute; left: 22px; top: 18px;
  width: 36px; height: 36px; border-radius: 50%; background: var(--navy-900); color: #fff;
  font: 800 1.05rem/36px var(--font-display); text-align: center;
}
.steps > li > h4 { margin: 0 0 6px !important; font-size: 1.15rem; }
.steps > li > p { margin: 0; }
.steps > li + li { margin-top: 0; }
@media (max-width: 560px) { .steps > li { padding: 60px 18px 18px; } .steps > li::before { left: 18px; top: 16px; } }

/* Opening paragraph of a prose page — one size up from body text, so the page
   states its purpose before the headings start. */
.prose .intro-para { font-size: 1.15rem; color: var(--navy-900); }

/* Standing notice at the top of /services/: we are volunteers and cannot promise
   a time. It sits above every service on the page so the caveat is stated once,
   properly, rather than four times in half-sentences. */
.volunteer-note {
  background: #fff7db; border-left: 6px solid var(--yellow); border-radius: 12px;
  padding: 18px 22px; margin-bottom: 26px;
}
.volunteer-note p { margin: 0; }
.volunteer-note strong { color: var(--navy-900); }

/* Quiet aside under a block — supply caveats, exceptions. Not a callout: it must not
   compete with the call-to-action directly above it. */
.hint-note { color: var(--muted); font-size: .93rem; border-left: 3px solid var(--line); padding-left: 14px; }

/* ---------------------------------------------------------------- annual report
   /annual-report/ — a closed year set down as a matter of record. Bar sizes come
   from h-NN / pct-NN classes, never a style attribute: the site's CSP is
   style-src 'self' with no 'unsafe-inline'. */
.prose-wide { max-width: 900px; }

.ann-headline { text-align: center; padding: clamp(10px, 3vw, 30px) 0; }
.ann-big {
  font: 800 clamp(5rem, 18vw, 11rem)/.85 var(--font-display); color: var(--navy-900);
  margin: 0; letter-spacing: -.02em;
}
.ann-big-cap {
  font: 700 .82rem/1 var(--font-body); letter-spacing: .24em; text-transform: uppercase;
  color: var(--red); margin: 14px 0 0;
}
.ann-lede { max-width: 560px; margin: 22px auto 0; font-size: 1.12rem; color: var(--muted); }

.ann-facts { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; margin-top: 44px; }
@media (max-width: 720px) { .ann-facts { grid-template-columns: 1fr; } }
.ann-fact { padding: 22px 18px; background: var(--paper-2); border-radius: 14px; }
.ann-fact-n { display: block; font: 800 2.6rem/1 var(--font-display); color: var(--navy-900); }
.ann-fact-c { display: block; margin-top: 8px; color: var(--muted); font-size: .95rem; }

/* Month columns. align-items:end so every bar grows from the same baseline. */
.ann-months {
  list-style: none; margin: 0; padding: 0;
  display: grid; grid-template-columns: repeat(12, 1fr); gap: clamp(4px, 1vw, 12px);
}
.ann-col { display: grid; grid-template-rows: auto 190px auto; justify-items: center; gap: 8px; }
.ann-col-n { font: 800 1rem/1 var(--font-display); color: var(--navy-900); }
.ann-col-m {
  font: 700 .7rem/1 var(--font-body); letter-spacing: .1em; text-transform: uppercase; color: var(--muted);
}
.ann-bar {
  display: block; width: 100%; max-width: 46px; align-self: end; border-radius: 6px 6px 0 0;
  background: linear-gradient(180deg, var(--blue), var(--navy-900));
}
.ann-col.is-top .ann-bar { background: linear-gradient(180deg, #ffe81f, #e0b800); }
.ann-col.is-top .ann-col-n { color: var(--red); }
@media (max-width: 620px) {
  .ann-months { grid-template-columns: repeat(6, 1fr); row-gap: 20px; }
  .ann-col { grid-template-rows: auto 120px auto; }
}
.ann-bar.h-5 { height: 5%; }
.ann-bar.h-10 { height: 10%; }
.ann-bar.h-15 { height: 15%; }
.ann-bar.h-20 { height: 20%; }
.ann-bar.h-25 { height: 25%; }
.ann-bar.h-30 { height: 30%; }
.ann-bar.h-35 { height: 35%; }
.ann-bar.h-40 { height: 40%; }
.ann-bar.h-45 { height: 45%; }
.ann-bar.h-50 { height: 50%; }
.ann-bar.h-55 { height: 55%; }
.ann-bar.h-60 { height: 60%; }
.ann-bar.h-65 { height: 65%; }
.ann-bar.h-70 { height: 70%; }
.ann-bar.h-75 { height: 75%; }
.ann-bar.h-80 { height: 80%; }
.ann-bar.h-85 { height: 85%; }
.ann-bar.h-90 { height: 90%; }
.ann-bar.h-95 { height: 95%; }
.ann-bar.h-100 { height: 100%; }

.ann-aid { display: flex; gap: 22px; align-items: center; flex-wrap: wrap; }
.ann-aid-n {
  padding: 20px 28px; border-radius: 14px; background: var(--paper-2); text-align: center;
  font: 700 .78rem/1 var(--font-body); letter-spacing: .16em; text-transform: uppercase; color: var(--muted);
}
.ann-aid-n span { display: block; font: 800 3rem/1 var(--font-display); color: var(--navy-900); letter-spacing: 0; margin-bottom: 8px; }
.ann-partners { list-style: none; margin: 0; padding: 0; display: flex; flex-wrap: wrap; gap: 8px; flex: 1 1 260px; }
.ann-partners li {
  padding: 8px 14px; border-radius: 999px; border: 1.5px solid var(--line);
  font-size: .9rem; font-weight: 600; color: var(--navy-900);
}

/* Printing this page is how the township board gets its copy, so make the
   print view the report rather than a screenshot of a website. */
@media print {
  .site-header, .utility, .jump-nav, .site-footer, .chevrons, .skip { display: none !important; }
  .section, .section-tint, .section-dark { background: #fff !important; color: #000 !important; padding: 12px 0 !important; break-inside: avoid; }
  .section-dark .on-dark, .section-dark h2 { color: #000 !important; }
  .page-head { background: #fff !important; color: #000 !important; padding: 0 0 12px !important; }
  .page-head h1, .page-head .lede, .page-head .eyebrow { color: #000 !important; }
  .ann-big { font-size: 5rem; }
  .ann-bar { background: #333 !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .ann-col.is-top .ann-bar { background: #888 !important; }
  .stat-bar { background: #e5e5e5 !important; -webkit-print-color-adjust: exact; print-color-adjust: exact; }
  .stat-bar i { background: #333 !important; }
  a[href^="/"]::after, a[href^="http"]::after { content: ""; }
}


.contact-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; }
@media (max-width: 860px) { .contact-grid { grid-template-columns: 1fr; } }
.contact-grid-4 { grid-template-columns: repeat(2, 1fr); }
@media (min-width: 1100px) { .contact-grid-4 { grid-template-columns: repeat(4, 1fr); } }
@media (max-width: 860px) { .contact-grid-4 { grid-template-columns: 1fr; } }
.contact-card { padding: 30px; overflow-wrap: anywhere; border-radius: var(--radius); background: var(--paper-2); }
.contact-card.emergency { background: var(--red); color: #fff; }
/* The email card is the one we want people to use: Station #1 is not staffed and
   a phone message can sit for a week (Ryan, 2026-09-18). It gets the yellow edge
   so the eye lands on it before the phone number below. */
.contact-card.best { background: var(--navy-900); color: #fff; box-shadow: inset 0 0 0 3px var(--yellow); }
.contact-card.best h2 { color: var(--yellow); }
.contact-card.best a { color: #fff; }
.footer-note { color: rgba(255,255,255,.62); font-size: .85rem; margin-top: 10px; }
.contact-card.emergency a { color: #fff; }
.contact-card .big { font: 800 2.6rem/1 var(--font-display); display: block; margin: 8px 0 6px; text-decoration: none; }
.contact-card h2 { font-size: 1rem; letter-spacing: .18em; text-transform: uppercase; font-family: var(--font-body); margin: 0; }

.memorial {
  border-radius: 28px; padding: clamp(32px, 6vw, 70px); color: #fff; text-align: center;
  background: radial-gradient(70% 90% at 50% 0%, rgba(255,232,31,.14), transparent 60%), var(--navy-950);
}
.memorial .eyebrow { color: var(--yellow); justify-content: center; }
.memorial h2 { font-size: clamp(2.6rem, 6vw, 4.4rem); text-transform: uppercase; color: #fff; }
.memorial p { max-width: 620px; margin-inline: auto; color: #dfe3f5; font-size: 1.15rem; }
.memorial .dates { font: 700 1.4rem/1 var(--font-display); letter-spacing: .2em; color: var(--yellow); }

.tool-list { list-style: none; padding: 0; display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); }
.tool-link { display: flex; flex-direction: column; gap: 4px; padding: 22px; border-radius: 14px; background: var(--paper-2); text-decoration: none; border: 1px solid var(--line); }
.tool-link strong { font: 700 1.5rem/1.1 var(--font-display); color: var(--navy-900); }
.tool-link span { color: var(--muted); }
.tool-link:hover { border-color: var(--blue); }

/* ---------- footer ---------- */
.site-footer { background: var(--navy-950); color: #c9cee8; font-size: .95rem; }
.footer-grid { display: grid; grid-template-columns: 1.3fr 1fr 1fr 1fr; gap: 40px; padding: 64px 0 40px; }
@media (max-width: 900px) { .footer-grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .footer-grid { grid-template-columns: 1fr; } }
.footer-brand img { width: 180px; margin-bottom: 14px; }
.site-footer h2 { font: 700 .78rem/1 var(--font-body); letter-spacing: .2em; text-transform: uppercase; color: var(--yellow); margin-bottom: 16px; }
.site-footer a { color: #fff; }
.site-footer a:hover { color: var(--yellow); }
.footer-links { list-style: none; padding: 0; margin: 0; display: grid; gap: 8px; }
.footer-links a { text-decoration: none; }
.footer-base { display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; padding: 22px 0 30px; border-top: 1px solid rgba(255,255,255,.1); font-size: .85rem; color: #8f96bb; }
.footer-base p { margin: 0; }

/* ---------- scroll reveal ---------- */
.js .reveal { opacity: 0; transform: translateY(26px); transition: opacity .8s var(--ease), transform .8s var(--ease); }
.js .reveal.is-in { opacity: 1; transform: none; }

/* ---------- burning status (services page) ---------- */
.burn-panel {
  position: relative; overflow: hidden; border-radius: var(--radius); padding: 24px 26px 20px;
  background: var(--navy-900); color: #fff; margin: 0 0 22px;
  border-left: 6px solid var(--state, var(--blue-400));
}
.burn-panel .status-kicker { margin: 0 0 8px; display: block; }
.burn-label { font: 800 2.2rem/1 var(--font-display); display: flex; align-items: center; gap: 12px; margin: 0 0 12px; text-transform: uppercase; }
.burn-reasons { margin: 0 0 8px; padding-left: 1.1em; color: #dfe3f5; }
.burn-basis { font-size: .85rem; color: var(--muted); margin: 6px 0 0; }
.burn-panel .burn-basis { color: #aeb5d8; }
.rules { width: 100%; border-collapse: collapse; margin: 8px 0 18px; font-size: .98rem; }
.rules th, .rules td { text-align: left; vertical-align: top; padding: 12px 14px; border-bottom: 1px solid var(--line); }
.rules thead th { font: 700 .75rem/1 var(--font-body); letter-spacing: .16em; text-transform: uppercase; color: var(--muted); }
.rules caption { text-align: left; font: 700 1.2rem/1.2 var(--font-display); color: var(--navy-900); padding-bottom: 6px; }
.firewx th { width: 38%; color: var(--muted); font-weight: 600; }
.pill { display: inline-block; white-space: nowrap; padding: 6px 10px; border-radius: 999px; font-weight: 700; font-size: .82rem; color: #fff; }
.pill-ban { background: var(--red); }
.pill-caution { background: #d86a00; }
.pill-open { background: #1f8f53; }

/* ---------- per-community status (Open Burning) ---------- */
.community-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin: 0 0 6px; }
@media (max-width: 760px) { .community-grid { grid-template-columns: 1fr; } }
.community { border: 1px solid var(--line); border-left: 6px solid var(--state, var(--blue)); border-radius: 14px; padding: 18px 20px; }
.community.status-open { --state: #1f8f53; }
.community.status-caution { --state: #d86a00; }
.community.status-ban { --state: var(--red); }
.community.status-unknown { --state: var(--warn); }
.community-name { font: 700 .72rem/1 var(--font-body); letter-spacing: .16em; text-transform: uppercase; color: var(--muted); margin: 0 0 8px; }
.community-label { font: 800 1.35rem/1.15 var(--font-display); text-transform: uppercase; color: var(--navy-900); display: flex; align-items: center; gap: 10px; margin: 0 0 10px; }
.community-label .dot { background: var(--state); box-shadow: 0 0 0 4px color-mix(in srgb, var(--state) 25%, transparent); }
.community-reasons { margin: 0; padding-left: 1.1em; color: var(--muted); font-size: .93rem; }
.community-reasons li { margin-bottom: .35em; }
.community-note { font-size: .78rem; color: var(--muted); margin: 10px 0 0; font-style: italic; }
.community-foot { color: var(--muted); font-size: .9rem; margin: 10px 0 0; }

/* ---------- "What's allowed" quick reference (Open Burning) ---------- */
.allowed { margin: 0 0 26px; scroll-margin-top: 140px; }
.allowed > h2 { font-size: clamp(2rem, 4vw, 2.8rem); text-transform: uppercase; color: var(--navy-900); margin: 0 0 10px; }
.allowed-where { color: var(--ink); background: var(--paper-2); border-left: 5px solid var(--blue); border-radius: 10px; padding: 16px 18px; margin: 0 0 18px; }
.allowed-where-head { font-size: 1.5rem; text-transform: uppercase; color: var(--navy-900); margin: 26px 0 4px; }
.allowed-sub { color: var(--muted); margin: 0 0 14px; font-size: .95rem; }
.allowed-note { color: var(--muted); font-size: .9rem; margin: 12px 0 0; }
.allowed-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
@media (max-width: 900px) { .allowed-grid { grid-template-columns: 1fr; } }
.allow { border: 1px solid var(--line); border-radius: var(--radius); padding: 22px 22px 18px; background: var(--paper); border-top: 5px solid var(--state, var(--blue)); }
.allow-yes { --state: #1f8f53; }
.allow-permit { --state: #d86a00; }
.allow-no { --state: var(--red); }
.allow-tag { font: 800 .72rem/1 var(--font-body); letter-spacing: .16em; text-transform: uppercase; color: var(--state); margin: 0 0 8px; }
.allow h3 { font-size: 1.45rem; text-transform: uppercase; color: var(--navy-900); margin: 0 0 10px; }
.allow ul { margin: 0; padding-left: 1.1em; color: var(--muted); }
.allow li { margin-bottom: .45em; font-size: .95rem; }
.allow strong { color: var(--ink); }
.allow-more { margin: 12px 0 0; font-weight: 700; }

/* ---------- prominent page notice (Open Burning) ---------- */
.notice {
  position: relative; overflow: hidden; border-radius: var(--radius);
  padding: clamp(24px, 4vw, 38px) clamp(22px, 4vw, 40px);
  margin: 0 0 26px; scroll-margin-top: 140px;
}
.notice-strong { background: var(--navy-900); color: #fff; border-left: 8px solid var(--red); }
.notice-strong::after {
  content: ""; position: absolute; right: -60px; top: -40px; bottom: -40px; width: 180px;
  background: repeating-linear-gradient(135deg, rgba(193,52,58,.85) 0 22px, rgba(255,232,31,.85) 22px 44px);
  transform: skewX(-12deg); opacity: .5; pointer-events: none;
}
.notice-kicker {
  font: 800 .74rem/1 var(--font-body); letter-spacing: .22em; text-transform: uppercase;
  color: var(--yellow); margin: 0 0 10px;
}
.notice h2 { font-size: clamp(1.8rem, 3.6vw, 2.8rem); text-transform: uppercase; color: #fff; margin: 0 0 12px; max-width: 18ch; }
.notice p { color: #dfe3f5; margin: 0 0 12px; max-width: 62ch; position: relative; }
.notice p:last-child { margin-bottom: 0; }
.notice strong { color: #fff; }
/* The chevron flash ran across the text on phones; decoration only, so drop it. */
@media (max-width: 700px) { .notice-strong::after { display: none; } .notice h2 { max-width: none; } }

/* ---------- Fire Safety (lib/safety.py) ---------- */
/* 78px masthead + ~50px jump nav, so a jumped-to heading clears both bars. */
.safety-block { margin-bottom: clamp(48px, 7vw, 80px); scroll-margin-top: 140px; }
.card-block { scroll-margin-top: 140px; }
/* Jump nav: the Safety page is long, and without this nothing at the top says
   the other sections exist (Ryan, 2026-09-17). Sticks under the masthead. */
.jump-nav {
  position: sticky; top: 78px; z-index: 20;
  background: rgba(255,255,255,.92); backdrop-filter: blur(10px) saturate(1.2);
  border-bottom: 1px solid var(--line);
}
.jump-inner { display: flex; align-items: center; gap: 8px; padding: 12px 0; overflow-x: auto; scrollbar-width: none; }
.jump-inner::-webkit-scrollbar { display: none; }
.jump-label { font: 700 .7rem/1 var(--font-body); letter-spacing: .18em; text-transform: uppercase; color: var(--muted); flex: none; margin-right: 4px; }
.jump-chip {
  display: inline-flex; align-items: center; gap: 7px; flex: none;
  padding: 9px 14px; border-radius: 999px; border: 1px solid var(--line);
  background: var(--paper); color: var(--navy-900); text-decoration: none;
  font: 700 .92rem/1 var(--font-body); transition: background .2s, border-color .2s, color .2s;
}
.jump-chip:hover { background: var(--navy-900); border-color: var(--navy-900); color: #fff; }
.jump-count { background: var(--paper-2); color: var(--muted); border-radius: 999px; padding: 2px 7px; font-size: .78rem; }
.jump-chip:hover .jump-count { background: rgba(255,255,255,.2); color: #fff; }
/* The masthead is 79px tall on phones and also sticky, so the bar sits under
   it rather than at 0, where it was hidden behind the masthead entirely. */
@media (max-width: 1100px) { .jump-nav { top: 79px; } .jump-label { display: none; } .jump-inner { padding: 10px 0; } }
.safety-head h2 { font-size: clamp(2.2rem, 4.5vw, 3.4rem); text-transform: uppercase; color: var(--navy-900); margin: 0 0 22px; }
.tip-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 18px; }
.tip-grid-3 { grid-template-columns: repeat(3, 1fr); }
@media (max-width: 900px) { .tip-grid-3 { grid-template-columns: 1fr; } }
.tip-card {
  position: relative; display: flex; flex-direction: column;
  background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 26px 24px 22px; scroll-margin-top: 110px; overflow: hidden;
  transition: box-shadow .3s, transform .3s var(--ease);
}
.tip-card::before { content: ""; position: absolute; left: 0; top: 0; right: 0; height: 4px; background: var(--blue); }
.tip-card:hover { box-shadow: var(--shadow-lg); transform: translateY(-3px); }
.tip-card h3 { font-size: 1.7rem; text-transform: uppercase; color: var(--navy-900); margin: 0 0 8px; }
.tip-card .tip-sum, .tip-card-compact p { color: var(--muted); margin: 0 0 14px; }
.tip-card .checklist { margin: 0 0 12px; }
.tip-card .checklist li { font-size: .95rem; }
.tip-link { margin-top: auto; font-weight: 700; text-decoration: none; }
.tip-trigger {
  display: inline-flex; align-self: flex-start; gap: 8px; align-items: center;
  font: 700 .74rem/1.2 var(--font-body); letter-spacing: .08em; text-transform: uppercase;
  padding: 6px 10px; border-radius: 999px; margin: 0 0 12px;
}
.tip-weather { background: rgba(193,52,58,.12); color: var(--red-600); }
.tip-date { background: rgba(255,176,32,.2); color: #7a4d00; }
.tip-card-weather::before { background: var(--red); }
.tip-card-date::before { background: var(--yellow-600); }
.safety-now .tip-card { border-color: rgba(193,52,58,.35); }
.safety-sub { color: var(--muted); max-width: 720px; margin: -8px 0 22px; }
.recall-list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 14px; }
.recall {
  position: relative; background: var(--paper); border: 1px solid var(--line); border-radius: var(--radius);
  padding: 20px 22px 18px 26px; overflow: hidden;
}
.recall::before { content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 5px; background: var(--red); }
.recall time { font: 700 .72rem/1 var(--font-body); letter-spacing: .16em; text-transform: uppercase; color: var(--red); }
.recall h3 { font-size: 1.35rem; margin: 8px 0 6px; line-height: 1.1; }
.recall h3 a { color: var(--navy-900); text-decoration: none; }
.recall h3 a:hover { color: var(--red); }
.recall p { color: var(--muted); margin: 0 0 10px; font-size: .95rem; }
.recall-meta { display: flex; flex-wrap: wrap; gap: 6px 14px; align-items: center; font-size: .85rem !important; margin: 0 !important; }
.recall-meta a { font-weight: 700; text-decoration: none; }
.recall-units { background: var(--paper-2); border-radius: 999px; padding: 3px 9px; color: var(--ink); }
.calendar-box {
  display: grid; grid-template-columns: 1.6fr 1fr; gap: 28px; align-items: center;
  border-radius: 28px; padding: clamp(28px, 5vw, 56px); color: #fff;
  background: radial-gradient(60% 120% at 100% 0%, rgba(91,108,196,.5), transparent 60%), var(--navy-900);
}
.calendar-box .eyebrow { color: var(--yellow); }
.calendar-box h2 { font-size: clamp(2rem, 4vw, 3rem); text-transform: uppercase; color: #fff; margin: 0 0 10px; }
.calendar-box p { color: #dfe3f5; margin: 0; }
.calendar-actions { display: flex; flex-direction: column; gap: 12px; }
@media (max-width: 760px) { .calendar-box { grid-template-columns: 1fr; } }

/* ---------- utilities that replaced inline style="" attributes ----------
   The site's Content-Security-Policy forbids inline styles and scripts
   (style-src/script-src 'self'), so page markup must use classes. */
.flush { margin-top: 0; }
.on-dark { color: #fff; }
.eyebrow-red { color: var(--red); }
.heritage-top { align-items: start; }
.years-card { background: var(--navy-900); border-radius: 28px; padding: 40px; color: #fff; }
.join-steps { margin: 0 0 20px; padding-left: 1.2em; color: #dfe3f5; }
.contact-card .big-sm { font-size: 1.8rem; }
.follow { margin-top: 48px; }
.social-box { background: var(--navy-900); padding: 18px 22px; border-radius: 14px; display: inline-block; }
.social-box .social { margin-top: 0; }

/* ---------- draft-build review markers ---------- */
.draft .review, .draft [data-review] { outline: 2px dashed #ff3da8; outline-offset: 2px; }
.draft .review { background: rgba(255,61,168,.12); }

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

/* ---------- run statistics (public), 2026-09-18 ----------
   Counts only: the aggregation happens in Apps Script so no incident detail
   ever reaches this site. Bar widths come from pct-NN classes rather than a
   style attribute, because style-src is 'self' with no 'unsafe-inline'. */
.stats { display: grid; grid-template-columns: minmax(200px, 260px) 1fr; gap: 28px 40px; align-items: start; }
.stat-totals { display: grid; gap: 12px; }
.stat-total { text-align: center; padding: 22px 18px; border-radius: 16px;
              background: var(--navy-900); color: #fff; }
/* Training is the quieter of the two: the call count is the headline. */
.stat-total-training { background: var(--paper); color: var(--ink);
                       box-shadow: inset 0 0 0 1px var(--line); }
.stat-total-training .stat-big { color: var(--red); }
.stat-total-training .stat-cap { color: var(--muted); }
.stat-big { display: block; font: 800 clamp(3rem, 8vw, 4.6rem)/1 var(--font-display); color: var(--yellow); }
.stat-cap { display: block; margin-top: 6px; font-weight: 600; font-size: .95rem; color: #d7dcf2; }
.stat-list { list-style: none; margin: 0; padding: 0; display: grid; gap: 7px; }
.stat-row { display: grid; grid-template-columns: minmax(130px, 210px) 1fr auto; gap: 12px; align-items: center; }
.stat-label { font-weight: 600; font-size: .94rem; }
.stat-bar { display: block; height: 12px; border-radius: 999px; background: var(--paper-2);
            box-shadow: inset 0 0 0 1px var(--line); overflow: hidden; }
.stat-bar i { display: block; height: 100%; width: 0; border-radius: 999px;
              background: linear-gradient(90deg, var(--red) 0%, var(--ember) 100%); }
.stat-count { font: 800 1rem/1 var(--font-display); color: var(--navy-900); min-width: 2ch; text-align: right; }
.stat-note { margin: 4px 0 0; grid-column: 1 / -1; color: var(--muted); font-size: .88rem; }
@media (max-width: 720px) {
  .stats { grid-template-columns: 1fr; gap: 18px; }
  .stat-row { grid-template-columns: minmax(110px, 1fr) 1fr auto; }
  .stat-label { font-size: .88rem; }
}
.stat-bar.pct-5 > i { width: 5%; }
.stat-bar.pct-10 > i { width: 10%; }
.stat-bar.pct-15 > i { width: 15%; }
.stat-bar.pct-20 > i { width: 20%; }
.stat-bar.pct-25 > i { width: 25%; }
.stat-bar.pct-30 > i { width: 30%; }
.stat-bar.pct-35 > i { width: 35%; }
.stat-bar.pct-40 > i { width: 40%; }
.stat-bar.pct-45 > i { width: 45%; }
.stat-bar.pct-50 > i { width: 50%; }
.stat-bar.pct-55 > i { width: 55%; }
.stat-bar.pct-60 > i { width: 60%; }
.stat-bar.pct-65 > i { width: 65%; }
.stat-bar.pct-70 > i { width: 70%; }
.stat-bar.pct-75 > i { width: 75%; }
.stat-bar.pct-80 > i { width: 80%; }
.stat-bar.pct-85 > i { width: 85%; }
.stat-bar.pct-90 > i { width: 90%; }
.stat-bar.pct-95 > i { width: 95%; }
.stat-bar.pct-100 > i { width: 100%; }

/* ---------- headline numbers under the hero, 2026-09-18 ----------
   The full breakdown is half a page down; these three ride where nobody has to
   look for them, and the link drops to the detail. */
.section-strip { padding: 0; background: var(--navy-950); }
.stat-strip { display: flex; flex-wrap: wrap; align-items: center; gap: 10px 38px; padding: 18px 0; }
.stat-strip > div { display: flex; align-items: baseline; gap: 10px; color: #fff; }
.stat-strip b { font: 800 clamp(1.6rem, 3.4vw, 2.3rem)/1 var(--font-display); color: var(--yellow); }
.stat-strip span { font-size: .92rem; color: #cdd4ee; }
.stat-strip-link { margin-left: auto; color: #fff; font-weight: 700; font-size: .88rem;
                   text-transform: uppercase; letter-spacing: .08em; text-decoration: none;
                   border-bottom: 2px solid var(--yellow); padding-bottom: 2px; }
.stat-strip-link:hover { color: var(--yellow); }
@media (max-width: 760px) {
  .stat-strip { gap: 8px 22px; padding: 14px 0; }
  .stat-strip span { font-size: .84rem; }
  .stat-strip-link { margin-left: 0; width: 100%; }
}


/* ---------- history page, redesigned 2026-09-18 ----------
   The first attempt reused the site's standard section rhythm and Ryan was
   right that it had no reason to hold anyone. This is deliberately a different
   object: one dark archive slab instead of alternating bands, numerals used as
   structure rather than decoration, and the chiefs shown as a chart — bar
   length is years served, so Chief Beckman's thirty-eight years are visible at
   a glance instead of merely stated.

   Bar widths are classes, never inline styles: style-src is 'self' with no
   'unsafe-inline'. */
.archive { background: var(--navy-950); color: #d8def4; }
.archive .wrap { padding-top: 54px; padding-bottom: 54px; }
.archive section + section { border-top: 1px solid rgba(255,255,255,.09); }
.arc-h { font: 800 clamp(1.9rem, 4vw, 2.9rem)/1 var(--font-display); text-transform: uppercase;
         color: #fff; margin: 0 0 6px; letter-spacing: .01em; }
.arc-sub { color: #96a0c4; margin: 0 0 26px; max-width: 58ch; }
.arc-note { color: #96a0c4; font-size: .95rem; max-width: 62ch; margin: 22px 0 0;
            border-left: 3px solid var(--yellow); padding-left: 14px; }
.arc-gap { border-left-color: var(--red); }

/* --- opening slab: the claim, then three numbers --- */
.arc-open-grid { display: grid; grid-template-columns: 1.4fr 1fr; gap: 40px; align-items: center; }
.arc-lead { font-size: clamp(1.1rem, 2vw, 1.45rem); line-height: 1.5; color: #eef1fb; margin: 0; }
.arc-lead b { color: var(--yellow); }
.arc-facts { display: grid; grid-template-columns: repeat(3, 1fr); gap: 18px; margin: 0; }
.arc-facts dt { font: 800 clamp(1.8rem, 4vw, 3rem)/1 var(--font-display); color: #fff; }
.arc-facts dd { margin: 4px 0 0; font-size: .74rem; letter-spacing: .16em; text-transform: uppercase;
                color: #8e99bf; }

/* --- chiefs as a chart --- */
.tenure { list-style: none; margin: 0; padding: 0; }
.tenure-row { display: grid; grid-template-columns: minmax(150px, 230px) 130px 1fr 62px;
              gap: 16px; align-items: center; padding: 11px 0;
              border-bottom: 1px solid rgba(255,255,255,.07); }
.tenure-name { font: 700 1.05rem/1.2 var(--font-display); text-transform: uppercase; color: #fff;
               letter-spacing: .02em; }
.tenure-years { color: #8e99bf; font-size: .88rem; }
.tenure-bar { display: block; height: 14px; }
.tenure-bar i { display: block; height: 100%; width: 100%; border-radius: 3px;
                background: linear-gradient(90deg, var(--red) 0%, var(--ember) 100%); }
.tenure-len { text-align: right; font: 800 .88rem/1 var(--font-display); color: var(--yellow);
              letter-spacing: .04em; }
/* The unknown years read as an absence, not an achievement. */
.tenure-open .tenure-name, .tenure-open .tenure-len { color: #6c7699; }
.tenure-open .tenure-bar i { background: repeating-linear-gradient(135deg,
                             rgba(255,255,255,.16) 0 6px, transparent 6px 12px); }
.tenure-now .tenure-bar i { background: var(--yellow); }
.w-5 { width: 5%; } .w-25 { width: 25%; } .w-35 { width: 35%; } .w-40 { width: 40%; } .w-100 { width: 100%; }

/* --- the record: year as the spine --- */
.rail { list-style: none; margin: 0; padding: 0; }
.rail li { display: grid; grid-template-columns: 124px 1fr; gap: 24px; align-items: baseline;
           padding: 14px 0; border-top: 1px solid rgba(255,255,255,.07); }
.rail li:first-child { border-top: 0; }
.rail-year { font: 800 clamp(1.7rem, 3.4vw, 2.5rem)/1 var(--font-display); color: transparent;
             -webkit-text-stroke: 1.5px rgba(255,232,31,.75); text-stroke: 1.5px rgba(255,232,31,.75); }
.rail p { margin: 0; color: #c3cbe6; }
.rail b { color: #fff; }

/* --- the first ten --- */
.roster { list-style: none; margin: 0; padding: 0; display: grid;
          grid-template-columns: repeat(auto-fill, minmax(190px, 1fr)); gap: 0 26px; }
.roster li { padding: 9px 0; border-bottom: 1px solid rgba(255,255,255,.1); color: #fff;
             font-weight: 600; letter-spacing: .01em; }

/* --- the ask --- */
.arc-ask-grid { display: grid; grid-template-columns: 1.6fr 1fr; gap: 36px; align-items: center; }
.arc-cta { margin: 0; font: 700 1.05rem/1.7 var(--font-body); }
.arc-cta a { color: var(--yellow); }

@media (max-width: 820px) {
  .arc-open-grid, .arc-ask-grid { grid-template-columns: 1fr; gap: 26px; }
  .tenure-row { grid-template-columns: 1fr 62px; gap: 4px 12px; padding: 14px 0; }
  .tenure-years { grid-column: 1; order: 2; }
  .tenure-bar { grid-column: 1 / -1; order: 3; margin-top: 6px; }
  .tenure-len { order: 1; }
  .rail li { grid-template-columns: 1fr; gap: 4px; }
  .roster { grid-template-columns: 1fr 1fr; }
}

/* --- retired fleet gallery on the history page, 2026-09-18 --- */
.fleet-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 18px; }
.fleet-grid figure { margin: 0; background: rgba(255,255,255,.04); border: 1px solid rgba(255,255,255,.09);
                     border-radius: 12px; overflow: hidden; }
.fleet-grid img { display: block; width: 100%; height: auto; }
.fleet-grid figcaption { padding: 13px 15px 15px; }
.fleet-grid b { display: block; font: 700 1.05rem/1.2 var(--font-display); text-transform: uppercase;
                color: var(--yellow); letter-spacing: .02em; }
.fleet-grid span { display: block; margin-top: 3px; color: #96a0c4; font-size: .89rem; }
.arc-credit { margin: 22px 0 0; color: #8e99bf; font-size: .87rem; }
.arc-credit a { color: #b9c3e6; }
