/* Auto-extracted from app/templates/report_detail_v2.html on 2026-05-14.
   Was inline as 1 <style> block(s) totaling 452 lines. Loading as a
   static asset enables browser caching. asset_url() does mtime-based
   cache busting so edits here are picked up automatically. */

    /* Local styles — keep V2 self-contained so it doesn't fight the legacy
       report stylesheet. Visual language borrowed from compare/material. */
    .report-v2-layout {
      display:grid;
      grid-template-columns: 220px minmax(0, 1fr);
      gap: 22px;
      align-items: start;
      margin-top: 18px;
    }
    @media (max-width: 980px) {
      .report-v2-layout { grid-template-columns: 1fr; }
      .report-v2-rail { position:static !important; }
    }
    /* Mobile (≤700px): hide the side rail entirely (View Mode toggle
       + 12-item TOC). The TOC + view-mode aren't useful on phone where
       users scroll naturally; with the rail visible it took ~50% of
       the visible area at the top of the page. Cap the hero header
       chip cluster to the first 4 (type badge + 3 categories) — hides
       the Evidence / Confidence / Novelty / Urgency pills that bloat
       the header on phone. Same trim pattern as the report card list. */
    @media (max-width: 700px) {
      .report-v2-rail { display: none !important; }
      .report-v2-layout { margin-top: 8px; }
      .report-v2-hero-badges .report-v2-chip:nth-of-type(n+5),
      .report-surface-badges .report-v2-chip:nth-of-type(n+5) {
        display: none !important;
      }
    }
    .report-v2-rail {
      position: sticky; top: 18px;
      padding: 14px 14px;
      background: var(--surface-white);
      border: 1px solid rgba(28, 51, 67, 0.08);
      border-radius: 12px;
      display: flex; flex-direction: column; gap: 4px;
      font-size: 13px; color: var(--ink-navy);
    }
    .report-v2-rail-title,
    .report-surface-rail-title {
      font-size: 11px; font-weight: 900; letter-spacing: 0.12em;
      text-transform: uppercase; color: var(--ink-navy); margin: 0 0 6px 0;
    }
    .report-v2-rail a {
      display: block; padding: 4px 6px; border-radius: 6px;
      color: var(--ink-navy); text-decoration: none; font-size: 12.5px;
    }
    .report-v2-rail a:hover { background: var(--surface-pale-cool); color: var(--ink-navy); }
    .report-v2-rail-separator {
      border: 0; border-top: 1px dashed rgba(28, 51, 67, 0.18); margin: 8px 0;
    }
    .report-v2-view-toggle-label {
      font-size: 10.5px; font-weight: 900; letter-spacing: 0.12em;
      text-transform: uppercase; color: var(--ink-muted); margin: 0 0 6px 0;
    }
    .report-v2-view-toggle {
      display: inline-flex; gap: 0; margin-bottom: 12px;
      border: 1px solid var(--border-cool); border-radius: 999px; overflow: hidden;
    }
    .report-v2-view-toggle-btn {
      padding: 4px 10px; background: var(--surface-white); color: var(--ink-slate);
      border: 0; font-size: 10.5px; font-weight: 800;
      letter-spacing: 0.04em; text-transform: uppercase; cursor: pointer;
    }
    .report-v2-view-toggle-btn[aria-pressed="true"] {
      background: var(--ink-navy); color: var(--surface-cream);
    }
    .report-v2-shell,
    .report-surface-shell { display: flex; flex-direction: column; gap: 14px; }
    /* 2026-05-23 — Degraded-banner layout. The inline-styles version
       let the button overflow past the viewport at narrow widths.
       This explicit class wraps cleanly: text fills the row at >=700px
       wide, button drops to a new full-width row below that. */
    .report-v2-degraded-banner-body {
      display: flex;
      flex-wrap: wrap;
      gap: 14px;
      align-items: center;
      padding: 14px 18px;
      box-sizing: border-box;
      width: 100%;
      max-width: 100%;
    }
    .report-v2-degraded-banner-text {
      flex: 1 1 320px;
      min-width: 0;
    }
    .report-v2-degraded-banner-title {
      margin: 0 0 4px;
      font-weight: 700;
      color: var(--ink-navy, var(--ink-navy));
    }
    .report-v2-degraded-banner-detail {
      margin: 0;
      color: var(--ink-slate, var(--ink-slate));
      font-size: 13px;
      line-height: 1.45;
    }
    .report-v2-degraded-banner-cta {
      flex: 0 0 auto;
      white-space: nowrap;
    }
    @media (max-width: 700px) {
      /* Stack vertically: button gets its own row below the text. */
      .report-v2-degraded-banner-cta {
        flex: 1 1 100%;
      }
    }
    .report-v2-card {
      background: var(--surface-white);
      border: 1px solid rgba(28, 51, 67, 0.1);
      border-radius: 14px;
      padding: 18px 22px;
    }
    .report-v2-card-head,
    .report-surface-card-head {
      display: flex; align-items: baseline; justify-content: space-between;
      gap: 10px; flex-wrap: wrap; margin-bottom: 14px;
      border-bottom: 1px solid rgba(28, 51, 67, 0.08);
      padding-bottom: 10px;
    }
    .report-v2-card-title,
    .report-surface-card-title {
      margin: 0;
      font-size: 13px;
      font-weight: 900;
      letter-spacing: 0.14em;
      text-transform: uppercase;
      color: var(--ink-navy);
    }
    .report-v2-card-subtitle,
    .report-surface-card-subtitle {
      color: var(--ink-muted);
      font-size: 12.5px;
    }
    .report-v2-card-body { color: var(--ink-navy); font-size: 14.5px; line-height: 1.65; }
    [data-view-mode="compact"] [data-view-only="full"] { display: none !important; }
    [data-view-mode="full"] [data-view-only="compact"] { display: none !important; }
    /* ---------- Header ---------- */
    .report-v2-hero,
    .report-surface-hero {
      display: flex; flex-direction: column; gap: 8px;
    }
    .report-v2-widget-of-day {
      background: linear-gradient(135deg, #fffdf7 0%, #f1f7f8 100%);
      border-color: rgba(42, 87, 104, 0.18);
      box-shadow: 0 10px 26px rgba(29, 53, 63, 0.06);
    }
    .report-v2-widget-of-day-kicker {
      margin: 0 0 9px;
      color: var(--ink-muted);
      font-size: 10px;
      font-weight: 900;
      letter-spacing: 0.12em;
      text-transform: uppercase;
    }
    .report-v2-widget-of-day-grid {
      display: grid;
      grid-template-columns: minmax(0, 1.3fr) minmax(230px, 0.7fr);
      gap: 14px;
      align-items: stretch;
    }
    .report-v2-widget-of-day-main,
    .report-v2-widget-of-day-side {
      min-width: 0;
    }
    .report-v2-widget-of-day-title-row {
      display: flex;
      align-items: flex-start;
      gap: 10px;
      margin-bottom: 8px;
    }
    .report-v2-widget-of-day-icon {
      width: 34px;
      height: 34px;
      border-radius: 10px;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      flex: 0 0 auto;
      background: var(--brand-deep);
      color: #fff;
      font-size: 10px;
      font-weight: 950;
      letter-spacing: 0.06em;
    }
    .report-v2-widget-of-day-title {
      margin: 0;
      color: var(--ink-navy);
      font-size: 17px;
      line-height: 1.2;
      font-weight: 900;
    }
    .report-v2-widget-of-day-intro,
    .report-v2-widget-of-day-copy,
    .report-v2-widget-of-day-look {
      margin: 3px 0 0;
      color: var(--ink-slate);
      font-size: 12.5px;
      line-height: 1.45;
    }
    .report-v2-widget-of-day-headline {
      margin: 0 0 5px;
      color: var(--ink-navy);
      font-size: 14px;
      line-height: 1.4;
      font-weight: 800;
    }
    .report-v2-widget-of-day-side {
      display: flex;
      flex-direction: column;
      gap: 9px;
      padding: 10px;
      border: 1px solid rgba(42, 87, 104, 0.16);
      border-radius: 12px;
      background: rgba(239, 247, 250, 0.72);
    }
    .report-v2-widget-of-day-chips {
      display: flex;
      flex-wrap: wrap;
      gap: 5px;
    }
    .report-v2-widget-of-day-chips span {
      padding: 3px 7px;
      border-radius: 999px;
      border: 1px solid rgba(42, 87, 104, 0.18);
      background: rgba(255, 255, 255, 0.72);
      color: var(--ink-slate);
      font-size: 10.5px;
      font-weight: 800;
    }
    .report-v2-widget-of-day-look strong {
      color: var(--ink-navy);
      font-weight: 900;
    }
    .report-v2-widget-of-day-usage {
      margin: 0;
      padding: 6px 8px;
      border-radius: 8px;
      background: rgba(255, 255, 255, 0.74);
      border: 1px solid rgba(42, 87, 104, 0.13);
      color: var(--ink-muted);
      font-size: 11px;
      line-height: 1.35;
      font-weight: 750;
    }
    .report-v2-widget-of-day-cta {
      align-self: flex-start;
      margin-top: auto;
      padding: 7px 11px;
      border-radius: 999px;
      background: var(--brand-deep);
      border: 1px solid var(--brand-deep);
      color: #fff;
      text-decoration: none;
      font-size: 11.5px;
      font-weight: 850;
    }
    .report-v2-widget-of-day-cta:hover {
      background: #183f34;
      border-color: #183f34;
    }
    @media (max-width: 760px) {
      .report-v2-widget-of-day-grid {
        grid-template-columns: 1fr;
      }
    }
    /* 2026-05-30 — Scheduled-report CTA bar at the top of the hero.
       Bronze SI palette so it visually reads as a "this report was
       generated by a saved schedule" affordance rather than competing
       with the report's own content. Hidden via Jinja for non-
       scheduled reports — no CSS gate needed. */
    .report-v2-scheduled-bar {
      display: flex;
      align-items: center;
      gap: 12px;
      flex-wrap: wrap;
      padding: 8px 12px;
      margin-bottom: 6px;
      background: rgba(185, 137, 47, 0.08);
      border: 1px solid rgba(185, 137, 47, 0.28);
      border-radius: 8px;
    }
    .report-v2-scheduled-bar-copy {
      display: flex; flex-direction: column; gap: 1px;
      flex: 1 1 auto; min-width: 0;
    }
    .report-v2-scheduled-bar-eyebrow {
      font-size: 10px; font-weight: 700;
      letter-spacing: 0.08em; text-transform: uppercase;
      color: #8a661f;
    }
    .report-v2-scheduled-bar-title {
      font-size: 13px; font-weight: 600;
      color: var(--text-strong, #2d2a23);
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    }
    .report-v2-scheduled-bar-actions {
      display: flex; align-items: center; gap: 8px;
      flex: 0 0 auto;
    }
    .report-v2-scheduled-bar-cta {
      display: inline-flex; align-items: center; gap: 6px;
      padding: 5px 12px; border-radius: 999px;
      background: #2f6f3a; color: #f4ecda;
      font-size: 12.5px; font-weight: 600;
      text-decoration: none;
      transition: background 0.12s ease, opacity 0.12s ease;
    }
    .report-v2-scheduled-bar-cta:hover { background: #265a2f; color: #f4ecda; }
    .report-v2-scheduled-bar-cta.is-loading {
      opacity: 0.78;
      cursor: progress;
      pointer-events: none;
    }
    .report-v2-scheduled-bar-cta-spinner {
      display: none;
      width: 10px; height: 10px;
      border: 2px solid currentColor;
      border-top-color: transparent;
      border-radius: 50%;
      animation: report-v2-scheduled-spin 0.7s linear infinite;
    }
    .report-v2-scheduled-bar-cta.is-loading .report-v2-scheduled-bar-cta-spinner {
      display: inline-block;
    }
    .report-v2-scheduled-bar-cta.is-loading .report-v2-scheduled-bar-cta-icon { display: none; }
    @keyframes report-v2-scheduled-spin { to { transform: rotate(360deg); } }
    /* Info icon + hover/focus tooltip. The tooltip is anchored via
       absolute positioning so it sits above other hero content; it's
       a multi-line dialog (not the native title attribute) because
       we want a structured Cadence/Length/Mode/Questions recap. */
    .report-v2-scheduled-bar-info {
      position: relative;
      display: inline-flex; align-items: center; justify-content: center;
      width: 22px; height: 22px;
      border-radius: 50%;
      background: rgba(185, 137, 47, 0.18);
      color: #8a661f;
      font-size: 13px;
      cursor: help;
      outline: none;
      transition: background 0.12s ease;
    }
    .report-v2-scheduled-bar-info:hover,
    .report-v2-scheduled-bar-info:focus { background: rgba(185, 137, 47, 0.32); }
    .report-v2-scheduled-bar-tooltip {
      position: absolute;
      right: 0; top: calc(100% + 6px);
      z-index: 60;
      min-width: 260px; max-width: 320px;
      padding: 10px 12px;
      background: var(--surface-white, #fff);
      border: 1px solid rgba(136, 123, 97, 0.32);
      border-radius: 10px;
      box-shadow: 0 12px 28px rgba(0, 0, 0, 0.14);
      display: none;
      flex-direction: column;
      gap: 4px;
      color: var(--text-strong, #2d2a23);
      font-size: 12px;
      text-align: left;
      white-space: normal;
      pointer-events: auto;
    }
    .report-v2-scheduled-bar-info:hover .report-v2-scheduled-bar-tooltip,
    .report-v2-scheduled-bar-info:focus .report-v2-scheduled-bar-tooltip,
    .report-v2-scheduled-bar-info:focus-within .report-v2-scheduled-bar-tooltip {
      display: flex;
    }
    .report-v2-scheduled-bar-tooltip-title {
      font-size: 10.5px; font-weight: 700;
      letter-spacing: 0.06em; text-transform: uppercase;
      color: var(--text-muted, #6b6457);
      margin-bottom: 4px;
    }
    .report-v2-scheduled-bar-tooltip-row {
      display: flex; justify-content: space-between; gap: 12px;
      font-size: 12px; line-height: 1.4;
    }
    .report-v2-scheduled-bar-tooltip-row > span:first-child {
      color: var(--text-muted, #6b6457);
      font-weight: 500;
    }
    .report-v2-scheduled-bar-tooltip-row > span:last-child {
      color: var(--text-strong, #2d2a23);
      font-weight: 600;
      text-align: right;
    }
    .report-v2-hero-top,
    .report-surface-hero-toprow {
      display: flex;
      align-items: center;
      justify-content: space-between;
      gap: 12px;
      flex-wrap: wrap;
    }
    .report-v2-hero-badges,
    .report-surface-badges {
      display: flex;
      flex-wrap: wrap;
      gap: 8px;
      align-items: center;
      flex: 1 1 auto;
      min-width: 0;
    }
    .report-v2-back-link {
      font-size: 12px; font-weight: 800; letter-spacing: 0.06em;
      text-transform: uppercase; color: var(--ink-slate); text-decoration: none;
    }
    .report-v2-back-link:hover { color: var(--ink-navy); }
    .report-v2-chip {
      display: inline-flex; align-items: center;
      padding: 2px 9px; border-radius: 999px;
      font-size: 10.5px; font-weight: 800; letter-spacing: 0.05em;
      text-transform: uppercase;
      background: var(--surface-pale-cool); color: var(--ink-navy); border: 1px solid var(--border-cool);
    }
    .report-v2-chip-type { background: var(--ink-navy); color: var(--surface-cream); border-color: var(--ink-navy); }
    .report-v2-chip-positive { background: var(--surface-mint); color: var(--positive-text-deep); border-color: var(--surface-mint-deep); }
    .report-v2-chip-caution { background: var(--surface-warm); color: var(--brand-bronze); border-color: var(--warning-border-soft); }
    .report-v2-chip-negative { background: var(--surface-warm-warning); color: var(--danger-text-deep); border-color: var(--danger-border-soft); }
    .report-v2-chip-neutral { background: var(--surface-pale-cool); color: var(--ink-slate); border-color: var(--border-cool); }
    .report-v2-hero-title,
    .report-surface-title {
      margin: 8px 0 0 0;
      font-size: clamp(26px, 3vw, 34px);
      line-height: 1.15;
      color: var(--ink-navy);
      font-weight: 850;
    }
    /* "(X min read)" annotation under the hero title — quieter weight +
       size than the title so it reads as a parenthetical. 2026-05-23 —
       moved out of <h1> into a sibling <p>; tightened the top margin
       so the visual rhythm stays close to the previous inline layout. */
    .report-v2-hero-title-read {
      margin: 2px 0 0 0;
      font-size: 14px;
      font-weight: 600;
      color: var(--ink-muted);
      letter-spacing: 0;
      white-space: nowrap;
    }
    .report-v2-hero-meta,
    .report-surface-meta {
      /* 2026-05-23 — flex with a smaller `gap` because the
         inter-span separator dot now sits inside the gap (added
         by the `::before` rule below). Total visible whitespace
         between two adjacent items: ~10px + dot glyph + ~10px. */
      display: flex; gap: 10px; color: var(--ink-slate); font-size: 12.5px; flex-wrap: wrap;
      align-items: center;
    }
    /* 2026-05-23 — Centered dot separator between every adjacent
       pair of meta spans. The dot is its own ::before pseudo with
       margin-right: 10px so it sits centered in the inter-span
       gap (5px from prev word + dot + 5px to next word, plus the
       flex gap of 10px on the other side ≈ symmetric spacing).
       Skip when the next span IS the right-aligned actions
       cluster (.report-v2-hero-actions uses `margin-left: auto`
       to push to the right edge — adding a dot before it would
       look out of place). */
    .report-v2-hero-meta > span + span::before {
      content: "·";
      color: rgba(58, 74, 85, 0.55);
      margin-right: 10px;
      padding: 0;
      display: inline-block;
    }
    .report-v2-hero-meta > .report-v2-hero-actions::before {
      content: none;
    }
    /* 2026-05-23 — Mode chip in the hero meta line. Without explicit
       styling the chip was rendering as plain inline text alongside
       the timestamp + transcript count — users couldn't tell at a
       glance which mode produced the report (Full recap vs Macro
       view vs Transcript-by-transcript recap). Pill matches the
       history-row scope chip visual language (pale-cool surface +
       cool border + small caps weight) so the same affordance is
       recognizable across surfaces. The `::before` separator dot
       rule above is suppressed for this chip since the pill is
       visually distinct from the inline text spans. */
    .report-v2-hero-mode-chip {
      display: inline-flex; align-items: center;
      min-height: 22px; padding: 2px 10px;
      border-radius: 999px;
      background: var(--surface-pale-cool, #eef3f6);
      border: 1px solid var(--border-cool, #c3d3dc);
      color: var(--ink-slate, var(--ink-slate));
      font-size: 11.5px;
      font-weight: 600;
      letter-spacing: 0.02em;
      text-transform: uppercase;
      white-space: nowrap;
    }
    .report-v2-hero-meta > .report-v2-hero-mode-chip::before {
      content: none;
    }
    .report-v2-hero-actions,
    .report-surface-actions {
      margin-left: auto;
      display: inline-flex;
      gap: 8px;
      align-items: center;
      flex: 0 0 auto;
      flex-wrap: wrap;
    }
    @media (max-width: 680px) {
      .report-v2-hero-top,
      .report-surface-hero-toprow {
        align-items: flex-start;
      }
      .report-v2-hero-actions,
      .report-surface-actions {
        width: 100%;
        margin-left: 0;
        justify-content: flex-start;
      }
    }
    /* ---------- Research read ---------- */
    .report-v2-research-read {
      background: var(--surface-white);
      border-color: rgba(42, 87, 104, 0.16);
      box-shadow: 0 12px 28px rgba(24, 35, 45, 0.06);
    }
    .report-v2-research-read-head {
      display: flex;
      align-items: flex-start;
      justify-content: space-between;
      gap: 14px;
      margin-bottom: 10px;
    }
    .report-v2-research-read-eyebrow {
      margin: 0 0 4px;
      color: var(--brand-deep);
      font-size: 10.5px;
      font-weight: 900;
      letter-spacing: 0.12em;
      text-transform: uppercase;
    }
    .report-v2-research-read-title {
      margin: 0;
      color: var(--ink-navy);
      font-size: 18px;
      line-height: 1.25;
      font-weight: 900;
    }
    .report-v2-research-read-confidence {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      padding: 5px 10px;
      border-radius: 999px;
      background: rgba(69, 102, 83, 0.12);
      color: var(--positive-text-deep);
      font-size: 11px;
      font-weight: 900;
      white-space: nowrap;
    }
    .report-v2-research-read-copy {
      margin: 0 0 12px;
      max-width: 880px;
      color: var(--ink-slate);
      font-size: 13.8px;
      line-height: 1.55;
    }
    .report-v2-research-read-grid {
      display: grid;
      grid-template-columns: repeat(4, minmax(0, 1fr));
      gap: 9px;
    }
    .report-v2-research-read-item {
      min-width: 0;
      padding: 10px 11px;
      border: 1px solid rgba(42, 87, 104, 0.12);
      border-radius: 12px;
      background: rgba(239, 247, 250, 0.72);
    }
    .report-v2-research-read-item-challenge {
      background: rgba(250, 244, 231, 0.86);
      border-color: rgba(184, 142, 63, 0.2);
    }
    .report-v2-research-read-item span {
      display: block;
      margin-bottom: 4px;
      color: var(--brand-deep);
      font-size: 10px;
      font-weight: 900;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }
    .report-v2-research-read-item p {
      margin: 0;
      color: var(--ink-navy);
      font-size: 12.8px;
      line-height: 1.45;
    }
    .report-v2-research-read-foot {
      display: inline-flex;
      align-items: center;
      margin-top: 10px;
      padding: 4px 9px;
      border-radius: 999px;
      background: rgba(28, 51, 67, 0.06);
      color: var(--ink-muted);
      font-size: 11.5px;
      font-weight: 700;
    }
    .report-v2-outside-context {
      background: linear-gradient(180deg, #ffffff 0%, #f7fbfc 100%);
      border-color: rgba(42, 87, 104, 0.14);
    }
    .report-v2-outside-context.is-compact {
      background: #fff;
    }
    .report-v2-outside-context.is-compact .report-v2-card-head {
      margin-bottom: 6px;
    }
    .report-v2-outside-context-compact-row {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      justify-content: space-between;
      gap: 8px 14px;
      padding: 10px 12px;
      border-radius: 12px;
      background: rgba(28, 51, 67, 0.04);
      border: 1px solid rgba(28, 51, 67, 0.08);
    }
    .report-v2-outside-context-compact-row p {
      margin: 0;
      color: var(--ink-slate);
      font-size: 13px;
      line-height: 1.35;
      font-weight: 750;
    }
    .report-v2-outside-context-compact-sources {
      margin-top: 0 !important;
      padding-top: 0 !important;
      border-top: 0 !important;
    }
    .report-v2-outside-context-summary {
      display: grid;
      gap: 8px;
      margin-bottom: 14px;
    }
    .report-v2-outside-context-count {
      width: fit-content;
      flex: 0 0 auto;
      margin-left: auto;
      padding: 5px 9px;
      border-radius: 999px;
      background: rgba(28, 51, 67, 0.06);
      color: var(--ink-muted);
      font-size: 11.5px;
      font-weight: 800;
    }
    .report-v2-outside-context-briefing {
      display: grid;
      gap: 9px;
      padding: 13px 14px;
      border-radius: 14px;
      border: 1px solid rgba(42, 87, 104, 0.13);
      background: linear-gradient(180deg, rgba(239, 247, 250, 0.86), rgba(255, 255, 255, 0.94));
      box-shadow: 0 8px 20px rgba(24, 35, 45, 0.04);
    }
    .report-v2-outside-context-briefing h3 {
      margin: 0 0 2px;
      color: var(--brand-deep);
      font-size: 11px;
      font-weight: 900;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }
    .report-v2-outside-context-briefing-row {
      display: grid;
      grid-template-columns: 112px minmax(0, 1fr);
      gap: 10px;
      align-items: start;
    }
    .report-v2-outside-context-briefing-row span {
      color: var(--ink-muted);
      font-size: 11px;
      font-weight: 900;
      letter-spacing: 0.04em;
      text-transform: uppercase;
    }
    .report-v2-outside-context-briefing-row p {
      margin: 0;
      color: var(--ink-navy);
      font-size: 13.2px;
      line-height: 1.45;
      font-weight: 620;
    }
    .report-v2-outside-context-briefing-row.is-confirm span { color: #456653; }
    .report-v2-outside-context-briefing-row.is-caveat span { color: #8a6731; }
    .report-v2-outside-context-briefing-row.is-net {
      padding-top: 8px;
      border-top: 1px solid rgba(28, 51, 67, 0.08);
    }
    .report-v2-outside-context-muted-line {
      margin: 2px 0 0;
      padding-top: 8px;
      border-top: 1px dashed rgba(28, 51, 67, 0.12);
      color: var(--ink-muted);
      font-size: 12px;
      line-height: 1.4;
      font-weight: 700;
    }
    .report-v2-outside-context-summary-row {
      padding: 10px 12px;
      border-radius: 12px;
      border: 1px solid rgba(42, 87, 104, 0.12);
      background: rgba(239, 247, 250, 0.78);
      color: var(--ink-navy);
    }
    .report-v2-outside-context-summary-row-caution {
      background: rgba(250, 244, 231, 0.82);
      border-color: rgba(184, 142, 63, 0.2);
    }
    .report-v2-outside-context-summary-row-net {
      background: rgba(69, 102, 83, 0.1);
      border-color: rgba(69, 102, 83, 0.18);
    }
    .report-v2-outside-context-summary-row span,
    .report-v2-outside-context-bucket h3,
    .report-v2-outside-context-so-what span {
      display: block;
      margin: 0 0 4px;
      color: var(--brand-deep);
      font-size: 10px;
      font-weight: 900;
      letter-spacing: 0.08em;
      text-transform: uppercase;
    }
    .report-v2-outside-context-summary-row p {
      margin: 0;
      color: var(--ink-navy);
      font-size: 13.2px;
      line-height: 1.48;
      font-weight: 600;
    }
    .report-v2-outside-context-buckets {
      display: grid;
      grid-template-columns: minmax(0, 1fr);
      gap: 13px;
      margin-top: 13px;
    }
    .report-v2-outside-context-buckets.is-confirm-add-paired {
      grid-template-columns: repeat(2, minmax(0, 1fr));
      align-items: stretch;
    }
    .report-v2-outside-context-buckets.is-confirm-add-paired .report-v2-outside-context-bucket {
      grid-column: 1 / -1;
    }
    .report-v2-outside-context-buckets.is-confirm-add-paired .report-v2-outside-context-bucket.is-bucket-confirms,
    .report-v2-outside-context-buckets.is-confirm-add-paired .report-v2-outside-context-bucket.is-bucket-adds {
      grid-column: auto;
    }
    .report-v2-outside-context-bucket {
      min-width: 0;
    }
    .report-v2-outside-context-bucket h3 {
      margin-bottom: 7px;
    }
    .report-v2-outside-context-list {
      display: grid;
      grid-template-columns: minmax(0, 1fr);
      gap: 10px;
    }
    .report-v2-outside-context-item {
      display: flex;
      flex-direction: column;
      gap: 8px;
      min-width: 0;
      padding: 12px;
      border-radius: 12px;
      border: 1px solid rgba(28, 51, 67, 0.09);
      background: var(--surface-white);
      color: inherit;
      text-decoration: none;
      transition: transform 0.14s ease, box-shadow 0.14s ease, border-color 0.14s ease;
    }
    .report-v2-outside-context-item-confirm { border-left: 4px solid rgba(69, 102, 83, 0.72); }
    .report-v2-outside-context-item-challenge { border-left: 4px solid rgba(184, 142, 63, 0.72); }
    .report-v2-outside-context-item-add { border-left: 4px solid rgba(42, 87, 104, 0.72); }
    .report-v2-outside-context-item-watch { border-left: 4px solid rgba(184, 142, 63, 0.72); }
    .report-v2-outside-context-item:hover,
    .report-v2-outside-context-item:focus-visible {
      transform: translateY(-2px);
      border-color: rgba(42, 87, 104, 0.22);
      box-shadow: 0 12px 24px rgba(24, 35, 45, 0.08);
      outline: none;
    }
    .report-v2-outside-context-source-link {
      align-self: flex-end;
      margin-top: auto;
      color: var(--brand-deep);
      font-size: 12px;
      font-weight: 900;
      text-decoration: none;
    }
    .report-v2-outside-context-source-link:hover,
    .report-v2-outside-context-source-link:focus-visible {
      text-decoration: underline;
      outline: none;
    }
    .report-v2-outside-context-item-top {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      gap: 6px;
    }
    .report-v2-outside-context-relationship {
      width: fit-content;
      padding: 4px 8px;
      border-radius: 999px;
      background: rgba(42, 87, 104, 0.1);
      color: var(--brand-deep);
      font-size: 10.5px;
      font-weight: 900;
      text-transform: uppercase;
      letter-spacing: 0.06em;
    }
    .report-v2-outside-context-item-confirm .report-v2-outside-context-relationship {
      background: rgba(69, 102, 83, 0.12);
      color: #456653;
    }
    .report-v2-outside-context-item-challenge .report-v2-outside-context-relationship,
    .report-v2-outside-context-item-watch .report-v2-outside-context-relationship {
      background: rgba(184, 142, 63, 0.13);
      color: #8a6731;
    }
    .report-v2-outside-context-item-add .report-v2-outside-context-relationship {
      background: rgba(42, 87, 104, 0.11);
      color: var(--brand-deep);
    }
    .report-v2-outside-context-theme-chips {
      display: inline-flex;
      flex-wrap: wrap;
      gap: 5px;
      min-width: 0;
    }
    .report-v2-outside-context-theme-more {
      color: var(--ink-muted);
      background: rgba(28, 51, 67, 0.04);
    }
    .report-v2-outside-context-item strong {
      color: var(--ink-navy);
      font-size: 13.5px;
      line-height: 1.32;
    }
    .report-v2-outside-context-meta {
      display: flex;
      flex-wrap: wrap;
      gap: 5px;
      color: var(--ink-muted);
      font-size: 11.2px;
      font-weight: 800;
    }
    .report-v2-outside-context-meta span + span::before {
      content: "·";
      margin-right: 5px;
      color: rgba(28, 51, 67, 0.38);
    }
    .report-v2-outside-context-fields {
      display: grid;
      gap: 6px;
    }
    .report-v2-outside-context-fields p {
      margin: 0;
      color: var(--ink-slate);
      font-size: 12.5px;
      line-height: 1.43;
    }
    .report-v2-outside-context-fields span {
      display: block;
      margin-bottom: 2px;
      color: var(--ink-muted);
      font-size: 10.5px;
      font-weight: 900;
      text-transform: uppercase;
      letter-spacing: 0.06em;
    }
    .report-v2-outside-context-chips {
      display: flex;
      flex-wrap: wrap;
      gap: 5px;
    }
    .report-v2-outside-context-chips span {
      padding: 3px 7px;
      border-radius: 999px;
      background: rgba(28, 51, 67, 0.06);
      color: var(--ink-muted);
      font-size: 10.5px;
      font-weight: 800;
    }
    .report-v2-outside-context-sources {
      margin-top: 12px;
      border-top: 1px solid rgba(28, 51, 67, 0.08);
      padding-top: 9px;
    }
    .report-v2-outside-context-sources summary {
      cursor: pointer;
      color: var(--ink-slate);
      font-size: 12px;
      font-weight: 850;
    }
    .report-v2-outside-context-ignored-list {
      display: grid;
      gap: 7px;
      margin-top: 8px;
    }
    .report-v2-outside-context-ignored {
      display: grid;
      gap: 2px;
      padding: 9px 10px;
      border-radius: 10px;
      background: rgba(28, 51, 67, 0.04);
      border: 1px solid rgba(28, 51, 67, 0.07);
    }
    .report-v2-outside-context-ignored strong {
      color: var(--ink-navy);
      font-size: 12.4px;
    }
    .report-v2-outside-context-ignored span {
      color: var(--ink-muted);
      font-size: 11.8px;
      line-height: 1.35;
    }
    .report-v2-outside-context-so-what {
      margin-top: 12px;
      padding: 12px 14px;
      border-radius: 14px;
      background: rgba(69, 102, 83, 0.12);
      border: 1px solid rgba(69, 102, 83, 0.2);
    }
    .report-v2-outside-context-so-what p {
      margin: 0;
      color: var(--ink-navy);
      font-size: 13px;
      line-height: 1.45;
      font-weight: 650;
    }
    .report-v2-outside-context-query {
      margin-top: 10px;
      padding-top: 8px;
      border-top: 1px solid rgba(28, 51, 67, 0.08);
      color: var(--ink-muted);
      font-size: 11.5px;
      line-height: 1.35;
    }
    .report-v2-outside-context-query summary {
      cursor: pointer;
      font-weight: 850;
    }
    .report-v2-outside-context-query p {
      margin: 7px 0 0;
      overflow-wrap: anywhere;
    }
    @media (max-width: 760px) {
      .report-v2-outside-context-list { grid-template-columns: 1fr; }
      .report-v2-outside-context-buckets.is-confirm-add-paired { grid-template-columns: 1fr; }
      .report-v2-outside-context-buckets.is-confirm-add-paired .report-v2-outside-context-bucket.is-bucket-confirms,
      .report-v2-outside-context-buckets.is-confirm-add-paired .report-v2-outside-context-bucket.is-bucket-adds { grid-column: 1 / -1; }
      .report-v2-outside-context-count { margin-left: 0; }
    }
    @media (max-width: 980px) {
      .report-v2-research-read-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    }
    @media (max-width: 620px) {
      .report-v2-research-read-head { display: grid; }
      .report-v2-research-read-confidence { justify-self: start; }
      .report-v2-research-read-grid { grid-template-columns: 1fr; }
      /* Phone horizontal-overflow guard. Several single-line titles/questions
         (source-package titles, "Watch next" questions, the scheduled-bar
         title) keep `white-space: nowrap` + ellipsis on purpose, but as flex/
         grid items they defaulted to `min-width: auto`, so their full
         single-line min-content inflated the track — widening the whole page
         ~320px and forcing users to pinch-zoom to read (reported 2026-06-13).
         `min-width: 0` lets those tracks shrink so the ellipsis actually
         engages. Exempt the theme-matrix scroller, which is meant to scroll
         horizontally on its own. */
      .report-v2-shell *:not(.report-v2-tm-scroll):not(.report-v2-tm-scroll *) {
        min-width: 0;
      }
      /* Small breathing room between the fixed topbar and the first card
         (the workflow) on phones — it otherwise sits flush under the bar. */
      .report-v2-shell > .daily-research-workflow:first-child {
        margin-top: 10px;
      }
    }
    /* ---------- Executive read ---------- */
    .report-v2-exec-grid {
      display: grid; grid-template-columns: 1.4fr 1fr; gap: 12px; margin-top: 10px;
    }
    @media (max-width: 820px) {
      .report-v2-exec-grid { grid-template-columns: 1fr; }
    }
    .report-v2-exec-summary {
      font-size: 14.5px; line-height: 1.65; color: var(--ink-navy);
      margin: 0; text-align: justify; text-wrap: pretty; -webkit-hyphens: auto; hyphens: auto;
    }
    .report-v2-exec-cards { display: grid; gap: 8px; }
    .report-v2-exec-card {
      padding: 10px 14px; border-radius: 12px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.08);
      display: flex; flex-direction: column; gap: 4px;
    }
    .report-v2-exec-card-kicker {
      font-size: 10.5px; font-weight: 900; letter-spacing: 0.08em;
      text-transform: uppercase; color: var(--ink-navy);
    }
    .report-v2-exec-card-body { margin: 0; font-size: 13.5px; line-height: 1.5; color: var(--ink-navy); }
    .report-v2-exec-card-risk { background: var(--surface-warm); border-color: var(--warning-border-soft); }
    /* ---------- Analyst Brief ----------
       The narrative section that anchors the report — should feel like a
       memo, not a widget. A subtle left rule signals "read this as prose".
       On long/detailed reports, additional subheaders (Core read /
       Strongest evidence / Weakest assumption / Practical interpretation)
       structure the flow without breaking the prose feel. */
    .report-v2-brief {
      max-width: 760px; margin: 0 auto;
    }
    .report-v2-brief-prose {
      padding-left: 16px;
      border-left: 3px solid var(--ink-navy);
    }
    .report-v2-brief-paragraph {
      margin: 0 0 12px 0;
      font-size: 15px; line-height: 1.65; color: var(--ink-navy);
      text-align: justify; text-wrap: pretty; -webkit-hyphens: auto; text-justify: inter-word; hyphens: auto;
    }
    .report-v2-brief-paragraph:last-child { margin-bottom: 0; }
    .report-v2-brief-paragraph + .report-v2-brief-paragraph {
      text-indent: 0;
    }
    .report-v2-brief-paragraph-lead::first-letter {
      font-size: 1.8em; font-weight: 900; color: var(--ink-navy);
      float: left; line-height: 1; margin-right: 6px; margin-top: 4px;
    }
    .report-v2-brief-sub {
      margin-top: 18px;
      padding-left: 12px;
      border-left: 2px solid var(--border-cool);
    }
    .report-v2-brief-sub-kicker {
      font-size: 11px; font-weight: 900; letter-spacing: 0.12em;
      text-transform: uppercase; color: var(--ink-navy);
      margin: 0 0 4px 0;
    }
    .report-v2-brief-sub-body {
      margin: 0; font-size: 14px; line-height: 1.6; color: var(--ink-navy);
    }
    .report-v2-brief-sub-strongest { border-left-color: var(--positive-text-deep); }
    .report-v2-brief-sub-strongest .report-v2-brief-sub-kicker { color: var(--positive-text-deep); }
    .report-v2-brief-sub-weakest { border-left-color: var(--brand-bronze); }
    .report-v2-brief-sub-weakest .report-v2-brief-sub-kicker { color: var(--brand-bronze); }
    .report-v2-brief-sub-practical { border-left-color: var(--ink-slate); }
    .report-v2-brief-sub-practical .report-v2-brief-sub-kicker { color: var(--ink-slate); }
    /* ---------- What changed ---------- */
    .report-v2-change-grid {
      display: grid; gap: 12px; grid-template-columns: repeat(3, minmax(0, 1fr));
    }
    @media (max-width: 980px) { .report-v2-change-grid { grid-template-columns: 1fr; } }
    .report-v2-change-col {
      padding: 12px 14px; border-radius: 12px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.08);
      display: flex; flex-direction: column; gap: 8px;
    }
    .report-v2-change-col-title {
      font-size: 11px; font-weight: 900; letter-spacing: 0.12em;
      text-transform: uppercase; margin: 0 0 8px 0;
    }
    .report-v2-change-col-new .report-v2-change-col-title { color: var(--brand-bronze); }
    .report-v2-change-col-stable .report-v2-change-col-title { color: var(--ink-navy); }
    .report-v2-change-col-faded .report-v2-change-col-title { color: var(--ink-muted); }
    .report-v2-change-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 8px; }
    .report-v2-change-item {
      padding: 8px 10px; border-radius: 10px; background: var(--surface-white);
      border: 1px solid rgba(28, 51, 67, 0.08);
    }
    .report-v2-change-item-title {
      margin: 0 0 4px 0; font-size: 13.5px; font-weight: 700; color: var(--ink-navy);
    }
    .report-v2-change-item-body {
      margin: 0; font-size: 12.5px; line-height: 1.5; color: var(--ink-slate);
    }
    .report-v2-change-item-tags { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 6px; }
    .report-v2-change-item-tag {
      display: inline-flex; padding: 1px 7px; border-radius: 999px;
      background: var(--surface-pale-cool); color: var(--ink-navy); font-size: 10px; font-weight: 700;
      letter-spacing: 0.04em; text-transform: uppercase;
      border: 1px solid var(--border-cool);
    }
    /* ---------- Key drivers ---------- */
    .report-v2-driver-list { display: flex; flex-direction: column; gap: 10px; margin: 0; padding: 0; list-style: none; }
    .report-v2-driver-item {
      display: grid; grid-template-columns: 36px 1fr auto; gap: 10px;
      padding: 12px 14px; border-radius: 12px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.1);
    }
    .report-v2-driver-rank {
      display: inline-flex; align-items: center; justify-content: center;
      width: 28px; height: 28px; border-radius: 8px;
      background: var(--ink-navy); color: var(--surface-cream); font-size: 13px; font-weight: 900;
    }
    .report-v2-driver-body { display: flex; flex-direction: column; gap: 4px; }
    .report-v2-driver-title { margin: 0; font-size: 14.5px; font-weight: 800; color: var(--ink-navy); }
    .report-v2-driver-explanation { margin: 0; font-size: 13px; line-height: 1.55; color: var(--ink-navy); }
    .report-v2-driver-meta { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 4px; }
    .report-v2-driver-actions { display: flex; align-items: flex-start; }
    /* ---------- Market implications ----------
       Column count is set per-card-count by the template via the
       --impl-cols custom property (e.g. 4 cards → 2 cols / 2+2,
       5 → 3 cols / 3+2, 3 → 3 cols, 1–2 → match count, 6+ → 3).
       The fallback (var() second arg) keeps the previous 3-col
       behavior if the property isn't set. */
    .report-v2-implications-grid {
      display: grid; gap: 12px;
      grid-template-columns: repeat(var(--impl-cols, 3), minmax(0, 1fr));
    }
    @media (max-width: 980px) {
      .report-v2-implications-grid {
        /* On narrow screens cap at 2 cols regardless of --impl-cols.
           min() picks the smaller of the requested col count and 2. */
        grid-template-columns: repeat(min(var(--impl-cols, 3), 2), minmax(0, 1fr));
      }
    }
    @media (max-width: 640px) { .report-v2-implications-grid { grid-template-columns: 1fr; } }
    .report-v2-implication-card {
      padding: 14px 16px; border-radius: 14px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.1);
      display: flex; flex-direction: column; gap: 8px;
      transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
    }
    .report-v2-implication-card:hover {
      transform: translateY(-2px);
      border-color: rgba(28, 51, 67, 0.18);
      box-shadow: 0 10px 22px rgba(28, 51, 67, 0.08);
    }
    .report-v2-implication-head { display: flex; align-items: flex-start; gap: 8px; }
    .report-v2-implication-title {
      margin: 0; font-size: 15px; font-weight: 800; color: var(--ink-navy); flex: 1 1 auto;
    }
    .report-v2-implication-icon { display: inline-flex; }
    .report-v2-implication-ai { margin-left: auto; }
    .report-v2-implication-pills { display: flex; flex-wrap: wrap; gap: 4px; }
    .report-v2-implication-read {
      margin: 0; padding: 6px 10px; border-radius: 8px;
      background: var(--surface-white); border-left: 3px solid var(--ink-navy);
      font-size: 13px; line-height: 1.55; color: var(--ink-navy);
    }
    .report-v2-implication-read-positive { border-left-color: var(--positive-text-deep); background: var(--surface-pale-cool); }
    .report-v2-implication-read-negative { border-left-color: var(--danger-text-deep); background: var(--surface-warm-warning); }
    .report-v2-implication-read-caution { border-left-color: var(--brand-bronze); background: var(--surface-warm); }
    .report-v2-implication-line {
      margin: 0; font-size: 12.5px; line-height: 1.55; color: var(--ink-slate);
    }
    .report-v2-implication-kicker {
      font-size: 10.5px; font-weight: 900; letter-spacing: 0.06em;
      text-transform: uppercase; color: var(--ink-navy); margin-right: 4px;
    }
    .report-v2-implication-kicker-good { color: var(--positive-text-deep); }
    .report-v2-implication-kicker-bad { color: var(--danger-text-deep); }
    /* ---------- Related transcripts ----------
       Compact YouTube-style cards: thumbnail on top spanning the card
       width, then a larger title, a single muted meta line (speaker · date),
       and an AI★ pinned to the top-right corner of the card. Always a
       2-column grid so a lone rec keeps its left-column slot. */
    .report-v2-related-list {
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 10px;
      margin: 0; padding: 0; list-style: none;
    }
    .report-v2-related-card {
      position: relative;
      display: flex; flex-direction: column;
      gap: 4px;
      padding: 8px 10px;
      padding-right: 40px;   /* room for the corner AI★ */
      border-radius: 10px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.1);
      transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease;
    }
    .report-v2-related-card:hover {
      transform: translateY(-2px);
      border-color: rgba(28, 51, 67, 0.18);
      box-shadow: 0 10px 22px rgba(28, 51, 67, 0.08);
    }
    .report-v2-related-thumb {
      width: 100%;
      aspect-ratio: 16 / 9;
      max-height: 110px;
      border-radius: 8px;
      background: var(--surface-mint); overflow: hidden; position: relative;
    }
    .report-v2-related-thumb a,
    .report-v2-related-thumb img { width: 100%; height: 100%; display: block; }
    .report-v2-related-thumb img { object-fit: cover; }
    .report-v2-related-thumb-fallback {
      width: 100%; height: 100%; display: flex; align-items: center; justify-content: center;
      color: var(--ink-muted); font-size: 11px; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase;
    }
    .report-v2-related-title {
      margin: 2px 0 0 0;
      font-size: 15.5px; font-weight: 800; color: var(--ink-navy);
      line-height: 1.3; word-break: break-word;
      display: -webkit-box;
      -webkit-line-clamp: 2;
      -webkit-box-orient: vertical;
      overflow: hidden;
    }
    .report-v2-related-title a { color: inherit; text-decoration: none; }
    .report-v2-related-title a:hover { text-decoration: underline; }
    .report-v2-related-meta {
      font-size: 11px; color: var(--ink-muted); font-weight: 600;
      display: flex; gap: 4px; flex-wrap: wrap; align-items: center;
      line-height: 1.3;
    }
    .report-v2-related-meta-sep { color: var(--border-pale); }
    .report-v2-related-ai-corner {
      position: absolute;
      top: 6px; right: 6px;
      z-index: 2;
      display: none !important;
    }
    .report-v2-related-card:hover .report-v2-related-ai-corner,
    .report-v2-related-card:focus-within .report-v2-related-ai-corner {
      display: inline-flex !important;
    }
    .report-v2-related-ai-corner .ai-star-btn,
    .report-v2-implication-ai .ai-star-btn {
      display: none !important;
      opacity: 0;
      pointer-events: none;
      transform: translateY(2px) scale(0.96);
      transition: opacity 0.16s ease, transform 0.16s ease;
    }
    .report-v2-implication-ai {
      display: none !important;
      align-items: center;
      justify-content: flex-end;
      min-width: 32px;
      margin-left: auto;
    }
    .report-v2-related-card:hover .report-v2-related-ai-corner .ai-star-btn,
    .report-v2-related-card:focus-within .report-v2-related-ai-corner .ai-star-btn,
    .report-v2-implication-card:hover .report-v2-implication-ai .ai-star-btn,
    .report-v2-implication-card:focus-within .report-v2-implication-ai .ai-star-btn {
      display: inline-flex !important;
      opacity: 1;
      pointer-events: auto;
      transform: none;
    }
    .report-v2-implication-card:hover .report-v2-implication-ai,
    .report-v2-implication-card:focus-within .report-v2-implication-ai {
      display: inline-flex !important;
    }
    /* ---------- Tracked questions ---------- */
    .report-v2-tracked-list { display: flex; flex-direction: column; gap: 8px; margin: 0; padding: 0; list-style: none; }
    .report-v2-tracked-item {
      display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: start;
      padding: 10px 12px; border-radius: 12px;
      background: var(--surface-pale-cool); border: 1px solid var(--border-pale);
    }
    .report-v2-tracked-body { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
    .report-v2-tracked-question {
      margin: 0; font-size: 13.5px; font-weight: 700; color: var(--ink-navy); line-height: 1.45;
    }
    .report-v2-tracked-update {
      margin: 0; font-size: 12.5px; line-height: 1.5; color: var(--ink-slate);
    }
    .report-v2-tracked-actions { display: flex; gap: 6px; align-items: center; }
    /* ---------- Evidence & confidence ---------- */
    .report-v2-evidence-summary {
      margin: 0 0 8px 0; font-size: 14px; line-height: 1.6; color: var(--ink-navy);
    }
    .report-v2-evidence-caveat {
      margin: 0 0 12px 0; padding: 8px 12px; border-radius: 10px;
      background: var(--surface-warm); border-left: 3px solid var(--brand-bronze);
      font-size: 13px; line-height: 1.55; color: var(--bronze-deep);
    }
    .report-v2-evidence-grid {
      display: grid; gap: 10px; grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    @media (max-width: 820px) { .report-v2-evidence-grid { grid-template-columns: 1fr; } }
    .report-v2-evidence-col {
      padding: 10px 12px; border-radius: 10px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.08);
    }
    .report-v2-evidence-col-title {
      font-size: 10.5px; font-weight: 900; letter-spacing: 0.08em;
      text-transform: uppercase; color: var(--ink-navy); margin: 0 0 6px 0;
    }
    .report-v2-evidence-list { list-style: disc; margin: 0; padding-left: 20px; }
    .report-v2-evidence-list li { font-size: 12.5px; line-height: 1.5; color: var(--ink-navy); }
    /* ---------- Watch next / Ask or track ---------- */
    .report-v2-next-grid {
      display: grid; gap: 14px; grid-template-columns: repeat(2, minmax(0, 1fr));
    }
    @media (max-width: 820px) { .report-v2-next-grid { grid-template-columns: 1fr; } }
    .report-v2-next-col-title {
      font-size: 11px; font-weight: 900; letter-spacing: 0.12em;
      text-transform: uppercase; color: var(--ink-navy); margin: 0 0 8px 0;
    }
    .report-v2-next-list { display: flex; flex-direction: column; gap: 8px; margin: 0; padding: 0; list-style: none; }
    .report-v2-next-item {
      padding: 10px 12px; border-radius: 12px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.08);
      display: grid; grid-template-columns: minmax(0, 1fr) auto;
      gap: 10px; align-items: stretch;
    }
    .report-v2-next-item-question { background: var(--surface-pale-cool); border-color: var(--border-pale); }
    .report-v2-next-item-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
    .report-v2-next-item-text {
      margin: 0; font-size: 13.5px; font-weight: 700; color: var(--ink-navy); line-height: 1.45;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis; cursor: help;
    }
    .report-v2-next-item-reason {
      margin: 0; font-size: 12.5px; line-height: 1.5; color: var(--ink-slate);
    }
    .report-v2-next-item-actions { display: flex; flex-direction: column; align-items: flex-end; }
    .report-v2-next-item-actions-row {
      display: inline-flex; gap: 6px; align-items: center; margin-top: auto;
    }
    /* Equalize tag-chip heights inside Watch-next / Ask-or-track rows.
       Chips with a resolved asset icon render ~28px tall (22px icon
       + 3px+3px padding); chips that fall back to text-only render
       ~22px. The 6px delta cascades into card height via the grid's
       default align-items: stretch, making the Watch-next column look
       taller than the Ask-or-track column. Pinning a min-height on
       the chip (and on the actions column as a whole) keeps both
       columns visually balanced regardless of icon resolution. */
    .report-v2-next-item .topic-chip {
      min-height: 28px;
      box-sizing: border-box;
    }
    .report-v2-next-item-actions { min-height: 28px; }
    .report-v2-track-btn {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 4px 10px; border-radius: 999px;
      background: var(--surface-pale-cool); color: var(--ink-navy); border: 1px solid var(--border-cool);
      font-size: 10.5px; font-weight: 800; letter-spacing: 0.05em; text-transform: uppercase;
      cursor: pointer; text-decoration: none;
    }
    .report-v2-track-btn::before {
      content: ""; display: inline-block;
      width: 11px; height: 11px; margin-right: 5px;
      background: currentColor;
      -webkit-mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path d='M4 2.4h8a.6.6 0 0 1 .6.6v10.4l-4.6-2.8-4.6 2.8V3a.6.6 0 0 1 .6-.6Z'/></svg>") center/contain no-repeat;
              mask: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'><path d='M4 2.4h8a.6.6 0 0 1 .6.6v10.4l-4.6-2.8-4.6 2.8V3a.6.6 0 0 1 .6-.6Z'/></svg>") center/contain no-repeat;
    }
    .report-v2-track-btn:hover { background: var(--surface-mint); }
    .report-v2-track-btn-tracked { background: var(--positive-text-deep); color: var(--surface-white); border-color: var(--positive-text-deep); }
    /* Secondary "Track anyway" on Watch-next column — less prominent */
    .report-v2-track-btn-secondary {
      opacity: 0.6;
      font-size: 9.5px;
    }
    .report-v2-track-btn-secondary:hover { opacity: 1; }
    /* is-tracked state: green pill, hover reveals "Untrack" intent */
    .report-v2-track-btn.is-tracked {
      background: var(--positive-surface, #eaf5ef);
      color: var(--positive-text-deep, #1a6640);
      border-color: var(--positive-border, #a8d5b5);
      cursor: pointer;
    }
    .report-v2-track-btn.is-tracked:hover {
      background: var(--negative-surface, #fdecea);
      color: var(--negative-text, #c0392b);
      border-color: var(--negative-border, #f5c6c2);
    }
    /* ---------- Source summary ---------- */
    .report-v2-source-stats {
      display: flex; gap: 14px; flex-wrap: wrap; margin: 0 0 12px 0;
      font-size: 13px; color: var(--ink-slate);
    }
    .report-v2-source-stat-num { font-size: 22px; font-weight: 900; color: var(--ink-navy); }
    .report-v2-source-list { display: flex; flex-direction: column; gap: 8px; margin: 0; padding: 0; list-style: none; }
    .report-v2-source-item {
      display: flex; align-items: flex-start; gap: 10px;
      padding: 10px 12px; border-radius: 10px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.08);
    }
    .report-v2-source-role {
      padding: 2px 8px; border-radius: 10px;
      font-size: 10px; font-weight: 900; letter-spacing: 0.06em; text-transform: uppercase;
      background: var(--surface-pale-cool); color: var(--ink-navy); border: 1px solid var(--border-cool);
      /* Long role labels clip to 2 lines max; full text shows on
         hover (rule below) and is also exposed via the title=
         attribute for accessibility.
         Use integer px line-height + matching max-height so the
         box can't grow tall enough to peek a 3rd-line sliver
         under the ellipsis (the previous 1.25 × 10px rounded
         unevenly across browsers). */
      max-width: 100%;
      line-height: 12px;
      max-height: 28px;             /* 2 × 12px + 2 + 2 padding */
      overflow: hidden;
      text-overflow: ellipsis;
      display: -webkit-box;
      -webkit-line-clamp: 2;
      line-clamp: 2;
      -webkit-box-orient: vertical;
      word-break: break-word;
      cursor: help;
      position: relative;
    }
    /* On hover, render a styled bubble showing the full role text via a
       ::after pseudo-element fed from `data-role-tooltip`. The pill
       itself does NOT expand — clipped text stays clipped; the full
       text appears as a floating tooltip above. The native title=
       attribute stays as an accessibility fallback. */
    .report-v2-source-role[data-role-tooltip]::after {
      content: attr(data-role-tooltip);
      position: absolute;
      left: 50%; bottom: calc(100% + 6px);
      transform: translateX(-50%) translateY(4px);
      background: var(--ink-navy); color: var(--surface-cream);
      padding: 6px 10px; border-radius: 8px;
      font-size: 11px; font-weight: 700; letter-spacing: 0.04em;
      line-height: 1.35; text-transform: uppercase;
      white-space: normal; word-break: break-word;
      max-width: 220px; min-width: 80px; width: max-content;
      box-shadow: 0 6px 18px rgba(28, 51, 67, 0.22);
      pointer-events: none; z-index: 30;
      opacity: 0; visibility: hidden;
      transition: opacity 120ms ease, transform 120ms ease, visibility 0s linear 120ms;
    }
    .report-v2-source-role[data-role-tooltip]:hover::after,
    .report-v2-source-role[data-role-tooltip]:focus-visible::after {
      opacity: 1; visibility: visible;
      transform: translateX(-50%) translateY(0);
      transition: opacity 120ms ease, transform 120ms ease, visibility 0s;
    }
    .report-v2-source-role-primary { background: var(--ink-navy); color: var(--surface-cream); border-color: var(--ink-navy); }
    .report-v2-source-role-challenge { background: var(--surface-warm-warning); color: var(--danger-text-deep); border-color: var(--danger-border-soft); }
    .report-v2-source-body { flex: 1 1 auto; min-width: 0; }
    .report-v2-source-title {
      margin: 0; font-size: 13.5px; font-weight: 800; color: var(--ink-navy);
      line-height: 1.4;
      /* Hold back 5% so the title's right edge never butts up against
         the relevance / influence pill pinned to the source card's
         top-right corner. */
      max-width: 95%;
    }
    .report-v2-source-meta { font-size: 11.5px; color: var(--ink-slate); margin-top: 2px; }
    .report-v2-source-contribution {
      margin: 4px 0 0 0; font-size: 12.5px; line-height: 1.5; color: var(--ink-slate);
    }
    .report-v2-source-caveat {
      margin-top: 12px; padding: 8px 12px; border-radius: 10px;
      background: var(--surface-warm); border-left: 3px solid var(--brand-bronze);
      font-size: 12.5px; line-height: 1.55; color: var(--bronze-deep);
    }
    /* ---------- Feedback ---------- */
    .report-v2-feedback-scale { display: flex; flex-wrap: wrap; gap: 8px; justify-content: center; }
    .report-v2-feedback-chip {
      display: inline-flex; align-items: center; flex-direction: column; gap: 2px;
      padding: 8px 14px; border-radius: 14px;
      border: 1px solid var(--border-cool); background: var(--surface-white); color: var(--ink-navy);
      cursor: pointer; min-width: 64px; text-align: center;
      transition: background 0.15s ease, border-color 0.15s ease, transform 0.15s ease;
    }
    .report-v2-feedback-chip:hover { background: var(--surface-pale-cool); transform: translateY(-1px); }
    .report-v2-feedback-chip.selected { background: var(--ink-navy); border-color: var(--ink-navy); color: var(--surface-white); }
    .report-v2-feedback-chip span { font-size: 15px; font-weight: 800; line-height: 1; }
    .report-v2-feedback-chip small {
      font-size: 10px; letter-spacing: 0.05em; text-transform: uppercase;
      color: inherit; opacity: 0.7;
    }
    /* Quick-tag chips — mirrors the material report's feedback row.
       Toggle on click; selection lights up dark navy. */
    .report-v2-feedback-quick-chips {
      display: flex; flex-wrap: wrap; gap: 6px;
      justify-content: center; margin-top: 12px;
    }
    .report-v2-feedback-quick-chip {
      padding: 5px 12px; border-radius: 999px;
      border: 1px solid var(--border-cool); background: var(--surface-white); color: var(--ink-slate);
      font-size: 11px; font-weight: 700; letter-spacing: 0.04em;
      cursor: pointer;
      transition: background 0.15s ease, border-color 0.15s ease;
    }
    .report-v2-feedback-quick-chip:hover {
      background: var(--surface-pale-cool); border-color: var(--ink-cool-grey-pale);
    }
    .report-v2-feedback-quick-chip.selected {
      background: var(--ink-navy); border-color: var(--ink-navy); color: var(--surface-white);
    }
    /* Match material's compact-then-expand textarea so the feedback box
       feels light by default and only grows when the user is actively
       writing. */
    .report-v2-feedback-card textarea {
      width: 100%;
      min-height: 36px;
      height: 36px;
      max-height: 36px;
      padding: 8px 12px; border-radius: 12px;
      border: 1px solid var(--border-cool); background: var(--surface-white); color: var(--ink-navy);
      font-family: inherit; font-size: 13.5px; line-height: 1.55;
      margin-top: 14px; resize: none;
      overflow: hidden;
      transition: height 0.22s ease, max-height 0.22s ease, padding 0.22s ease, box-shadow 0.15s ease, border-color 0.15s ease;
    }
    .report-v2-feedback-card textarea:focus,
    .report-v2-feedback-card textarea:not(:placeholder-shown) {
      outline: none; border-color: var(--ink-navy); box-shadow: 0 0 0 3px rgba(28, 51, 67, 0.08);
      height: 120px; max-height: none; padding: 10px 12px;
      overflow: auto; resize: vertical;
    }
    .report-v2-feedback-status {
      margin: 10px 0 0 0; text-align: left; font-size: 12px; color: var(--positive-text-deep);
    }
    .report-v2-feedback-status.is-error { color: var(--danger-text-deep); }
    /* Empty-state placeholder used inside cards that render no content. */
    .report-v2-empty { color: var(--ink-muted); font-size: 13px; font-style: italic; }

    /* ---------- Section intros (narrative paragraphs above widget cards) ----------
       Single paragraph printed above the widget grid in each major section.
       Italic + indented left rule signals "read this as connective tissue
       between the cards below." Hidden entirely when full_report doesn't
       supply the narrative for that section. */
    .report-v2-section-intro {
      margin: 0 0 14px 0;
      padding-left: 14px;
      border-left: 3px solid var(--border-cool);
      font-size: 14.5px; line-height: 1.65; color: var(--ink-slate);
      font-style: italic;
      text-align: justify; text-wrap: pretty; -webkit-hyphens: auto; text-justify: inter-word; hyphens: auto;
    }
    /* Evidence quality notes — detailed-report-only research-audit block
       appended below the four signal columns. */
    .report-v2-evidence-notes {
      margin-top: 14px;
      padding: 10px 14px; border-radius: 10px;
      background: var(--surface-pale-cool);
      border: 1px solid var(--border-pale);
    }
    .report-v2-evidence-notes-kicker {
      font-size: 11px; font-weight: 900; letter-spacing: 0.12em;
      text-transform: uppercase; color: var(--ink-navy); margin: 0 0 6px 0;
    }
    .report-v2-evidence-notes-body {
      margin: 0; font-size: 13.5px; line-height: 1.6; color: var(--ink-navy);
    }
    /* ---------- Final Synthesis ----------
       Closing prose section. Three small verdict cards underneath. Visually
       book-ends the page (mirrors the Analyst Brief at the top). */
    .report-v2-final-synthesis-prose {
      max-width: 760px; margin: 0 auto 14px auto;
      padding-left: 16px;
      border-left: 3px solid var(--positive-text-deep);
    }
    .report-v2-final-synthesis-paragraph {
      margin: 0 0 12px 0;
      font-size: 15px; line-height: 1.65; color: var(--ink-navy);
      text-align: justify; text-wrap: pretty; -webkit-hyphens: auto; text-justify: inter-word; hyphens: auto;
    }
    .report-v2-final-synthesis-paragraph:last-child { margin-bottom: 0; }
    .report-v2-final-synthesis-cards {
      display: grid; gap: 10px; grid-template-columns: repeat(3, minmax(0, 1fr));
      margin-top: 4px;
    }
    @media (max-width: 820px) {
      .report-v2-final-synthesis-cards { grid-template-columns: 1fr; }
    }
    .report-v2-final-synthesis-card {
      padding: 12px 14px; border-radius: 12px;
      background: var(--surface-white);
      border: 1px solid rgba(28, 51, 67, 0.08);
      border-left-width: 3px;
    }
    .report-v2-final-synthesis-card-implication { border-left-color: var(--positive-text-deep); }
    .report-v2-final-synthesis-card-change      { border-left-color: var(--brand-bronze); background: var(--surface-warm); border-color: var(--warning-border-soft); }
    .report-v2-final-synthesis-card-question    { border-left-color: var(--ink-slate); }
    .report-v2-final-synthesis-kicker {
      font-size: 10.5px; font-weight: 900; letter-spacing: 0.10em;
      text-transform: uppercase; color: var(--ink-navy);
      display: block; margin-bottom: 4px;
    }
    .report-v2-final-synthesis-body {
      margin: 0; font-size: 13.5px; line-height: 1.55; color: var(--ink-navy);
    }

    /* ---------- Ongoing questions ----------
       Per-row layout: question + optional update copy on the left,
       Track + AI★ on the right. "Touched today" rows get a green
       left-rule accent so the user can scan which rows actually moved. */
    .report-v2-ongoing-list {
      display: flex; flex-direction: column; gap: 10px;
      margin: 0; padding: 0; list-style: none;
    }
    .report-v2-ongoing-item {
      display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 12px;
      padding: 12px 14px; border-radius: 12px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.08);
      border-left-width: 3px; border-left-color: rgba(28, 51, 67, 0.18);
    }
    .report-v2-ongoing-item-touched {
      background: var(--surface-pale-cool);
      border-color: var(--surface-mint-deep);
      border-left-color: var(--positive-text-deep);
    }
    .report-v2-ongoing-body { display: flex; flex-direction: column; gap: 4px; min-width: 0; }
    .report-v2-ongoing-question {
      margin: 0;
      font-size: 14px; font-weight: 700; color: var(--ink-navy); line-height: 1.45;
    }
    .report-v2-ongoing-update {
      margin: 0;
      font-size: 13px; line-height: 1.55; color: var(--ink-navy);
    }
    .report-v2-ongoing-meta {
      display: flex; flex-wrap: wrap; gap: 6px; align-items: center; margin-top: 4px;
    }
    .report-v2-ongoing-origin {
      font-size: 11px; color: var(--ink-slate); font-weight: 600;
      letter-spacing: 0.02em;
    }
    .report-v2-ongoing-actions {
      display: flex; flex-direction: column; align-items: flex-end; gap: 6px;
      flex-shrink: 0;
    }
    @media (max-width: 720px) {
      .report-v2-ongoing-item { grid-template-columns: 1fr; }
      .report-v2-ongoing-actions { flex-direction: row; justify-content: flex-end; }
    }

    /* Show-more button for the Ongoing Questions list. Mirrors the
       button-light affordance used elsewhere but tuned for an in-card
       reveal so it doesn't compete with the section header. */
    .report-v2-ongoing-show-more {
      display: inline-flex; align-items: center; justify-content: center;
      margin-top: 10px;
      padding: 6px 14px; border-radius: 999px;
      background: var(--surface-white); border: 1px solid var(--border-cool);
      color: var(--ink-navy);
      font-size: 11px; font-weight: 800; letter-spacing: 0.06em;
      text-transform: uppercase;
      cursor: pointer;
      transition: background 0.15s ease, border-color 0.15s ease;
    }
    .report-v2-ongoing-show-more:hover {
      background: var(--surface-pale-cool); border-color: var(--ink-cool-grey-pale);
    }

    /* HTML `hidden` attribute respect — the ongoing-list rows use
       display:grid above, which has higher specificity than the browser's
       user-agent [hidden] rule. Without this override the Show-more
       toggle no-ops because the rows render visible regardless. */
    .report-v2-ongoing-item[hidden] { display: none !important; }

    /* ---------- Niche assets ----------
       Two-column item: left = ticker + direction sliver (color-coded by
       bull/bear/unclear), right = name + score chip + speakers + rationale
       + actions. Sits between the broad Market & Asset Implications
       grid (themes) and the Related Transcripts list (per-source).
       Same data as the legacy report; V2 typography. */
    .report-v2-niche-list {
      display: flex; flex-direction: column; gap: 10px;
      margin: 0; padding: 0; list-style: none;
    }
    .report-v2-niche-item {
      display: grid; grid-template-columns: 110px minmax(0, 1fr); gap: 12px;
      padding: 0; border-radius: 12px; overflow: hidden;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.1);
    }
    .report-v2-niche-item-bullish { border-left: 3px solid var(--positive-text-deep); }
    .report-v2-niche-item-bearish { border-left: 3px solid var(--danger-text-deep); }
    .report-v2-niche-item-unclear { border-left: 3px solid var(--ink-muted); }
    .report-v2-niche-side {
      display: flex; flex-direction: column; align-items: center; justify-content: center;
      padding: 12px 8px;
      text-align: center;
      background: var(--surface-white);
      border-right: 1px solid rgba(28, 51, 67, 0.06);
    }
    .report-v2-niche-item-bullish .report-v2-niche-side { background: linear-gradient(180deg, var(--surface-pale-cool) 0%, var(--surface-mint) 100%); }
    .report-v2-niche-item-bearish .report-v2-niche-side { background: linear-gradient(180deg, var(--surface-warm-warning) 0%, var(--surface-warm-warning) 100%); }
    .report-v2-niche-ticker {
      font-size: 14px; font-weight: 900; color: var(--ink-navy); letter-spacing: 0.04em;
    }
    .report-v2-niche-direction {
      margin-top: 4px;
      font-size: 10px; font-weight: 800; letter-spacing: 0.08em;
      text-transform: uppercase; color: var(--ink-slate);
    }
    .report-v2-niche-item-bullish .report-v2-niche-direction { color: var(--positive-text-deep); }
    .report-v2-niche-item-bearish .report-v2-niche-direction { color: var(--danger-text-deep); }
    .report-v2-niche-body {
      padding: 10px 14px;
      display: flex; flex-direction: column; gap: 6px; min-width: 0;
    }
    .report-v2-niche-head {
      display: flex; flex-wrap: wrap; gap: 6px; align-items: center;
    }
    .report-v2-niche-name {
      margin: 0; font-size: 14.5px; font-weight: 800; color: var(--ink-navy); line-height: 1.3;
      flex: 1 1 auto; min-width: 0;
    }
    .report-v2-niche-speakers {
      font-size: 11.5px; color: var(--ink-slate);
      display: flex; flex-wrap: wrap; gap: 6px; align-items: baseline;
    }
    .report-v2-niche-speakers-kicker {
      font-size: 10.5px; font-weight: 900; letter-spacing: 0.08em;
      text-transform: uppercase; color: var(--ink-navy);
    }
    .report-v2-niche-speaker-link {
      color: var(--ink-slate); text-decoration: none; font-weight: 700;
    }
    .report-v2-niche-speaker-link:hover { text-decoration: underline; }
    .report-v2-niche-rationale {
      margin: 0; font-size: 13px; line-height: 1.55; color: var(--ink-navy);
      text-align: justify; text-wrap: pretty; -webkit-hyphens: auto; text-justify: inter-word; hyphens: auto;
    }
    .report-v2-niche-actions {
      display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
      margin-top: 4px;
    }
    .report-v2-niche-tv-link {
      display: inline-flex; align-items: center;
      padding: 4px 10px; border-radius: 999px;
      background: var(--surface-white); border: 1px solid var(--border-cool); color: var(--ink-navy);
      font-size: 10.5px; font-weight: 800; letter-spacing: 0.05em; text-transform: uppercase;
      text-decoration: none;
    }
    .report-v2-niche-tv-link:hover { background: var(--surface-pale-cool); }
    @media (max-width: 640px) {
      .report-v2-niche-item { grid-template-columns: 1fr; }
      .report-v2-niche-side {
        flex-direction: row; gap: 10px; justify-content: flex-start;
        padding: 8px 14px; border-right: 0;
        border-bottom: 1px solid rgba(28, 51, 67, 0.06);
      }
    }

    /* Section J — Source package list. Two-column rows (thumb + body)
       with V2 chip palette. Keeps visual density lower than the legacy
       page (no search/sort/filter chrome on V2). */
    .report-v2-source-subhead {
      font-size: 11px; font-weight: 900; letter-spacing: 0.12em;
      text-transform: uppercase; color: var(--ink-navy);
      margin: 12px 0 6px 0;
    }
    .report-v2-source-subhead-package { margin-top: 18px; }
    /* Transcript count next to the "Source package" title — kept
       visibly smaller than the uppercase title so the title remains
       the anchor and the count reads as quiet metadata. */
    .report-v2-source-package-summary-count {
      margin-left: 8px;
      font-size: 9.5px;
      font-weight: 600;
      letter-spacing: 0.02em;
      text-transform: none;
      color: var(--ink-muted);
    }
    .report-v2-source-package {
      display: flex; flex-direction: column; gap: 10px;
      margin: 0; padding: 0; list-style: none;
    }
    /* Source-package card — vertical stack: thumbnail on top (with a
       YouTube play badge when video_url exists), then a one-line
       title, then a single muted meta line with channel/speaker/date
       icons. Whole card is click-to-open via the rec-card layer
       animation; the thumb anchor stays its own click target so the
       miniature opens YouTube. */
    .report-v2-source-package-item {
      position: relative;
      display: grid;
      grid-template-columns: 104px minmax(0, 1fr);
      gap: 12px;
      padding: 10px 12px;
      padding-right: 40px;   /* room for the corner AI★ */
      border-radius: 10px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.1);
      min-width: 0;
      align-items: start;
    }
    /* Left grid column: stacks the thumb and the publish date so the
       date renders directly under the miniature. Width-locked to match
       the grid template's first column so the date never wider-than the
       thumb makes the column expand. */
    .report-v2-source-package-left {
      display: flex;
      flex-direction: column;
      gap: 4px;
      width: 104px;
      min-width: 0;
    }
    .report-v2-source-package-date {
      /* Inherits .report-v2-source-package-meta-line (icon + text + muted
         styling). One step smaller than the channel / speaker lines so
         the date reads as quieter metadata under the miniature. */
      max-width: 104px;
      font-size: 10px;
    }
    .report-v2-source-package-date .report-v2-source-package-meta-icon {
      width: 9px; height: 9px;
    }
    .report-v2-source-package-thumb {
      width: 104px;
      height: 58px;
      border-radius: 8px;
      background: var(--surface-mint); overflow: hidden; position: relative;
    }
    .report-v2-source-package-thumb img { width: 100%; height: 100%; display: block; object-fit: cover; }
    .report-v2-source-package-thumb-link {
      display: block; width: 100%; height: 100%; position: relative;
    }
    .report-v2-source-package-thumb-fallback {
      display: flex; align-items: center; justify-content: center;
      width: 100%; height: 100%;
      font-size: 11px; font-weight: 800; letter-spacing: 0.06em;
      text-transform: uppercase; color: var(--ink-muted);
    }
    /* YouTube play badge: red rounded rectangle pinned bottom-right
       of the thumbnail so the user reads the miniature as a play
       affordance. Subtle scale-up on hover reinforces the click target. */
    .report-v2-source-youtube-badge {
      position: absolute; bottom: 6px; right: 6px;
      display: inline-flex; align-items: center; justify-content: center;
      width: 28px; height: 20px;
      background: var(--rust-bright); border-radius: 5px;
      box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25);
      pointer-events: none;
      transition: transform 0.16s ease, background 0.16s ease;
    }
    .report-v2-source-youtube-badge svg { width: 11px; height: 11px; }
    .report-v2-source-package-thumb-link:hover .report-v2-source-youtube-badge {
      background: var(--rust-bright); transform: scale(1.08);
    }
    .report-v2-source-package-body { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
    /* Title clips to a single line so cards stay uniform-height in
       the 2-col grid. Weight + color dialled down so the title sits
       comfortably under the relevance chip in the top-right corner. */
    .report-v2-source-package-title {
      margin: 2px 0 0 0;
      font-size: 14px; font-weight: 600; color: var(--ink-slate);
      line-height: 1.3;
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
      padding-right: 96px; /* clear the absolute Relevance chip */
    }
    .report-v2-source-package-title a { color: inherit; text-decoration: none; }
    .report-v2-source-package-title a:hover { text-decoration: underline; }
    /* Meta line: channel + speaker(s) + date inline, each prefixed by
       a small icon. Matches the "lighter and with icons" pattern used
       on best-transcript and related cards above. */
    .report-v2-source-package-meta {
      font-size: 11px; color: var(--ink-muted); font-weight: 500;
      display: flex; flex-wrap: wrap; gap: 8px; align-items: center;
      line-height: 1.3;
    }
    .report-v2-source-package-meta-line {
      display: inline-flex; align-items: center; gap: 3px;
      min-width: 0;
      max-width: 100%;
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
      /* Carry the typography on the line class itself so it renders
         the same size/weight/color whether nested in .meta or pulled
         out (e.g. the date, which now sits in the left column under
         the thumb). Previously these were inherited from the .meta
         parent and the orphaned date rendered at the default 14.5px. */
      font-size: 11px;
      font-weight: 500;
      line-height: 1.3;
      color: var(--ink-muted);
      text-decoration: none;
    }
    .report-v2-source-package-meta-link:hover .report-v2-source-package-meta-text {
      color: var(--ink-navy); text-decoration: underline;
    }
    .report-v2-source-package-meta-line .entity-page-link-icon {
      width: 11px; height: 11px; opacity: 0.7; flex-shrink: 0;
    }
    .report-v2-source-package-meta-icon {
      width: 11px; height: 11px; color: var(--ink-muted); flex-shrink: 0;
    }
    .report-v2-source-package-meta-text {
      display: inline-block;
      overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
      min-width: 0;
      max-width: 140px;
      vertical-align: middle;
    }
    /* Relevance chip pinned to the TOP-right corner of the card. */
    .report-v2-source-package-relevance {
      position: absolute;
      top: 10px; right: 12px;
      font-size: 9.5px;
      letter-spacing: 0.02em;
      white-space: nowrap;
      z-index: 2;
    }
    /* AI★ pinned to the BOTTOM-right corner so it doesn't fight
       the card-level click surface (whole card opens the analysis
       with a layer animation via the rec-card-clickable handler). */
    .report-v2-source-package-ai-corner {
      position: absolute;
      bottom: 8px; right: 8px;
      z-index: 2;
    }

    /* Source package controls — lean V2 chrome above the transcript list. */
    .report-v2-source-controls {
      display: flex; flex-wrap: wrap; gap: 10px; align-items: center;
      padding: 10px 12px; margin: 4px 0 12px 0;
      border: 1px solid rgba(28, 51, 67, 0.08); border-radius: 12px;
      background: var(--surface-pale-cool);
    }
    .report-v2-source-control-label {
      font-size: 10.5px; font-weight: 900; letter-spacing: 0.10em;
      text-transform: uppercase; color: var(--ink-muted);
    }
    .report-v2-source-control-group {
      display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap;
    }
    .report-v2-source-search {
      flex: 1 1 220px; min-width: 200px;
      display: inline-flex; align-items: center; gap: 6px;
      padding: 4px 10px; border-radius: 999px;
      background: var(--surface-white); border: 1px solid var(--border-cool);
    }
    .report-v2-source-search-icon { color: var(--ink-muted); font-size: 14px; }
    .report-v2-source-search input {
      flex: 1 1 auto; min-width: 0;
      border: 0; outline: none; background: transparent;
      font-size: 13px; color: var(--ink-navy);
      padding: 4px 0;
    }
    .report-v2-source-sort-chip,
    .report-v2-source-filter-chip {
      display: inline-flex; align-items: center; gap: 4px;
      padding: 4px 10px; border-radius: 999px;
      background: var(--surface-white); border: 1px solid var(--border-cool); color: var(--ink-slate);
      font-size: 10.5px; font-weight: 800; letter-spacing: 0.05em;
      text-transform: uppercase; cursor: pointer;
      transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
    }
    .report-v2-source-sort-chip:hover,
    .report-v2-source-filter-chip:hover { background: var(--surface-pale-cool); }
    .report-v2-source-sort-chip.is-active {
      background: var(--ink-navy); color: var(--surface-cream); border-color: var(--ink-navy);
    }
    .report-v2-source-filter-chip.is-active {
      background: var(--ink-navy); color: var(--surface-cream); border-color: var(--ink-navy);
    }
    .report-v2-source-sort-arrow {
      font-size: 11px; opacity: 0.7;
    }
    .report-v2-source-select {
      padding: 4px 10px; border-radius: 999px;
      background: var(--surface-white); border: 1px solid var(--border-cool); color: var(--ink-navy);
      font-size: 12px; font-weight: 700; letter-spacing: 0.02em;
      cursor: pointer;
    }
    .report-v2-source-empty {
      margin: 8px 0; padding: 8px 12px; border-radius: 8px;
      background: var(--surface-white); border: 1px dashed rgba(28, 51, 67, 0.18);
      color: var(--ink-muted); font-size: 12.5px; font-style: italic;
    }
    .report-v2-source-package-item[hidden] { display: none !important; }

    /* ---------- Detailed sections ----------
       Legacy section bodies (Macro Regime Shift, Energy Shock, etc.).
       Rendered as flowing prose with subheaders — this is where V2's
       depth-vs-widget balance is restored. Each section heading reads
       like an analyst note's H3; the body is justified paragraph text. */
    .report-v2-detailed-list {
      display: flex; flex-direction: column; gap: 18px;
      max-width: 820px;
    }
    .report-v2-detailed-section {
      padding-left: 16px;
      border-left: 3px solid var(--border-pale);
    }
    .report-v2-detailed-section:hover {
      border-left-color: var(--ink-slate);
    }
    .report-v2-detailed-heading {
      margin: 0 0 8px 0;
      font-size: 16px; font-weight: 900; color: var(--ink-navy);
      letter-spacing: 0.01em;
    }
    .report-v2-detailed-body {
      font-size: 14.5px; line-height: 1.7; color: var(--ink-navy);
    }
    /* Linkifier output: `[Transcript N]` anchors should look like
       inline links, not buttons. */
    .report-v2-detailed-body a.report-transcript-ref,
    .report-v2-detailed-body a.material-source-ref {
      color: var(--ink-slate); font-weight: 700; text-decoration: none;
      border-bottom: 1px dashed rgba(44, 79, 143, 0.4);
    }
    .report-v2-detailed-body a.report-transcript-ref:hover,
    .report-v2-detailed-body a.material-source-ref:hover {
      border-bottom-style: solid;
    }
    /* Source-package style block embedded inside paragraphs, when the
       legacy linkifier produces inline source chips. */
    .report-v2-detailed-body p { margin: 0 0 10px 0; text-align: justify; text-wrap: pretty; -webkit-hyphens: auto; text-justify: inter-word; hyphens: auto; }
    .report-v2-detailed-body p:last-child { margin-bottom: 0; }

    /* Per-section transcript recommendations. Two-column thumb + body
       cards in a tight row beneath each detailed section body. Keeps the
       visual cue that "these are the sources behind this paragraph"
       without dragging the user out of the prose. */
    .report-v2-detailed-recs {
      margin-top: 10px; padding: 10px 12px;
      border-radius: 10px;
      background: var(--surface-pale-cool);
      border: 1px solid rgba(28, 51, 67, 0.08);
      /* Match the body's reading-width cap so the recs block ends at
         the same right edge as the paragraphs and bottom-line above. */
      max-width: 760px;
      box-sizing: border-box;
    }
    .report-v2-detailed-recs-kicker {
      display: block; margin-bottom: 6px;
      font-size: 10.5px; font-weight: 900; letter-spacing: 0.10em;
      text-transform: uppercase; color: var(--ink-navy);
    }
    .report-v2-detailed-recs-list {
      list-style: none; margin: 0; padding: 0;
      display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px;
    }
    @media (max-width: 720px) {
      .report-v2-detailed-recs-list { grid-template-columns: 1fr; }
    }
    .report-v2-detailed-recs-item {
      display: grid; grid-template-columns: 88px minmax(0, 1fr); gap: 10px;
      padding: 8px; border-radius: 8px;
      background: var(--surface-white); border: 1px solid rgba(28, 51, 67, 0.08);
    }
    .report-v2-detailed-recs-thumb {
      width: 88px; height: 50px; border-radius: 6px;
      overflow: hidden; background: var(--surface-mint);
    }
    .report-v2-detailed-recs-thumb img,
    .report-v2-detailed-recs-thumb a { display: block; width: 100%; height: 100%; }
    .report-v2-detailed-recs-thumb img { object-fit: cover; }
    .report-v2-detailed-recs-thumb-fallback {
      display: flex; align-items: center; justify-content: center;
      width: 100%; height: 100%;
      font-size: 10px; font-weight: 800; letter-spacing: 0.06em;
      text-transform: uppercase; color: var(--ink-muted);
    }
    .report-v2-detailed-recs-body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
    .report-v2-detailed-recs-title {
      margin: 0; font-size: 12.5px; font-weight: 800; color: var(--ink-navy);
      line-height: 1.35;
      display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
    }
    .report-v2-detailed-recs-title a { color: inherit; text-decoration: none; }
    .report-v2-detailed-recs-title a:hover { text-decoration: underline; }
    .report-v2-detailed-recs-meta {
      font-size: 10.5px; color: var(--ink-slate); font-weight: 600;
      display: flex; flex-wrap: wrap; gap: 4px; align-items: center;
    }

    /* ---------- Rail polish: nested + scroll-spy ----------
       Detailed Analysis acts as a parent rail entry with indented
       sub-anchors below it. Smooth scroll is implemented per-anchor via
       scroll-margin-top so the section lands below the top bar, NOT a
       page-wide scroll-behavior (which can fight the analyst's intent
       when they want a snap-to-top via the topbar). */
    html { scroll-behavior: smooth; }
    .report-v2-card,
    .report-v2-detailed-section { scroll-margin-top: 16px; }
    .report-v2-rail a.is-active {
      background: var(--ink-navy); color: var(--surface-cream);
      font-weight: 700;
    }
    .report-v2-rail-parent {
      font-weight: 800; letter-spacing: 0.02em;
    }
    .report-v2-rail-sublist {
      display: flex; flex-direction: column; gap: 2px;
      margin: 2px 0 4px 0;
      padding-left: 8px;
      border-left: 2px solid rgba(28, 51, 67, 0.10);
    }
    .report-v2-rail-sublink {
      font-size: 11.5px;
      padding-left: 8px !important;
      color: var(--ink-slate);
    }
    .report-v2-rail-sublink.is-active {
      background: rgba(28, 51, 67, 0.08); color: var(--ink-navy);
    }

    /* ---------- Detailed section: bottom line ----------
       Subtle one-liner appended below the section body. Faded left rule
       keeps it close to the prose without competing with the recs row. */
    .report-v2-detailed-bottom-line {
      margin: 10px 0 0 0;
      padding: 6px 12px;
      border-left: 2px solid var(--border-cool);
      background: rgba(28, 51, 67, 0.03);
      border-radius: 0 6px 6px 0;
      font-size: 13.5px; line-height: 1.55; color: var(--ink-navy);
      font-style: italic;
      /* Match the body's reading-width cap so the bottom line ends
         at the same right edge as the paragraphs above it. */
      max-width: 760px;
      box-sizing: border-box;
    }
    .report-v2-detailed-bottom-line-kicker {
      font-style: normal; font-weight: 900;
      font-size: 10.5px; letter-spacing: 0.10em;
      text-transform: uppercase; color: var(--ink-navy);
      margin-right: 4px;
    }

    /* ---------- Embedded transcript cards (per-section recs) ----------
       Inherits the Related-Workspace card class; small size adjustments
       so the cards feel embedded rather than standalone. */
    .report-v2-detailed-recs-list {
      display: grid; grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 10px; margin: 6px 0 0 0; padding: 0; list-style: none;
    }
    @media (max-width: 820px) {
      .report-v2-detailed-recs-list { grid-template-columns: 1fr; }
    }
    .report-v2-detailed-rec-card {
      /* Tighten the standalone Related-card paddings inside the
         embedded context — gives the section body more breathing room. */
      padding: 10px 12px !important;
      grid-template-columns: 120px minmax(0, 1fr) !important;
      gap: 12px !important;
    }
    .report-v2-detailed-rec-card .report-v2-related-thumb {
      width: 120px; height: 68px;
    }
    .report-v2-detailed-rec-card .report-v2-related-title {
      font-size: 13.5px;
    }

    /* ============================================================
       2026-05-22 — Per-mode layout differentiation (Bug B / Bug H).
       The report shell carries `data-report-scope="<key>"` from the
       template; CSS reads it to hide / reorder cards so each mode
       produces a visibly different artifact instead of all five
       modes rendering as one homogeneous layout.

       Modes:
         - recap                  — default (no overrides)
         - transcript_recaps      — per-transcript focus; hide cross-cutting macro cards
         - macro_view             — lead with macro thesis framing (handled via Executive card tinting)
         - standalone_view        — synthesized view (default layout works)
         - agreement_vs_conflict  — emphasize the Detailed Analysis card; tweak its title block
         - risks_and_watchlist    — already differentiated by existing watchlist pills
       ============================================================ */

    /* ---------- transcript_recaps mode ---------- */
    /* The user picked "Transcript-by-transcript recap" — they want
       ONE labeled section per transcript, NOT the macro cross-cut
       cluster (Key Drivers / What Changed / Final synthesis). Hide
       those cards so the per-transcript Detailed Analysis card is
       the primary content the user sees. Executive read + Sources
       + Tracked / Watch Next stay because they still make sense
       in a per-transcript framing. */
    .report-v2-layout[data-report-scope="transcript_recaps"] #rv2-change,
    .report-v2-layout[data-report-scope="transcript_recaps"] #rv2-drivers,
    .report-v2-layout[data-report-scope="transcript_recaps"] #rv2-synthesis,
    .report-v2-layout[data-report-scope="transcript_recaps"] #rv2-niche,
    .report-v2-layout[data-report-scope="transcript_recaps"] #rv2-implications {
      display: none !important;
    }
    /* Same TOC entries on the rail should also hide so the user
       doesn't see broken jump links to cards that aren't rendered. */
    .report-v2-layout[data-report-scope="transcript_recaps"] .report-v2-rail-sublist a[href="#rv2-change"],
    .report-v2-layout[data-report-scope="transcript_recaps"] .report-v2-rail-sublist a[href="#rv2-drivers"],
    .report-v2-layout[data-report-scope="transcript_recaps"] .report-v2-rail-sublist a[href="#rv2-synthesis"] {
      display: none !important;
    }
    /* Promote the Detailed Analysis card visually — slightly more
       prominent border + title weight so it reads as the report's
       primary surface. */
    .report-v2-layout[data-report-scope="transcript_recaps"] #rv2-detailed {
      border-color: var(--positive-border-dark, var(--positive-border-dark));
      box-shadow: 0 4px 14px rgba(31, 107, 73, 0.08);
    }
    .report-v2-layout[data-report-scope="transcript_recaps"] #rv2-detailed .report-v2-card-title {
      color: var(--positive-text-deep, #2a6b3a);
    }

    /* ---------- agreement_vs_conflict mode ---------- */
    /* The user picked "Show agreements and disagreements". The
       Detailed Analysis card is the canonical surface for this
       mode too — but the LLM is instructed to organize sections
       around agreement vs conflict, so we visually mark the card
       with a "Agreement ↔ Conflict" sub-label and a calmer
       two-column layout for the sections (where viewport allows). */
    .report-v2-layout[data-report-scope="agreement_vs_conflict"] #rv2-detailed {
      border-color: var(--info-steel-deep, #4b6f8a);
    }
    .report-v2-layout[data-report-scope="agreement_vs_conflict"] #rv2-detailed .report-v2-detailed-list {
      display: grid;
      grid-template-columns: repeat(2, minmax(0, 1fr));
      gap: 14px;
    }
    @media (max-width: 980px) {
      .report-v2-layout[data-report-scope="agreement_vs_conflict"] #rv2-detailed .report-v2-detailed-list {
        grid-template-columns: 1fr;
      }
    }

    /* ---------- macro_view mode ---------- */
    /* The user picked "Macro view". The Executive read card is
       elevated visually — its prose carries the macro thesis,
       so tint the border + add a small "Macro thesis" eyebrow
       label via ::before so the user sees the mode reflected in
       the report itself, not just in metadata. */
    .report-v2-layout[data-report-scope="macro_view"] #rv2-exec {
      border-color: var(--brand-bronze, var(--brand-bronze));
      background: linear-gradient(180deg, #fdf8ec 0%, var(--surface-white, var(--surface-white)) 60%);
    }
    .report-v2-layout[data-report-scope="macro_view"] #rv2-exec .report-v2-card-head::before {
      content: "MACRO THESIS";
      /* 2026-05-30 — Force the eyebrow onto its OWN flex row above the
         h2 + "Fast conclusion" pair. Previously this sat as a third
         flex item between them, producing "MACRO THESIS · Executive
         read · FAST CONCLUSION" on a single line which read as
         broken. */
      display: block;
      flex-basis: 100%;
      width: 100%;
      order: -1;
      font-size: 10px;
      font-weight: 700;
      letter-spacing: 0.12em;
      color: var(--brand-bronze, var(--brand-bronze));
      margin-bottom: 2px;
    }

    /* ---------- risks_and_watchlist mode ---------- */
    /* Already differentiated by the watch-next card's existing
       pills; promote the watch-next + tracked-questions cards
       visually so they sit above the (now-quieter) detailed body. */
    .report-v2-layout[data-report-scope="risks_and_watchlist"] #rv2-next {
      border-color: var(--rust-deep, #b34929);
      box-shadow: 0 4px 14px rgba(179, 73, 41, 0.08);
    }
    .report-v2-layout[data-report-scope="risks_and_watchlist"] #rv2-next .report-v2-card-head::before {
      content: "RISKS & WATCHLIST";
      display: block;
      font-size: 10px;
      font-weight: 700;
      letter-spacing: 0.12em;
      color: var(--rust-deep, #b34929);
      margin-bottom: 6px;
    }

    /* ============================================================
       2026-05-22 — Per-transcript attribution block.
       Shown only in transcript_recaps mode (Jinja-gated on
       report_scope_key). Sits above the section heading and
       identifies WHICH transcript the section is about. ============================================================ */
    .report-v2-detailed-attribution {
      display: flex;
      flex-direction: column;
      gap: 2px;
      padding: 8px 12px;
      margin: -4px -4px 10px;
      background: rgba(31, 107, 73, 0.05);
      border-left: 3px solid var(--positive-border-dark, var(--positive-border-dark));
      border-radius: 4px;
    }
    /* 2026-05-22 — Thumbnail-bearing variant. When the source item
       has a `thumbnail_url`, the attribution head becomes a 2-col
       flex: 96px thumbnail on the left, text block on the right.
       Falls back to the text-only column layout above when no
       thumb exists. */
    .report-v2-detailed-attribution-with-thumb {
      flex-direction: row;
      align-items: center;
      gap: 12px;
    }
    .report-v2-detailed-attribution-thumb-link {
      display: inline-block;
      flex: 0 0 96px;
      line-height: 0;
      border-radius: 4px;
      overflow: hidden;
      text-decoration: none;
    }
    .report-v2-detailed-attribution-thumb {
      width: 96px;
      height: 54px;
      object-fit: cover;
      display: block;
      border-radius: 4px;
      flex: 0 0 96px;
    }
    .report-v2-detailed-attribution-text {
      display: flex;
      flex-direction: column;
      gap: 2px;
      min-width: 0;
      flex: 1 1 auto;
    }
    @media (max-width: 600px) {
      .report-v2-detailed-attribution-with-thumb {
        flex-direction: column;
        align-items: flex-start;
      }
      .report-v2-detailed-attribution-thumb,
      .report-v2-detailed-attribution-thumb-link {
        width: 100%;
        flex: 0 0 auto;
      }
      .report-v2-detailed-attribution-thumb {
        width: 100%;
        height: auto;
        aspect-ratio: 16 / 9;
      }
    }
    .report-v2-detailed-attribution-eyebrow {
      font-size: 9.5px;
      font-weight: 700;
      letter-spacing: 0.10em;
      text-transform: uppercase;
      color: var(--positive-text-deep, #2a6b3a);
    }
    .report-v2-detailed-attribution-title {
      font-size: 13.5px;
      font-weight: 600;
      color: var(--ink-navy, var(--ink-navy));
      text-decoration: none;
      line-height: 1.35;
    }
    a.report-v2-detailed-attribution-title:hover {
      color: var(--positive-text-deep, #2a6b3a);
      text-decoration: underline;
    }
    .report-v2-detailed-attribution-meta {
      font-size: 11.5px;
      color: var(--ink-muted, var(--ink-muted));
      display: flex;
      flex-wrap: wrap;
      gap: 0 6px;
      align-items: center;
    }
    .report-v2-detailed-attribution-sep {
      opacity: 0.6;
    }
    /* In transcript_recaps mode, the per-section "Best transcripts
       for this section" sub-card would duplicate the attribution
       head — hide it. The attribution block above already names
       the source transcript with a clickable link. */
    .report-v2-layout[data-report-scope="transcript_recaps"] .report-v2-detailed-section-per-transcript .report-v2-detailed-recs {
      display: none;
    }
