/* ============================================================================
   JLA / Diricom — canonical landing-page stylesheet   site.v1.css
   ----------------------------------------------------------------------------
   ONE file for every developed site. Per-site identity lives ONLY in the
   inline :root{} token block in each page's <head> (accent colours, fonts).
   Nothing site-specific belongs in here.

   Versioned filename on purpose: bump to site.v2.css to bust caches. The pages
   are served with cf-cache-status: DYNAMIC and max-age=0, so the HTML is never
   cached — this file is the only part that ever gets cached, which is the whole
   reason it is external.

   Class names are UNCHANGED from the previous inline styles. The nightly
   patchers (v2_content_updater.py, page_enhance_inject.py) emit fixed markup;
   renaming anything here silently unstyles their output.
   ========================================================================== */

/* ── Reset ───────────────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }

/* ── Design tokens ───────────────────────────────────────────────────────── */
:root {
  /* Spacing scale — 4px base. Replaces the ten ad-hoc values (2,4,6,8,10,12,
     14,20,24,32) that produced the off-rhythm Jim reported. Use these ONLY. */
  --s-1:  4px;
  --s-2:  8px;
  --s-3: 12px;
  --s-4: 16px;
  --s-5: 24px;
  --s-6: 32px;
  --s-7: 48px;

  /* Layout constants. --gutter is fluid so the page breathes on phones and
     does not stay pinned at 20px on a 1440px screen. */
  --measure:  1240px;  /* was 1100. At 1100 the main column was only ~704px next
                          to the sidebar, so the card grid could hold 2 columns
                          and the page read as left-weighted on a wide screen
                          while the hero and Our Picks (both full --measure)
                          looked balanced. 1240 gives a ~844px main column,
                          which carries 3 cards comfortably. */
  --gutter:   clamp(16px, 4vw, 32px);
  --prose:    68ch;    /* cap running text — a 844px line is ~110 characters */
  --sidebar:  300px;
  --col-min:  280px;   /* card grid minimum column. 280 not 300: at the 1024px
                          breakpoint a 300px minimum leaves only 4px of slack
                          beside the sidebar, so any rounding tips it back to a
                          single column — the exact bug being fixed. 280 gives
                          ~44px of slack and holds 2 columns consistently from
                          640px all the way up. */
  --main-max: 760px;   /* main column cap once the sidebar stacks — see note
                          at .content-with-sidebar for why this exists */

  /* Neutral surface tokens. Per-site files override --accent* only. */
  --bg:         #f8f8f6;
  --surface:    #ffffff;
  --text:       #1a1a1a;
  --text-muted: #6b7280;
  --border:     #e5e7eb;
  --shadow-sm:  0 1px 3px rgba(0,0,0,0.08);
  --shadow-md:  0 4px 16px rgba(0,0,0,0.10);
  --shadow-lg:  0 8px 24px rgba(0,0,0,0.14);
  --radius:     10px;

  --font-body:    'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --font-display: 'Playfair Display', Georgia, serif;
}

body {
  font-family: var(--font-body);
  background: var(--bg);
  color: var(--text);
  line-height: 1.6;
  font-size: 16px;
  -webkit-font-smoothing: antialiased;
}

img { max-width: 100%; }
a { color: inherit; }

/* ── Top bar ─────────────────────────────────────────────────────────────── */
.topbar {
  background: var(--text); color: #fff;
  font-size: 0.78em; letter-spacing: 0.02em;
  padding: var(--s-2) var(--gutter);
  display: flex; justify-content: space-between; align-items: center;
  flex-wrap: wrap; gap: var(--s-2);
}
.topbar a { color: #9ca3af; text-decoration: none; }
.topbar a:hover { color: #fff; }

/* ── Header ──────────────────────────────────────────────────────────────
   Previously the gap between nav and first content accumulated ~60px from
   four independent rules (header padding + tagline margin + nav margin +
   datebar margin + container padding). Now the header owns its own block
   spacing and nothing stacks. */
header {
  background: var(--surface);
  border-bottom: 3px solid var(--accent);
  padding: var(--s-5) var(--gutter) 0;
  text-align: center;
}
.site-name {
  font-family: var(--font-display);
  font-size: clamp(2rem, 5vw, 3.2rem);
  color: var(--text); letter-spacing: -1px; line-height: 1.1;
}
.site-name span { color: var(--accent); }
.tagline {
  font-size: 0.72em; color: var(--text-muted);
  margin: var(--s-1) 0 var(--s-4);
  letter-spacing: 0.06em; text-transform: uppercase;
  font-weight: 400; opacity: 0.78;
}

/* ── Nav ─────────────────────────────────────────────────────────────────── */
nav {
  display: flex; gap: var(--s-1); justify-content: center; flex-wrap: wrap;
  padding: 0; margin: 0; border-top: 1px solid var(--border);
}
nav a {
  display: inline-block;
  padding: var(--s-3) var(--s-4);
  font-size: 0.82em; font-weight: 600; color: var(--text-muted);
  text-decoration: none; letter-spacing: 0.04em; text-transform: uppercase;
  border-bottom: 3px solid transparent;
  transition: color 0.15s, border-color 0.15s;
  cursor: pointer;
}
nav a:hover, nav a.active { color: var(--accent); border-bottom-color: var(--accent); }

/* ── Container ───────────────────────────────────────────────────────────── */
.container { max-width: var(--measure); margin: 0 auto; padding: var(--s-5) var(--gutter); }

/* ── Date bar ────────────────────────────────────────────────────────────── */
.datebar {
  display: flex; justify-content: space-between; align-items: center;
  margin-bottom: var(--s-5); padding-bottom: var(--s-3);
  border-bottom: 1px solid var(--border);
  font-size: 0.79em; color: var(--text-muted); letter-spacing: 0.02em;
  gap: var(--s-3); flex-wrap: wrap;
}
.datebar-label { font-weight: 500; }
.datebar-updated { opacity: 0.75; text-align: right; }
.datebar-region-mid { text-align: center; flex: 1; }
.live-dot {
  display: inline-block; width: 8px; height: 8px; border-radius: 50%;
  background: #22c55e; margin-right: var(--s-2); animation: pulse 2s infinite;
}
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.4; } }
@media (prefers-reduced-motion: reduce) {
  .live-dot { animation: none; }
  * { transition: none !important; }
}

/* ── Hero ────────────────────────────────────────────────────────────────── */
.hero {
  display: grid; grid-template-columns: 1fr 1fr;
  gap: var(--s-5); margin-bottom: var(--s-5);
}
.hero-card {
  background: var(--surface); border-radius: var(--radius); overflow: hidden;
  box-shadow: var(--shadow-md);
  display: flex; flex-direction: column;
  text-decoration: none; color: inherit;
  transition: transform 0.2s, box-shadow 0.2s;
}
.hero-card:hover { transform: translateY(-3px); box-shadow: var(--shadow-lg); }
.hero-card-img {
  width: 100%; aspect-ratio: 16 / 10; height: auto;
  object-fit: cover; display: block; background: var(--accent-light);
}
.hero-card-img-placeholder {
  width: 100%; aspect-ratio: 16 / 10;
  background: linear-gradient(135deg, var(--accent-light), var(--accent));
  display: flex; align-items: center; justify-content: center; font-size: 3em;
}
.hero-card-body { padding: var(--s-5); flex: 1; }
.hero-badge {
  display: inline-block; background: var(--accent); color: #fff;
  font-size: 0.7em; font-weight: 700;
  padding: var(--s-1) var(--s-3); border-radius: 20px;
  text-transform: uppercase; letter-spacing: 0.06em;
  margin-bottom: var(--s-3);
}
.hero-card h2 {
  font-family: var(--font-display); font-size: 1.4em; line-height: 1.3;
  color: var(--text); margin-bottom: var(--s-3);
}
.hero-card p {
  font-size: 0.88em; color: var(--text-muted); line-height: 1.6;
  margin-bottom: var(--s-3);
}
.card-meta {
  font-size: 0.75em; color: #9ca3af;
  display: flex; gap: var(--s-3); align-items: center; flex-wrap: wrap;
}
.card-meta-source { font-weight: 600; color: var(--accent); }

/* Hero stack — the 3 headlines beside the lead story.
   The three items are shorter than the feature card next to them, which left a
   block of dead space under the headlines (Jim, 2026-07-27). Stretching the
   items to share the full height squares the hero off against the feature. */
.hero-stack {
  display: flex; flex-direction: column; gap: var(--s-3);
  height: 100%;
}
.hero-stack-item {
  background: var(--surface); border-radius: var(--radius);
  box-shadow: var(--shadow-sm); padding: var(--s-3);
  display: flex; gap: var(--s-3); align-items: center;
  flex: 1;                        /* share the hero's height evenly */
  text-decoration: none; color: inherit; transition: box-shadow 0.2s;
}
.hero-stack-item:hover { box-shadow: var(--shadow-md); }
.hero-stack-img {
  width: 80px; height: 70px; object-fit: cover; border-radius: 6px;
  flex-shrink: 0; background: var(--accent-light);
}
.hero-stack-body h3 { font-size: 0.92em; line-height: 1.35; margin-bottom: var(--s-1); }
.hero-stack-body .card-meta { margin-top: var(--s-1); }

/* ── Section header ──────────────────────────────────────────────────────── */
.section-header {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: var(--s-3); margin-bottom: var(--s-4);
  padding-bottom: var(--s-2); border-bottom: 2px solid var(--accent);
}
.section-header h2 { font-family: var(--font-display); font-size: 1.5em; color: var(--text); }

/* ── Main / sidebar ──────────────────────────────────────────────────────
   THE 901–991px FIX.
   Before: sidebar collapsed at max-width:900px, but the main column needed
   992px of viewport before two 300px cards could fit beside it. Result: from
   901–991px the card grid rendered ONE card per row at 529–619px wide, i.e.
   shrinking the window improved the layout.

   Now the sidebar collapses at 1023px. At exactly 1024px the main column is
   1024 − gutter*2 − 300 − 32 = ~660px, which comfortably fits two columns.

   --main-max caps the main column once the sidebar stacks, so the grid does
   not jump 2 → 3 columns the instant the sidebar disappears. It also keeps a
   sane reading measure for article text. */
.content-with-sidebar {
  display: grid; grid-template-columns: 1fr var(--sidebar);
  gap: var(--s-6); align-items: start;
}

/* ── Card grid ───────────────────────────────────────────────────────────
   EXPLICIT column counts, not auto-fill. auto-fill derives the count from the
   available width, which is what let the count change unpredictably with the
   sidebar. Jim's spec: 3 per row on a full-size screen, 2 on smaller, 1 on a
   phone. Explicit counts make that exactly what happens at every width. */
.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--s-5); margin-bottom: var(--s-6);
}
.card {
  background: var(--surface); border-radius: var(--radius); overflow: hidden;
  box-shadow: var(--shadow-sm);
  display: flex; flex-direction: column;
  text-decoration: none; color: inherit;
  transition: transform 0.2s, box-shadow 0.2s;
}
.card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.card-img {
  width: 100%; aspect-ratio: 16 / 10; height: auto;
  object-fit: cover; display: block; background: var(--accent-light);
}
.card-img-placeholder {
  width: 100%; aspect-ratio: 16 / 10;
  background: linear-gradient(135deg, var(--accent-light), var(--accent));
  display: flex; align-items: center; justify-content: center; font-size: 2em;
}
.card-body { padding: var(--s-4); flex: 1; display: flex; flex-direction: column; }
.card-category {
  font-size: 0.68em; font-weight: 700; color: var(--accent);
  text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: var(--s-2);
}
.card h3 { font-size: 1em; line-height: 1.35; margin-bottom: var(--s-2); }
.card p { font-size: 0.85em; color: var(--text-muted); margin-bottom: var(--s-3); }
.card-footer { margin-top: auto; }

/* ── Affiliate grid ──────────────────────────────────────────────────────── */
.affiliate-section { margin-bottom: var(--s-6); }
.affiliate-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  gap: var(--s-4);
}
.affiliate-card {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); padding: var(--s-4);
  text-decoration: none; color: inherit;
  transition: transform 0.2s, box-shadow 0.2s;
}
.affiliate-card:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.affiliate-card img {
  width: 100%; height: 120px; object-fit: cover;
  border-radius: 6px; margin-bottom: var(--s-2);
}
.affiliate-icon {
  font-size: 2em; text-align: center;
  margin-bottom: var(--s-2); color: var(--accent);
}
.affiliate-title { font-weight: 700; margin-bottom: var(--s-1); }
.affiliate-desc { font-size: 0.85em; color: var(--text-muted); margin-bottom: var(--s-2); }
.affiliate-cta { font-size: 0.82em; font-weight: 600; color: var(--accent); }

/* ── About section ───────────────────────────────────────────────────────── */
.about-section {
  background: var(--surface); border-radius: var(--radius);
  padding: var(--s-6); margin: 0 0 var(--s-6);
  box-shadow: var(--shadow-sm); border-left: 4px solid var(--accent);
}
.about-section h2 {
  font-family: var(--font-display); font-size: 1.3em;
  color: var(--text); margin-bottom: var(--s-3);
}
.about-section p {
  font-size: 0.93em; color: #4b5563; line-height: 1.8; margin-bottom: var(--s-3);
  max-width: var(--prose);   /* running text stays readable in a wide column */
}

/* ── Domain notice ───────────────────────────────────────────────────────
   An empty slot (<div class="domain-notice jla-adslot">) filled by
   page_enhance_inject with the DWS cross-promo. NOT a for-sale banner —
   the no-for-sale-signal rule (K6B-65) is not in tension with this. */
.domain-notice {
  text-align: center; margin: 0 0 var(--s-6);
  font-size: 0.82em; color: var(--text-muted);
}
.domain-notice a {
  color: var(--text-muted); text-decoration: none; font-weight: 500;
  border-bottom: 1px dotted var(--text-muted);
}
.domain-notice a:hover { color: var(--accent); border-bottom-color: var(--accent); }
.domain-notice img.dws-logo-inline {
  display: block; height: 28px; width: auto;
  margin: var(--s-2) auto 0; opacity: 0.6; transition: opacity 0.2s;
}
.domain-notice a:hover img.dws-logo-inline { opacity: 1; }

/* ── Sidebar ─────────────────────────────────────────────────────────────
   Markup is <aside class="sidebar"> containing .sidebar-widget blocks.
   .sidebar-widget carries its own bottom margin, so no flex gap here. */
.sidebar-widget {
  background: var(--surface); border-radius: var(--radius);
  padding: var(--s-4); margin-bottom: var(--s-5);
  box-shadow: var(--shadow-sm); border: 1px solid var(--border);
}
.sidebar-widget h3 {
  font-size: 0.8em; font-weight: 700; text-transform: uppercase;
  letter-spacing: 0.08em; color: var(--text-muted);
  margin-bottom: var(--s-3); padding-bottom: var(--s-2);
  border-bottom: 1px solid var(--border);
}
.sidebar-news-item {
  display: flex; gap: var(--s-3); align-items: flex-start;
  padding: var(--s-2) 0; border-bottom: 1px solid var(--border);
  text-decoration: none; color: inherit;
}
.sidebar-news-item:last-child { border-bottom: none; }
.sidebar-news-item:hover h4 { color: var(--accent); }
.sidebar-news-item h4 { font-size: 0.82em; font-weight: 600; line-height: 1.35; }
.sidebar-news-item span {
  font-size: 0.72em; color: #9ca3af; display: block; margin-top: var(--s-1);
}
.sidebar-num {
  font-size: 1.2em; font-weight: 800; color: var(--border);
  min-width: 24px; line-height: 1;
}

/* ── Sidebar DWS ad (taller variant of .dws-ad) ──────────────────────────── */
.dws-ad-sidebar {
  background: linear-gradient(160deg, #0d1b3e 0%, #0a3060 60%, #063d5c 100%);
  border-radius: var(--radius); padding: var(--s-6) var(--s-4);
  margin-bottom: var(--s-5);
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; text-align: center;
  gap: var(--s-3); border: 1px solid #1e3a6e;
  text-decoration: none; min-height: 250px; color: #fff;
  transition: transform 0.2s;
}
.dws-ad-sidebar:hover { transform: translateY(-2px); }
.dws-ad-sidebar img { height: 38px; width: auto; filter: brightness(0) invert(1); opacity: 0.92; }
.dws-ad-sidebar .dws-ad-headline { font-size: 0.92em; }
.dws-ad-sidebar .dws-ad-sub { font-size: 0.78em; color: #93c5fd; }
.dws-ad-sidebar ul { list-style: none; text-align: left; width: 100%; padding: 0 var(--s-2); }
.dws-ad-sidebar ul li {
  font-size: 0.76em; color: #bfdbfe; padding: var(--s-1) 0;
  border-bottom: 1px solid rgba(255,255,255,0.08);
}
.dws-ad-sidebar ul li::before { content: '✓ '; color: #34d399; font-weight: 700; }
.dws-ad-headline {
  font-size: 0.88em; font-weight: 700; color: #fff;
  line-height: 1.3; margin-top: var(--s-1);
}
.dws-ad-cta {
  display: inline-block; margin-top: var(--s-2);
  background: #f59e0b; color: #1a1a1a;
  font-size: 0.78em; font-weight: 700;
  padding: var(--s-2) var(--s-5); border-radius: 20px; letter-spacing: 0.02em;
}

/* ── Email capture ───────────────────────────────────────────────────────── */
.capture-block, .email-capture-block {
  background: linear-gradient(135deg, #f4efe9 0%, #fcfbf8 100%);
  border: 1px solid #d7ccc8; border-left: 4px solid var(--accent);
  border-radius: var(--radius); padding: var(--s-5);
  margin: 0 0 var(--s-6); box-shadow: var(--shadow-sm);
}
.capture-copy h3 {
  font-family: var(--font-display); font-size: 1.2em;
  color: var(--text); margin-bottom: var(--s-3);
}
.capture-copy p {
  font-size: 0.92em; color: #475569; line-height: 1.7; margin-bottom: var(--s-4);
}
.capture-fields {
  display: grid; grid-template-columns: 1fr 1fr;
  gap: var(--s-3); margin-bottom: var(--s-3);
}
.capture-form input, .capture-form textarea {
  width: 100%; border: 1px solid #cbd5e1; border-radius: 8px;
  padding: var(--s-3) var(--s-3); font: inherit;
  background: #fff; color: var(--text);
}
.capture-form textarea { min-height: 108px; resize: vertical; margin-bottom: var(--s-3); }
.capture-actions { display: flex; gap: var(--s-3); align-items: center; flex-wrap: wrap; }
.capture-form button {
  background: var(--accent); color: #fff; border: none; border-radius: 999px;
  padding: var(--s-3) var(--s-4); font-weight: 700; cursor: pointer;
}
.capture-secondary { color: var(--accent-dark); font-weight: 600; text-decoration: none; }
.capture-secondary:hover { text-decoration: underline; }

/* ── DWS house ad ────────────────────────────────────────────────────────── */
.dws-ad {
  background: linear-gradient(135deg, #0d1b3e 0%, #0a3060 60%, #063d5c 100%);
  border-radius: var(--radius); padding: var(--s-5) var(--s-4);
  display: flex; flex-direction: column;
  align-items: center; justify-content: center; text-align: center;
  gap: var(--s-3); border: 1px solid #1e3a6e;
  text-decoration: none; color: #fff;
  transition: transform 0.2s, box-shadow 0.2s;
}
.dws-ad:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.dws-logo-text { line-height: 1; margin-bottom: var(--s-1); }
.dws-logo-text span {
  display: block; font-size: 1.1em; font-weight: 800; color: #fff;
  letter-spacing: -0.5px; font-family: var(--font-body);
}
.dws-logo-text em {
  display: block; font-size: 0.65em; font-weight: 600; color: #93c5fd;
  letter-spacing: 0.12em; text-transform: uppercase; font-style: normal;
}

/* ── Disclosure ──────────────────────────────────────────────────────────── */
.disclosure-bar {
  font-size: 0.78em; color: var(--text-muted);
  background: var(--accent-light); border-radius: var(--radius);
  padding: var(--s-3) var(--s-4); margin-bottom: var(--s-5);
}
.disclosure-bar a { color: var(--accent); text-decoration: none; }
.disclosure-bar a:hover { text-decoration: underline; }

/* ── page_enhance_inject blocks ──────────────────────────────────────────
   These were a SECOND design system: hardcoded colours, -apple-system font,
   max-widths of 1080px and 960px against the container's 1100px, and 16px
   gutters against the container's 20px. The visible symptom was the "Our
   Picks" and disclosure blocks not sharing a left edge with the content above
   them. They now inherit --measure, --gutter and the shared tokens. */
.jla-picks {
  max-width: var(--measure); margin: var(--s-6) auto 0;
  padding: 0 var(--gutter); font-family: var(--font-body);
}
.jla-picks h3 { font-size: 1.15em; margin: 0 0 var(--s-3); }
/* Pinned to 3 explicitly. Jim approved this section's look ("centered and 3
   which looks good") — auto-fit would have started returning 4 or 5 across once
   --measure widened to 1240, changing something he already signed off on. */
.jla-picks-grid {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: var(--s-4);
}
.jla-pick {
  border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden;
  text-decoration: none; color: var(--text); background: var(--surface);
  display: flex; flex-direction: column;
  transition: transform 0.2s, box-shadow 0.2s;
}
.jla-pick:hover { transform: translateY(-2px); box-shadow: var(--shadow-md); }
.jla-pick img { width: 100%; aspect-ratio: 16 / 10; height: auto; object-fit: cover; }
.jla-pick span {
  padding: var(--s-3); font-size: 0.85em; line-height: 1.45; font-weight: 600;
}
.jla-pick em {
  display: block; font-style: normal; color: var(--accent-dark);
  font-size: 0.78em; margin-top: var(--s-1);
}
.jla-disclosure {
  max-width: var(--measure); margin: var(--s-6) auto var(--s-2);
  padding: 0 var(--gutter);
  font-size: 0.78em; line-height: 1.6; color: var(--text-muted); text-align: center;
}

.jla-fill {
  display: block; border-radius: var(--radius); overflow: hidden; position: relative;
  margin: var(--s-3) 0; text-decoration: none;
  font-family: var(--font-body); font-size: 0.875em; line-height: 1.5;
}
.jla-fill.jla-fill-product {
  border: 1px solid var(--border); padding: var(--s-4); text-align: center;
  background: var(--bg); color: var(--text);
}
.jla-fill.jla-fill-product img {
  max-width: 100%; height: 110px; object-fit: cover;
  border-radius: 6px; margin-bottom: var(--s-2); display: block;
}
.jla-fill .k {
  font-size: 0.7em; letter-spacing: 0.08em; text-transform: uppercase;
  color: var(--text-muted); display: block; margin-bottom: var(--s-1);
}
.jla-fill.jla-fill-product .jla-fill-title { color: var(--accent-dark); font-weight: 700; }
.jla-fill.jla-promo { min-height: 170px; color: #fff; }
.jla-fill.jla-promo img {
  width: 100%; height: 170px; object-fit: cover; display: block;
  filter: brightness(.62) saturate(1.05);
}
.jla-fill.jla-promo .jla-promo-text {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: var(--s-4) var(--s-4) var(--s-3);
  background: linear-gradient(180deg, rgba(8,12,16,0) 0%, rgba(8,12,16,.85) 88%);
}
.jla-fill.jla-promo .k { color: #e2e6ea; }
.jla-fill.jla-promo strong {
  display: block; font-size: 0.95em; line-height: 1.3;
  margin-bottom: var(--s-1); font-weight: 700;
}
.jla-fill.jla-promo em {
  font-style: normal; font-size: 0.8em; font-weight: 700; color: #fff;
  text-decoration: underline; text-underline-offset: 2px;
}
.jla-fill.jla-psa .jla-promo-text {
  background: linear-gradient(180deg, rgba(6,20,30,0) 0%, rgba(6,20,30,.9) 82%);
}
.jla-fill.jla-psa .k { color: #9fd8ff; }
.jla-fill.jla-psa small {
  display: block; font-size: 0.78em; line-height: 1.45;
  color: #dbe4ea; margin: 0 0 var(--s-2); font-weight: 400;
}

/* ── AdSense hygiene — keep unfilled slots from leaving holes ────────────── */
.adsbygoogle:not([data-adsbygoogle-status]) { min-height: 0 !important; }
.top-ad-slot { min-height: 0; overflow: hidden; }
.top-ad-slot:empty, .top-ad-slot ins:empty { display: none; }
ins.adsbygoogle[data-ad-status="unfilled"],
ins.adsbygoogle:not([data-ad-status]) { display: none !important; }

/* ── Footer ──────────────────────────────────────────────────────────────── */
footer {
  background: #111827; color: #6b7280;
  padding: var(--s-6) var(--gutter); font-size: 0.82em;
}
.footer-inner {
  max-width: var(--measure); margin: 0 auto;
  display: grid; grid-template-columns: repeat(3, 1fr); gap: var(--s-5);
}
footer h4 {
  color: #e5e7eb; font-size: 0.85em; margin-bottom: var(--s-3);
  text-transform: uppercase; letter-spacing: 0.06em;
}
footer a { color: #6b7280; text-decoration: none; display: block; margin-bottom: var(--s-2); }
footer a:hover { color: var(--accent); }
.footer-bottom {
  max-width: var(--measure); margin: var(--s-5) auto 0;
  padding-top: var(--s-4); border-top: 1px solid #1f2937;
  display: flex; justify-content: space-between; flex-wrap: wrap; gap: var(--s-2);
}
/* Domain-inquiry link (K6B-65): deliberately plain — no styling, no callout. */
.footer-bottom .domain-inquiry { color: #4b5563; }

/* ============================================================================
   BREAKPOINTS — one coherent ladder, replacing the previous three ad-hoc
   queries at 700/900/700 that left the 901–991px dead zone.
     >= 1024px  full layout with sidebar
     <  1024px  sidebar stacks, main column capped at --main-max
     <   768px  hero stacks
     <   640px  footer stacks, tighter rhythm
   ========================================================================== */

/* 3 across only while the main column can carry it. Below 1200 the sidebar is
   still present but the column is too narrow for 3 readable cards, so drop to
   2 — Jim: "Mobile and smaller viewers can be two." */
@media (max-width: 1199px) {
  .grid { grid-template-columns: repeat(2, 1fr); }
}

@media (max-width: 1023px) {
  .content-with-sidebar { grid-template-columns: 1fr; }
  /* Cap the main column so the card grid does not jump column count the
     instant the sidebar stacks, and so text keeps a readable measure. */
  .content-with-sidebar > .main-content,
  .content-with-sidebar > .sidebar {
    max-width: var(--main-max); width: 100%; margin-left: auto; margin-right: auto;
  }
  /* The stack sits under the feature card here, so stretching it would leave
     three tall, mostly-empty rows. Back to natural height. */
  .hero-stack { height: auto; }
  .hero-stack-item { flex: initial; }
}

@media (max-width: 767px) {
  .hero { grid-template-columns: 1fr; gap: var(--s-4); }
  .grid { gap: var(--s-4); }
  .jla-picks-grid { grid-template-columns: repeat(2, 1fr); }
  .section-header { flex-direction: column; align-items: flex-start; gap: var(--s-1); }
  .datebar { font-size: 0.74em; }
  .datebar-region-mid { display: none; }   /* the first thing to drop when tight */
  .about-section { padding: var(--s-5); }
}

@media (max-width: 639px) {
  .grid { grid-template-columns: 1fr; }
  .jla-picks-grid { grid-template-columns: 1fr; }
  .footer-inner { grid-template-columns: 1fr; gap: var(--s-4); }
  .container { padding: var(--s-4) var(--gutter); }
  .hero-card-body { padding: var(--s-4); }
  .topbar { font-size: 0.72em; }
  nav a { padding: var(--s-2) var(--s-3); }
  .footer-bottom { justify-content: flex-start; }
  .capture-fields { grid-template-columns: 1fr; }   /* two inputs side-by-side is
                                                       unusable at phone width */
}
