/* ============================================================
   GENZ TECH — "Terminal" brand identity
   Dark monochrome developer-console look, one electric-orange
   signal (#FF4D00), IBM Plex Mono + IBM Plex Sans.
   Tokens & components per the brand handoff README.
   ============================================================ */

:root {
  --void: #0a0b0c;
  --panel: #0e0f11;
  --panel-2: #101216;
  --hairline: #1d1f22;
  --border: #26282b;
  --border-dashed: #3a3d41;
  --signal: #ff4d00;
  --signal-faint: rgba(255, 77, 0, 0.33);
  --bone: #f2f2f0;
  --text-hi: #e7e7e5;
  --body: #c7c8ca;
  --text-mid: #a9abae;
  --mist: #8a8d91;
  --text-low: #7d8084;
  --text-faint: #6b6e72;

  --mono: "IBM Plex Mono", ui-monospace, "Cascadia Code", Consolas, monospace;
  --sans: "IBM Plex Sans", system-ui, -apple-system, "Segoe UI", sans-serif;

  --maxw: 1200px;
  --gutter: 28px;
}

* { box-sizing: border-box; margin: 0; padding: 0; }
html { scroll-behavior: smooth; -webkit-text-size-adjust: 100%; }
::selection { background: var(--signal); color: var(--void); }

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

a { color: inherit; text-decoration: none; }
img { max-width: 100%; display: block; }
.wrap { max-width: var(--maxw); margin: 0 auto; padding: 0 var(--gutter); }

/* 2px Signal bar pinned to the very top of every page */
.signal-bar { position: fixed; top: 0; left: 0; right: 0; height: 2px; background: var(--signal); z-index: 100; }

/* mono helpers */
.mono { font-family: var(--mono); }
.kicker { font-family: var(--mono); font-weight: 600; font-size: 12px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--signal); }
.label { font-family: var(--mono); font-weight: 600; font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-low); }
.meta { font-family: var(--mono); font-weight: 500; font-size: 11px; letter-spacing: 0.07em; text-transform: uppercase; color: var(--text-low); }
.sig { color: var(--signal); }

/* @keyframes */
@keyframes blink { 0%, 55% { opacity: 1; } 56%, 100% { opacity: 0; } }

/* ---------- Logo / wordmark <genz/>tech ---------- */
.logo { font-family: var(--mono); font-weight: 600; font-size: 20px; letter-spacing: -0.02em; color: var(--bone); white-space: nowrap; display: inline-flex; align-items: baseline; }
.logo .slash { color: var(--signal); }
.logo .tech { color: var(--mist); }
.logo .cursor { width: 0.42em; height: 0.95em; background: var(--signal); display: inline-block; margin-left: 4px; transform: translateY(2px); animation: blink 1.1s steps(1) infinite; }

/* ---------- Top nav ---------- */
header.site { position: sticky; top: 0; z-index: 60; background: rgba(10, 11, 12, 0.9); backdrop-filter: blur(10px); border-bottom: 1px solid var(--hairline); }
.nav { display: flex; align-items: center; gap: 18px; height: 64px; }
/* Category strip: flexible + horizontally scrollable so a long list (12+ topics)
   never pushes the search box / menu button off the right edge. Scrollbar hidden;
   the search + menu stay pinned and always fully visible. */
/* overflow:visible so the "More ▾" dropdown can extend below the nav row.
   (overflow-x:auto would compute overflow-y:auto too and clip the dropdown.)
   The priority+ JS keeps the row from overflowing, so no scroll is needed. */
.nav .cats { display: flex; align-items: center; gap: 10px; margin-left: 2px; min-width: 0; flex: 1 1 auto; overflow: visible; }
.nav .cats a { font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-mid); cursor: pointer; transition: color 0.15s; white-space: nowrap; flex-shrink: 0; }
.nav .cats a:hover, .nav .cats a.active { color: var(--bone); }

/* Author profile links (verified external identity — E-E-A-T signal). */
.au-links { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 12px; }
.au-links a { font-family: var(--mono); font-size: 12px; letter-spacing: 0.04em; text-transform: uppercase; color: var(--text-mid); border: 1px solid var(--border); border-radius: 4px; padding: 6px 11px; transition: color 0.15s, border-color 0.15s; }
.au-links a:hover { color: var(--signal); border-color: var(--signal); }

/* Terminal "$ " prefix on section-label headings, kept COSMETIC via CSS ::before
   so the DOM heading text stays semantic/keyword-clean for crawlers (the prompt
   is not part of the heading text Google reads). Matches the orange $ prompt used
   in the nav/search. */
.faq h2::before, .related h2::before, .nl h2::before { content: "$ "; color: var(--signal); }

/* Priority+ overflow: categories that don't fit collapse into this "More ▾"
   dropdown (populated by JS in seo.mjs inlineJs + app.js). Scales to any number
   of topics without shrinking the bar. Hidden until JS finds an overflow. */
.nav .cat-more { position: relative; flex-shrink: 0; display: flex; align-items: center; }
.nav .cat-more[hidden] { display: none; }
.nav .cat-more-btn { display: inline-flex; align-items: center; gap: 4px; padding: 0; background: none; border: 0; cursor: pointer; font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-mid); white-space: nowrap; transition: color 0.15s; }
.nav .cat-more-btn:hover, .nav .cat-more.open .cat-more-btn { color: var(--bone); }
.nav .cat-more-btn .caret { font-size: 9px; }
.nav .cat-more-pop { position: absolute; top: calc(100% + 12px); right: 0; display: none; flex-direction: column; min-width: 168px; background: var(--void); border: 1px solid var(--border); border-radius: 4px; padding: 6px; z-index: 70; box-shadow: 0 12px 34px rgba(0, 0, 0, 0.45); }
.nav .cat-more.open .cat-more-pop { display: flex; }
.nav .cat-more-pop a { font-family: var(--mono); font-size: 11px; letter-spacing: 0.05em; text-transform: uppercase; color: var(--text-mid); padding: 9px 11px; border-radius: 3px; white-space: nowrap; transition: color 0.12s, background 0.12s; }
.nav .cat-more-pop a:hover { color: var(--bone); background: var(--panel-2); }
/* Drawer-only elements: present in #cats for the mobile drawer, hidden on the desktop inline bar. */
.nav .cats .cat-search, .nav .cats .drawer-pages { display: none; }
.nav .spacer { display: none; }
.nav .search { display: flex; align-items: center; gap: 8px; border: 1px solid var(--border); border-radius: 3px; padding: 7px 10px; min-width: 128px; flex-shrink: 0; }
.nav .search .p { font-family: var(--mono); color: var(--signal); font-size: 13px; }
.nav .search input { background: none; border: 0; outline: none; color: var(--bone); font-family: var(--mono); font-size: 13px; width: 100%; }
.nav .search input::placeholder { color: var(--text-faint); }
.nav .menu-wrap { position: relative; flex-shrink: 0; }
.nav .menu-btn { display: flex; align-items: center; gap: 6px; font-family: var(--mono); font-size: 12px; letter-spacing: 0.1em; text-transform: uppercase; color: var(--text-mid); background: none; border: 1px solid var(--border); border-radius: 3px; padding: 7px 12px; cursor: pointer; transition: color 0.15s, border-color 0.15s; }
.nav .menu-btn:hover, .nav .menu-btn[aria-expanded="true"] { color: var(--bone); border-color: var(--text-low); }
.nav .menu-btn .caret { color: var(--signal); transition: transform 0.15s; }
.nav .menu-btn[aria-expanded="true"] .caret { transform: rotate(180deg); }
.menu-pop { position: absolute; top: calc(100% + 8px); right: 0; min-width: 180px; background: var(--void); border: 1px solid var(--border); border-radius: 6px; padding: 6px; display: none; flex-direction: column; z-index: 70; box-shadow: 0 14px 34px rgba(0, 0, 0, 0.55); }
.menu-pop.open { display: flex; }
.menu-pop a { font-family: var(--mono); font-size: 13px; color: var(--text-mid); padding: 9px 12px; border-radius: 4px; text-decoration: none; transition: background 0.12s, color 0.12s; }
.menu-pop a:before { content: "/ "; color: var(--signal); }
.menu-pop a:hover { background: var(--panel-2); color: var(--bone); }
.nav-toggle { display: none; background: none; border: 1px solid var(--border); border-radius: 4px; color: var(--bone); font-size: 1.15rem; line-height: 1; cursor: pointer; font-family: var(--mono); padding: 6px 10px; flex-shrink: 0; }
.nav-toggle:hover { border-color: var(--text-low); }

/* ---------- Section heads ---------- */
.sec { padding: 48px 0; border-bottom: 1px solid var(--hairline); }
.sec-head { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; margin-bottom: 28px; flex-wrap: wrap; }
.sec-head .cmd { font-family: var(--mono); font-weight: 600; font-size: 15px; letter-spacing: -0.01em; color: var(--text-hi); }
.sec-head .cmd b { color: var(--signal); font-weight: 600; }
.viewall { font-family: var(--mono); font-size: 12px; color: var(--signal); cursor: pointer; }
.viewall:hover { opacity: 0.85; }
.related-more { display: inline-block; margin-top: 18px; font-family: var(--mono); font-size: 13px; letter-spacing: 0.04em; color: var(--signal); border: 1px solid var(--border); border-radius: 4px; padding: 8px 14px; text-decoration: none; transition: border-color 0.15s, color 0.15s; }
.related-more:hover { border-color: var(--text-low); color: var(--bone); }

/* ---------- Image frame (real photo, dark frame + corner tick) ---------- */
.frame { position: relative; background: var(--panel-2); border: 1px solid var(--border); border-radius: 5px; overflow: hidden; background-size: cover; background-position: center; }
.frame::before { content: ""; position: absolute; inset: 0; background: repeating-linear-gradient(135deg, rgba(255,255,255,0.04) 0 14px, transparent 14px 30px); pointer-events: none; opacity: 0.5; z-index: 1; }
.frame::after { content: ""; position: absolute; left: 12px; bottom: 12px; width: 44px; height: 44px; border-left: 2px solid var(--signal); border-bottom: 2px solid var(--signal); opacity: 0.85; pointer-events: none; z-index: 1; }
/* Responsive <img> inside a frame (hero/cards): fill it; the scanline + corner-tick overlays stay on top. */
.frame > .fimg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }

/* ---------- Hero ---------- */
.hero { display: grid; grid-template-columns: 1.05fr 0.95fr; gap: 44px; align-items: center; padding: 52px 0; border-bottom: 1px solid var(--hairline); }
.hero .h-text .kicker { display: block; margin-bottom: 18px; }
.hero h1 { font-family: var(--mono); font-weight: 600; font-size: clamp(38px, 5vw, 60px); line-height: 1.04; letter-spacing: -0.03em; color: var(--bone); margin-bottom: 20px; }
.hero .dek { font-size: 18px; line-height: 1.6; color: var(--text-mid); max-width: 46ch; margin-bottom: 26px; }
.hero .h-img { aspect-ratio: 4 / 3; }

/* ---------- Buttons ---------- */
.btn { display: inline-flex; align-items: center; gap: 9px; font-family: var(--mono); font-weight: 600; font-size: 13px; letter-spacing: 0.04em; background: var(--signal); color: var(--void); border: 0; padding: 12px 18px; border-radius: 3px; cursor: pointer; transition: filter 0.15s, box-shadow 0.15s; }
.btn:hover { filter: brightness(0.92); box-shadow: 0 0 0 1px var(--signal-faint); }
.btn.ghost { background: transparent; color: var(--text-mid); border: 1px solid var(--border); }
.btn.ghost:hover { color: var(--bone); border-color: var(--border-dashed); filter: none; }
.read { font-family: var(--mono); font-weight: 600; font-size: 13px; letter-spacing: 0.04em; color: var(--signal); display: inline-flex; align-items: center; gap: 8px; cursor: pointer; transition: gap 0.15s; }
.read:hover { gap: 13px; }
.byline { margin-top: 18px; font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-low); display: flex; gap: 8px; flex-wrap: wrap; }
.byline .author { color: var(--text-mid); }

/* ---------- Top stories cards ---------- */
.cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; }
.card { cursor: pointer; }
.card .c-img { aspect-ratio: 16 / 10; margin-bottom: 16px; transition: transform 0.2s ease; }
.card:hover .c-img { transform: translateY(-3px); }
.card .c-kicker { font-family: var(--mono); font-weight: 600; font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--signal); margin-bottom: 9px; display: block; }
.card h3 { font-family: var(--sans); font-weight: 500; font-size: 19px; line-height: 1.28; letter-spacing: -0.01em; color: var(--text-hi); margin-bottom: 9px; }
.card:hover h3 { color: var(--bone); }
.card .dek { font-size: 14.5px; line-height: 1.55; color: var(--text-mid); }
.card .c-meta { margin-top: 12px; font-family: var(--mono); font-size: 10.5px; letter-spacing: 0.07em; text-transform: uppercase; color: var(--text-low); }

/* ---------- Latest numbered terminal rows ---------- */
.rows { display: flex; flex-direction: column; }
.row { display: grid; grid-template-columns: 34px 88px 1fr auto; gap: 16px; align-items: center; padding: 14px 0; border-bottom: 1px solid var(--hairline); cursor: pointer; }
.row:hover { background: var(--panel); }
.row .idx { font-family: var(--mono); font-weight: 600; font-size: 13px; color: var(--signal); }
.row .r-thumb { width: 88px; aspect-ratio: 16 / 10; border-radius: 4px; overflow: hidden; background: var(--panel-2); border: 1px solid var(--border); }
.row .r-thumb .fimg { width: 100%; height: 100%; object-fit: cover; display: block; transition: transform 0.25s ease; }
.row:hover .r-thumb .fimg { transform: scale(1.05); }
.row .r-main .r-cat { font-family: var(--mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-low); margin-bottom: 6px; }
.row .r-main h3 { font-family: var(--sans); font-weight: 500; font-size: 18px; line-height: 1.3; color: var(--text-hi); }
.row:hover .r-main h3 { color: var(--bone); }
.row .r-time { font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-low); white-space: nowrap; }
.empty { font-family: var(--mono); font-size: 13px; color: var(--text-faint); padding: 28px 0; }

/* ---------- Topics rail ---------- */
.topics { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.topics .t-label { font-family: var(--mono); font-weight: 600; font-size: 13px; color: var(--text-mid); }
.chip { font-family: var(--mono); font-size: 12px; letter-spacing: 0.04em; color: var(--text-mid); border: 1px solid var(--border); border-radius: 3px; padding: 7px 13px; cursor: pointer; background: none; transition: all 0.15s; }
.chip:hover { color: var(--bone); border-color: var(--border-dashed); }
.chip.active { background: var(--signal); color: var(--void); border-color: var(--signal); font-weight: 600; }

/* ---------- Ad slot ---------- */
.ad-wrap { padding: 40px 0; border-bottom: 1px solid var(--hairline); }
.ad-label { font-family: var(--mono); font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-faint); text-align: center; margin-bottom: 8px; }
.ad-slot { min-height: 100px; display: flex; align-items: center; justify-content: center; background: var(--panel); border: 1px solid var(--border); border-radius: 4px; overflow: hidden; }
.ad-slot .ad-ph { font-family: var(--mono); font-size: 11px; color: var(--text-faint); }

/* ---------- Footer ---------- */
footer.site { background: var(--panel); border-top: 1px solid var(--hairline); margin-top: 0; }
.nl { padding: 56px 0; border-bottom: 1px solid var(--hairline); }
.nl h2 { font-family: var(--mono); font-weight: 600; font-size: 30px; letter-spacing: -0.02em; color: var(--bone); margin: 10px 0 12px; }
.nl p { color: var(--text-mid); max-width: 52ch; margin-bottom: 22px; }
.nl form { display: flex; align-items: center; gap: 10px; border: 1px solid var(--border); border-radius: 3px; padding: 6px 6px 6px 14px; max-width: 460px; }
.nl form .p { font-family: var(--mono); color: var(--signal); }
.nl form input { flex: 1; background: none; border: 0; outline: none; color: var(--bone); font-family: var(--mono); font-size: 14px; }
.nl form input::placeholder { color: var(--text-faint); }
.nl .fine { margin-top: 12px; font-family: var(--mono); font-size: 11px; color: var(--text-faint); }
.pref-src { display: inline-flex; align-items: center; gap: 8px; margin-top: 18px; padding: 9px 14px; border: 1px solid var(--hairline); border-radius: 8px; font-family: var(--mono); font-size: 12px; color: var(--text-mid); text-decoration: none; transition: border-color .2s, color .2s, background-color .2s; }
.pref-src:hover { border-color: var(--signal); color: var(--bone); background: rgba(255, 77, 0, 0.08); }
.pref-src strong { color: var(--bone); font-weight: 600; }
.pref-src .ps-star { color: var(--signal); font-size: 13px; line-height: 1; }
.a-cta { margin: 44px 0 8px; padding: 26px 24px; border: 1px solid var(--hairline); border-radius: 14px; background: var(--panel); }
.a-cta .a-cta-k { font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--signal); }
.a-cta h3 { font-family: var(--sans); font-weight: 600; font-size: 22px; line-height: 1.2; color: var(--bone); margin: 10px 0 6px; }
.a-cta p { color: var(--text-mid); font-size: 15px; line-height: 1.55; margin: 0 0 16px; max-width: 52ch; }
.a-cta .nl-form { display: flex; align-items: center; gap: 10px; max-width: 460px; padding: 6px 6px 6px 14px; border: 1px solid var(--border); border-radius: 10px; background: var(--void); }
.a-cta .nl-form .p { font-family: var(--mono); color: var(--signal); }
.a-cta .nl-form input { flex: 1; min-width: 0; background: none; border: 0; outline: none; color: var(--bone); font-family: var(--mono); font-size: 14px; }
.a-cta .nl-form input::placeholder { color: var(--text-faint); }
.a-cta .nl-form .btn { white-space: nowrap; }
.a-cta .fine { margin-top: 10px; font-family: var(--mono); font-size: 11px; color: var(--text-faint); }
@media (max-width: 480px) { .a-cta .nl-form { flex-wrap: wrap; } .a-cta .nl-form input { width: 100%; flex-basis: 100%; } }
.foot-cols { display: grid; grid-template-columns: 2fr 1fr 1fr 1fr 1fr; gap: 28px; padding: 44px 0; border-bottom: 1px solid var(--hairline); }
.foot-cols .col h4 { font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--text-low); margin-bottom: 16px; }
.foot-cols .col a { display: block; font-size: 14px; color: var(--text-mid); margin-bottom: 10px; }
.foot-cols .col a:hover { color: var(--bone); }
.foot-cols .brand .logo { font-size: 22px; margin-bottom: 14px; }
.foot-cols .brand p { font-size: 13px; color: var(--text-faint); max-width: 32ch; margin-bottom: 14px; }
.foot-bottom { display: flex; justify-content: space-between; gap: 16px; flex-wrap: wrap; padding: 22px 0; font-family: var(--mono); font-size: 11px; color: var(--text-faint); }

/* ---------- Article ---------- */
.progress { position: fixed; top: 2px; left: 0; height: 2px; width: 0; background: var(--signal); z-index: 99; }
.article { max-width: 720px; margin: 0 auto; padding: 44px 0 56px; }
.article .back { font-family: var(--mono); font-size: 12px; letter-spacing: 0.04em; color: var(--text-mid); display: inline-block; margin-bottom: 28px; }
.article .back:hover { color: var(--signal); }
.article .a-kicker { display: block; margin-bottom: 14px; }
.article h1 { font-family: var(--mono); font-weight: 600; font-size: clamp(34px, 4.6vw, 52px); line-height: 1.08; letter-spacing: -0.03em; color: var(--bone); margin-bottom: 18px; }
.article .a-dek { font-size: 19px; line-height: 1.6; color: var(--text-mid); margin-bottom: 26px; }
/* Answer-first "gist" box — the direct summary AI answer engines + snippets lift. */
.article .a-gist { position: relative; margin: 4px 0 30px; padding: 18px 22px 18px 24px; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--signal); border-radius: 4px; }
.article .a-gist .gist-k { display: block; font-family: var(--mono); font-weight: 600; font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--signal); margin-bottom: 8px; }
.article .a-gist p { font-size: 19px; line-height: 1.6; color: var(--text-hi); margin: 0; }
.article .a-byline { display: flex; align-items: center; gap: 14px; padding-bottom: 26px; border-bottom: 1px solid var(--hairline); margin-bottom: 32px; }
.article .a-byline .avatar { width: 44px; height: 44px; border-radius: 4px; background: var(--panel-2); border: 1px solid var(--border); display: flex; align-items: center; justify-content: center; font-family: var(--mono); font-weight: 600; font-size: 15px; color: var(--signal); overflow: hidden; }
.avatar img { width: 100%; height: 100%; object-fit: cover; border-radius: inherit; display: block; }
.share { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; margin: 44px 0 8px; }
.share .share-label { font-family: var(--mono); font-weight: 600; font-size: 13px; letter-spacing: 0.04em; color: var(--bone); margin-right: 4px; }
.share .sbtn { font-family: var(--mono); font-weight: 500; font-size: 13px; color: var(--text-mid); background: none; border: 1px solid var(--border); border-radius: 4px; padding: 9px 14px; cursor: pointer; text-decoration: none; transition: color 0.12s, border-color 0.12s; }
.share .sbtn:hover { color: var(--bone); border-color: var(--text-low); }
.share .sbtn-copy { color: var(--signal); border-color: rgba(255, 77, 0, 0.45); }
.share .sbtn-copy:hover { color: var(--signal); border-color: var(--signal); }
.share .share-msg { font-family: var(--sans); font-size: 13px; color: var(--signal); margin-left: 4px; }
.article .a-byline .who { font-family: var(--mono); font-size: 12px; }
.article .a-byline .who .name { color: var(--text-hi); }
.article .a-byline .who .role { color: var(--text-low); letter-spacing: 0.05em; text-transform: uppercase; font-size: 11px; margin-top: 3px; }
.article .a-hero { aspect-ratio: 16 / 9; margin-bottom: 10px; }
.article .a-cap { font-family: var(--mono); font-size: 11px; color: var(--text-faint); margin-bottom: 34px; }
.article-body { font-size: 18px; line-height: 1.78; color: var(--body); }
.article-body p { margin-bottom: 24px; }
.article-body h2 { font-family: var(--mono); font-weight: 600; font-size: 15px; letter-spacing: 0.04em; text-transform: lowercase; color: var(--signal); margin: 40px 0 16px; }
.article-body h2::before { content: "// "; color: var(--text-low); }
.article-body ul { list-style: none; margin: 0 0 24px; padding: 0; }
.article-body li { position: relative; padding-left: 22px; margin-bottom: 12px; }
.article-body li::before { content: ""; position: absolute; left: 0; top: 11px; width: 7px; height: 7px; background: var(--signal); }
.article-body blockquote { font-family: var(--mono); font-weight: 500; font-size: 25px; line-height: 1.4; letter-spacing: -0.02em; color: var(--bone); border-left: 3px solid var(--signal); padding-left: 22px; margin: 32px 0; }
.article-body strong { color: var(--text-hi); font-weight: 600; }
.article-body a { color: var(--signal); }
/* Contextual in-body "Related" link (internal linking for SEO + readers). */
.article-body .inline-rel { display: flex; align-items: baseline; gap: 10px; margin: 6px 0 24px; padding: 12px 16px; background: var(--panel-2); border-left: 2px solid var(--border-dashed); border-radius: 3px; font-size: 16px; }
.article-body .inline-rel .ir-k { font-family: var(--mono); font-weight: 600; font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase; color: var(--text-low); flex: none; }
.article-body .inline-rel a { color: var(--text-hi); }
.article-body .inline-rel a:hover { color: var(--signal); }
.article-body a:hover { text-decoration: underline; }
.article-body .src { font-family: var(--mono); font-size: 13px; color: var(--text-faint); margin-top: 32px; }
.tags { display: flex; gap: 10px; flex-wrap: wrap; margin: 36px 0; }
.tagline-foot { margin-top: 44px; padding-top: 24px; border-top: 1px solid var(--hairline); font-family: var(--mono); font-size: 12px; color: var(--text-faint); }

/* ---------- Category page ---------- */
.cat-masthead { padding: 48px 0; border-bottom: 1px solid var(--hairline); }
.cat-masthead .crumb { font: 600 12px/1 var(--mono); letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-low); margin-bottom: 16px; }
.cat-title { font: 600 clamp(46px, 7vw, 84px)/0.96 var(--mono); letter-spacing: -0.04em; color: var(--bone); }
.cat-title .dot-sig { color: var(--signal); }
.cat-desc { font: 400 17px/1.6 var(--sans); color: var(--text-mid); max-width: 54ch; margin-top: 16px; }
.cat-count { font: 500 12px/1 var(--mono); letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-low); margin-top: 16px; }
.cat-count .live { color: var(--text-mid); }
.cat-count .live .dot { display: inline-block; width: 7px; height: 7px; border-radius: 50%; background: var(--signal); box-shadow: 0 0 8px rgba(255,77,0,.9); margin-right: 4px; }
.cat-grid { display: grid; grid-template-columns: 1fr 300px; gap: 48px; padding: 44px 0; }
.cat-main .cards { grid-template-columns: 1fr 1fr; }
.cat-side { position: sticky; top: 88px; align-self: start; }
.cat-side h4 { font: 600 13px/1 var(--mono); color: var(--text-hi); margin-bottom: 8px; }
.cat-side h4 b { color: var(--signal); font-weight: 600; }
.side-row { display: grid; grid-template-columns: 28px 1fr; gap: 8px; padding: 14px 0; border-bottom: 1px solid var(--hairline); }
.side-row .idx { font: 600 13px/1.4 var(--mono); color: var(--signal); }
.side-row a { font: 500 14px/1.35 var(--sans); color: var(--text-hi); }
.side-row a:hover { color: var(--bone); }
.side-cta { margin-top: 24px; background: var(--panel-2); border: 1px solid var(--border); border-radius: 5px; padding: 20px; }

/* ---------- Responsive ---------- */
@media (max-width: 900px) {
  .hero { grid-template-columns: 1fr; gap: 28px; }
  .cards { grid-template-columns: 1fr 1fr; }
  .foot-cols { grid-template-columns: 1fr 1fr; }
  .cat-grid { grid-template-columns: 1fr; gap: 32px; }
  .cat-side { position: static; }
}
/* The 9-item inline category bar + search need ~1201px, so collapse them into
   the hamburger menu below ~1240px (not just on phones) to stop the overflow. */
@media (max-width: 1240px) {
  /* Collapse the whole nav into one ☰ button that opens a drawer with search + topics + pages. */
  .nav .cats, .nav .search, .nav .util, .nav .menu-wrap { display: none; }
  .nav-toggle { display: block; }
  .nav .cats.open { display: flex; flex-direction: column; align-items: stretch; position: absolute; top: 64px; left: 0; right: 0; background: var(--void); border-bottom: 1px solid var(--hairline); padding: 16px var(--gutter) 22px; gap: 2px; z-index: 60; max-height: calc(100vh - 64px); overflow: hidden auto; }
  .nav .cats.open a { font-size: 15px; padding: 11px 2px; letter-spacing: 0.08em; }
  /* The desktop "More" overflow is meaningless in the drawer (every topic already lists). */
  .nav .cat-more { display: none; }
  /* search field at top of the drawer */
  .nav .cats.open .cat-search { display: flex; align-items: center; gap: 8px; border: 1px solid var(--border); border-radius: 4px; padding: 11px 12px; margin-bottom: 10px; }
  .nav .cats.open .cat-search .p { color: var(--signal); font-family: var(--mono); font-size: 14px; }
  .nav .cats.open .cat-search input { background: none; border: 0; outline: none; color: var(--bone); font-family: var(--mono); font-size: 15px; width: 100%; }
  .nav .cats.open .cat-search input::placeholder { color: var(--text-faint); }
  /* page links section below the topics */
  .nav .cats.open .drawer-pages { display: flex; flex-direction: column; gap: 0; margin-top: 12px; padding-top: 8px; border-top: 1px solid var(--hairline); }
  .nav .cats.open .drawer-pages .drawer-lbl { font-family: var(--mono); font-size: 11px; color: var(--text-faint); letter-spacing: 0.12em; padding: 6px 2px 6px; }
  .nav .cats.open .drawer-pages a { color: var(--text-mid); font-size: 14px; padding: 10px 2px; text-transform: none; letter-spacing: 0; }
}
@media (max-width: 720px) {
  .cards { grid-template-columns: 1fr; }
  .row { grid-template-columns: 28px 1fr; }
  .row .r-thumb { display: none; }
  .row .r-time { display: none; }
  .foot-cols { grid-template-columns: 1fr; }
}

/* CLS: reserve space for JS-rendered regions so the homepage/SPA doesn't shift
   while app.js fills them (measured at Lighthouse desktop 1350px + mobile 390px). */
#nav-root { min-height: 64px; }
#hero { min-height: 650px; }
/* #topstories now holds 8 cards. Reservations follow the .cards GRID breakpoints
   (3-col >900, 2-col ≤900, 1-col ≤720) and are sized to each band's TALLEST case
   so a JS-fill never pushes visible content down (CLS=0). On mobile (≤720) the
   section sits below the fold, so it fills off-screen — reserving there would only
   add permanent whitespace, so it's dropped. Re-measure if the card layout changes. */
#topstories { min-height: 1590px; } /* 3-col × 3 rows (content caps at 1200px) */
.ad-slot { min-height: 90px; }
@media (max-width: 980px) { #hero { min-height: 700px; } }
@media (max-width: 900px) { #topstories { min-height: 2690px; } } /* 2-col × 5 rows */
@media (max-width: 760px) { #hero { min-height: 820px; } }
@media (max-width: 720px) { #topstories { min-height: 0; } }      /* 1-col, below fold: fill off-screen, no reserve */
@media (max-width: 560px) { #hero { min-height: 920px; } }

/* Self-hosted IBM Plex (latin, woff2) — no third-party render-blocking. */
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/plex-mono-400.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:500;font-display:swap;src:url('/fonts/plex-mono-500.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'IBM Plex Mono';font-style:normal;font-weight:600;font-display:swap;src:url('/fonts/plex-mono-600.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:400;font-display:swap;src:url('/fonts/plex-sans-400.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:500;font-display:swap;src:url('/fonts/plex-sans-500.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:600;font-display:swap;src:url('/fonts/plex-sans-600.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'IBM Plex Sans';font-style:normal;font-weight:700;font-display:swap;src:url('/fonts/plex-sans-700.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}


/* ─── Deep-dive components ─────────────────────────────────────────────────
   Reusable analysis building blocks: inline-SVG figures, comparison matrix,
   timeline, prediction callout, primary-sources block. Terminal brand — mono
   labels, Signal-orange accent, panel fills, hairline rules. Safe inside an
   article's `content` HTML (renders identically in the SPA and prerendered /p/). */
.article-body .tp-k { font-family: var(--mono); font-weight: 600; font-size: 10px; letter-spacing: 0.16em; text-transform: uppercase; color: var(--signal); }

/* Figure wrapper for inline SVG diagrams / charts */
.article-body .tp-figure { margin: 34px 0; border: 1px solid var(--border); border-radius: 6px; background: var(--panel); overflow: hidden; }
.article-body .tp-figure__frame { padding: 22px 22px 6px; }
.article-body .tp-figure svg { display: block; width: 100%; height: auto; }
.article-body .tp-figure figcaption { font-family: var(--sans); font-size: 13.5px; line-height: 1.55; color: var(--text-mid); margin: 6px 0 0; padding: 13px 22px 16px; border-top: 1px solid var(--hairline); }
.article-body .tp-figure figcaption b { color: var(--text-hi); font-weight: 600; }
.article-body figcaption .tp-k { margin-right: 9px; }

/* Terminal code blocks (tutorials: install/setup commands). <pre><code> = block,
   bare <code> in prose = inline chip. .p = non-selectable $ prompt, .c = comment. */
.article-body pre { margin: 26px 0; padding: 16px 18px; background: var(--void); border: 1px solid var(--border); border-radius: 6px; overflow-x: auto; -webkit-overflow-scrolling: touch; }
.article-body pre code { display: block; font-family: var(--mono); font-size: 13px; line-height: 1.75; color: var(--text-hi); white-space: pre; }
.article-body pre .p { color: var(--signal); user-select: none; }
.article-body pre .c { color: var(--text-faint); }
/* One-click copy button on every code block (added by inlineJs / app.js). The
   button lives on a relative wrapper, NOT the pre itself, so it stays pinned
   top-right while the code scrolls horizontally inside the pre. */
.article-body .code-block { position: relative; margin: 26px 0; }
.article-body .code-block > pre { margin: 0; }
.code-copy { position: absolute; top: 8px; right: 8px; z-index: 2; font-family: var(--mono); font-size: 11px; letter-spacing: 0.04em; color: var(--text-low); background: var(--panel-2); border: 1px solid var(--border); border-radius: 5px; padding: 4px 9px; cursor: pointer; opacity: 0.6; transition: opacity 0.15s ease, color 0.15s ease, border-color 0.15s ease; }
.code-block:hover .code-copy, .code-copy:focus-visible { opacity: 1; }
.code-copy:hover { color: var(--signal); border-color: var(--signal); }
.code-copy.copied { color: var(--signal); border-color: var(--signal); opacity: 1; }
@media (hover: none) { .code-copy { opacity: 0.85; } }
.article-body p code, .article-body li code, .article-body h2 code, .article-body h3 code { font-family: var(--mono); font-size: 0.88em; color: var(--text-hi); background: var(--panel-2); border: 1px solid var(--hairline); border-radius: 4px; padding: 1.5px 6px; overflow-wrap: anywhere; }

/* Comparison matrix (horizontally scrollable on small screens) */
.article-body .tp-scroll { margin: 30px 0; overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid var(--border); border-radius: 6px; }
.article-body .tp-compare { width: 100%; min-width: 660px; border-collapse: collapse; font-family: var(--sans); font-size: 14.5px; }
.article-body .tp-compare th, .article-body .tp-compare td { text-align: left; vertical-align: top; padding: 12px 16px; border-bottom: 1px solid var(--hairline); }
.article-body .tp-compare thead th { font-family: var(--mono); font-weight: 600; font-size: 10.5px; letter-spacing: 0.09em; text-transform: uppercase; color: var(--text-low); background: var(--panel-2); border-bottom: 1px solid var(--border); }
.article-body .tp-compare thead th.col-lb { color: var(--signal); }
.article-body .tp-compare tbody th { font-family: var(--mono); font-weight: 600; font-size: 12px; letter-spacing: 0.02em; color: var(--text-hi); white-space: nowrap; }
.article-body .tp-compare td { color: var(--text-mid); }
.article-body .tp-compare .col-lb { background: rgba(255, 77, 0, 0.06); color: var(--text-hi); }
.article-body .tp-compare tbody tr:last-child th, .article-body .tp-compare tbody tr:last-child td { border-bottom: 0; }

/* Timeline (semantic ordered list; dashed rail for future milestones) */
.article-body .tp-timeline { list-style: none; margin: 30px 0; padding: 4px 0 0; }
.article-body .tp-timeline li { position: relative; margin: 0; padding: 0 0 22px 30px; border-left: 1px solid var(--border); }
.article-body .tp-timeline li::before { content: ""; position: absolute; left: -5px; top: 4px; width: 9px; height: 9px; border-radius: 50%; background: var(--void); border: 2px solid var(--text-low); }
.article-body .tp-timeline li.is-future { border-left-style: dashed; }
.article-body .tp-timeline li.is-future::before { border-color: var(--signal); }
.article-body .tp-timeline li:last-child { padding-bottom: 2px; }
.article-body .tp-timeline .tl-date { display: block; font-family: var(--mono); font-weight: 600; font-size: 11px; letter-spacing: 0.06em; color: var(--signal); margin-bottom: 3px; }
.article-body .tp-timeline .tl-event { color: var(--text-hi); font-weight: 600; }
.article-body .tp-timeline .tl-note { color: var(--text-mid); }

/* Prediction / what-to-watch callout */
.article-body .tp-verdict { margin: 32px 0; padding: 20px 22px; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--signal); border-radius: 4px; }
.article-body .tp-verdict > .tp-k { display: block; margin-bottom: 13px; }
.article-body .tp-verdict ul { margin: 0; }
.article-body .tp-verdict li { margin-bottom: 11px; color: var(--text-mid); }
.article-body .tp-verdict li:last-child { margin-bottom: 0; }
.article-body .tp-verdict li b { color: var(--text-hi); font-weight: 600; }

/* Primary-sources block */
.article-body .tp-sources { margin: 34px 0 8px; padding: 20px 22px; background: var(--panel); border: 1px solid var(--border); border-radius: 6px; }
.article-body .tp-sources > .tp-k { display: block; margin-bottom: 14px; }
.article-body .tp-sources ul { margin: 0; }
.article-body .tp-sources li { display: flex; gap: 12px; align-items: baseline; margin: 0; padding: 11px 0; border-top: 1px solid var(--hairline); }
.article-body .tp-sources li::before { display: none; }
.article-body .tp-sources li:first-child { padding-top: 0; border-top: 0; }
.article-body .tp-sources .src-t { flex: none; width: 76px; font-family: var(--mono); font-size: 10px; letter-spacing: 0.07em; text-transform: uppercase; color: var(--text-low); padding-top: 3px; }
.article-body .tp-sources a { color: var(--text-hi); font-weight: 600; }
.article-body .tp-sources a:hover { color: var(--signal); }
.article-body .tp-sources .src-d { color: var(--text-faint); font-weight: 400; }

/* ---- AI Coding Leaderboard ------------------------------------------------- */
.lb-masthead .cat-desc b { color: var(--text-hi); font-weight: 600; }
/* the leaderboard article runs FULL wrap width (1144px) so the standings table
   fits without horizontal scroll on desktop; text blocks stay readable via ch caps */
.article.lb-article { max-width: none; border: 0; }
.lb-article .a-gist p { max-width: 78ch; }
.lb-article .a-gist .gist-k { color: var(--signal); }
.lb-article .faq, .lb-article .share { max-width: 900px; }
/* standings table — extends .tp-compare, scoped to win the cascade */
.article-body .lb-table { min-width: 840px; width: 100%; }
.article-body .lb-table thead th { white-space: nowrap; }
.article-body .lb-table .lb-rankcell { width: 46px; text-align: center; vertical-align: middle; }
.article-body .lb-table .lb-rank { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; font-family: var(--mono); font-weight: 600; font-size: 13px; color: var(--void); background: var(--signal); border-radius: 5px; }
.article-body .lb-table .lb-tr:not(.is-leader) .lb-rank { color: var(--text-hi); background: var(--border); }
.article-body .lb-table .lb-verifying { display: inline-block; font-family: var(--mono); font-size: 8.5px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--text-low); border: 1px solid var(--border-dashed); border-radius: 999px; padding: 3px 6px; white-space: nowrap; }
.article-body .lb-table .lb-model { min-width: 196px; padding-top: 14px; }
.article-body .lb-table .lb-name { color: var(--bone); font-family: var(--sans); font-weight: 600; font-size: 15.5px; }
.article-body .lb-table .lb-maker { display: block; margin-top: 3px; font-family: var(--mono); font-weight: 500; font-size: 11px; letter-spacing: 0.02em; color: var(--text-low); white-space: nowrap; }
.article-body .lb-table .lb-open { display: inline-block; margin-left: 6px; font-family: var(--mono); font-size: 9px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--signal); border: 1px solid var(--signal-faint); border-radius: 3px; padding: 1px 5px; vertical-align: middle; }
.article-body .lb-table .lb-src { margin-left: 5px; color: var(--text-low); text-decoration: none; font-size: 12px; }
.article-body .lb-table .lb-src:hover { color: var(--signal); }
.article-body .lb-table .lb-score { font-family: var(--mono); font-weight: 600; font-size: 15px; color: var(--text-hi); white-space: nowrap; }
.article-body .lb-table td.lb-score.col-lb { color: var(--signal); }
.article-body .lb-table .lb-dash { color: var(--text-faint); font-weight: 400; }
.article-body .lb-table .lb-price { font-family: var(--mono); font-weight: 600; font-size: 14px; color: var(--text-hi); white-space: nowrap; }
.article-body .lb-table .lb-u { color: var(--text-low); font-weight: 400; font-size: 11px; }
.article-body .lb-table .lb-for { min-width: 250px; color: var(--text-mid); font-size: 14px; line-height: 1.5; }
.article-body .lb-table .lb-rownote { display: block; margin-top: 7px; font-family: var(--mono); font-size: 11px; line-height: 1.5; color: var(--text-faint); }
.article-body .lb-table .lb-tr.is-leader th, .article-body .lb-table .lb-tr.is-leader td { background: rgba(255, 77, 0, 0.06); }
.article-body .lb-table .lb-tr.is-pending .lb-name { color: var(--text-mid); }
.article-body .lb-note { font-family: var(--mono); font-size: 12.5px; line-height: 1.6; color: var(--text-faint); margin: 16px 2px 6px; padding: 0; max-width: 92ch; }
.article-body .lb-note::before { content: "// "; color: var(--text-low); }
/* picks grid */
.article-body .lb-picks { display: grid; grid-template-columns: repeat(auto-fit, minmax(238px, 1fr)); gap: 14px; margin: 6px 0; }
.article-body .lb-pick { padding: 18px 18px 16px; background: var(--panel); border: 1px solid var(--border); border-top: 2px solid var(--signal); border-radius: 6px; }
.article-body .lb-pick .tp-k { display: block; margin-bottom: 10px; }
.article-body .lb-pick .lb-pick-m { display: block; font-family: var(--sans); font-weight: 600; font-size: 17px; color: var(--bone); margin-bottom: 6px; }
.article-body .lb-pick p { margin: 0; padding: 0; font-size: 13.5px; line-height: 1.55; color: var(--text-mid); }
.article-body .lb-pick p::before { content: none; }

/* ---- homepage leaderboard ticker (stock-ticker strip under the nav) -------- */
.lb-ticker { display: flex; align-items: stretch; height: 40px; background: var(--panel); border-top: 1px solid var(--hairline); border-bottom: 1px solid var(--border); text-decoration: none; overflow: hidden; position: relative; z-index: 1; }
.lb-ticker__tag { flex: none; display: inline-flex; align-items: center; gap: 8px; padding: 0 16px; background: var(--void); border-right: 1px solid var(--border); font: 600 11px/1 var(--mono); letter-spacing: 0.12em; text-transform: uppercase; color: var(--signal); white-space: nowrap; }
.lb-ticker__tag .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--signal); box-shadow: 0 0 8px rgba(255, 77, 0, 0.9); animation: tick-pulse 1.6s ease-in-out infinite; }
.lb-ticker__mask { flex: 1 1 auto; min-width: 0; overflow: hidden; display: flex; align-items: center; }
.lb-ticker__track { display: inline-flex; align-items: center; flex: none; width: max-content; white-space: nowrap; will-change: transform; animation: ticker-scroll 46s linear infinite; }
.lb-ticker:hover .lb-ticker__track { animation-play-state: paused; }
.lb-tick { display: inline-flex; align-items: baseline; gap: 9px; padding: 0 20px; border-right: 1px solid var(--hairline); }
.lb-tick__r { font: 600 11px/1 var(--mono); color: var(--signal); letter-spacing: 0.04em; }
.lb-tick__n { font: 600 13px/1 var(--sans); color: var(--bone); letter-spacing: -0.01em; }
.lb-tick__o { font: 600 8.5px/1 var(--mono); letter-spacing: 0.06em; color: var(--signal); border: 1px solid var(--signal-faint); border-radius: 3px; padding: 2px 4px; align-self: center; }
.lb-tick__v { display: inline-flex; align-items: center; gap: 3px; font: 600 13px/1 var(--mono); color: var(--text-hi); }
.lb-tick__v i { font-style: normal; font-size: 8px; color: var(--signal); }
.lb-tick__d { font: 500 11px/1 var(--mono); color: var(--text-low); }
.lb-ticker__cta { flex: none; display: inline-flex; align-items: center; padding: 0 16px; background: var(--void); border-left: 1px solid var(--border); font: 600 11px/1 var(--mono); letter-spacing: 0.06em; color: var(--text-mid); white-space: nowrap; transition: color var(--dur, 150ms) ease; }
.lb-ticker:hover .lb-ticker__cta { color: var(--signal); }
@keyframes ticker-scroll { from { transform: translateX(0); } to { transform: translateX(-50%); } }
@keyframes tick-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.3; } }
@media (max-width: 560px) { .lb-ticker__cta { display: none; } .lb-ticker__tag { padding: 0 12px; } }
@media (prefers-reduced-motion: reduce) { .lb-ticker__track { animation: none; } .lb-ticker__tag .dot { animation: none; } }

/* ---- pillar hubs (category pages) ------------------------------------------ */
.pillar-intro { font: 400 18px/1.7 var(--sans); color: var(--body); max-width: 66ch; margin: 16px 0 0; }
.cat-masthead .pillar-intro + .cat-count { margin-top: 16px; }
.pillar-cta { display: block; margin: 22px 0 0; padding: 16px 20px; background: var(--panel); border: 1px solid var(--border); border-left: 3px solid var(--signal); border-radius: 6px; text-decoration: none; max-width: 640px; transition: border-color 0.15s; }
.pillar-cta:hover { border-color: var(--text-low); }
.pillar-cta .tp-k { display: block; font: 600 10px/1 var(--mono); letter-spacing: 0.16em; text-transform: uppercase; color: var(--signal); margin-bottom: 8px; }
.pillar-cta__t { display: block; font: 600 17px/1.2 var(--sans); color: var(--bone); margin-bottom: 5px; }
.pillar-cta__d { display: block; font: 400 14px/1.55 var(--sans); color: var(--text-mid); }
.pillar-more { margin: 44px 0 8px; padding-top: 24px; border-top: 1px solid var(--hairline); }
.pillar-more .tp-k { display: block; font: 600 10px/1 var(--mono); letter-spacing: 0.16em; text-transform: uppercase; color: var(--text-low); margin-bottom: 14px; }
.pillar-more__links { display: flex; flex-wrap: wrap; gap: 10px; }
.pillar-more__links a { font: 500 13px/1 var(--mono); color: var(--text-mid); text-decoration: none; padding: 8px 13px; border: 1px solid var(--border); border-radius: 4px; transition: color 0.15s, border-color 0.15s; }
.pillar-more__links a:hover { color: var(--signal); border-color: var(--text-low); }

/* ---- article -> leaderboard callout + comparison tables -------------------- */
.lb-callout { margin: 26px 0; padding: 16px 20px; background: var(--panel-2); border: 1px solid var(--border); border-left: 3px solid var(--signal); border-radius: 4px; max-width: 720px; }
.lb-callout .tp-k { display: block; font: 600 10px/1 var(--mono); letter-spacing: 0.16em; text-transform: uppercase; color: var(--signal); margin-bottom: 9px; }
.lb-callout p { margin: 0; font: 400 15px/1.6 var(--sans); color: var(--text-mid); }
.lb-callout a { color: var(--signal); font-weight: 600; }
.lb-callout a:hover { text-decoration: underline; }
.article-body .cmp-table { min-width: 480px; }

/* ---- cite & embed block (leaderboard) ------------------------------------- */
.article-body .cite-box { margin: 10px 0 4px; display: grid; gap: 10px; }
.article-body .cite-row { display: flex; align-items: stretch; gap: 10px; flex-wrap: wrap; }
.article-body .cite-row .tp-k { flex: none; align-self: center; width: 52px; }
.article-body .cite-row code { flex: 1 1 320px; min-width: 0; overflow-x: auto; white-space: nowrap; font-family: var(--mono); font-size: 12.5px; color: var(--text-hi); background: var(--void); border: 1px solid var(--border); border-radius: 5px; padding: 11px 13px; }
.article-body .cite-btn { flex: none; font-family: var(--mono); font-size: 11px; font-weight: 600; letter-spacing: 0.06em; text-transform: uppercase; color: var(--text-mid); background: var(--panel-2); border: 1px solid var(--border); border-radius: 5px; padding: 8px 14px; cursor: pointer; transition: color 0.15s, border-color 0.15s; }
.article-body .cite-btn:hover { color: var(--signal); border-color: var(--text-low); }
