/* ============================================================
   The Watchtower, News section for CDO.me
   Two modes: default (light) + batman (dark HUD).
   IMPORTANT: Batman tokens are scoped to .wt-shell ONLY.
   The primary CDO.me nav and the main cdo-footer never change,
   regardless of mode. Accessibility is the design goal; WCAG AA
   contrast is the minimum floor on text + interactive UI.
   ============================================================ */

/* Fonts are loaded via <link> in each news page head (preconnect +
   stylesheet) instead of @import here. Reason: @import is render-
   blocking and serializes after the CSS bytes finish downloading,
   while a parallel <link> can start the font request earlier and
   the preconnect hint can warm the gstatic connection sooner.
   Required faces: Playfair Display ital,wght 0/1×{400,700,900/400,700}
   and Source Serif 4 ital,opsz,wght 0/1×8..60×{400,600,700/400,600}. */

/* ------------------------------------------------------------
   1. Token layer, scoped to .wt-shell. Nothing here leaks out.
   ------------------------------------------------------------ */

/* Mini masthead lives OUTSIDE .wt-shell on article pages, so it needs its
   own scope for --wt-logo-fill. Same default/batman values as the shell. */
.wt-mini,
.wt-shell {
  --wt-logo-fill: #283a31;
}
html[data-mode="batman"] .wt-mini,
html[data-mode="batman"] .wt-shell {
  --wt-logo-fill: #ece7dc;
}
/* Prevent browser visited-link purple from leaking into the logo <a>. */
.wt-mini__logo,
.wt-mini__logo:visited,
.wt-masthead__logo a,
.wt-masthead__logo a:visited {
  color: var(--wt-logo-fill);
}

.wt-shell {
  /* Keep Calm - warm paper, calm green/sage, soft clay accent (light mode) */
  --wt-page-bg:       #f7f4ee;     /* warm paper */
  --wt-surface:       #fffdf9;     /* card surface, faintly warm white */
  --wt-card-bg:       #fffdf9;     /* card token used by auth/account/inputs; must track surface */
  --wt-rule:          #e4ddcf;     /* warm hairline */
  --wt-rule-strong:   #283a31;
  --wt-ink:           #26302b;     /* deep forest charcoal, 11.8:1 on paper */
  --wt-ink-soft:      #475048;     /* secondary, 7.4:1 */
  --wt-ink-quiet:     #5f6a60;     /* quiet, 5.0:1 on paper, passes AA small text */
  --wt-eyebrow:       #5f6a60;
  --wt-link:          #2c5f4e;     /* calm green, 5.6:1 on paper */
  --wt-link-hover:    #1f4638;
  --wt-accent:        #2c5f4e;
  --wt-chip-bg:       #ede7da;
  --wt-chip-border:   #ddd4c2;
  --wt-chip-ink:      #34403a;
  --wt-logo-fill:     #283a31;
  --wt-toggle-fill:   #283a31;
  --wt-toggle-bg:     transparent;
  --wt-img-filter:    none;
  --wt-btn-bg:        #2c5f4e;
  --wt-btn-bg-hover:  #1f4638;
  --wt-btn-ink:       #fffdf9;
  --wt-panel-bg:      #eef3ec;     /* soft sage panel */
  --wt-panel-border:  #d6e0d2;
  --wt-warm:          #be6b45;     /* clay accent, warmth, used sparingly */
  --wt-crisis-bg:     #edf1ea;
  --wt-crisis-border: #d8e0d3;
  --wt-crisis-ink:    #3a463f;

  /* Typography */
  --wt-font-display: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
  --wt-font-body:    "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --wt-font-ui:      var(--font-family-body, "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);
  /* Aliases used by the layout=c (NYT-style) rules. Without these the
     `font:` shorthands containing var(--cdo-sans) become invalid and
     font-family falls through to the body serif, which is why eyebrows
     and meta rendered in serif instead of Inter. */
  --cdo-sans:        var(--wt-font-ui);
  --cdo-serif:       var(--wt-font-body);
}

/* ---- Calm "dim / night" mode tokens, scoped to the shell ----
   A warm, low-glare dark theme for reading at night. Purely visual,
   it never changes article content (the content lens is always default). */
html[data-mode="batman"] .wt-shell {
  --wt-page-bg:       #161a18;   /* warm green-charcoal */
  --wt-surface:       #1e2522;
  --wt-card-bg:       #1e2522;   /* keeps auth/account cards dark; was undefined (white fallback) */
  --wt-rule:          #2c342f;
  --wt-rule-strong:   #b9c7b7;
  --wt-ink:           #ece7dc;   /* warm paper text, 13.6:1 on #161a18 */
  --wt-ink-soft:      #c2cabb;   /* secondary, 9.3:1 */
  --wt-ink-quiet:     #93a093;   /* quiet, 5.2:1 */
  --wt-eyebrow:       #a9b6a7;
  --wt-link:          #8fd0b4;   /* soft mint, 8.9:1 */
  --wt-link-hover:    #b9e7d1;
  --wt-accent:        #8fd0b4;
  --wt-chip-bg:       rgba(143, 208, 180, 0.10);
  --wt-chip-border:   rgba(143, 208, 180, 0.32);
  --wt-chip-ink:      #b9e7d1;
  --wt-logo-fill:     #ece7dc;
  --wt-toggle-fill:   #b9c7b7;
  --wt-toggle-bg:     rgba(185, 199, 183, 0.08);
  /* Gentle dim of imagery so photos don't glare against a dark page. */
  --wt-img-filter:    brightness(0.9) contrast(1.02);
  --wt-btn-bg:        #8fd0b4;
  --wt-btn-bg-hover:  #b9e7d1;
  --wt-btn-ink:       #10140f;
  --wt-panel-bg:      rgba(143, 208, 180, 0.07);
  --wt-panel-border:  rgba(143, 208, 180, 0.26);
  --wt-warm:          #cdb89a;
  --wt-crisis-bg:     rgba(185, 199, 183, 0.08);
  --wt-crisis-border: rgba(185, 199, 183, 0.26);
  --wt-crisis-ink:    #c2cabb;
}

/* ------------------------------------------------------------
   1a. CLS reservation, every JS-rendered <main> on the news
   surface is empty until JS lands content (homepage, pulse,
   open category pages). Without a min-height the footer paints
   inside the viewport during the ~500ms loading window, then
   shifts ~3000px when content lands. Reserves ~1 viewport so
   the shift happens below the fold.
   Excludes gated mains (current-customers, target-customers,
   competitors), those stay empty until unlock, and reserving
   80vh would create awkward whitespace.
   ------------------------------------------------------------ */
main[data-wt-home],
main[data-wt-pulse],
main[data-wt-category]:not([data-wt-requires-unlock]) {
  min-height: 80vh;
}

/* ------------------------------------------------------------
   1b. Skip link, WCAG 2.4.1 Bypass Blocks. First focusable
   element on the page; jumps over the nav/masthead to <main>.
   ------------------------------------------------------------ */
.wt-skip-link {
  position: absolute;
  left: 12px;
  top: -40px;
  /* The skip link sits on <body>, OUTSIDE .wt-shell where the tokens live, so
     the vars never resolve; without solid fallbacks it rendered white text on
     a transparent background (invisible to keyboard users on focus). */
  background: var(--wt-ink, #26302b);
  color: var(--wt-btn-ink, #fff);
  padding: 10px 16px;
  border-radius: 4px;
  font: 600 14px/1 var(--wt-font-ui);
  text-decoration: none;
  z-index: 100;
  transition: top 120ms ease;
}
.wt-skip-link:focus {
  top: 12px;
  outline: 2px solid var(--wt-link);
  outline-offset: 2px;
}

/* Visually-hidden utility - content stays in the AT tree (screen
   readers, search engines, no-JS fallback) but disappears from the
   visual layout. Used on the static <h1> placeholder inside each
   <main>: if JS renders, it overwrites the placeholder; if JS fails,
   the SR-only heading still gives the page a top-level outline.
   WCAG 1.3.1, 2.4.6. */
.wt-sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}

/* ------------------------------------------------------------
   2. Primary nav + main cdo-footer, locked to light brand.
   Explicit resets so nothing inherits Batman-mode anything.
   ------------------------------------------------------------ */

/* Force sans stack so body.watchtower-body serif doesn't bleed. */
.cdo-nav, .cdo-nav *,
.cdo-footer, .cdo-footer * {
  font-family: var(--font-family-body, "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif);
}

/* Hard reset: primary nav is completely unaffected by [data-mode="batman"]. */
html[data-mode="batman"] .cdo-nav-wrapper,
html[data-mode="batman"] .cdo-nav,
html[data-mode="batman"] .cdo-nav *,
html[data-mode="batman"] .cdo-footer,
html[data-mode="batman"] .cdo-footer * {
  /* Intentionally no rules - inherits from cdo-me.css unchanged. */
}

/* The watchtower-body class: light by default.
   In Batman mode the ENTIRE body goes dark so the Watchtower canvas
   feels like a full blackout, only the primary nav and footer remain
   visually light (both have their own opaque backgrounds below). */
body.watchtower-body {
  margin: 0;
  background: #efe9de;        /* warm paper, a touch deeper than the content rail */
  color: #26302b;
  transition: background-color 220ms ease;
}

/* On news pages the primary CDO nav is NOT sticky - it scrolls off and
   the mini Watchtower header takes over as the sticky element. */
body.watchtower-body .cdo-nav-wrapper {
  position: static;
}

html[data-mode="batman"] body.watchtower-body {
  background: #12150f;
}

/* The primary nav sits on rgba white-with-blur so in Batman mode the dark
   body would bleed through and darken the nav. Hold the nav fully opaque
   in Batman mode so the brand header never flickers dark. */
html[data-mode="batman"] .cdo-nav-wrapper {
  background: #ffffff;
}

/* ------------------------------------------------------------
   3. The Watchtower canvas
   ------------------------------------------------------------ */

.wt-shell {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0 24px 8px;
  background: var(--wt-page-bg);
  color: var(--wt-ink);
  transition: background-color 220ms ease, color 220ms ease;
  /* Give the shell some breathing room from the page edge so
     the light nav + light footer frame it visually. */
}

html[data-mode="batman"] .wt-shell {
  background: transparent;   /* body paints the dark; shell stays a content rail */
  color: var(--wt-ink);
  box-shadow: none;
}

/* Serif body inside the shell only. */
.wt-shell {
  font-family: var(--wt-font-body);
}

/* ------------------------------------------------------------
   4. Masthead
   ------------------------------------------------------------ */

.wt-masthead {
  border-bottom: 1px solid var(--wt-rule);
  padding: 20px 0 10px;
  position: relative;
}

.wt-masthead__utility {
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 12px;
  font-family: var(--wt-font-ui);
  color: var(--wt-ink-quiet);
  font-size: 12px;
  letter-spacing: 0.03em;
  text-transform: uppercase;
}

.wt-masthead__search {
  justify-self: start;
  background: none;
  border: none;
  color: inherit;
  cursor: pointer;
  padding: 4px 8px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font: inherit;
  letter-spacing: inherit;
  text-transform: inherit;
}

.wt-masthead__search:hover { color: var(--wt-ink); }
.wt-masthead__search:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 2px;
  border-radius: 2px;
}

.wt-masthead__search svg {
  width: 16px;
  height: 16px;
  stroke: currentColor;
  fill: none;
  stroke-width: 2;
}

.wt-masthead__date {
  justify-self: center;
  white-space: nowrap;
}

.wt-batmode {
  justify-self: end;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: var(--wt-toggle-bg);
  border: 1px solid var(--wt-rule);
  border-radius: 999px;
  padding: 4px 12px 4px 8px;
  cursor: pointer;
  font: inherit;
  font-family: var(--wt-font-ui);
  letter-spacing: inherit;
  text-transform: inherit;
  color: var(--wt-ink-soft);
  transition: background 160ms ease, border-color 160ms ease;
}

.wt-batmode:hover { border-color: var(--wt-rule-strong); }
.wt-batmode:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 2px;
}

.wt-batmode svg {
  width: 28px;
  height: auto;
  fill: var(--wt-toggle-fill);
  transition: fill 200ms ease;
}

html[data-mode="batman"] .wt-batmode svg {
  filter: drop-shadow(0 0 5px rgba(169, 200, 232, 0.45));
}

.wt-batmode__label::before { content: "Night mode: "; color: var(--wt-ink-quiet); }
.wt-batmode__label::after  { content: "Off"; }
html[data-mode="batman"] .wt-batmode__label::after { content: "On"; color: var(--wt-eyebrow); }

/* Logo row */
.wt-masthead__logo {
  display: flex;
  justify-content: center;
  padding: 8px 0 6px;
}

.wt-masthead__logo a {
  display: inline-block;
  text-decoration: none;
}

/* Inline SVG injected by cdo-watchtower.js. We set `color` so the <svg>
   inherits fill via currentColor. `height` sizes the SVG (viewBox scales). */
.wt-logo {
  display: inline-block;
  line-height: 0;
  color: var(--wt-logo-fill);
  transition: color 240ms ease;
}
.wt-logo svg {
  height: 52px;
  width: auto;
  max-width: 80vw;
  display: block;
}

.wt-logo--gotham { display: none; }
html[data-mode="batman"] .wt-logo--watchtower { display: none; }
html[data-mode="batman"] .wt-logo--gotham { display: inline-block; }

@media (min-width: 900px) {
  .wt-logo svg { height: 68px; }
}

/* ------------------------------------------------------------
   5. Sub-navigation
   ------------------------------------------------------------ */

.wt-subnav {
  border-top: 1px solid var(--wt-rule);
  border-bottom: 1px solid var(--wt-rule);
  padding: 10px 0;
  display: flex;
  justify-content: center;
  align-items: center;
  flex-wrap: wrap;
  gap: 4px 28px;
  font-family: var(--wt-font-ui);
  font-size: 13px;
  letter-spacing: 0.02em;
}

.wt-subnav__item {
  color: var(--wt-ink);
  text-decoration: none;
  padding: 6px 4px;
  position: relative;
  white-space: nowrap;
  transition: color 140ms ease;
}

.wt-subnav__item:hover { color: var(--wt-link); }
.wt-subnav__item:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 2px;
  border-radius: 2px;
}

.wt-subnav__item[aria-current="page"] {
  font-weight: 700;
  box-shadow: inset 0 -2px 0 var(--wt-ink);
}

html[data-mode="batman"] .wt-subnav__item[aria-current="page"] {
  box-shadow: inset 0 -2px 0 var(--wt-ink);
}

.wt-subnav__gated { display: none; }
.wt-subnav[data-unlocked="true"] .wt-subnav__gated {
  display: inline-flex;
  align-items: center;
}

/* Lock */
.wt-lock {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  background: var(--wt-chip-bg);
  border: 1px solid var(--wt-chip-border);
  color: var(--wt-chip-ink);
  border-radius: 999px;
  padding: 4px 10px;
  cursor: pointer;
  font: inherit;
  font-family: var(--wt-font-ui);
  transition: background 140ms ease, border-color 140ms ease;
}

.wt-lock:hover { border-color: var(--wt-rule-strong); }
.wt-lock:focus-visible { outline: 2px solid var(--wt-link); outline-offset: 2px; }

.wt-lock svg { width: 14px; height: 14px; stroke: currentColor; fill: none; stroke-width: 2; }

.wt-subnav[data-unlocked="true"] .wt-lock { display: none; }

.wt-passwd {
  display: none;
  align-items: center;
  gap: 6px;
}

.wt-subnav[data-passwd-open="true"] .wt-passwd { display: inline-flex; }
.wt-subnav[data-passwd-open="true"] .wt-lock { display: none; }

.wt-passwd__input {
  border: none;
  border-bottom: 1px solid var(--wt-ink);
  background: transparent;
  padding: 4px 28px 4px 6px;
  color: var(--wt-ink);
  font: inherit;
  font-family: var(--wt-font-ui);
  min-width: 160px;
}
.wt-passwd__input:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 2px;
}

/* ------------------------------------------------------------
   Unlock modal, opened by the mini lock button on pages without the
   big masthead (article detail) or when the big masthead has scrolled
   off. Same focus-trap + aria-modal rigging as the search overlay.
   ------------------------------------------------------------ */
.wt-unlock {
  position: fixed;
  inset: 0;
  display: none;
  align-items: center;
  justify-content: center;
  background: rgba(10, 12, 18, 0.55);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  z-index: 1400;
}
.wt-unlock[data-open="true"] { display: flex; }
.wt-unlock__panel {
  background: #ffffff;
  border-radius: 10px;
  padding: 28px;
  max-width: 420px;
  width: 90%;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.35);
  font-family: var(--wt-font-ui);
}
html[data-mode="batman"] .wt-unlock__panel {
  background: #0a1220;
  color: #dbeafe;
  box-shadow: 0 24px 60px rgba(0, 0, 0, 0.7);
}
.wt-unlock__title {
  font-family: var(--wt-font-display);
  font-size: 22px;
  font-weight: 700;
  margin: 0 0 6px;
  color: #141414;
}
html[data-mode="batman"] .wt-unlock__title { color: #ffffff; }
.wt-unlock__copy {
  font-size: 14px;
  color: #4b5563;
  margin: 0 0 18px;
  line-height: 1.45;
}
html[data-mode="batman"] .wt-unlock__copy { color: #a9c8e8; }
.wt-unlock__row {
  display: flex;
  align-items: stretch;
  gap: 0;
  border: 1px solid #d6d6d6;
  border-radius: 6px;
  padding: 2px;
  background: #fff;
}
html[data-mode="batman"] .wt-unlock__row {
  background: rgba(169, 200, 232, 0.06);
  border-color: rgba(169, 200, 232, 0.28);
}
.wt-unlock__input {
  flex: 1;
  border: none;
  background: transparent;
  padding: 10px 12px;
  font-size: 16px;
  font-family: inherit;
  color: inherit;
}
.wt-unlock__input:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 2px;
  border-radius: 4px;
}
.wt-unlock__toggle {
  background: none;
  border: none;
  padding: 6px 10px;
  cursor: pointer;
  color: #6b7280;
}
.wt-unlock__toggle svg { width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 2; }
.wt-unlock__toggle .eye-off { display: none; }
.wt-unlock__toggle[data-shown="true"] .eye-on { display: none; }
.wt-unlock__toggle[data-shown="true"] .eye-off { display: inline; }
.wt-unlock__error {
  font-size: 13px;
  color: #b42318;
  margin: 10px 0 0;
  display: none;
}
.wt-unlock__error[data-visible="true"] { display: block; }
.wt-unlock__actions {
  display: flex;
  justify-content: flex-end;
  gap: 8px;
  margin-top: 18px;
}
.wt-unlock__cancel,
.wt-unlock__submit {
  padding: 10px 20px;
  border-radius: 999px;
  font-size: 14px;
  font-weight: 600;
  cursor: pointer;
  font-family: inherit;
  border: 1px solid transparent;
}
.wt-unlock__cancel {
  background: transparent;
  color: #4b5563;
  border-color: #d6d6d6;
}
.wt-unlock__submit {
  background: #141414;
  color: #fff;
}
html[data-mode="batman"] .wt-unlock__cancel {
  color: #a9c8e8;
  border-color: rgba(169, 200, 232, 0.4);
}
html[data-mode="batman"] .wt-unlock__submit {
  background: #cfe2fa;
  color: #05080f;
}
.wt-unlock__cancel:focus-visible,
.wt-unlock__submit:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 3px;
}

/* Show/hide toggle inside the subnav popover password input */
.wt-passwd__wrap { position: relative; display: inline-block; }
.wt-passwd__toggle {
  position: absolute;
  right: 2px;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  padding: 2px 4px;
  cursor: pointer;
  color: var(--wt-ink-quiet);
  line-height: 1;
}
.wt-passwd__toggle:hover { color: var(--wt-ink); }
.wt-passwd__toggle svg { width: 16px; height: 16px; stroke: currentColor; fill: none; stroke-width: 2; }
.wt-passwd__toggle .eye-off { display: none; }
.wt-passwd__toggle[data-shown="true"] .eye-on { display: none; }
.wt-passwd__toggle[data-shown="true"] .eye-off { display: inline; }

.wt-passwd__input:focus { border-color: var(--wt-link); }
.wt-passwd[data-state="error"] .wt-passwd__input {
  border-color: #c81e1e;
  color: #c81e1e;
}
html[data-mode="batman"] .wt-passwd[data-state="error"] .wt-passwd__input {
  border-color: #ffb3b3;
  color: #ffb3b3;
}

.wt-passwd__cancel {
  background: none;
  border: none;
  color: var(--wt-ink-quiet);
  cursor: pointer;
  font: inherit;
  font-family: var(--wt-font-ui);
  font-size: 11px;
  padding: 2px 4px;
}
.wt-passwd__cancel:hover { color: var(--wt-ink); }

/* ------------------------------------------------------------
   6. Search overlay (new, functional)
   ------------------------------------------------------------ */

/* Overlay: a solid scrim so page content behind is fully dimmed.
   In both modes we want the search to be the ONLY thing the eye reads. */
.wt-search {
  position: fixed;
  inset: 0;
  background: rgba(10, 12, 18, 0.82);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  z-index: 1200;    /* above primary nav sticky wrapper */
  display: none;
  align-items: flex-start;
  justify-content: center;
  padding: 10vh 24px;
}
html[data-mode="batman"] .wt-search {
  background: rgba(0, 0, 0, 0.88);
}
.wt-search[data-open="true"] { display: flex; }

.wt-search__panel {
  width: min(720px, 100%);
  background: #ffffff;
  color: #141414;
  border: 1px solid #141414;
  border-radius: 6px;
  overflow: hidden;
  box-shadow: 0 24px 72px rgba(0, 0, 0, 0.55);
}
html[data-mode="batman"] .wt-search__panel {
  background: #0a1220;
  color: #dbeafe;
  border-color: #a9c8e8;
  box-shadow: 0 24px 72px rgba(0, 0, 0, 0.7), 0 0 0 1px rgba(169, 200, 232, 0.35);
}

.wt-search__input-row {
  display: flex;
  align-items: center;
  gap: 12px;
  padding: 16px 20px;
  border-bottom: 1px solid #141414;
}
html[data-mode="batman"] .wt-search__input-row {
  border-bottom-color: #a9c8e8;
}

.wt-search__input-row svg {
  width: 20px; height: 20px;
  stroke: #141414;
  fill: none; stroke-width: 2;
  flex-shrink: 0;
}
html[data-mode="batman"] .wt-search__input-row svg {
  stroke: #a9c8e8;
}

.wt-search__input {
  flex: 1;
  border: none;
  background: transparent;
  font-family: var(--wt-font-ui);
  font-size: 20px;
  font-weight: 500;
  color: #141414;
}
.wt-search__input::placeholder {
  color: #737373;
  font-weight: 400;
}
html[data-mode="batman"] .wt-search__input { color: #ffffff; }
html[data-mode="batman"] .wt-search__input::placeholder { color: #7e9cc0; }

.wt-search__close {
  background: #141414;
  border: 1px solid #141414;
  border-radius: 4px;
  font: inherit;
  font-family: var(--wt-font-ui);
  color: #ffffff;
  padding: 6px 12px;
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  font-weight: 600;
  cursor: pointer;
}
.wt-search__close:hover { background: #000; border-color: #000; }
html[data-mode="batman"] .wt-search__close {
  background: #cfe2fa;
  border-color: #cfe2fa;
  color: #05080f;
}
html[data-mode="batman"] .wt-search__close:hover {
  background: #ffffff;
  border-color: #ffffff;
}

.wt-search__results {
  max-height: 60vh;
  overflow-y: auto;
  padding: 6px 0;
}

.wt-search__result {
  display: block;
  padding: 16px 20px;
  text-decoration: none;
  color: #141414;
  border-bottom: 1px solid #e6e6e6;
}
html[data-mode="batman"] .wt-search__result {
  color: #dbeafe;
  border-bottom-color: rgba(169, 200, 232, 0.22);
}
.wt-search__result:last-child { border-bottom: none; }
.wt-search__result:hover { background: #f5f7fb; }
.wt-search__result:focus-visible {
  background: #f5f7fb;
  outline: 2px solid var(--wt-link);
  outline-offset: -2px;
}
html[data-mode="batman"] .wt-search__result:hover,
html[data-mode="batman"] .wt-search__result:focus { background: rgba(169, 200, 232, 0.10); }

.wt-search__result-kicker {
  display: inline-block;
  font-family: var(--wt-font-ui);
  font-size: 11px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: #424242;
  margin-bottom: 6px;
}
html[data-mode="batman"] .wt-search__result-kicker { color: #a9c8e8; }

.wt-search__result-headline {
  font-family: var(--wt-font-display);
  font-weight: 700;
  font-size: 20px;
  line-height: 1.22;
  margin: 0 0 6px;
  color: inherit;
}

.wt-search__result-dek {
  font-size: 14px;
  color: #424242;
  margin: 0;
  line-height: 1.45;
}
html[data-mode="batman"] .wt-search__result-dek { color: #cfe2fa; }

.wt-search__empty {
  padding: 36px 20px;
  text-align: center;
  color: #737373;
  font-family: var(--wt-font-ui);
  font-size: 14px;
}
html[data-mode="batman"] .wt-search__empty { color: #a9c8e8; }

/* ------------------------------------------------------------
   7. Article grid (unchanged structure; palette via tokens)
   ------------------------------------------------------------ */

/* ------------------------------------------------------------
   Home page modules (NYT-style mixed rhythm).
   Every module is a self-contained section. align-items:start on the
   hero prevents dead whitespace under a short lead when the right column
   is taller.
   ------------------------------------------------------------ */

.wt-mod { padding: 32px 0; border-bottom: 1px solid var(--wt-rule); }
.wt-mod:last-child { border-bottom: 0; }
.wt-mod__hd {
  display: flex; align-items: baseline; justify-content: space-between;
  margin: 0 0 20px;
  border-top: 2px solid var(--wt-rule-strong);
  padding-top: 10px;
}
.wt-mod__label {
  font-family: var(--wt-font-ui);
  font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase;
  font-weight: 700; color: var(--wt-ink);
}
.wt-mod__more {
  font-family: var(--wt-font-ui);
  font-size: 12px; letter-spacing: 0.04em;
  color: var(--wt-link); text-decoration: none;
}
.wt-mod__more:hover { text-decoration: underline; }

/* --- Hero: 3-column, lead left doesn't stretch --- */
.wt-mod--hero {
  display: grid; grid-template-columns: 1fr;
  gap: 28px 40px; padding: 28px 0 40px;
  align-items: start;
}
@media (min-width: 900px) {
  .wt-mod--hero { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr); }
  /* Row 1: lead | rail | rail-b.  Row 2: lead-sub | tertiary | quaternary.
     Every cell carries a card so no empty space opens under the lead. */
  .wt-mod--hero > .wt-card--lead {
    grid-column: 1 / 2; grid-row: 1 / 2;
    border-right: 1px solid var(--wt-rule);
    border-bottom: 1px solid var(--wt-rule);
    padding-right: 40px;
    padding-bottom: 24px;
    align-self: start;
  }
  .wt-mod--hero > .wt-card--lead-sub {
    grid-column: 1 / 2; grid-row: 2 / 3;
    border-right: 1px solid var(--wt-rule);
    padding-right: 40px;
    padding-top: 24px;
    align-self: start;
  }
  .wt-mod--hero > .wt-card--rail {
    grid-column: 2 / 3;
    border-bottom: 1px solid var(--wt-rule);
    padding-bottom: 24px;
  }
  .wt-mod--hero > .wt-card--rail-b {
    grid-column: 3 / 4;
    border-bottom: 1px solid var(--wt-rule);
    border-left: 1px solid var(--wt-rule);
    padding-left: 40px;
    padding-bottom: 24px;
  }
  .wt-mod--hero > .wt-card--tertiary { grid-column: 2 / 3; grid-row: 2 / 3; padding-top: 24px; }
  .wt-mod--hero > .wt-card--quaternary {
    grid-column: 3 / 4; grid-row: 2 / 3;
    border-left: 1px solid var(--wt-rule);
    padding-left: 40px; padding-top: 24px;
  }
}

/* --- Doubled feature: 2-up big image cards --- */
.wt-mod--doubled {
  display: grid; grid-template-columns: 1fr;
  gap: 28px 40px;
}
@media (min-width: 720px) {
  .wt-mod--doubled { grid-template-columns: 1fr 1fr; }
  .wt-mod--doubled > *:nth-child(2) { border-left: 1px solid var(--wt-rule); padding-left: 40px; }
}

/* --- Latest strip: 4-up (or 2-up mobile) --- */
.wt-mod__strip { display: grid; gap: 28px 32px; }
.wt-mod__strip--four { grid-template-columns: 1fr; }
.wt-mod__strip--three { grid-template-columns: 1fr; }
@media (min-width: 720px) {
  .wt-mod__strip--four { grid-template-columns: repeat(2, 1fr); }
  .wt-mod__strip--three { grid-template-columns: repeat(3, 1fr); }
  .wt-mod__strip--three > *:not(:first-child) {
    border-left: 1px solid var(--wt-rule); padding-left: 32px;
  }
}
@media (min-width: 1000px) {
  .wt-mod__strip--four { grid-template-columns: repeat(4, 1fr); }
  .wt-mod__strip--four > *:not(:first-child) {
    border-left: 1px solid var(--wt-rule); padding-left: 28px;
  }
}

/* --- Homepage Pulse + Trending modules: social tiles and topic chips
   wired into the NYT-style article grid so the page doesn't look
   sparse when the article pool is small. --- */
.wt-mod--pulse { padding: 28px 0; border-top: 1px solid var(--wt-rule); }
.wt-mod__pulse-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 20px;
}
@media (min-width: 700px) {
  .wt-mod__pulse-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1100px) {
  .wt-mod__pulse-grid { grid-template-columns: repeat(3, 1fr); }
}

/* --- Per-category full-width section. NYT-like "Arts" block real
   estate: eyebrow header + featured article (left, big image) +
   secondary rail (right, 2-3 compact articles) + topic-matched
   Pulse sidebar below. Each category gets its own dedicated module
   down the home page. --- */
.wt-mod--cat-section {
  padding: 36px 0;
  border-top: 2px solid var(--wt-ink);
}
.wt-cat-sec__hd {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 20px;
}
.wt-cat-sec__label {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-size: clamp(24px, 2.4vw, 32px);
  line-height: 1;
  color: var(--wt-ink);
  text-decoration: none;
  letter-spacing: -0.01em;
}
.wt-cat-sec__label:hover { color: var(--wt-link-hover); }
.wt-cat-sec__more {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--wt-ink-soft);
  text-decoration: none;
}
.wt-cat-sec__more:hover { color: var(--wt-ink); }
.wt-cat-sec__grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px 36px;
}
@media (min-width: 900px) {
  .wt-cat-sec__grid {
    grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr);
  }
  .wt-cat-sec__grid > .wt-card--cat-featured { grid-column: 1; grid-row: 1 / span 2; }
  .wt-cat-sec__rail { grid-column: 2; grid-row: 1; }
  .wt-cat-sec__pulse { grid-column: 2; grid-row: 2; }
}
.wt-cat-sec__rail {
  display: flex;
  flex-direction: column;
  gap: 18px;
  padding-left: 0;
}
@media (min-width: 900px) {
  .wt-cat-sec__rail {
    border-left: 1px solid var(--wt-rule);
    padding-left: 36px;
  }
}
.wt-card--cat-featured .wt-card__media {
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  display: block;
  margin-bottom: 14px;
  background: var(--wt-chip-bg);
  filter: var(--wt-img-filter);
}
.wt-card--cat-featured .wt-card__headline {
  font-family: var(--wt-font-display);
  font-weight: 800;
  font-size: clamp(24px, 2.6vw, 36px);
  line-height: 1.12;
  letter-spacing: -0.01em;
  margin: 6px 0 10px;
}
.wt-card--cat-rail {
  display: block;
}
.wt-card--cat-rail + .wt-card--cat-rail {
  border-top: 1px solid var(--wt-rule);
  padding-top: 16px;
}
.wt-card--cat-rail .wt-card__media { display: none; }
.wt-card--cat-rail .wt-card__headline {
  font-family: var(--wt-font-display);
  font-weight: 700;
  font-size: 18px;
  line-height: 1.22;
  margin: 4px 0 6px;
}
.wt-card--cat-rail .wt-card__dek {
  font-size: 14px;
  line-height: 1.4;
  color: var(--wt-ink-soft);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}
.wt-cat-sec__pulse {
  display: flex;
  flex-direction: column;
  gap: 14px;
  padding-top: 18px;
  border-top: 1px solid var(--wt-rule);
}
@media (min-width: 900px) {
  .wt-cat-sec__pulse {
    padding-top: 0;
    padding-left: 36px;
    border-top: 0;
    border-left: 1px solid var(--wt-rule);
  }
}
.wt-cat-sec__pulse-label {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
  font-weight: 700;
}

/* --- NYT-style section column. Image + lead headline + stacked
   plain-text secondary headlines. Packs 4-5 articles into one
   narrow column. Multi-column row stacks 3 of these side-by-side. --- */
.wt-mod--sec-row { padding: 28px 0 36px; border-top: 1px solid var(--wt-rule); }
.wt-sec-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px 32px;
}
@media (min-width: 720px) {
  .wt-sec-row { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1000px) {
  .wt-sec-row { grid-template-columns: repeat(3, 1fr); }
  .wt-sec-row > .wt-sec-col:not(:first-child) {
    border-left: 1px solid var(--wt-rule);
    padding-left: 24px;
  }
}
.wt-sec-col { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.wt-sec-col__label {
  display: inline-block;
  font-family: var(--wt-font-ui);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--wt-ink);
  text-decoration: none;
  padding-bottom: 2px;
  border-bottom: 1px solid var(--wt-ink);
  align-self: flex-start;
  margin-bottom: 6px;
}
.wt-sec-col__lead {
  display: flex;
  flex-direction: column;
  gap: 8px;
  text-decoration: none;
  color: var(--wt-ink);
}
.wt-sec-col__media {
  width: 100%;
  aspect-ratio: 16 / 10;
  object-fit: cover;
  display: block;
  background: var(--wt-chip-bg);
  filter: var(--wt-img-filter);
}
.wt-sec-col__headline {
  font-family: var(--wt-font-display);
  font-weight: 700;
  font-size: 18px;
  line-height: 1.22;
  color: var(--wt-ink);
  margin: 0;
}
.wt-sec-col__lead:hover .wt-sec-col__headline { color: var(--wt-link-hover); }
.wt-sec-col__item {
  display: block;
  font-family: var(--wt-font-display);
  font-weight: 500;
  font-size: 15px;
  line-height: 1.3;
  color: var(--wt-ink);
  text-decoration: none;
  padding: 8px 0;
  border-top: 1px solid var(--wt-rule);
}
.wt-sec-col__item:hover { color: var(--wt-link-hover); }

/* --- Dense text list row - NYT "Politics/Opinion" feel. 3 columns
   of 5-6 plain headline links each, kicker eyebrow per link. --- */
.wt-mod--text-lists { padding: 28px 0 36px; border-top: 1px solid var(--wt-rule); }
.wt-text-list-row {
  display: grid;
  grid-template-columns: 1fr;
  gap: 28px 36px;
}
@media (min-width: 720px) {
  .wt-text-list-row { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1000px) {
  .wt-text-list-row { grid-template-columns: repeat(3, 1fr); }
  .wt-text-list-row > .wt-text-list:not(:first-child) {
    border-left: 1px solid var(--wt-rule);
    padding-left: 28px;
  }
}
.wt-text-list { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.wt-text-list__label {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--wt-ink);
  text-decoration: none;
  border-bottom: 1px solid var(--wt-ink);
  padding-bottom: 4px;
  margin-bottom: 6px;
  align-self: flex-start;
}
.wt-text-list ul { list-style: none; padding: 0; margin: 0; }
.wt-text-list__item { border-top: 1px solid var(--wt-rule); }
.wt-text-list__item:first-child { border-top: 0; }
.wt-text-list__link {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 10px 0;
  text-decoration: none;
  color: var(--wt-ink);
}
.wt-text-list__link:hover .wt-text-list__headline { color: var(--wt-link-hover); }
.wt-text-list__kicker {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
}
.wt-text-list__headline {
  font-family: var(--wt-font-display);
  font-weight: 600;
  font-size: 15px;
  line-height: 1.28;
  color: var(--wt-ink);
}

.wt-mod--trending { padding: 20px 0 8px; }
.wt-trend__strip {
  display: flex;
  flex-wrap: wrap;
  gap: 10px 10px;
}
.wt-trend__chip {
  display: inline-flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 2px;
  padding: 10px 14px;
  border: 1px solid var(--wt-rule);
  border-radius: 999px;
  text-decoration: none;
  color: var(--wt-ink);
  background: transparent;
  font: inherit;
  cursor: pointer;
  transition: border-color 180ms ease, background 180ms ease, color 180ms ease;
}
.wt-trend__chip:hover {
  border-color: var(--wt-ink);
  background: var(--wt-chip-bg);
}
.wt-trend__chip[aria-expanded="true"] {
  background: var(--wt-ink);
  border-color: var(--wt-ink);
  color: var(--wt-paper, #fff);
}
html[data-mode="batman"] .wt-trend__chip[aria-expanded="true"] {
  background: var(--wt-ink);
  color: var(--wt-surface);
}
.wt-trend__chip[aria-expanded="true"] .wt-trend__meta {
  color: inherit;
  opacity: 0.82;
}

/* Expansion drawer - renders the clicked topic's top_posts inline. */
.wt-trend__expansion {
  margin-top: 20px;
  padding: 24px;
  border: 1px solid var(--wt-rule);
  border-radius: 12px;
  background: var(--wt-chip-bg);
}
html[data-mode="batman"] .wt-trend__expansion {
  background: var(--wt-surface);
  border-color: var(--wt-rule);
}
.wt-trend__expansion[hidden] { display: none; }
.wt-trend__expansion-hd {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 14px;
  padding-bottom: 14px;
  margin-bottom: 18px;
  border-bottom: 1px solid var(--wt-rule);
}
.wt-trend__expansion-label {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-size: 22px;
  color: var(--wt-ink);
}
.wt-trend__expansion-kw {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  color: var(--wt-ink-soft);
  letter-spacing: 0.02em;
}
.wt-trend__expansion-meta {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  color: var(--wt-ink-quiet);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-left: auto;
}
.wt-trend__expansion-grid {
  display: grid;
  grid-template-columns: 1fr;
  gap: 16px;
}
@media (min-width: 700px) {
  .wt-trend__expansion-grid { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 1100px) {
  .wt-trend__expansion-grid { grid-template-columns: repeat(3, 1fr); }
}
.wt-trend__label {
  font-family: var(--wt-font-ui);
  font-weight: 700;
  font-size: 13px;
  letter-spacing: 0.01em;
}
.wt-trend__meta {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  color: var(--wt-ink-quiet);
  letter-spacing: 0.04em;
  text-transform: uppercase;
}

/* --- Category hero: NYT Business-style, one clearly-featured lead + a
   secondary middle with image + a stacked text column on the right. The
   featured card is the only one with a big image. --- */
.wt-mod--category-hero {
  display: grid; grid-template-columns: 1fr;
  gap: 28px 40px; padding: 28px 0 40px;
  align-items: start;
}
@media (min-width: 720px) {
  .wt-mod--category-hero { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
  .wt-mod--category-hero > .wt-card--featured { grid-column: 1 / 2; grid-row: 1 / 3; }
  .wt-mod--category-hero > .wt-card--secondary { grid-column: 2 / 3; grid-row: 1 / 2; padding-left: 32px; border-left: 1px solid var(--wt-rule); }
  .wt-mod--category-hero > .wt-mod__stack--cat { grid-column: 2 / 3; grid-row: 2 / 3; padding-left: 32px; border-left: 1px solid var(--wt-rule); padding-top: 24px; border-top: 1px solid var(--wt-rule); }
}
@media (min-width: 1000px) {
  .wt-mod--category-hero { grid-template-columns: minmax(0, 1.6fr) minmax(0, 1fr) minmax(0, 1fr); }
  .wt-mod--category-hero > .wt-card--featured  { grid-column: 1 / 2; grid-row: 1 / 3; border-right: 1px solid var(--wt-rule); padding-right: 40px; }
  .wt-mod--category-hero > .wt-card--secondary { grid-column: 2 / 3; grid-row: 1 / 3; padding-left: 40px; padding-right: 32px; border-left: none; border-right: 1px solid var(--wt-rule); }
  .wt-mod--category-hero > .wt-mod__stack--cat { grid-column: 3 / 4; grid-row: 1 / 3; padding-left: 32px; padding-top: 0; border-left: none; border-top: none; }
}

/* Featured card: oversized image + big headline + dek. The biggest thing
   on the page, NYT always has ONE clearly featured story at the top. */
.wt-card--featured .wt-card__media {
  aspect-ratio: 4 / 3;
  margin-bottom: 18px;
}
.wt-card--featured .wt-card__headline {
  font-size: clamp(28px, 3.2vw, 42px);
  line-height: 1.08;
}
.wt-card--featured .wt-card__dek {
  font-size: 17px; line-height: 1.5; margin-top: 10px;
}

/* Secondary card: medium image + medium headline + dek. */
.wt-card--secondary .wt-card__media {
  aspect-ratio: 3 / 2;
  margin-bottom: 14px;
}
.wt-card--secondary .wt-card__headline {
  font-size: clamp(20px, 1.9vw, 26px);
  line-height: 1.15;
}

/* The stacked right column's items are text-only (media already hidden
   by .wt-card--stack rule below). */
.wt-mod__stack--cat > * + * {
  border-top: 1px solid var(--wt-rule);
  padding-top: 20px;
}

/* --- Asymmetric split: tall image left, 3 text stacked right --- */
.wt-mod--asym {
  display: grid; grid-template-columns: 1fr;
  gap: 28px 40px;
}
@media (min-width: 900px) {
  .wt-mod--asym { grid-template-columns: minmax(0, 1.2fr) minmax(0, 1fr); }
}
.wt-mod__stack {
  display: grid; grid-auto-rows: max-content; gap: 24px 0;
}
.wt-mod__stack > * + * {
  border-top: 1px solid var(--wt-rule); padding-top: 24px;
}

/* --- Back-compat aliases for category pages that still use wt-hero-grid --- */
.wt-hero-grid {
  display: grid; grid-template-columns: 1fr; gap: 32px 40px;
  padding: 28px 0 40px; border-bottom: 1px solid var(--wt-rule);
  align-items: start;
}
@media (min-width: 900px) {
  .wt-hero-grid { grid-template-columns: minmax(0, 2fr) minmax(0, 1fr) minmax(0, 1fr); }
  .wt-hero-grid > .wt-card--lead {
    grid-column: 1 / 2; grid-row: 1 / 3;
    border-right: 1px solid var(--wt-rule); padding-right: 40px;
    align-self: start;
  }
  .wt-hero-grid > .wt-card--rail {
    grid-column: 2 / 4;
    border-bottom: 1px solid var(--wt-rule); padding-bottom: 24px;
  }
  .wt-hero-grid > .wt-card--tertiary { grid-column: 2 / 3; }
  .wt-hero-grid > .wt-card--quaternary {
    grid-column: 3 / 4;
    border-left: 1px solid var(--wt-rule); padding-left: 40px;
  }
}

.wt-row {
  display: grid; grid-template-columns: 1fr; gap: 32px 40px;
  padding: 32px 0; border-bottom: 1px solid var(--wt-rule);
}
@media (min-width: 720px) {
  .wt-row { grid-template-columns: 1fr 1fr 1fr; }
  .wt-row > *:not(:first-child) {
    border-left: 1px solid var(--wt-rule); padding-left: 40px;
  }
}

/* ------------------------------------------------------------
   8. Article card
   ------------------------------------------------------------ */

.wt-card { display: block; color: var(--wt-ink); text-decoration: none; }
.wt-card:focus-visible { outline: 2px solid var(--wt-link); outline-offset: 4px; border-radius: 2px; }

.wt-card__media {
  display: block;
  width: 100%;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  background: var(--wt-chip-bg);
  margin-bottom: 12px;
  filter: var(--wt-img-filter);
  transition: filter 300ms ease;
}

.wt-card__kicker {
  display: inline-block;
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-eyebrow);
  margin-bottom: 8px;
}

.wt-card__headline {
  font-family: var(--wt-font-display);
  font-weight: 900;
  line-height: 1.1;
  letter-spacing: -0.01em;
  margin: 0 0 10px;
  color: var(--wt-ink);
}

.wt-card--lead       .wt-card__headline { font-size: clamp(28px, 3.4vw, 44px); }
.wt-card--rail       .wt-card__headline,
.wt-card--rail-b     .wt-card__headline { font-size: clamp(22px, 2.4vw, 30px); }
.wt-card--tertiary   .wt-card__headline,
.wt-card--quaternary .wt-card__headline { font-size: 20px; }
.wt-card--lead-sub   .wt-card__headline { font-size: 22px; line-height: 1.22; }
.wt-card--feature    .wt-card__headline { font-size: clamp(24px, 2.8vw, 34px); }
.wt-card--compact    .wt-card__headline { font-size: 17px; }
.wt-card--tall       .wt-card__headline { font-size: clamp(24px, 2.6vw, 32px); }
.wt-card--stack      .wt-card__headline { font-size: 20px; }
.wt-card--grid       .wt-card__headline { font-size: 20px; }
.wt-row              .wt-card__headline { font-size: 22px; }

/* Lead keeps its image so the left column has natural height parity with the
   right rail. The image is large; the headline stays oversized underneath. */
.wt-card--lead .wt-card__media {
  aspect-ratio: 16 / 10;
  margin-bottom: 18px;
}

/* Rail / rail-b / tertiary / quaternary keep their media but sized tighter. */
.wt-card--rail      .wt-card__media,
.wt-card--rail-b    .wt-card__media { aspect-ratio: 16/9; margin-bottom: 10px; }
.wt-card--tertiary  .wt-card__media,
.wt-card--quaternary .wt-card__media,
.wt-card--lead-sub  .wt-card__media { display: none; }

/* Feature (doubled module): big hero image + generous dek. */
.wt-card--feature .wt-card__media { aspect-ratio: 3 / 2; margin-bottom: 14px; }

/* Compact (latest strip): small square-ish thumb above tight headline. */
.wt-card--compact .wt-card__media { aspect-ratio: 4 / 3; margin-bottom: 10px; }
.wt-card--compact .wt-card__dek   { display: none; }
.wt-card--compact .wt-card__byline { display: none; }

/* Tall (asym module): tall portrait-ish image with just a kicker underneath. */
.wt-card--tall .wt-card__media { aspect-ratio: 4 / 5; margin-bottom: 14px; }

/* Stack (asym right column): text-only stacked rows with small thumb. */
.wt-card--stack .wt-card__media { display: none; }

/* Grid (3-up image strip): square image, headline + short dek. */
.wt-card--grid .wt-card__media { aspect-ratio: 1 / 1; margin-bottom: 12px; }

.wt-card__dek {
  font-size: 15px;
  line-height: 1.5;
  color: var(--wt-ink-soft);
  margin: 0 0 12px;
}

.wt-card__byline {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
}

/* Card meta row: BY THE SENTINEL    9 MIN READ - NYT-style small-caps. */
.wt-card__meta {
  display: flex;
  align-items: baseline;
  gap: 12px;
  margin-top: auto;
}
.wt-card__meta .wt-card__byline { margin: 0; }
.wt-card__ttr {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
  white-space: nowrap;
}
.wt-card__ttr::before {
  content: "·";
  margin-right: 10px;
  color: var(--wt-rule);
}

.wt-card:hover .wt-card__headline {
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 3px;
}

/* ------------------------------------------------------------
   9. Article detail
   ------------------------------------------------------------ */

.wt-article {
  padding: 40px 0 80px;
  max-width: 1200px;
  margin: 0 auto;
}

.wt-article__kicker {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--wt-eyebrow);
  margin: 0 0 16px;
}

.wt-article__headline {
  font-family: var(--wt-font-display);
  font-weight: 900;
  line-height: 1.08;
  letter-spacing: -0.015em;
  font-size: clamp(32px, 5vw, 60px);
  margin: 0 0 20px;
  color: var(--wt-ink);
}

.wt-article__dek {
  font-family: var(--wt-font-body);
  font-size: clamp(18px, 1.6vw, 22px);
  line-height: 1.45;
  color: var(--wt-ink-soft);
  margin: 0 0 28px;
  max-width: 740px;
}

.wt-article__byline {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 8px 16px;
  font-family: var(--wt-font-ui);
  font-size: 12px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
  padding: 16px 0;
  border-top: 1px solid var(--wt-rule);
  border-bottom: 1px solid var(--wt-rule);
  margin-bottom: 28px;
}

.wt-article__byline a { color: var(--wt-link); text-decoration: underline; text-underline-offset: 3px; }
.wt-article__byline a:hover { color: var(--wt-link-hover); }

/* Time-to-read pill inside the byline row (X MIN READ) - same typographic
   tier as the rest of the meta line; the surrounding flex-gap handles spacing. */
.wt-article__ttr {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  letter-spacing: 0.05em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
}

.wt-article__hero {
  width: 100%;
  /* height: auto neutralizes the HTML height attribute we set for CLS
     reservation. The browser uses the width/height attrs as an
     intrinsic-ratio hint at parse time, then CSS aspect-ratio takes
     over once styles apply. Without height: auto, the explicit
     height="900" attr would force a 4:3 box once the article fits a
     1200px column. */
  height: auto;
  aspect-ratio: 16 / 9;
  object-fit: cover;
  margin: 0 0 12px;
  background: var(--wt-chip-bg);
  filter: var(--wt-img-filter);
  transition: filter 300ms ease;
}

.wt-article__hero-caption {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  color: var(--wt-ink-quiet);
  max-width: 740px;
  margin: 0 0 32px;
  line-height: 1.4;
}

/* Right-rail sidebar on all article layouts that have one.
   Rule: ALWAYS on the right. Only drops below on true mobile (≤720px).
   Tablets and up keep the sidebar parked to the right of the body. */
.wt-article__layout {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 300px;
  gap: 40px;
}

@media (max-width: 720px) {
  .wt-article__layout { grid-template-columns: 1fr; gap: 28px; }
}

.wt-article__body {
  max-width: 720px;
  font-family: var(--wt-font-body);
  font-size: 19px;
  line-height: 1.65;
  color: var(--wt-ink);
}

.wt-article__body p { margin: 0 0 1.2em; }

.wt-article__body p:first-of-type::first-letter {
  font-family: var(--wt-font-display);
  font-weight: 900;
  float: left;
  font-size: 3.4em;
  line-height: 0.85;
  padding: 6px 10px 0 0;
  color: var(--wt-ink);
}

.wt-article__body h2 {
  font-family: var(--wt-font-display);
  font-weight: 700;
  font-size: 26px;
  line-height: 1.2;
  margin: 40px 0 16px;
  color: var(--wt-ink);
}

.wt-article__body h3 {
  font-family: var(--wt-font-display);
  font-weight: 700;
  font-size: 20px;
  margin: 32px 0 12px;
}

.wt-article__body blockquote {
  border-left: 3px solid var(--wt-rule-strong);
  margin: 28px 0;
  padding: 4px 0 4px 20px;
  font-family: var(--wt-font-display);
  font-size: 22px;
  line-height: 1.3;
  color: var(--wt-ink);
}

.wt-article__body a { color: var(--wt-link); text-decoration: underline; text-underline-offset: 3px; }
.wt-article__body a:hover { color: var(--wt-link-hover); }

/* "More on this story" related-coverage block appended after the body.
   Modeled on the NYT "Related" rail, strong horizontal rule, uppercase
   eyebrow, bulleted serif list. */
.wt-article__related {
  margin-top: 48px;
  padding-top: 28px;
  border-top: 2px solid var(--wt-ink);
}
.wt-article__related-title {
  margin: 0 0 16px;
  font-family: var(--wt-font-ui);
  font-size: 12px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--wt-ink);
}
.wt-article__related-list {
  margin: 0;
  padding: 0;
  list-style: none;
}
.wt-article__related-list li + li {
  margin-top: 10px;
  padding-top: 10px;
  border-top: 1px solid var(--wt-rule);
}
.wt-article__related-list a {
  font-family: var(--wt-font-display);
  font-size: 18px;
  line-height: 1.3;
  color: var(--wt-ink);
  text-decoration: none;
}
.wt-article__related-list a:hover {
  text-decoration: underline;
  text-underline-offset: 3px;
}

.wt-pullquote {
  font-family: var(--wt-font-display);
  font-weight: 700;
  font-size: 28px;
  line-height: 1.25;
  color: var(--wt-ink);
  border-top: 1px solid var(--wt-rule-strong);
  border-bottom: 1px solid var(--wt-rule-strong);
  padding: 22px 0;
  margin: 36px 0;
}

.wt-article__body figure { margin: 28px 0; }
.wt-article__body figure img { width: 100%; display: block; filter: var(--wt-img-filter); }
.wt-article__body figcaption {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  color: var(--wt-ink-quiet);
  margin-top: 8px;
  line-height: 1.4;
}

/* Longform variant - bigger headline, taller 4:3 hero, slightly more lede room. */
.wt-article--longform .wt-article__headline,
.wt-article--b .wt-article__headline {
  font-size: clamp(40px, 6.8vw, 88px);
  letter-spacing: -0.02em;
}
.wt-article--longform .wt-article__hero,
.wt-article--b .wt-article__hero,
.wt-article--longform .wt-article__hero-tall img,
.wt-article--b .wt-article__hero-tall img {
  aspect-ratio: 4 / 3;
  max-height: 80vh;
  width: 100%;
  object-fit: cover;
  filter: var(--wt-img-filter);
}
.wt-article--longform .wt-article__dek,
.wt-article--b .wt-article__dek {
  font-size: clamp(20px, 1.8vw, 26px);
  max-width: 780px;
}

/* Opinion variant - italic dek, accent rule. The kicker is authored
   directly on the article (e.g. "Opinion · Identity") rather than
   auto-prepended via ::before, prepending stacked on kickers that
   already had a category prefix ("Opinion · TARGET · STATE DMVs"). */
.wt-article--opinion .wt-article__dek,
.wt-article--c .wt-article__dek {
  font-style: italic;
  border-left: 3px solid var(--wt-rule-strong);
  padding-left: 18px;
  max-width: 680px;
}
.wt-article--opinion .wt-article__headline,
.wt-article--c .wt-article__headline {
  max-width: 18ch;
}

/* Visual variant */
.wt-article--visual .wt-article__hero,
.wt-article--d .wt-article__hero {
  aspect-ratio: 21 / 9;
  max-height: 72vh;
}
.wt-article--visual .wt-article__headline,
.wt-article--d .wt-article__headline {
  font-size: clamp(36px, 5.5vw, 64px);
}

/* ===========================================================
   Template gallery layouts (E–N), user can preview via
   /templates/ and pick favorites.
   =========================================================== */

/* E - Full-bleed hero: hero truly spans the browser viewport, breaking out
   of both .wt-article (1200px cap) and .wt-shell (1280px cap). Body/sidebar
   below return to the normal constrained grid. */
.wt-article--fullbleed .wt-article__hero-fullbleed,
.wt-article--e .wt-article__hero-fullbleed {
  position: relative;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  margin-top: 12px;
  margin-bottom: 32px;
}
.wt-article--fullbleed .wt-article__hero-fullbleed img,
.wt-article--e .wt-article__hero-fullbleed img {
  width: 100%;
  max-height: 84vh;
  aspect-ratio: auto;
  object-fit: cover;
  display: block;
  filter: var(--wt-img-filter);
}
.wt-article--fullbleed .wt-article__hero-fullbleed p,
.wt-article--e .wt-article__hero-fullbleed p {
  max-width: 1200px;
  margin: 10px auto 0;
  padding: 0 24px;
  font-family: var(--wt-font-ui);
  font-size: 12px;
  color: var(--wt-ink-quiet);
}

/* O - Split-dark: mirror of F (split) but inverted to black. Left column
   is black with red eyebrow + white serif headline; right column is
   floor-to-ceiling image. Stays dark in both default and Dark Knight mode
   (the dark treatment IS the design, not a mode toggle). */
.wt-article--splitdark,
.wt-article--o {
  padding-top: 0;
  max-width: none;
}
.wt-article--splitdark .wt-article__split,
.wt-article--o .wt-article__split {
  position: relative;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  background: #000000;
  color: #f4f4f4;
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  min-height: calc(100vh - 56px);
}
@media (min-width: 900px) {
  .wt-article--splitdark .wt-article__split,
  .wt-article--o .wt-article__split {
    grid-template-columns: 1fr 1fr;
  }
}
.wt-article--splitdark .wt-article__split-col,
.wt-article--o .wt-article__split-col {
  background: #000000;
  color: #f4f4f4;
  padding: 12vh 8vw;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  text-align: center;
}
.wt-article--splitdark .wt-article__split-col .wt-article__kicker,
.wt-article--o .wt-article__split-col .wt-article__kicker {
  color: #d63b3b;
  font-weight: 700;
  letter-spacing: 0.14em;
}
.wt-article--splitdark .wt-article__split-col .wt-article__headline,
.wt-article--o .wt-article__split-col .wt-article__headline {
  font-family: var(--wt-font-display);
  font-weight: 500;
  font-size: clamp(32px, 3.6vw, 52px);
  line-height: 1.12;
  letter-spacing: -0.01em;
  color: #ffffff;
  max-width: 15ch;
  margin: 0 auto 24px;
}
.wt-article--splitdark .wt-article__split-col .wt-article__dek,
.wt-article--o .wt-article__split-col .wt-article__dek {
  font-family: var(--wt-font-body);
  font-size: clamp(14px, 1.05vw, 18px);
  line-height: 1.55;
  color: #c9c9c9;
  max-width: 40ch;
  margin: 0 auto;
}
.wt-article--splitdark .wt-article__split-byline,
.wt-article--o .wt-article__split-byline {
  margin-top: 32px;
  color: #9a9a9a;
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
.wt-article--splitdark .wt-article__split-image,
.wt-article--o .wt-article__split-image {
  position: relative;
  min-height: 50vh;
  background: #000;
  overflow: hidden;
}
.wt-article--splitdark .wt-article__split-image img,
.wt-article--o .wt-article__split-image img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  filter: none;
}
.wt-article--splitdark .wt-article__split-after,
.wt-article--o .wt-article__split-after {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 300px;
  gap: 40px;
  padding: 48px 0 80px;
  max-width: 1200px;
  margin: 0 auto;
}
@media (max-width: 720px) {
  .wt-article--splitdark .wt-article__split-after,
  .wt-article--o .wt-article__split-after {
    grid-template-columns: 1fr;
  }
}
.wt-article--splitdark .wt-article__split-after .wt-article__hero-caption,
.wt-article--o .wt-article__split-after .wt-article__hero-caption {
  grid-column: 1 / -1;
  margin: 0 0 8px;
}

/* F - NYT "Street Fishing" split: white left column with centered headline +
   full-bleed right image. Edge-to-edge (breaks out of .wt-shell padding) and
   forces white even in Dark Knight mode. */
.wt-article--split,
.wt-article--f {
  padding-top: 0;
  max-width: none;
}
.wt-article--split .wt-article__split,
.wt-article--f .wt-article__split {
  position: relative;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  background: #ffffff;
  color: #111111;
  display: grid;
  grid-template-columns: 1fr;
  gap: 0;
  min-height: calc(100vh - 56px);
}
@media (min-width: 900px) {
  .wt-article--split .wt-article__split,
  .wt-article--f .wt-article__split {
    grid-template-columns: 1fr 1fr;
  }
}
.wt-article--split .wt-article__split-col,
.wt-article--f .wt-article__split-col {
  background: #ffffff;
  color: #111111;
  padding: 12vh 8vw;
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
  text-align: center;
}
.wt-article--split .wt-article__split-col .wt-article__headline,
.wt-article--f .wt-article__split-col .wt-article__headline {
  font-family: var(--wt-font-display);
  font-weight: 500;
  font-size: clamp(32px, 3.6vw, 52px);
  line-height: 1.12;
  letter-spacing: -0.01em;
  color: #111111;
  max-width: 15ch;
  margin: 0 auto 24px;
}
.wt-article--split .wt-article__split-col .wt-article__dek,
.wt-article--f .wt-article__split-col .wt-article__dek {
  font-family: var(--wt-font-body);
  font-size: clamp(14px, 1.05vw, 18px);
  line-height: 1.55;
  color: #333333;
  max-width: 40ch;
  margin: 0 auto;
}
.wt-article--split .wt-article__split-byline,
.wt-article--f .wt-article__split-byline {
  margin-top: 32px;
  color: #555555;
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
}
.wt-article--split .wt-article__split-image,
.wt-article--f .wt-article__split-image {
  position: relative;
  min-height: 50vh;
  background: #000;
  overflow: hidden;
}
.wt-article--split .wt-article__split-image img,
.wt-article--f .wt-article__split-image img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
  filter: none;
}
.wt-article--split .wt-article__split-after,
.wt-article--f .wt-article__split-after {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 300px;
  gap: 40px;
  padding: 48px 0 80px;
  max-width: 1200px;
  margin: 0 auto;
}
@media (max-width: 720px) {
  .wt-article--split .wt-article__split-after,
  .wt-article--f .wt-article__split-after {
    grid-template-columns: 1fr;
  }
}
.wt-article--split .wt-article__split-after .wt-article__hero-caption,
.wt-article--f .wt-article__split-after .wt-article__hero-caption {
  grid-column: 1 / -1;
  margin: 0 0 16px;
  color: var(--wt-ink-quiet);
  font-family: var(--wt-font-ui);
  font-size: 12px;
}

/* G - Panorama: extra-wide hero, headline above */
.wt-article--panorama .wt-article__hero-pano,
.wt-article--g .wt-article__hero-pano {
  margin: 12px -24px 8px;
}
.wt-article--panorama .wt-article__hero-pano img,
.wt-article--g .wt-article__hero-pano img {
  width: 100%;
  aspect-ratio: 32 / 9;
  max-height: 56vh;
  object-fit: cover;
  display: block;
  filter: var(--wt-img-filter);
}

/* H - end-of-article rail: when there is no side column (essay, cover,
   and similar treatments), the sidebar panel goes below the body. It looks
   like a chapter-end summary rather than a shoved-in rail. */
.wt-article__end-rail {
  margin: 48px 0 0;
  padding-top: 32px;
  border-top: 2px solid var(--wt-rule-strong);
  max-width: 100%;
}
.wt-article__end-rail .wt-panel {
  background: var(--wt-panel-bg);
  border: 1px solid var(--wt-panel-border);
  border-radius: 4px;
  padding: 20px 24px;
  margin: 0;
}
@media (min-width: 720px) {
  .wt-article__end-rail .wt-panel {
    padding: 24px 28px;
  }
}

/* H - Essay: no sidebar, centered narrow reading column */
.wt-article--essay,
.wt-article--h {
  max-width: 760px;
}
.wt-article--essay .wt-article--essay-inner,
.wt-article--h .wt-article--essay-inner {
  max-width: 680px;
  margin: 0 auto;
}
.wt-article--essay .wt-article--essay-inner .wt-article__body,
.wt-article--h .wt-article--essay-inner .wt-article__body {
  max-width: 100%;
}
.wt-article--essay .wt-article__hero,
.wt-article--h .wt-article__hero { aspect-ratio: 3 / 2; max-height: 54vh; }

/* I - Photo essay: lead figure with caption built-in */
.wt-article--photoessay .wt-article__photo-lead,
.wt-article--i .wt-article__photo-lead {
  margin: 18px -24px 28px;
  padding: 0;
}
.wt-article--photoessay .wt-article__photo-lead img,
.wt-article--i .wt-article__photo-lead img {
  width: 100%; aspect-ratio: 4 / 3; max-height: 88vh;
  object-fit: cover;
  filter: var(--wt-img-filter);
}
.wt-article--photoessay .wt-article__photo-lead figcaption,
.wt-article--i .wt-article__photo-lead figcaption {
  padding: 10px 24px 0;
  font-family: var(--wt-font-ui);
  font-size: 12px;
  color: var(--wt-ink-quiet);
}

/* J - Magazine cover: title overlay on hero.
   Legibility is handled by a bottom-weighted gradient scrim (not a flat
   brightness filter) so the top of the image reads at full fidelity and
   only the text zone gets darkened. */
.wt-article--cover .wt-article__cover,
.wt-article--j .wt-article__cover {
  position: relative;
  margin: 0 -24px 20px;
  overflow: hidden;
}
.wt-article--cover .wt-article__cover img,
.wt-article--j .wt-article__cover img {
  width: 100%; aspect-ratio: 4 / 3; max-height: 78vh;
  object-fit: cover;
  display: block;
  filter: none;
  margin: 0;
}
.wt-article--cover .wt-article__cover::after,
.wt-article--j .wt-article__cover::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background: linear-gradient(
    to top,
    rgba(0, 0, 0, 0.58) 0%,
    rgba(0, 0, 0, 0.55) 20%,
    rgba(0, 0, 0, 0.48) 42%,
    rgba(0, 0, 0, 0.28) 62%,
    rgba(0, 0, 0, 0.08) 82%,
    rgba(0, 0, 0, 0) 100%
  );
}
.wt-article--cover .wt-article__cover-text,
.wt-article--j .wt-article__cover-text {
  position: absolute;
  left: 0; right: 0; bottom: 0;
  padding: 28px 48px 36px;
  color: #ffffff;
  z-index: 1;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.35);
}
.wt-article--cover .wt-article__cover-text .wt-article__kicker,
.wt-article--j .wt-article__cover-text .wt-article__kicker { color: #ffffff; margin-bottom: 8px; }
.wt-article--cover .wt-article__cover-text .wt-article__headline,
.wt-article--j .wt-article__cover-text .wt-article__headline {
  color: #ffffff;
  font-size: clamp(36px, 5vw, 72px);
  max-width: 22ch;
}
.wt-article--cover .wt-article__cover-text .wt-article__dek,
.wt-article--j .wt-article__cover-text .wt-article__dek {
  color: #f0f0f0;
  max-width: 60ch;
}

/* P - NYT "The Interview" editorial cover: floor-to-ceiling hero spanning
   100vw with italic-serif kicker + headline anchored in the bottom-left
   corner. The dark wash is a left-weighted corner gradient (not a full
   bottom bar) so the right side of the image reads at natural fidelity. */
.wt-article--interview,
.wt-article--p {
  padding-top: 0;
  max-width: none;
}
.wt-article--interview .wt-article__cover--interview,
.wt-article--p .wt-article__cover--interview {
  position: relative;
  width: 100vw;
  margin-left: calc(50% - 50vw);
  margin-right: calc(50% - 50vw);
  margin-top: 0;
  margin-bottom: 32px;
  overflow: hidden;
}
.wt-article--interview .wt-article__cover--interview img,
.wt-article--p .wt-article__cover--interview img {
  width: 100%;
  height: min(92vh, 960px);
  object-fit: cover;
  display: block;
  filter: none;
  margin: 0;
}
.wt-article--interview .wt-article__cover--interview::after,
.wt-article--p .wt-article__cover--interview::after {
  content: "";
  position: absolute;
  inset: 0;
  pointer-events: none;
  background:
    linear-gradient(to top, rgba(0,0,0,0.55) 0%, rgba(0,0,0,0.18) 48%, rgba(0,0,0,0) 78%),
    linear-gradient(to right, rgba(0,0,0,0.35) 0%, rgba(0,0,0,0.08) 48%, rgba(0,0,0,0) 72%);
}
.wt-article--interview .wt-article__cover--interview .wt-article__cover-text,
.wt-article--p .wt-article__cover--interview .wt-article__cover-text {
  position: absolute;
  left: clamp(24px, 5vw, 72px);
  bottom: clamp(32px, 6vh, 72px);
  max-width: 640px;
  color: #ffffff;
  z-index: 1;
  text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
}
.wt-article--interview .wt-article__cover--interview .wt-article__kicker,
.wt-article--p .wt-article__cover--interview .wt-article__kicker {
  font-family: var(--wt-font-display);
  font-style: italic;
  font-weight: 700;
  font-size: clamp(16px, 1.6vw, 22px);
  letter-spacing: 0;
  text-transform: none;
  color: #ffffff;
  margin: 0 0 8px;
}
.wt-article--interview .wt-article__cover--interview .wt-article__headline,
.wt-article--p .wt-article__cover--interview .wt-article__headline {
  font-family: var(--wt-font-display);
  font-style: italic;
  font-weight: 400;
  font-size: clamp(22px, 2.4vw, 34px);
  line-height: 1.25;
  letter-spacing: -0.005em;
  color: #ffffff;
  max-width: 22ch;
  margin: 0;
}
.wt-article--interview .wt-article__cover-credit,
.wt-article--p .wt-article__cover-credit {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  color: var(--wt-ink-quiet);
  max-width: 1200px;
  margin: -16px auto 28px;
  padding: 0 24px;
}

/* K - Classic newspaper two-column body */
.wt-article--columns .wt-article__body--columns,
.wt-article--k .wt-article__body--columns {
  columns: 2;
  column-gap: 38px;
  max-width: none;
}
.wt-article--columns .wt-article__body--columns p:first-of-type::first-letter,
.wt-article--k .wt-article__body--columns p:first-of-type::first-letter {
  /* drop cap already inherits */
}
@media (max-width: 900px) {
  .wt-article--columns .wt-article__body--columns,
  .wt-article--k .wt-article__body--columns { columns: 1; }
}

/* L - Dashboard: stat strip above body */
.wt-article--dashboard .wt-article__stats,
.wt-article--l .wt-article__stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 1px;
  background: var(--wt-rule);
  border: 1px solid var(--wt-rule);
  margin: 18px 0 24px;
}
.wt-article--dashboard .wt-article__stat,
.wt-article--l .wt-article__stat {
  background: var(--wt-surface);
  padding: 18px 22px;
}
.wt-article--dashboard .wt-article__stat-label,
.wt-article--l .wt-article__stat-label {
  display: block;
  font-family: var(--wt-font-ui);
  font-size: 12px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-ink-soft);
  font-weight: 600;
}

/* M - Poster: huge title, tiny everything else */
.wt-article--poster .wt-article__poster,
.wt-article--m .wt-article__poster {
  padding: 40px 0 24px;
  border-bottom: 2px solid var(--wt-rule-strong);
  margin-bottom: 24px;
}
.wt-article--poster .wt-article__headline--poster,
.wt-article--m .wt-article__headline--poster {
  font-size: clamp(48px, 8vw, 120px);
  line-height: 0.96;
  letter-spacing: -0.025em;
  max-width: 18ch;
}
.wt-article--poster .wt-article__hero,
.wt-article--m .wt-article__hero { aspect-ratio: 16 / 9; max-height: 50vh; }
.wt-article--poster .wt-article__dek,
.wt-article--m .wt-article__dek {
  font-size: 17px;
  max-width: 55ch;
}

/* N - Diptych: headline left, dek right, hero full-width below */
.wt-article--diptych .wt-article__diptych,
.wt-article--n .wt-article__diptych {
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
  padding: 20px 0 24px;
  border-bottom: 1px solid var(--wt-rule);
}
@media (min-width: 820px) {
  .wt-article--diptych .wt-article__diptych,
  .wt-article--n .wt-article__diptych {
    grid-template-columns: 1.1fr 0.9fr;
    gap: 56px;
  }
}
.wt-article--diptych .wt-article__diptych .wt-article__headline,
.wt-article--n .wt-article__diptych .wt-article__headline {
  font-size: clamp(34px, 4.2vw, 56px);
  margin: 0;
}
.wt-article--diptych .wt-article__diptych .wt-article__dek,
.wt-article--n .wt-article__diptych .wt-article__dek { margin-top: 12px; }

/* ===========================================================
   Template gallery page (/templates/)
   =========================================================== */
.wt-tpl-gallery {
  padding: 36px 0 80px;
  max-width: 1120px;
  margin: 0 auto;
}
.wt-tpl-gallery h1 {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-size: clamp(34px, 4vw, 52px);
  margin: 0 0 12px;
  color: var(--wt-ink);
}
.wt-tpl-gallery p.lede {
  font-family: var(--wt-font-body);
  font-size: 18px;
  line-height: 1.5;
  color: var(--wt-ink-soft);
  max-width: 720px;
  margin: 0 0 32px;
}
.wt-tpl-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: 24px;
}
.wt-tpl-card {
  background: var(--wt-surface);
  border: 1px solid var(--wt-rule);
  border-radius: 6px;
  padding: 20px 22px 22px;
  display: flex;
  flex-direction: column;
  gap: 12px;
  text-decoration: none;
  color: inherit;
  transition: border-color 140ms ease, transform 140ms ease;
}
.wt-tpl-card:hover,
.wt-tpl-card:focus-visible {
  border-color: var(--wt-ink);
  transform: translateY(-2px);
}
.wt-tpl-card:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 3px;
}
.wt-tpl-card__letter {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-size: 42px;
  line-height: 1;
  color: var(--wt-ink);
}
.wt-tpl-card__preview {
  display: block;
  aspect-ratio: 16 / 10;
  background: var(--wt-chip-bg);
  border: 1px solid var(--wt-rule);
  position: relative;
  overflow: hidden;
}
.wt-tpl-card__preview::before,
.wt-tpl-card__preview::after {
  content: "";
  position: absolute;
  background: var(--wt-ink);
  opacity: 0.85;
}
.wt-tpl-card__name {
  font-family: var(--wt-font-display);
  font-weight: 700;
  font-size: 20px;
  line-height: 1.2;
  margin: 0;
  color: var(--wt-ink);
}
.wt-tpl-card__desc {
  font-family: var(--wt-font-ui);
  font-size: 13px;
  line-height: 1.45;
  color: var(--wt-ink-soft);
  margin: 0;
}
.wt-tpl-card__cta {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--wt-link);
  margin-top: auto;
}

/* Mini preview compositions per template */
/* A - Standard: headline bar + full-width hero + body/rail below. The
   hero always runs the full width of the 1200px article rail; it is never
   an inset panel. */
.wt-tpl-preview--a::before { top: 10%; left: 10%; right: 30%; height: 7px; }
.wt-tpl-preview--a::after  { top: 24%; left: 10%; right: 10%; height: 48%; opacity: 0.55; }

.wt-tpl-preview--b::before { top: 10%; left: 10%; right: 28%; height: 8px; }
.wt-tpl-preview--b::after  { top: 28%; left: 10%; right: 10%; bottom: 14%; opacity: 0.55; }

.wt-tpl-preview--c::before { top: 16%; left: 50%; transform: translateX(-50%); width: 36%; height: 5px; opacity: 0.6; }
.wt-tpl-preview--c::after  { top: 28%; left: 50%; transform: translateX(-50%); width: 48%; height: 4px; }

/* D - Visual: full-width headline bar on top, panoramic 21:9 hero band
   below. Same stack order as A; the only difference is the hero band is
   thinner (panoramic) so D reads as "when the image is the point." */
.wt-tpl-preview--d::before { top: 12%; left: 10%; right: 10%; height: 7px; }
.wt-tpl-preview--d::after  { top: 26%; left: 10%; right: 10%; height: 26%; opacity: 0.55; }

.wt-tpl-preview--e::before { top: 12%; left: 12%; right: 38%; height: 6px; }
.wt-tpl-preview--e::after  { top: 34%; left: 0; right: 0; height: 52%; opacity: 0.65; }

.wt-tpl-preview--f::before { top: 28%; left: 8%; width: 32%; height: 6px; }
.wt-tpl-preview--f::after  { top: 0; right: 0; width: 50%; height: 100%; opacity: 0.65; }

.wt-tpl-preview--g::before { top: 12%; left: 10%; right: 34%; height: 7px; }
.wt-tpl-preview--g::after  { top: 40%; left: 0; right: 0; height: 28%; opacity: 0.65; }

.wt-tpl-preview--h::before { top: 20%; left: 28%; right: 28%; height: 5px; }
.wt-tpl-preview--h::after  { top: 34%; left: 28%; right: 28%; bottom: 18%; opacity: 0.3; }

.wt-tpl-preview--i::before { top: 10%; left: 10%; right: 40%; height: 5px; }
.wt-tpl-preview--i::after  { top: 26%; left: 0; right: 0; height: 44%; opacity: 0.65; }

.wt-tpl-preview--j::before { top: 0; left: 0; right: 0; bottom: 0; opacity: 0.55; }
.wt-tpl-preview--j::after  { bottom: 14%; left: 10%; right: 20%; height: 8px; }

.wt-tpl-preview--k::before { top: 12%; left: 10%; width: 38%; bottom: 14%; opacity: 0.25; }
.wt-tpl-preview--k::after  { top: 12%; right: 10%; width: 38%; bottom: 14%; opacity: 0.25; }

.wt-tpl-preview--l::before { top: 12%; left: 10%; right: 40%; height: 6px; }
.wt-tpl-preview--l::after  { top: 26%; left: 10%; right: 10%; height: 14%; opacity: 0.45; }

.wt-tpl-preview--m::before { top: 22%; left: 8%; right: 8%; height: 34%; opacity: 0.9; }
.wt-tpl-preview--m::after  { top: 66%; left: 8%; width: 40%; height: 5px; }

.wt-tpl-preview--n::before { top: 14%; left: 10%; width: 40%; height: 8px; }
.wt-tpl-preview--n::after  { top: 14%; right: 10%; width: 30%; height: 4px; opacity: 0.55; }

/* O - split-dark: left slab is black with a red kicker bar + white headline,
   right slab is a full-bleed image. The preview slab itself gets a black
   background so the black column reads in thumbnail scale. */
.wt-tpl-preview--o { background: #0d0d0d; border-color: #0d0d0d; }
.wt-tpl-preview--o::before { top: 32%; left: 8%; width: 32%; height: 6px; background: #ffffff; opacity: 1; }
.wt-tpl-preview--o::after  { top: 0; right: 0; width: 50%; height: 100%; background: #c9c9c9; opacity: 0.9; }

/* P - NYT interview cover: full-bleed image with italic headline
   anchored in the bottom-left corner. Preview shows a filled slab with
   a headline bar in the lower-left quadrant. */
.wt-tpl-preview--p { background: #6a6a6a; border-color: #6a6a6a; }
.wt-tpl-preview--p::before { bottom: 18%; left: 8%; width: 42%; height: 4px; background: #ffffff; opacity: 1; }
.wt-tpl-preview--p::after  { bottom: 10%; left: 8%; width: 34%; height: 5px; background: #ffffff; opacity: 0.85; }

/* ------------------------------------------------------------
   10. Sidebar, two variants:
       .wt-panel--signal   (public articles: Signal)
       .wt-panel--internal (gated articles: Why this matters to ID.me)
   Both live on the right; both collapse to bottom on mobile.
   ------------------------------------------------------------ */

.wt-panel {
  background: var(--wt-panel-bg);
  border: 1px solid var(--wt-panel-border);
  border-radius: 4px;
  padding: 22px 24px;
  font-family: var(--wt-font-ui);
  font-size: 14px;
  line-height: 1.55;
  color: var(--wt-ink);
  align-self: start;
  /* Intentionally NOT sticky - scrolls with the rest of the article. */
}

.wt-panel__eyebrow {
  margin: 0 0 4px;
  font-family: var(--wt-font-ui);
  font-size: 10px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wt-eyebrow);
}

.wt-panel__title {
  margin: 0 0 14px;
  font-family: var(--wt-font-display);
  font-weight: 700;
  font-size: 20px;
  line-height: 1.2;
  color: var(--wt-ink);
}

.wt-panel h4 {
  margin: 18px 0 4px;
  font-size: 12px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-weight: 600;
  color: var(--wt-ink-quiet);
}

/* Sidebar lede paragraph for the neutralized "Why this matters" rewrite -
   slightly larger body text than the default panel copy to give the why a
   touch more weight than the People-to-Watch roster that follows. */
.wt-panel__lede {
  font-family: var(--wt-font-body);
  font-size: 15px;
  line-height: 1.55;
  color: var(--wt-ink);
  margin: 0 0 20px !important;
  padding-bottom: 18px;
  border-bottom: 1px solid var(--wt-rule);
}

/* Subtitle between sidebar sections (People to Watch → The source → Related) */
.wt-panel__subtitle {
  margin: 22px 0 8px;
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--wt-ink-quiet);
  border-top: 1px solid var(--wt-rule);
  padding-top: 16px;
}
.wt-panel__subtitle:first-of-type { border-top: 0; padding-top: 0; }

.wt-panel p { margin: 0 0 10px; }
.wt-panel ul { margin: 6px 0 10px; padding-left: 18px; }
.wt-panel li { margin-bottom: 6px; }

.wt-panel a { color: var(--wt-link); text-decoration: underline; text-underline-offset: 2px; }
.wt-panel a:hover { color: var(--wt-link-hover); }

/* Person entry (named decision-maker) */
.wt-person {
  display: flex;
  flex-direction: column;
  gap: 2px;
  padding: 10px 0;
  border-top: 1px solid var(--wt-rule);
}
.wt-person:first-of-type { border-top: none; padding-top: 0; }

.wt-person__head {
  display: flex;
  align-items: center;
  gap: 10px;
  justify-content: space-between;
}

.wt-person__name {
  font-weight: 600;
  color: var(--wt-ink);
  font-size: 14px;
}

.wt-person__title {
  color: var(--wt-ink-soft);
  font-size: 12px;
}

.wt-person__link {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 3px 8px;
  border: 1px solid var(--wt-rule);
  border-radius: 999px;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  text-decoration: none !important;
  color: var(--wt-link);
  white-space: nowrap;
  background: var(--wt-surface);
  transition: border-color 120ms ease, color 120ms ease, background 120ms ease;
}
.wt-person__link:hover {
  border-color: var(--wt-link);
  color: var(--wt-link-hover);
  background: var(--wt-panel-bg);
}
.wt-person__link:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 2px;
}
.wt-person__link svg { flex: 0 0 auto; }
.wt-person__link-label { font-weight: 600; }

.wt-person__rationale {
  grid-column: 1 / -1;
  font-size: 12px;
  color: var(--wt-ink-quiet);
  margin: 4px 0 0;
  line-height: 1.4;
}

/* Confidence chip - with explanation tooltip */
.wt-confidence {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 4px 10px;
  border-radius: 999px;
  border: 1px solid;
}
.wt-confidence[data-level="high"]   { background: #d7f4e4; color: #0f5a33; border-color: #8ad7ac; }
.wt-confidence[data-level="medium"] { background: #fbecc7; color: #7a4a07; border-color: #e4bf77; }
.wt-confidence[data-level="low"]    { background: #fbd7d3; color: #7a1a10; border-color: #e49890; }

html[data-mode="batman"] .wt-confidence[data-level="high"]   { background: rgba(169,200,232,0.15); color: #cfe2fa; border-color: rgba(169,200,232,0.45); }
html[data-mode="batman"] .wt-confidence[data-level="medium"] { background: rgba(247,200,120,0.12); color: #f7c878; border-color: rgba(247,200,120,0.4); }
html[data-mode="batman"] .wt-confidence[data-level="low"]    { background: rgba(255,150,150,0.10); color: #ffb3ad; border-color: rgba(255,150,150,0.35); }

.wt-confidence__help {
  display: inline-flex; align-items: center; justify-content: center;
  width: 14px; height: 14px; border-radius: 50%;
  background: currentColor; color: var(--wt-panel-bg);
  font-size: 9px; font-weight: 700;
  text-decoration: none;
  cursor: help;
  flex-shrink: 0;
}

/* ------------------------------------------------------------
   11. Gated screen
   ------------------------------------------------------------ */

.wt-gate {
  max-width: 560px;
  margin: 80px auto;
  padding: 40px 32px;
  text-align: center;
  border: 1px solid var(--wt-rule);
  border-radius: 4px;
  background: var(--wt-surface);
  font-family: var(--wt-font-body);
}

.wt-gate h2 {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-size: 28px;
  margin: 12px 0 8px;
}

.wt-gate p { color: var(--wt-ink-soft); margin: 0 0 24px; }

.wt-gate__field {
  position: relative;
  margin-bottom: 12px;
}
.wt-gate__input {
  width: 100%;
  padding: 12px 44px 12px 14px;
  border: 1px solid var(--wt-rule);
  background: var(--wt-page-bg);
  color: var(--wt-ink);
  font: inherit;
  font-family: var(--wt-font-ui);
  border-radius: 4px;
}
.wt-gate__toggle {
  position: absolute;
  right: 10px;
  top: 50%;
  transform: translateY(-50%);
  background: none;
  border: none;
  padding: 4px;
  cursor: pointer;
  color: var(--wt-ink-quiet);
}
.wt-gate__toggle:hover { color: var(--wt-ink); }
.wt-gate__toggle svg { width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 2; }
.wt-gate__toggle .eye-off { display: none; }
.wt-gate__toggle[data-shown="true"] .eye-on { display: none; }
.wt-gate__toggle[data-shown="true"] .eye-off { display: inline; }

.wt-gate__input:focus {
  outline: 2px solid var(--wt-link);
  outline-offset: 1px;
  border-color: var(--wt-link);
}

.wt-gate__btn {
  display: inline-block;
  padding: 12px 28px;
  background: var(--wt-btn-bg);
  color: var(--wt-btn-ink);
  border: none;
  border-radius: 999px;
  font-family: var(--wt-font-ui);
  font-weight: 600;
  cursor: pointer;
  font-size: 14px;
}
.wt-gate__btn:hover { background: var(--wt-btn-bg-hover); }
.wt-gate__btn:focus-visible { outline: 2px solid var(--wt-link); outline-offset: 2px; }

.wt-gate[data-state="error"] .wt-gate__input {
  border-color: #c81e1e;
  color: #c81e1e;
}

/* ------------------------------------------------------------
   12b. Mini sticky masthead
        - News list pages: hidden until user scrolls past the big
          masthead; then fixed-to-top.
        - Article detail pages: always visible, position: sticky.
   ------------------------------------------------------------ */

.wt-mini {
  display: none;
  background: #ffffff;
  color: #141414;
  border-bottom: 1px solid #d6d6d6;
  font-family: var(--wt-font-ui);
  z-index: 1100;
}
html[data-mode="batman"] .wt-mini {
  background: #05080f;
  color: #dbeafe;
  border-bottom-color: rgba(169, 200, 232, 0.28);
}

/* News-list variant: appears only on scroll, fixed overlay */
body[data-wt-mini="true"] .wt-mini--scroll {
  display: block;
  position: fixed;
  top: 0; left: 0; right: 0;
  box-shadow: 0 2px 14px rgba(0, 0, 0, 0.08);
  animation: wt-mini-slide-down 180ms ease;
}

/* Article-detail variant: always pinned, takes up layout flow */
.wt-mini--always {
  display: block;
  position: sticky;
  top: 0;
}

@keyframes wt-mini-slide-down {
  from { transform: translateY(-100%); }
  to   { transform: translateY(0); }
}

.wt-mini__inner {
  max-width: 1280px;
  margin: 0 auto;
  padding: 10px 24px;
  display: grid;
  grid-template-columns: auto 1fr auto auto auto auto;
  align-items: center;
  gap: 14px;
}

/* The menu button is ALWAYS visible so readers can always get back to the
   main CDO.me nav (Home, I'm hiring, etc.) from inside Watchtower pages. */
.wt-mini__menu-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: none;
  border: none;
  padding: 6px;
  color: inherit;
  cursor: pointer;
  grid-column: 1;
}
.wt-mini__menu-btn svg {
  width: 22px; height: 22px; stroke: currentColor; fill: none; stroke-width: 2;
}

.wt-mini__logo {
  display: inline-flex;
  align-items: center;
  text-decoration: none;
  grid-column: 2;
  justify-self: start;
}
/* Logo sits inside the mini at a legible size. SVG is the visible element
   (inlined by JS), size via the child svg so viewBox scales the paths. */
.wt-mini__logo .wt-logo svg {
  height: 28px;
  width: auto;
  max-width: 240px;
}
@media (min-width: 900px) {
  .wt-mini__logo .wt-logo svg {
    height: 32px;
    max-width: 280px;
  }
}
.wt-mini__inner { padding: 8px 24px; }

.wt-mini__subnav {
  grid-column: 3;
  justify-self: center;
  display: flex;
  align-items: center;
  gap: 18px;
  font-size: 13px;
  letter-spacing: 0.02em;
  white-space: nowrap;
  overflow: hidden;
}
.wt-mini__subnav a {
  color: inherit;
  text-decoration: none;
  padding: 4px 2px;
}
.wt-mini__subnav a:hover { color: var(--wt-link); }
html[data-mode="batman"] .wt-mini__subnav a:hover { color: #ffffff; }
.wt-mini__subnav a[aria-current="page"] {
  font-weight: 700;
  box-shadow: inset 0 -2px 0 currentColor;
}
.wt-mini__subnav .wt-mini__gated { display: none; }
body[data-wt-unlocked="true"] .wt-mini__subnav .wt-mini__gated { display: inline-block; }

.wt-mini__search,
.wt-mini__batmode {
  background: none;
  border: 1px solid transparent;
  padding: 6px 10px;
  cursor: pointer;
  color: inherit;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  font: inherit;
  font-family: inherit;
  border-radius: 999px;
  transition: border-color 120ms ease;
}
.wt-mini__lock { grid-column: 4; }
.wt-mini__search { grid-column: 5; }
.wt-mini__batmode { grid-column: 6; }

/* Mini lock button mirrors the masthead lock but scaled to the mini bar.
   Icon swap: padlock (locked default) vs unlocked padlock (when unlocked). */
.wt-mini__lock {
  background: none;
  border: 1px solid transparent;
  padding: 6px 8px;
  cursor: pointer;
  color: inherit;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border-radius: 999px;
  transition: border-color 120ms ease;
}
.wt-mini__lock:hover { border-color: currentColor; opacity: 0.85; }
.wt-mini__lock svg {
  width: 16px; height: 16px; stroke: currentColor; fill: none; stroke-width: 2;
}
.wt-mini__lock .wt-mini__lock-icon--unlocked { display: none; }
.wt-mini__lock[data-unlocked="true"] .wt-mini__lock-icon--locked { display: none; }
.wt-mini__lock[data-unlocked="true"] .wt-mini__lock-icon--unlocked { display: inline; }
.wt-mini__lock[data-unlocked="true"] { color: var(--wt-link); }

.wt-mini__search svg {
  width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 2;
}
.wt-mini__batmode svg {
  width: 26px; height: auto; fill: currentColor;
}
.wt-mini__search:hover, .wt-mini__batmode:hover {
  border-color: currentColor;
  opacity: 0.85;
}

/* Focus-visible parity for the mini-masthead controls and the subnav
   links (WCAG 2.4.7). Match the focus treatment used elsewhere
   (.wt-card, .wt-skip-link): a 2px link-color outline with offset. */
.wt-mini__menu-btn:focus-visible,
.wt-mini__search:focus-visible,
.wt-mini__batmode:focus-visible,
.wt-mini__lock:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 2px;
  border-radius: 999px;
}
.wt-mini__menu-btn:focus-visible {
  border-radius: 4px;
}
.wt-mini__subnav a:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 3px;
  border-radius: 2px;
}
.wt-mini__logo:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 3px;
  border-radius: 2px;
}

@media (max-width: 820px) {
  .wt-mini__subnav { display: none; }
  .wt-mini__menu-btn { display: inline-flex; }
  .wt-mini__logo { grid-column: 2; justify-self: center; }
  .wt-mini__lock { grid-column: 3; }
  .wt-mini__search { grid-column: 4; }
  .wt-mini__batmode { grid-column: 5; }
  .wt-mini__inner {
    grid-template-columns: auto 1fr auto auto auto;
    gap: 6px;
    padding: 8px 14px;
  }
  .wt-mini__logo .wt-logo svg { height: 22px; max-width: 160px; }
}

/* Mini drawer: mobile menu, main nav + nested news subnav */
.wt-mini__drawer {
  position: fixed;
  inset: 0;
  background: rgba(10, 12, 18, 0.55);
  backdrop-filter: blur(6px);
  -webkit-backdrop-filter: blur(6px);
  z-index: 1250;
  display: none;
}
.wt-mini__drawer[data-open="true"] { display: block; }

/* NYT-style drawer: X on the left, Home row with the Watchtower logomark
   next to it, everything else stacked below with a hover underline treatment. */
.wt-mini__drawer-panel {
  position: absolute;
  top: 0; left: 0; bottom: 0;
  width: min(320px, 86vw);
  background: #ffffff;
  color: #141414;
  padding: 18px 20px 28px;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 2px;
  box-shadow: 2px 0 20px rgba(0, 0, 0, 0.25);
}
html[data-mode="batman"] .wt-mini__drawer-panel {
  background: #0a1220;
  color: #dbeafe;
}
.wt-mini__drawer-close {
  align-self: flex-start;
  background: none;
  border: none;
  color: inherit;
  cursor: pointer;
  padding: 6px;
  margin-bottom: 4px;
}
.wt-mini__drawer-close svg {
  width: 22px; height: 22px; stroke: currentColor; fill: none; stroke-width: 2;
}
/* Drawer link rows - default is no underline; hover / focus-visible add one.
   Mirrors the NYT drawer treatment. */
.wt-mini__drawer-panel a {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 10px 2px;
  color: inherit;
  text-decoration: none;
  font-family: var(--wt-font-ui);
  font-size: 16px;
  border-bottom: 1px solid rgba(0, 0, 0, 0.06);
}
html[data-mode="batman"] .wt-mini__drawer-panel a {
  border-bottom-color: rgba(169, 200, 232, 0.15);
}
.wt-mini__drawer-panel a.wt-mini__drawer-section {
  font-weight: 700;
  margin-top: 10px;
}
.wt-mini__drawer-sub {
  padding-left: 14px;
  border-left: 2px solid #d6d6d6;
  margin: 4px 0 10px 2px;
}
html[data-mode="batman"] .wt-mini__drawer-sub {
  border-left-color: rgba(169, 200, 232, 0.35);
}
.wt-mini__drawer-sub a {
  font-size: 14px;
  padding: 8px 2px;
  border-bottom: none;
}
.wt-mini__drawer-sub a.wt-mini__drawer-gated { display: none; }
body[data-wt-unlocked="true"] .wt-mini__drawer-sub a.wt-mini__drawer-gated { display: flex; }

/* Hover + focus underline treatment - matches the NYT drawer. */
.wt-mini__drawer-panel a:hover .wt-mini__drawer-label,
.wt-mini__drawer-panel a:focus-visible .wt-mini__drawer-label { text-decoration: underline; text-underline-offset: 3px; }
.wt-mini__drawer-panel a:focus-visible { outline: 2px solid var(--wt-link); outline-offset: 2px; border-radius: 2px; }

/* Home row carries the Watchtower logomark to the right of the label. */
.wt-mini__drawer-home {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 10px;
}
.wt-mini__drawer-home__mark {
  display: inline-flex;
  align-items: center;
  height: 22px;
  color: currentColor;
}
.wt-mini__drawer-home__mark svg { height: 20px; width: auto; display: block; }

/* Chevron rendered after every top-level drawer row except Home. */
.wt-mini__drawer-chev {
  display: inline-block;
  color: currentColor;
  opacity: 0.55;
  font-size: 18px;
  line-height: 1;
  transform: translateY(-1px);
}
.wt-mini__drawer-label {
  display: inline-block;
}

/* ------------------------------------------------------------
   12. Mobile
   ------------------------------------------------------------ */

@media (max-width: 720px) {
  .wt-masthead__utility { font-size: 11px; }
  .wt-logo svg { height: 42px; max-width: 90vw; }
  .wt-subnav { gap: 4px 18px; font-size: 12px; }
  .wt-batmode__label { display: none; }
  .wt-hero-grid > .wt-card--rail,
  .wt-hero-grid > .wt-card--quaternary { border: none; padding: 0; }
  .wt-article__body { font-size: 18px; }
}

/* ------------------------------------------------------------
   Pulse, Today's Executive Summary + social pulse grid
   Distinct visual identity from the other section pages:
   big serif numerals (1-10), two-link per-item row (our article +
   source), gated/ungated chip in the subtitle, empty-state social
   grid below for Phase 3/4.
   ------------------------------------------------------------ */

.wt-pulse {
  padding: 40px 0 80px;
  max-width: 1200px;
  margin: 0 auto;
}

.wt-pulse__hd {
  border-top: 2px solid var(--wt-ink);
  border-bottom: 1px solid var(--wt-rule);
  padding: 28px 0 32px;
  margin-bottom: 40px;
}
.wt-pulse__eyebrow {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
  margin: 0 0 12px;
}
.wt-pulse__title {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-size: clamp(40px, 5.5vw, 72px);
  line-height: 1.02;
  letter-spacing: -0.015em;
  margin: 0 0 16px;
  color: var(--wt-ink);
}
.wt-pulse__subtitle {
  font-family: var(--wt-font-body);
  font-size: 16px;
  line-height: 1.5;
  color: var(--wt-ink-soft);
  margin: 0;
  max-width: 720px;
  display: flex;
  align-items: center;
  gap: 14px;
  flex-wrap: wrap;
}
.wt-pulse__chip {
  display: inline-block;
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  font-weight: 700;
  color: var(--wt-ink);
  background: var(--wt-chip-bg, #f2f0eb);
  padding: 5px 10px;
  border-radius: 999px;
}
.wt-pulse__chip--unlocked {
  background: var(--wt-ink);
  color: var(--wt-paper, #fff);
}

/* Top-10 list - each item is a grid of [big numeral | content column]. */
.wt-pulse__list {
  list-style: none;
  margin: 0 0 72px;
  padding: 0;
  counter-reset: pulse;
}

.wt-pulse__item {
  display: grid;
  grid-template-columns: minmax(96px, 140px) 1fr;
  gap: 28px;
  align-items: baseline;
  padding: 28px 0;
  border-bottom: 1px solid var(--wt-rule);
}
.wt-pulse__item:first-child { border-top: 1px solid var(--wt-rule); }

/* The playful, oversized numeral. Italic display serif for a bit of
   editorial warmth; line-height crushed so the number hangs at top-
   baseline with the headline. */
.wt-pulse__num {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-style: italic;
  font-size: clamp(72px, 9vw, 132px);
  line-height: 0.85;
  letter-spacing: -0.04em;
  color: var(--wt-ink);
  text-align: right;
  padding-top: 8px;
  user-select: none;
}
/* Alternate colour on every odd rank so the list reads as a rhythm,
   not a wall. Subtle, we're not shouting. */
.wt-pulse__item[data-rank="1"] .wt-pulse__num,
.wt-pulse__item[data-rank="4"] .wt-pulse__num,
.wt-pulse__item[data-rank="7"] .wt-pulse__num,
.wt-pulse__item[data-rank="10"] .wt-pulse__num {
  color: var(--wt-accent, #c0392b);
}

.wt-pulse__content {
  min-width: 0;
}

.wt-pulse__kicker {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
  margin: 0 0 10px;
}

.wt-pulse__headline {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-size: clamp(22px, 2.6vw, 32px);
  line-height: 1.18;
  letter-spacing: -0.01em;
  color: var(--wt-ink);
  margin: 0 0 12px;
}
.wt-pulse__headline a {
  color: inherit;
  text-decoration: none;
  transition: color 200ms ease;
}
.wt-pulse__headline a:hover {
  text-decoration: underline;
  text-decoration-thickness: 1px;
  text-underline-offset: 4px;
}

.wt-pulse__dek {
  font-family: var(--wt-font-body);
  font-size: 15px;
  line-height: 1.5;
  color: var(--wt-ink-soft);
  margin: 0 0 14px;
  max-width: 680px;
}

.wt-pulse__links {
  display: flex;
  flex-wrap: wrap;
  gap: 6px 18px;
  font-family: var(--wt-font-ui);
  font-size: 12px;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  font-weight: 700;
}
.wt-pulse__link {
  color: var(--wt-link);
  text-decoration: none;
  border-bottom: 1px solid currentColor;
  padding-bottom: 1px;
  transition: color 200ms ease;
}
.wt-pulse__link:hover { color: var(--wt-link-hover); }
.wt-pulse__link--source { color: var(--wt-ink-quiet); }
.wt-pulse__link--source:hover { color: var(--wt-ink); }

.wt-pulse__empty {
  font-family: var(--wt-font-body);
  font-style: italic;
  color: var(--wt-ink-quiet);
  text-align: center;
  padding: 60px 0;
}

/* Social pulse - second section below the Top 10. Phase 3/4 placeholder. */
.wt-pulse__social {
  border-top: 2px solid var(--wt-ink);
  padding-top: 32px;
}
.wt-pulse__social-hd {
  margin-bottom: 24px;
}
.wt-pulse__social-title {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-size: clamp(28px, 3.8vw, 44px);
  line-height: 1.1;
  letter-spacing: -0.01em;
  margin: 0 0 8px;
  color: var(--wt-ink);
}
.wt-pulse__social-subtitle {
  font-family: var(--wt-font-body);
  font-size: 15px;
  line-height: 1.5;
  color: var(--wt-ink-soft);
  margin: 0;
  max-width: 720px;
}
.wt-pulse__social-grid {
  min-height: 200px;
}
.wt-pulse__social-grid--empty {
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 72px 24px;
  border: 1px dashed var(--wt-rule);
  border-radius: 6px;
  background: var(--wt-chip-bg, #fafaf8);
}
.wt-pulse__social-placeholder {
  font-family: var(--wt-font-body);
  font-style: italic;
  font-size: 14px;
  line-height: 1.6;
  color: var(--wt-ink-quiet);
  margin: 0;
  max-width: 520px;
}

/* Mobile - collapse the num column below the content for readability. */
@media (max-width: 640px) {
  .wt-pulse__item {
    grid-template-columns: 1fr;
    gap: 10px;
  }
  .wt-pulse__num {
    text-align: left;
    font-size: clamp(56px, 14vw, 84px);
    padding-top: 0;
    line-height: 0.9;
  }
}

/* ============================================================
   Pulse layout variants, shared tile + per-layout containers
   Sample-content mockups at /pulse/?layout=a|b|c
   ============================================================ */

/* Variant-note chip in the header so the user can see which mockup
   they're looking at. */
.wt-pulse__variant-note {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-accent, #c0392b);
}

/* --- Social tile: used in every variant's "What's hot" grid --- */
.wt-pulse-tile {
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 18px;
  background: var(--wt-paper, #fff);
  border: 1px solid var(--wt-rule);
  border-radius: 6px;
  text-decoration: none;
  color: inherit;
  min-height: 0;
  transition: border-color 180ms ease, transform 180ms ease;
}
.wt-pulse-tile:hover {
  border-color: var(--wt-ink);
  transform: translateY(-1px);
}
.wt-pulse-tile:focus-visible,
.wt-native-tile:focus-visible {
  outline: 2px solid var(--wt-link, #0a66c2);
  outline-offset: 2px;
  border-color: var(--wt-link, #0a66c2);
}
/* Honor reduced-motion preference: disable hover lift + transitions on
   the social tiles. The motion is decorative, the tile is fully usable
   without it. */
@media (prefers-reduced-motion: reduce) {
  .wt-pulse-tile,
  .wt-native-tile,
  .wt-native-tile--alt,
  .wt-tpl-card,
  .wt-pulse-chiclet {
    transition: none;
  }
  .wt-pulse-tile:hover,
  .wt-native-tile:hover,
  .wt-native-tile--alt:hover,
  .wt-tpl-card:hover,
  .wt-tpl-card:focus-visible,
  .wt-pulse-chiclet:hover {
    transform: none;
  }
}
.wt-pulse-tile__hd {
  display: grid;
  grid-template-columns: 36px 1fr auto;
  gap: 10px;
  align-items: center;
}
/* Legacy .wt-pulse-tile__avatar selectors - the structured-ALT
   variant still uses them. Shared sizing lives here. */
.wt-pulse-tile__avatar {
  width: 36px;
  height: 36px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.wt-pulse-tile__avatar--platform svg {
  width: 18px;
  height: 18px;
  display: block;
}

/* Shared author-avatar component. Variants set the size per context
   so a structured tile's avatar (36px) sits right next to a native
   tile's (40px) using the same markup. */
.wt-avatar {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: 50%;
  overflow: hidden;
  flex: 0 0 auto;
  background: var(--wt-chip-bg);
}
.wt-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.wt-avatar--initials {
  color: var(--wt-ink);
  font-family: var(--wt-font-ui);
  font-weight: 700;
  letter-spacing: 0.02em;
}
.wt-avatar--tile       { width: 36px; height: 36px; font-size: 13px; }
.wt-avatar--native-x   { width: 40px; height: 40px; font-size: 14px; }
.wt-avatar--native-alt { width: 40px; height: 40px; font-size: 14px; }
/* Real avatars get the same subtle DKM blue tint as other imagery
   so they don't stand out against the pale-blue UI. */
html[data-mode="batman"] .wt-avatar--img img {
  filter: var(--wt-img-filter);
}
/* Outline platform icon sitting on the right of the header. Uses
   currentColor so DKM can retint it pale blue without touching the
   per-platform rules. */
.wt-pulse-tile__platform--outline {
  width: 20px;
  height: 20px;
  color: var(--wt-ink-quiet);
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.wt-pulse-tile__platform--outline svg {
  width: 100%;
  height: 100%;
  display: block;
}
.wt-pulse-tile__author {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.wt-pulse-tile__name {
  font-family: var(--wt-font-ui);
  font-size: 13px;
  font-weight: 700;
  color: var(--wt-ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.wt-pulse-tile__handle {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  color: var(--wt-ink-quiet);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.wt-pulse-tile__platform {
  width: 20px;
  height: 20px;
  display: inline-flex;
  align-items: center;
  color: var(--wt-ink-quiet);
}
.wt-pulse-tile__platform svg { width: 100%; height: 100%; }
.wt-pulse-tile[data-platform="x"]         .wt-pulse-tile__platform { color: #000; }
.wt-pulse-tile[data-platform="linkedin"]  .wt-pulse-tile__platform { color: #0a66c2; }
.wt-pulse-tile[data-platform="youtube"]   .wt-pulse-tile__platform { color: #ff0000; }
.wt-pulse-tile[data-platform="instagram"] .wt-pulse-tile__platform { color: #e4405f; }
.wt-pulse-tile[data-platform="tiktok"]    .wt-pulse-tile__platform { color: #000; }

.wt-pulse-tile__thumb {
  background: var(--wt-chip-bg, #f2f0eb);
  color: var(--wt-ink-quiet);
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  padding: 22px 12px;
  border-radius: 4px;
  text-align: center;
  font-weight: 700;
}
.wt-pulse-tile[data-platform="youtube"] .wt-pulse-tile__thumb {
  background: linear-gradient(135deg, #2a2a2a, #555);
  color: #fff;
}
.wt-pulse-tile[data-platform="tiktok"] .wt-pulse-tile__thumb {
  background: linear-gradient(135deg, #000, #333);
  color: #fff;
}
.wt-pulse-tile[data-platform="instagram"] .wt-pulse-tile__thumb {
  background: linear-gradient(45deg, #f09433, #e6683c, #dc2743, #cc2366, #bc1888);
  color: #fff;
}

.wt-pulse-tile__text {
  font-family: var(--wt-font-body);
  font-size: 14px;
  line-height: 1.45;
  color: var(--wt-ink);
  margin: 0;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 5;
  overflow: hidden;
}
.wt-pulse-tile__stats {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.02em;
  color: var(--wt-ink-quiet);
  margin: 0;
  padding-top: 8px;
  border-top: 1px solid var(--wt-rule);
}

/* Social grid - default (stacked Phase 1 variant) */
.wt-pulse__social-grid {
  display: grid;
  gap: 16px;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  min-height: auto;
  padding: 0;
  border: 0;
  background: transparent;
}
.wt-pulse__social-grid--empty {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 72px 24px;
  border: 1px dashed var(--wt-rule);
  border-radius: 6px;
  background: var(--wt-chip-bg, #fafaf8);
}

/* ============================================================
   Layout A, Carousel
   Crossfade between slides, dots, 7s auto-advance
   ============================================================ */
.wt-pulse--a .wt-pulse__hd { padding-bottom: 20px; }
.wt-pulse-carousel {
  position: relative;
  margin-bottom: 56px;
}
.wt-pulse-carousel__stage {
  position: relative;
  min-height: 380px;
}
.wt-pulse-carousel__slide {
  position: absolute;
  inset: 0;
  opacity: 0;
  pointer-events: none;
  transition: opacity 600ms ease;
  display: block;
}
.wt-pulse-carousel__slide.is-active {
  opacity: 1;
  pointer-events: auto;
  position: relative;
}
.wt-pulse-carousel__slide .wt-pulse__item {
  display: grid;
  grid-template-columns: minmax(120px, 180px) 1fr;
  gap: 36px;
  align-items: start;
  padding: 16px 0 0;
  border: 0;
}
.wt-pulse-carousel__dots {
  display: flex;
  gap: 10px;
  justify-content: center;
  margin-top: 28px;
}
.wt-pulse-carousel__dot {
  width: 10px;
  height: 10px;
  border-radius: 50%;
  border: 1px solid var(--wt-ink);
  background: transparent;
  padding: 0;
  cursor: pointer;
  transition: background 200ms ease;
}
.wt-pulse-carousel__dot.is-active {
  background: var(--wt-ink);
}

/* ============================================================
   Layout B, Split hero (compact Top 10 | social grid)
   ============================================================ */
.wt-pulse-split {
  display: grid;
  grid-template-columns: 5fr 7fr;
  gap: 40px;
  align-items: start;
}
.wt-pulse-split__left { min-width: 0; }
.wt-pulse-split__right { min-width: 0; }
.wt-pulse-split__label {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wt-ink);
  font-weight: 700;
  margin: 0 0 18px;
  padding-bottom: 10px;
  border-bottom: 2px solid var(--wt-ink);
}

/* Compact Top-10 list (used inside Layout B left column) */
.wt-pulse-compact {
  list-style: none;
  margin: 0;
  padding: 0;
}
.wt-pulse-compact__item {
  display: grid;
  grid-template-columns: 32px 1fr;
  gap: 14px;
  align-items: baseline;
  padding: 14px 0;
  border-bottom: 1px solid var(--wt-rule);
}
.wt-pulse-compact__item:last-child { border-bottom: 0; }
.wt-pulse-compact__num {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-style: italic;
  font-size: 38px;
  line-height: 1;
  color: var(--wt-ink);
  text-align: right;
}
.wt-pulse-compact__body {
  display: flex;
  flex-direction: column;
  gap: 4px;
  min-width: 0;
}
.wt-pulse-compact__kicker {
  font-family: var(--wt-font-ui);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
}
.wt-pulse-compact__headline {
  font-family: var(--wt-font-display);
  font-weight: 800;
  font-size: 18px;
  line-height: 1.25;
  color: var(--wt-ink);
  text-decoration: none;
}
.wt-pulse-compact__dek {
  font-family: var(--wt-font-body);
  font-size: 14px;
  line-height: 1.45;
  color: var(--wt-ink-soft);
  margin-top: 4px;
}
.wt-pulse-compact__headline:hover {
  text-decoration: underline;
  text-underline-offset: 3px;
}

/* Layout B: pared-down title (no eyebrow, no subtitle, no top rule) */
.wt-pulse--b .wt-pulse__title--bare {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-size: clamp(40px, 5.5vw, 72px);
  line-height: 1.02;
  letter-spacing: -0.015em;
  margin: 0 0 32px;
  padding: 0;
  border: 0;
  color: var(--wt-ink);
}

/* Right-rail social grid - single column, narrow, matches Top 10 height */
.wt-pulse__social-grid--b {
  grid-template-columns: 1fr;
  gap: 12px;
}
.wt-pulse__social-grid--b .wt-pulse-tile {
  padding: 14px;
}
.wt-pulse__social-grid--b .wt-pulse-tile__text {
  -webkit-line-clamp: 3;
  font-size: 13px;
}

/* Full-width continuation grid - appears below the split once the right
   rail has rendered its tiles. This is the overflow of "What's hot" that
   didn't fit alongside the Top 10. */
.wt-pulse__social-grid--wide {
  margin-top: 32px;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
}


/* ============================================================
   Layout C, Horizontal chiclet ticker
   ============================================================ */
/* Base ticker styles (superseded by the layout-C block below, which
   turns .wt-pulse-ticker into a flex row so the nav arrows can sit
   outside the scrolling viewport). Left here for legacy non-C callers. */
/* Layout C: pared-down title, matching Layout B */
.wt-pulse--c .wt-pulse__title--bare {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-size: clamp(40px, 5.5vw, 72px);
  line-height: 1.02;
  letter-spacing: -0.015em;
  margin: 0 0 40px;
  padding: 0;
  border: 0;
  color: var(--wt-ink);
}
.wt-pulse--c .wt-pulse__social {
  margin-top: 64px;
  padding-top: 40px;
  border-top: 1px solid var(--wt-rule);
}
.wt-pulse--c .wt-pulse__social-title {
  margin-bottom: 24px;
}

.wt-pulse-chiclet {
  scroll-snap-align: start;
  display: flex;
  flex-direction: column;
  gap: 10px;
  padding: 22px 22px 24px;
  background: var(--wt-paper, #fff);
  border: 1px solid var(--wt-rule);
  border-radius: 6px;
  text-decoration: none;
  color: inherit;
  min-height: 280px;
  transition: border-color 180ms ease, transform 180ms ease, box-shadow 180ms ease;
}
.wt-pulse-chiclet:hover {
  border-color: var(--wt-ink);
  transform: translateY(-2px);
  box-shadow: 0 4px 12px rgba(0,0,0,0.06);
}
.wt-pulse-chiclet__num {
  font-family: var(--wt-font-display);
  font-weight: 900;
  font-style: italic;
  font-size: 60px;
  line-height: 0.9;
  letter-spacing: -0.03em;
  color: var(--wt-ink);         /* All ranks black, no accent */
  margin-bottom: 4px;
}
.wt-pulse-chiclet__kicker {
  font-family: var(--wt-font-ui);
  font-size: 10px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
}
.wt-pulse-chiclet__headline {
  font-family: var(--wt-font-display);
  font-weight: 800;
  font-size: 18px;
  line-height: 1.22;
  color: var(--wt-ink);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}
.wt-pulse-chiclet__dek {
  font-family: var(--wt-font-body);
  font-size: 13px;
  line-height: 1.45;
  color: var(--wt-ink-soft);
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}

/* Ticker container - flex row: [prev arrow] [scrolling viewport] [next arrow]
   The viewport holds the track and clips it; arrows are flex siblings
   that sit outside the carousel and never overlap the chiclets. */
.wt-pulse-ticker {
  display: flex;
  align-items: center;
  gap: 16px;
  margin: 0 0 40px;
}
.wt-pulse-ticker__viewport {
  flex: 1 1 auto;
  min-width: 0;                 /* allow flex child to shrink below intrinsic width */
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.wt-pulse-ticker__viewport::-webkit-scrollbar { display: none; }
.wt-pulse-ticker__track {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(280px, 320px);
  gap: 16px;
  padding: 4px;                 /* Prevent hover shadow from clipping */
}
.wt-pulse-ticker__nav {
  flex: 0 0 44px;
  width: 44px;
  height: 44px;
  border-radius: 50%;
  border: 1px solid var(--wt-rule);
  background: var(--wt-paper, #fff);
  font-size: 24px;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(0,0,0,0.08);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding-bottom: 3px;
  color: var(--wt-ink);
  transition: border-color 180ms ease, background 180ms ease, color 180ms ease;
}
.wt-pulse-ticker__nav:hover {
  border-color: var(--wt-ink);
  background: var(--wt-ink);
  color: var(--wt-paper, #fff);
}

.wt-pulse__social-grid--c,
.wt-pulse__social-grid--a {
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
}
@media (max-width: 1024px) {
  .wt-pulse__social-grid--c,
  .wt-pulse__social-grid--a {
    grid-template-columns: repeat(3, 1fr);
  }
}
@media (max-width: 700px) {
  .wt-pulse-split { grid-template-columns: 1fr; }
  .wt-pulse-ticker__nav { display: none; }
  .wt-pulse__social-grid,
  .wt-pulse__social-grid--a,
  .wt-pulse__social-grid--b,
  .wt-pulse__social-grid--c { grid-template-columns: 1fr; }
}

/* ------------------------------------------------------------
   Dark Knight mode: flip card surfaces so they read as dark
   cards on dark background, not glowing white rectangles. Text
   colors already use ink tokens that remap for batman, so once
   the surface flips the contrast math checks out.
   ------------------------------------------------------------ */
html[data-mode="batman"] .wt-pulse-chiclet,
html[data-mode="batman"] .wt-pulse-tile {
  background: var(--wt-surface);
  border-color: var(--wt-rule);
}
html[data-mode="batman"] .wt-pulse-chiclet:hover,
html[data-mode="batman"] .wt-pulse-tile:hover {
  border-color: var(--wt-rule-strong);
  box-shadow: 0 4px 16px rgba(0,0,0,0.35);
}
html[data-mode="batman"] .wt-pulse-ticker__nav {
  background: var(--wt-surface);
  border-color: var(--wt-rule);
  color: var(--wt-ink);
  box-shadow: 0 2px 10px rgba(0,0,0,0.45);
}
html[data-mode="batman"] .wt-pulse-ticker__nav:hover {
  background: var(--wt-ink);
  color: var(--wt-surface);
  border-color: var(--wt-ink);
}
/* The chip-style thumbnail on tiles without a per-platform
   gradient (generic, reddit). Stays subtle in dark mode. */
html[data-mode="batman"] .wt-pulse-tile__thumb {
  background: var(--wt-chip-bg);
  color: var(--wt-ink-soft);
}
/* Stats strip separator - the default --wt-rule maps for batman,
   but the top-border is the only thing keeping it visible; ensure
   it reads at comfortable contrast. */
html[data-mode="batman"] .wt-pulse-tile__stats {
  border-top-color: var(--wt-rule);
}

/* ------------------------------------------------------------
   Pulse, "native view" tiles. Parallel to the structured grid
   but each card is framed to evoke the platform it came from:
   YouTube → thumbnail + play overlay; X → tweet card;
   Reddit → reddit-row; generic for LinkedIn/TikTok/IG.
   ------------------------------------------------------------ */

.wt-pulse__social-sub {
  margin: 4px 0 20px;
  font-family: var(--wt-font-ui);
  font-size: 13px;
  color: var(--wt-ink-quiet);
}
.wt-pulse__social--native {
  margin-top: 56px;
  padding-top: 32px;
  border-top: 1px solid var(--wt-rule);
}
.wt-pulse__native-grid {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 20px;
}
@media (max-width: 1024px) {
  .wt-pulse__native-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .wt-pulse__native-grid { grid-template-columns: 1fr; }
}

.wt-native-tile {
  display: flex;
  flex-direction: column;
  text-decoration: none;
  color: inherit;
  background: var(--wt-paper, #fff);
  border: 1px solid var(--wt-rule);
  border-radius: 12px;
  overflow: hidden;
  transition: border-color 180ms ease, transform 180ms ease, box-shadow 180ms ease;
}
.wt-native-tile:hover {
  border-color: var(--wt-ink);
  transform: translateY(-2px);
  box-shadow: 0 6px 18px rgba(0,0,0,0.08);
}

/* ----- YouTube ----- */
.wt-native-tile--youtube { padding: 0; }
.wt-native-yt__media {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: #000;
  overflow: hidden;
}
.wt-native-yt__thumb {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.wt-native-yt__thumb--placeholder {
  background: linear-gradient(135deg, #1a1a1a, #3a3a3a);
}
.wt-native-yt__play {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 60px; height: 42px;
  background: rgba(0,0,0,0.82);
  border-radius: 12px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  transition: background 160ms ease, transform 160ms ease;
}
.wt-native-yt__play svg { width: 22px; height: 22px; }
.wt-native-tile--youtube:hover .wt-native-yt__play {
  background: #ff0000;
  transform: translate(-50%, -50%) scale(1.05);
}
.wt-native-yt__body {
  padding: 14px 16px 16px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.wt-native-yt__title {
  font-family: var(--wt-font-ui);
  font-weight: 600;
  font-size: 15px;
  line-height: 1.32;
  color: var(--wt-ink);
  margin: 0;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}
.wt-native-yt__meta {
  font-family: var(--wt-font-ui);
  font-size: 12.5px;
  color: var(--wt-ink-quiet);
  margin: 0;
}

/* ----- X (tweet card) ----- */
.wt-native-tile--x { padding: 16px 16px 14px; gap: 10px; }
.wt-native-x__hd {
  display: grid;
  grid-template-columns: 40px 1fr auto;
  gap: 10px;
  align-items: center;
}
.wt-native-x__avatar {
  width: 40px; height: 40px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.wt-native-x__avatar svg { width: 20px; height: 20px; }
.wt-native-x__author { display: flex; flex-direction: column; min-width: 0; }
.wt-native-x__name {
  font-family: var(--wt-font-ui);
  font-weight: 700;
  font-size: 14px;
  color: var(--wt-ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.wt-native-x__handle {
  font-family: var(--wt-font-ui);
  font-size: 13px;
  color: var(--wt-ink-quiet);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.wt-native-x__mark {
  display: inline-flex;
  width: 18px; height: 18px;
  color: var(--wt-ink);
}
.wt-native-x__mark svg { width: 100%; height: 100%; }
.wt-native-x__text {
  font-family: var(--wt-font-ui);
  font-size: 15px;
  line-height: 1.42;
  color: var(--wt-ink);
  margin: 0;
  white-space: pre-wrap;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 6;
  overflow: hidden;
}
.wt-native-x__stats {
  display: flex;
  gap: 18px;
  padding-top: 10px;
  margin-top: 4px;
  border-top: 1px solid var(--wt-rule);
  font-family: var(--wt-font-ui);
  font-size: 12.5px;
  color: var(--wt-ink-quiet);
}

/* ----- Reddit ----- */
.wt-native-tile--reddit {
  flex-direction: row;
  padding: 0;
}
.wt-native-rd__votes {
  flex: 0 0 44px;
  background: var(--wt-chip-bg);
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  padding: 14px 4px;
  gap: 4px;
}
.wt-native-rd__arrow {
  color: #ff4500;
  font-size: 14px;
  line-height: 1;
}
.wt-native-rd__score {
  font-family: var(--wt-font-ui);
  font-weight: 700;
  font-size: 12px;
  color: var(--wt-ink);
}
.wt-native-rd__body {
  flex: 1 1 auto;
  padding: 14px 16px 14px 12px;
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}
.wt-native-rd__sub {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  font-weight: 700;
  color: var(--wt-ink);
  margin: 0;
}
.wt-native-rd__dot { color: var(--wt-ink-quiet); font-weight: 400; margin: 0 2px; }
.wt-native-rd__title {
  font-family: var(--wt-font-ui);
  font-weight: 600;
  font-size: 15.5px;
  line-height: 1.3;
  color: var(--wt-ink);
  margin: 0;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}
.wt-native-rd__text {
  font-family: var(--wt-font-ui);
  font-size: 13px;
  line-height: 1.45;
  color: var(--wt-ink-soft);
  margin: 0;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3;
  overflow: hidden;
}
.wt-native-rd__stats {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  color: var(--wt-ink-quiet);
  margin: 4px 0 0;
}

/* ----- Generic (LinkedIn / TikTok / IG placeholders) ----- */
.wt-native-tile--generic { padding: 16px; gap: 10px; }
.wt-native-gen__hd {
  display: grid;
  grid-template-columns: 40px 1fr;
  gap: 10px;
  align-items: center;
}
.wt-native-gen__avatar {
  width: 40px; height: 40px;
  border-radius: 50%;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.wt-native-gen__avatar svg { width: 20px; height: 20px; }
.wt-native-gen__author { display: flex; flex-direction: column; min-width: 0; }
.wt-native-gen__name {
  font-family: var(--wt-font-ui);
  font-weight: 700;
  font-size: 14px;
  color: var(--wt-ink);
}
.wt-native-gen__meta {
  font-family: var(--wt-font-ui);
  font-size: 11px;
  letter-spacing: 0.08em;
  color: var(--wt-ink-quiet);
}
.wt-native-gen__text {
  font-family: var(--wt-font-ui);
  font-size: 14px;
  line-height: 1.45;
  color: var(--wt-ink);
  margin: 0;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 5;
  overflow: hidden;
}

/* ----- Reddit, taller to match YT ----- */
.wt-native-tile--reddit {
  flex-direction: row;
  padding: 0;
  min-height: 260px;            /* parity with YouTube card height */
}
.wt-native-rd__arrow--down {
  color: var(--wt-ink-quiet);
  font-size: 14px;
  line-height: 1;
  margin-top: 2px;
}
.wt-native-rd__stats {
  display: flex;
  gap: 14px;
  font-family: var(--wt-font-ui);
  font-size: 12px;
  color: var(--wt-ink-quiet);
  margin: 6px 0 0;
  padding-top: 8px;
  border-top: 1px solid var(--wt-rule);
}

/* ----- Native ALT ----- Platform-specific body under a unified
   author + platform header. Compromise layout between "structured"
   (consistent card) and "native" (platform-flavored body). */
.wt-native-tile--alt { padding: 14px 16px 16px; gap: 12px; }
.wt-native-alt__hd {
  display: grid;
  grid-template-columns: 40px 1fr auto;
  gap: 10px;
  align-items: center;
}
.wt-native-alt__avatar {
  width: 40px; height: 40px;
  border-radius: 50%;
  background: var(--wt-chip-bg);
  color: var(--wt-ink);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-family: var(--wt-font-ui);
  font-weight: 700;
  font-size: 14px;
  letter-spacing: 0.02em;
}
.wt-native-alt__author {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.wt-native-alt__name {
  font-family: var(--wt-font-ui);
  font-weight: 700;
  font-size: 14px;
  color: var(--wt-ink);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.wt-native-alt__meta {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  color: var(--wt-ink-quiet);
}
/* Platform marker - outline-bordered circle with a single-color
   glyph. Matches the CDO.me footer treatment: monochrome ink, not
   brand colors. DKM retints the glyph + border to pale blue. */
.wt-native-alt__platform {
  width: 40px;
  height: 40px;
  border-radius: 50%;
  border: 1px solid var(--wt-rule);
  background: transparent;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  color: var(--wt-ink);
}
.wt-native-alt__platform svg { width: 20px; height: 20px; display: block; }
html[data-mode="batman"] .wt-native-alt__platform {
  color: var(--wt-ink-soft);
  border-color: var(--wt-rule);
}

.wt-native-alt__body {
  display: flex;
  flex-direction: column;
  gap: 8px;
  min-width: 0;
}
.wt-native-alt__media {
  position: relative;
  width: 100%;
  aspect-ratio: 16 / 9;
  background: #000;
  border-radius: 8px;
  overflow: hidden;
}
.wt-native-alt__thumb {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.wt-native-alt__thumb--placeholder {
  background: linear-gradient(135deg, #1a1a1a, #3a3a3a);
}
.wt-native-alt__play {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: 52px; height: 36px;
  background: rgba(0,0,0,0.82);
  border-radius: 10px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
}
.wt-native-alt__play svg { width: 20px; height: 20px; }
.wt-native-tile--alt[data-platform="youtube"]:hover .wt-native-alt__play {
  background: #ff0000;
}
/* Instagram thumbnails are typically square or 4/5 portrait - crop the
   media frame to a square so we don't widen IG photos into a YouTube-like
   strip and lose the composition. Reels keep the same square crop and
   show a play affordance on top. */
.wt-native-tile--alt[data-platform="instagram"] .wt-native-alt__media {
  aspect-ratio: 1 / 1;
}
.wt-native-tile--alt[data-platform="instagram"]:hover .wt-native-alt__play {
  background: linear-gradient(135deg, #f58529 0%, #dd2a7b 50%, #8134af 100%);
}
/* LinkedIn tiles never have media in the schema today - give the body
   a tight, Open-Sans-feeling treatment that mirrors the LI feed card.
   The first line is bolded as a pseudo-title; the rest is body text. */
.wt-native-tile--alt[data-platform="linkedin"] .wt-native-alt__title {
  font-size: 14px;
  font-weight: 600;
  line-height: 1.4;
}
.wt-native-alt__title {
  font-family: var(--wt-font-ui);
  font-weight: 700;
  font-size: 15px;
  line-height: 1.32;
  color: var(--wt-ink);
  margin: 0;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  overflow: hidden;
}
.wt-native-alt__text {
  font-family: var(--wt-font-ui);
  font-size: 13.5px;
  line-height: 1.45;
  color: var(--wt-ink);
  margin: 0;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 5;
  overflow: hidden;
}
.wt-native-alt__stats {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  color: var(--wt-ink-quiet);
  padding-top: 10px;
  border-top: 1px solid var(--wt-rule);
}

/* Batman-mode overrides for native tiles - same surface flip as
   the structured grid cards. */
html[data-mode="batman"] .wt-native-tile {
  background: var(--wt-surface);
  border-color: var(--wt-rule);
}
html[data-mode="batman"] .wt-native-tile:hover {
  border-color: var(--wt-rule-strong);
  box-shadow: 0 6px 18px rgba(0,0,0,0.35);
}
html[data-mode="batman"] .wt-native-rd__votes {
  background: rgba(169, 200, 232, 0.05);
}
html[data-mode="batman"] .wt-native-x__stats,
html[data-mode="batman"] .wt-native-alt__stats,
html[data-mode="batman"] .wt-native-rd__stats {
  border-top-color: var(--wt-rule);
}

/* Outline platform icons + alt-tile platform marks take a pale-blue
   tint in DKM so they harmonize with the rest of the aesthetic. */
html[data-mode="batman"] .wt-pulse-tile__platform--outline,
html[data-mode="batman"] .wt-native-alt__platform,
html[data-mode="batman"] .wt-native-x__mark {
  color: var(--wt-ink-soft);
}
/* Platform-logo avatars in DKM - swap the bright brand colors
   for a neutral dark surface + pale-blue glyph. */
html[data-mode="batman"] .wt-pulse-tile__avatar--platform,
html[data-mode="batman"] .wt-native-x__avatar,
html[data-mode="batman"] .wt-native-gen__avatar {
  background: var(--wt-chip-bg) !important;
  color: var(--wt-ink-soft) !important;
}
html[data-mode="batman"] .wt-pulse-tile__avatar--initials,
html[data-mode="batman"] .wt-native-alt__avatar {
  background: var(--wt-chip-bg);
  color: var(--wt-ink);
}

/* Four article hero layouts (interview, split, splitdark, cover)
   explicitly set filter:none in light mode so the photography stays
   vivid. In Dark Knight mode that's wrong, the hero stays full-
   color while everything else blues out. Re-apply the token so these
   heroes match the rest of the site's DKM treatment. */
html[data-mode="batman"] .wt-article--interview .wt-article__cover--interview img,
html[data-mode="batman"] .wt-article--p          .wt-article__cover--interview img,
html[data-mode="batman"] .wt-article--split      .wt-article__split-image img,
html[data-mode="batman"] .wt-article--f          .wt-article__split-image img,
html[data-mode="batman"] .wt-article--splitdark  .wt-article__split-image img,
html[data-mode="batman"] .wt-article--o          .wt-article__split-image img,
html[data-mode="batman"] .wt-article--cover      .wt-article__cover img,
html[data-mode="batman"] .wt-article--j          .wt-article__cover img {
  filter: var(--wt-img-filter);
}

/* =====================================================================
   Layout switcher (A / B / C). Tucked above the home grid; only renders
   on / where [data-wt-home] exists. Inert outside that page.
   ===================================================================== */
.wt-layout-switch {
  display: flex;
  align-items: center;
  gap: 8px;
  padding: 12px 0 18px;
  margin: 0 0 4px;
  border-bottom: 1px solid var(--wt-rule);
  font: 12px/1 var(--cdo-sans, system-ui, sans-serif);
}
.wt-layout-switch__label {
  color: var(--wt-ink-quiet);
  letter-spacing: 0.06em;
  text-transform: uppercase;
  margin-right: 4px;
}
.wt-layout-switch button {
  appearance: none;
  background: transparent;
  border: 1px solid var(--wt-rule);
  color: var(--wt-ink-soft);
  padding: 6px 10px;
  border-radius: 999px;
  cursor: pointer;
  font: inherit;
  font-weight: 500;
  letter-spacing: 0.02em;
}
.wt-layout-switch button:hover { border-color: var(--wt-rule-strong); color: var(--wt-ink); }
.wt-layout-switch button[aria-current="true"] {
  background: var(--wt-ink);
  color: var(--wt-paper, #fff);
  border-color: var(--wt-ink);
}

/* =====================================================================
   Version C, NYT-inspired modules
   --------------------------------------------------------------------- */

/* Generic vertical rhythm for C modules. */
.wt-c-mod { padding: 28px 0; border-top: 1px solid var(--wt-rule); }
.wt-c-mod:first-child { border-top: 0; padding-top: 12px; }

/* ---- Hero package (C) ---- */
.wt-c-hero {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 24px;
  border-top: 0;
  padding-top: 18px;
}
@media (min-width: 740px) {
  .wt-c-hero {
    grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
    gap: 32px;
  }
}
.wt-c-hero__lead { display: flex; flex-direction: column; gap: 12px; text-decoration: none; color: inherit; }
.wt-c-hero__media {
  width: 100%;
  height: auto;
  display: block;
  aspect-ratio: 16/10;
  object-fit: cover;
  background: var(--wt-rule);
}
.wt-c-hero__kicker {
  font: 600 11px/1 var(--cdo-sans);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
}
.wt-c-hero__headline {
  font: 700 30px/1.1 var(--cdo-serif, "nyt-cheltenham", georgia, serif);
  letter-spacing: -0.005em;
  margin: 0;
  color: var(--wt-ink);
}
@media (min-width: 740px) {
  .wt-c-hero__headline { font-size: 38px; line-height: 1.08; }
}
.wt-c-hero__dek {
  margin: 0;
  font: 400 16px/1.45 var(--cdo-serif);
  color: var(--wt-ink-soft);
}
.wt-c-hero__bullets {
  list-style: none;
  margin: 0;
  padding: 0;
  border-top: 1px solid var(--wt-rule);
  padding-top: 12px;
  display: grid;
  gap: 6px;
}
.wt-c-hero__bullets li {
  position: relative;
  padding-left: 14px;
  font: 400 14px/1.4 var(--cdo-serif);
  color: var(--wt-ink-soft);
}
.wt-c-hero__bullets li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 8px;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--wt-ink-quiet);
}

.wt-c-hero__rail {
  display: flex;
  flex-direction: column;
  gap: 16px;
  border-left: 0;
  padding-left: 0;
}
@media (min-width: 740px) {
  .wt-c-hero__rail { border-left: 1px solid var(--wt-rule); padding-left: 24px; }
}
.wt-c-hero__sec {
  display: block;
  text-decoration: none;
  color: inherit;
  padding-bottom: 16px;
  border-bottom: 1px solid var(--wt-rule);
}
.wt-c-hero__sec:last-child { border-bottom: 0; padding-bottom: 0; }
.wt-c-hero__sec-kicker {
  display: block;
  font: 600 10px/1 var(--cdo-sans);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
  margin-bottom: 6px;
}
.wt-c-hero__sec-headline {
  font: 700 18px/1.2 var(--cdo-serif);
  margin: 0 0 6px;
  color: var(--wt-ink);
}
.wt-c-hero__sec-dek {
  margin: 0;
  font: 400 14px/1.4 var(--cdo-serif);
  color: var(--wt-ink-soft);
}

/* ---- Sidebar nav row (C) - NYT "War in the Middle East" pattern ---- */
.wt-c-navrow {
  display: flex;
  flex-direction: column;
  gap: 10px;
  align-items: flex-start;
  padding: 14px 0 16px;
  border-top: 1px solid var(--wt-rule);
}
@media (min-width: 740px) {
  .wt-c-navrow { flex-direction: row; align-items: center; gap: 18px; }
}
.wt-c-navrow__label {
  font: 700 16px/1 var(--cdo-sans);
  letter-spacing: 0.02em;
  color: var(--wt-ink);
  text-decoration: none;
  flex: 0 0 auto;
}
.wt-c-navrow__chips {
  display: flex;
  gap: 14px;
  flex-wrap: wrap;
}
.wt-c-navrow__chip {
  font: 500 13px/1 var(--cdo-sans);
  color: var(--wt-ink-soft);
  text-decoration: none;
  border-bottom: 1px solid transparent;
  padding-bottom: 1px;
}
.wt-c-navrow__chip:hover {
  color: var(--wt-ink);
  border-bottom-color: var(--wt-ink);
}

/* ---- Story package (C) - featured + rail + pulse strip ---- */
.wt-c-pkg {}
.wt-c-pkg__hd {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 14px;
}
.wt-c-pkg__label {
  font: 700 18px/1 var(--cdo-sans);
  color: var(--wt-ink);
  text-decoration: none;
  letter-spacing: 0.01em;
}
.wt-c-pkg__more {
  font: 500 12px/1 var(--cdo-sans);
  color: var(--wt-ink-quiet);
  text-decoration: none;
  letter-spacing: 0.04em;
}
.wt-c-pkg__more:hover { color: var(--wt-ink); }

.wt-c-pkg__grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 24px;
}
@media (min-width: 740px) {
  .wt-c-pkg__grid {
    grid-template-columns: minmax(0, 7fr) minmax(0, 5fr);
    gap: 32px;
  }
}

.wt-c-pkg__featured {
  display: flex;
  flex-direction: column;
  gap: 10px;
  text-decoration: none;
  color: inherit;
}
.wt-c-pkg__media {
  width: 100%;
  height: auto;
  display: block;
  aspect-ratio: 3/2;
  object-fit: cover;
  background: var(--wt-rule);
  margin-bottom: 4px;
}
.wt-c-pkg__kicker {
  font: 600 11px/1 var(--cdo-sans);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
}
.wt-c-pkg__headline {
  font: 700 26px/1.12 var(--cdo-serif);
  margin: 0;
  color: var(--wt-ink);
  letter-spacing: -0.005em;
}
@media (min-width: 740px) {
  .wt-c-pkg__headline { font-size: 30px; }
}
.wt-c-pkg__dek {
  margin: 0;
  font: 400 15px/1.45 var(--cdo-serif);
  color: var(--wt-ink-soft);
}

.wt-c-pkg__rail {
  display: flex;
  flex-direction: column;
  border-left: 0;
  padding-left: 0;
}
@media (min-width: 740px) {
  .wt-c-pkg__rail { border-left: 1px solid var(--wt-rule); padding-left: 24px; }
}
.wt-c-pkg__rail-item {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 96px;
  gap: 14px;
  padding: 14px 0;
  border-bottom: 1px solid var(--wt-rule);
  text-decoration: none;
  color: inherit;
  align-items: start;
}
.wt-c-pkg__rail-item:first-child { padding-top: 0; }
.wt-c-pkg__rail-item:last-child { border-bottom: 0; }
.wt-c-pkg__rail-item:has(:not(.wt-c-pkg__rail-thumb)) { grid-template-columns: 1fr; }
.wt-c-pkg__rail-thumb {
  width: 96px;
  height: 64px;
  object-fit: cover;
  background: var(--wt-rule);
  display: block;
}
.wt-c-pkg__rail-text { display: flex; flex-direction: column; gap: 4px; }
.wt-c-pkg__rail-kicker {
  font: 600 10px/1 var(--cdo-sans);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
}
.wt-c-pkg__rail-headline {
  font: 700 16px/1.22 var(--cdo-serif);
  margin: 0;
  color: var(--wt-ink);
}

.wt-c-pkg__pulse {
  margin-top: 18px;
  border-top: 1px solid var(--wt-rule);
  padding-top: 16px;
}
.wt-c-pkg__pulse-label {
  display: block;
  font: 600 10px/1 var(--cdo-sans);
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
  margin-bottom: 12px;
}
.wt-c-pkg__pulse-tiles {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px;
}
@media (max-width: 739px) {
  .wt-c-pkg__pulse-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .wt-c-pkg__pulse-tiles > *:nth-child(3) { display: none; }
}

/* ---- Pulse feed strip (horizontal scroll, NYT Watch Today's analog) ---- */
.wt-c-feedstrip {}
.wt-c-feedstrip__hd {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 12px;
  margin-bottom: 14px;
}
.wt-c-feedstrip__title {
  margin: 0;
  font: 700 18px/1 var(--cdo-sans);
  color: var(--wt-ink);
}
.wt-c-feedstrip__more {
  font: 500 12px/1 var(--cdo-sans);
  color: var(--wt-ink-quiet);
  text-decoration: none;
  letter-spacing: 0.04em;
}
.wt-c-feedstrip__more:hover { color: var(--wt-ink); }
.wt-c-feedstrip__rail {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: minmax(260px, 1fr);
  gap: 16px;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scrollbar-width: none;
  padding-bottom: 6px;
}
.wt-c-feedstrip__rail::-webkit-scrollbar { display: none; }
.wt-c-feedstrip__rail > * { scroll-snap-align: start; min-width: 0; }

/* =====================================================================
   Version C, NYT-style two-level grid
   ---------------------------------------------------------------------
   Outer:  main column (~70%)  +  right rail (~30%), runs full height
   Inner per package: 2-col grid
     row 1: kicker spans both cols
     row 2: big serif headline spans both cols
     row 3: col 1 narrow text  +  col 2 wide image
     row 4: 2-up secondary articles, spans both cols
   Right rail accumulates 3+ standalone stories alongside packages.
   ===================================================================== */

/* ---- Outer two-level grid ---- */
.wt-c-news {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 0;
  margin-top: 12px;
}
@media (min-width: 740px) {
  .wt-c-news {
    grid-template-columns: minmax(0, 14fr) minmax(0, 6fr);
    column-gap: 32px;
  }
}
.wt-c-news__main {
  min-width: 0;
  display: flex;
  flex-direction: column;
}
.wt-c-news__rail {
  min-width: 0;
  border-top: 1px solid var(--wt-rule);
  padding-top: 18px;
  display: flex;
  flex-direction: column;
  gap: 24px;
}
@media (min-width: 740px) {
  .wt-c-news__rail {
    border-top: 0;
    padding-top: 0;
    border-left: 1px solid var(--wt-rule);
    padding-left: 24px;
  }
}

/* ---- Package (wt-c-pkg3) - 2-col internal grid ---- */
.wt-c-pkg3 {
  padding: 18px 0 22px;
  border-bottom: 1px solid var(--wt-rule);
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  row-gap: 12px;
}
.wt-c-pkg3:first-child { padding-top: 8px; }
@media (min-width: 740px) {
  .wt-c-pkg3 {
    grid-template-columns: minmax(0, 5fr) minmax(0, 9fr);
    column-gap: 24px;
    row-gap: 14px;
  }
}

/* Kicker eyebrow - spans both cols, small uppercase. */
.wt-c-pkg3__kicker-link { text-decoration: none; color: inherit; display: block; }
.wt-c-pkg3__kicker {
  display: block;
  font: 400 11px/1 var(--wt-font-ui);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-eyebrow);
}
@media (min-width: 740px) {
  .wt-c-pkg3__kicker-link { grid-column: 1 / -1; }
}

/* Big serif headline - spans both cols. First package on the page gets
   a heavier treatment so the top of the home reads as a clear lead. */
.wt-c-pkg3__hed { text-decoration: none; color: inherit; display: block; }
.wt-c-pkg3__hed h2 {
  margin: 0;
  font: 700 30px/1.06 var(--cdo-serif);
  letter-spacing: -0.005em;
  color: var(--wt-ink);
}
@media (min-width: 740px) {
  .wt-c-pkg3__hed { grid-column: 1 / -1; }
  .wt-c-pkg3__hed h2 { font-size: 38px; line-height: 1.04; }
}
.wt-c-news__main .wt-c-pkg3:first-child .wt-c-pkg3__hed h2 { font-size: 36px; line-height: 1.04; }
@media (min-width: 740px) {
  .wt-c-news__main .wt-c-pkg3:first-child .wt-c-pkg3__hed h2 {
    font-size: 44px; line-height: 1.02;
  }
}

/* Lead text col (col 1, row 3). */
.wt-c-pkg3__lead-text {
  display: flex;
  flex-direction: column;
  gap: 14px;
}
@media (min-width: 740px) {
  .wt-c-pkg3__lead-text { grid-column: 1 / 2; padding-right: 4px; }
}
.wt-c-pkg3__bullets {
  list-style: none;
  margin: 0;
  padding: 0;
  display: grid;
  gap: 10px;
}
.wt-c-pkg3__bullets li {
  position: relative;
  padding-left: 14px;
  font: 400 15px/1.42 var(--cdo-serif);
  color: var(--wt-ink-soft);
}
.wt-c-pkg3__bullets li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 8px;
  width: 4px;
  height: 4px;
  border-radius: 50%;
  background: var(--wt-ink-quiet);
}
.wt-c-pkg3__dek {
  margin: 0;
  font: 400 16px/1.42 var(--cdo-serif);
  color: var(--wt-ink-soft);
}
.wt-c-pkg3__more-link {
  font: 400 13px/1 var(--wt-font-ui);
  color: var(--wt-eyebrow);
  text-decoration: none;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  align-self: flex-start;
}
.wt-c-pkg3__more-link:hover { text-decoration: underline; text-underline-offset: 4px; }

/* Wide image col (col 2, row 3). */
.wt-c-pkg3__media-wrap {
  display: block;
  text-decoration: none;
  color: inherit;
}
@media (min-width: 740px) {
  .wt-c-pkg3__media-wrap { grid-column: 2 / 3; }
}
.wt-c-pkg3__media {
  width: 100%;
  height: auto;
  aspect-ratio: 16 / 11;
  object-fit: cover;
  background: var(--wt-rule);
  display: block;
}

/* 2-up secondary row (cols 1+2, row 4). */
.wt-c-pkg3__sub {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 16px;
  padding-top: 16px;
  margin-top: 6px;
  border-top: 1px solid var(--wt-rule);
}
@media (min-width: 740px) {
  .wt-c-pkg3__sub {
    grid-column: 1 / -1;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 24px;
  }
}
.wt-c-pkg3__sub-item { text-decoration: none; color: inherit; display: block; }
.wt-c-pkg3__sub-headline {
  margin: 0 0 6px;
  font: 700 17px/1.22 var(--cdo-serif);
  color: var(--wt-ink);
}
.wt-c-pkg3__sub-dek {
  margin: 0;
  font: 400 14px/1.4 var(--cdo-serif);
  color: var(--wt-ink-soft);
}

/* ---- Right-rail story (wt-c-rail__item) ---- */
.wt-c-rail__item {
  display: flex;
  flex-direction: column;
  gap: 8px;
  text-decoration: none;
  color: inherit;
  padding-bottom: 24px;
  border-bottom: 1px solid var(--wt-rule);
}
.wt-c-rail__item:last-child { border-bottom: 0; padding-bottom: 0; }
.wt-c-rail__media {
  width: 100%;
  height: auto;
  aspect-ratio: 3 / 2;
  object-fit: cover;
  background: var(--wt-rule);
  display: block;
  margin-bottom: 4px;
}
.wt-c-rail__kicker {
  display: block;
  font: 400 11px/1 var(--wt-font-ui);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-eyebrow);
}
.wt-c-rail__headline {
  margin: 0;
  font: 700 20px/1.18 var(--cdo-serif);
  color: var(--wt-ink);
  letter-spacing: -0.005em;
}
.wt-c-rail__dek {
  margin: 0;
  font: 400 15px/1.42 var(--cdo-serif);
  color: var(--wt-ink-soft);
}

/* ---- Sidebar nav row inside main column ---- */
/* Already styled by the earlier .wt-c-navrow block. We just bolt on
   border behavior so the nav row sits flush with packages. */
.wt-c-news__main .wt-c-navrow {
  border-top: 0;
  border-bottom: 1px solid var(--wt-rule);
  padding: 14px 0 16px;
}
.wt-c-news__main .wt-c-pkg3 + .wt-c-navrow {
  border-top: 0;
}

/* ---- Below-news supplementary blocks ---- */
.wt-c-cirow {
  padding: 28px 0 36px;
  border-top: 1px solid var(--wt-rule);
}
.wt-c-cirow .wt-c-cirow__hint {
  font: 400 11px/1 var(--wt-font-ui);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-eyebrow);
}
.wt-c-cirow__grid {
  display: grid;
  grid-template-columns: repeat(1, minmax(0, 1fr));
  gap: 24px;
}
@media (min-width: 740px) {
  .wt-c-cirow__grid {
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 28px;
  }
  .wt-c-cirow__grid > .wt-c-cicol:not(:first-child) {
    border-left: 1px solid var(--wt-rule);
    padding-left: 24px;
  }
}
.wt-c-cicol { display: flex; flex-direction: column; gap: 10px; min-width: 0; }
.wt-c-cicol__label {
  font: 400 11px/1 var(--wt-font-ui);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-eyebrow);
  text-decoration: none;
  margin-bottom: 4px;
}
.wt-c-cicol__lead {
  display: flex;
  flex-direction: column;
  gap: 8px;
  text-decoration: none;
  color: inherit;
  margin-bottom: 8px;
}
.wt-c-cicol__media {
  width: 100%;
  height: auto;
  aspect-ratio: 3/2;
  object-fit: cover;
  background: var(--wt-rule);
  display: block;
}
.wt-c-cicol__headline {
  margin: 0;
  font: 700 17px/1.2 var(--cdo-serif);
  color: var(--wt-ink);
}
.wt-c-cicol__item {
  display: block;
  font: 500 14px/1.3 var(--cdo-sans);
  color: var(--wt-ink-soft);
  text-decoration: none;
  padding: 8px 0;
  border-top: 1px solid var(--wt-rule);
}
.wt-c-cicol__item:hover { color: var(--wt-ink); }

/* Density eyebrow above bullets in col 1 - date + read time. */
.wt-c-pkg3__meta {
  font: 400 11px/1 var(--wt-font-ui);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-eyebrow);
  display: flex;
  align-items: center;
  gap: 6px;
}
.wt-c-pkg3__meta-dot { color: var(--wt-eyebrow); }

/* Bold sub-headline in col 1 - elevates the article dek to NYT
   sub-article weight (acts as a separate-headline analog). */
.wt-c-pkg3__subhed {
  margin: 0;
  font: 700 18px/1.25 var(--cdo-serif);
  color: var(--wt-ink);
  letter-spacing: -0.005em;
}
@media (min-width: 740px) {
  .wt-c-pkg3__subhed { font-size: 19px; }
}

/* 2-up secondary "X MIN READ" tag - NYT-style small uppercase tag. */
.wt-c-pkg3__sub-meta {
  display: block;
  margin-top: 8px;
  font: 400 11px/1 var(--wt-font-ui);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-eyebrow);
}

/* =====================================================================
   Layout C, Option C polish (Editorial Rhythm First).
   See news/_pipeline/LAYOUT-C-ROADMAP.md for the design rationale.
   ---------------------------------------------------------------------
   - N7  Headline clamp on package heds, keeps lead at <=4 lines and
         secondary <=3 lines so the rhythm reads tight, not loose.
   - N9  "More in [section] →" stitch link, render-template addition
         in cdo-watchtower.js renderHomeC; this only styles it.
   - N12 Pipe separator on chip rows, NYT masthead convention.
   - Lead hierarchy bump, first package's hed 44 → 48px, dek 16 → 17px,
         and inter-package boundaries get rule-strong instead of rule.
   ===================================================================== */

/* N7 - clamp package heds. Keeps long headlines from sprawling and
   forces editorial to cut tight, NYT-style. -webkit-line-clamp is
   widely supported (Chrome/Safari/Firefox/Edge all current). */
.wt-c-pkg3__hed h2 {
  display: -webkit-box;
  -webkit-line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.wt-c-news__main .wt-c-pkg3:first-child .wt-c-pkg3__hed h2 {
  -webkit-line-clamp: 4;
}

/* N9 - "More in <section> →" stitch under each package's lead text.
   Pure-styled; the JS renderer drops the <a class="wt-c-pkg3__more-section">
   below the dek when the package has a known category. */
.wt-c-pkg3__more-section {
  font: 400 11px/1 var(--wt-font-ui);
  color: var(--wt-eyebrow);
  text-decoration: none;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border-top: 1px solid var(--wt-rule);
  padding-top: 12px;
  margin-top: 4px;
  align-self: flex-start;
}
.wt-c-pkg3__more-section:hover {
  color: var(--wt-ink);
  border-top-color: var(--wt-ink);
}

/* N12 - pipe separator between chip-row items. Uses rule color so it
   reads as structural, not decorative. */
.wt-c-navrow__chip:not(:last-child)::after {
  content: " | ";
  margin-left: 14px;
  color: var(--wt-rule);
  pointer-events: none;
}
.wt-c-navrow__chip:not(:last-child) {
  margin-right: -14px; /* gap from .wt-c-navrow__chips already gives breathing room; pull back so " | " replaces the gap visually */
  padding-right: 0;
}

/* Lead hierarchy bump - the first package on the page should read as the
   day's lead. Was 44px desktop; bump to 48px. Was 16px dek; bump to 17px. */
@media (min-width: 740px) {
  .wt-c-news__main .wt-c-pkg3:first-child .wt-c-pkg3__hed h2 {
    font-size: 48px;
    line-height: 1.02;
  }
  .wt-c-news__main .wt-c-pkg3:first-child .wt-c-pkg3__dek {
    font-size: 17px;
    line-height: 1.45;
  }
}

/* Inter-package boundary - switch the existing pkg3 bottom-rule from
   --wt-rule (light) to --wt-rule-strong (full ink) ONLY between
   packages, so the page reads "this is a new story-set" rather than
   "this is just another column." Last package keeps the lighter rule
   (or has no trailing strong rule running into the navrow). */
.wt-c-news__main .wt-c-pkg3:not(:last-of-type) {
  border-bottom-color: var(--wt-rule-strong);
}

/* N5 - author byline emphasis on opinion pieces. The JS renderer
   adds class `is-opinion` to `.wt-c-rail__card` (or to a card wrapper)
   when the article is flagged. Author renders large + caps; story
   title smaller + serif beneath. Falls back gracefully if the JS
   doesn't apply the class. */
.wt-c-rail__card.is-opinion .wt-c-rail__byline,
.wt-c-pkg3__lead-text .is-opinion-byline {
  display: block;
  font: 600 12px/1 var(--wt-font-ui);
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--wt-ink);
  margin-bottom: 6px;
}
.wt-c-rail__card.is-opinion .wt-card__headline {
  font-size: 17px;
  font-weight: 600;
  line-height: 1.28;
}

/* ============================================================
   KEEP CALM, chrome + home + article add-ons (re-skin layer).
   Lives at the end so it overrides the inherited Watchtower rules.
   Elements OUTSIDE .wt-shell (crisis ribbon, footer) use explicit
   colors with a night-mode variant, since the --wt-* tokens are
   scoped to the shell.
   ============================================================ */

/* ---- Wordmark (replaces the injected logo SVG) ---- */
.kc-wordmark {
  font-family: var(--wt-font-display, "Montserrat", Georgia, serif);
  font-weight: 600;
  font-optical-sizing: auto;
  letter-spacing: -0.01em;
  line-height: 1;
  color: var(--wt-logo-fill);
  font-size: clamp(30px, 5vw, 46px);
  display: inline-block;
}
.kc-wordmark--mini { font-size: 21px; font-weight: 600; }

/* ---- Persistent crisis ribbon (every page, above the masthead) ---- */
.kc-crisis-ribbon {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: center;
  gap: 6px 22px;
  padding: 8px 18px;
  background: #efeee7;
  border-bottom: 1px solid #e2dccf;
  font-family: var(--wt-font-ui, "Montserrat", system-ui, sans-serif);
  font-size: 13.5px;
  line-height: 1.4;
  text-align: center;
}
.kc-crisis-ribbon__text { color: #4a534c; }
.kc-crisis-ribbon__link { color: #2c5f4e; text-decoration: none; font-weight: 600; }
.kc-crisis-ribbon__link:hover { text-decoration: underline; }
.kc-crisis-ribbon__link strong { font-weight: 800; }
html[data-mode="batman"] .kc-crisis-ribbon { background: #1b1f1c; border-bottom-color: #2c342f; }
html[data-mode="batman"] .kc-crisis-ribbon__text { color: #b9c7b7; }
html[data-mode="batman"] .kc-crisis-ribbon__link { color: #8fd0b4; }

/* ---- Home hero ---- */
.kc-hero {
  text-align: center;
  max-width: 720px;
  margin: 0 auto;
  padding: clamp(40px, 7vw, 88px) 8px clamp(28px, 4vw, 48px);
}
.kc-hero__eyebrow {
  font-family: var(--wt-font-ui);
  text-transform: uppercase;
  letter-spacing: 0.14em;
  font-size: 12px;
  color: var(--wt-accent);
  margin: 0 0 14px;
}
.kc-hero__title {
  font-family: var(--wt-font-display);
  font-weight: 500;
  font-size: clamp(34px, 6vw, 58px);
  line-height: 1.06;
  letter-spacing: -0.02em;
  color: var(--wt-ink);
  margin: 0 0 18px;
}
.kc-hero__lede {
  font-family: var(--wt-font-body);
  font-size: clamp(17px, 2.2vw, 20px);
  line-height: 1.6;
  color: var(--wt-ink-soft);
  margin: 0 auto 26px;
  max-width: 60ch;
}
.kc-hero__actions { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; }

.kc-btn {
  display: inline-block;
  font-family: var(--wt-font-ui);
  font-weight: 600;
  font-size: 15px;
  padding: 12px 22px;
  border-radius: 999px;
  text-decoration: none;
  transition: background-color 160ms ease, color 160ms ease, border-color 160ms ease;
}
.kc-btn--primary { background: var(--wt-btn-bg); color: var(--wt-btn-ink); }
.kc-btn--primary:hover { background: var(--wt-btn-bg-hover); }
.kc-btn--ghost { border: 1.5px solid var(--wt-rule-strong); color: var(--wt-ink); }
.kc-btn--ghost:hover { background: var(--wt-chip-bg); }

/* ---- Home category sections ---- */
.kc-section { padding: 26px 0; border-top: 1px solid var(--wt-rule); }
.kc-section__hd {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: 16px;
  margin-bottom: 18px;
}
.kc-section__title {
  font-family: var(--wt-font-display);
  font-weight: 600;
  font-size: clamp(22px, 3vw, 30px);
  letter-spacing: -0.01em;
  color: var(--wt-ink);
  margin: 0 0 4px;
}
.kc-section__blurb { font-family: var(--wt-font-body); color: var(--wt-ink-quiet); margin: 0; font-size: 15.5px; }
.kc-section__more {
  font-family: var(--wt-font-ui);
  font-weight: 600;
  font-size: 14px;
  color: var(--wt-link);
  text-decoration: none;
  white-space: nowrap;
}
.kc-section__more:hover { text-decoration: underline; }

/* ---- Calm sidebar rail (article) ---- */
.wt-panel--calm { background: transparent; border: none; padding: 0; }
.kc-help-card {
  background: var(--wt-crisis-bg);
  border: 1px solid var(--wt-crisis-border);
  border-radius: 12px;
  padding: 18px 20px;
  margin-bottom: 22px;
}
.kc-help-card .wt-panel__eyebrow { color: var(--wt-crisis-ink); }
.kc-help-card__lede { font-family: var(--wt-font-body); color: var(--wt-ink-soft); margin: 6px 0 12px; font-size: 15px; line-height: 1.5; }
.kc-help-card__list { list-style: disc; margin: 0; padding: 0 0 0 1.25em; font-family: var(--wt-font-ui); font-size: 14px; line-height: 1.5; color: var(--wt-ink-soft); }
.kc-help-card__list li { margin: 8px 0; padding-left: 3px; }
.kc-help-card__list li::marker { color: var(--wt-link); }
.kc-help-card__list li { margin: 7px 0; }
.kc-help-card a { color: var(--wt-crisis-ink); font-weight: 600; }
.kc-tags { display: flex; flex-wrap: wrap; gap: 7px; }
.kc-tag {
  font-family: var(--wt-font-ui);
  font-size: 12px;
  padding: 4px 10px;
  border-radius: 7px;
  background: var(--wt-chip-bg);
  border: 1px solid var(--wt-chip-border);
  color: var(--wt-chip-ink);
}

/* ---- Article safety footer (static, every article page) ---- */
.kc-safety {
  max-width: 760px;
  margin: 40px auto 8px;
  padding: 22px 24px;
  background: var(--wt-panel-bg);
  border: 1px solid var(--wt-panel-border);
  border-radius: 12px;
  font-family: var(--wt-font-body);
  color: var(--wt-ink-soft);
  font-size: 15px;
  line-height: 1.6;
}
.kc-safety__title { font-family: var(--wt-font-display); font-weight: 600; font-size: 19px; color: var(--wt-ink); margin: 0 0 10px; }
.kc-safety p { margin: 0 0 10px; }
.kc-safety a { color: var(--wt-link); font-weight: 600; }
.kc-safety__crisis { background: var(--wt-crisis-bg); border-left: 3px solid var(--wt-crisis-border); padding: 12px 14px; border-radius: 6px; }
.kc-safety__crisis a { color: var(--wt-crisis-ink); }
/* Inline variant: sits at the top of the body on sensitive-topic articles.
   Drops the outer panel chrome so only the tinted crisis note shows; colors
   come from the per-mode --wt-crisis-* tokens (accessible in light and dark). */
.kc-safety--inline { max-width: none; margin: 0 0 26px; padding: 0; background: transparent; border: 0; border-radius: 0; }
.kc-safety--inline .kc-safety__crisis { margin: 0; }

/* ---- Footer (Keep Calm) ---- */
.kc-footer {
  background: #1c2620;
  color: #d8e0d6;
  font-family: var(--wt-font-ui);
  padding: 48px 24px 28px;
  margin-top: 40px;
}
.kc-footer__inner {
  max-width: 1100px;
  margin: 0 auto;
  display: grid;
  grid-template-columns: 1.5fr 1fr 1fr 1fr 1.2fr;
  gap: 30px;
}
.kc-footer__wordmark { font-family: var(--wt-font-display); font-weight: 600; font-size: 30px; color: #fffdf9; text-decoration: none; letter-spacing: -0.01em; }
.kc-footer__mission { color: #aab8a9; font-size: 14px; line-height: 1.6; margin: 12px 0 0; max-width: 38ch; }
.kc-footer__heading { font-size: 12px; text-transform: uppercase; letter-spacing: 0.12em; color: #8fd0b4; margin: 0 0 12px; }
.kc-footer__col a { display: block; color: #d8e0d6; text-decoration: none; font-size: 14.5px; padding: 4px 0; }
.kc-footer__col a:hover { color: #fffdf9; text-decoration: underline; }
.kc-footer__col--help p { color: #c2ccc0; font-size: 14px; line-height: 1.55; margin: 0 0 8px; }
.kc-footer__col--help a { display: inline; color: #8fd0b4; }
.kc-footer__legal { max-width: 1100px; margin: 32px auto 0; padding-top: 18px; border-top: 1px solid #33403660; color: #8c988a; font-size: 12.5px; line-height: 1.6; }
.kc-footer__legal p { margin: 0 0 6px; }
@media (max-width: 760px) {
  .kc-footer__inner { grid-template-columns: 1fr 1fr; gap: 26px; }
}
@media (max-width: 480px) {
  .kc-footer__inner { grid-template-columns: 1fr; }
}

/* ---- Static pages (About, Get help) ---- */
.kc-page { max-width: 760px; margin: 0 auto; padding: clamp(28px, 5vw, 56px) 4px 40px; font-family: var(--wt-font-body); color: var(--wt-ink-soft); }
.kc-page__title { font-family: var(--wt-font-display); font-weight: 500; font-size: clamp(34px, 6vw, 54px); line-height: 1.08; letter-spacing: -0.02em; color: var(--wt-ink); margin: 6px 0 16px; }
.kc-page__lede { font-size: clamp(18px, 2.4vw, 21px); line-height: 1.6; color: var(--wt-ink-soft); margin: 0 0 14px; }
.kc-page__h2 { font-family: var(--wt-font-display); font-weight: 600; font-size: clamp(22px, 3vw, 28px); color: var(--wt-ink); margin: 34px 0 10px; }
.kc-page p { font-size: 17px; line-height: 1.7; margin: 0 0 14px; }
.kc-page a { color: var(--wt-link); }
.kc-page__note { font-size: 14px; color: var(--wt-ink-quiet); border-top: 1px solid var(--wt-rule); padding-top: 16px; margin-top: 28px; }
.kc-help-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; margin: 24px 0 8px; }
.kc-help-tile {
  display: flex; flex-direction: column; gap: 8px;
  padding: 22px 20px; border-radius: 14px; text-decoration: none;
  background: var(--wt-crisis-bg); border: 1px solid var(--wt-crisis-border);
  transition: transform 140ms ease, box-shadow 140ms ease;
}
.kc-help-tile:hover { transform: translateY(-2px); box-shadow: 0 8px 24px rgba(40,58,49,0.10); }
.kc-help-tile__big { font-family: var(--wt-font-display); font-weight: 700; font-size: clamp(22px, 2.4vw, 28px); color: var(--wt-crisis-ink); line-height: 1.1; }
.kc-help-tile__label { font-family: var(--wt-font-ui); font-size: 13.5px; color: var(--wt-ink-soft); line-height: 1.45; }
@media (max-width: 700px) { .kc-help-grid { grid-template-columns: 1fr; } }

/* ============================================================
   KEEP CALM, iteration 2 (caps wordmark, sun/moon toggle, quick
   tips, NYT search, resources, layouts, donate, nav dropdown, cards)
   ============================================================ */

/* Brand displayed in all caps */
.kc-wordmark { text-transform: uppercase; letter-spacing: 0.07em; font-weight: 600; }
.kc-wordmark--mini { letter-spacing: 0.05em; }
.kc-footer__wordmark { text-transform: uppercase; letter-spacing: 0.07em; }

/* Simple, quiet sun/moon toggle (replaces the chunky labeled pill) */
.wt-batmode, .wt-mini__batmode {
  display: inline-flex; align-items: center; justify-content: center;
  width: 34px; height: 34px; padding: 0; gap: 0;
  border: 1px solid var(--wt-rule); border-radius: 999px;
  background: transparent; color: var(--wt-toggle-fill); cursor: pointer;
  transition: background-color 140ms ease, border-color 140ms ease;
}
.wt-batmode:hover, .wt-mini__batmode:hover { background: var(--wt-chip-bg); }
.wt-batmode svg, .wt-mini__batmode svg { width: 17px; height: 17px; filter: none; }
.wt-batmode__label { display: none !important; }
.kc-sun { display: none; }
.kc-moon { display: block; }
html[data-mode="batman"] .kc-sun { display: block; }
html[data-mode="batman"] .kc-moon { display: none; }

/* Quick Tips (top of the article rail) */
.kc-quicktips { background: var(--wt-panel-bg); border: 1px solid var(--wt-panel-border); border-radius: 12px; padding: 16px 18px; margin-bottom: 22px; }
.kc-quicktips .wt-panel__eyebrow { color: var(--wt-accent); }
.kc-quicktips__list { list-style: none; margin: 8px 0 0; padding: 0; }
.kc-quicktips__list li { display: flex; gap: 10px; align-items: flex-start; font-family: var(--wt-font-body); font-size: 15px; line-height: 1.45; color: var(--wt-ink-soft); margin: 9px 0; }
.kc-quicktips__emoji { font-size: 18px; line-height: 1.3; flex: none; }
/* Answer-first takeaways (2026-07-08): quick tips moved from the aside to the
   top of the article body on pre-rendered pages (scripts/build-seo-pages.mjs).
   The body drop-cap rule (p:first-of-type::first-letter) would otherwise blow
   up the eyebrow's first letter; the inline crisis note had the same latent
   issue, so both are neutralized here. */
.kc-quicktips--lead { margin: 4px 0 30px; }
.kc-quicktips--lead p:first-of-type::first-letter,
.kc-safety--inline p:first-of-type::first-letter {
  float: none;
  font-family: inherit;
  font-weight: inherit;
  font-size: inherit;
  line-height: inherit;
  padding: 0;
  color: inherit;
}

/* Search overlay - lock background scroll, scroll within the panel */
body.wt-noscroll { overflow: hidden; }
.wt-search__results { max-height: 60vh; overflow-y: auto; }
.wt-search__seeall { display: block; padding: 14px 4px 4px; font: 600 14px var(--wt-font-ui); color: var(--wt-link); text-decoration: none; }
.wt-search__seeall:hover { text-decoration: underline; }

/* Listing pages (search results + topic) */
.kc-listing-hd { max-width: 820px; margin: 0 auto; padding: clamp(24px,4vw,48px) 4px 6px; }
.kc-listing-hd .kc-page__title { margin: 4px 0 14px; }
.kc-listing-hd__count { font-family: var(--wt-font-ui); color: var(--wt-ink-quiet); font-size: 14px; margin: 10px 0 0; }
.kc-search-form { display: flex; gap: 8px; margin: 6px 0 6px; max-width: 540px; }
.kc-search-form__input { flex: 1; padding: 11px 14px; border: 1px solid var(--wt-rule-strong); border-radius: 8px; font: 16px var(--wt-font-ui); background: var(--wt-surface); color: var(--wt-ink); }
.kc-search-form__btn { padding: 11px 20px; border: none; border-radius: 8px; background: var(--wt-btn-bg); color: var(--wt-btn-ink); font: 600 15px var(--wt-font-ui); cursor: pointer; }

/* NYT-style result rows */
.kc-result-list { max-width: 820px; margin: 0 auto; }
.kc-result { display: grid; grid-template-columns: 1fr 150px; gap: 20px; padding: 22px 0; border-top: 1px solid var(--wt-rule); align-items: start; }
.kc-result__text { text-decoration: none; display: block; }
.kc-result__kicker { font: 600 11px var(--wt-font-ui); letter-spacing: .08em; text-transform: uppercase; color: var(--wt-eyebrow); }
.kc-result__headline { font-family: var(--wt-font-display); font-weight: 600; font-size: 21px; line-height: 1.15; color: var(--wt-ink); margin: 5px 0 7px; }
.kc-result__dek { font-family: var(--wt-font-body); color: var(--wt-ink-soft); font-size: 15px; line-height: 1.5; margin: 0; }
.kc-result__thumb img { width: 150px; height: 100px; object-fit: cover; border-radius: 6px; display: block; filter: var(--wt-img-filter); }
@media (max-width: 600px) { .kc-result { grid-template-columns: 1fr 92px; gap: 14px; } .kc-result__thumb img { width: 92px; height: 70px; } .kc-result__headline { font-size: 18px; } }

/* Resources directory */
[data-wt-resources] { max-width: 900px; margin: 0 auto; padding: clamp(20px,4vw,44px) 4px 44px; }
.kc-res { padding: 30px 0; border-top: 1px solid var(--wt-rule); }
.kc-res:first-child { border-top: none; }
.kc-res__hd { display: flex; gap: 16px; align-items: baseline; margin-bottom: 16px; }
.kc-res__num { font: 700 14px var(--wt-font-ui); color: var(--wt-accent); letter-spacing: .12em; flex: none; }
.kc-res__title { font-family: var(--wt-font-display); font-weight: 600; font-size: clamp(22px,3vw,28px); color: var(--wt-ink); margin: 0; }
.kc-res__blurb { font-family: var(--wt-font-body); color: var(--wt-ink-quiet); margin: 4px 0 0; font-size: 15.5px; }
.kc-res__list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr 1fr; gap: 18px 30px; }
.kc-res__item-head { display: flex; align-items: center; gap: 8px; }
.kc-res__item a { font: 600 16px var(--wt-font-ui); color: var(--wt-link); text-decoration: none; }
.kc-res__item a:hover { text-decoration: underline; }
.kc-res__free { font: 600 10px var(--wt-font-ui); text-transform: uppercase; letter-spacing: .06em; background: var(--wt-chip-bg); border: 1px solid var(--wt-chip-border); color: var(--wt-chip-ink); border-radius: 5px; padding: 2px 6px; }
.kc-res__desc { font-family: var(--wt-font-body); color: var(--wt-ink-soft); font-size: 14.5px; line-height: 1.5; margin: 4px 0 0; }
@media (max-width: 640px) { .kc-res__list { grid-template-columns: 1fr; } }

/* Layouts gallery */
[data-wt-layouts] { max-width: 1040px; margin: 0 auto; padding: clamp(20px,4vw,44px) 4px 44px; }
.kc-layout-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: 22px; }
.kc-layout-card { border: 1px solid var(--wt-rule); border-radius: 14px; overflow: hidden; background: var(--wt-surface); }
.kc-layout-card__media { position: relative; display: block; aspect-ratio: 16/10; background: var(--wt-chip-bg); }
.kc-layout-card__media img { width: 100%; height: 100%; object-fit: cover; filter: var(--wt-img-filter); }
.kc-layout-card__letter { position: absolute; left: 12px; top: 12px; width: 34px; height: 34px; display: flex; align-items: center; justify-content: center; border-radius: 8px; background: var(--wt-btn-bg); color: var(--wt-btn-ink); font: 700 16px var(--wt-font-display); }
.kc-layout-card__body { padding: 16px 18px 20px; }
.kc-layout-card__title { font-family: var(--wt-font-display); font-weight: 600; font-size: 22px; color: var(--wt-ink); margin: 0 0 2px; }
.kc-layout-card__count { font: 600 13px var(--wt-font-ui); color: var(--wt-accent); margin: 0 0 8px; }
.kc-layout-card__desc { font-family: var(--wt-font-body); color: var(--wt-ink-soft); font-size: 14.5px; line-height: 1.5; margin: 0 0 12px; }
.kc-layout-card__link { font: 600 14px var(--wt-font-ui); color: var(--wt-link); text-decoration: none; }
@media (max-width: 760px) { .kc-layout-grid { grid-template-columns: 1fr; } }

/* Utility row: donate button + small links */
.wt-masthead__utility { gap: 14px; flex-wrap: wrap; }
.kc-donate-btn { display: inline-block; background: var(--wt-btn-bg); color: var(--wt-btn-ink); font: 700 13px var(--wt-font-ui); letter-spacing: .02em; padding: 8px 17px; border-radius: 999px; text-decoration: none; transition: background-color 140ms ease; }
.kc-donate-btn:hover { background: var(--wt-btn-bg-hover); }
.kc-util-link { font: 600 13px var(--wt-font-ui); color: var(--wt-ink-soft); text-decoration: none; }
.kc-util-link:hover { color: var(--wt-ink); }
.kc-util-sep { color: var(--wt-rule); }

/* Leadership dropdown in the subnav */
.wt-subnav__dd { position: relative; }
.wt-subnav__dd-btn { background: none; border: none; cursor: pointer; font: inherit; color: inherit; display: inline-flex; align-items: center; gap: 5px; padding: 0; letter-spacing: inherit; }
.wt-subnav__caret { width: 9px; height: 9px; transition: transform 140ms ease; }
.wt-subnav__dd:hover .wt-subnav__caret, .wt-subnav__dd:focus-within .wt-subnav__caret { transform: rotate(180deg); }
.wt-subnav__menu { position: absolute; top: calc(100% + 10px); left: 50%; transform: translateX(-50%); min-width: 210px; background: var(--wt-surface); border: 1px solid var(--wt-rule); border-radius: 10px; box-shadow: 0 12px 34px rgba(40,58,49,.14); padding: 8px; display: none; z-index: 60; }
.wt-subnav__dd:hover .wt-subnav__menu, .wt-subnav__dd:focus-within .wt-subnav__menu { display: block; }
.wt-subnav__menu a { display: block; padding: 9px 12px; border-radius: 7px; font: 500 14px var(--wt-font-ui); color: var(--wt-ink); text-decoration: none; white-space: nowrap; letter-spacing: normal; }
.wt-subnav__menu a:hover { background: var(--wt-chip-bg); }

/* Donate page */
.kc-impact { display: grid; grid-template-columns: repeat(3,1fr); gap: 18px; margin: 30px 0; }
.kc-impact__item { background: var(--wt-panel-bg); border: 1px solid var(--wt-panel-border); border-radius: 12px; padding: 22px 18px; text-align: center; }
.kc-impact__big { font-family: var(--wt-font-display); font-weight: 700; font-size: 30px; color: var(--wt-accent); display: block; }
.kc-impact__lab { font-family: var(--wt-font-body); color: var(--wt-ink-soft); font-size: 14.5px; margin-top: 6px; display: block; }
.kc-donate-cta { display: inline-block; margin: 8px 0 4px; background: var(--wt-btn-bg); color: var(--wt-btn-ink); font: 700 17px var(--wt-font-ui); padding: 15px 34px; border-radius: 999px; text-decoration: none; }
.kc-donate-cta:hover { background: var(--wt-btn-bg-hover); }
@media (max-width: 640px) { .kc-impact { grid-template-columns: 1fr; } }

/* Cards page - KEEP CALM AND ___ generator */
[data-wt-cards] { max-width: 940px; margin: 0 auto; padding: clamp(20px,4vw,40px) 16px 56px; }
.kc-cards-grid { display: grid; grid-template-columns: 1.05fr 1fr; gap: 36px; align-items: start; }
.kc-card-poster { aspect-ratio: 3/4; background: var(--wt-btn-bg); color: #ffffff; border-radius: 8px; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; padding: 9% 10%; }
.kc-card-poster__crown { width: 54px; height: 54px; margin-bottom: 20px; color: #ffffff; }
.kc-card-poster__keep { font: 800 clamp(26px,4.6vw,42px)/1.04 var(--wt-font-ui); letter-spacing: .12em; text-transform: uppercase; }
.kc-card-poster__and { font: 700 clamp(12px,2vw,16px)/1 var(--wt-font-ui); letter-spacing: .2em; text-transform: uppercase; margin: 8px 0 12px; opacity: .92; }
.kc-card-poster__word { font: 800 clamp(22px,4vw,34px)/1.05 var(--wt-font-ui); letter-spacing: .05em; text-transform: uppercase; word-break: break-word; }
.kc-card-controls label { display: block; font: 600 13px var(--wt-font-ui); color: var(--wt-ink-soft); margin: 16px 0 6px; }
.kc-card-controls input { width: 100%; padding: 12px 14px; border: 1px solid var(--wt-rule-strong); border-radius: 8px; font: 16px var(--wt-font-ui); background: var(--wt-surface); color: var(--wt-ink); }
.kc-card-actions { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 20px; }
@media (max-width: 720px) { .kc-cards-grid { grid-template-columns: 1fr; } .kc-card-poster { max-width: 360px; margin: 0 auto; } }

/* utility row right-group + masthead utility as flex */
.wt-masthead__utility { display: flex; align-items: center; }
.kc-util-right { margin-left: auto; display: flex; align-items: center; justify-content: flex-end; gap: 14px; flex-wrap: wrap; }
.wt-masthead__search { display: inline-flex; align-items: center; gap: 7px; background: none; border: none; cursor: pointer; color: var(--wt-ink-soft); font: 600 13px var(--wt-font-ui); }
.wt-masthead__search svg { width: 16px; height: 16px; }
@media (max-width: 700px) { .kc-util-right .kc-util-link { display: none; } }

/* ============================================================
   KEEP CALM, card/merch creator + community signup
   ============================================================ */
/* Studio (Cards + top of Shop) */
.kc-studio { display: grid; grid-template-columns: 360px 1fr; gap: 36px; align-items: start; max-width: 900px; margin: 0 auto; }
.kc-studio__stage { display: flex; flex-direction: column; align-items: center; gap: 12px; }
.kc-studio__q { font-family: var(--wt-font-display); font-weight: 600; font-size: 22px; color: var(--wt-ink); margin: 0 0 10px; }
.kc-studio__controls label { display: block; font: 600 13px var(--wt-font-ui); color: var(--wt-ink-soft); margin: 18px 0 6px; }
.kc-moods { display: flex; flex-wrap: wrap; gap: 8px; }
.kc-mood { font: 600 14px var(--wt-font-ui); padding: 8px 14px; border-radius: 999px; border: 1px solid var(--wt-rule); background: var(--wt-surface); color: var(--wt-ink); cursor: pointer; transition: background-color .14s, border-color .14s; }
.kc-mood:hover { background: var(--wt-chip-bg); border-color: var(--wt-rule-strong); }
.kc-mood--sm { padding: 6px 10px; font-size: 18px; }
.kc-moods--sm { gap: 6px; }
.kc-studio__inputrow { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.kc-studio__prefix { font: 700 12px var(--wt-font-ui); letter-spacing: .1em; text-transform: uppercase; color: var(--wt-ink-quiet); }
.kc-studio__input { flex: 1; min-width: 180px; padding: 11px 14px; border: 1px solid var(--wt-rule-strong); border-radius: 8px; font: 16px var(--wt-font-ui); background: var(--wt-surface); color: var(--wt-ink); }
.kc-studio__err { color: #9a5b3b; font: 500 13px var(--wt-font-ui); min-height: 18px; margin: 8px 0 0; }

/* Flip card */
.kc-flip { width: 320px; max-width: 84vw; aspect-ratio: 3/4; perspective: 1400px; cursor: pointer; position: relative; touch-action: pan-y; -webkit-user-select: none; user-select: none; }
/* poster corner action buttons - bottom-left tone toggle, bottom-right flip; match the music/globe buttons */
.kc-cardtone__btn, .kc-cardflip__btn { position: absolute; bottom: 8px; z-index: 6; width: 30px; height: 30px; border-radius: 50%; border: 0; cursor: pointer; padding: 0; background: rgba(255,255,255,.22); color: #fff; display: flex; align-items: center; justify-content: center; opacity: 0; transition: opacity .15s, background .15s, transform .12s; }
.kc-cardtone__btn { left: 8px; }
.kc-cardflip__btn { right: 8px; }
.kc-flip:hover .kc-cardtone__btn, .kc-flip:hover .kc-cardflip__btn, .kc-cardtone__btn:focus-visible, .kc-cardflip__btn:focus-visible { opacity: 1; }
@media (hover: none) { .kc-cardtone__btn, .kc-cardflip__btn { opacity: .92; } }
.kc-cardtone__btn:hover, .kc-cardflip__btn:hover { background: rgba(255,255,255,.36); }
.kc-cardtone__btn:active, .kc-cardflip__btn:active { transform: scale(.92); }
.kc-cardtone__btn svg { width: 19.5px; height: 19.5px; }
.kc-cardflip__ic { width: 12.2px; height: 12.2px; background: currentColor; -webkit-mask: url(/assets/logos/turn-around.svg) center / contain no-repeat; mask: url(/assets/logos/turn-around.svg) center / contain no-repeat; }
/* keep the EN translate toggle clear of the new flip button */
.kc-flip .kc-fc__xlate { right: 44px; }
/* === DARK TONE (light poster front): black ink + ALL corner buttons go black === */
.kc-flip.kc-tone-dark .kc-flip__front { color: #111; }
.kc-flip.kc-tone-dark .kc-fc__crown { color: #111; }
.kc-flip.kc-tone-dark .kc-cardtone__btn, .kc-flip.kc-tone-dark .kc-cardflip__btn,
.kc-flip.kc-tone-dark .kc-cardmusic__btn, .kc-flip.kc-tone-dark .kc-cardglobe__btn { background: rgba(0,0,0,.16); color: #111; }
.kc-flip.kc-tone-dark .kc-cardtone__btn:hover, .kc-flip.kc-tone-dark .kc-cardflip__btn:hover,
.kc-flip.kc-tone-dark .kc-cardmusic__btn:hover, .kc-flip.kc-tone-dark .kc-cardglobe__btn:hover { background: rgba(0,0,0,.30); }
/* === DARK TONE back - reversed: a light (white) scrim instead of black, with black text === */
.kc-flip.kc-tone-dark .kc-bc__scrim { background: rgba(255,255,255,.6); }
.kc-flip.kc-tone-dark .kc-bc__eyebrow, .kc-flip.kc-tone-dark .kc-bc__tip,
.kc-flip.kc-tone-dark .kc-flip__back .kc-fc__url { color: #111; text-shadow: none; }
/* Slow flip (1.6s) so the turn is unmistakable and the back is on screen longer. */
.kc-flip__inner { position: relative; width: 100%; height: 100%; transition: transform 1.6s cubic-bezier(.2,.7,.2,1); transform-style: preserve-3d; }
/* Flip direction follows which half of the card was clicked (--flip-dir set in JS: -1 left, 1 right). */
.kc-flip.is-flipped .kc-flip__inner { transform: rotateY(calc(180deg * var(--flip-dir, 1))); }
.kc-flip__face { position: absolute; inset: 0; backface-visibility: hidden; -webkit-backface-visibility: hidden; border-radius: 10px; overflow: hidden; display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; }
/* Explicit rotateY(0) on the front is REQUIRED for backface-visibility to hide
   it when it spins away, without it the browser showed the mirrored front. */
.kc-flip__front { background: var(--wt-btn-bg); color: #ffffff; padding: 12% 9%; transform: rotateY(0deg); }
.kc-flip__back { transform: rotateY(180deg); background-size: cover; background-position: center; color: #fff; padding: 0; }
.kc-fc__crown { width: 46px; height: 46px; margin-bottom: 14px; color: #ffffff; }
.kc-fc__crown svg { width: 100%; height: 100%; }
.kc-fc__keep { font: 800 clamp(26px,8vw,40px)/1.02 var(--wt-font-ui); letter-spacing: .1em; text-transform: uppercase; }
.kc-fc__and { font: 700 13px/1 var(--wt-font-ui); letter-spacing: .22em; text-transform: uppercase; margin: 7px 0 10px; opacity: .9; }
.kc-fc__word { font: 800 clamp(20px,6vw,30px)/1.06 var(--wt-font-ui); letter-spacing: .04em; text-transform: uppercase; word-break: break-word; }
.kc-fc__url { position: absolute; bottom: 16px; left: 0; right: 0; font: 600 12px var(--wt-font-ui); letter-spacing: .04em; opacity: .85; }
/* Per-card EN translate toggle: subtle pill in the lower-right, on the URL's
   baseline. Hidden until hover on desktop; always shown on touch. */
.kc-fc__xlate {
  position: absolute; bottom: 14px; right: 14px; z-index: 3;
  appearance: none; -webkit-appearance: none;
  border: 1px solid rgba(255,255,255,.55); background: rgba(255,255,255,.14); color: #fff;
  font: 700 11px var(--wt-font-ui); letter-spacing: .07em; line-height: 1;
  padding: 3px 8px; border-radius: 999px; cursor: pointer;
  opacity: 0; transition: opacity .15s ease, background .15s ease;
}
.kc-flip:hover .kc-fc__xlate { opacity: .85; }
.kc-fc__xlate:hover { opacity: 1; background: rgba(255,255,255,.26); }
.kc-fc__xlate:focus-visible { opacity: 1; outline: 2px solid #fff; outline-offset: 2px; }
@media (hover: none) { .kc-fc__xlate { opacity: .8; } }
.kc-bc__scrim { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(20,26,22,.45), rgba(20,26,22,.72)); }
.kc-bc__content { position: relative; padding: 14% 12%; display: flex; flex-direction: column; align-items: center; justify-content: center; height: 100%; }
.kc-bc__eyebrow { font: 700 11px var(--wt-font-ui); letter-spacing: .18em; text-transform: uppercase; opacity: .85; margin-bottom: 12px; }
.kc-bc__tip { font: 500 clamp(16px,4.6vw,20px)/1.45 var(--wt-font-body); margin: 0; }
.kc-flipbtn { background: none; border: 1px solid var(--wt-rule); border-radius: 999px; padding: 7px 16px; font: 600 13px var(--wt-font-ui); color: var(--wt-ink-soft); cursor: pointer; }
.kc-flipbtn:hover { background: var(--wt-chip-bg); }

/* Card color picker - dark swatches shown under the card. */
.kc-swatches { display: flex; flex-wrap: wrap; justify-content: center; gap: 10px; margin-top: 2px; }
.kc-swatch { width: 26px; height: 26px; border-radius: 50%; border: 2px solid var(--wt-paper, #fff); padding: 0; cursor: pointer; box-shadow: 0 0 0 1px var(--wt-rule); transition: transform .12s ease, box-shadow .12s ease; }
.kc-swatch:hover { transform: scale(1.12); }
.kc-swatch.is-active { box-shadow: 0 0 0 2px var(--wt-ink, #26302b); transform: scale(1.12); }
.kc-swatch:focus-visible { outline: 2px solid var(--wt-link); outline-offset: 2px; }

/* Share row */
.kc-share { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 22px; }
.kc-share__label { font: 700 12px var(--wt-font-ui); letter-spacing: .08em; text-transform: uppercase; color: var(--wt-ink-quiet); margin-right: 2px; }
.kc-share__btn { font: 600 13px var(--wt-font-ui); padding: 8px 13px; border-radius: 999px; border: 1px solid var(--wt-rule); background: var(--wt-surface); color: var(--wt-ink); text-decoration: none; cursor: pointer; }
.kc-share__btn:hover { background: var(--wt-chip-bg); }
.kc-share__note { font: 400 12.5px var(--wt-font-ui); color: var(--wt-ink-quiet); margin: 10px 0 0; }
.kc-share__wall { display: flex; align-items: flex-start; gap: 8px; font: 500 13px var(--wt-font-ui); color: var(--wt-ink-quiet); margin: 12px 0 0; cursor: pointer; }
.kc-share__wall input { margin-top: 2px; accent-color: var(--wt-accent, #2c5f4e); width: 16px; height: 16px; flex: none; }
.kc-share__wall a { color: inherit; text-decoration: underline; }
.kc-share__wall input:focus-visible { outline: 3px solid var(--wt-focus, #357862); outline-offset: 2px; }

/* Modal (gate + waitlist) */
.kc-modal { position: fixed; inset: 0; background: rgba(20,26,22,.55); display: flex; align-items: center; justify-content: center; z-index: 200; padding: 18px; }
.kc-modal__panel { position: relative; background: var(--wt-surface); border-radius: 16px; max-width: 460px; width: 100%; padding: 30px 28px; box-shadow: 0 30px 80px rgba(20,26,22,.3); }
.kc-modal__panel .kc-page__h2, .kc-modal__title { font-family: var(--wt-font-display); font-weight: 600; font-size: 24px; color: var(--wt-ink); margin: 6px 0 10px; }
.kc-modal__panel p { font-family: var(--wt-font-body); color: var(--wt-ink-soft); font-size: 15.5px; line-height: 1.55; margin: 0 0 12px; }
.kc-modal__x { position: absolute; top: 12px; right: 14px; background: none; border: none; font-size: 26px; line-height: 1; color: var(--wt-ink-quiet); cursor: pointer; }

/* Signup forms (footer, rail, gate) */
.kc-signup__eyebrow { font-family: var(--wt-font-display); font-weight: 600; font-size: 20px; color: inherit; margin: 0 0 4px; }
.kc-signup__sub { font: 400 14.5px var(--wt-font-ui); opacity: .85; margin: 0 0 12px; }
.kc-signup__fields { display: flex; flex-wrap: wrap; gap: 8px; }
.kc-signup__in { flex: 1; min-width: 130px; padding: 11px 13px; border: 1px solid var(--wt-rule-strong); border-radius: 8px; font: 15px var(--wt-font-ui); background: var(--wt-surface); color: var(--wt-ink); }
/* Honeypot: visually hidden without huge offsets. left:-9999px expands the
   scrollable area to ~11,000px under dir="rtl" (ar/fa/ur) and blanks the paint. */
.kc-signup__hp { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; }
.kc-signup__btn { white-space: nowrap; }
.kc-signup__msg { font: 500 13px var(--wt-font-ui); min-height: 16px; margin: 8px 0 0; }
.kc-signup__msg--ok { color: var(--wt-accent); }
.kc-signup__fine { font: 400 12px var(--wt-font-ui); opacity: .7; margin: 8px 0 0; }
/* footer signup band */
.kc-footer__signup { max-width: 1100px; margin: 0 auto 36px; padding: 26px 24px; background: #243029; border: 1px solid #33403a; border-radius: 14px; color: #eef2ec; }
.kc-footer__signup .kc-signup__in { background: #1c2620; border-color: #3a473f; color: #eef2ec; }
.kc-footer__signup .kc-signup__eyebrow, .kc-footer__signup .kc-signup__sub { color: #eef2ec; }
.kc-footer__signup .kc-signup__msg--ok { color: #8fd0b4; }

/* Right-rail modules */
.kc-feel, .wt-panel--calm .kc-signup--rail { background: var(--wt-panel-bg); border: 1px solid var(--wt-panel-border); border-radius: 12px; padding: 16px 18px; margin-bottom: 22px; }
.kc-feel .wt-panel__eyebrow { color: var(--wt-accent); }
.kc-feel__phrase { font-family: var(--wt-font-display); font-size: 16px; color: var(--wt-ink); margin: 10px 0; }
.kc-feel__actions { display: flex; gap: 12px; flex-wrap: wrap; }
.kc-feel__link { font: 600 13px var(--wt-font-ui); color: var(--wt-link); text-decoration: none; background: none; border: none; cursor: pointer; padding: 0; }
.kc-feel__all { display: inline-block; margin-top: 10px; font: 600 13px var(--wt-font-ui); color: var(--wt-link); text-decoration: none; }
.wt-panel--calm .kc-signup--rail { display: block; }

@media (max-width: 760px) {
  .kc-studio { grid-template-columns: 1fr; }
  .kc-studio__stage { order: -1; }
}

/* Modal renders outside .wt-shell, so the scoped tokens aren't available -
   give it explicit, readable colors (works in light + night). */
.kc-modal__panel { background: #fffdf9; color: #26302b; }
.kc-modal__panel .kc-modal__title, .kc-modal__panel .kc-page__h2 { color: #26302b; }
.kc-modal__panel p { color: #475048; }
.kc-modal__panel .kc-hero__eyebrow { color: #2c5f4e; }
.kc-modal__panel .kc-signup__eyebrow, .kc-modal__panel .kc-signup__sub { color: #26302b; }
.kc-modal__panel .kc-signup__in { background: #fffdf9; border-color: #283a31; color: #26302b; }
.kc-modal__panel .kc-signup__fine, .kc-modal__panel .kc-signup__msg { color: #5f6a60; }
.kc-modal__panel .kc-signup__msg--ok { color: #2c5f4e; }
.kc-modal__panel .kc-btn--primary { background: #2c5f4e; color: #fffdf9; }
.kc-modal__panel .kc-btn--ghost { border: 1.5px solid #283a31; color: #26302b; }

/* ============================================================
   Button hygiene + theme fixes (iteration 3)
   ============================================================ */
/* Kill the native button bevel/background that caused the "half highlight"
   and the illegible (cream-on-cream) Inspire me button. */
.kc-btn, .kc-mood, .kc-donate-btn, .kc-donate-cta, .kc-search-form__btn,
.kc-signup__btn, .kc-flipbtn, .kc-share__btn, .wt-batmode, .wt-mini__batmode {
  -webkit-appearance: none; appearance: none;
}
.kc-btn { border: 1.5px solid transparent; background: transparent; }
.kc-btn--primary { background: var(--wt-btn-bg); color: var(--wt-btn-ink); border-color: var(--wt-btn-bg); }
.kc-btn--primary:hover { background: var(--wt-btn-bg-hover); border-color: var(--wt-btn-bg-hover); }
.kc-btn--ghost { background: transparent; border: 1.5px solid var(--wt-rule-strong); color: var(--wt-ink); }
.kc-btn--ghost:hover { background: var(--wt-chip-bg); }
.kc-donate-btn, .kc-donate-cta, .kc-search-form__btn, .kc-signup__btn { border: none; }

/* Dark-mode poster tone is now controlled per-card via .kc-tone-dark (set by kc-cards.js,
   defaulting to the global mode), bg becomes a light Option-1 shade + black ink. */

/* Footer + footer signup live OUTSIDE .wt-shell (tokens undefined there) -
   set explicit fonts/colors so "Join us" isn't serif + low-contrast. */
.kc-footer { font-family: "Montserrat", system-ui, -apple-system, sans-serif; }
.kc-footer__wordmark { font-family: "Montserrat", Georgia, serif; }
.kc-footer__signup, .kc-footer__signup .kc-signup, .kc-footer__signup .kc-signup * { font-family: "Montserrat", system-ui, sans-serif; }
.kc-footer__signup .kc-btn--primary, .kc-footer__signup .kc-signup__btn {
  background: #8fd0b4; color: #10140f; border: none; font-weight: 800;
}
.kc-footer__signup .kc-btn--primary:hover, .kc-footer__signup .kc-signup__btn:hover { background: #b9e7d1; }

/* Modal (outside shell): explicit, high-contrast buttons + sans font. */
.kc-modal__panel, .kc-modal__panel .kc-signup, .kc-modal__panel .kc-signup * { font-family: "Montserrat", system-ui, sans-serif; }
.kc-modal__panel .kc-modal__title { font-family: "Montserrat", Georgia, serif; }
.kc-modal__panel .kc-btn--primary, .kc-modal__panel .kc-signup__btn { background: #2c5f4e; color: #fffdf9; border: none; font-weight: 700; }

/* Rail: bespoke, prominent merch link (placed first). */
.kc-feel__link--merch { color: var(--wt-accent); font-weight: 800; }
.kc-feel__link--merch:hover { text-decoration: underline; }

/* Real KEEP CALM logo (crown + wordmark) in masthead / mini / footer */
.kc-logo { height: 50px; width: auto; max-width: 78vw; display: inline-block; vertical-align: middle; }
.kc-logo--mini { height: 26px; }
.kc-logo--footer { height: 40px; }
@media (min-width: 900px) { .kc-logo { height: 58px; } }
/* Masthead + mini logos render the monochrome wordmark as a CSS mask filled
   with currentColor, so the logo tracks the header ink color in both modes
   (forest in light, warm paper in dark), same as the rest of the masthead.
   The footer keeps its own white art on the dark footer background. */
.kc-logo--mask {
  display: inline-block;
  height: 50px;
  width: 222px;                 /* 50 * (5407.09/1219.27 ≈ 4.434) */
  max-width: 78vw;
  vertical-align: middle;
  background-color: currentColor;
  -webkit-mask: url(/assets/logos/keepcalm-horizontal.svg) no-repeat center / contain;
          mask: url(/assets/logos/keepcalm-horizontal.svg) no-repeat center / contain;
}
@media (min-width: 900px) { .kc-logo--mask { height: 58px; width: 257px; } }
.kc-logo--mini.kc-logo--mask { height: 30px; width: 133px; -webkit-mask: url(/assets/logos/keepcalm-logo.svg) no-repeat center / contain; mask: url(/assets/logos/keepcalm-logo.svg) no-repeat center / contain; }

/* Cards/merch KEEP CALM text uses the logo font (Montserrat ExtraBold) so it matches the brand */
.kc-fc__keep, .kc-fc__and, .kc-fc__word,
.kc-card-poster__keep, .kc-card-poster__and, .kc-card-poster__word,
.kc-studio__prefix { font-family: "Montserrat", "Montserrat", system-ui, sans-serif; }
/* breathing room under the masthead logo (the crown was crowding the subnav line) */
.wt-masthead__logo { padding: 16px 0 24px; }

/* Card front: classic poster proportions (big crown close to the text, words fill width) */
.kc-flip__front { container-type: inline-size; justify-content: flex-start; padding: 7cqw 6cqw 0; }
.kc-fc__crown { width: 35cqw; height: auto; margin: 2cqw 0 1cqw; }
.kc-fc__keep { font-size: 31cqw; line-height: 0.9; letter-spacing: 0; margin: 0; }
.kc-fc__and { font-size: 7cqw; letter-spacing: 0.22em; margin: 2.5cqw 0 2cqw; }
.kc-fc__word { font-size: 20cqw; line-height: 0.96; letter-spacing: 0; margin: 0; }
.kc-fc__url { font-size: 4.4cqw; bottom: 5cqw; }
.kc-fc__xlate { bottom: 4.6cqw; right: 4.6cqw; font-size: 3.3cqw; padding: 1cqw 2.4cqw; }

/* Fix: .kc-page a was overriding button ink (green-on-green). Raise button specificity. */
.kc-btn.kc-btn--primary { color: var(--wt-btn-ink); }
.kc-btn.kc-btn--ghost { color: var(--wt-ink); }
.kc-page a.kc-donate-cta, .kc-page a.kc-donate-btn { color: var(--wt-btn-ink); }
.kc-page a.kc-btn { text-decoration: none; }
/* Spacing: keep action buttons off the divider/note */
.kc-page .kc-hero__actions { margin: 20px 0 32px; }
.kc-page .kc-page__note { margin-top: 34px; }

/* ============================================================
   2026-06-08 round: dropdown bridge, scrolled-header donate +
   nav font, poster-accurate cards, feel-rail actions.
   ============================================================ */

/* Leadership dropdown - bridge the visual gap between the button and the
   menu so the options don't vanish when the pointer crosses into them.
   The ::before is a descendant of the menu (hence of .wt-subnav__dd), so
   hovering it keeps :hover alive across the gap. */
.wt-subnav__menu::before { content: ""; position: absolute; left: -8px; right: -8px; top: -16px; height: 18px; }

/* Scrolled (mini) header: keep the nav in the SAME font as the main subnav
   so nothing changes typeface when you scroll. */
.wt-mini__subnav,
.wt-mini__subnav a { font-family: var(--wt-font-ui); font-weight: 400; font-size: 13px; letter-spacing: 0.02em; }

/* Scrolled (mini) header: the Donate button lives OUTSIDE .wt-shell, so the
   shell button tokens don't reach it and it was rendering as plain text.
   Give it explicit high-contrast fills in both light and dark. */
.wt-mini .kc-donate-btn { background: #2c5f4e; color: #fffdf9; }
.wt-mini .kc-donate-btn:hover { background: #1f4638; }
html[data-mode="batman"] .wt-mini .kc-donate-btn { background: #8fd0b4; color: #0b1411; }
html[data-mode="batman"] .wt-mini .kc-donate-btn:hover { background: #b9e7d1; }

/* Poster-accurate card front: crown on top, then KEEP / CALM / AND / the
   completion words, every big word the SAME size, each on its own line,
   sized by JS to fill the card (mirrors the classic poster + the PNG). */
.kc-flip { aspect-ratio: 5 / 7; }
.kc-flip__front { container-type: inline-size; justify-content: flex-start; padding: 3.5cqw 0 0; }
.kc-fc__crown { display: block; width: 34cqw; height: auto; margin: 1cqw 0 0.6cqw; }   /* width is set by JS to scale with the text */
.kc-fc__crown svg { display: block; width: 100%; height: auto; }
.kc-fc__stack { display: flex; flex-direction: column; align-items: center; width: 100%; gap: 0; }
/* Front text stays hidden until it's the final localized phrase, font-loaded and
   fitted (JS adds .kc-fc-ready), so the text never renders at the wrong size and
   then jumps. */
.kc-fc__stack { opacity: 0; transition: opacity .2s ease; }
.kc-flip.kc-fc-ready .kc-fc__stack { opacity: 1; }
.kc-fc__line { display: block; white-space: nowrap; font-family: "Montserrat", "Montserrat", system-ui, sans-serif; font-weight: 800; font-size: 11cqw; line-height: 0.95; letter-spacing: 0; text-transform: uppercase; }   /* font-size set by JS; content-width so it centers + measures right */
.kc-fc__and { font-size: 6.5cqw; font-weight: 700; letter-spacing: 0.2em; text-transform: uppercase; margin: 0.5em 0 0.32em; line-height: 1; opacity: 0.92; }   /* font-size set by JS; em margins scale with it */
.kc-fc__url { font-size: 4.2cqw; bottom: 4cqw; }

/* "How are you feeling?" rail - two stacked actions under the moods. */
.kc-feel__out { margin-top: 10px; }
.kc-feel__actions--always { display: flex; flex-direction: column; gap: 9px; margin-top: 13px; }
.kc-feel__actions--always .kc-feel__link { background: none; border: none; padding: 0; text-align: left; font: 600 14px var(--wt-font-ui); color: var(--wt-link); cursor: pointer; text-decoration: none; }
.kc-feel__actions--always .kc-feel__link:hover { text-decoration: underline; }

/* ---- About: balanced co-founder cards ---- */
.kc-founders { display: grid; gap: 34px; margin: 34px 0 10px; }
.kc-founder { display: grid; grid-template-columns: 210px 1fr; gap: 28px; align-items: start; }
.kc-founder__photo { width: 210px; height: 250px; object-fit: cover; border-radius: 14px; box-shadow: 0 14px 38px rgba(40,58,49,.20); background: var(--wt-chip-bg); }
.kc-founder__role { font: 700 12px var(--wt-font-ui); letter-spacing: .14em; text-transform: uppercase; color: var(--wt-link); margin: 2px 0 4px; }
.kc-founder__name { font-family: var(--wt-font-display); font-weight: 600; font-size: clamp(24px,3.4vw,30px); color: var(--wt-ink); margin: 0 0 4px; line-height: 1.1; }
.kc-founder__tag { font: 600 13px var(--wt-font-ui); color: var(--wt-ink-quiet); margin: 0 0 12px; }
.kc-founder__bio { font-family: var(--wt-font-body); color: var(--wt-ink-soft); font-size: 16px; line-height: 1.6; margin: 0 0 14px; }
.kc-founder__quote { font-family: var(--wt-font-display); font-style: italic; font-size: 18px; line-height: 1.45; color: var(--wt-ink); margin: 0; padding-left: 16px; border-left: 3px solid var(--wt-accent); }
@media (max-width: 640px) {
  .kc-founder { grid-template-columns: 1fr; gap: 16px; }
  .kc-founder__photo { width: 100%; height: auto; aspect-ratio: 4/5; max-width: 320px; }
}

/* ---- Donate: amount + frequency widget ---- */
.kc-give { max-width: 540px; margin: 26px auto 10px; background: var(--wt-surface); border: 1px solid var(--wt-rule); border-radius: 16px; padding: 24px; box-shadow: 0 12px 34px rgba(40,58,49,.08); }
.kc-give__freq { display: inline-flex; background: var(--wt-chip-bg); border-radius: 999px; padding: 4px; gap: 4px; margin-bottom: 18px; }
.kc-give__freq-btn { border: none; background: none; font: 600 14px var(--wt-font-ui); color: var(--wt-ink-soft); padding: 8px 22px; border-radius: 999px; cursor: pointer; transition: background-color 120ms ease; }
.kc-give__freq-btn.is-active { background: var(--wt-surface); color: var(--wt-ink); box-shadow: 0 1px 5px rgba(0,0,0,.14); }
.kc-give__amts { display: flex; flex-wrap: wrap; justify-content: center; gap: 9px; margin-bottom: 18px; }
.kc-give__amt { border: 1.5px solid var(--wt-rule-strong); background: var(--wt-surface); color: var(--wt-ink); font: 700 16px var(--wt-font-ui); padding: 11px 18px; border-radius: 10px; cursor: pointer; min-width: 66px; transition: all 120ms ease; }
.kc-give__amt.is-active { border-color: var(--wt-btn-bg); background: var(--wt-btn-bg); color: var(--wt-btn-ink); }
.kc-give__other { display: inline-flex; align-items: center; gap: 3px; border: 1.5px solid var(--wt-rule-strong); border-radius: 10px; padding: 0 12px; color: var(--wt-ink-soft); }
.kc-give__other input { border: none; background: none; width: 76px; font: 700 16px var(--wt-font-ui); color: var(--wt-ink); padding: 11px 2px; outline: none; }
.kc-give__go { width: 100%; font-size: 17px; padding: 14px; }
.kc-give__trust { font: 500 12.5px var(--wt-font-ui); color: var(--wt-ink-quiet); margin: 13px 0 0; }

/* Card BACK is now a container too, so the URL uses the same card-relative
   cqw sizing/placement as the front (it was resolving against the viewport). */
.kc-flip__back { container-type: inline-size; }

/* Card front: the completion words wrap into centered, content-width lines
   (JS packs short words onto one line and sets the font-size). */
.kc-fc__words { display: flex; flex-direction: column; align-items: center; width: 100%; gap: 0; }

/* Scrolled (mini) header lives OUTSIDE .wt-shell, so the --wt-font-* variables
   don't reach it and the nav was falling back to the browser's serif. Pin it to
   Montserrat so it matches the rest of the site. */
.wt-mini,
.wt-mini__subnav,
.wt-mini__subnav a,
.wt-mini__menu-btn,
.wt-mini__search,
.wt-mini__batmode,
.wt-mini .kc-donate-btn,
.kc-crisis-ribbon { font-family: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; }

/* Publish the font tokens globally (they were only defined on .wt-shell, so
   anything outside the shell fell back to the browser serif). Montserrat sitewide. */
:root {
  --wt-font-display: "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --wt-font-body:    "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --wt-font-ui:      "Montserrat", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

/* Scrolled (mini) header keeps the Leadership + Relationships dropdowns. The
   menu lives outside .wt-shell so it needs explicit colors, and the subnav must
   not clip it. */
.wt-mini__subnav { overflow: visible; }
.wt-mini__dd .wt-subnav__dd-btn { padding: 4px 2px; }
.wt-mini .wt-subnav__menu { background: #fffdf9; border: 1px solid #e4e4df; color: #1a1a1a; box-shadow: 0 14px 32px rgba(40,58,49,.18); z-index: 1300; }
.wt-mini .wt-subnav__menu a { color: #1a1a1a; }
.wt-mini .wt-subnav__menu a:hover { background: #eef3ec; }
html[data-mode="batman"] .wt-mini .wt-subnav__menu { background: #0c1422; border-color: rgba(169,200,232,.30); color: #e7eefc; }
html[data-mode="batman"] .wt-mini .wt-subnav__menu a { color: #e7eefc; }
html[data-mode="batman"] .wt-mini .wt-subnav__menu a:hover { background: rgba(143,208,180,.16); }

/* Donate: more breathing room below the donate card before the impact tiles. */
.kc-give { margin-bottom: 42px; padding-bottom: 26px; }

/* Quick Tips: emojis flush-left with the heading (.wt-panel ul forced an 18px indent). */
.wt-panel .kc-quicktips__list { padding-left: 0; }

/* NYT-style inline header search (replaces the old overlay): magnifier expands
   an input + GO in place; the form submits to /search/. */

/* Option E nav: right-align the full-header nav row; the condensed bar is flex
   with the utility cluster (search / toggle / Donate) pushed to the right. */
.wt-subnav.wt-subnav--right { justify-content: flex-end; }
.wt-mini__inner { display: flex; align-items: center; gap: 14px; }
.wt-mini__subnav { overflow: visible; }
.wt-mini__logo { margin-right: auto; }

/* Modal CTAs live outside .wt-shell, so the shell button tokens don't reach
   them and the label was rendering dark-on-green. Pin explicit colors. */
.kc-modal__panel .kc-btn--primary,
.kc-modal__panel .kc-signup__btn { background: #2c5f4e; color: #fffdf9; border-color: #2c5f4e; }
.kc-modal__panel .kc-btn--primary:hover,
.kc-modal__panel .kc-signup__btn:hover { background: #1f4638; border-color: #1f4638; }
.kc-modal__panel .kc-btn--ghost { color: #2c5f4e; border-color: #2c5f4e; background: transparent; }

/* Search CLEAR button (NYT-style): appears once the field has text. */

/* Inline header search (NYT-style, rounded): pill field with CLEAR inside, a gap,
   then a rounded GO in the standard button color. */
.kc-hsearch { display: inline-flex; align-items: center; gap: 8px; }
.kc-hsearch__icon { background: none; border: none; cursor: pointer; color: var(--wt-ink); display: inline-flex; align-items: center; padding: 6px; }
.kc-hsearch__icon svg { width: 18px; height: 18px; }
.kc-hsearch__field { display: inline-flex; align-items: center; width: 0; opacity: 0; overflow: hidden; border: 1px solid transparent; border-radius: 8px; background: var(--wt-surface); transition: width .22s ease, opacity .16s ease, padding .22s ease; }
.kc-hsearch.is-open .kc-hsearch__field { width: 230px; opacity: 1; padding: 0 6px 0 15px; border-color: var(--wt-rule-strong); }
.kc-hsearch__input { flex: 1; width: auto; min-width: 0; border: none; background: none; outline: none; font: 500 14px var(--wt-font-ui); color: var(--wt-ink); padding: 9px 4px; }
.kc-hsearch__input::placeholder { color: var(--wt-ink-quiet); }
.kc-hsearch__clear { display: none; border: none; background: none; color: var(--wt-ink-quiet); font: 400 16px/1 var(--wt-font-ui); cursor: pointer; padding: 2px 6px; }
.kc-hsearch.is-open.has-text .kc-hsearch__clear { display: inline-block; }
.kc-hsearch__clear:hover { color: var(--wt-ink); }
.kc-hsearch__go { display: none; border: none; border-radius: 8px; background: var(--wt-btn-bg); color: var(--wt-btn-ink); font: 700 12px var(--wt-font-ui); letter-spacing: .06em; padding: 9px 18px; cursor: pointer; }
.kc-hsearch.is-open .kc-hsearch__go { display: inline-block; }
.kc-hsearch__go:hover { background: var(--wt-btn-bg-hover); }
@media (max-width: 640px) { .kc-hsearch.is-open .kc-hsearch__field { width: 150px; } }

/* Resources page - logo cards (Option A) */
.kc-rc__grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
.kc-rc { display: block; background: var(--wt-surface); border: 1px solid var(--wt-rule); border-radius: 14px; padding: 20px; text-decoration: none; color: var(--wt-ink); transition: box-shadow .15s ease, transform .15s ease; }
.kc-rc:hover { box-shadow: 0 10px 26px rgba(40,58,49,.10); transform: translateY(-2px); }
.kc-rc__logo { width: 48px; height: 48px; border-radius: 11px; background: var(--wt-chip-bg); display: flex; align-items: center; justify-content: center; overflow: hidden; margin-bottom: 12px; }
.kc-rc__logo img { width: 100%; height: 100%; object-fit: contain; display: block; }
.kc-rc__logo img.kc-rc__fav { width: 26px; height: 26px; }
.kc-rc__name { display: block; font: 700 16px var(--wt-font-ui); color: var(--wt-ink); margin-bottom: 5px; }
.kc-rc__free { display: inline-block; background: var(--wt-panel-bg); color: var(--wt-accent); font: 800 9px var(--wt-font-ui); letter-spacing: .08em; text-transform: uppercase; padding: 2px 6px; border-radius: 4px; vertical-align: middle; margin-left: 6px; }
.kc-rc__desc { display: block; font: 500 13.5px var(--wt-font-ui); color: var(--wt-ink-soft); line-height: 1.45; }
@media (max-width: 820px) { .kc-rc__grid { grid-template-columns: 1fr 1fr; } }
@media (max-width: 520px) { .kc-rc__grid { grid-template-columns: 1fr; } }

/* Footer signup button sits on the dark footer as a mint pill - keep its label dark. */
.kc-footer__signup .kc-btn.kc-btn--primary,
.kc-footer__signup .kc-btn.kc-btn--primary.kc-signup__btn { color: #10140f; }

/* Masthead (not scrolled): logo sits in the top row's center column - search left,
   logo center, toggle + Donate right (no separate logo row). */
.wt-masthead__utility .kc-hsearch { justify-self: start; }
.wt-masthead__utility .wt-masthead__logo { justify-self: center; padding: 0; }
.wt-masthead__utility .kc-util-right { justify-self: end; display: flex; align-items: center; gap: 14px; }

/* Scrolled (mini) header: inline expanding search (explicit colors, outside .wt-shell). */
.wt-mini .kc-hsearch__field { background: #fffdf9; border-color: #d9d9d9; }
.wt-mini .kc-hsearch__input { color: #1a1a1a; }
.wt-mini .kc-hsearch__input::placeholder { color: #8a938c; }
.wt-mini .kc-hsearch__clear { color: #6b756e; }
.wt-mini .kc-hsearch__go { background: #2c5f4e; color: #fffdf9; }
.wt-mini .kc-hsearch__go:hover { background: #1f4638; }
html[data-mode="batman"] .wt-mini .kc-hsearch__field { background: #0c1422; border-color: rgba(169,200,232,.30); }
html[data-mode="batman"] .wt-mini .kc-hsearch__input { color: #e7eefc; }
html[data-mode="batman"] .wt-mini .kc-hsearch__go { background: #8fd0b4; color: #0b1411; }
.wt-mini .kc-hsearch.is-open .kc-hsearch__field { width: 190px; }
@media (max-width: 640px) { .wt-mini .kc-hsearch.is-open .kc-hsearch__field { width: 130px; } }

/* Restore the 3-column grid on the masthead top row (a later rule had set it to
   flex), so the logo truly centers between the search (left) and Donate (right). */
.wt-masthead__utility { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 16px; }

/* Equidistant breathing room above and below the logo in the header band.
   The logo row had ~20px above but sat flush (0px) on the nav divider below,
   "minimal and silly". Balance both sides so the logo is optically centered. */
.wt-masthead { padding-top: 24px; }
.wt-masthead__utility { padding-bottom: 24px; }

/* ===== Nav state: BOLD current page, underline on HOVER =====
   Consistent across the full header, the scrolled mini bar, and dropdown
   triggers. Current page = bold only (no underline, no color shift). Hover =
   green text + green underline (prominent, on-brand). Underline overrides the
   older box-shadow rules so the current page no longer shows a static line. */
.wt-subnav__item, .wt-subnav__dd-btn, .wt-mini__subnav a {
  transition: color 140ms ease, box-shadow 140ms ease;
}
/* hover: green + underline */
.wt-subnav__item:hover, .wt-subnav__dd-btn:hover, .wt-mini__subnav a:hover {
  color: var(--wt-link);
  box-shadow: inset 0 -2px 0 var(--wt-link);
}
/* current page: BOLD only - no underline */
.wt-subnav__item[aria-current="page"],
.wt-subnav__dd-btn.is-current,
.wt-mini__subnav a[aria-current="page"] {
  font-weight: 700;
  box-shadow: none;
}
.wt-subnav__menu a[aria-current="page"] {
  font-weight: 700;
  background: var(--wt-chip-bg);
}
/* dark mode parity: bold current (no line), green/mint underline on hover */
html[data-mode="batman"] .wt-subnav__item[aria-current="page"],
html[data-mode="batman"] .wt-subnav__dd-btn.is-current,
html[data-mode="batman"] .wt-mini__subnav a[aria-current="page"] {
  box-shadow: none;
}
html[data-mode="batman"] .wt-subnav__item:hover,
html[data-mode="batman"] .wt-subnav__dd-btn:hover,
html[data-mode="batman"] .wt-mini__subnav a:hover {
  color: var(--wt-link);
  box-shadow: inset 0 -2px 0 var(--wt-link);
}

/* Mini-bar toggle: restore the visible outline circle around the moon/sun.
   The parchment --wt-rule token isn't defined outside .wt-shell, so on the
   white mini bar the border vanished. Hardcode a soft gray (and a faint blue
   in dark mode) so the toggle reads as a circle, matching the full header. */
.wt-mini__batmode { border: 1px solid #d8d8d2; }
html[data-mode="batman"] .wt-mini__batmode { border-color: rgba(169,200,232,.40); }

/* ===== Masthead + mini bar use the HEADER ink color (not black/white) =====
   The masthead sits outside .wt-shell, so --wt-ink wasn't reaching it and the
   icons/dropdown triggers fell back to near-black (#141414). Set the header
   ink explicitly so the logo (mask), search + hamburger icons, nav links, and
   dropdown triggers all match the article-title color: forest #26302b in light,
   warm paper #ece7dc in dark. */
.wt-masthead, .wt-mini { color: #26302b; }
.wt-masthead .wt-subnav__item, .wt-masthead .wt-subnav__dd-btn,
.wt-mini__subnav a, .wt-mini__menu-btn, .wt-mini__search,
.wt-masthead .kc-hsearch__icon, .wt-masthead .kc-hsearch__icon svg { color: inherit; }
html[data-mode="batman"] .wt-masthead, html[data-mode="batman"] .wt-mini { color: #ece7dc; }

/* Topic tags: underline only on hover. Must out-specify `.wt-panel a`
   (line ~2579), which underlines every link in the article rail. */
.wt-panel .kc-tag,
.kc-tag { text-decoration: none; }
.wt-panel .kc-tag:hover,
.kc-tag:hover { text-decoration: underline; }

/* Logo links inherit the header ink (the <a> wrappers had their own link color,
   so the masked logo picked up a slightly different green than the masthead). */
.wt-mini__logo, .wt-masthead__logo a { color: inherit; }

/* The top utility row (search icon + logo + toggle + Donate) had a quieter
   --wt-ink-quiet color; bump it to the full header ink so the logo and search
   icon match the rest (toggle/Donate keep their own explicit colors). */
.wt-masthead__utility { color: #26302b; }
html[data-mode="batman"] .wt-masthead__utility { color: #ece7dc; }

/* Trust badge on resource cards (e.g. Charity Navigator rating on nonprofits) */
.kc-rc__trust {
  display: inline-block;
  margin-top: 6px;
  font-family: var(--wt-font-ui);
  font-size: 11px;
  font-weight: 600;
  letter-spacing: .01em;
  color: var(--wt-link);
}

/* Layout page: wireframe schematic thumbnails (replace example photo) */
.kc-layout-card__media--wire { display: grid; place-items: center; padding: 10px;
  background: var(--wt-surface); border-bottom: 1px solid var(--wt-rule); color: var(--wt-ink); }
.kc-wire { width: 100%; height: 100%; }

/* Hover underline on the collapsed (mini) nav. The --wt-link token is NOT
   defined outside the content shell (the mini bar lives outside it), so
   var(--wt-link) made the rule invalid and no underline showed. Hardcode the
   brand green (and mint for dark mode) to match the full header's hover. */
.wt-mini .wt-mini__subnav a:hover,
.wt-mini .wt-mini__subnav .wt-subnav__dd-btn:hover {
  color: #2c5f4e;
  box-shadow: inset 0 -2px 0 #2c5f4e;
}
html[data-mode="batman"] .wt-mini .wt-mini__subnav a:hover,
html[data-mode="batman"] .wt-mini .wt-mini__subnav .wt-subnav__dd-btn:hover {
  color: #8fd0b4;
  box-shadow: inset 0 -2px 0 #8fd0b4;
}

/* Click-to-flip cards. The whole card flips on click (JS toggles .is-flipped);
   the URL band is a link to KeepCalm.org with a generous, centered click buffer
   (a transparent ::before that extends the hit area up/down without moving the
   text), so the bottom of the card = "open KeepCalm.org" and the rest = flip. */
.kc-flip { cursor: pointer; }
.kc-flip:focus-visible { outline: 2px solid #2c5f4e; outline-offset: 3px; }
a.kc-fc__url { text-decoration: none; color: inherit; cursor: pointer; }
a.kc-fc__url::before {
  content: "";
  position: absolute;
  left: 10%; right: 10%;
  top: -4.5cqw; bottom: -4.5cqw;
}
a.kc-fc__url:hover { text-decoration: underline; }

/* DEMO: looping video card back (?video=1). Sits behind the scrim + content. */
/* Static first-frame still = the instant, obviously-different back. The video
   fades in over it (same frame) once buffered, so there is never a blank/loading
   back and no visible jump. */
.kc-bc__still { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
.kc-bc__video { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; opacity: 0; transition: opacity .5s ease; }
.kc-bc__video.is-playing { opacity: 1; }
.kc-flip__back .kc-bc__content, .kc-flip__back .kc-fc__url { position: relative; z-index: 1; }

/* ===== Video card backs: legibility + flip hint ===== */
/* 30% black scrim between the video and the text - locked in via /overlay-darkness review.
   Single source of truth: applies to every card back (gallery, carousel, studio, detail). */
.kc-bc__scrim { position: absolute; inset: 0; background: rgba(0,0,0,.30); }
/* Stacking: video (0) < scrim (1) < text/url (2). */
.kc-flip__back .kc-bc__video { z-index: 0; }
.kc-flip__back .kc-bc__scrim { position: absolute; inset: 0; z-index: 1; }
.kc-flip__back .kc-bc__content,
.kc-flip__back .kc-fc__url { position: relative; z-index: 2; }

/* One-time 360° hint spin on first load so people see the card flips. */
@keyframes kc-flip-hint { 0% { transform: rotateY(0deg); } 100% { transform: rotateY(360deg); } }
.kc-flip--hint .kc-flip__inner { animation: kc-flip-hint .95s cubic-bezier(.3,.7,.3,1) .35s 1; }

/* Motion safety: no hint spin, no flip animation for reduced-motion users
   (they also get photo backs instead of autoplay video, handled in JS). */
@media (prefers-reduced-motion: reduce) {
  .kc-flip--hint .kc-flip__inner { animation: none; }
  .kc-flip__inner { transition: none; }
}

/* ===== a11y fixes (autonomous review) ===== */
/* Focus color published on :root so it resolves OUTSIDE .wt-shell too (the mini
   bar/drawer/footer/modals, where --wt-link is undefined). */
:root { --kc-focus: #2c5f4e; }
html[data-mode="batman"] { --kc-focus: #8fd0b4; }

/* WCAG 2.4.7: visible keyboard focus on every interactive control. */
.wt-mini__menu-btn:focus-visible, .wt-mini__search:focus-visible,
.wt-mini__batmode:focus-visible, .wt-mini__subnav a:focus-visible,
.wt-mini__logo:focus-visible, .wt-mini__drawer-panel a:focus-visible,
.kc-donate-btn:focus-visible, .kc-mood:focus-visible, .kc-tag:focus-visible,
.kc-share__btn:focus-visible, .kc-flipbtn:focus-visible, .kc-give__amt:focus-visible,
.kc-give__freq-btn:focus-visible, .kc-hsearch__icon:focus-visible,
.kc-hsearch__go:focus-visible, .kc-hsearch__clear:focus-visible,
.wt-subnav__dd-btn:focus-visible, .kc-rc:focus-visible, .kc-signup__btn:focus-visible,
.wt-masthead__logo a:focus-visible {
  outline: 2px solid var(--kc-focus); outline-offset: 2px; border-radius: 4px;
}
/* Card URL link sits on a dark/photo/video back - use a light outline there. */
a.kc-fc__url:focus-visible { outline: 2px solid #fff; outline-offset: 2px; border-radius: 3px; }

/* WCAG 1.4.3: card-back text sits over arbitrary (sometimes bright) video, so
   a 40% scrim alone isn't enough, add a heavy text-shadow as legibility insurance. */
.kc-flip__back .kc-bc__content,
.kc-flip__back .kc-fc__url { text-shadow: 0 1px 4px rgba(0,0,0,.9), 0 0 2px rgba(0,0,0,.75); }

/* Footer logo: the desktop `.kc-logo{height:58px}` media rule was overriding the
   footer-specific 40px, re-assert it for the footer. */
@media (min-width: 900px) { .kc-logo--footer { height: 40px; } }

/* Keyboard-operable nav dropdowns: JS toggles .is-open (WCAG 2.1.1). */
.wt-subnav__dd.is-open .wt-subnav__menu { display: block; }
.wt-subnav__dd.is-open .wt-subnav__caret { transform: rotate(180deg); }

/* ===== Language toggle (EN / ES) ===== */
.kc-lang { position: relative; display: inline-flex; align-items: center; font-family: var(--wt-font-ui); }
.kc-lang__btn {
  display: inline-flex; align-items: center; gap: 6px; cursor: pointer;
  background: transparent; border: 1px solid #d8d8d2; border-radius: 999px;
  padding: 5px 10px; font: 600 13px var(--wt-font-ui); color: inherit; line-height: 1;
}
.kc-lang__btn:hover { border-color: currentColor; }
.kc-lang__flag { font-size: 14px; line-height: 1; }
.kc-lang__caret { width: 12px; height: 12px; opacity: .7; }
.kc-lang.is-open .kc-lang__caret { transform: rotate(180deg); }
.kc-lang__menu {
  position: absolute; top: calc(100% + 8px); right: 0; max-width: 94vw; display: none;
  background: #fffdf9; border: 1px solid #e4e4df; border-radius: 12px; padding: 8px;
  box-shadow: 0 14px 34px rgba(40,58,49,.18); z-index: 1400;
}
.kc-lang.is-open .kc-lang__menu { display: block; }
/* search filter (one column wide) + wide multi-column grid: 6 rows per column → 3 cols at 16 langs, 5 cols at 30 */
.kc-lang__search { width: 196px; max-width: 100%; box-sizing: border-box; border: 1.5px solid #cdd5cd; border-radius: 9px; padding: 9px 11px; font: 600 13px var(--wt-font-ui); color: #1a1a1a; background: #fff; margin: 2px 0 8px; }
.kc-lang__search::placeholder { color: #9aa49c; font-weight: 500; }
.kc-lang__search:focus { outline: none; border-color: var(--wt-accent,#2c5f4e); box-shadow: 0 0 0 2px rgba(44,95,78,.16); }
.kc-lang__grid { display: grid; grid-auto-flow: column; grid-template-rows: repeat(6, auto); grid-auto-columns: 186px; gap: 1px 6px; width: max-content; max-width: 100%; }
.kc-lang__empty { display: none; padding: 12px 10px; text-align: center; color: #9aa49c; font-size: 12.5px; }
html[data-mode="batman"] .kc-lang__search { background: #0c1422; color: #e7eefc; border-color: rgba(169,200,232,.30); }
@media (max-width: 600px) { .kc-lang__grid { grid-auto-flow: row; grid-template-rows: none; grid-template-columns: 1fr; max-height: 60vh; overflow-y: auto; overscroll-behavior: contain; } .kc-lang__search { width: 100%; } }
.kc-lang__opt {
  display: flex; align-items: center; gap: 12px; width: 100%; text-align: left;
  background: transparent; border: none; cursor: pointer; padding: 9px 10px; border-radius: 8px; color: #1a1a1a;
}
.kc-lang__opt:hover { background: #eef3ec; }
.kc-lang__opt.is-active { background: #eef3ec; }
.kc-lang__oflag { font-size: 20px; line-height: 1; }
.kc-lang__otext { display: flex; flex-direction: column; line-height: 1.2; }
.kc-lang__oname { font: 600 15px var(--wt-font-ui); color: #1a1a1a; }
.kc-lang__osub { font: 500 11px var(--wt-font-ui); letter-spacing: .04em; text-transform: uppercase; color: #8a938c; }
.kc-lang__check { margin-left: auto; color: #2c5f4e; font-weight: 700; opacity: 0; }
.kc-lang__opt.is-active .kc-lang__check { opacity: 1; }
.kc-lang__btn:focus-visible, .kc-lang__opt:focus-visible { outline: 2px solid var(--kc-focus); outline-offset: 2px; }
/* dark mode menu */
html[data-mode="batman"] .kc-lang__menu { background: #0c1422; border-color: rgba(169,200,232,.30); }
html[data-mode="batman"] .kc-lang__opt, html[data-mode="batman"] .kc-lang__oname { color: #e7eefc; }
html[data-mode="batman"] .kc-lang__opt:hover, html[data-mode="batman"] .kc-lang__opt.is-active { background: rgba(143,208,180,.16); }
html[data-mode="batman"] .kc-lang__check { color: #8fd0b4; }
html[data-mode="batman"] .kc-lang__btn { border-color: rgba(169,200,232,.40); }

/* ============================================================
   Posters gallery (/posters/), single poster (/posters/p/),
   plus the freed-nav relinks. Added 2026-06-09.
   ============================================================ */
/* Interactive poster reused in the grid + detail + carousel: tap/Enter flips to a
   branded back; spins in on load. Creator's color + language, no color controls. */
.kc-flip--gallery { width: 100% !important; max-width: none !important; aspect-ratio: 3/4; }
.kc-flip--gallery:focus-visible { outline: 2px solid var(--wt-accent); outline-offset: 3px; border-radius: 12px; }
.kc-flip--gallery .kc-fc__url { pointer-events: none; }
.kc-flip--gallery .kc-fc__url[href] { pointer-events: auto; }
/* branded reverse side */
.kc-flip__back--brand { gap: 4cqw; }
.kc-flip__back--brand .kc-bc__crown { width: 30cqw; height: auto; margin: 0; color: #fffdf9; opacity: .96; }
.kc-flip__back--brand .kc-bc__crown svg { width: 100%; height: 100%; }
.kc-flip__back--brand .kc-bc__brandline { margin: 0; color: #fffdf9; font: 600 7cqw/1.25 var(--wt-font-ui); letter-spacing: .14em; text-transform: uppercase; opacity: .92; }
/* spin-in on load (staggered via inline animation-delay) */
/* On-load hint: one continuous 360° spin (front → back → front), no pause, so
   people see there's a back. backface-visibility shows the real back mid-spin. */
@keyframes kc-spin-in { from { transform: rotateY(0deg); } to { transform: rotateY(360deg); } }
.kc-flip--spin .kc-flip__inner { animation: kc-spin-in 2s cubic-bezier(.25,.1,.25,1) both; }
@media (prefers-reduced-motion: reduce) { .kc-flip--spin .kc-flip__inner { animation: none; } }

/* ---- grid ---- */
.kc-gallery { max-width: 1140px; margin: 0 auto; padding: 4px 4vw 72px; }
.kc-gallery__controls { display: flex; flex-wrap: wrap; gap: 26px; align-items: center; margin: 6px 0 18px; }
.kc-gallery__searchwrap { position: relative; flex: 1 1 220px; max-width: 340px; }
.kc-gallery__search { width: 100%; padding: 11px 36px 11px 15px; border: 1px solid var(--wt-rule, #d8d0c2); border-radius: 999px; background: var(--wt-surface, #fff); color: var(--wt-ink); font: 500 15px var(--wt-font-ui); }
.kc-gallery__search::placeholder { color: var(--wt-ink-quiet, #8a948c); }
/* kill the browser's native search clear so we only show our own × */
.kc-gallery__search::-webkit-search-cancel-button { -webkit-appearance: none; appearance: none; display: none; }
.kc-gallery__search:focus { outline: 2px solid var(--wt-accent); outline-offset: 1px; }
.kc-gallery__searchclear { position: absolute; right: 7px; top: 50%; transform: translateY(-50%); border: 0; background: transparent; font-size: 21px; line-height: 1; color: var(--wt-ink); opacity: .55; cursor: pointer; width: 26px; height: 26px; border-radius: 50%; }
.kc-gallery__searchclear:hover { opacity: 1; }
.kc-gallery__selects { display: flex; flex-wrap: wrap; gap: 28px; align-items: center; }
.kc-gallery__sel { display: inline-flex; align-items: center; gap: 6px; font: 700 11px var(--wt-font-ui); text-transform: uppercase; letter-spacing: .05em; color: var(--wt-ink); opacity: .72; }
.kc-gallery__sel select { -webkit-appearance: none; appearance: none; font: 500 14px var(--wt-font-ui); padding: 8px 40px 8px 12px; border-radius: 8px; border: 1px solid var(--wt-rule, #d8d0c2); background-color: var(--wt-surface, #fff); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23666' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 14px center; color: var(--wt-ink); text-transform: none; letter-spacing: 0; cursor: pointer; }
.kc-gallery__sel select option { background: var(--wt-surface, #fff); color: var(--wt-ink); }
html[data-mode="batman"] .kc-gallery__sel select { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23b9c7b7' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); }
.kc-gallery__resetbtn { border: 0; background: transparent; color: var(--wt-accent); font: 600 13px var(--wt-font-ui); cursor: pointer; text-decoration: underline; }
.kc-gallery__create { margin-left: auto; white-space: nowrap; }
.kc-gallery__count { text-align: center; font: 500 13px var(--wt-font-ui); opacity: .6; margin: 0 0 18px; }
/* minmax(0,1fr) instead of bare 1fr: a card's min-content is its fixed-width
   poster face, so bare 1fr tracks refuse to shrink below it and overflow the
   viewport on small screens (horizontal scroll at 390px). The poster face
   typesets with container-query units, so it scales cleanly when shrunk. */
.kc-gallery__grid { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 24px 22px; }
@media (max-width: 820px) { .kc-gallery__grid { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (max-width: 520px) { .kc-gallery__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.kc-gallery__empty { text-align: center; padding: 44px 0; font: 500 16px var(--wt-font-ui); opacity: .7; }
.kc-gallery__more { text-align: center; margin-top: 30px; }
.kc-gallery__boot { opacity: .6; }

/* ---- poster card ---- */
.kc-pcard { display: flex; flex-direction: column; }
.kc-pcard__poster { display: block; width: 100%; transition: transform .18s ease; }
.kc-pcard__poster:hover { transform: translateY(-3px); }
.kc-pcard__slot { display: block; }
.kc-pcard__bar { display: flex; align-items: center; justify-content: center; gap: 5px; margin-top: 12px; }
.kc-pcard__view, .kc-pcard__merch { font: 600 13px var(--wt-font-ui); padding: 7px 13px; border-radius: 999px; border: 1px solid var(--wt-rule, #d8d0c2); background: transparent; color: var(--wt-ink); cursor: pointer; text-decoration: none; line-height: 1; }
.kc-pcard__view:hover, .kc-pcard__merch:hover { border-color: var(--wt-accent); color: var(--wt-accent); }
.kc-pcard__heartslot { display: inline-flex; }

/* ---- heart ---- */
.kc-heart { display: inline-flex; align-items: center; gap: 5px; border: 1px solid var(--wt-rule, #d8d0c2); background: transparent; border-radius: 999px; padding: 6px 11px; cursor: pointer; color: var(--wt-ink); font: 600 13px var(--wt-font-ui); line-height: 1; transition: color .15s, border-color .15s, background .15s; }
.kc-heart__svg { width: 15px; height: 15px; fill: none; stroke: currentColor; stroke-width: 1.8; }
.kc-heart:hover { border-color: #d8556a; color: #d8556a; }
.kc-heart.is-hearted { color: #e23b54; border-color: #e23b54; }
.kc-heart.is-hearted .kc-heart__svg { fill: #e23b54; stroke: #e23b54; }
.kc-heart--lg { padding: 10px 17px; font-size: 15px; }
.kc-heart--lg .kc-heart__svg { width: 19px; height: 19px; }

/* ---- single poster detail ---- */
.kc-detail { max-width: 940px; margin: 0 auto; padding: 10px 4vw 60px; display: grid; grid-template-columns: minmax(220px, 330px) 1fr; gap: 44px; align-items: start; }
.kc-detail__slot { display: block; border-radius: 13px; overflow: hidden; box-shadow: 0 20px 54px rgba(40,58,49,.22); }
.kc-detail__panel { display: flex; flex-direction: column; gap: 22px; padding-top: 10px; }
.kc-detail__heartrow { display: flex; align-items: center; gap: 13px; flex-wrap: wrap; }
.kc-detail__heartlabel { font: 500 15px var(--wt-font-ui); opacity: .72; }
.kc-detail__pending { font: 500 15px var(--wt-font-ui); background: var(--wt-chip-bg); padding: 14px 16px; border-radius: 10px; }
.kc-detail__actions { display: flex; flex-wrap: wrap; gap: 10px; }
.kc-detail__nav { display: flex; flex-direction: column; gap: 9px; margin-top: 2px; }
.kc-detail__nav a { color: var(--wt-accent); font: 600 15px var(--wt-font-ui); text-decoration: none; }
.kc-detail__nav a:hover { text-decoration: underline; }
@media (max-width: 720px) { .kc-detail { grid-template-columns: 1fr; gap: 26px; } .kc-detail__stage { max-width: 290px; margin: 0 auto; width: 100%; } }

/* ---- flag / report modal ---- */
.kc-flag__form { display: flex; flex-direction: column; gap: 11px; margin-top: 14px; text-align: left; }
.kc-flag__opt { display: flex; align-items: center; gap: 9px; font: 500 15px var(--wt-font-ui); cursor: pointer; }
.kc-flag__opt input { width: 17px; height: 17px; }
.kc-flag__more { display: flex; flex-direction: column; gap: 6px; font: 700 12px var(--wt-font-ui); text-transform: uppercase; letter-spacing: .04em; opacity: .8; }
.kc-flag__more textarea { font: 500 14px var(--wt-font-ui); padding: 9px 11px; border-radius: 8px; border: 1px solid var(--wt-rule, #d8d0c2); resize: vertical; text-transform: none; letter-spacing: 0; }
.kc-flag__actions { margin-top: 4px; }
.kc-flag__done { color: var(--wt-accent); font: 600 15px var(--wt-font-ui); }

/* ---- freed-nav relinks ---- */
.kc-crisis-ribbon__resources { font-weight: 700; }
.kc-crisis-ribbon__resources::before { content: "·"; margin: 0 9px 0 1px; opacity: .5; font-weight: 400; }
.kc-footer__about { display: inline-block; margin-top: 12px; color: inherit; opacity: .85; font: 600 14px var(--wt-font-ui); text-decoration: none; }
.kc-footer__about:hover { opacity: 1; text-decoration: underline; }
.kc-studio__viewall { }

@media (max-width: 640px) {
  .kc-gallery__controls { flex-direction: column; align-items: stretch; }
  /* flex-basis auto: in this column layout the desktop `flex: 1 1 220px`
     basis becomes HEIGHT, leaving a 220px-tall empty band under the search
     field. Height should come from the input, not the flex basis. */
  .kc-gallery__searchwrap { max-width: none; flex: 0 0 auto; }
  .kc-gallery__selects { justify-content: center; }
  .kc-gallery__create { margin-left: 0; text-align: center; }
}

/* ---- embed code modal ---- */
.kc-embed-preview { display: flex; justify-content: center; margin: 16px 0 6px; }
.kc-embed-preview iframe { width: 170px !important; height: 227px !important; box-shadow: 0 10px 30px rgba(40,58,49,.18); border-radius: 12px; }
.kc-embed-code { width: 100%; box-sizing: border-box; font: 500 12px/1.5 ui-monospace, SFMono-Regular, Menlo, monospace; padding: 10px 12px; border-radius: 8px; border: 1px solid var(--wt-rule, #d8d0c2); background: var(--wt-chip-bg); color: var(--wt-ink); resize: vertical; margin-top: 8px; }

/* ---- home featured carousel ---- */
/* Reserve the hero's height so the article feed below doesn't jump down when the
   client-rendered hero (eyebrow + headline + carousel) loads in. */
.kc-home-posters { max-width: 1140px; margin: 10px auto 0; padding: 8px 4vw 0; min-height: 540px; }
@media (max-width: 700px) { .kc-home-posters { min-height: 620px; } }
.kc-carousel__hd { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin: 0 0 14px; }
.kc-carousel { position: relative; display: flex; align-items: center; gap: 8px; }
.kc-carousel__viewport { display: flex; gap: 20px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; -webkit-overflow-scrolling: touch; scrollbar-width: none; padding: 6px 2px; flex: 1 1 auto; min-width: 0; }
.kc-carousel__viewport::-webkit-scrollbar { display: none; }
.kc-carousel__card { scroll-snap-align: start; flex: 0 0 calc((100% - 80px) / 5); min-width: 0; }
.kc-carousel__arrow { flex: 0 0 auto; width: 40px; height: 40px; border-radius: 50%; border: 1px solid var(--wt-rule, #d8d0c2); background: var(--wt-card-bg, #fff); color: var(--wt-ink); font: 400 22px/1 var(--wt-font-ui); cursor: pointer; display: flex; align-items: center; justify-content: center; }
.kc-carousel__arrow:hover { border-color: var(--wt-accent); color: var(--wt-accent); }
.kc-carousel__arrow:disabled { opacity: .35; cursor: default; }
.kc-carousel__dots { display: flex; justify-content: center; flex-wrap: wrap; gap: 8px; margin: 16px 0 4px; }
.kc-carousel__dot { width: 9px; height: 9px; border-radius: 50%; border: 0; background: var(--wt-rule, #cfc7b8); cursor: pointer; padding: 0; transition: transform .15s, background .15s; }
.kc-carousel__dot.is-active { background: var(--wt-accent); transform: scale(1.3); }
.kc-carousel__cta { text-align: center; margin: 12px 0 6px; }
.kc-carousel__empty { padding: 20px 0; opacity: .75; }
@media (max-width: 980px) { .kc-carousel__card { flex-basis: calc((100% - 40px) / 3); } }
@media (max-width: 720px) { .kc-carousel__card { flex-basis: calc((100% - 20px) / 2); } }
@media (max-width: 480px) { .kc-carousel__card { flex-basis: 80%; } .kc-carousel__arrow { display: none; } }

/* ----- Home hero copy (sits above the carousel) ----- */
.kc-home-top { text-align: center; max-width: 880px; margin: 4px auto 20px; padding: 0 12px; }
.kc-home-top__eyebrow { font-weight: 700; font-size: 13px; letter-spacing: .18em; text-transform: uppercase; color: var(--wt-accent); margin: 0 0 12px; }
.kc-home-top__title { font-family: var(--wt-font-display); font-weight: 800; font-size: clamp(26px, 4.6vw, 46px); line-height: 1.04; letter-spacing: -.01em; text-transform: uppercase; color: var(--wt-ink); margin: 0 0 12px; }
.kc-home-top__and { font-size: .62em; font-weight: 700; }
.kc-home-top__sub { font-size: clamp(15px, 1.6vw, 17px); line-height: 1.5; color: var(--wt-ink-soft, #5d6b62); max-width: 680px; margin: 0 auto; }

/* ----- Carousel footer: dots centered, CTAs bottom-right in line with them ----- */
.kc-carousel__foot { display: grid; grid-template-columns: 1fr auto 1fr; align-items: center; gap: 12px; margin: 18px 0 6px; }
.kc-carousel__foot .kc-carousel__dots { margin: 0; justify-self: center; }
.kc-carousel__foot .kc-carousel__cta { margin: 0; justify-self: end; display: flex; align-items: center; gap: 16px; }
.kc-carousel__foot .kc-section__more { white-space: nowrap; }
@media (max-width: 720px) {
  .kc-carousel__foot { grid-template-columns: 1fr; }
  .kc-carousel__foot-l { display: none; }
  .kc-carousel__foot .kc-carousel__cta { justify-self: center; }
}

/* ============================================================
   Accounts, nav widget, auth pages, account page, favorites
   ============================================================ */
.kc-acct-slot{ display:flex; align-items:center; gap:8px; }
/* Sign in + Sign up are matching outlined pills (Donate stays the filled CTA). */
.kc-acct__signin, .kc-acct__signup{ font:700 13px var(--wt-font-ui); text-decoration:none; white-space:nowrap; padding:8px 14px; border-radius:999px; border:1px solid var(--wt-rule,#d8d0c2); background:transparent; color:var(--wt-ink); transition:border-color 140ms ease, background 140ms ease, color 140ms ease; }
/* ONE consistent hover for every secondary nav control: language · theme · sign in · sign up. */
.kc-lang__btn:hover, .wt-batmode:hover, .wt-mini__batmode:hover, .kc-acct__signin:hover, .kc-acct__signup:hover{ border-color:var(--wt-accent); background:var(--wt-chip-bg); color:var(--wt-accent); }
.kc-acct{ position:relative; }
.kc-acct__avatar{ width:34px; height:34px; border-radius:50%; border:1px solid var(--wt-rule,#d8d0c2); background:var(--wt-card-bg,#fff); color:var(--wt-ink); cursor:pointer; display:flex; align-items:center; justify-content:center; overflow:hidden; padding:0; }
.kc-acct__avatar svg{ width:20px; height:20px; }
.kc-acct__avatar img{ width:100%; height:100%; object-fit:cover; }
.kc-acct__menu{ position:absolute; top:calc(100% + 8px); right:0; min-width:210px; background:var(--wt-card-bg,#fff); border:1px solid var(--wt-rule,#d8d0c2); border-radius:12px; box-shadow:0 14px 40px rgba(40,58,49,.18); padding:6px; display:none; flex-direction:column; z-index:60; }
.kc-acct.is-open .kc-acct__menu{ display:flex; }
.kc-acct__hello{ font:600 12px var(--wt-font-ui); opacity:.6; padding:8px 12px 4px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.kc-acct__menu a, .kc-acct__menu button{ font:600 14px var(--wt-font-ui); text-align:left; text-decoration:none; color:var(--wt-ink); background:transparent; border:0; cursor:pointer; padding:9px 12px; border-radius:8px; }
.kc-acct__menu a:hover, .kc-acct__menu button:hover{ background:var(--wt-chip-bg); color:var(--wt-accent); }

.kc-auth-main, .kc-account-main{ max-width:1100px; margin:0 auto; padding:24px 5vw 72px; }
.kc-auth-card{ max-width:420px; margin:24px auto; background:var(--wt-card-bg,#fff); border:1px solid var(--wt-rule,#e6dfd2); border-radius:16px; padding:34px 30px; box-shadow:0 16px 44px rgba(40,58,49,.10); }
.kc-auth__title{ font-weight:800; font-size:26px; margin:0 0 6px; }
.kc-auth__sub{ color:var(--wt-muted,#5d6b62); font-size:15px; margin:0 0 18px; }
.kc-auth-form{ display:flex; flex-direction:column; gap:14px; }
.kc-fieldlbl{ display:flex; flex-direction:column; gap:5px; font:700 12px var(--wt-font-ui); text-transform:uppercase; letter-spacing:.04em; color:var(--wt-ink); }
.kc-input{ font:500 15px var(--wt-font-ui); padding:11px 13px; border-radius:9px; border:1px solid var(--wt-rule,#d8d0c2); background:var(--wt-card-bg,#fff); color:var(--wt-ink); text-transform:none; letter-spacing:0; width:100%; }
.kc-input:focus{ outline:2px solid var(--wt-accent); outline-offset:1px; }
.kc-fieldlbl--ro .kc-input{ opacity:.65; }
.kc-auth__check{ display:flex; align-items:flex-start; gap:9px; font:500 14px var(--wt-font-ui); color:var(--wt-ink); cursor:pointer; text-transform:none; letter-spacing:0; }
.kc-auth__check input{ margin-top:3px; }
.kc-auth__err{ color:#c0392b; font:600 14px var(--wt-font-ui); margin:0; }
.kc-auth__hint, .kc-auth__fine{ color:var(--wt-muted,#5d6b62); font-size:13px; margin:2px 0 0; }
.kc-auth__submit.is-loading{ opacity:.6; }
.kc-auth__alt{ margin:18px 0 0; font-size:14px; text-align:center; }
.kc-auth__alt a, .kc-auth__sub a{ color:var(--wt-accent); }

.kc-account__hd{ display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; }
.kc-account__note{ background:var(--wt-chip-bg); border-radius:10px; padding:12px 16px; font-size:14px; max-width:640px; margin:10px 0; }
.kc-account__form{ display:flex; flex-direction:column; gap:14px; max-width:520px; margin:20px 0; }
.kc-account__form textarea{ font:500 15px var(--wt-font-ui); padding:11px 13px; border-radius:9px; border:1px solid var(--wt-rule,#d8d0c2); resize:vertical; }
.kc-account__saved{ color:var(--wt-accent); font:700 14px var(--wt-font-ui); margin-left:10px; }
.kc-account__sec{ border-top:1px solid var(--wt-rule,#e6dfd2); padding:24px 0; }
.kc-account__h2{ font-weight:800; font-size:19px; margin:0 0 14px; }
.kc-account__empty{ color:var(--wt-muted,#5d6b62); }
.kc-account__empty a{ color:var(--wt-accent); }
.kc-account__favposters{ display:grid; grid-template-columns:repeat(auto-fill,minmax(130px,1fr)); gap:18px; max-width:720px; }
.kc-account__slot{ display:block; }
.kc-account__favlist{ list-style:none; padding:0; margin:0; display:flex; flex-direction:column; gap:8px; }
.kc-account__favlist a{ color:var(--wt-accent); font:600 16px var(--wt-font-ui); text-decoration:none; }
.kc-account__favlist a:hover{ text-decoration:underline; }
.kc-2fa__secret{ display:inline-block; font:700 16px ui-monospace,Menlo,monospace; letter-spacing:.1em; background:var(--wt-chip-bg); padding:8px 12px; border-radius:8px; margin:6px 0; word-break:break-all; }
.kc-2fa__on{ color:var(--wt-accent); font-weight:700; }
.kc-2fa__err{ color:#c0392b; font-size:13px; }

.kc-fav{ display:inline-flex; align-items:center; gap:6px; }
.kc-fav__svg{ width:16px; height:16px; fill:none; stroke:currentColor; stroke-width:1.7; }
/* Saved state: bookmark (articles) glows brand-green; heart (posters) glows red. */
.kc-fav--bookmark.is-fav{ color:var(--wt-accent,#2c5f4e); border-color:var(--wt-accent,#2c5f4e); }
.kc-fav--bookmark.is-fav .kc-fav__svg{ fill:var(--wt-accent,#2c5f4e); stroke:var(--wt-accent,#2c5f4e); }
.kc-fav--heart:hover{ color:#e23b54; border-color:#e23b54; }
.kc-fav--heart.is-fav{ color:#e23b54; border-color:#e23b54; }
.kc-fav--heart.is-fav .kc-fav__svg{ fill:#e23b54; stroke:#e23b54; }
/* favorite-confirmation note inside the share sheet */
.kc-share-note{ text-align:center; margin:-2px 0 16px; font:500 13.5px var(--wt-font-ui); color:var(--wt-muted,#5d6b62); }
/* anonymous share-count milestone on the poster detail page */
.kc-detail__shares{ text-align:left; margin:2px 0 10px; }
/* the always-available skip on the signup invitation (a share is never blocked) */
.kc-signup__skip{ display:block; margin:12px auto 0; }
/* nudge to also add an article to the visitor's own browser bookmarks */
.kc-bm-nudge{ position:fixed; left:50%; bottom:22px; transform:translate(-50%,14px); opacity:0; z-index:9999;
  background:#16201b; color:#fff; font:500 13.5px var(--wt-font-ui); line-height:1.4; padding:12px 16px;
  border-radius:12px; box-shadow:0 16px 40px -16px rgba(0,0,0,.55); max-width:min(440px,90vw); text-align:center;
  transition:opacity .3s ease, transform .3s ease; }
.kc-bm-nudge.is-in{ opacity:1; transform:translate(-50%,0); }
.kc-bm-nudge strong{ font-weight:700; }
.kc-bm-nudge kbd{ display:inline-block; background:rgba(255,255,255,.16); border:1px solid rgba(255,255,255,.22);
  border-radius:6px; padding:1px 7px; font-family:inherit; font-weight:700; white-space:nowrap; }
@media (max-width:680px){ .kc-acct__signin{ display:none; } }
.wt-article__fav{ display:inline-flex; align-items:center; gap:6px; border:1px solid var(--wt-rule,#d8d0c2); background:transparent; color:var(--wt-ink); border-radius:999px; padding:5px 13px; font:600 13px var(--wt-font-ui); cursor:pointer; margin-left:auto; }
.wt-article__fav:hover{ border-color:var(--wt-accent); color:var(--wt-accent); }
.wt-article__fav.is-fav{ color:#b8860b; border-color:#d4a829; }

/* ---- admin review ---- */
.kc-admin__hd{ display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; }
.kc-admin__tabs{ display:flex; gap:8px; }
.kc-admin__tab{ font:700 13px var(--wt-font-ui); border:1px solid var(--wt-rule,#d8d0c2); background:transparent; color:var(--wt-ink); border-radius:999px; padding:8px 16px; cursor:pointer; }
.kc-admin__tab.is-on{ background:var(--wt-accent); color:var(--wt-btn-ink); border-color:var(--wt-accent); }
.kc-admin__grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:22px; margin-top:24px; }
.kc-admin__item{ display:flex; gap:16px; background:var(--wt-card-bg,#fff); border:1px solid var(--wt-rule,#e6dfd2); border-radius:14px; padding:16px; }
.kc-admin__poster{ flex:0 0 100px; }
.kc-admin__slot{ display:block; width:100px; }
.kc-admin__meta{ flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:6px; }
.kc-admin__phrase{ font:700 16px var(--wt-font-ui); margin:0; }
.kc-admin__sub{ font:600 11px var(--wt-font-ui); opacity:.6; margin:0; text-transform:uppercase; letter-spacing:.04em; }
.kc-admin__actions{ display:flex; flex-direction:column; gap:8px; margin-top:auto; }
.kc-admin__actions .kc-btn{ width:100%; }
.kc-admin__reason{ font-size:13px; padding:8px 10px; }
.kc-admin__remove{ color:#c0392b; border-color:#e0b4ae; }
.kc-admin__remove:hover{ background:#fbeae8; }

/* ---- per-card globe language menu (hover-reveal, fixed legible size) ---- */
.kc-cardglobe{ position:absolute; top:8px; right:8px; z-index:5; }
.kc-cardglobe__btn{ width:30px; height:30px; border-radius:50%; border:0; cursor:pointer; background:rgba(255,255,255,.22); color:#fff; display:flex; align-items:center; justify-content:center; padding:0; opacity:0; transition:opacity .15s, background .15s; }
.kc-cardglobe__btn:hover{ background:rgba(255,255,255,.36); }
.kc-cardglobe__btn svg{ width:18px; height:18px; }
/* Globe shows on hover only (plus when the menu is open, or keyboard focus).
   NOT on :focus-within, a click to flip leaves focus on the card and would
   otherwise keep the globe stuck visible after the mouse leaves. */
.kc-flip--gallery:hover .kc-cardglobe__btn, .kc-flip.is-langmenu .kc-cardglobe__btn, .kc-cardglobe__btn:focus-visible{ opacity:1; }
@media (hover:none){ .kc-cardglobe__btn{ opacity:.9; } }
.kc-cardglobe__menu{ position:absolute; top:36px; right:0; background:#fff; color:#16201b; border-radius:10px; box-shadow:0 12px 30px rgba(0,0,0,.30); padding:6px; display:none; flex-direction:column; gap:2px; min-width:188px; max-height:240px; overflow-y:auto; -webkit-overflow-scrolling:touch; z-index:9; }
/* Portaled to <body>: page-fixed so it's never clipped by the card, and tall
   enough (with scroll) to show the full language list. */
.kc-cardglobe__menu--portal{ position:fixed; display:flex; max-height:min(62vh,440px); z-index:1000; }
.kc-flip.is-langmenu .kc-cardglobe__menu{ display:flex; }
.kc-cardglobe__menu button{ display:flex; align-items:center; gap:10px; font:600 14px var(--wt-font-ui); border:0; background:transparent; cursor:pointer; padding:9px 12px; border-radius:7px; text-align:left; white-space:nowrap; color:#16201b; }
.kc-cardglobe__menu button:hover, .kc-cardglobe__menu button.is-on{ background:#eef2ef; }
.kc-cardglobe__fg{ width:21px; height:14px; border-radius:2px; flex:0 0 auto; }
.kc-cardglobe__em{ font-size:18px; line-height:1; }
/* In-card search picker (chosen #9): centered with EQUAL margins on both sides,
   lives inside the flip face so it's clipped to the card and never spills off
   screen (works in embeds). Type to filter; the list scrolls for long lists. */
.kc-cardglobe__menu--incard{ position:absolute; top:44px; left:14px; right:14px; bottom:14px; width:auto; min-width:0; padding:8px; gap:0; overflow:hidden; z-index:12; }
.kc-cardglobe__search{ width:100%; box-sizing:border-box; border:1.5px solid #cdd5cd; border-radius:9px; padding:9px 11px; font:600 13px var(--wt-font-ui); color:#16201b; background:#fff; flex:0 0 auto; }
.kc-cardglobe__search::placeholder{ color:#8a948c; font-weight:500; }
.kc-cardglobe__search:focus{ outline:none; border-color:var(--wt-accent,#2c5f4e); box-shadow:0 0 0 2px rgba(44,95,78,.18); }
.kc-cardglobe__list{ margin-top:6px; display:flex; flex-direction:column; gap:2px; overflow-y:auto; overscroll-behavior:contain; -webkit-overflow-scrolling:touch; min-height:0; flex:1 1 auto; touch-action:pan-y; }
/* Share sheet: social networks + Copy link + Embed */
.kc-share-grid{ display:grid; grid-template-columns:repeat(4,1fr); gap:14px 10px; margin:16px 0 10px; }
@media (max-width:380px){ .kc-share-grid{ grid-template-columns:repeat(3,1fr); } }
.kc-share-net{ display:flex; flex-direction:column; align-items:center; gap:7px; text-decoration:none; color:var(--wt-ink,#26302b); }
.kc-share-net__ic{ width:48px; height:48px; border-radius:50%; background:var(--b,#444); color:#fff; display:flex; align-items:center; justify-content:center; transition:transform .12s ease, box-shadow .12s ease; }
.kc-share-net:hover .kc-share-net__ic{ transform:translateY(-2px); box-shadow:0 6px 16px -6px rgba(0,0,0,.4); }
.kc-share-net__ic svg{ width:23px; height:23px; }
.kc-share-net__lb{ font:600 11.5px var(--wt-font-ui,sans-serif); }
.kc-share-actions{ display:flex; gap:10px; justify-content:center; flex-wrap:wrap; margin-top:6px; }
/* full sentence on the video back (scales with card width; legible even on small) */
.kc-bc__full{ margin:0; color:#fffdf9; font-family:var(--wt-font-ui); font-weight:700; font-size:9cqw; line-height:1.22; text-shadow:0 1px 10px rgba(0,0,0,.55); }

/* ---- poster card bar: eye / heart / share icon buttons + merch pill ---- */
.kc-pcard__icon, .kc-pcard__bar .kc-heart{ width:38px; height:38px; padding:0; border-radius:50%; display:inline-flex; align-items:center; justify-content:center; border:1px solid var(--wt-rule,#d8d0c2); background:transparent; color:var(--wt-ink); cursor:pointer; position:relative; flex:0 0 auto; }
.kc-pcard__icon svg, .kc-pcard__bar .kc-heart__svg{ width:18px; height:18px; }
.kc-pcard__icon:hover{ border-color:var(--wt-accent); color:var(--wt-accent); background:transparent; }
.kc-pcard__bar .kc-heart{ gap:0; }
.kc-pcard__bar .kc-heart.is-hearted{ color:#e23b54; border-color:#e23b54; }
/* The heart invites use with a RED hover (red ring + red outline heart); the
   other bar icons keep the neutral accent hover. (Restored per request.) */
.kc-pcard__bar .kc-heart:hover{ border-color:#e23b54; color:#e23b54; background:transparent; }
.kc-pcard__bar .kc-heart:hover .kc-heart__svg{ stroke:#e23b54; }
.kc-pcard__heartslot{ display:inline-flex; }
.kc-pcard__merch{ padding:10px 16px; height:38px; display:inline-flex; align-items:center; }
.kc-toast{ position:absolute; bottom:calc(100% + 7px); left:50%; transform:translateX(-50%); background:#16201b; color:#fff; font:600 11px var(--wt-font-ui); padding:4px 9px; border-radius:6px; white-space:nowrap; pointer-events:none; z-index:30; }
.kc-toast::after{ content:""; position:absolute; top:100%; left:50%; transform:translateX(-50%); border:4px solid transparent; border-top-color:#16201b; }
/* gallery back tip (phrase-related, per language) */
.kc-flip--gallery .kc-bc__eyebrow{ font-size:5.2cqw; letter-spacing:.16em; margin-bottom:3.5cqw; }
.kc-flip--gallery .kc-bc__tip{ font-family:var(--wt-font-ui); font-weight:600; font-size:7.8cqw; line-height:1.3; color:#fffdf9; margin:0; }
/* small-card back: start the copy a little higher so the 30%-larger text always fits */
/* Start the back copy a bit lower so the translate globe (top-right) never crowds the eyebrow. */
.kc-flip--gallery .kc-bc__content{ justify-content:flex-start; padding-top:22%; }
.kc-flip--gallery .kc-fc__url{ font-size:5.7cqw; }
.kc-pcard__icon, .kc-pcard__bar .kc-heart, .kc-pcard__merch{ box-sizing:border-box; }

/* Merch is now a t-shirt icon (compact, no text overflow in Spanish); add row
   space so a card's buttons clearly belong to the poster above them. */
.kc-pcard__merch{ width:38px; height:38px; padding:0; border-radius:50%; }
.kc-pcard__merch svg{ width:18px; height:18px; }
.kc-gallery__grid{ row-gap:40px; }
.kc-pcard__bar{ margin-top:10px; }

/* ---- share-loop pass (2026-07-03) ---- */
/* Detail page: the poster's own name as a real heading (this page is where
   shared links land; it should greet the reader with the line itself). */
.kc-detail__title{ font-family:var(--wt-font-display); font-weight:800; font-size:clamp(22px,3.2vw,32px); line-height:1.12; letter-spacing:.01em; text-transform:uppercase; color:var(--wt-ink); margin:0 0 2px; }
/* Instagram / TikTok hint inside the share sheet (sits under the action row). */
.kc-share-note--ig{ margin:14px 0 0; }
/* Embed preview: taller iframe so the caption link under the poster shows. */
.kc-embed-preview iframe{ height:250px !important; }


/* ---- Adversarial review A-01/A-07 follow-up (2026-07-03): phone-width masthead ----
   Below ~700px the 3-column header grid (search+player | logo | account+Donate)
   is wider than the screen. The right column then sat past the viewport edge,
   the whole page scrolled sideways, and "Sign up for free" + "Donate" were
   keyboard tab stops rendered off-screen (WCAG operability failure). Stack the
   header instead: each cluster gets its own centered, wrapping row. DOM order
   is unchanged, so focus order still matches the visual order, and nothing is
   hidden: every control stays on-screen and tappable in both color modes. */
@media (max-width: 700px) {
  .wt-masthead .wt-masthead__utility { grid-template-columns: 1fr; row-gap: 12px; justify-items: center; }
  .wt-masthead .wt-masthead__utility .kc-navleft,
  .wt-masthead .wt-masthead__utility .kc-util-right {
    justify-self: center; justify-content: center; flex-wrap: wrap; max-width: 100%;
  }
  .wt-masthead .wt-masthead__utility .wt-masthead__logo { justify-self: center; max-width: 100%; }
}

/* Same A-01 failure in the scrolled/pinned mini header: it is position:fixed, so
   controls pushed past the right edge (search, Sign up, Donate at 390px) could
   NEVER be scrolled into view yet stayed in the tab order. Let the bar wrap into
   a second slim row on phones; everything stays visible and reachable. */
@media (max-width: 700px) {
  .wt-mini .wt-mini__inner { flex-wrap: wrap; justify-content: center; gap: 6px 10px; padding: 8px 10px; }
}

/* ------------------------------------------------------------
   C3 · Growth dashboard (admin only). Single accent hue for all
   marks (magnitude only, one series); every value is also text,
   so color never carries meaning alone. Tokens are per-mode
   (--wt-accent is 5.6:1 on paper, 8.9:1 in dark mode), so both
   themes pass without extra rules.
   ------------------------------------------------------------ */
.kc-g__tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 14px; margin: 18px 0 6px; }
.kc-g__tile { background: var(--wt-surface); border: 1px solid var(--wt-rule); border-radius: 14px; padding: 14px 16px; }
.kc-g__num { font: 800 26px/1.1 var(--wt-font-ui); color: var(--wt-ink); margin: 0; font-variant-numeric: tabular-nums; }
.kc-g__lbl { font: 700 11px var(--wt-font-ui); text-transform: uppercase; letter-spacing: .05em; color: var(--wt-ink-soft); margin: 4px 0 0; }
.kc-g__sub { font: 600 12px var(--wt-font-ui); color: var(--wt-ink-quiet); margin: 4px 0 0; }
.kc-g__h { font: 700 15px var(--wt-font-ui); color: var(--wt-ink); margin: 28px 0 10px; }
.kc-g__chart { display: flex; align-items: flex-end; gap: 3px; height: 120px; padding: 12px; background: var(--wt-surface); border: 1px solid var(--wt-rule); border-radius: 14px; }
.kc-g__bar { flex: 1 1 0; min-width: 2px; background: var(--wt-accent); border-radius: 3px 3px 0 0; }
.kc-g__rows { display: flex; flex-direction: column; gap: 8px; max-width: 640px; }
.kc-g__row { display: grid; grid-template-columns: 130px 1fr 110px; gap: 10px; align-items: center; font: 600 13px var(--wt-font-ui); color: var(--wt-ink-soft); }
.kc-g__track { display: block; background: var(--wt-chip-bg); border-radius: 99px; height: 10px; overflow: hidden; }
.kc-g__fill { display: block; background: var(--wt-accent); height: 100%; border-radius: 99px; }
.kc-g__val { text-align: right; color: var(--wt-ink); font-variant-numeric: tabular-nums; white-space: nowrap; }
.kc-g__wrap { overflow-x: auto; }
.kc-g__tbl { width: 100%; max-width: 760px; border-collapse: collapse; font: 600 13px var(--wt-font-ui); color: var(--wt-ink); }
.kc-g__tbl th { text-align: left; font: 700 11px var(--wt-font-ui); text-transform: uppercase; letter-spacing: .05em; color: var(--wt-ink-quiet); padding: 8px 10px; border-bottom: 1px solid var(--wt-rule); }
.kc-g__tbl td { padding: 8px 10px; border-bottom: 1px solid var(--wt-rule); }
.kc-g__tbl td a { color: var(--wt-link); }
.kc-g__tbl td.num, .kc-g__tbl th.num { text-align: right; font-variant-numeric: tabular-nums; }
.kc-g__details { margin: 8px 0 0; }
.kc-g__details summary { cursor: pointer; font: 600 13px var(--wt-font-ui); color: var(--wt-link); padding: 6px 0; }
@media (max-width: 560px) { .kc-g__row { grid-template-columns: 96px 1fr 96px; } }

/* ---------- Article trust footer (license + review provenance) ----------
   Emitted by scripts/build-seo-pages.mjs at the end of every article body.
   Links to /editorial-policy/; see the B1 AI-citation change-list. */
.wt-article__trust {
  margin-top: 40px;
  padding-top: 14px;
  border-top: 1px solid var(--wt-rule);
  max-width: 740px;
}
.wt-article__trust p {
  font-family: var(--wt-font-ui);
  font-size: 12.5px;
  line-height: 1.55;
  color: var(--wt-ink-quiet);
  margin: 0 0 6px;
}
.wt-article__trust a { color: var(--wt-link); text-decoration: underline; text-underline-offset: 3px; }
.wt-article__trust a:hover { color: var(--wt-link-hover); }
/* The body drop-cap rule (p:first-of-type::first-letter) also matches the
   trust footer's first paragraph; neutralize it there. */
.wt-article__trust p:first-of-type::first-letter {
  float: none;
  font-family: inherit;
  font-weight: inherit;
  font-size: inherit;
  line-height: inherit;
  padding: 0;
  color: inherit;
}

/* ---------- Article share row (2026-07-08) ----------
   Emitted by scripts/build-seo-pages.mjs above the trust footer on every
   article. Static links only (WhatsApp/Telegram/Facebook/X/Email): no JS,
   CSP-safe, and flex keeps it correct in RTL. Label = cards.share dict. */
.kc-share {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 8px;
  margin-top: 36px;
  max-width: 740px;
}
.kc-share__label {
  font: 700 11.5px/1 var(--wt-font-ui);
  letter-spacing: .12em;
  text-transform: uppercase;
  color: var(--wt-ink-quiet);
  margin-inline-end: 4px;
}
.wt-article__body a.kc-share__btn { text-decoration: none; } /* beat the body-link underline rule */
.kc-share__btn {
  display: inline-block;
  font: 600 13px/1 var(--wt-font-ui);
  color: var(--wt-link);
  text-decoration: none;
  border: 1px solid var(--wt-rule);
  border-radius: 999px;
  padding: 8px 14px;
  transition: background-color .15s ease, color .15s ease, border-color .15s ease;
}
.kc-share__btn:hover {
  color: var(--wt-link-hover);
  border-color: var(--wt-link);
}
.kc-share__btn:focus-visible {
  outline: 2px solid var(--wt-link);
  outline-offset: 2px;
}

/* ---------- Homepage free-promise lede (2026-07-08) ----------
   Surfaces the translated home.lede string under the masthead. */
.kc-home-lede {
  max-width: 760px;
  margin: 14px auto 6px;
  padding: 0 20px;
  text-align: center;
  font-family: var(--wt-font-ui);
  font-size: 14.5px;
  line-height: 1.6;
  color: var(--wt-ink-quiet);
}

/* ------------------------------------------------------------
   Footer policy links (Terms / Privacy / User Content License /
   Copyright & IP / Community Guidelines). Static on the legal
   pages, injected everywhere else by kc-i18n.js. The footer
   never changes with mode, so one color set serves both themes
   (#c2ccc0 on #1c2620 is ~9.4:1, WCAG AAA).
   ------------------------------------------------------------ */
.kc-footer__policies { margin: 0 0 10px; font-size: 13px; line-height: 2; color: #aab8a9; }
.kc-footer__policies a { color: #c2ccc0; text-decoration: underline; text-underline-offset: 2px; white-space: nowrap; }
.kc-footer__policies a:hover, .kc-footer__policies a:focus-visible { color: #fffdf9; }
