/*
 * signals.css — extracted from inline <style> in signals.html on 2026-05-31
 * Tier 2 / P2 of docs/plans/HIGH_PERFORMANCE_CLEANUP_PROGRAM.md.
 *
 * Maintain this file directly; it is no longer regenerated from HTML.
 */

/* === inline block 1/1 from signals.html === */
/* ── Reset/base scoped to v2 prototype ─────────────────────────── */
  .signals-v2 {
    --sv2-side-width: 240px;
    --sv2-detail-width: minmax(360px, 1.2fr);
    font-family: var(--ll-font-family, "DM Sans"), system-ui, sans-serif;
    color: var(--ll-text);
    max-width: 1480px;
    margin: 0 auto;
    /* Top padding clears the sticky LL site nav (~6rem tall). The original
       1rem put the hero under the nav, so the user could only see a sliver
       of it. Matches the .page class convention in styles-dataviz.css. */
    padding: 6rem 1.25rem 3rem;
  }
  @media (max-width: 720px) {
    .signals-v2 { padding: 5rem 1rem 2rem; }
  }
  .signals-v2 * { box-sizing: border-box; }

  /* SIG-HOME-1A · signed-out network proof register. The member workspace is
     not painted or exposed to assistive technology until auth is known. */
  html[data-signals-auth="public"] main.signals-v2.shell-content { max-width: min(1240px, 100%); }
  html[data-signals-auth="public"] .sv2-member,
  html[data-signals-auth="member"] .sv2-public { display: none; }
  .sv2-public { min-width: 0; color: var(--ll-text); }
  .sv2-public__opening {
    display: grid;
    grid-template-columns: minmax(0, .92fr) minmax(520px, 1.08fr);
    gap: clamp(2rem, 5vw, 5rem);
    align-items: center;
    min-height: min(670px, calc(100vh - var(--topbar-h) - 2.5rem));
    padding: clamp(2rem, 5vh, 4.5rem) 0 clamp(2.4rem, 7vh, 5.5rem);
    border-bottom: 1px solid var(--ll-border);
  }
  .sv2-public__intro { max-width: 580px; }
  .sv2-public__kicker,
  .sv2-public__register-label {
    margin: 0;
    color: var(--ll-accent);
    font-family: var(--ll-font-mono);
    font-size: .625rem;
    font-weight: 700;
    letter-spacing: .14em;
    line-height: 1.4;
    text-transform: uppercase;
  }
  .sv2-public__intro h1 {
    max-width: 11ch;
    margin: .7rem 0 1.2rem;
    color: var(--ll-text);
    font-size: clamp(2.8rem, 6vw, 5.5rem);
    font-weight: 900;
    letter-spacing: -.04em;
    line-height: .95;
    text-wrap: balance;
  }
  .sv2-public__lede {
    max-width: 56ch;
    margin: 0;
    color: var(--ll-text-muted);
    font-size: clamp(.98rem, 1.7vw, 1.12rem);
    line-height: 1.65;
  }
  .sv2-public__actions { display: flex; align-items: center; gap: 1rem; margin-top: 1.75rem; }
  .sv2-public__start,
  .sv2-public__signin,
  .sv2-public__retry {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: var(--ll-radius-sm);
    font-family: var(--ll-font-mono);
    font-size: .68rem;
    font-weight: 800;
    letter-spacing: .055em;
    line-height: 1;
    text-decoration: none;
    text-transform: uppercase;
  }
  .sv2-public__start { gap: .8rem; padding: .78rem 1rem; background: var(--gold); color: #211704; }
  .sv2-public__start:hover { background: var(--goldHi); color: #160f02; }
  .sv2-public__start span { transition: transform var(--t-fast); }
  .sv2-public__start:hover span { transform: translateX(3px); }
  .sv2-public__signin { padding: .75rem .2rem; color: var(--ll-text-muted); }
  .sv2-public__signin:hover { color: var(--ll-accent); }
  .sv2-public__access { margin: .8rem 0 0; color: var(--ll-text-muted); font-size: .72rem; line-height: 1.5; }
  .sv2-public__snapshot,
  .sv2-public__trace,
  .sv2-public__method {
    min-width: 0;
    background: var(--ll-bg-soft);
    border: 1px solid var(--ll-border);
    border-radius: var(--ll-radius-md);
    box-shadow: var(--sh-sm);
  }
  .sv2-public__snapshot { overflow: hidden; }
  .sv2-public__snapshot-head,
  .sv2-public__trace-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 1.2rem;
    padding: 1.05rem 1.1rem .95rem;
    border-bottom: 1px solid var(--ll-border);
  }
  .sv2-public__snapshot-head h2,
  .sv2-public__trace-head h2,
  .sv2-public__method h2 {
    margin: .25rem 0 0;
    color: var(--ll-text);
    font-size: 1.02rem;
    letter-spacing: -.015em;
    line-height: 1.25;
  }
  .sv2-public__snapshot-state {
    color: var(--ll-text-muted);
    font-family: var(--ll-font-mono);
    font-size: .625rem;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
  }
  .sv2-public__snapshot-state[data-state="ready"] { color: var(--green); }
  .sv2-public__snapshot-state[data-state="partial"] { color: var(--ll-accent); }
  .sv2-public__snapshot-state[data-state="error"] { color: var(--red); }
  .sv2-public__snapshot-state:focus-visible { outline: 2px solid var(--ll-accent); outline-offset: 4px; }
  .sv2-public__facts { margin: 0; }
  .sv2-public__fact {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: baseline;
    gap: 1.2rem;
    margin: 0;
    padding: .82rem 1.1rem;
    border-bottom: 1px solid var(--ll-border-subtle);
  }
  .sv2-public__fact dt {
    min-width: 0;
    display: flex;
    align-items: baseline;
    gap: .6rem;
    color: var(--ll-text-muted);
    font-size: .76rem;
    line-height: 1.4;
  }
  .sv2-public__fact dt::after {
    content: "";
    height: 1px;
    flex: 1;
    border-top: 1px dotted var(--ll-border);
  }
  .sv2-public__fact dd {
    margin: 0;
    color: var(--ll-text);
    font-family: var(--ll-font-mono);
    font-size: 1rem;
    font-weight: 800;
    line-height: 1;
  }
  .sv2-public__freshness { padding: .8rem 1.1rem 1rem; background: var(--ll-bg); }
  .sv2-public__freshness p { display: flex; justify-content: space-between; gap: 1rem; margin: 0; padding: .25rem 0; }
  .sv2-public__freshness span,
  .sv2-public__freshness strong,
  .sv2-public__snapshot-generated {
    font-family: var(--ll-font-mono);
    font-size: .625rem;
    line-height: 1.5;
  }
  .sv2-public__freshness span { color: var(--ll-text-muted); text-transform: uppercase; }
  .sv2-public__freshness strong { color: var(--ll-text); font-weight: 700; text-align: right; }
  .sv2-public__snapshot-generated { display: block !important; margin-top: .45rem !important; padding-top: .65rem !important; border-top: 1px solid var(--ll-border-subtle); color: var(--ll-text-muted); }
  .sv2-public__retry { width: calc(100% - 2.2rem); margin: 0 1.1rem 1rem; border: 1px solid var(--ll-border); background: var(--ll-bg); color: var(--ll-text); cursor: pointer; }
  .sv2-public__retry:hover { border-color: var(--ll-accent); color: var(--ll-accent); }
  .sv2-public__explain { display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(300px, .65fr); gap: 1.4rem; padding: clamp(2.5rem, 6vw, 5.5rem) 0 1rem; align-items: start; }
  .sv2-public__trace { overflow: hidden; }
  .sv2-public__trace-head > span { max-width: 180px; color: var(--ll-text-muted); font-family: var(--ll-font-mono); font-size: .625rem; line-height: 1.45; text-align: right; text-transform: uppercase; }
  .sv2-public__trace-list { list-style: none; margin: 0; padding: 0; }
  .sv2-public__trace-list li { position: relative; display: grid; grid-template-columns: 32px minmax(0, 1fr) auto; gap: .7rem; padding: 1rem 1.1rem 1rem .65rem; border-bottom: 1px solid var(--ll-border-subtle); }
  .sv2-public__trace-list li:last-child { border-bottom: 0; }
  .sv2-public__trace-mark { position: relative; display: block; }
  .sv2-public__trace-mark::before { content: ""; position: absolute; top: -1rem; bottom: -1rem; left: 50%; width: 1px; background: var(--ll-border); }
  .sv2-public__trace-list li:first-child .sv2-public__trace-mark::before { top: .45rem; }
  .sv2-public__trace-list li:last-child .sv2-public__trace-mark::before { bottom: calc(100% - .6rem); }
  .sv2-public__trace-mark::after { content: ""; position: absolute; top: .35rem; left: calc(50% - 4px); width: 9px; height: 9px; border: 2px solid var(--ll-accent); border-radius: 50%; background: var(--ll-bg-soft); }
  .sv2-public__trace-list [data-record-type="unpaid"] .sv2-public__trace-mark::after { border-color: var(--red); }
  .sv2-public__trace-list strong { display: block; color: var(--ll-text); font-family: var(--ll-font-mono); font-size: .68rem; letter-spacing: .035em; line-height: 1.4; text-transform: uppercase; }
  .sv2-public__trace-list [data-record-type="unpaid"] strong { color: var(--red); }
  .sv2-public__trace-list div > span { display: block; margin-top: .28rem; color: var(--ll-text-muted); font-size: .72rem; line-height: 1.45; }
  .sv2-public__trace-list time { color: var(--ll-text-muted); font-family: var(--ll-font-mono); font-size: .625rem; white-space: nowrap; }
  .sv2-public__method { padding: 1.15rem; }
  .sv2-public__method > p:not(.sv2-public__register-label) { color: var(--ll-text-muted); font-size: .78rem; line-height: 1.65; }
  .sv2-public__method dl { margin: 1.1rem 0 0; border-top: 1px solid var(--ll-border); }
  .sv2-public__method dl > div { padding: .72rem 0; border-bottom: 1px solid var(--ll-border-subtle); }
  .sv2-public__method dt { color: var(--ll-text); font-family: var(--ll-font-mono); font-size: .625rem; font-weight: 700; letter-spacing: .055em; text-transform: uppercase; }
  .sv2-public__method dd { margin: .25rem 0 0; color: var(--ll-text-muted); font-size: .7rem; line-height: 1.5; }

  @media (max-width: 980px) {
    .sv2-public__opening { grid-template-columns: minmax(0, 1fr); min-height: auto; }
    .sv2-public__intro { max-width: 720px; }
    .sv2-public__intro h1 { max-width: 12ch; }
    .sv2-public__explain { grid-template-columns: minmax(0, 1fr); }
  }
  @media (max-width: 560px) {
    html[data-signals-auth="public"] main.signals-v2.shell-content { padding-inline: .75rem; }
    .sv2-public__opening { gap: 2rem; padding-top: 1.35rem; }
    .sv2-public__intro h1 { font-size: clamp(2.55rem, 13vw, 3.7rem); }
    .sv2-public__actions { align-items: stretch; flex-direction: column; gap: .35rem; }
    .sv2-public__signin { justify-content: flex-start; }
    .sv2-public__snapshot-head, .sv2-public__trace-head { align-items: flex-start; flex-direction: column; }
    .sv2-public__trace-head > span { max-width: none; text-align: left; }
    .sv2-public__fact { gap: .7rem; }
    .sv2-public__fact dt::after { display: none; }
    .sv2-public__freshness p { display: block; }
    .sv2-public__freshness strong { display: block; margin-top: .1rem; text-align: left; }
    .sv2-public__trace-list li { grid-template-columns: 24px minmax(0, 1fr); padding-right: .75rem; }
    .sv2-public__trace-list time { grid-column: 2; }
  }
  @media (prefers-reduced-motion: reduce) {
    .sv2-public__start span { transition: none; }
  }

  /* ── Scrollbar treatment ───────────────────────────────────────
     Only the two columns that genuinely need to scroll their own
     content (listings, detail pane) get internal scroll. Everything
     else flows with the page. Scrollbars here are subtle native-
     feeling thumbs: 8px wide, no track, gray that darkens slightly
     on hover. No accent-color, no chunky overlay — they should
     read as plumbing, not UI. */
  .signals-v2 .sv2-main,
  .signals-v2 .sv2-detail-col,
  .signals-v2 .sv2-side-list {
    scrollbar-width: thin;
    scrollbar-color: rgba(255,255,255,0.14) transparent;
  }
  .signals-v2 .sv2-main::-webkit-scrollbar,
  .signals-v2 .sv2-detail-col::-webkit-scrollbar,
  .signals-v2 .sv2-side-list::-webkit-scrollbar { width: 8px; height: 8px; }
  .signals-v2 .sv2-main::-webkit-scrollbar-track,
  .signals-v2 .sv2-detail-col::-webkit-scrollbar-track,
  .signals-v2 .sv2-side-list::-webkit-scrollbar-track { background: transparent; }
  .signals-v2 .sv2-main::-webkit-scrollbar-thumb,
  .signals-v2 .sv2-detail-col::-webkit-scrollbar-thumb,
  .signals-v2 .sv2-side-list::-webkit-scrollbar-thumb {
    background: rgba(255,255,255,0.12);
    background-clip: content-box;
    border: 2px solid transparent;
    border-radius: 8px;
    transition: background-color 0.15s;
  }
  .signals-v2 .sv2-main::-webkit-scrollbar-thumb:hover,
  .signals-v2 .sv2-detail-col::-webkit-scrollbar-thumb:hover,
  .signals-v2 .sv2-side-list::-webkit-scrollbar-thumb:hover {
    background: rgba(255,255,255,0.24);
    background-clip: content-box;
  }
  [data-theme="light"] .signals-v2 .sv2-main,
  [data-theme="light"] .signals-v2 .sv2-detail-col,
  [data-theme="light"] .signals-v2 .sv2-side-list { scrollbar-color: rgba(0,0,0,0.18) transparent; }
  [data-theme="light"] .signals-v2 .sv2-main::-webkit-scrollbar-thumb,
  [data-theme="light"] .signals-v2 .sv2-detail-col::-webkit-scrollbar-thumb,
  [data-theme="light"] .signals-v2 .sv2-side-list::-webkit-scrollbar-thumb {
    background: rgba(0,0,0,0.18);
    background-clip: content-box;
  }
  [data-theme="light"] .signals-v2 .sv2-main::-webkit-scrollbar-thumb:hover,
  [data-theme="light"] .signals-v2 .sv2-detail-col::-webkit-scrollbar-thumb:hover,
  [data-theme="light"] .signals-v2 .sv2-side-list::-webkit-scrollbar-thumb:hover {
    background: rgba(0,0,0,0.32);
    background-clip: content-box;
  }

  /* ── Search bar (top of page) ──────────────────────────────────
     No hero/banner above. The search input IS the page entry point —
     this is a tool, not a landing page. Stats live inside the
     "Active communities" sidebar where they're actionable. */
  .sv2-search {
    display: flex;
    flex-direction: column;
    gap: 0.7rem;
    margin-bottom: 1rem;
  }
  .sv2-search__input-wrap {
    display: flex;
    align-items: center;
    gap: 0.8rem;
    background: var(--ll-bg-soft);
    border: 1px solid var(--ll-border-subtle);
    border-radius: var(--ll-radius-md);
    padding: 0 1.15rem;
    transition: border-color 0.15s, box-shadow 0.15s;
  }
  .sv2-search__input-wrap:focus-within {
    border-color: var(--ll-accent);
    box-shadow: 0 0 0 3px rgba(var(--ll-accent-rgb), 0.18);
  }
  .sv2-search__input-wrap:focus-within .sv2-search__icon { color: var(--ll-accent); opacity: 1; }
  [data-theme="light"] .sv2-search__input-wrap { background: #fff; border-color: rgba(0,0,0,0.1); }
  .sv2-search__icon { color: var(--ll-text-muted); opacity: 0.7; flex-shrink: 0; }
  .sv2-search__input {
    flex: 1;
    background: none;
    border: none;
    outline: none;
    font-size: 1.1rem;
    color: var(--ll-text);
    padding: 1.1rem 0.1rem;
    font-family: inherit;
    min-width: 0;
    letter-spacing: -0.005em;
  }
  .sv2-search__input::placeholder { color: var(--ll-text-muted); opacity: 0.55; }
  /* type="search" draws a native cancel ✕ next to the custom #sv2-clear —
     two X's (native grey + accent blue). Suppress the native one. */
  .sv2-search__input::-webkit-search-cancel-button,
  .sv2-search__input::-webkit-search-decoration {
    -webkit-appearance: none;
    appearance: none;
    display: none;
  }
  .sv2-search__clear {
    background: none; border: none; color: var(--ll-text-muted);
    cursor: pointer; font-size: 1rem; padding: 0.25rem; line-height: 1;
    opacity: 0.6; transition: opacity 0.1s;
  }
  .sv2-search__clear:hover { opacity: 1; }
  .sv2-search__status {
    font-size: 0.74rem;
    color: var(--ll-text-muted);
    white-space: nowrap;
    padding-left: 0.3rem;
  }

  /* Quick-filter chip row */
  .sv2-filters {
    display: flex;
    align-items: center;
    gap: 0.45rem;
    flex-wrap: wrap;
  }
  .sv2-chip {
    background: var(--ll-bg-soft);
    border: 1px solid var(--ll-border-subtle);
    color: var(--ll-text);
    font: inherit;
    font-family: inherit;
    font-size: 0.82rem;
    padding: 0.4rem 0.85rem;
    border-radius: var(--ll-radius-pill);
    cursor: pointer;
    transition: border-color 0.12s, color 0.12s, background 0.12s;
  }
  .sv2-chip:hover {
    border-color: rgba(var(--ll-accent-rgb), 0.45);
    color: var(--ll-accent);
  }
  .sv2-chip.is-active {
    background: rgba(var(--ll-accent-rgb), 0.12);
    border-color: var(--ll-accent);
    color: var(--ll-accent);
    font-weight: 600;
  }
  .sv2-filters__divider {
    width: 1px;
    align-self: stretch;
    background: var(--ll-border-subtle);
    margin: 0.1rem 0.25rem;
  }
  .sv2-filter-input,
  .sv2-filter-select {
    font: inherit;
    font-family: inherit;
    font-size: 0.82rem;
    padding: 0.4rem 0.7rem;
    border: 1px solid var(--ll-border-subtle);
    border-radius: var(--ll-radius-sm);
    background: var(--ll-bg-soft);
    color: var(--ll-text);
    cursor: pointer;
  }
  .sv2-filter-input { cursor: text; width: 10rem; }
  .sv2-filter-input::placeholder { color: var(--ll-text-muted); opacity: 0.55; }
  .sv2-filter-input:focus, .sv2-filter-select:focus {
    outline: none;
    border-color: var(--ll-accent);
    box-shadow: 0 0 0 2px rgba(var(--ll-accent-rgb), 0.18);
  }
  [data-theme="light"] .sv2-chip { background: #fff; }
  [data-theme="light"] .sv2-filter-input,
  [data-theme="light"] .sv2-filter-select { background: #fff; border-color: rgba(0,0,0,0.1); }

  /* ── Three-column workspace (daisy-chain: communities → listings → profile) ──
     PAGE-SCROLL ARCHITECTURE: the workspace does NOT bound its own
     height. The page scrolls naturally. The sidebar grows as tall
     as its content (no scroll on individual blocks). The two
     workspace columns (.sv2-main, .sv2-detail-col) are position:
     sticky to the viewport — they stay visible as you scroll past
     a long sidebar to reach Recently Viewed or Report. This is the
     Linear/GitHub/Reddit pattern: one page scrollbar, plus internal
     scrolls only on the columns that truly need them. */
  .sv2-workspace {
    display: grid;
    grid-template-columns: 260px minmax(320px, 1.3fr) minmax(360px, 1.4fr);
    gap: 0.85rem;
    align-items: start;
  }
  @media (max-width: 1100px) {
    .sv2-workspace {
      grid-template-columns: 240px minmax(0, 1fr);
    }
    .sv2-detail-col {
      grid-column: 1 / -1;
      margin-top: 0.85rem;
    }
  }
  @media (max-width: 760px) {
    .sv2-workspace {
      grid-template-columns: 1fr;
    }
    .sv2-sidebar { order: 2; }
    .sv2-main { order: 1; }
    .sv2-detail-col { order: 3; margin-top: 0.85rem; }
  }

  /* ── Left column (communities + recently viewed + report) ───────
     Sidebar flows with the page. No internal scroll — every block
     shows at natural height. Communities can list 50+ subreddits
     and the page just gets taller. The sticky middle/right columns
     keep your listing + profile in view while you scroll past. */
  .sv2-sidebar {
    display: flex;
    flex-direction: column;
    gap: 0.7rem;
  }
  .sv2-side-block {
    background: var(--ll-bg-soft);
    border: 1px solid var(--ll-border-subtle);
    border-radius: var(--ll-radius-md);
    overflow: hidden;
  }
  /* Briefly draw the eye to the Report-a-default box when a signal's Report
     button jumps the lender here. Subtle accent ring + title tint, then JS
     removes the class so it reverts. Mirrors the search input's focus ring. */
  @keyframes sv2-attention-ring {
    0%, 100% { box-shadow: 0 0 0 0 rgba(var(--ll-accent-rgb), 0); }
    35%      { box-shadow: 0 0 0 4px rgba(var(--ll-accent-rgb), 0.30); }
  }
  .sv2-side-block--attention {
    animation: sv2-attention-ring 0.85s ease-out 2;
    border-color: var(--ll-accent);
  }
  .sv2-side-block--attention .sv2-side-block__title { color: var(--ll-accent); }
  @media (prefers-reduced-motion: reduce) {
    .sv2-side-block--attention { animation: none; }
  }
  .sv2-side-block__head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    padding: 0.6rem 0.85rem 0.5rem;
    border-bottom: 1px solid var(--ll-border-subtle);
  }
  .sv2-side-block__title {
    font-size: 0.68rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.09em;
    color: var(--ll-text-muted);
  }
  .sv2-side-block__count {
    font-size: 0.66rem;
    font-weight: 600;
    color: var(--ll-accent);
    background: rgba(var(--ll-accent-rgb), 0.1);
    border: 1px solid rgba(var(--ll-accent-rgb), 0.22);
    padding: 0.08rem 0.5rem;
    border-radius: var(--ll-radius-pill);
    font-variant-numeric: tabular-nums;
  }

  /* Community list — the master filter */
  .sv2-comms { list-style: none; margin: 0; padding: 0; }
  .sv2-comm-item {
    position: relative;
    display: flex;
    align-items: center;
    gap: 0.55rem;
    width: 100%;
    background: none;
    border: none;
    border-bottom: 1px solid var(--ll-border-subtle);
    padding: 0.65rem 0.85rem 0.65rem 1rem;
    text-align: left;
    cursor: pointer;
    color: var(--ll-text);
    font: inherit;
    font-family: inherit;
    transition: background 0.1s;
  }
  .sv2-comm-item:last-child { border-bottom: none; }
  .sv2-comm-item:hover { background: rgba(var(--ll-accent-rgb), 0.05); }
  .sv2-comm-item.is-active { background: rgba(var(--ll-accent-rgb), 0.1); }
  .sv2-comm-item.is-active::before {
    content: '';
    position: absolute;
    left: 0; top: 0; bottom: 0;
    width: 3px;
    background: var(--ll-accent);
  }

  /* Multi-select row wrapper: checkbox + clickable community button.
     Plain click on the button = single-select (replace). Ctrl/Cmd+click
     = toggle. Checkbox always toggles. Active state applies to the
     whole row so the checkbox area highlights too. */
  .sv2-comm-row {
    position: relative;
    display: flex;
    align-items: stretch;
    border-bottom: 1px solid var(--ll-border-subtle);
    transition: background 0.1s;
  }
  .sv2-comm-row:last-child { border-bottom: none; }
  .sv2-comm-row:hover { background: rgba(var(--ll-accent-rgb), 0.04); }
  .sv2-comm-row.is-active { background: rgba(var(--ll-accent-rgb), 0.1); }
  .sv2-comm-row.is-active::before {
    content: '';
    position: absolute;
    left: 0; top: 0; bottom: 0;
    width: 3px;
    background: var(--ll-accent);
    z-index: 1;
  }
  .sv2-comm-row .sv2-comm-item {
    border-bottom: none;
    padding-left: 0.45rem;
    flex: 1;
    min-width: 0;
  }
  .sv2-comm-row .sv2-comm-item:hover { background: transparent; }
  .sv2-comm-row .sv2-comm-item.is-active { background: transparent; }
  .sv2-comm-row .sv2-comm-item.is-active::before { display: none; }

  .sv2-comm-check {
    display: flex;
    align-items: center;
    padding: 0 0.5rem 0 1rem;
    cursor: pointer;
    flex-shrink: 0;
    position: relative;
  }
  .sv2-comm-check__input {
    position: absolute;
    opacity: 0;
    width: 0; height: 0;
    pointer-events: none;
  }
  .sv2-comm-check__box {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 15px;
    height: 15px;
    border: 1.5px solid var(--ll-border-subtle);
    border-radius: 3px;
    background: var(--ll-bg);
    color: var(--ll-btn-on-accent, #0d1117);
    transition: border-color 0.12s, background 0.12s;
  }
  [data-theme="light"] .sv2-comm-check__box { background: #fff; }
  .sv2-comm-check__box svg { opacity: 0; transition: opacity 0.1s; }
  .sv2-comm-check__input:checked + .sv2-comm-check__box {
    background: var(--ll-accent);
    border-color: var(--ll-accent);
  }
  .sv2-comm-check__input:checked + .sv2-comm-check__box svg { opacity: 1; }
  .sv2-comm-row:hover .sv2-comm-check__box { border-color: var(--ll-accent); }

  /* Multi-select scope pill (shown next to title when 2+ selected) */
  .sv2-list-scope__multi {
    font-size: 0.66rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ll-accent);
    background: rgba(var(--ll-accent-rgb), 0.1);
    border: 1px solid rgba(var(--ll-accent-rgb), 0.25);
    padding: 0.1rem 0.5rem;
    border-radius: var(--ll-radius-pill);
    margin-left: 0.4rem;
    font-variant-numeric: tabular-nums;
  }
  .sv2-comm-item__body {
    flex: 1;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.18rem;
  }
  .sv2-comm-item__name {
    font-size: 0.86rem;
    font-weight: 600;
    color: var(--ll-text);
    letter-spacing: -0.005em;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }
  .sv2-comm-item__meta {
    font-size: 0.7rem;
    color: var(--ll-text-muted);
    font-variant-numeric: tabular-nums;
  }
  .sv2-comm-item__right {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 0.18rem;
    flex-shrink: 0;
  }
  .sv2-comm-item__count {
    font-size: 1rem;
    font-weight: 700;
    color: var(--ll-text);
    font-variant-numeric: tabular-nums;
    line-height: 1;
    letter-spacing: -0.01em;
  }
  .sv2-comm-item__trend {
    display: inline-flex;
    align-items: center;
    gap: 0.1rem;
    font-size: 0.66rem;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    padding: 0.05rem 0.35rem;
    border-radius: var(--ll-radius-pill);
    line-height: 1;
  }
  .sv2-comm-item__trend--up   { color: #ef6c6c; background: rgba(239,108,108,0.13); }
  .sv2-comm-item__trend--down { color: #4ade80; background: rgba(74,222,128,0.13); }
  .sv2-comm-item__trend--flat { color: var(--ll-text-muted); background: rgba(255,255,255,0.04); }
  [data-theme="light"] .sv2-comm-item__trend--flat { background: rgba(0,0,0,0.04); }

  /* Sparkline — 30-day signal-count shape, smooth Bezier curve with a
     subtle gradient area fill. The colored stroke is driven by the
     trend class (up=red, down=green, flat=muted). */
  .sv2-comm-item__spark {
    width: 96px;
    height: 26px;
    display: block;
    margin-top: 0.3rem;
    color: var(--ll-text-muted);
  }
  .sv2-comm-item__spark svg { display: block; width: 100%; height: 100%; overflow: visible; }
  .sv2-comm-item__spark--up   { color: #ef6c6c; }
  .sv2-comm-item__spark--down { color: #4ade80; }
  .sv2-comm-item__spark--flat { color: var(--ll-text-muted); opacity: 0.55; }
  .sv2-comm-item--all {
    background: linear-gradient(180deg, rgba(var(--ll-accent-rgb), 0.06), transparent);
  }
  .sv2-comm-item--all .sv2-comm-item__name {
    font-size: 0.82rem;
    text-transform: uppercase;
    letter-spacing: 0.06em;
  }

  /* Compact recently-viewed list (below communities) */
  .sv2-side-list {
    list-style: none;
    margin: 0;
    padding: 0;
    max-height: 180px;
    overflow-y: auto;
  }
  .sv2-side-item {
    display: block;
    width: 100%;
    text-align: left;
    background: none;
    border: none;
    border-bottom: 1px solid var(--ll-border-subtle);
    padding: 0.5rem 0.85rem;
    cursor: pointer;
    color: var(--ll-text);
    font: inherit;
    font-family: inherit;
    transition: background 0.1s;
  }
  .sv2-side-item:last-child { border-bottom: none; }
  .sv2-side-item:hover { background: rgba(var(--ll-accent-rgb), 0.06); }
  .sv2-side-item__name {
    font-size: 0.82rem;
    font-weight: 600;
    color: var(--ll-text);
    font-family: ui-monospace, 'Cascadia Code', monospace;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    letter-spacing: -0.005em;
  }
  .sv2-side-empty {
    padding: 1rem 0.85rem;
    text-align: center;
    color: var(--ll-text-muted);
    font-size: 0.78rem;
    font-style: italic;
  }
  [data-theme="light"] .sv2-side-block { background: #fff; }

  /* Quick report at the bottom of the sidebar */
  .sv2-report {
    padding: 0.85rem 0.95rem 1rem;
  }
  .sv2-report__hint {
    font-size: 0.76rem;
    color: var(--ll-text-muted);
    margin: 0 0 0.65rem;
    line-height: 1.5;
  }
  .sv2-report__input-wrap {
    position: relative;
    display: flex;
    align-items: center;
    background: var(--ll-bg);
    border: 1px solid var(--ll-border-subtle);
    border-radius: var(--ll-radius-sm);
    padding: 0 0.65rem;
    transition: border-color 0.12s, box-shadow 0.12s;
  }
  [data-theme="light"] .sv2-report__input-wrap { background: #fff; }
  .sv2-report__input-wrap:focus-within {
    border-color: var(--ll-accent);
    box-shadow: 0 0 0 2px rgba(var(--ll-accent-rgb), 0.15);
  }
  .sv2-report__input {
    flex: 1;
    background: none;
    border: none;
    outline: none;
    font: inherit;
    font-family: inherit;
    font-size: 0.88rem;
    color: var(--ll-text);
    padding: 0.7rem 0.1rem;
    min-width: 0;
  }
  .sv2-report__input::placeholder { color: var(--ll-text-muted); opacity: 0.55; }
  .sv2-report__paste-icon { color: var(--ll-text-muted); opacity: 0.6; flex-shrink: 0; }
  .sv2-report__preview {
    margin-top: 0.6rem;
    padding: 0.7rem 0.85rem;
    background: rgba(var(--ll-accent-rgb), 0.06);
    border: 1px solid rgba(var(--ll-accent-rgb), 0.25);
    border-radius: var(--ll-radius-sm);
  }
  .sv2-report__preview-label {
    font-size: 0.66rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.09em;
    color: var(--ll-accent);
    margin: 0 0 0.4rem;
  }
  .sv2-report__preview-handle {
    font-size: 0.92rem;
    font-weight: 600;
    color: var(--ll-text);
    font-family: ui-monospace, 'Cascadia Code', monospace;
    margin: 0;
    word-break: break-all;
  }
  .sv2-report__preview-meta {
    font-size: 0.78rem;
    color: var(--ll-text-muted);
    margin: 0.25rem 0 0;
    line-height: 1.45;
  }
  .sv2-report__preview-actions {
    display: flex;
    gap: 0.4rem;
    margin-top: 0.65rem;
  }
  .sv2-report__error {
    font-size: 0.78rem;
    color: #ef6c6c;
    margin: 0.5rem 0 0;
  }

  .sv2-btn {
    font: inherit;
    font-family: inherit;
    font-size: 0.82rem;
    font-weight: 500;
    padding: 0.45rem 0.85rem;
    border-radius: var(--ll-radius-sm);
    border: 1px solid var(--ll-border-subtle);
    background: var(--ll-bg);
    color: var(--ll-text);
    cursor: pointer;
    transition: border-color 0.12s, background 0.12s;
  }
  .sv2-btn:hover { border-color: var(--ll-accent); color: var(--ll-accent); }
  .sv2-btn--primary {
    background: var(--ll-accent);
    border-color: var(--ll-accent);
    color: var(--ll-btn-on-accent, #0d1117);
    font-weight: 600;
  }
  .sv2-btn--primary:hover {
    background: var(--ll-accent);
    color: var(--ll-btn-on-accent, #0d1117);
    filter: brightness(1.1);
  }
  .sv2-btn--ghost { background: transparent; }
  .sv2-btn:disabled { opacity: 0.5; cursor: not-allowed; }

  /* ── Middle: spotlight (idle) or results (searching) ──────────── */
  /* This column is THE single scroll container for the listings — the
     list-head is sticky inside it (top: 0), so the scope strip stays
     visible no matter how far the user scrolls the borrower list. */
  .sv2-main {
    display: flex;
    flex-direction: column;
    background: var(--ll-bg-soft);
    border: 1px solid var(--ll-border-subtle);
    border-radius: var(--ll-radius-md);
    min-width: 0;
    /* Sticky to viewport. As page scrolls past a long sidebar,
       the listings stay in view. Internal scroll only kicks in
       if results exceed viewport height. */
    position: sticky;
    top: 6.5rem;
    max-height: calc(100vh - 8rem);
    overflow-y: auto;
  }
  @media (max-width: 1100px) {
    .sv2-main {
      position: static;
      max-height: none;
      overflow-y: visible;
    }
  }
  [data-theme="light"] .sv2-main { background: #fff; }
  .sv2-main__head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    padding: 0.85rem 1rem 0.65rem;
    border-bottom: 1px solid var(--ll-border-subtle);
    gap: 0.6rem;
  }
  .sv2-main__title {
    font-size: 0.95rem;
    font-weight: 600;
    color: var(--ll-text);
    margin: 0;
    letter-spacing: -0.01em;
  }
  .sv2-main__sub {
    font-size: 0.76rem;
    color: var(--ll-text-muted);
  }

  /* Middle: listings header (scope + sort chips).
     Sticky to the top of .sv2-main's scroll context so the user always
     sees what scope they're looking at while scrolling 50 rows of
     borrowers. Now works correctly because .sv2-main is the single
     scroll container (see the .sv2-main rule above). */
  .sv2-list-head {
    position: sticky;
    top: 0;
    z-index: 5;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 0.6rem;
    padding: 0.85rem 1rem 0.7rem;
    border-bottom: 1px solid var(--ll-border-subtle);
    background: var(--ll-bg-soft);
  }
  [data-theme="light"] .sv2-list-head { background: #fff; }
  .sv2-list-scope {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    flex: 1;
    min-width: 0;
  }
  .sv2-list-scope__title {
    font-size: 0.98rem;
    font-weight: 600;
    color: var(--ll-text);
    letter-spacing: -0.01em;
    margin: 0;
    display: flex;
    align-items: center;
    gap: 0.5rem;
  }
  .sv2-list-scope__community {
    color: var(--ll-accent);
    font-family: ui-monospace, 'Cascadia Code', monospace;
  }
  .sv2-list-scope__meta {
    font-size: 0.76rem;
    color: var(--ll-text-muted);
    font-variant-numeric: tabular-nums;
  }
  .sv2-list-scope__trend {
    display: inline-flex;
    align-items: center;
    gap: 0.18rem;
    font-size: 0.7rem;
    font-weight: 600;
    padding: 0.1rem 0.4rem;
    border-radius: var(--ll-radius-pill);
    margin-left: 0.4rem;
    vertical-align: middle;
  }
  .sv2-list-scope__trend--up   { color: #ef6c6c; background: rgba(239,108,108,0.13); }
  .sv2-list-scope__trend--down { color: #4ade80; background: rgba(74,222,128,0.13); }
  .sv2-list-scope__rate {
    color: var(--ll-text-muted);
    font-size: 0.78rem;
    font-weight: 400;
    margin-left: 0.5rem;
    font-variant-numeric: tabular-nums;
  }

  /* Inline "clear filters" — only visible when a community OR query is active */
  .sv2-clear-filters {
    background: transparent;
    border: 1px solid var(--ll-border-subtle);
    color: var(--ll-text-muted);
    font: inherit;
    font-family: inherit;
    font-size: 0.74rem;
    padding: 0.32rem 0.7rem;
    border-radius: var(--ll-radius-pill);
    cursor: pointer;
    transition: color 0.12s, border-color 0.12s, background 0.12s;
    flex-shrink: 0;
    align-self: center;
  }
  .sv2-clear-filters:hover {
    color: #ef6c6c;
    border-color: rgba(239,108,108,0.45);
    background: rgba(239,108,108,0.06);
  }
  .sv2-clear-filters[hidden] { display: none !important; }

  /* Results list — no internal scroll; .sv2-main is the scroll container,
     so the list-head can sticky-pin to top:0 of that container. */
  .sv2-results {
    flex: 1;
    padding: 0;
  }
  .sv2-result {
    position: relative;
    display: grid;
    grid-template-columns: 12px minmax(0, 1fr) auto;
    align-items: center;
    gap: 0.85rem;
    padding: 0.85rem 1rem;
    border-bottom: 1px solid var(--ll-border-subtle);
    cursor: pointer;
    background: none;
    border-left: none;
    border-right: none;
    border-top: none;
    width: 100%;
    text-align: left;
    color: var(--ll-text);
    font: inherit;
    font-family: inherit;
    transition: background 0.1s;
  }
  .sv2-result:hover { background: rgba(var(--ll-accent-rgb), 0.05); }
  .sv2-result.is-active { background: rgba(var(--ll-accent-rgb), 0.1); }
  .sv2-result.is-active::before {
    content: '';
    position: absolute;
    left: 0; top: 0; bottom: 0;
    width: 3px;
    background: var(--ll-accent);
  }
  /* Severity dot — driven by unpaid capital × recency × repeat count.
     The dot conveys "should I look at this borrower?" at a glance. */
  .sv2-result__dot {
    width: 10px; height: 10px;
    border-radius: 50%;
    flex-shrink: 0;
    align-self: center;
    transition: box-shadow 0.15s;
  }
  .sv2-result__dot--hot    { background: #ef6c6c; box-shadow: 0 0 0 3px rgba(239,108,108,0.18), 0 0 8px rgba(239,108,108,0.45); }
  .sv2-result__dot--warm   { background: #fb923c; box-shadow: 0 0 0 3px rgba(251,146,60,0.15); }
  .sv2-result__dot--mild   { background: #facc15; box-shadow: 0 0 0 3px rgba(250,204,21,0.12); }
  .sv2-result__dot--cool   { background: #94a3b8; opacity: 0.55; }
  .sv2-result__dot--clean  { background: transparent; border: 2px solid var(--ll-text-muted); opacity: 0.4; box-sizing: border-box; }

  .sv2-result__body { min-width: 0; }
  .sv2-result__name {
    font-size: 1rem;
    font-weight: 600;
    color: var(--ll-text);
    font-family: ui-monospace, 'Cascadia Code', monospace;
    letter-spacing: -0.005em;
    line-height: 1.25;
    /* v3: name text can ellipsis, but the trailing band chip must stay
       visible — so the row is a flex line with the handle allowed to shrink. */
    display: flex;
    align-items: center;
    gap: 0.45rem;
    min-width: 0;
  }
  .sv2-result__handle {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
  }
  .sv2-result__stats {
    font-size: 0.76rem;
    color: var(--ll-text-muted);
    margin-top: 0.2rem;
    display: flex;
    flex-wrap: wrap;
    gap: 0.15rem 0.6rem;
    line-height: 1.4;
  }
  .sv2-result__stats-tag { font-variant-numeric: tabular-nums; }
  .sv2-result__stats-tag--unpaid { color: var(--ll-text); font-weight: 500; }
  .sv2-result__stats-tag--repeat { color: #ef6c6c; font-weight: 600; }
  .sv2-result__stats-tag--requested { color: #67e8f9; font-weight: 600; }

  /* Right-side amount badge: the dominant element when there's real money */
  .sv2-result__amount {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 0.1rem;
    flex-shrink: 0;
    text-align: right;
  }
  .sv2-result__amount-val {
    font-size: 1.05rem;
    font-weight: 700;
    color: var(--ll-text);
    font-variant-numeric: tabular-nums;
    line-height: 1;
    letter-spacing: -0.01em;
  }
  .sv2-result__amount-val--high   { color: #ef6c6c; }
  .sv2-result__amount-val--medium { color: #fb923c; }
  .sv2-result__amount-label {
    font-size: 0.66rem;
    color: var(--ll-text-muted);
    text-transform: uppercase;
    letter-spacing: 0.07em;
    font-weight: 500;
  }
  .sv2-result__amount--none .sv2-result__amount-val {
    color: var(--ll-text-muted);
    opacity: 0.6;
    font-weight: 500;
  }
  .sv2-result__amount--requested .sv2-result__amount-val { color: #67e8f9; }
  .sv2-result--request .sv2-result__dot {
    background: transparent;
    border: 2px solid #67e8f9;
    opacity: 0.7;
    box-shadow: none;
    box-sizing: border-box;
  }

  .sv2-main__empty {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    color: var(--ll-text-muted);
    padding: 3rem 1.5rem;
    text-align: center;
    gap: 0.5rem;
  }
  .sv2-main__empty svg { opacity: 0.35; color: var(--ll-accent); }

  /* ── Detail panel (right) ─────────────────────────────────────── */
  .sv2-detail-col {
    background: var(--ll-bg-soft);
    border: 1px solid var(--ll-border-subtle);
    border-radius: var(--ll-radius-md);
    display: flex;
    flex-direction: column;
    /* Sticky to viewport — borrower profile stays in view as you
       scroll the page. Internal scroll only when profile content
       exceeds viewport height. */
    position: sticky;
    top: 6.5rem;
    max-height: calc(100vh - 8rem);
    overflow-y: auto;
    /* Never scroll the panel itself sideways: a panel-level h-scrollbar lets
       the whole dossier (username, KPIs, tabs) drift out of view. Wide
       tabular content scrolls inside .sv2-detail-tablewrap instead. */
    overflow-x: hidden;
  }
  @media (max-width: 1100px) {
    .sv2-detail-col {
      position: static;
      max-height: none;
      overflow: hidden;
    }
  }
  [data-theme="light"] .sv2-detail-col { background: #fff; }
  /* Empty state ("network pulse") — actionable instead of decorative.
     Shows the lender's watchlist (if any), trending communities, and
     a brief how-to. Each item is clickable. */
  .sv2-detail__placeholder {
    display: flex;
    flex-direction: column;
    padding: 1.4rem 1.25rem 1.5rem;
    gap: 1.2rem;
  }
  .sv2-detail__pulse-head {
    display: flex;
    flex-direction: row;
    align-items: flex-start;
    gap: 0.75rem;
    padding-bottom: 1rem;
    border-bottom: 1px solid var(--ll-border-subtle);
  }
  .sv2-detail__pulse-head svg {
    opacity: 0.5;
    color: var(--ll-accent);
    flex-shrink: 0;
    margin-top: 0.1rem;
  }
  .sv2-detail__pulse-head-text {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    min-width: 0;
  }
  .sv2-detail__placeholder-title {
    font-size: 0.95rem;
    color: var(--ll-text);
    font-weight: 600;
    margin: 0;
    letter-spacing: -0.01em;
  }
  .sv2-detail__placeholder-hint {
    font-size: 0.8rem;
    color: var(--ll-text-muted);
    margin: 0;
    line-height: 1.5;
  }
  .sv2-detail__pulse-section { display: flex; flex-direction: column; gap: 0.5rem; }
  .sv2-detail__pulse-title {
    font-size: 0.65rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--ll-text-muted);
    margin: 0;
  }
  .sv2-detail__pulse-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
  }
  .sv2-detail__pulse-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.6rem;
    width: 100%;
    background: var(--ll-bg);
    border: 1px solid var(--ll-border-subtle);
    border-radius: var(--ll-radius-sm);
    padding: 0.55rem 0.75rem;
    color: var(--ll-text);
    font: inherit;
    font-family: inherit;
    font-size: 0.85rem;
    cursor: pointer;
    text-align: left;
    transition: border-color 0.12s, background 0.12s;
  }
  [data-theme="light"] .sv2-detail__pulse-item { background: #fff; }
  .sv2-detail__pulse-item:hover {
    border-color: var(--ll-accent);
    background: rgba(var(--ll-accent-rgb), 0.05);
  }
  .sv2-detail__pulse-handle {
    font-family: ui-monospace, 'Cascadia Code', monospace;
    font-size: 0.85rem;
    color: var(--ll-text);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    min-width: 0;
  }
  .sv2-detail__pulse-meta {
    font-size: 0.72rem;
    color: var(--ll-text-muted);
    font-variant-numeric: tabular-nums;
    white-space: nowrap;
    flex-shrink: 0;
  }
  .sv2-detail__pulse-tips {
    display: flex;
    flex-direction: column;
    gap: 0.35rem;
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .sv2-detail__pulse-tip {
    display: flex;
    align-items: flex-start;
    gap: 0.55rem;
    font-size: 0.78rem;
    color: var(--ll-text-muted);
    line-height: 1.5;
  }
  .sv2-detail__pulse-tip-icon {
    flex-shrink: 0;
    color: var(--ll-accent);
    opacity: 0.7;
    margin-top: 0.1rem;
  }

  /* Detail content */
  .sv2-detail-content { padding: 0; }
  .sv2-detail-header {
    padding: 1rem 1.1rem 0.8rem;
    border-bottom: 1px solid var(--ll-border-subtle);
  }
  .sv2-detail-actions {
    display: flex;
    align-items: center;
    gap: 0.4rem;
    margin-top: 0.8rem;
    flex-wrap: wrap;
  }
  .sv2-detail-actions__spacer {
    flex: 1;
    min-width: 0.5rem;
  }
  .sv2-detail-actions__link {
    margin-left: auto;
    font-size: 0.76rem;
    color: var(--ll-text-muted);
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0.3rem 0.4rem;
    border-radius: var(--ll-radius-sm);
    transition: color 0.12s;
  }
  .sv2-detail-actions__link:hover { color: var(--ll-accent); }
  .sv2-detail-actions__btn svg { flex-shrink: 0; opacity: 0.85; }
  .sv2-detail-actions__btn {
    background: transparent;
    border: 1px solid var(--ll-border-subtle);
    color: var(--ll-text);
    font: inherit;
    font-family: inherit;
    font-size: 0.8rem;
    padding: 0.4rem 0.75rem;
    border-radius: var(--ll-radius-sm);
    cursor: pointer;
    transition: border-color 0.12s, color 0.12s, background 0.12s;
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    text-decoration: none;
  }
  .sv2-detail-actions__btn:hover {
    border-color: var(--ll-accent);
    color: var(--ll-accent);
  }
  .sv2-detail-actions__btn--watch {
    /* No background change on hover when active; the filled state itself signals "watching." */
  }
  .sv2-detail-actions__btn--watch.is-watching {
    background: rgba(var(--ll-accent-rgb), 0.12);
    border-color: var(--ll-accent);
    color: var(--ll-accent);
  }
  .sv2-detail-actions__btn--watch.is-watching:hover {
    background: rgba(var(--ll-accent-rgb), 0.18);
  }
  .sv2-detail-actions__pro {
    font-size: 0.62rem;
    font-weight: 700;
    letter-spacing: 0.08em;
    color: var(--ll-accent-alt, #f59e0b);
    background: rgba(245,158,11,0.12);
    padding: 0.08rem 0.4rem;
    border-radius: var(--ll-radius-pill);
    text-transform: uppercase;
    margin-left: 0.1rem;
  }
  .sv2-detail-username {
    font-size: 1.15rem;
    font-weight: 600;
    color: var(--ll-text);
    font-family: ui-monospace, 'Cascadia Code', monospace;
    margin: 0;
    letter-spacing: -0.01em;
    word-break: break-all;
  }
  /* KPI summary strip — 4 stat blocks below the username. Dashboard
     readout instead of caption text. Unpaid gets danger color so it
     pops as the most-actionable number. */
  .sv2-detail-kpis {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.4rem;
    margin-top: 0.75rem;
  }
  @media (max-width: 1280px) {
    .sv2-detail-kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  }
  .sv2-detail-kpi {
    display: flex;
    flex-direction: column;
    gap: 0.18rem;
    padding: 0.5rem 0.6rem;
    background: var(--ll-bg);
    border: 1px solid var(--ll-border-subtle);
    border-radius: var(--ll-radius-sm);
    min-width: 0;
  }
  [data-theme="light"] .sv2-detail-kpi { background: #fff; }
  .sv2-detail-kpi__num {
    font-size: 1.15rem;
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    letter-spacing: -0.015em;
    color: var(--ll-text);
    line-height: 1.05;
  }
  .sv2-detail-kpi__label {
    font-size: 0.6rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.09em;
    color: var(--ll-text-muted);
  }
  .sv2-detail-kpi--danger .sv2-detail-kpi__num { color: #ef6c6c; }
  .sv2-detail-kpi--danger { border-color: rgba(239,108,108,0.25); }

  .sv2-detail-timeline {
    margin: 0.65rem 0 0;
    font-size: 0.73rem;
    color: var(--ll-text-muted);
    font-variant-numeric: tabular-nums;
    display: flex;
    flex-wrap: wrap;
    gap: 0.15rem 0.55rem;
  }
  .sv2-detail-timeline strong { color: var(--ll-text); font-weight: 500; }

  /* Detail tabs */
  .sv2-detail-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 0.1rem;
    padding: 0 1.1rem;
    border-bottom: 1px solid var(--ll-border-subtle);
  }
  .sv2-detail-tab {
    background: none;
    border: none;
    border-bottom: 2px solid transparent;
    color: var(--ll-text-muted);
    font: inherit;
    font-family: inherit;
    font-size: 0.82rem;
    padding: 0.55rem 0.55rem;
    cursor: pointer;
    white-space: nowrap;
    transition: color 0.12s, border-color 0.12s;
    margin-bottom: -1px;
  }
  .sv2-detail-tab:hover {
    color: var(--ll-text);
    background: rgba(var(--ll-accent-rgb), 0.04);
    border-bottom-color: rgba(var(--ll-accent-rgb), 0.35);
  }
  .sv2-detail-tab.is-active {
    color: var(--ll-text);
    background: rgba(var(--ll-accent-rgb), 0.07);
    border-bottom-color: var(--ll-accent);
    font-weight: 600;
  }
  .sv2-detail-pane { padding: 0.95rem 1.1rem 1.3rem; }
  .sv2-detail-section { margin-top: 0; }
  .sv2-detail-section + .sv2-detail-section { margin-top: 1rem; padding-top: 1rem; border-top: 1px solid var(--ll-border-subtle); }
  .sv2-detail-section__title {
    font-size: 0.7rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.09em;
    color: var(--ll-text-muted);
    margin: 0 0 0.55rem;
  }
  /* Compact two-column tables stay bounded to the detail pane. */
  .sv2-detail-tablewrap {
    min-width: 0;
    overflow-x: hidden;
  }
  .sv2-detail-table {
    width: 100%;
    table-layout: fixed;
    border-collapse: collapse;
    font-size: 0.82rem;
  }
  .sv2-detail-table th, .sv2-detail-table td {
    min-width: 0;
    padding: 0.45rem 0.4rem;
    text-align: left;
    border-bottom: 1px solid var(--ll-border-subtle);
    overflow-wrap: anywhere;
    word-break: break-word;
  }
  .sv2-detail-table th {
    font-size: 0.68rem;
    text-transform: uppercase;
    letter-spacing: 0.07em;
    color: var(--ll-text-muted);
    font-weight: 600;
  }
  .sv2-detail-table tr:last-child td { border-bottom: none; }
  /* Amount is red ONLY for unpaid rows; repaid/open/partial read neutral. */
  .sv2-detail-table td.amount { color: var(--ll-text); font-weight: 600; font-variant-numeric: tabular-nums; }
  .sv2-detail-table td.amount--unpaid { color: #ef6c6c; }
  .sv2-detail-link { color: var(--ll-accent); text-decoration: none; }
  .sv2-detail-link:hover { text-decoration: underline; }

  .sv2-event-list {
    display: grid;
    gap: 0.65rem;
    min-width: 0;
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .sv2-event-card {
    min-width: 0;
    padding: 0.75rem;
    border: 1px solid var(--ll-border-subtle);
    border-radius: var(--ll-radius-sm);
    background: color-mix(in srgb, var(--ll-bg) 72%, transparent);
  }
  .sv2-event-card__facts {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.65rem 0.8rem;
    min-width: 0;
    margin: 0;
  }
  .sv2-event-card__fact {
    min-width: 0;
  }
  .sv2-event-card__fact--source {
    grid-column: 1 / -1;
  }
  .sv2-event-card__fact dt {
    margin: 0 0 0.18rem;
    color: var(--ll-text-muted);
    font-size: 0.62rem;
    font-weight: 600;
    letter-spacing: 0.07em;
    line-height: 1.2;
    text-transform: uppercase;
  }
  .sv2-event-card__fact dd {
    min-width: 0;
    margin: 0;
    color: var(--ll-text);
    font-size: 0.8rem;
    line-height: 1.35;
    overflow-wrap: anywhere;
    word-break: break-word;
  }
  .sv2-event-card__fact .sv2-evlife {
    white-space: normal;
  }
  .sv2-event-card__fact .sv2-detail-link,
  .sv2-event-card__fact .sv2-evsrc {
    white-space: normal;
    overflow-wrap: anywhere;
  }
  .sv2-event-card__amount {
    font-variant-numeric: tabular-nums;
    font-weight: 600;
  }
  .sv2-event-card__amount--unpaid {
    color: #ef6c6c !important;
  }
  .sv2-event-card__actions {
    display: flex;
    justify-content: flex-end;
    margin-top: 0.65rem;
    padding-top: 0.55rem;
    border-top: 1px solid var(--ll-border-subtle);
  }
  .sv2-event-card__delete {
    padding: 0.2rem 0.55rem;
    border: 1px solid color-mix(in srgb, #dc2626 35%, transparent);
    border-radius: 5px;
    background: none;
    color: #ef6c6c;
    cursor: pointer;
    font: inherit;
    font-size: 0.8rem;
    line-height: 1.3;
  }
  .sv2-event-card__delete:hover,
  .sv2-event-card__delete:focus-visible {
    border-color: #ef6c6c;
    background: color-mix(in srgb, #ef6c6c 8%, transparent);
  }
  @media (max-width: 420px) {
    .sv2-event-card__facts {
      grid-template-columns: minmax(0, 1fr);
    }
    .sv2-event-card__fact--source {
      grid-column: auto;
    }
  }

  .sv2-pill-row { display: flex; flex-wrap: wrap; gap: 0.35rem; }
  .sv2-pill {
    font-size: 0.76rem;
    padding: 0.22rem 0.6rem;
    border-radius: var(--ll-radius-pill);
    background: var(--ll-bg);
    border: 1px solid var(--ll-border-subtle);
    color: var(--ll-text-muted);
    font-variant-numeric: tabular-nums;
  }
  .sv2-pill strong { color: var(--ll-text); font-weight: 600; margin-left: 0.25rem; }

/* ---- SIG-SPLIT: warnings vs loan-record research (2026-06-11) ---- */

/* Mode segment sits left of the sort chips. */
.sv2-mode {
  display: inline-flex;
  gap: 0.25rem;
  padding: 0.15rem;
  border: 1px solid var(--ll-border-subtle);
  border-radius: 999px;
}

.sv2-mode__btn.is-active {
  background: rgba(var(--ll-accent-rgb), 0.16);
  border-color: var(--ll-accent);
}

/* Repaid history reads green - red is reserved for money that never came back. */
.sv2-result__stats-tag--repaid {
  color: #4ade80;
  border-color: color-mix(in srgb, #4ade80 45%, transparent);
}

.sv2-clean-chip {
  display: inline-block;
  margin-left: 0.5rem;
  padding: 0.1rem 0.55rem;
  border: 1px solid color-mix(in srgb, #4ade80 50%, transparent);
  border-radius: 999px;
  color: #4ade80;
  font-size: 0.66rem;
  font-weight: 700;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  vertical-align: middle;
}

/* Event-type badges: the type itself carries the color semantics. */
.sv2-type {
  display: inline-block;
  padding: 0.08rem 0.5rem;
  border-radius: 999px;
  border: 1px solid var(--ll-border-subtle);
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--ll-text-muted);
}

.sv2-type--unpaid,
.sv2-type--default,
.sv2-type--collections {
  color: #f87171;
  border-color: color-mix(in srgb, #f87171 50%, transparent);
  background: color-mix(in srgb, #f87171 8%, transparent);
}

.sv2-type--repaid,
.sv2-type--recovered {
  color: #4ade80;
  border-color: color-mix(in srgb, #4ade80 45%, transparent);
  background: color-mix(in srgb, #4ade80 7%, transparent);
}

.sv2-type--partial {
  color: #fbbf24;
  border-color: color-mix(in srgb, #fbbf24 45%, transparent);
}

/* SR-2: lifetime lifecycle line on result rows + the profile header */
.sv2-result__lifecycle {
  margin-top: 0.28rem;
  font-size: 0.72rem;
  color: var(--ll-text-muted);
  letter-spacing: 0.01em;
}

.sv2-detail-lifecycle {
  margin: 0.15rem 0 0.4rem;
  font-size: 0.8rem;
  color: var(--ll-text-muted);
}

/* SR-5: honest context on warning rows — repaid-since softens, never hides */
.sv2-result__context {
  margin-top: 0.2rem;
  font-size: 0.72rem;
  color: var(--ll-text-muted);
}
.sv2-result__context strong {
  color: #3cb36e;
  font-weight: 600;
}

/* RECORDS-DISTINCT: research mode is blue/neutral, never danger-red.
   loan (open) gets an explicit chip color so it can never inherit an
   ambient red from a warning context. */
.sv2-type--loan,
.sv2-type--open,
.sv2-type--active {
  color: #60a5fa;
  border-color: color-mix(in srgb, #60a5fa 45%, transparent);
  background: color-mix(in srgb, #60a5fa 7%, transparent);
}

.sv2-type--requested {
  color: #67e8f9;
  border-color: color-mix(in srgb, #67e8f9 45%, transparent);
  background: color-mix(in srgb, #67e8f9 7%, transparent);
}

.sv2-evlife--requested {
  color: #67e8f9;
}

.sv2-mode-caption {
  margin: 0.3rem 0 0;
  font-size: 0.72rem;
  color: var(--ll-text-muted);
}

.sv2-mode__btn.is-active[data-mode="warnings"] {
  border-color: color-mix(in srgb, #fbbf24 55%, transparent);
}

.sv2-records-active .sv2-mode__btn.is-active[data-mode="records"] {
  border-color: color-mix(in srgb, #60a5fa 60%, transparent);
  background: color-mix(in srgb, #60a5fa 10%, transparent);
}

.sv2-result__amount--repaid .sv2-result__amount-val {
  color: #4ade80;
}

/* SR-3 timeline cells + SR-4 exposure */
.sv2-evlife {
  font-size: 0.74rem;
  color: var(--ll-text-muted);
  white-space: nowrap;
}
.sv2-evlife--stale {
  color: #fbbf24;
  font-weight: 600;
}
.sv2-evlife--recovered {
  color: #4ade80;
  font-weight: 600;
}
.sv2-evsrc {
  font-size: 0.74rem;
  color: var(--ll-text-muted);
}

.sv2-detail-exposure {
  margin: 0.1rem 0 0.35rem;
  font-size: 0.8rem;
  font-weight: 600;
  color: #fbbf24;
}

/* Light mode ([data-theme="light"]): the dark-mode greens/ambers/reds are tuned
   for a dark background and wash out on white. Darken the semantic colours so
   the top-section badges read with real contrast in light mode (operator
   feedback 2026-06-14). Dark mode keeps the brighter originals. */
[data-theme="light"] .sv2-clean-chip {
  color: #15803d;
  border-color: color-mix(in srgb, #15803d 45%, transparent);
  background: color-mix(in srgb, #15803d 7%, transparent);
}
[data-theme="light"] .sv2-result__stats-tag--repaid,
[data-theme="light"] .sv2-type--repaid,
[data-theme="light"] .sv2-type--recovered {
  color: #15803d;
  border-color: color-mix(in srgb, #15803d 42%, transparent);
}
[data-theme="light"] .sv2-result__stats-tag--requested,
[data-theme="light"] .sv2-result__amount--requested .sv2-result__amount-val,
[data-theme="light"] .sv2-type--requested,
[data-theme="light"] .sv2-evlife--requested {
  color: #0e7490;
}
[data-theme="light"] .sv2-type--requested {
  border-color: color-mix(in srgb, #0e7490 42%, transparent);
  background: color-mix(in srgb, #0e7490 8%, transparent);
}
[data-theme="light"] .sv2-result--request .sv2-result__dot {
  border-color: #0e7490;
}
[data-theme="light"] .sv2-type--repaid,
[data-theme="light"] .sv2-type--recovered {
  background: color-mix(in srgb, #15803d 8%, transparent);
}
[data-theme="light"] .sv2-detail-exposure,
[data-theme="light"] .sv2-type--partial {
  color: #b45309;
}
[data-theme="light"] .sv2-type--partial {
  border-color: color-mix(in srgb, #b45309 42%, transparent);
}
[data-theme="light"] .sv2-type--unpaid,
[data-theme="light"] .sv2-type--default,
[data-theme="light"] .sv2-type--collections {
  color: #dc2626;
  border-color: color-mix(in srgb, #dc2626 42%, transparent);
  background: color-mix(in srgb, #dc2626 7%, transparent);
}
/* The mode toggle is the page's primary control — its selected state should be
   unmistakable on white. The active amber-400 border washed out like the greens
   did; fill + colour it in the darker semantic shade (amber-700 for warnings,
   blue-600 for records). Dark mode keeps the lighter originals. */
[data-theme="light"] .sv2-mode__btn.is-active[data-mode="warnings"] {
  background: color-mix(in srgb, #b45309 12%, transparent);
  border-color: color-mix(in srgb, #b45309 50%, transparent);
  color: #b45309;
}
[data-theme="light"] .sv2-records-active .sv2-mode__btn.is-active[data-mode="records"] {
  background: color-mix(in srgb, #2563eb 12%, transparent);
  border-color: color-mix(in srgb, #2563eb 50%, transparent);
  color: #2563eb;
}

.sv2-chip--open-now.is-active {
  border-color: color-mix(in srgb, #60a5fa 60%, transparent);
  background: color-mix(in srgb, #60a5fa 12%, transparent);
}

/* SR-6: stale-small warnings de-emphasized, never removed */
.sv2-result--stale {
  opacity: 0.6;
}
.sv2-result--stale:hover {
  opacity: 1;
}

/* Mode-caption stability: reserved height + crossfade so warnings/records
   toggling never reflows the page; the network strip is its own chip. */
.sv2-mode-caption {
  min-height: 1.1em;
  transition: opacity 0.18s ease;
}
.sv2-mode-caption.is-swapping {
  opacity: 0.25;
}
.sv2-open-strip {
  display: inline-block;
  margin-left: 0.45rem;
  padding: 0.1rem 0.55rem;
  border-radius: 999px;
  font-size: 0.72rem;
  font-weight: 600;
  color: #60a5fa;
  border: 1px solid color-mix(in srgb, #60a5fa 45%, transparent);
  background: color-mix(in srgb, #60a5fa 7%, transparent);
  white-space: nowrap;
}

.sv2-mode-caption-row {
  display: flex;
  align-items: center;
  gap: 0.45rem;
  margin: 0.3rem 0 0;
  min-height: 1.5em;
}
.sv2-mode-caption-row .sv2-mode-caption {
  margin: 0;
}
.sv2-mode-caption-row .sv2-open-strip {
  margin-left: 0;
}
.sv2-chip--ghost {
  visibility: hidden;
  pointer-events: none;
}

/* The caption row always owns a full line so its width never re-wraps the
   sibling filter chips when the mode text/strip changes. */
.sv2-mode-caption-row {
  flex-basis: 100%;
  width: 100%;
  min-height: 1.7em;
}

/* ============================================================================
   Signals v3 (2026-07-06): reliability band, proportion track, per-year
   dossier timeline. These are the visual language ported from the v3 design.
   Every value here is bound to REAL /signal data at render time — there is no
   fabricated dataset or seeded RNG (both were in the demo and are NOT ported).
   Segment colors: repaid=green, open=capital-blue (honest "still out"),
   default=red. The design's "late" segment is intentionally omitted — the real
   corpus has no clean per-loan late signal, so we don't invent one.
   ============================================================================ */

/* Reliability band chip — derived from the real repaid/unpaid ratio. */
.sv2-band {
  font-family: var(--ll-font-mono, ui-monospace, monospace);
  font-size: 0.56rem;
  font-weight: 700;
  letter-spacing: 0.07em;
  text-transform: uppercase;
  padding: 0.12rem 0.42rem;
  border-radius: 5px;
  flex-shrink: 0;
  white-space: nowrap;
  vertical-align: middle;
}
.sv2-band--rel  { color: #4ade80; background: color-mix(in srgb, #4ade80 12%, transparent); }
.sv2-band--cau  { color: #fbbf24; background: color-mix(in srgb, #fbbf24 12%, transparent); }
.sv2-band--risk { color: #f87171; background: color-mix(in srgb, #f87171 12%, transparent); }
.sv2-band--ser  { color: #fff;    background: #dc2626; }
[data-theme="light"] .sv2-band--rel  { color: #15803d; background: color-mix(in srgb, #15803d 12%, transparent); }
[data-theme="light"] .sv2-band--cau  { color: #b45309; background: color-mix(in srgb, #b45309 12%, transparent); }
[data-theme="light"] .sv2-band--risk { color: #b91c1c; background: color-mix(in srgb, #b91c1c 12%, transparent); }

/* Proportion track — segmented bar; each segment's flex-grow is the real
   count, so widths are true proportions of the borrower's lifecycle. */
.sv2-track {
  display: flex;
  height: 7px;
  border-radius: 99px;
  overflow: hidden;
  background: var(--ll-bg);
  margin-top: 0.35rem;
  max-width: 340px;
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ll-border) 55%, transparent);
}
.sv2-track--big { height: 11px; max-width: none; margin-top: 0.5rem; }
.sv2-track__seg { min-width: 2px; }
.sv2-track__seg--repaid  { background: #46e0a8; }
.sv2-track__seg--open    { background: #5b9dff; }
.sv2-track__seg--default { background: #ff6b7d; }
[data-theme="light"] .sv2-track__seg--repaid  { background: #2f7d54; }
[data-theme="light"] .sv2-track__seg--open    { background: #2563eb; }
[data-theme="light"] .sv2-track__seg--default { background: #c2410c; }

/* Legend under the dossier composition track. */
.sv2-track-legend {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem 0.85rem;
  margin-top: 0.5rem;
  font-size: 0.66rem;
  color: var(--ll-text-muted);
}
.sv2-track-legend span { display: inline-flex; align-items: center; gap: 0.3rem; }
.sv2-track-legend i { width: 8px; height: 8px; border-radius: 2px; display: inline-block; }
.sv2-track-legend b { color: var(--ll-text); font-weight: 700; font-variant-numeric: tabular-nums; }

/* Per-year volume timeline (dossier) — one column per REAL yearly_timeline
   row. Bar height ∝ loans that year; stacked segments are the real
   repaid/open/unpaid counts. No synthetic distribution. */
.sv2-yeartl {
  display: flex;
  align-items: stretch;
  gap: 3px;
  height: 72px;
  margin-top: 0.5rem;
}
.sv2-yeartl__col { flex: 1; display: flex; flex-direction: column; min-width: 0; }
.sv2-yeartl__wrap { flex: 1; display: flex; align-items: flex-end; }
.sv2-yeartl__bar {
  width: 100%;
  display: flex;
  flex-direction: column-reverse;
  border-radius: 3px 3px 0 0;
  overflow: hidden;
  min-height: 2px;
}
.sv2-yeartl__bar .sv2-track__seg { width: 100%; }
.sv2-yeartl__x {
  font-family: var(--ll-font-mono, ui-monospace, monospace);
  font-size: 0.5rem;
  color: var(--ll-text-muted);
  text-align: center;
  margin-top: 4px;
  letter-spacing: -0.02em;
}
.sv2-yeartl-empty {
  margin-top: 0.5rem;
  font-size: 0.73rem;
  color: var(--ll-text-muted);
  font-style: italic;
}

/* Dossier reliability meter (band + repaid % + fill bar). */
.sv2-dossier-meter { margin: 0.9rem 0 0.2rem; }
.sv2-dossier-meter__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.5rem;
  margin-bottom: 0.35rem;
}
.sv2-dossier-meter__pct {
  font-family: var(--ll-font-mono, ui-monospace, monospace);
  font-weight: 800;
  font-size: 0.95rem;
  font-variant-numeric: tabular-nums;
}
.sv2-dossier-meter__pct small { font-size: 0.6rem; font-weight: 600; color: var(--ll-text-muted); margin-left: 2px; }
.sv2-dossier-meter__bar {
  height: 7px;
  border-radius: 99px;
  background: var(--ll-bg);
  overflow: hidden;
}
.sv2-dossier-meter__fill {
  height: 100%;
  border-radius: 99px;
  transition: width 0.5s cubic-bezier(.22,1,.36,1);
}

/* Dossier section label (composition / volume-by-year headers). */
.sv2-dossier-label {
  font-family: var(--ll-font-mono, ui-monospace, monospace);
  font-size: 0.58rem;
  font-weight: 700;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ll-text-muted);
  margin: 1.05rem 0 0;
  display: flex;
  justify-content: space-between;
  align-items: baseline;
  gap: 0.5rem;
}
.sv2-dossier-label b { color: var(--ll-text); font-weight: 700; font-variant-numeric: tabular-nums; }

/* Reliability score readout on a result row (right-aligned %). */
.sv2-result__score {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 0.1rem;
  flex-shrink: 0;
  text-align: right;
  font-variant-numeric: tabular-nums;
}
.sv2-result__score-pct {
  font-family: var(--ll-font-mono, ui-monospace, monospace);
  font-weight: 800;
  font-size: 1.18rem;
  line-height: 1;
  letter-spacing: -0.02em;
}
.sv2-result__score-pct small { font-size: 0.56rem; font-weight: 700; opacity: 0.7; margin-left: 1px; }
.sv2-result__score-pct--rel  { color: #4ade80; }
.sv2-result__score-pct--cau  { color: #fbbf24; }
.sv2-result__score-pct--risk { color: #f87171; }
.sv2-result__score-vol {
  font-family: var(--ll-font-mono, ui-monospace, monospace);
  font-size: 0.62rem;
  font-weight: 600;
  color: var(--ll-text-muted);
  white-space: nowrap;
}
[data-theme="light"] .sv2-result__score-pct--rel  { color: #15803d; }
[data-theme="light"] .sv2-result__score-pct--cau  { color: #b45309; }
[data-theme="light"] .sv2-result__score-pct--risk { color: #b91c1c; }

/* Reliability filter segment (All / Reliable / Caution / Risk) — mirrors the
   mode toggle styling but drives a client-side band filter over real rows. */
.sv2-bandfilter {
  display: inline-flex;
  background: var(--ll-bg);
  border: 1px solid var(--ll-border-subtle);
  border-radius: 999px;
  padding: 0.22rem;
  gap: 0.15rem;
  flex-shrink: 0;
}
.sv2-bandfilter__btn {
  font-family: inherit;
  font-size: 0.74rem;
  font-weight: 700;
  color: var(--ll-text-muted);
  background: none;
  border: none;
  padding: 0.34rem 0.72rem;
  border-radius: 999px;
  cursor: pointer;
  transition: color 0.12s, background 0.12s;
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
}
.sv2-bandfilter__btn .sv2-bandfilter__n {
  font-family: var(--ll-font-mono, ui-monospace, monospace);
  font-size: 0.62rem;
  opacity: 0.7;
}
.sv2-bandfilter__btn:hover { color: var(--ll-text); }
.sv2-bandfilter__btn.is-active { color: var(--ll-text); background: var(--ll-bg-soft); box-shadow: var(--ll-e1, 0 1px 2px rgba(0,0,0,0.3)); }
.sv2-bandfilter__btn.is-active.sv2-bandfilter__btn--rel  { color: #4ade80; }
.sv2-bandfilter__btn.is-active.sv2-bandfilter__btn--risk { color: #f87171; }
[data-theme="light"] .sv2-bandfilter__btn.is-active.sv2-bandfilter__btn--rel  { color: #15803d; }
[data-theme="light"] .sv2-bandfilter__btn.is-active.sv2-bandfilter__btn--risk { color: #b91c1c; }

/* SIG-HOME-1B · authenticated Overview. The working surface is one evidence
   register: scope, result ledger, and dossier share rules instead of reading
   as a dashboard made from unrelated cards. */
html[data-signals-auth="member"] .sv2-member {
  min-width: 0;
}

html[data-signals-auth="member"] .sv2-member-intro {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: clamp(1.5rem, 4vw, 4rem);
  padding: 0 0 1.35rem;
  border-bottom: 1px solid var(--ll-border);
}

html[data-signals-auth="member"] .sv2-member-intro__copy {
  max-width: 68ch;
}

html[data-signals-auth="member"] .sv2-member-intro__kicker {
  margin: 0 0 0.45rem;
  color: var(--ll-accent);
  font-family: var(--ll-font-mono);
  font-size: 0.625rem;
  font-weight: 700;
  letter-spacing: 0.12em;
  line-height: 1.4;
  text-transform: uppercase;
}

html[data-signals-auth="member"] .sv2-member-intro h1 {
  margin: 0;
  color: var(--ll-text);
  font-size: clamp(1.9rem, 4vw, 3.35rem);
  font-weight: 850;
  letter-spacing: -0.035em;
  line-height: 1;
  text-wrap: balance;
}

html[data-signals-auth="member"] .sv2-member-intro__copy > p:last-child {
  max-width: 62ch;
  margin: 0.7rem 0 0;
  color: var(--ll-text-muted);
  font-size: 0.92rem;
  line-height: 1.6;
}

html[data-signals-auth="member"] .sv2-member-intro__search-link {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 0.7rem;
  flex: 0 0 auto;
  padding: 0.72rem 0.85rem;
  border-bottom: 1px solid var(--ll-accent);
  color: var(--ll-text);
  font-family: var(--ll-font-mono);
  font-size: 0.68rem;
  font-weight: 700;
  letter-spacing: 0.055em;
  text-decoration: none;
  text-transform: uppercase;
}

html[data-signals-auth="member"] .sv2-member-intro__search-link:hover {
  color: var(--ll-accent);
}

html[data-signals-auth="member"] .sv2-member-intro__search-link svg {
  transition: transform var(--t-fast);
}

html[data-signals-auth="member"] .sv2-member-intro__search-link:hover svg {
  transform: translateX(3px);
}

html[data-signals-auth="member"] .sv2-search {
  gap: 0;
  margin: 0;
  padding: 1.15rem 0 1rem;
}

html[data-signals-auth="member"] .sv2-search__input-wrap {
  min-height: 58px;
  gap: 0.9rem;
  padding: 0 1rem;
  background: transparent;
  border: 1px solid var(--ll-border);
  border-radius: 6px;
  box-shadow: inset 0 -1px 0 rgba(var(--ll-accent-rgb), 0.08);
}

html[data-signals-auth="member"] .sv2-search__input-wrap:focus-within {
  border-color: var(--ll-accent);
  box-shadow: 0 3px 18px rgba(var(--ll-accent-rgb), 0.12), 0 0 0 2px rgba(var(--ll-accent-rgb), 0.12);
}

html[data-signals-auth="member"] .sv2-search__input {
  padding: 0.95rem 0.1rem;
  font-size: clamp(1rem, 1.5vw, 1.16rem);
}

html[data-signals-auth="member"] .sv2-search__input::placeholder,
html[data-signals-auth="member"] .sv2-filter-input::placeholder,
html[data-signals-auth="member"] .sv2-report__input::placeholder {
  color: var(--ll-text-muted);
  opacity: 0.82;
}

html[data-signals-auth="member"] .sv2-filters {
  gap: 0.4rem;
  padding: 0.85rem 0 0;
}

html[data-signals-auth="member"] .sv2-chip,
html[data-signals-auth="member"] .sv2-bandfilter,
html[data-signals-auth="member"] .sv2-bandfilter__btn,
html[data-signals-auth="member"] .sv2-filter-input,
html[data-signals-auth="member"] .sv2-filter-select,
html[data-signals-auth="member"] .sv2-clear-filters {
  border-radius: 4px;
}

html[data-signals-auth="member"] .sv2-chip,
html[data-signals-auth="member"] .sv2-bandfilter__btn,
html[data-signals-auth="member"] .sv2-filter-input,
html[data-signals-auth="member"] .sv2-filter-select {
  min-height: 36px;
}

html[data-signals-auth="member"] .sv2-bandfilter {
  padding: 0;
  background: transparent;
  overflow: hidden;
}

html[data-signals-auth="member"] .sv2-bandfilter__btn {
  padding: 0.4rem 0.7rem;
}

html[data-signals-auth="member"] .sv2-bandfilter__btn.is-active {
  background: rgba(var(--ll-accent-rgb), 0.11);
  box-shadow: none;
}

html[data-signals-auth="member"] .sv2-mode-caption-row {
  flex-basis: 100%;
  margin: 0.2rem 0 0;
}

html[data-signals-auth="member"] .sv2-workspace {
  grid-template-columns: minmax(200px, 224px) minmax(360px, 0.95fr) minmax(390px, 1.05fr);
  gap: 0;
  border: 1px solid var(--ll-border);
  border-radius: 8px;
}

html[data-signals-auth="member"] .sv2-sidebar {
  gap: 0;
  min-width: 0;
}

html[data-signals-auth="member"] .sv2-side-block {
  background: transparent;
  border: 0;
  border-radius: 0;
}

html[data-signals-auth="member"] .sv2-side-block + .sv2-side-block {
  border-top: 1px solid var(--ll-border);
}

html[data-signals-auth="member"] .sv2-side-block__head {
  min-height: 42px;
  padding: 0.7rem 0.8rem 0.55rem;
  border-bottom-color: var(--ll-border);
}

html[data-signals-auth="member"] .sv2-side-block__title,
html[data-signals-auth="member"] .sv2-detail__pulse-title,
html[data-signals-auth="member"] .sv2-detail-section__title,
html[data-signals-auth="member"] .sv2-detail-kpi__label {
  color: var(--ll-text-muted);
  font-family: var(--ll-font-mono);
  font-size: 0.65rem;
  letter-spacing: 0.075em;
}

html[data-signals-auth="member"] .sv2-side-block__count,
html[data-signals-auth="member"] .sv2-list-scope__multi,
html[data-signals-auth="member"] .sv2-list-scope__trend {
  background: transparent;
  border: 0;
  border-radius: 0;
  padding-inline: 0;
}

html[data-signals-auth="member"] .sv2-comm-row.is-active::before,
html[data-signals-auth="member"] .sv2-comm-item.is-active::before,
html[data-signals-auth="member"] .sv2-result.is-active::before {
  width: 1px;
}

html[data-signals-auth="member"] .sv2-comm-item--all {
  background: transparent;
}

html[data-signals-auth="member"] .sv2-side-block--attention {
  outline: 2px solid var(--ll-accent);
  outline-offset: -2px;
}

html[data-signals-auth="member"] .sv2-main,
html[data-signals-auth="member"] .sv2-detail-col {
  background: transparent;
  border: 0;
  border-left: 1px solid var(--ll-border);
  border-radius: 0;
}

html[data-signals-auth="member"] .sv2-list-head {
  min-height: 58px;
  padding: 0.8rem 0.95rem 0.7rem;
  background: var(--ll-bg);
  border-bottom-color: var(--ll-border);
}

html[data-signals-auth="member"] .sv2-list-scope__title {
  font-size: 0.95rem;
  font-weight: 700;
}

html[data-signals-auth="member"] .sv2-list-scope__meta,
html[data-signals-auth="member"] .sv2-result__stats,
html[data-signals-auth="member"] .sv2-detail-timeline,
html[data-signals-auth="member"] .sv2-event-card__fact dt,
html[data-signals-auth="member"] .sv2-event-card__fact dd {
  font-size: max(0.68rem, 10px);
}

html[data-signals-auth="member"] .sv2-result {
  min-height: 74px;
  grid-template-columns: 10px minmax(0, 1fr) auto;
  gap: 0.75rem;
  padding: 0.78rem 0.9rem;
  border-bottom-color: var(--ll-border);
}

html[data-signals-auth="member"] .sv2-result__dot {
  width: 8px;
  height: 8px;
  box-shadow: none;
}

html[data-signals-auth="member"] .sv2-result__name {
  font-size: 0.93rem;
}

html[data-signals-auth="member"] .sv2-result__amount-val,
html[data-signals-auth="member"] .sv2-result__score-pct {
  font-family: var(--ll-font-mono);
  font-size: 0.96rem;
}

html[data-signals-auth="member"] .sv2-detail__placeholder {
  padding: 1.2rem;
}

html[data-signals-auth="member"] .sv2-detail__pulse-item {
  min-height: 42px;
  padding: 0.55rem 0;
  background: transparent;
  border: 0;
  border-bottom: 1px solid var(--ll-border);
  border-radius: 0;
}

html[data-signals-auth="member"] .sv2-detail__pulse-item:hover {
  padding-inline: 0.45rem;
  border-color: var(--ll-accent);
  background: rgba(var(--ll-accent-rgb), 0.05);
}

html[data-signals-auth="member"] .sv2-detail-header {
  padding: 0.95rem 1rem 0.85rem;
  border-bottom-color: var(--ll-border);
}

html[data-signals-auth="member"] .sv2-detail-username {
  font-size: 1.1rem;
  font-weight: 700;
}

html[data-signals-auth="member"] .sv2-detail-kpis {
  gap: 0;
  margin-top: 0.8rem;
  border-top: 1px solid var(--ll-border);
  border-bottom: 1px solid var(--ll-border);
}

html[data-signals-auth="member"] .sv2-detail-kpi {
  gap: 0.25rem;
  padding: 0.62rem 0.55rem;
  background: transparent;
  border: 0;
  border-right: 1px solid var(--ll-border);
  border-radius: 0;
}

html[data-signals-auth="member"] .sv2-detail-kpi:last-child {
  border-right: 0;
}

html[data-signals-auth="member"] .sv2-detail-kpi--danger {
  border-color: var(--ll-border);
}

html[data-signals-auth="member"] .sv2-detail-kpi__num {
  font-family: var(--ll-font-mono);
  font-size: 1rem;
  font-weight: 700;
}

html[data-signals-auth="member"] .sv2-detail-tabs {
  gap: 0;
  padding: 0 0.75rem;
  border-bottom-color: var(--ll-border);
}

html[data-signals-auth="member"] .sv2-detail-tab {
  min-height: 42px;
  padding: 0.6rem 0.48rem;
}

html[data-signals-auth="member"] .sv2-detail-pane {
  padding: 0.9rem 1rem 1.2rem;
}

html[data-signals-auth="member"] .sv2-event-list {
  gap: 0;
  border-top: 1px solid var(--ll-border);
}

html[data-signals-auth="member"] .sv2-event-card {
  padding: 0.75rem 0;
  border: 0;
  border-bottom: 1px solid var(--ll-border);
  border-radius: 0;
}

html[data-signals-auth="member"] .sv2-detail-actions__btn,
html[data-signals-auth="member"] .sv2-detail-actions__link {
  min-height: 36px;
}

html[data-signals-auth="member"] .sv2-detail-actions__pro {
  border-radius: 3px;
}

@media (max-width: 1220px) {
  html[data-signals-auth="member"] .sv2-workspace {
    grid-template-columns: minmax(200px, 224px) minmax(0, 1fr);
  }

  html[data-signals-auth="member"] .sv2-detail-col {
    grid-column: 1 / -1;
    margin-top: 0;
    border-top: 1px solid var(--ll-border);
    border-left: 0;
  }
}

@media (max-width: 760px) {
  html[data-signals-auth="member"] .signals-v2 {
    padding-inline: 0.75rem;
  }

  html[data-signals-auth="member"] .sv2-member-intro {
    align-items: flex-start;
    flex-direction: column;
    gap: 0.8rem;
    padding-bottom: 1rem;
  }

  html[data-signals-auth="member"] .sv2-member-intro h1 {
    font-size: clamp(1.85rem, 10vw, 2.75rem);
  }

  html[data-signals-auth="member"] .sv2-member-intro__search-link {
    min-height: 44px;
    padding-inline: 0;
  }

  html[data-signals-auth="member"] .sv2-search__input-wrap {
    min-height: 52px;
    padding-inline: 0.75rem;
  }

  html[data-signals-auth="member"] .sv2-search__status {
    display: none;
  }

  html[data-signals-auth="member"] .sv2-filters {
    align-items: stretch;
  }

  html[data-signals-auth="member"] .sv2-filters__divider {
    display: none;
  }

  html[data-signals-auth="member"] .sv2-mode,
  html[data-signals-auth="member"] .sv2-bandfilter {
    max-width: 100%;
  }

  html[data-signals-auth="member"] .sv2-chip,
  html[data-signals-auth="member"] .sv2-bandfilter__btn,
  html[data-signals-auth="member"] .sv2-filter-input,
  html[data-signals-auth="member"] .sv2-filter-select {
    min-height: 44px;
  }

  html[data-signals-auth="member"] .sv2-filter-input {
    width: min(100%, 13rem);
  }

  html[data-signals-auth="member"] .sv2-workspace {
    grid-template-columns: minmax(0, 1fr);
    border-radius: 0;
  }

  html[data-signals-auth="member"] .sv2-main,
  html[data-signals-auth="member"] .sv2-sidebar,
  html[data-signals-auth="member"] .sv2-detail-col {
    border-left: 0;
  }

  html[data-signals-auth="member"] .sv2-sidebar,
  html[data-signals-auth="member"] .sv2-detail-col {
    border-top: 1px solid var(--ll-border);
  }

  html[data-signals-auth="member"] .sv2-result {
    grid-template-columns: 8px minmax(0, 1fr);
  }

  html[data-signals-auth="member"] .sv2-result__amount,
  html[data-signals-auth="member"] .sv2-result__score {
    grid-column: 2;
    align-items: flex-start;
    margin-top: 0.25rem;
    text-align: left;
  }

  html[data-signals-auth="member"] .sv2-detail-kpis {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  html[data-signals-auth="member"] .sv2-detail-kpi:nth-child(2) {
    border-right: 0;
  }

  html[data-signals-auth="member"] .sv2-detail-kpi:nth-child(n + 3) {
    border-top: 1px solid var(--ll-border);
  }
}

@media (prefers-reduced-motion: reduce) {
  html[data-signals-auth="member"] .sv2-member-intro__search-link svg,
  html[data-signals-auth="member"] .sv2-detail__pulse-item {
    transition: none;
  }
}
