/* Grasso Pollinator Alliance
   Mobile-first stylesheet. Base styles target ~390px phones.
   Breakpoints: 640px (large phone / small tablet), 900px (desktop). */

:root {
  --green-deep: #1c3527;
  --green: #2c5a3f;
  --green-soft: #4a7a5c;
  --gold: #e8a921;
  --gold-soft: #f5c95c;
  --monarch: #d96c2f;
  /* Same hue, darkened to clear 4.5:1 on cream. For small bold text only
     (kickers); --monarch stays as-is for large type, icons and rules. */
  --monarch-text: #b8511a;
  --cream: #faf7ef;
  --cream-dark: #f1ecdd;
  --ink: #22301f;
  --ink-soft: #55604f;
  --white: #ffffff;
  --radius: 16px;
  --shadow: 0 10px 30px rgba(28, 53, 39, 0.12);
  --font-display: "Fraunces", Georgia, serif;
  --font-body: "Inter", -apple-system, "Helvetica Neue", Arial, sans-serif;
  --header-h: 64px;
}

* { margin: 0; padding: 0; box-sizing: border-box; }

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

body {
  font-family: var(--font-body);
  color: var(--ink);
  background: var(--cream);
  line-height: 1.65;
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
  overflow-x: hidden;
}

body.menu-open { overflow: hidden; }

/* height:auto is required, not cosmetic. Every <img> carries width/height
   attributes to reserve layout space; without this the attribute height wins as
   a presentational hint, which stops `aspect-ratio` from ever computing and
   renders cropped galleries as full-height slivers. */
img { max-width: 100%; height: auto; display: block; }

.container { max-width: 1120px; margin: 0 auto; padding: 0 20px; }

h1, h2, h3 { font-family: var(--font-display); font-weight: 600; line-height: 1.14; color: var(--green-deep); text-wrap: balance; }
h1 { font-size: clamp(2.1rem, 8vw, 4rem); letter-spacing: -0.01em; }
h2 { font-size: clamp(1.65rem, 6vw, 2.6rem); }
h3 { font-size: 1.25rem; }

p { color: var(--ink-soft); }

a { color: var(--green); }
a, button { -webkit-tap-highlight-color: rgba(232, 169, 33, 0.25); }

.accent-italic { font-style: italic; color: var(--monarch); }

/* ---------- Reveal on scroll ---------- */

.rv { opacity: 0; transform: translateY(18px); transition: opacity 0.55s ease, transform 0.55s ease; }
.rv.in { opacity: 1; transform: none; }

@media (prefers-reduced-motion: reduce) {
  .rv { opacity: 1; transform: none; transition: none; }
  html { scroll-behavior: auto; }
}

/* ---------- Header ---------- */

.site-header {
  position: sticky;
  top: 0;
  z-index: 100;
  background: rgba(250, 247, 239, 0.94);
  backdrop-filter: blur(12px);
  -webkit-backdrop-filter: blur(12px);
  border-bottom: 1px solid rgba(28, 53, 39, 0.08);
}

.nav-wrap {
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: var(--header-h);
  padding: 0 16px 0 12px;
  max-width: 1200px;
  margin: 0 auto;
}

.brand { display: flex; align-items: center; text-decoration: none; padding: 6px; }

.brand-logo { height: 48px; width: auto; flex-shrink: 0; }

.brand-text {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.05rem;
  line-height: 1.1;
  color: var(--green-deep);
}

.brand-text span { display: block; font-size: 0.7rem; font-weight: 500; letter-spacing: 0.12em; text-transform: uppercase; color: var(--green-soft); }

/* Desktop nav hidden on mobile */
.main-nav { display: none; }

.nav-toggle {
  display: flex;
  flex-direction: column;
  justify-content: center;
  gap: 6px;
  width: 48px;
  height: 48px;
  align-items: center;
  background: none;
  border: none;
  cursor: pointer;
  z-index: 130;
}

.nav-toggle span {
  display: block;
  width: 24px;
  height: 2px;
  background: var(--green-deep);
  border-radius: 2px;
  transition: transform 0.25s, opacity 0.2s;
}

.menu-open .nav-toggle span:nth-child(1) { transform: translateY(8px) rotate(45deg); }
.menu-open .nav-toggle span:nth-child(2) { opacity: 0; }
.menu-open .nav-toggle span:nth-child(3) { transform: translateY(-8px) rotate(-45deg); }

/* ---------- Mobile sheet menu ---------- */

.sheet-menu {
  position: fixed;
  inset: 0;
  z-index: 95;
  background: var(--cream);
  display: flex;
  flex-direction: column;
  padding: calc(var(--header-h) + 12px) 22px 26px;
  transform: translateX(102%);
  transition: transform 0.32s cubic-bezier(0.32, 0.72, 0.28, 1);
  overflow-y: auto;
}

.menu-open .sheet-menu { transform: translateX(0); }

.sheet-menu a {
  display: flex;
  align-items: center;
  min-height: 52px;
  font-size: 1.15rem;
  font-weight: 600;
  color: var(--green-deep);
  text-decoration: none;
  border-bottom: 1px solid rgba(28, 53, 39, 0.08);
  font-family: var(--font-display);
}

.sheet-menu a.sub {
  padding-left: 22px;
  font-size: 1rem;
  font-weight: 500;
  font-family: var(--font-body);
  color: var(--ink-soft);
  min-height: 46px;
}

.sheet-menu a.active { color: var(--monarch); }

.sheet-menu .sheet-label {
  margin-top: 6px;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--green-soft);
  padding: 14px 0 4px;
}

.sheet-menu .sheet-donate {
  margin-top: auto;
  padding-top: 22px;
}

.sheet-menu .sheet-donate .btn {
  display: flex;
  justify-content: center;
  width: 100%;
  border-bottom: none;
  min-height: 56px;
  align-items: center;
  font-family: var(--font-body);
  font-size: 1.05rem;
}

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

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 48px;
  padding: 12px 26px;
  border-radius: 999px;
  font-weight: 600;
  font-size: 0.97rem;
  text-decoration: none;
  transition: transform 0.15s, box-shadow 0.15s, background 0.2s;
  border: none;
  cursor: pointer;
}

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

.btn-donate { background: var(--gold); color: var(--green-deep); }
.btn-donate:hover { background: var(--gold-soft); }

.btn-primary { background: var(--green); color: var(--white); }
.btn-primary:hover { background: var(--green-soft); }

.btn-outline { background: transparent; color: var(--green-deep); border: 2px solid var(--green); }

.btn-lg { min-height: 54px; padding: 15px 34px; font-size: 1.03rem; }

/* ---------- Hero ---------- */

.hero {
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='190' height='190' viewBox='0 0 190 190'%3E%3Cg fill='none'%3E%3Ccircle cx='30' cy='34' r='3' fill='rgba(232,169,33,0.13)'/%3E%3Ccircle cx='30' cy='34' r='8' stroke='rgba(232,169,33,0.1)'/%3E%3Cpath d='M138 22c8 4 10 14 4 22-8-4-10-14-4-22z' fill='rgba(44,90,63,0.08)'/%3E%3Ccircle cx='96' cy='96' r='2.5' fill='rgba(217,108,47,0.11)'/%3E%3Cpath d='M96 82c2 4 2 8 0 10-2-2-2-6 0-10zM110 96c-4 2-8 2-10 0 2-2 6-2 10 0zM96 110c-2-4-2-8 0-10 2 2 2 6 0 10zM82 96c4-2 8-2 10 0-2 2-6 2-10 0z' fill='rgba(217,108,47,0.09)'/%3E%3Cpath d='M42 140c10-2 18 4 20 14-10 2-18-4-20-14z' fill='rgba(44,90,63,0.07)'/%3E%3Ccircle cx='160' cy='150' r='3' fill='rgba(232,169,33,0.11)'/%3E%3Cpath d='M158 136c1.5 3 1.5 6 0 8-1.5-2-1.5-5 0-8zM170 150c-3 1.5-6 1.5-8 0 2-1.5 5-1.5 8 0z' fill='rgba(232,169,33,0.1)'/%3E%3C/g%3E%3C/svg%3E"),
    radial-gradient(ellipse at 85% 5%, rgba(232, 169, 33, 0.2), transparent 52%),
    radial-gradient(ellipse at 5% 95%, rgba(217, 108, 47, 0.12), transparent 48%),
    linear-gradient(165deg, #f3efe2 0%, var(--cream) 62%);
  background-size: 190px 190px, auto, auto, auto;
  padding: 56px 0 52px;
  overflow: hidden;
  position: relative;
}

/* ---------- Floating pollinators (decorative) ----------
   Composition: the three species the Alliance protects share every hero.
   Bee flies its dotted trail (top right), monarch drifts mid-right,
   a smaller golden skipper counterweights lower left, and a
   ruby-throated hummingbird hovers and darts top left. */

.hero-pollinators { position: absolute; inset: 0; pointer-events: none; overflow: hidden; }

.hero .container { position: relative; z-index: 1; }

/* Bee + trail scene: the bee rides the path via SVG animateMotion */
.poll-scene {
  position: absolute;
  top: 3%;
  right: 2%;
  width: 230px;
  height: 135px;
  overflow: visible;
}

.poll-scene .trail {
  fill: none;
  stroke: rgba(28, 53, 39, 0.2);
  stroke-width: 2;
  stroke-dasharray: 1 8;
  stroke-linecap: round;
}

.poll-scene .scene-bee { filter: drop-shadow(0 3px 6px rgba(28, 53, 39, 0.2)); }

.poll-butterfly {
  position: absolute;
  top: 18%;
  right: 5%;
  width: 38px;
  height: 38px;
  animation: butterfly-drift 9s ease-in-out infinite;
  filter: drop-shadow(0 4px 8px rgba(28, 53, 39, 0.16));
}

.poll-butterfly .wing-l, .poll-butterfly .wing-r { transform-origin: 32px 32px; }
.poll-butterfly .wing-l { animation: wing-flap 0.9s ease-in-out infinite; }
.poll-butterfly .wing-r { animation: wing-flap 0.9s ease-in-out infinite; }

.poll-skipper {
  position: absolute;
  bottom: 1.5%;
  left: 6%;
  width: 26px;
  height: 26px;
  opacity: 0.9;
  animation: skipper-drift 12s ease-in-out infinite;
  animation-delay: -4s;
  filter: drop-shadow(0 3px 6px rgba(28, 53, 39, 0.14));
}

.poll-skipper .wing-l, .poll-skipper .wing-r { transform-origin: 32px 32px; }
.poll-skipper .wing-l { animation: wing-flap 1.15s ease-in-out infinite; animation-delay: -0.3s; }
.poll-skipper .wing-r { animation: wing-flap 1.15s ease-in-out infinite; animation-delay: -0.3s; }

.poll-hummingbird {
  position: absolute;
  top: 12px;
  left: 4%;
  width: 46px;
  height: 46px;
  animation: hb-dart 13s ease-in-out infinite;
  filter: drop-shadow(0 4px 8px rgba(28, 53, 39, 0.18));
}

.poll-hummingbird .hb-wing { transform-origin: 34px 26px; animation: hb-flap 0.14s linear infinite alternate; }
.poll-hummingbird .hb-body { animation: hb-hover 1.6s ease-in-out infinite; }

@keyframes butterfly-drift {
  0%, 100% { transform: translate(0, 0) rotate(-4deg); }
  30% { transform: translate(-16px, -18px) rotate(5deg); }
  55% { transform: translate(-30px, -4px) rotate(-1deg); }
  78% { transform: translate(-10px, 12px) rotate(4deg); }
}

@keyframes skipper-drift {
  0%, 100% { transform: translate(0, 0) rotate(5deg); }
  35% { transform: translate(20px, -14px) rotate(-4deg); }
  65% { transform: translate(38px, 4px) rotate(3deg); }
}

@keyframes wing-flap {
  from { transform: scaleX(1); }
  to { transform: scaleX(0.55); }
}

/* Hummingbird darts between hover points, pausing at each */
@keyframes hb-dart {
  0%, 17% { transform: translate(0, 0); }
  22%, 42% { transform: translate(34px, 18px); }
  47%, 66% { transform: translate(10px, 34px); }
  71%, 94% { transform: translate(26px, 6px); }
  100% { transform: translate(0, 0); }
}

@keyframes hb-hover {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-4px); }
}

@keyframes hb-flap {
  from { transform: rotate(-24deg); }
  to { transform: rotate(30deg); }
}

@media (prefers-reduced-motion: reduce) {
  .poll-butterfly, .poll-butterfly .wing-l, .poll-butterfly .wing-r,
  .poll-skipper, .poll-skipper .wing-l, .poll-skipper .wing-r,
  .poll-hummingbird, .poll-hummingbird .hb-wing, .poll-hummingbird .hb-body { animation: none; }
}

@media (max-width: 480px) {
  .poll-scene { width: 180px; height: 106px; }
  .poll-hummingbird { width: 38px; height: 38px; }
  .poll-butterfly { width: 32px; height: 32px; }
}

.hero-inner { max-width: 780px; }

.eyebrow {
  display: inline-block;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--green-soft);
  background: rgba(44, 90, 63, 0.08);
  border: 1px solid rgba(44, 90, 63, 0.18);
  padding: 6px 14px;
  border-radius: 999px;
  margin-bottom: 18px;
}

.hero p.lead { font-size: 1.08rem; margin: 18px 0 28px; max-width: 640px; }

.hero-ctas { display: flex; flex-direction: column; gap: 12px; }
.hero-ctas .btn { width: 100%; }

.hero-grid { display: grid; grid-template-columns: 1fr; gap: 30px; align-items: center; }
.hero-grid .photo { aspect-ratio: 4 / 3; }

/* ---------- Sections ---------- */

.section { padding: 56px 0; }
.section-alt { background: var(--white); }

/* Deep green sections: honeycomb texture + meadow silhouette flowing in from the cream above */
.section-green {
  background-color: var(--green-deep);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='56' height='100' viewBox='0 0 56 100'%3E%3Cpath d='M28 66L0 50L0 16L28 0L56 16L56 50L28 66L28 100' fill='none' stroke='rgba(232,169,33,0.055)' stroke-width='2'/%3E%3Cpath d='M28 0L28 34L0 50L0 84L28 100L56 84L56 50L28 34' fill='none' stroke='rgba(232,169,33,0.055)' stroke-width='2'/%3E%3C/svg%3E");
  background-size: 56px 100px;
  position: relative;
  padding-top: 92px;
  overflow: hidden;
}

.section-green::before {
  content: "";
  position: absolute;
  top: -1px;
  left: 0;
  right: 0;
  height: 52px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1440 70' preserveAspectRatio='none'%3E%3Cpath fill='%23faf7ef' d='M0,0 H1440 V26 C1360,44 1290,18 1215,32 C1140,46 1070,16 995,28 C920,40 850,14 775,26 C700,38 630,12 555,24 C480,36 410,12 335,26 C260,40 190,16 115,28 C60,37 25,24 0,32 Z'/%3E%3Cpath fill='rgba(74,122,92,0.5)' d='M0,32 C25,24 60,37 115,28 C190,16 260,40 335,26 C410,12 480,36 555,24 C630,12 700,38 775,26 C850,14 920,40 995,28 C1070,16 1140,46 1215,32 C1290,18 1360,44 1440,26 V34 C1360,52 1290,26 1215,40 C1140,54 1070,24 995,36 C920,48 850,22 775,34 C700,46 630,20 555,32 C480,44 410,20 335,34 C260,48 190,24 115,36 C60,45 25,32 0,40 Z'/%3E%3C/svg%3E");
  background-size: 100% 100%;
  pointer-events: none;
}

.section-green h2, .section-green h3 { color: var(--cream); }
.section-green p { color: rgba(250, 247, 239, 0.78); }
.section-green .gallery-grid figcaption { color: rgba(250, 247, 239, 0.82); }
.section-green .swipe-hint { color: var(--gold-soft); }

.section-head { max-width: 700px; margin-bottom: 34px; }
.section-head.center { margin-left: auto; margin-right: auto; }
.section-head p { margin-top: 12px; font-size: 1.02rem; }

.kicker {
  font-size: 0.78rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--monarch-text);
  margin-bottom: 10px;
  display: block;
}

/* ---------- Stat band: tidy 2-up grid on mobile, 4-up desktop ---------- */

.stat-band {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 12px;
}

.stat {
  background: var(--white);
  border: 1px solid rgba(28, 53, 39, 0.08);
  border-radius: var(--radius);
  padding: 22px 14px;
  text-align: center;
  box-shadow: 0 2px 10px rgba(28, 53, 39, 0.05);
}

.stat .num {
  font-family: var(--font-display);
  font-size: clamp(1.9rem, 8vw, 2.7rem);
  font-weight: 700;
  color: var(--monarch);
  line-height: 1;
  font-variant-numeric: tabular-nums;
}

.stat .label { font-size: 0.86rem; color: var(--ink-soft); margin-top: 10px; }

.section-green .stat { background: rgba(255, 255, 255, 0.06); border-color: rgba(255, 255, 255, 0.14); box-shadow: none; }
.section-green .stat .num { color: var(--gold); }
.section-green .stat .label { color: rgba(250, 247, 239, 0.75); }

/* ---------- Cards ---------- */

.card-grid { display: grid; grid-template-columns: 1fr; gap: 18px; }

.card {
  background: var(--white);
  border-radius: var(--radius);
  padding: 30px 24px;
  border: 1px solid rgba(28, 53, 39, 0.08);
  box-shadow: 0 2px 10px rgba(28, 53, 39, 0.05);
  transition: transform 0.2s, box-shadow 0.2s;
}

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

.card .icon {
  width: 50px;
  height: 50px;
  border-radius: 12px;
  background: rgba(232, 169, 33, 0.16);
  display: flex;
  align-items: center;
  justify-content: center;
  margin-bottom: 18px;
}

.card .icon svg { width: 26px; height: 26px; stroke: var(--green); fill: none; stroke-width: 1.8; }

.card h3 { margin-bottom: 8px; }
.card p { font-size: 0.96rem; }

.card .card-photo {
  margin: -30px -24px 20px;
  border-radius: var(--radius) var(--radius) 0 0;
  overflow: hidden;
  aspect-ratio: 16 / 9;
}

.card .card-photo img { width: 100%; height: 100%; object-fit: cover; }

/* ---------- Programs row ----------
   The four programs used to sit in .card-grid, which is a three-across grid, so
   the fourth card was stranded alone on a second row. This lays all four in one
   row instead. Deliberately NOT .card: that class is still used by the calendar
   blocks on the events page and by the scroll-reveal observer. */
.program-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 28px;
}

.program-item { padding-top: 20px; border-top: 2px solid var(--gold); }

.program-glyph { width: 52px; height: 52px; margin-bottom: 16px; }
.program-glyph svg { width: 100%; height: 100%; display: block; }

.program-item h3 { font-size: 1.1rem; margin-bottom: 8px; }
.program-item p { font-size: 0.94rem; color: var(--ink-soft); }

@media (min-width: 640px) {
  .program-row { grid-template-columns: 1fr 1fr; gap: 26px 28px; }
}

@media (min-width: 900px) {
  .program-row { grid-template-columns: repeat(4, 1fr); gap: 26px; }
}

/* ---------- Species spotlight ---------- */

.species {
  display: grid;
  grid-template-columns: 1fr;
  gap: 26px;
  align-items: start;
  padding: 40px 0;
  border-bottom: 1px solid rgba(28, 53, 39, 0.1);
}

.species:last-child { border-bottom: none; }

.species .badge {
  display: inline-block;
  background: rgba(217, 108, 47, 0.12);
  color: var(--monarch);
  font-weight: 700;
  font-size: 0.8rem;
  padding: 5px 14px;
  border-radius: 999px;
  margin-bottom: 12px;
}

.species h3 { font-size: 1.55rem; margin-bottom: 6px; }
.species .subtitle { font-weight: 600; color: var(--green-soft); margin-bottom: 16px; }
.species p { margin-bottom: 13px; font-size: 0.98rem; }

.fact-table { width: 100%; border-collapse: collapse; background: var(--white); border-radius: var(--radius); overflow: hidden; border: 1px solid rgba(28, 53, 39, 0.1); }
.fact-table td { padding: 12px 16px; border-bottom: 1px solid rgba(28, 53, 39, 0.07); font-size: 0.92rem; }
.fact-table tr:last-child td { border-bottom: none; }
.fact-table td:first-child { color: var(--ink-soft); }
.fact-table td:last-child { font-weight: 700; color: var(--green-deep); text-align: right; }

.tag-row { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 14px; }
.tag {
  font-size: 0.78rem;
  font-weight: 600;
  background: var(--cream-dark);
  color: var(--green);
  padding: 5px 12px;
  border-radius: 999px;
}

/* ---------- Donation tiers ---------- */

.tier-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }

.tier {
  background: var(--white);
  border-radius: var(--radius);
  padding: 26px 18px;
  text-align: center;
  border: 2px solid rgba(28, 53, 39, 0.08);
  transition: border-color 0.2s, transform 0.2s;
  /* The card is light but sits inside dark sections that set cream text.
     Without this the body copy inherits cream and vanishes on the card. */
  color: var(--ink);
}

.tier:hover { border-color: var(--gold); transform: translateY(-4px); }

.tier .amount { font-family: var(--font-display); font-size: 2rem; font-weight: 700; color: var(--green); }
.tier p { font-size: 0.88rem; margin-top: 10px; }

/* Commercial sponsorship tiers: named ladder with benefit checklists */
.sponsor-tiers .tier { text-align: left; display: flex; flex-direction: column; }
.sponsor-tiers .tier-name {
  display: block; text-align: center; font-size: 0.76rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.1em; color: var(--gold); margin-bottom: 4px;
}
.sponsor-tiers .tier .amount { text-align: center; }
.sponsor-tiers .tier ul { list-style: none; margin-top: 16px; }
.sponsor-tiers .tier ul li {
  position: relative; padding: 8px 0 8px 22px; font-size: 0.85rem;
  color: var(--ink-soft); border-top: 1px solid rgba(28, 53, 39, 0.07);
}
.sponsor-tiers .tier ul li:first-child { border-top: none; }
.sponsor-tiers .tier ul li::before {
  content: ""; position: absolute; left: 0; top: 11px; width: 14px; height: 14px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232c5a3f' stroke-width='3.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
  background-size: contain; background-repeat: no-repeat;
}
@media (min-width: 720px) { .sponsor-tiers { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 1000px) { .sponsor-tiers { grid-template-columns: repeat(4, 1fr); } }

/* ---------- NJ native plant guide tables ---------- */
.plant-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; max-width: 900px; margin: 0 auto; }
.plant-table {
  width: 100%; border-collapse: collapse; background: var(--white);
  border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow); font-size: 0.95rem;
}
.plant-table thead th {
  background: var(--green); color: var(--cream); text-align: left; font-weight: 600;
  font-size: 0.8rem; letter-spacing: 0.05em; text-transform: uppercase; padding: 14px 18px;
}
.plant-table td { padding: 14px 18px; border-top: 1px solid rgba(28, 53, 39, 0.08); color: var(--ink); vertical-align: top; }
.plant-table tbody tr:nth-child(even) { background: rgba(28, 53, 39, 0.025); }
.plant-table td strong { display: block; color: var(--green); }
.plant-table td span { display: block; font-style: italic; font-size: 0.82rem; color: var(--ink-soft); margin-top: 2px; }
.plant-table td:nth-child(2) { white-space: nowrap; color: var(--ink-soft); font-size: 0.9rem; }
@media (max-width: 620px) { .plant-table { font-size: 0.86rem; } .plant-table th, .plant-table td { padding: 11px 12px; } }

/* ---------- Blog article ---------- */
.article p { margin-bottom: 16px; line-height: 1.75; }
.article .lead { font-size: 1.12rem; color: var(--ink); font-weight: 500; }

/* ---------- Sponsor logo wall ---------- */
.sponsor-wall { display: grid; grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); gap: 14px; max-width: 1000px; margin: 0 auto; }
.sponsor-wall .logo-card {
  background: var(--white); border: 1px solid rgba(28, 53, 39, 0.08); border-radius: var(--radius);
  aspect-ratio: 3 / 2; display: flex; align-items: center; justify-content: center; padding: 18px;
  box-shadow: 0 2px 10px rgba(28, 53, 39, 0.05); transition: transform 0.2s, box-shadow 0.2s;
}
.sponsor-wall .logo-card:hover { transform: translateY(-3px); box-shadow: 0 6px 18px rgba(28, 53, 39, 0.1); }
.sponsor-wall .logo-card img { max-width: 100%; max-height: 100%; object-fit: contain; }
@media (max-width: 520px) { .sponsor-wall { grid-template-columns: repeat(2, 1fr); } }

/* ---------- Donate panel ---------- */

.donate-panel {
  background: var(--white);
  border-radius: 20px;
  box-shadow: var(--shadow);
  padding: 40px 26px;
  text-align: center;
  max-width: 640px;
  margin: 0 auto;
  border-top: 6px solid var(--gold);
}

.donate-panel h2 { margin-bottom: 12px; }
.donate-panel .secure-note { font-size: 0.85rem; color: var(--ink-soft); margin-top: 18px; }
.donate-panel .btn { width: 100%; }

/* ---------- CTA band ---------- */

.cta-band {
  background-color: var(--green-deep);
  background-image:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='56' height='100' viewBox='0 0 56 100'%3E%3Cpath d='M28 66L0 50L0 16L28 0L56 16L56 50L28 66L28 100' fill='none' stroke='rgba(232,169,33,0.07)' stroke-width='2'/%3E%3Cpath d='M28 0L28 34L0 50L0 84L28 100L56 84L56 50L28 34' fill='none' stroke='rgba(232,169,33,0.07)' stroke-width='2'/%3E%3C/svg%3E"),
    linear-gradient(140deg, var(--green-deep), var(--green));
  background-size: 56px 100px, auto;
  border-radius: 22px;
  padding: 44px 26px;
  text-align: center;
  color: var(--cream);
  position: relative;
  overflow: hidden;
}

.cta-band::before {
  content: "";
  position: absolute;
  left: -14px;
  bottom: -16px;
  width: 120px;
  height: 120px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg fill='rgba(232,169,33,0.14)'%3E%3Cpath d='M30 34C22 26 10 24 4 30c2 8 14 14 24 10l4-4-2-2z'/%3E%3Cpath d='M34 34c8-8 20-10 26-4-2 8-14 14-24 10l-4-4 2-2z'/%3E%3Cpath d='M30 36c-8 6-10 14-6 18 6-2 10-10 8-16l-2-2z'/%3E%3Cpath d='M34 36c8 6 10 14 6 18-6-2-10-10-8-16l2-2z'/%3E%3Cellipse cx='32' cy='33' rx='2.4' ry='9'/%3E%3C/g%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
  opacity: 0.9;
  transform: rotate(-14deg);
  pointer-events: none;
}

.cta-band::after {
  content: "";
  position: absolute;
  right: -60px;
  top: -60px;
  width: 220px;
  height: 220px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(232, 169, 33, 0.25), transparent 70%);
  pointer-events: none;
}

.cta-band h2 { color: var(--cream); margin-bottom: 12px; }
.cta-band p { color: rgba(250, 247, 239, 0.8); max-width: 560px; margin: 0 auto 26px; }
.cta-band .btn { width: 100%; max-width: 340px; }
.cta-band .cta-btns { display: flex; flex-direction: column; gap: 12px; align-items: center; }

/* ---------- Checklist ---------- */

.checklist { list-style: none; }
.checklist li {
  padding: 12px 0 12px 38px;
  position: relative;
  color: var(--ink-soft);
  border-bottom: 1px solid rgba(28, 53, 39, 0.07);
  font-size: 0.98rem;
}
.checklist li:last-child { border-bottom: none; }
.checklist li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 15px;
  width: 22px;
  height: 22px;
  border-radius: 50%;
  background: rgba(232, 169, 33, 0.2);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232c5a3f' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='20 6 9 17 4 12'/%3E%3C/svg%3E");
  background-size: 12px;
  background-position: center;
  background-repeat: no-repeat;
}

/* Checklist on the deep-green band: lighten text, borders, and check chip */
.section-green .checklist li { color: rgba(250, 247, 239, 0.9); border-bottom-color: rgba(250, 247, 239, 0.16); }
.section-green .checklist li::before { background-color: var(--gold); }

/* ---------- Two column ---------- */

.two-col { display: grid; grid-template-columns: 1fr; gap: 28px; align-items: center; }

/* ---------- Quote ---------- */

.founder-quote { max-width: 760px; margin: 0 auto; text-align: center; }

.founder-quote blockquote {
  font-family: var(--font-display);
  font-size: clamp(1.2rem, 4.5vw, 1.7rem);
  font-style: italic;
  color: var(--green-deep);
  line-height: 1.5;
}

.founder-quote cite { display: block; margin-top: 20px; font-style: normal; font-weight: 600; color: var(--monarch); }
/* On dark green sections (e.g. About page) the quote must be light, not dark green */
.section-green .founder-quote blockquote { color: var(--cream); }
.section-green .founder-quote cite { color: var(--gold-soft); }

.quote-inline {
  font-family: var(--font-display);
  font-style: italic;
  font-size: 1.12rem;
  color: var(--green-deep);
  margin-top: 20px;
  border-left: 3px solid var(--gold);
  padding-left: 18px;
  line-height: 1.55;
}

.quote-inline cite { display: block; margin-top: 10px; font-style: normal; font-weight: 600; color: var(--monarch); font-family: var(--font-body); font-size: 0.92rem; }

/* ---------- Photos & galleries ---------- */

.photo { border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow); }
.photo img { width: 100%; height: 100%; object-fit: cover; }

.founder-photo { aspect-ratio: 1 / 1; }

/* Gallery: swipe carousel on mobile */
.gallery-grid {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: min(78vw, 320px);
  gap: 14px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  padding: 4px 20px 18px;
  margin: 0 -20px;
  scrollbar-width: none;
}

.gallery-grid::-webkit-scrollbar { display: none; }

@media (max-width: 899px) {
  .gallery-grid {
    -webkit-mask-image: linear-gradient(to right, transparent 0, #000 16px, #000 calc(100% - 44px), transparent 100%);
    mask-image: linear-gradient(to right, transparent 0, #000 16px, #000 calc(100% - 44px), transparent 100%);
  }
}

.gallery-grid figure { margin: 0; scroll-snap-align: center; }
.gallery-grid .photo { aspect-ratio: 4 / 3; box-shadow: 0 4px 14px rgba(28, 53, 39, 0.12); }
.gallery-grid .photo img { cursor: zoom-in; }
.gallery-grid figcaption { font-size: 0.84rem; color: var(--ink-soft); padding: 10px 4px 0; }

.swipe-hint { font-size: 0.78rem; color: var(--green-soft); font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; margin-bottom: 12px; }

.infographic {
  background: var(--white);
  border: 1px solid rgba(28, 53, 39, 0.1);
  border-radius: var(--radius);
  padding: 12px;
  box-shadow: 0 4px 14px rgba(28, 53, 39, 0.1);
}

.infographic img { border-radius: 8px; cursor: zoom-in; }
.infographic figcaption { font-size: 0.84rem; color: var(--ink-soft); padding: 10px 6px 2px; text-align: center; }

/* ---------- Field guide grid (printable bee one-pagers) ---------- */

.field-guide-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(230px, 1fr));
  gap: 22px;
  align-items: start;
}
.field-guide-grid .infographic { margin: 0; }
.field-guide-grid .infographic.wide { grid-column: span 2; }
.field-guide-grid figcaption { font-size: 0.9rem; font-weight: 600; color: var(--ink); line-height: 1.5; }
.field-guide-grid figcaption a {
  display: inline-block;
  margin-top: 3px;
  font-size: 0.74rem;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--green);
}
.field-guide-grid figcaption a:hover { color: var(--gold); }
@media (max-width: 620px) {
  .field-guide-grid { grid-template-columns: 1fr; }
  .field-guide-grid .infographic.wide { grid-column: auto; }
}

/* ---------- Accordion (dropdown) galleries ---------- */

.acc-gallery {
  background: var(--white);
  border: 1px solid rgba(28, 53, 39, 0.1);
  border-radius: var(--radius);
  margin-bottom: 14px;
  overflow: hidden;
}

.acc-gallery summary {
  cursor: pointer;
  list-style: none;
  padding: 18px 22px;
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 1.1rem;
  color: var(--green-deep);
  display: flex;
  align-items: center;
  gap: 12px;
  min-height: 56px;
}

.acc-gallery summary::-webkit-details-marker { display: none; }

.acc-gallery summary::after {
  content: "";
  width: 9px;
  height: 9px;
  border-right: 2.5px solid var(--gold);
  border-bottom: 2.5px solid var(--gold);
  transform: rotate(45deg);
  transition: transform 0.2s;
  flex-shrink: 0;
  margin-left: auto;
}

.acc-gallery[open] summary::after { transform: rotate(-135deg); }

.acc-gallery summary .count { font-family: var(--font-body); font-size: 0.8rem; font-weight: 600; color: var(--ink-soft); background: var(--cream-dark); border-radius: 999px; padding: 3px 10px; }

.acc-gallery .acc-body { padding: 0 18px 20px; }
.acc-gallery .acc-body > p { font-size: 0.93rem; margin-bottom: 14px; }

.acc-gallery .grid { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }

.acc-gallery .grid img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  border-radius: 10px;
  cursor: zoom-in;
  transition: transform 0.15s;
}

.acc-gallery .grid img:active { transform: scale(0.97); }

/* ---------- Lightbox ---------- */

.lightbox {
  position: fixed;
  inset: 0;
  z-index: 300;
  background: rgba(16, 26, 19, 0.94);
  display: none;
  align-items: center;
  justify-content: center;
  padding: 5vh 0;
}

.lightbox.open { display: flex; }

/* A single image has nothing to page through, so hide the arrows and counter. */
.lightbox.lb-solo .lb-nav,
.lightbox.lb-solo .lb-count { display: none; }

.lightbox .lb-count {
  position: absolute;
  top: 18px;
  left: 50%;
  transform: translateX(-50%);
  color: rgba(255, 255, 255, 0.82);
  font-size: 0.82rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  background: rgba(0, 0, 0, 0.32);
  padding: 5px 12px;
  border-radius: 999px;
}

/* The flyer opens in the lightbox now rather than a new tab. */
.sponsor-flyer img { cursor: zoom-in; margin-inline: auto; }

.lightbox img {
  max-width: 94vw;
  max-height: 84vh;
  border-radius: 10px;
  box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
  touch-action: pinch-zoom;
}

.lightbox .lb-close {
  position: absolute;
  top: 14px;
  right: 14px;
  width: 48px;
  height: 48px;
  color: #fff;
  font-size: 1.7rem;
  background: rgba(255, 255, 255, 0.12);
  border-radius: 50%;
  border: none;
  cursor: pointer;
  line-height: 1;
}

.lightbox .lb-nav {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
  width: 48px;
  height: 48px;
  border-radius: 50%;
  background: rgba(255, 255, 255, 0.12);
  color: #fff;
  border: none;
  font-size: 1.5rem;
  cursor: pointer;
  line-height: 1;
}

.lightbox .lb-prev { left: 10px; }
.lightbox .lb-next { right: 10px; }

.lightbox .lb-caption {
  position: absolute;
  bottom: 18px;
  left: 0;
  right: 0;
  text-align: center;
  color: rgba(250, 247, 239, 0.85);
  font-size: 0.9rem;
  padding: 0 40px;
}

/* ---------- Timeline ---------- */

.timeline { position: relative; padding-left: 30px; }
.timeline::before {
  content: "";
  position: absolute;
  left: 8px;
  top: 6px;
  bottom: 6px;
  width: 2px;
  background: rgba(44, 90, 63, 0.25);
}

.timeline-item { position: relative; padding-bottom: 34px; }
.timeline-item:last-child { padding-bottom: 0; }

.timeline-item::before {
  content: "";
  position: absolute;
  left: -28px;
  top: 5px;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: var(--gold);
  border: 3px solid var(--cream);
  box-shadow: 0 0 0 2px rgba(44, 90, 63, 0.3);
}

.timeline-item .tl-date {
  font-size: 0.76rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--monarch);
}

.timeline-item h3 { margin: 5px 0 7px; }
.timeline-item p { font-size: 0.95rem; }

/* ---------- Numbered objectives ---------- */

.objective-list { list-style: none; counter-reset: obj; }
.objective-list li {
  counter-increment: obj;
  position: relative;
  padding: 13px 0 13px 54px;
  border-bottom: 1px solid rgba(28, 53, 39, 0.08);
  color: var(--ink-soft);
  font-size: 0.97rem;
}
.objective-list li:last-child { border-bottom: none; }
.objective-list li::before {
  content: counter(obj);
  position: absolute;
  left: 0;
  top: 11px;
  width: 38px;
  height: 38px;
  border-radius: 50%;
  background: rgba(232, 169, 33, 0.18);
  color: var(--green-deep);
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 1.05rem;
  display: flex;
  align-items: center;
  justify-content: center;
}

/* ---------- Profile facts (About / History) ---------- */

.profile-card {
  background: var(--white);
  border: 1px solid rgba(28, 53, 39, 0.1);
  border-radius: var(--radius);
  padding: 26px 22px;
  box-shadow: 0 2px 10px rgba(28, 53, 39, 0.05);
}

.profile-card h3 { margin-bottom: 4px; }
.profile-card .role { color: var(--monarch); font-weight: 600; font-size: 0.92rem; margin-bottom: 16px; }

.profile-facts { list-style: none; }
.profile-facts li { padding: 10px 0; border-bottom: 1px solid rgba(28, 53, 39, 0.07); font-size: 0.93rem; color: var(--ink-soft); }
.profile-facts li:last-child { border-bottom: none; }
.profile-facts li strong { display: block; color: var(--green-deep); font-size: 0.8rem; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 2px; }

/* ---------- Event / holiday cards ---------- */

.holiday-card {
  background: var(--white);
  border-radius: var(--radius);
  border: 1px solid rgba(28, 53, 39, 0.08);
  padding: 22px 20px;
  display: flex;
  gap: 16px;
  align-items: flex-start;
}

.holiday-date {
  flex-shrink: 0;
  width: 68px;
  text-align: center;
  background: rgba(232, 169, 33, 0.16);
  border-radius: 12px;
  padding: 10px 4px;
  font-weight: 700;
  color: var(--green-deep);
  font-size: 0.82rem;
  line-height: 1.3;
}

.holiday-date .month { display: block; text-transform: uppercase; letter-spacing: 0.08em; font-size: 0.7rem; color: var(--monarch); }

.event-card {
  background: var(--white);
  border-radius: var(--radius);
  border: 1px solid rgba(28, 53, 39, 0.08);
  overflow: hidden;
  margin-bottom: 30px;
  box-shadow: 0 2px 12px rgba(28, 53, 39, 0.06);
}

.event-card.featured { border: 2px solid var(--gold); }

.event-media { aspect-ratio: 16 / 9; background: var(--green-deep); position: relative; }
.event-media img, .event-media iframe { width: 100%; height: 100%; object-fit: cover; border: 0; display: block; }

.event-media .video-pending {
  position: absolute;
  inset: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  color: rgba(250, 247, 239, 0.85);
  font-weight: 600;
  font-size: 0.9rem;
  background: linear-gradient(160deg, rgba(28, 53, 39, 0.55), rgba(28, 53, 39, 0.85));
  text-align: center;
  padding: 0 20px;
}

.event-media .video-pending svg { width: 48px; height: 48px; stroke: var(--gold); fill: none; stroke-width: 1.6; }

.event-body { padding: 26px 22px; }
.event-body .event-meta {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
  font-size: 0.78rem;
  font-weight: 600;
  color: var(--green-soft);
  margin-bottom: 10px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  align-items: center;
}
.event-body .event-meta .pill { background: rgba(232, 169, 33, 0.18); color: var(--green-deep); padding: 4px 12px; border-radius: 999px; }

/* ---------- Sponsors ---------- */

.sponsor-strip { display: flex; flex-direction: column; gap: 12px; }

.sponsor-card {
  background: var(--white);
  border: 1px solid rgba(28, 53, 39, 0.1);
  border-radius: 12px;
  padding: 20px 24px;
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 1.08rem;
  color: var(--green-deep);
  display: flex;
  align-items: center;
  justify-content: center;
  min-height: 68px;
  text-align: center;
}

.sponsor-card.placeholder {
  border-style: dashed;
  color: var(--ink-soft);
  font-family: var(--font-body);
  font-size: 0.93rem;
  font-weight: 500;
  flex-wrap: wrap;
}

/* ---------- Contact ---------- */

.contact-grid { display: grid; grid-template-columns: 1fr; gap: 28px; }

.contact-info-card {
  background: var(--white);
  border-radius: var(--radius);
  padding: 30px 24px;
  border: 1px solid rgba(28, 53, 39, 0.08);
}

.contact-info-card h3 { margin-bottom: 6px; font-size: 1.05rem; }
.contact-info-card .info-block { margin-bottom: 22px; }
.contact-info-card a { font-weight: 600; }

.contact-form { display: grid; gap: 16px; }
.contact-form label { font-weight: 600; font-size: 0.9rem; color: var(--green-deep); display: block; margin-bottom: 6px; }
.contact-form input, .contact-form textarea, .contact-form select {
  width: 100%;
  min-height: 52px;
  padding: 13px 16px;
  border: 1.5px solid rgba(28, 53, 39, 0.18);
  border-radius: 12px;
  font-family: var(--font-body);
  font-size: 16px;
  background: var(--white);
  color: var(--ink);
  appearance: none;
}
.contact-form textarea { min-height: 140px; }
.contact-form input:focus, .contact-form textarea:focus, .contact-form select:focus {
  outline: none;
  border-color: var(--green);
  box-shadow: 0 0 0 3px rgba(44, 90, 63, 0.12);
}
.contact-form .btn { width: 100%; }
.contact-form .btn:disabled { opacity: 0.6; cursor: default; }
.cf-status { margin: 4px 0 0; font-size: 0.95rem; font-weight: 500; min-height: 1.2em; }
.cf-status:empty { display: none; }
.cf-status-ok { color: var(--green); }
.cf-status-error { color: #b23b2e; }

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

.site-footer {
  background: var(--green-deep);
  color: rgba(250, 247, 239, 0.75);
  padding: 48px 0 96px;
}

.footer-grid { display: grid; grid-template-columns: 1fr; gap: 32px; margin-bottom: 36px; }

.site-footer p { color: rgba(250, 247, 239, 0.75); }

.site-footer h4 { font-family: var(--font-display); color: var(--cream); margin-bottom: 14px; font-size: 1.05rem; }

.site-footer a { color: rgba(250, 247, 239, 0.75); text-decoration: none; }
.site-footer a:hover { color: var(--gold-soft); }

.footer-links { list-style: none; }
.footer-links li { margin-bottom: 4px; }
.footer-links a { display: inline-block; padding: 5px 0; }

.footer-links.cols { columns: 2; column-gap: 28px; }

.footer-bottom {
  border-top: 1px solid rgba(250, 247, 239, 0.15);
  padding-top: 24px;
  font-size: 0.82rem;
  display: flex;
  flex-direction: column;
  gap: 6px;
}

.footer-brand { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
.footer-brand .brand-text { color: var(--cream); }
.footer-brand .brand-text span { color: rgba(250, 247, 239, 0.6); }

/* ---------- Floating donate button ---------- */

.donate-fab {
  position: fixed;
  right: 16px;
  bottom: 16px;
  z-index: 90;
  background: var(--gold);
  color: var(--green-deep);
  font-weight: 700;
  font-size: 0.95rem;
  min-height: 52px;
  padding: 14px 24px;
  border-radius: 999px;
  text-decoration: none;
  box-shadow: 0 8px 24px rgba(28, 53, 39, 0.32);
  display: flex;
  align-items: center;
  gap: 8px;
  transition: padding 0.25s, transform 0.15s, background 0.2s;
  white-space: nowrap;
}

.donate-fab:hover { transform: translateY(-3px); background: var(--gold-soft); }

.donate-fab svg { width: 18px; height: 18px; fill: var(--green-deep); flex-shrink: 0; }

.donate-fab .fab-label { transition: opacity 0.2s, max-width 0.25s; max-width: 90px; overflow: hidden; }

.donate-fab.compact { padding: 14px 17px; }
.donate-fab.compact .fab-label { opacity: 0; max-width: 0; }

/* ============================================================
   >= 640px, large phones / small tablets
   ============================================================ */

@media (min-width: 640px) {
  .container { padding: 0 24px; }
  .hero { padding: 72px 0 64px; }
  .hero-ctas { flex-direction: row; }
  .hero-ctas .btn { width: auto; }
  .section { padding: 68px 0; }
  .card-grid { grid-template-columns: 1fr 1fr; }
  .tier-grid { grid-template-columns: repeat(4, 1fr); }
  .cta-band { padding: 54px 40px; }
  .cta-band .cta-btns { flex-direction: row; justify-content: center; }
  .cta-band .btn { width: auto; }
  .donate-panel { padding: 52px 44px; }
  .donate-panel .btn { width: auto; }
  .acc-gallery .grid { grid-template-columns: repeat(3, 1fr); }
  .sponsor-strip { flex-direction: row; flex-wrap: wrap; justify-content: center; }
  .footer-grid { grid-template-columns: 1.4fr 1fr 1fr; }
  .site-footer { padding-bottom: 48px; }
  .footer-bottom { flex-direction: row; justify-content: space-between; flex-wrap: wrap; }
  .gallery-grid { padding-left: 24px; padding-right: 24px; margin: 0 -24px; }
}

/* ============================================================
   >= 900px, desktop
   ============================================================ */

@media (min-width: 900px) {
  body { font-size: 17px; }
  .nav-wrap { padding: 0 24px; height: 76px; }
  .brand-logo { height: 58px; }
  .nav-toggle, .sheet-menu { display: none; }

  .main-nav { display: flex; align-items: center; gap: 26px; }

  .main-nav > a, .nav-item > a {
    text-decoration: none;
    color: var(--ink);
    font-weight: 500;
    font-size: 0.95rem;
    padding: 6px 0;
    border-bottom: 2px solid transparent;
    transition: border-color 0.2s, color 0.2s;
  }

  .main-nav > a:hover, .nav-item > a:hover { color: var(--green); border-bottom-color: var(--gold); }
  .main-nav > a.active, .nav-item > a.active { color: var(--green); border-bottom-color: var(--gold); }
  /* Reaches through the .sheet-donate wrapper. As `.main-nav > a.btn` this never
     matched anything, so the button kept the mobile sheet sizing on desktop. */
  /* margin-bottom is optical, not decorative. The text links carry 2px more
     bottom padding than top to seat the underline, which lifts their labels 1px
     above true center. The button has no underline, so it needs the same 1px
     lift (half of 2px, since the row is center-aligned) to share their baseline. */
  .main-nav .btn { border-bottom: none; color: var(--green-deep); font-weight: 600; min-height: 44px; padding: 10px 24px; margin-bottom: 2px; }
  .main-nav > .sheet-donate { display: flex; align-items: center; }

  .nav-item { position: relative; }

  .nav-item > a::after {
    content: "";
    display: inline-block;
    margin-left: 7px;
    width: 6px;
    height: 6px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: rotate(45deg) translateY(-2px);
  }

  .dropdown {
    visibility: hidden;
    opacity: 0;
    transform: translateY(6px);
    transition: opacity 0.18s, transform 0.18s, visibility 0.18s;
    position: absolute;
    top: 100%;
    left: -14px;
    min-width: 200px;
    background: var(--white);
    border: 1px solid rgba(28, 53, 39, 0.1);
    border-radius: 14px;
    box-shadow: var(--shadow);
    padding: 10px;
    z-index: 110;
  }

  .nav-item:hover .dropdown, .nav-item:focus-within .dropdown { visibility: visible; opacity: 1; transform: translateY(0); }

  .dropdown a {
    display: block;
    padding: 10px 14px;
    border-radius: 9px;
    font-size: 0.92rem;
    color: var(--ink);
    text-decoration: none;
    font-weight: 500;
  }

  .dropdown a:hover { background: var(--cream-dark); color: var(--green); }

  .hero { padding: 96px 0 84px; }
  .hero p.lead { font-size: 1.18rem; }
  .hero-grid { grid-template-columns: 1.15fr 1fr; gap: 56px; }
  .hero-grid .photo { transform: rotate(1.5deg); }

  .section { padding: 84px 0; }
  .section-head { margin-bottom: 48px; }
  .section-head.center { text-align: center; }

  .stat-band { grid-template-columns: repeat(4, 1fr); gap: 20px; }
  .stat { padding: 28px 20px; }
  .stat-band.cols-3 { grid-template-columns: repeat(3, 1fr); }

  .card-grid { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 24px; }

  .species { grid-template-columns: 1fr 1fr; gap: 48px; padding: 48px 0; }

  .two-col { grid-template-columns: 1fr 1fr; gap: 56px; }

  .gallery-grid {
    grid-auto-flow: row;
    grid-template-columns: repeat(3, 1fr);
    grid-auto-columns: unset;
    gap: 18px;
    overflow-x: visible;
    padding: 0;
    margin: 0;
  }

  .swipe-hint { display: none; }

  .contact-grid { grid-template-columns: 1fr 1.2fr; gap: 48px; }
  .contact-form .btn, .contact-info-card .btn { width: auto; }

  .event-body { padding: 32px 34px; }

  .acc-gallery summary { padding: 20px 26px; font-size: 1.15rem; }
  .acc-gallery .acc-body { padding: 0 26px 26px; }
  .acc-gallery .grid { grid-template-columns: repeat(4, 1fr); }

  .donate-fab { right: 22px; bottom: 22px; }

  .poll-scene { width: 330px; height: 194px; top: 8%; right: 5%; }
  .poll-butterfly { width: 54px; height: 54px; top: auto; bottom: 18%; right: 9%; }
  .poll-skipper { width: 34px; height: 34px; bottom: 10%; left: 3%; }
  .poll-hummingbird { width: 60px; height: 60px; top: 10%; left: 3%; }

  /* Heroes with a photo column: keep the flock over the text side and margins */
  .hero:has(.hero-grid) .poll-scene { right: 46%; top: 2%; width: 260px; height: 152px; }
  .hero:has(.hero-grid) .poll-butterfly { bottom: 10%; right: auto; left: 38%; }
  .hero:has(.hero-grid) .poll-skipper { left: 2%; bottom: 14%; }
  .hero:has(.hero-grid) .poll-hummingbird { left: 1.5%; top: 18px; }
  .section-green { padding-top: 116px; }
  .section-green::before { height: 64px; }
  .cta-band::before { width: 160px; height: 160px; }

  .timeline { padding-left: 38px; }
  .timeline::before { left: 11px; }
  .timeline-item::before { left: -34px; }
}

/* ============================================================
   Below-the-fold design system: pushing the brand through
   every component. Honeycomb + bloom motifs, editorial rhythm.
   ============================================================ */

/* --- Section texture: white sections get the faint botanical field + a soft honey glow --- */

.section { position: relative; }

.section-alt {
  background-image:
    radial-gradient(ellipse at 92% 0%, rgba(232, 169, 33, 0.09), transparent 46%),
    radial-gradient(ellipse at 0% 100%, rgba(74, 122, 92, 0.07), transparent 42%),
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='190' height='190' viewBox='0 0 190 190'%3E%3Cg fill='none'%3E%3Ccircle cx='30' cy='34' r='3' fill='rgba(232,169,33,0.07)'/%3E%3Cpath d='M138 22c8 4 10 14 4 22-8-4-10-14-4-22z' fill='rgba(44,90,63,0.05)'/%3E%3Cpath d='M42 140c10-2 18 4 20 14-10 2-18-4-20-14z' fill='rgba(44,90,63,0.045)'/%3E%3Ccircle cx='160' cy='150' r='2.5' fill='rgba(217,108,47,0.06)'/%3E%3C/g%3E%3C/svg%3E");
  background-size: auto, auto, 190px 190px;
  overflow: hidden;
}

/* Giant bloom line-art anchored in white sections */
.section-alt::after {
  content: "";
  position: absolute;
  right: -70px;
  bottom: -70px;
  width: 300px;
  height: 300px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 120'%3E%3Cg fill='none' stroke='rgba(44,90,63,0.1)' stroke-width='1.6'%3E%3Ccircle cx='60' cy='60' r='9'/%3E%3Cpath d='M60 48c-5-12 0-24 0-24s5 12 0 24zM60 72c-5 12 0 24 0 24s5-12 0-24zM48 60c-12-5-24 0-24 0s12 5 24 0zM72 60c12-5 24 0 24 0s-12 5-24 0zM51 51C39 47 33 36 33 36s13 1 18 15zM69 69c12 4 18 15 18 15s-13-1-18-15zM69 51c4-12 15-18 15-18s-1 13-15 18zM51 69c-4 12-15 18-15 18s1-13 15-18z'/%3E%3Ccircle cx='60' cy='60' r='4' fill='rgba(232,169,33,0.14)' stroke='none'/%3E%3C/g%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
  transform: rotate(18deg);
  pointer-events: none;
}

.section-alt > .container { position: relative; z-index: 1; }

/* --- Section headings: hand-drawn sprig flourish --- */

.section-head h2::after {
  content: "";
  display: block;
  width: 88px;
  height: 14px;
  margin-top: 16px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 88 14'%3E%3Cpath d='M2 10 Q 24 4 46 8 T 78 6' fill='none' stroke='%234a7a5c' stroke-width='1.8' stroke-linecap='round'/%3E%3Cpath d='M18 8c-2-5 1-8 4-9 1 4-1 8-4 9z' fill='%234a7a5c'/%3E%3Cpath d='M42 8c-1-5 2-8 5-8 0 4-2 7-5 8z' fill='%23e8a921'/%3E%3Cpath d='M62 7c-1-4 2-7 4-7 0 3-1 6-4 7z' fill='%234a7a5c'/%3E%3Ccircle cx='84' cy='6' r='3' fill='%23e8a921'/%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
}

.section-head.center h2::after { margin-left: auto; margin-right: auto; }

.section-green .section-head h2::after {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 88 14'%3E%3Cpath d='M2 10 Q 24 4 46 8 T 78 6' fill='none' stroke='rgba(245,201,92,0.75)' stroke-width='1.8' stroke-linecap='round'/%3E%3Cpath d='M18 8c-2-5 1-8 4-9 1 4-1 8-4 9z' fill='rgba(245,201,92,0.75)'/%3E%3Cpath d='M42 8c-1-5 2-8 5-8 0 4-2 7-5 8z' fill='%23e8a921'/%3E%3Cpath d='M62 7c-1-4 2-7 4-7 0 3-1 6-4 7z' fill='rgba(245,201,92,0.75)'/%3E%3Ccircle cx='84' cy='6' r='3' fill='%23e8a921'/%3E%3C/svg%3E");
}

/* --- Cards: color-keyed top accents, hexagon icon chips, corner bloom --- */

.card { position: relative; overflow: hidden; border-top: 3px solid var(--gold); }
.card-grid .card:nth-child(3n+2) { border-top-color: var(--monarch); }
.card-grid .card:nth-child(3n) { border-top-color: var(--green-soft); }

.card::after {
  content: "";
  position: absolute;
  right: -26px;
  bottom: -26px;
  width: 110px;
  height: 110px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 120'%3E%3Cg fill='none' stroke='rgba(232,169,33,0.16)' stroke-width='2'%3E%3Ccircle cx='60' cy='60' r='9'/%3E%3Cpath d='M60 48c-5-12 0-24 0-24s5 12 0 24zM60 72c-5 12 0 24 0 24s5-12 0-24zM48 60c-12-5-24 0-24 0s12 5 24 0zM72 60c12-5 24 0 24 0s-12 5-24 0zM51 51C39 47 33 36 33 36s13 1 18 15zM69 69c12 4 18 15 18 15s-13-1-18-15zM69 51c4-12 15-18 15-18s-1 13-15 18zM51 69c-4 12-15 18-15 18s1-13 15-18z'/%3E%3C/g%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
  transform: rotate(14deg);
  pointer-events: none;
  transition: transform 0.35s ease;
}

.card:hover::after { transform: rotate(32deg) scale(1.08); }

.card .icon {
  clip-path: polygon(50% 0, 93% 25%, 93% 75%, 50% 100%, 7% 75%, 7% 25%);
  border-radius: 0;
  width: 54px;
  height: 56px;
  background: linear-gradient(160deg, rgba(232, 169, 33, 0.28), rgba(232, 169, 33, 0.12));
}

.card-grid .card:nth-child(3n+2) .icon { background: linear-gradient(160deg, rgba(217, 108, 47, 0.24), rgba(217, 108, 47, 0.1)); }
.card-grid .card:nth-child(3n) .icon { background: linear-gradient(160deg, rgba(74, 122, 92, 0.24), rgba(74, 122, 92, 0.1)); }

.card .card-photo { margin-top: -33px; }

/* --- Stats: species watermarks behind the numbers --- */

.stat { position: relative; overflow: hidden; }

.stat::before {
  content: "";
  position: absolute;
  right: -12px;
  bottom: -12px;
  width: 72px;
  height: 72px;
  opacity: 0.4;
  background-size: contain;
  background-repeat: no-repeat;
  transform: rotate(-12deg);
  pointer-events: none;
}

.stat-band .stat:nth-child(4n+1)::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg fill='none' stroke='rgba(232,169,33,0.5)' stroke-width='2'%3E%3Cellipse cx='34' cy='38' rx='14' ry='11'/%3E%3Cpath d='M28 28v20M35 27v22M42 28v20'/%3E%3Cellipse cx='26' cy='20' rx='10' ry='6' transform='rotate(-26 26 20)'/%3E%3Cellipse cx='42' cy='19' rx='10' ry='6' transform='rotate(20 42 19)'/%3E%3C/g%3E%3C/svg%3E"); }
.stat-band .stat:nth-child(4n+2)::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg fill='none' stroke='rgba(217,108,47,0.5)' stroke-width='2'%3E%3Cpath d='M30 32C22 20 10 13 5 18c-3 9 9 19 21 20z'/%3E%3Cpath d='M34 32c8-12 20-19 25-14 3 9-9 19-21 20z'/%3E%3Cellipse cx='32' cy='35' rx='2' ry='9' fill='rgba(217,108,47,0.5)' stroke='none'/%3E%3C/g%3E%3C/svg%3E"); }
.stat-band .stat:nth-child(4n+3)::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg fill='none' stroke='rgba(74,122,92,0.55)' stroke-width='2'%3E%3Cpath d='M32 54c14-6 20-18 16-38-16 2-24 12-22 26 1 6 3 9 6 12z'/%3E%3Cpath d='M32 54C24 40 26 28 36 20'/%3E%3C/g%3E%3C/svg%3E"); }
.stat-band .stat:nth-child(4n)::before { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg fill='none' stroke='rgba(232,169,33,0.5)' stroke-width='2'%3E%3Ccircle cx='32' cy='32' r='5'/%3E%3Cpath d='M32 25c-3-7 0-14 0-14s3 7 0 14zM32 39c-3 7 0 14 0 14s3-7 0-14zM25 32c-7-3-14 0-14 0s7 3 14 0zM39 32c7-3 14 0 14 0s-7 3-14 0zM27 27c-7-2-10-9-10-9s8 1 10 9zM37 37c7 2 10 9 10 9s-8-1-10-9zM37 27c2-7 9-10 9-10s-1 8-9 10zM27 37c-2 7-9 10-9 10s1-8 9-10z'/%3E%3C/g%3E%3C/svg%3E"); }

/* --- Photos in content: print-style frames --- */

.two-col .photo, .founder-photo, .hero-grid .photo {
  border: 8px solid var(--white);
  box-shadow: 0 3px 8px rgba(28, 53, 39, 0.08), 0 18px 40px rgba(28, 53, 39, 0.16);
}

.two-col .photo { transform: rotate(-1.2deg); }
.section-alt .two-col .photo { transform: rotate(1.2deg); }

/* --- Fact tables: honey zebra + header dot --- */

.fact-table tr:nth-child(even) td { background: rgba(232, 169, 33, 0.06); }
.fact-table td:last-child { color: var(--monarch); }

/* --- Donation tiers: honey-dipped --- */

.tier {
  background: linear-gradient(180deg, rgba(232, 169, 33, 0.14), var(--white) 42%);
  position: relative;
}

.tier .amount::after {
  content: "";
  display: block;
  width: 34px;
  height: 3px;
  border-radius: 3px;
  background: var(--gold);
  margin: 10px auto 0;
}

/* --- Objectives: honeycomb cells --- */

.objective-list li::before {
  clip-path: polygon(50% 0, 96% 26%, 96% 74%, 50% 100%, 4% 74%, 4% 26%);
  border-radius: 0;
  width: 40px;
  height: 42px;
  background: linear-gradient(160deg, rgba(232, 169, 33, 0.36), rgba(232, 169, 33, 0.16));
}

/* --- Founder quote: oversized mark + honey rule --- */

.founder-quote { position: relative; padding-top: 46px; }

.founder-quote::before {
  content: "\201C";
  position: absolute;
  top: -8px;
  left: 50%;
  transform: translateX(-50%);
  font-family: var(--font-display);
  font-size: 6.5rem;
  line-height: 1;
  color: var(--gold);
  opacity: 0.55;
}

.founder-quote cite::before {
  content: "";
  display: block;
  width: 44px;
  height: 3px;
  border-radius: 3px;
  background: var(--gold);
  margin: 0 auto 14px;
}

/* --- Accordion galleries: bloom bullet on the summary --- */

.acc-gallery summary::before {
  content: "";
  width: 22px;
  height: 22px;
  flex-shrink: 0;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cg fill='%23e8a921'%3E%3Ccircle cx='12' cy='12' r='2.6' fill='%23d96c2f'/%3E%3Cellipse cx='12' cy='5.5' rx='2.6' ry='4'/%3E%3Cellipse cx='12' cy='18.5' rx='2.6' ry='4'/%3E%3Cellipse cx='5.5' cy='12' rx='4' ry='2.6'/%3E%3Cellipse cx='18.5' cy='12' rx='4' ry='2.6'/%3E%3Cellipse cx='7.4' cy='7.4' rx='2.4' ry='3.6' transform='rotate(-45 7.4 7.4)'/%3E%3Cellipse cx='16.6' cy='16.6' rx='2.4' ry='3.6' transform='rotate(-45 16.6 16.6)'/%3E%3Cellipse cx='16.6' cy='7.4' rx='2.4' ry='3.6' transform='rotate(45 16.6 7.4)'/%3E%3Cellipse cx='7.4' cy='16.6' rx='2.4' ry='3.6' transform='rotate(45 7.4 16.6)'/%3E%3C/g%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
}

/* --- Timeline: gradient stem + blooming dots --- */

.timeline::before { background: linear-gradient(180deg, var(--gold), var(--green-soft) 55%, rgba(44, 90, 63, 0.2)); width: 2.5px; }

.timeline-item::before { box-shadow: 0 0 0 2px rgba(44, 90, 63, 0.3), 0 0 0 7px rgba(232, 169, 33, 0.12); }

/* --- CTA band: mirrored bee to balance the butterfly --- */

.cta-band { box-shadow: inset 0 0 0 1.5px rgba(232, 169, 33, 0.28); }

.cta-band .cta-bee-note { display: none; }

.cta-band::after {
  background:
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg fill='none' stroke='rgba(232,169,33,0.3)' stroke-width='2'%3E%3Cellipse cx='34' cy='38' rx='14' ry='11'/%3E%3Cpath d='M28 28v20M35 27v22M42 28v20'/%3E%3Cellipse cx='26' cy='20' rx='10' ry='6' transform='rotate(-26 26 20)'/%3E%3Cellipse cx='42' cy='19' rx='10' ry='6' transform='rotate(20 42 19)'/%3E%3C/g%3E%3C/svg%3E") right 26px top 24px / 58px no-repeat,
    radial-gradient(circle, rgba(232, 169, 33, 0.25), transparent 70%);
}

/* --- Contact info card: brand top bar --- */

.contact-info-card { border-top: 4px solid var(--gold); }

/* --- Holiday date chips: hexagon --- */

.holiday-date {
  clip-path: polygon(50% 0, 100% 24%, 100% 76%, 50% 100%, 0 76%, 0 24%);
  border-radius: 0;
  padding: 16px 4px;
}

/* --- Sponsor cards: gold seal dot --- */

.sponsor-card:not(.placeholder)::before {
  content: "";
  width: 10px;
  height: 10px;
  border-radius: 50%;
  background: radial-gradient(circle at 35% 35%, var(--gold-soft), var(--gold));
  margin-right: 12px;
  flex-shrink: 0;
}

/* Sprig flourish for headings inside two-col layouts too */
.two-col h2::after {
  content: "";
  display: block;
  width: 88px;
  height: 14px;
  margin-top: 16px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 88 14'%3E%3Cpath d='M2 10 Q 24 4 46 8 T 78 6' fill='none' stroke='%234a7a5c' stroke-width='1.8' stroke-linecap='round'/%3E%3Cpath d='M18 8c-2-5 1-8 4-9 1 4-1 8-4 9z' fill='%234a7a5c'/%3E%3Cpath d='M42 8c-1-5 2-8 5-8 0 4-2 7-5 8z' fill='%23e8a921'/%3E%3Cpath d='M62 7c-1-4 2-7 4-7 0 3-1 6-4 7z' fill='%234a7a5c'/%3E%3Ccircle cx='84' cy='6' r='3' fill='%23e8a921'/%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
}

/* ============================================================
   Photo statement band: full-bleed image, one line, three numbers
   ============================================================ */

.photo-band {
  position: relative;
  background-size: cover;
  background-position: center;
  padding: 84px 0;
  overflow: hidden;
}

.photo-band::before {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(200deg, rgba(28, 53, 39, 0.72), rgba(28, 53, 39, 0.9));
}

.photo-band .container { position: relative; z-index: 1; }

.band-kicker {
  font-size: 0.74rem;
  font-weight: 700;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--gold);
  display: block;
  margin-bottom: 14px;
}

.band-statement {
  font-family: var(--font-display);
  font-size: clamp(1.55rem, 5.8vw, 2.5rem);
  font-style: italic;
  line-height: 1.35;
  color: var(--cream);
  max-width: 720px;
  text-wrap: balance;
}

.mini-stats {
  display: flex;
  flex-wrap: wrap;
  gap: 12px 36px;
  margin-top: 30px;
}

.mini-stats > div { display: flex; align-items: baseline; gap: 10px; }

.mini-stats b {
  font-family: var(--font-display);
  font-size: 1.7rem;
  font-weight: 700;
  color: var(--gold);
}

.mini-stats span { font-size: 0.88rem; color: rgba(250, 247, 239, 0.8); }

@media (min-width: 900px) {
  .photo-band { padding: 120px 0; }
  .mini-stats { gap: 12px 56px; margin-top: 38px; }
  .mini-stats b { font-size: 2.1rem; }
}

/* ============================================================
   Signature pass: unified photo grade, paper grain, page
   transitions, editorial type, field-guide plates, seed-packet
   tiers, meadow footer, micro-interactions, hero choreography,
   scroll companion bee.
   ============================================================ */

/* --- Unified photo grade: one warm, slightly filmic treatment for every photograph --- */

.photo img, .card-photo img, .acc-gallery .grid img, .event-media img {
  filter: sepia(0.12) saturate(1.16) contrast(1.05) brightness(1.01);
}

.photo { position: relative; }
.photo::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: inherit;
  box-shadow: inset 0 0 36px rgba(28, 53, 39, 0.16);
  pointer-events: none;
}

.photo img { transition: transform 0.7s cubic-bezier(0.2, 0.7, 0.3, 1); }
.photo:hover img { transform: scale(1.035); }

/* --- Paper grain: near-invisible print texture over everything --- */

body::after {
  content: "";
  position: fixed;
  inset: 0;
  z-index: 999;
  pointer-events: none;
  opacity: 0.05;
  mix-blend-mode: multiply;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='220' height='220'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='220' height='220' filter='url(%23n)'/%3E%3C/svg%3E");
  background-size: 220px 220px;
}

/* --- Cross-fade page transitions (progressive enhancement, Chrome/Safari) --- */

@view-transition { navigation: auto; }

@media (prefers-reduced-motion: no-preference) {
  ::view-transition-old(root) { animation: vt-out 0.2s ease both; }
  ::view-transition-new(root) { animation: vt-in 0.32s ease both; }
}

@keyframes vt-out { to { opacity: 0; } }
@keyframes vt-in { from { opacity: 0; transform: translateY(10px); } }

/* --- Editorial type: drop caps, selection color, bigger stat numerals --- */

.drop-cap::first-letter {
  font-family: var(--font-display);
  font-weight: 700;
  font-size: 3.3em;
  line-height: 0.8;
  float: left;
  padding: 8px 12px 0 0;
  color: var(--green);
}

::selection { background: var(--gold-soft); color: var(--green-deep); }

@media (min-width: 900px) {
  .stat .num { font-size: 3.1rem; }
}

/* --- Field-guide plates: species presented as numbered botanical specimens --- */

.species {
  background: var(--white);
  border: 1px solid rgba(28, 53, 39, 0.16);
  outline: 1px solid rgba(28, 53, 39, 0.14);
  outline-offset: 5px;
  border-radius: 4px;
  border-bottom: 1px solid rgba(28, 53, 39, 0.16);
  padding: 34px 22px 30px;
  margin: 14px 0 46px;
  position: relative;
}

.species:last-child { margin-bottom: 8px; border-bottom: 1px solid rgba(28, 53, 39, 0.16); }

.species .plate-no {
  position: absolute;
  top: -13px;
  left: 16px;
  background: var(--white);
  border: 1px solid rgba(28, 53, 39, 0.2);
  border-radius: 3px;
  padding: 3px 12px;
  font-size: 0.66rem;
  font-weight: 700;
  letter-spacing: 0.24em;
  text-transform: uppercase;
  color: var(--green-soft);
}

.species .latin {
  font-family: var(--font-display);
  font-style: italic;
  font-size: 1rem;
  color: var(--monarch);
  margin-bottom: 10px;
}

.species::after {
  content: "";
  position: absolute;
  top: 10px;
  right: 12px;
  width: 54px;
  height: 54px;
  opacity: 0.5;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 120 120'%3E%3Cg fill='none' stroke='rgba(44,90,63,0.5)' stroke-width='2.4'%3E%3Ccircle cx='60' cy='60' r='9'/%3E%3Cpath d='M60 48c-5-12 0-24 0-24s5 12 0 24zM60 72c-5 12 0 24 0 24s5-12 0-24zM48 60c-12-5-24 0-24 0s12 5 24 0zM72 60c12-5 24 0 24 0s-12 5-24 0zM51 51C39 47 33 36 33 36s13 1 18 15zM69 69c12 4 18 15 18 15s-13-1-18-15zM69 51c4-12 15-18 15-18s-1 13-15 18zM51 69c-4 12-15 18-15 18s1-13 15-18z'/%3E%3C/g%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
  pointer-events: none;
}

@media (min-width: 900px) {
  .species { padding: 46px 44px 42px; }
  .species .plate-no { left: 28px; }
}

/* --- Seed-packet donation tiers --- */

.tier {
  background:
    radial-gradient(circle at 8px -4px, transparent 7px, rgba(232, 169, 33, 0.34) 7.5px) top left / 16px 13px repeat-x,
    linear-gradient(180deg, rgba(232, 169, 33, 0.13), rgba(250, 247, 239, 0.5) 38%),
    #fdfbf3;
  border: 1.5px dashed rgba(28, 53, 39, 0.3);
  border-radius: 6px;
  padding-top: 46px;
  position: relative;
  overflow: hidden;
}

.tier::before {
  content: "Seed Packet";
  position: absolute;
  top: 18px;
  left: 50%;
  transform: translateX(-50%);
  font-size: 0.6rem;
  font-weight: 700;
  letter-spacing: 0.26em;
  text-transform: uppercase;
  color: var(--green-soft);
  white-space: nowrap;
}

.tier::after {
  content: "";
  position: absolute;
  right: -10px;
  bottom: -10px;
  width: 64px;
  height: 64px;
  opacity: 0.45;
  transform: rotate(-10deg);
  background-size: contain;
  background-repeat: no-repeat;
  pointer-events: none;
}

.tier-grid .tier:nth-child(4n+1)::after { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg fill='none' stroke='rgba(217,108,47,0.55)' stroke-width='2'%3E%3Ccircle cx='32' cy='32' r='5'/%3E%3Cpath d='M32 25c-3-7 0-14 0-14s3 7 0 14zM32 39c-3 7 0 14 0 14s3-7 0-14zM25 32c-7-3-14 0-14 0s7 3 14 0zM39 32c7-3 14 0 14 0s-7 3-14 0zM27 27c-7-2-10-9-10-9s8 1 10 9zM37 37c7 2 10 9 10 9s-8-1-10-9zM37 27c2-7 9-10 9-10s-1 8-9 10zM27 37c-2 7-9 10-9 10s1-8 9-10z'/%3E%3C/g%3E%3C/svg%3E"); }
.tier-grid .tier:nth-child(4n+2)::after { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg fill='none' stroke='rgba(74,122,92,0.6)' stroke-width='2'%3E%3Cpath d='M32 54c14-6 20-18 16-38-16 2-24 12-22 26 1 6 3 9 6 12z'/%3E%3Cpath d='M32 54C24 40 26 28 36 20'/%3E%3C/g%3E%3C/svg%3E"); }
.tier-grid .tier:nth-child(4n+3)::after { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg fill='none' stroke='rgba(232,169,33,0.6)' stroke-width='2'%3E%3Cellipse cx='34' cy='38' rx='14' ry='11'/%3E%3Cpath d='M28 28v20M35 27v22M42 28v20'/%3E%3Cellipse cx='26' cy='20' rx='10' ry='6' transform='rotate(-26 26 20)'/%3E%3Cellipse cx='42' cy='19' rx='10' ry='6' transform='rotate(20 42 19)'/%3E%3C/g%3E%3C/svg%3E"); }
.tier-grid .tier:nth-child(4n)::after { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Cg fill='none' stroke='rgba(217,108,47,0.5)' stroke-width='2'%3E%3Cpath d='M30 32C22 20 10 13 5 18c-3 9 9 19 21 20z'/%3E%3Cpath d='M34 32c8-12 20-19 25-14 3 9-9 19-21 20z'/%3E%3Cellipse cx='32' cy='35' rx='2' ry='9' fill='rgba(217,108,47,0.5)' stroke='none'/%3E%3C/g%3E%3C/svg%3E"); }

/* --- Micro-interactions: button shine sweep, growing nav underline, FAB wiggle --- */

.btn { position: relative; overflow: hidden; }

.btn::after {
  content: "";
  position: absolute;
  top: 0;
  left: -85%;
  width: 55%;
  height: 100%;
  background: linear-gradient(100deg, transparent, rgba(255, 255, 255, 0.5), transparent);
  transform: skewX(-18deg);
  transition: left 0.5s ease;
  pointer-events: none;
}

.btn:hover::after { left: 130%; }

@media (min-width: 900px) {
  .main-nav > a:not(.btn), .nav-item > a {
    /* inline-flex is load-bearing. The plain links are flex items of .main-nav and
       get blockified; the dropdown triggers are nested inside .nav-item and would
       otherwise compute to display:inline, where vertical padding does not affect
       the box. That put their labels 1.5px lower than everything else and moved
       the hover underline with them. */
    display: inline-flex;
    align-items: center;
    border-bottom: none;
    position: relative;
    padding-bottom: 8px;
  }

  .nav-item { display: flex; align-items: center; }
  .main-nav > a:not(.btn)::before, .nav-item > a::before {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    height: 2px;
    border-radius: 2px;
    background: var(--gold);
    transform: scaleX(0);
    transform-origin: left;
    transition: transform 0.24s ease;
  }
  .main-nav > a:not(.btn):hover::before, .nav-item > a:hover::before,
  .main-nav > a:not(.btn).active::before, .nav-item > a.active::before { transform: scaleX(1); }
}

.donate-fab.compact svg { animation: fab-wiggle 0.5s ease 1; }

@keyframes fab-wiggle {
  0%, 100% { transform: rotate(0); }
  30% { transform: rotate(-16deg); }
  62% { transform: rotate(13deg); }
}

/* --- Hero entrance choreography --- */

@media (prefers-reduced-motion: no-preference) {
  .hero .eyebrow, .hero h1, .hero p.lead, .hero-ctas {
    animation: rise-in 0.65s cubic-bezier(0.2, 0.7, 0.3, 1) both;
  }
  .hero h1 { animation-delay: 0.09s; }
  .hero p.lead { animation-delay: 0.18s; }
  .hero-ctas { animation-delay: 0.27s; }
  .hero-grid .photo { animation: photo-in 0.9s cubic-bezier(0.2, 0.7, 0.3, 1) 0.22s both; }
}

@keyframes rise-in { from { opacity: 0; transform: translateY(18px); } }
@keyframes photo-in { from { opacity: 0; transform: scale(0.955); } }

/* --- Meadow footer: silhouette scene rising into the footer green --- */

.footer-meadow { display: block; margin-bottom: -1px; }

.footer-meadow svg {
  display: block;
  width: 100%;
  height: clamp(72px, 11vw, 130px);
  background: var(--cream);
}

.section-alt + .site-footer .footer-meadow svg,
.section-alt + footer .footer-meadow svg { background: var(--white); }

/* --- Scroll companion bee --- */

.scroll-bee {
  position: fixed;
  top: 0;
  left: 0;
  width: 34px;
  height: 34px;
  z-index: 60;
  pointer-events: none;
  opacity: 0;
  transition: opacity 0.45s ease;
  will-change: transform;
}

.scroll-bee.visible { opacity: 0.95; }

.scroll-bee svg { width: 100%; height: 100%; overflow: visible; filter: drop-shadow(0 3px 6px rgba(28, 53, 39, 0.22)); animation: sb-hover 1.7s ease-in-out infinite; }

.scroll-bee .sb-wing { transform-origin: 30px 22px; animation: hb-flap 0.16s linear infinite alternate; }

@keyframes sb-hover {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-5px); }
}

@media (min-width: 900px) { .scroll-bee { width: 44px; height: 44px; } }

/* Meadow sits flush with the page above it; footer content spacing moves below the scene */
.site-footer { padding-top: 0; }
.footer-meadow { margin-top: 0; }
.footer-meadow + .container { padding-top: 30px; }

/* ============================================================
   Refinement pass: editorial eyebrows (no more AI pill),
   specimen-tag badges, donor-plaque sponsor cards, nav polish.
   ============================================================ */

/* --- Eyebrow: bare letterspaced caps behind a gold rule, no bubble --- */

.eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  background: none;
  border: none;
  padding: 0;
  border-radius: 0;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.2em;
  color: var(--green-soft);
  margin-bottom: 20px;
}

.eyebrow::before {
  content: "";
  width: 36px;
  height: 2px;
  border-radius: 2px;
  background: linear-gradient(90deg, var(--gold), var(--monarch));
  flex-shrink: 0;
}

/* --- Badges: conservation-status stamps instead of pastel pills --- */

.badge, .species .badge {
  display: inline-flex;
  align-items: center;
  background: none;
  border: 1px solid rgba(217, 108, 47, 0.45);
  border-radius: 3px;
  color: var(--monarch);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  padding: 5px 12px;
}

.badge::before {
  content: "";
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: var(--monarch);
  margin-right: 9px;
  flex-shrink: 0;
}

/* --- Tags and meta pills: square specimen tags --- */

.tag {
  background: none;
  border: 1px solid rgba(44, 90, 63, 0.32);
  border-radius: 3px;
  color: var(--green);
  padding: 4px 11px;
}

.event-body .event-meta .pill {
  background: none;
  border: 1px solid rgba(232, 169, 33, 0.6);
  border-radius: 3px;
  color: var(--green-deep);
  padding: 4px 11px;
}

/* --- Sponsor cards: engraved donor plaques --- */

.sponsor-card {
  flex-direction: column;
  gap: 5px;
  background: linear-gradient(180deg, #fffdf6, #f8f3e4);
  border: 1px solid rgba(28, 53, 39, 0.18);
  border-radius: 10px;
  box-shadow:
    inset 0 0 0 4px rgba(255, 255, 255, 0.9),
    inset 0 0 0 5px rgba(232, 169, 33, 0.5),
    0 8px 22px rgba(28, 53, 39, 0.08);
  padding: 26px 36px 22px;
  min-height: 0;
  transition: transform 0.2s, box-shadow 0.2s;
}

.sponsor-card:hover {
  transform: translateY(-3px);
  box-shadow:
    inset 0 0 0 4px rgba(255, 255, 255, 0.9),
    inset 0 0 0 5px rgba(232, 169, 33, 0.75),
    0 14px 30px rgba(28, 53, 39, 0.14);
}

.sponsor-card:not(.placeholder)::before {
  content: "";
  width: 34px;
  height: 34px;
  border-radius: 0;
  margin: 0 0 10px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 48 48'%3E%3Ccircle cx='24' cy='24' r='21' fill='none' stroke='%23c9911d' stroke-width='1.6'/%3E%3Ccircle cx='24' cy='24' r='17.5' fill='none' stroke='%23c9911d' stroke-width='0.9' stroke-dasharray='2.4 2.6'/%3E%3Cg fill='%23c9911d'%3E%3Ccircle cx='24' cy='24' r='2.6'/%3E%3Cellipse cx='24' cy='15.5' rx='2.4' ry='5'/%3E%3Cellipse cx='24' cy='32.5' rx='2.4' ry='5'/%3E%3Cellipse cx='15.5' cy='24' rx='5' ry='2.4'/%3E%3Cellipse cx='32.5' cy='24' rx='5' ry='2.4'/%3E%3Cellipse cx='18' cy='18' rx='2.2' ry='4.2' transform='rotate(-45 18 18)'/%3E%3Cellipse cx='30' cy='30' rx='2.2' ry='4.2' transform='rotate(-45 30 30)'/%3E%3Cellipse cx='30' cy='18' rx='2.2' ry='4.2' transform='rotate(45 30 18)'/%3E%3Cellipse cx='18' cy='30' rx='2.2' ry='4.2' transform='rotate(45 18 30)'/%3E%3C/g%3E%3C/svg%3E");
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
}

.sponsor-name { font-family: var(--font-display); font-weight: 600; font-size: 1.12rem; color: var(--green-deep); }

.sponsor-role {
  font-family: var(--font-body);
  font-size: 0.64rem;
  font-weight: 700;
  letter-spacing: 0.22em;
  text-transform: uppercase;
  color: var(--green-soft);
}

.sponsor-card.placeholder {
  background: none;
  box-shadow: none;
  border: 1.5px dashed rgba(28, 53, 39, 0.28);
}

.sponsor-card.placeholder .sponsor-name { color: var(--ink-soft); font-weight: 500; }
.sponsor-card.placeholder .sponsor-role a { color: var(--monarch); font-weight: 700; text-decoration: none; }
.sponsor-card.placeholder .sponsor-role a:hover { text-decoration: underline; }

@media (min-width: 640px) {
  .sponsor-strip { gap: 18px; }
  .sponsor-card { min-width: 250px; }
}

/* --- Mobile sheet menu: numbered index, staggered entrance, labeled rules --- */

.sheet-menu { counter-reset: sheetnav; }

.sheet-menu > a:not(.sub) { counter-increment: sheetnav; font-size: 1.3rem; gap: 14px; }

.sheet-menu > a:not(.sub)::before {
  content: counter(sheetnav, decimal-leading-zero);
  font-family: var(--font-body);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  color: var(--gold);
  transform: translateY(-4px);
}

.sheet-menu a.active::before { color: var(--monarch); }

.sheet-menu .sheet-label {
  display: flex;
  align-items: center;
  gap: 12px;
}

.sheet-menu .sheet-label::after {
  content: "";
  flex: 1;
  height: 1px;
  background: rgba(28, 53, 39, 0.12);
}

.menu-open .sheet-menu > * { animation: sheet-item-in 0.4s cubic-bezier(0.2, 0.7, 0.3, 1) both; }
.menu-open .sheet-menu > *:nth-child(1) { animation-delay: 0.05s; }
.menu-open .sheet-menu > *:nth-child(2) { animation-delay: 0.08s; }
.menu-open .sheet-menu > *:nth-child(3) { animation-delay: 0.11s; }
.menu-open .sheet-menu > *:nth-child(4) { animation-delay: 0.14s; }
.menu-open .sheet-menu > *:nth-child(5) { animation-delay: 0.17s; }
.menu-open .sheet-menu > *:nth-child(6) { animation-delay: 0.2s; }
.menu-open .sheet-menu > *:nth-child(7) { animation-delay: 0.23s; }
.menu-open .sheet-menu > *:nth-child(8) { animation-delay: 0.26s; }
.menu-open .sheet-menu > *:nth-child(9) { animation-delay: 0.29s; }
.menu-open .sheet-menu > *:nth-child(10) { animation-delay: 0.32s; }
.menu-open .sheet-menu > *:nth-child(11) { animation-delay: 0.35s; }
.menu-open .sheet-menu > *:nth-child(12) { animation-delay: 0.38s; }

@keyframes sheet-item-in {
  from { opacity: 0; transform: translateX(26px); }
}

@media (prefers-reduced-motion: reduce) {
  .menu-open .sheet-menu > * { animation: none; }
}

/* --- Hamburger: asymmetric middle line --- */

.nav-toggle span:nth-child(2) { width: 15px; transform: translateX(4.5px); }
.menu-open .nav-toggle span:nth-child(2) { opacity: 0; }

/* --- Desktop dropdown: gold crest bar + sliding items --- */

@media (min-width: 900px) {
  .dropdown { border-top: 3px solid var(--gold); border-top-left-radius: 6px; border-top-right-radius: 6px; padding-top: 12px; }
  .dropdown a { transition: background 0.15s, padding-left 0.18s, color 0.15s; }
  .dropdown a:hover { padding-left: 20px; }
}

/* --- Sponsor plaques carry the real logos; the generic seal retires --- */

.sponsor-card:not(.placeholder)::before { content: none; }

.sponsor-logo {
  height: 46px;
  width: auto;
  max-width: min(240px, 100%);
  object-fit: contain;
  margin-bottom: 12px;
}

@media (min-width: 640px) {
  .sponsor-card:not(.placeholder) { min-width: 300px; padding: 30px 40px 24px; }
  .sponsor-logo { height: 54px; max-width: 260px; }
}

/* ============================================================
   Premium motion pass. One easing curve everywhere
   (expo-out), longer settles, blur-to-sharp text reveals,
   group staggering handled in JS. These rules intentionally
   sit last so they beat component-level transition shorthands
   (the old .card transition was clipping the reveal).
   ============================================================ */

:root { --ease-out: cubic-bezier(0.16, 1, 0.3, 1); }

/* Hover motion: slower, weightier settles on the same curve */
.card { transition: transform 0.5s var(--ease-out), box-shadow 0.5s var(--ease-out); }
.card:hover { transform: translateY(-6px); }
.tier { transition: transform 0.5s var(--ease-out), border-color 0.5s var(--ease-out); }
.sponsor-card { transition: transform 0.5s var(--ease-out), box-shadow 0.5s var(--ease-out); }
.btn { transition: transform 0.35s var(--ease-out), box-shadow 0.35s var(--ease-out), background 0.3s ease; }

/* Card-type reveals: rise and settle */
.rv {
  opacity: 0;
  transform: translateY(30px);
  transition:
    opacity 1s var(--ease-out),
    transform 1s var(--ease-out);
}

.rv.in { opacity: 1; transform: none; }

/* Anchored sections must clear the sticky header, or the heading you jumped to
   sits underneath it and the page looks like it landed in the wrong place. */
section[id] { scroll-margin-top: calc(var(--header-h) + 28px); }

/* Text reveals: rise while sharpening from a soft blur */
.st {
  opacity: 0;
  transform: translateY(20px);
  filter: blur(3px);
  transition:
    opacity 0.4s var(--ease-out),
    transform 0.4s var(--ease-out),
    filter 0.32s var(--ease-out);
  will-change: opacity, transform, filter;
}

.st.in { opacity: 1; transform: none; filter: blur(0); }

@media (prefers-reduced-motion: reduce) {
  .rv, .st { opacity: 1; transform: none; filter: none; transition: none; }
}

/* Hero entrance: same curve, softer blur-in, unhurried */
@keyframes rise-in {
  from { opacity: 0; transform: translateY(26px); filter: blur(10px); }
}

@keyframes photo-in {
  from { opacity: 0; transform: scale(0.955); filter: blur(12px); }
}

@media (prefers-reduced-motion: no-preference) {
  .hero .eyebrow, .hero h1, .hero p.lead, .hero-ctas {
    animation-duration: 1.05s;
    animation-timing-function: var(--ease-out);
  }
  .hero h1 { animation-delay: 0.12s; }
  .hero p.lead { animation-delay: 0.24s; }
  .hero-ctas { animation-delay: 0.36s; }
  .hero-grid .photo {
    animation-duration: 1.25s;
    animation-delay: 0.3s;
    animation-timing-function: var(--ease-out);
  }
  .menu-open .sheet-menu > * {
    animation-duration: 0.55s;
    animation-timing-function: var(--ease-out);
  }
}

/* ============================================================
   PLAIN SPECIES PAGES
   Don, 2026-08-10: "All the pages are fine to be creative EXCEPT the
   (SEPARATE) pages as per each pollinator in trouble (Monarchs)
   (Hummingbird) (Native bees)". On the 8/6 call he asked for a white
   background and black text so the focus stays on the reading.

   Scoped de-styling, not a second theme: the shell, type scale and
   components are untouched, only the decorative layers come off.

   NOTE: every rule that paints text for a dark ground has to be flipped
   explicitly. Inheritance is not enough, because a direct rule such as
   `.section-green p` always beats a colour inherited from an ancestor.
   ============================================================ */

:is(.page-monarchs, .page-hummingbirds, .page-native-bees) {
  background: var(--white);
}

/* --- Hero: keep the type, drop the texture, gradients and insect scene --- */
:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .hero {
  background: var(--white);
  border-bottom: 1px solid rgba(28, 53, 39, 0.12);
  padding: 44px 0 36px;
}

:is(.page-monarchs, .page-hummingbirds, .page-native-bees)
  :is(.poll-scene, .poll-butterfly, .poll-skipper, .poll-hummingbird) { display: none; }

/* --- Sections: one white ground, hairline separators --- */
:is(.page-monarchs, .page-hummingbirds, .page-native-bees)
  :is(.section, .section-alt, .section-green) {
  background: var(--white);
  background-image: none;
  color: var(--ink);
  padding-top: 52px;
  border-top: 1px solid rgba(28, 53, 39, 0.1);
}

:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .section:first-of-type { border-top: none; }

/* --- Decorative pseudo-layers --- */
:is(.page-monarchs, .page-hummingbirds, .page-native-bees)
  :is(.section-green::before, .section-alt::after, .section-alt::before, .cta-band::before) { display: none; }

/* --- Text that was painted for a dark ground, flipped for white --- */
:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .section-green
  :is(h2, h3) { color: var(--green-deep); }

:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .section-green
  :is(p, li) { color: var(--ink); }

:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .section-green
  :is(.gallery-grid figcaption, .swipe-hint) { color: var(--ink-soft); }

:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .section-green .checklist li {
  color: var(--ink);
  border-bottom-color: rgba(28, 53, 39, 0.14);
}

/* Stat cards were a translucent white tile on green. On white they vanish, and
   gold sits at about 1.9:1 which fails even the large-text bar. */
:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .section-green .stat {
  background: var(--cream);
  border-color: rgba(28, 53, 39, 0.12);
}
:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .section-green .stat .num { color: var(--green); }
:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .section-green .stat .label { color: var(--ink-soft); }

/* Eyebrows: gold is unreadable once the dark ground is gone */
:is(.page-monarchs, .page-hummingbirds, .page-native-bees)
  :is(.kicker, .band-kicker) { color: var(--monarch-text); }

/* Footer stripped to the name and the nonprofit line, per the 8/6 call */
:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .footer-meadow { display: none; }

/* With the meadow hidden there is no transition zone above the footer
   content, so it sat tight against the top edge. Give it back as padding. */
:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .site-footer { padding-top: 84px; }

/* Measure: the whole point of these pages is reading them */
:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .section p { max-width: 68ch; }
:is(.page-monarchs, .page-hummingbirds, .page-native-bees) .section-head.center p { margin-inline: auto; }

/* ============================================================
   Light cards inside dark sections (all pages, not just plain ones)
   `.section-green p` paints cream directly onto the <p>, which beats any
   colour inherited from the card. That is why the $700 / $1,200 seed packet
   copy rendered cream-on-cream and was invisible until you selected it.
   ============================================================ */
.section-green :is(.tier, .card) :is(p, li, h3, h4) { color: var(--ink); }
.section-green :is(.tier, .card) { color: var(--ink); }

/* ============================================================
   Lightbox on small screens
   At 94vw the opened image was barely larger than the 72vw thumbnail it
   came from, so on a phone it read as "the picture shifted" rather than
   "it opened". Go genuinely edge to edge and make the close target obvious.
   ============================================================ */
@media (max-width: 700px) {
  .lightbox { padding: 0; }
  .lightbox img {
    max-width: 100vw;
    max-height: 88vh;
    border-radius: 0;
  }
  .lightbox .lb-close {
    top: 10px;
    right: 10px;
    width: 44px;
    height: 44px;
    background: rgba(0, 0, 0, 0.55);
    border: 1px solid rgba(255, 255, 255, 0.35);
  }
  .lightbox .lb-nav { width: 44px; height: 44px; }
}

/* Opening the lightbox sets overflow:hidden on <body>, which on iOS can jump
   the page. Pin the scroll position instead so it reopens where you left off. */
body.lb-locked { position: fixed; width: 100%; }

/* ============================================================
   Contrast corrections found by a full-site sweep, 2026-08-10
   ============================================================ */

/* A7 regression. --monarch-text was darkened to clear 4.5:1 on cream, which
   made it worse on the dark green sections (2.66:1). Gold is the site's own
   answer there at 6.38:1, and it is what the hand-written inline styles on
   monarchs.html were already doing. Excluded on plain pages, which have no
   dark ground left. */
body:not(.page-monarchs):not(.page-hummingbirds):not(.page-native-bees)
  .section-green :is(.kicker, .band-kicker) { color: var(--gold); }

/* Light cards sitting inside dark sections. `.section-green h3/p` paints cream
   straight onto the element, which beats anything inherited from the card, so
   every light card has to be named. This is the seed-packet bug; the sweep
   also found it on the featured event cards. */
.section-green :is(.tier, .card, .event-card, .holiday-card, .sponsor-card, .profile-card)
  :is(p, li, h2, h3, h4, figcaption, .event-meta) { color: var(--ink); }
.section-green :is(.tier, .card, .event-card, .holiday-card, .sponsor-card, .profile-card) { color: var(--ink); }

/* The flyer is a real <button>. A bare <img> is not a natively interactive
   element, and on mobile a tap on one can be swallowed in favour of the
   browser's own double-tap-to-zoom, so the lightbox never opened. A button
   always fires, and it makes the target reachable by keyboard too. */
.flyer-btn {
  display: block;
  padding: 0;
  border: 0;
  background: none;
  cursor: zoom-in;
  width: 100%;
  -webkit-tap-highlight-color: rgba(232, 169, 33, 0.25);
  touch-action: manipulation;
}
.flyer-btn img { width: 100%; }
.flyer-btn:focus-visible { outline: 3px solid var(--gold); outline-offset: 4px; }

/* ============================================================
   Grid blowout guard
   A `1fr` track has an automatic minimum of min-content. Every <img> now
   carries width/height attributes (needed to reserve layout space), so a
   large logo or photo contributes its full intrinsic width as that minimum,
   inflating the track until the grid is wider than the screen. The following
   sections then paint over the overflow.

   Seen on the mobile sponsor wall: cards ran off-screen and the "Become a
   Sponsor" button and "Help Us Turn the Tide" band landed on top of the logos.

   min-width:0 on the grid items lets the tracks shrink as intended. This is
   the fix for grid children generally, not just this one wall.
   ============================================================ */
.sponsor-wall > *,
.species > *,
.card-grid > *,
.gallery-grid > *,
.tier-grid > *,
.field-guide-grid > *,
.acc-gallery .grid > *,
.stat-band > *,
.two-col > *,
.hero-grid > *,
.contact-grid > *,
.footer-grid > * { min-width: 0; }

/* Belt and braces: a logo can never paint outside its own card. */
.sponsor-wall .logo-card { overflow: hidden; }

/* Sponsor logos link to each business's Google profile (Don, 8/10).
   The anchor must fill the card, and a linked card says so on hover. */
.logo-card a { display: block; }
.logo-card a img { transition: transform 0.2s ease; }
.logo-card a:hover img, .logo-card a:focus-visible img { transform: scale(1.05); }

/* ============================================================
   Migration map figure, 2026-08-10 (Don's Aug round)
   The route map Don asked for twice. Full container width so the
   legend stays legible; the credit line is part of the deal with a
   public-domain-but-adapted federal map, do not remove it.
   ============================================================ */
.map-fig { margin: 0 0 44px; }
.map-fig img {
  width: 100%;
  border: 1px solid rgba(28, 53, 39, 0.12);
  border-radius: var(--radius);
  cursor: zoom-in;
}
.map-fig figcaption {
  margin-top: 10px;
  font-size: 0.82rem;
  color: var(--ink-soft);
  text-align: center;
}

/* ============================================================
   Threat docket, 2026-08-11 (Don's Aug round)
   The ten ranked threats from Don's draft, rewritten. A numbered
   docket on hairlines, not cards: ten cards would be the template
   look Jimmy killed in the crisis section, times ten.
   ============================================================ */
.threat-list { list-style: none; }

.threat {
  display: grid;
  grid-template-columns: 56px 1fr;
  gap: 18px;
  padding: 26px 0;
  border-top: 1px solid rgba(28, 53, 39, 0.12);
  min-width: 0;
}
.threat:first-child { border-top: none; padding-top: 0; }

.threat .t-num {
  font-family: var(--font-display);
  font-size: 1.9rem;
  font-weight: 600;
  line-height: 1.1;
  color: var(--monarch);
}

.threat h3 { font-size: 1.22rem; margin-bottom: 8px; }
.threat .tag-row { margin: 0 0 12px; }
.threat p { font-size: 0.96rem; margin-bottom: 12px; max-width: 72ch; }
.threat p:last-child { margin-bottom: 0; }

.threat .t-helps { border-left: 3px solid var(--gold); padding-left: 14px; }
.threat .t-helps strong { color: var(--green); }

.threat-footnotes {
  margin-top: 34px;
  padding-top: 22px;
  border-top: 1px solid rgba(28, 53, 39, 0.12);
  max-width: 76ch;
}
.threat-footnotes p { font-size: 0.95rem; margin-bottom: 12px; }
.threat-footnotes .t-disclaimer { font-size: 0.82rem; color: var(--ink-soft); margin-bottom: 0; }

@media (min-width: 900px) {
  .threat { grid-template-columns: 76px 1fr; gap: 26px; }
  .threat .t-num { font-size: 2.3rem; }
}

/* ============================================================
   Outline button on dark CTA bands, 2026-08-11
   .btn-outline is styled for light ground (deep green on cream),
   which rendered near-invisible on the band. Cream it on dark.
   ============================================================ */
.cta-band .btn-outline {
  color: var(--cream);
  border-color: rgba(250, 247, 239, 0.75);
}
.cta-band .btn-outline:hover {
  background: rgba(250, 247, 239, 0.12);
  color: var(--white);
}

/* ============================================================
   Learn dropdown panel, 2026-08-11 (Don's Aug round)
   Seven entries now. Don agreed 8/10 to a two-row / box layout
   for Learn as pages were added; a single 7-item column would
   run half the viewport.
   ============================================================ */
.dropdown-learn {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 2px 6px;
  min-width: 430px;
}
.dropdown-learn a { white-space: nowrap; }

/* ============================================================
   Bee page opener, 2026-08-11 (Don's Aug round)
   Photo beside copy-plus-vitals instead of the full-width figure
   the other species pages open with. Every page simple, but in a
   different way, per Don.
   ============================================================ */
.bee-opener { display: grid; grid-template-columns: 1fr; gap: 30px; }
.bee-opener > * { min-width: 0; }
.bee-opener .map-fig { margin: 0; }
.bee-opener .opener-lead { font-size: 1.02rem; }
.bee-opener .vitals { margin-top: 30px; grid-template-columns: 1fr 1fr; gap: 24px 12px; }
.bee-opener .vital { border-left: none; }

@media (min-width: 900px) {
  .bee-opener { grid-template-columns: 1.05fr 0.95fr; gap: 52px; align-items: center; }
  .bee-opener .vitals .num { font-size: 2.4rem; }
}

/* Jimmy's call 8/11: the bee page vitals go green so the pages don't
   all wear the same orange. Format unchanged. */
.page-native-bees .vitals .num { color: var(--green); }

/* ============================================================
   Vitals strip, 2026-08-11 (Don's Aug round)
   Bare centered figures, no boxes. The stat-band card look was
   getting reused everywhere; this is the quiet alternative for
   plain species pages.
   ============================================================ */
.vitals {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 26px 12px;
  margin-top: 38px;
  text-align: center;
}
.vitals > * { min-width: 0; }

.vital .num {
  display: block;
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 2.3rem;
  line-height: 1.1;
  color: var(--monarch);
}

.vital .label {
  display: block;
  margin-top: 6px;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.11em;
  text-transform: uppercase;
  color: var(--ink-soft);
}

@media (min-width: 900px) {
  .vitals { grid-template-columns: repeat(4, 1fr); gap: 0; }
  .vital { border-left: 1px solid rgba(28, 53, 39, 0.12); }
  .vital:first-child { border-left: none; }
  .vital .num { font-size: 2.7rem; }
}

/* ============================================================
   Source list, 2026-08-11 (Don's Aug round)
   The check-our-work block. Quiet by design.
   ============================================================ */
.source-list { list-style: none; max-width: 76ch; }
.source-list li {
  padding: 10px 0;
  border-bottom: 1px solid rgba(28, 53, 39, 0.08);
  font-size: 0.9rem;
  color: var(--ink-soft);
}
.source-list li:last-child { border-bottom: none; }

/* ============================================================
   Heading refinement, hub page only, 2026-08-11 (Jimmy's call)
   Fraunces stays, but on this page the big headlines drop the
   italic accent and come down ~15% on phones. If Jimmy and Don
   like it, roll the same two rules sitewide.
   ============================================================ */
.page-pollinators-in-trouble .accent-italic { font-style: normal; color: inherit; }

@media (max-width: 640px) {
  .page-pollinators-in-trouble h1 { font-size: clamp(1.8rem, 6.8vw, 3.4rem); }
  .page-pollinators-in-trouble h2 { font-size: clamp(1.4rem, 5.1vw, 2.2rem); }
}

/* ============================================================
   Crisis section, 2026-08-11 (Don's Aug round)
   Jimmy's call: the six-box stat band read as templated, worst on
   mobile. Boxless ledger rows instead, four verified figures only,
   with a real volunteer garden photo as the counterargument.
   ============================================================ */
.crisis-grid { display: grid; grid-template-columns: 1fr; gap: 34px; }
.crisis-grid > * { min-width: 0; }
.crisis-grid h2 { margin: 10px 0 12px; }

.crisis-photo { margin: 26px 0 0; }
.crisis-photo .photo { aspect-ratio: 4 / 3; }
.crisis-photo img { cursor: zoom-in; }
.crisis-photo figcaption {
  margin-top: 10px;
  font-size: 0.84rem;
  color: rgba(250, 247, 239, 0.72);
}

.crisis-stat {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2px 24px;
  padding: 18px 0;
  border-top: 1px solid rgba(250, 247, 239, 0.16);
}
.crisis-stat:first-child { border-top: none; padding-top: 0; }

.crisis-stat .num {
  font-family: var(--font-display);
  font-weight: 600;
  font-size: 2.4rem;
  line-height: 1;
  color: var(--gold);
}

.crisis-stat p { font-size: 0.94rem; color: rgba(250, 247, 239, 0.78); margin: 0; }

@media (min-width: 900px) {
  .crisis-grid { grid-template-columns: 1.05fr 0.95fr; gap: 56px; align-items: start; }
  .crisis-stat { grid-template-columns: 150px 1fr; align-items: baseline; }
  .crisis-stat:first-child { padding-top: 6px; }
  /* Keep the two columns near the same height: smaller, wider-ratio photo.
     Click-to-zoom (lightbox) carries the full frame. */
  .crisis-photo { max-width: 460px; }
  .crisis-photo .photo { aspect-ratio: 16 / 10; }
}

.crisis-sources {
  margin-top: 18px;
  padding-top: 14px;
  border-top: 1px solid rgba(250, 247, 239, 0.16);
  font-size: 0.78rem;
  line-height: 1.6;
  color: rgba(250, 247, 239, 0.55);
}

/* ============================================================
   Species router, 2026-08-11 (Don's Aug round)
   The hub is habitat and climate only now; species content lives on
   its own pages under Learn. These three tiles are the front doors.
   The hummingbird tile carries the site's own SVG until Don supplies
   a photo, in a cream well so it reads as art, not a missing image.
   ============================================================ */
.species-router { display: grid; grid-template-columns: 1fr; gap: 22px; }
.species-router > * { min-width: 0; }

.router-tile {
  display: block;
  text-decoration: none;
  color: var(--ink);
  background: var(--white);
  border: 1px solid rgba(28, 53, 39, 0.12);
  border-radius: var(--radius);
  overflow: hidden;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.router-tile:hover { transform: translateY(-4px); box-shadow: var(--shadow); }

.router-tile .photo { aspect-ratio: 3 / 2; border-radius: 0; }
.router-tile .photo img { width: 100%; height: 100%; object-fit: cover; }

.router-tile .photo-art {
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--cream-dark);
}
.router-tile .photo-art svg { width: 46%; height: auto; }

.router-tile h3 { font-size: 1.2rem; margin: 18px 20px 6px; }
.router-tile p { font-size: 0.92rem; color: var(--ink-soft); margin: 0 20px 14px; }

.router-tile .router-link {
  display: inline-block;
  margin: 0 20px 20px;
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--green);
}
.router-tile .router-link::after { content: " \2192"; }
.router-tile:hover .router-link { color: var(--monarch-text); }

@media (min-width: 900px) {
  .species-router { grid-template-columns: repeat(3, 1fr); }
}

/* ============================================================
   Plant chart, 2026-08-10 (Don's Aug round)
   The "monarch plant chart" Don asked for, as a real table the
   plain treatment can carry. Distinct from .fact-table, which is
   a two-column key/value block.
   ============================================================ */
.plant-chart { width: 100%; border-collapse: collapse; }

.plant-chart th {
  text-align: left;
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink-soft);
  padding: 0 14px 10px 0;
  border-bottom: 2px solid rgba(28, 53, 39, 0.22);
}

.plant-chart td {
  padding: 12px 14px 12px 0;
  border-bottom: 1px solid rgba(28, 53, 39, 0.1);
  font-size: 0.93rem;
  vertical-align: top;
}

.plant-chart td:first-child { font-weight: 600; color: var(--green-deep); }

.plant-chart .latin-sm {
  display: block;
  font-style: italic;
  font-weight: 400;
  font-size: 0.8rem;
  color: var(--ink-soft);
}

/* ============================================================
   Status ledger, 2026-08-10 (Don's Aug round)
   Three jurisdictions, three rows. Deliberately not another card
   grid; a quiet docket the plain treatment can carry.
   ============================================================ */
.status-ledger { border-top: 1px solid rgba(28, 53, 39, 0.12); }

.status-ledger .row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 2px 28px;
  padding: 20px 0;
  border-bottom: 1px solid rgba(28, 53, 39, 0.12);
  min-width: 0;
}

.status-ledger .where {
  font-size: 0.74rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--monarch-text);
  padding-top: 5px;
}

.status-ledger h3 { font-size: 1.1rem; margin-bottom: 5px; }
.status-ledger p { font-size: 0.95rem; margin: 0; }

@media (min-width: 900px) {
  .status-ledger .row { grid-template-columns: 200px 1fr; }
}

/* ============================================================
   Life cycle strip, 2026-08-10 (Don's Aug round)
   The monarch page already uses the six-up card grid twice, so a third
   card section would read as a template. This is the deliberate
   alternative: a numbered strip on hairlines, quiet enough for the
   plain species-page treatment.
   ============================================================ */
.lifecycle { list-style: none; display: grid; grid-template-columns: 1fr; }

.lifecycle li {
  display: grid;
  grid-template-columns: 52px 1fr;
  gap: 16px;
  padding: 22px 0;
  border-top: 1px solid rgba(28, 53, 39, 0.12);
  min-width: 0;
}
.lifecycle li:first-child { border-top: none; }

.lifecycle .stage-num {
  font-family: var(--font-display);
  font-size: 2.1rem;
  font-weight: 600;
  line-height: 1;
  color: var(--monarch);
  padding-top: 2px;
}

.lifecycle h3 { font-size: 1.15rem; margin-bottom: 2px; }

.lifecycle .stage-time {
  display: block;
  font-size: 0.72rem;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink-soft);
  margin-bottom: 8px;
}

.lifecycle p { font-size: 0.95rem; margin: 0; }

@media (min-width: 900px) {
  .lifecycle { grid-template-columns: repeat(4, 1fr); }
  .lifecycle li {
    grid-template-columns: 1fr;
    gap: 0;
    padding: 6px 26px 0;
    border-top: none;
    border-left: 1px solid rgba(28, 53, 39, 0.12);
  }
  .lifecycle li:first-child { border-left: none; padding-left: 0; }
  .lifecycle li:last-child { padding-right: 0; }
  .lifecycle .stage-num { margin-bottom: 12px; }
}
