/* ── Variables ── */
:root {
  --green:    #7BB290;
  --green2:   #4ab78f;
  --green-d:  rgba(123,178,144,.14);
  --green-b:  rgba(123,178,144,.38);
  --on-green: #0e1512;            /* text/icon colour on a green fill (dark) → flips to #fff on light */
  --red:      #e96a6a;
  --amber:    #f0a054;
  --bg:       #0a0f0b;            /* page background (dark) */
  --hdr-bg:   #343a40;
  /* Theme channels — light/dark flip ONLY these (see html[data-theme="light"]).
     In dark they equal the original literals, so dark mode stays pixel-identical. */
  --on-rgb:   255,255,255;        /* white surface/border overlays on dark */
  --text-rgb: 238,244,240;        /* primary text channel (var(--text)) */
  --muted-rgb:233,241,236;        /* secondary text channel */
  --surface:  #111a14;            /* solid panel surfaces */
  --hdr-rgb:  11,16,12;           /* sticky header background */
  /* Foreground surfaces ~20% brighter so content separates from the dark bg. */
  --glass:    rgba(var(--on-rgb),.06);
  --glass-b:  rgba(var(--on-rgb),.14);
  --text:     rgb(var(--text-rgb));
  /* Readability bump (operator: hard to read on a dim phone). Muted/dim text
     opacities raised so secondary copy stays legible at low screen brightness. */
  --muted:    rgba(var(--muted-rgb),.86);
  --dim:      rgba(var(--muted-rgb),.66);
  /* shared foreground tokens (also used by the map + new controls) */
  --fvc-panel-bg:        rgba(var(--on-rgb),.06);
  --fvc-panel-bg-strong: rgba(var(--on-rgb),.09);
  --fvc-border:          rgba(var(--on-rgb),.14);
  --fvc-border-strong:   rgba(123,178,144,.45);
  --fvc-map-fill:        rgba(123,178,144,.16);
  --fvc-map-stroke:      rgba(123,178,144,.50);
  --fvc-accent:          #7BB290;
  --r:        16px;
  --r-sm:     10px;
  --r-pill:   100px;
  --shadow:   0 8px 32px rgba(0,0,0,.36);
}

*,*::before,*::after { box-sizing:border-box; margin:0; padding:0; }
html { scroll-behavior:smooth; overflow-x:clip; }   /* clip (NOT hidden): hidden makes <html> a scroll container, which breaks position:sticky on Chrome mobile (header slips up). clip prevents H-scroll without that side-effect. */

/* Mobile tap reliability: register taps IMMEDIATELY on interactive controls.
 * Without this, iOS Safari briefly holds the first tap to see if a double-tap-
 * zoom follows (the viewport is zoomable), so a single tap on a button sometimes
 * does nothing and the user has to tap a second time (Details/Share/etc. on the
 * cards). `manipulation` keeps scroll/pan but disables double-tap-zoom on these
 * elements → first tap always clicks. Scrolling/zooming the page is unaffected. */
button, a, label, summary, [role="button"], [onclick],
.card-btn, .stock-card, .login-btn, .btn-green, .fvc-chip, .control-pill,
.hdr-btn, .sm-action-btn, .fvc-rec-btn, .card-sector, .card-conf-pill {
  touch-action: manipulation;
}
/* Chrome Android reliability: mark EVERY interactive control as a tap target so the
   browser doesn't hold the first tap(s) for double-tap-zoom / scroll-vs-tap
   disambiguation. This matters most inside the detail bottom-sheet, which is a
   scroll container with a NON-passive touchmove listener (drag-to-close) — without
   this, Chrome waited and the year/tab/close buttons needed several taps. It does
   NOT disable scrolling or pinch-zoom. Firefox was already fine. */
button, summary, [onclick], .fvc-term,
.histfv-range, .modal-tab, .modal-close, .modal-meta-chip,
.fvc-afilter, .fvc-clear-all, .control-filters, .fvc-control-filters {
  touch-action: manipulation;
}
body {
  font-family:'Space Grotesk',system-ui,sans-serif;
  background:var(--bg);
  color:var(--text);
  min-height:100vh;
  line-height:1.6;
  overflow-x:clip;   /* clip (not hidden) → prevents H-scroll WITHOUT creating a scroll container that breaks position:sticky */
}
a { color:inherit; text-decoration:none; }
strong { font-weight:600; }

/* ── Subtle grid background ── */
body::before {
  content:'';
  position:fixed;inset:0;z-index:0;
  background-image:
    linear-gradient(rgba(123,178,144,.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(123,178,144,.025) 1px, transparent 1px);
  background-size:56px 56px;
  pointer-events:none;
}

/* ── Header — premium SaaS ── */
.hdr {
  /* near-solid (was 88% + blur(22px)): a heavy backdrop-filter on a sticky
     header over the fixed page background repaints every scroll frame and
     flickers the header + background on Chrome. Solid bg = identical look, no flicker.
     Fully opaque (was .97) + own compositor layer: at .97 the scrolled feed-card
     buttons ghosted through the sticky header. Same colour, alpha 1.0. */
  background:rgb(var(--hdr-rgb));
  transform:translateZ(0);
  padding:11px 28px;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
  position:sticky;top:0;z-index:200;
  border-bottom:1px solid rgba(123,178,144,.14);
  box-shadow:0 1px 40px rgba(0,0,0,.55), 0 0 0 0.5px rgba(123,178,144,.07),
             inset 0 1px 0 rgba(123,178,144,.06);
}
/* Firefox: der eigene Compositor-Layer des sticky Headers (transform:translateZ) laesst am oberen
   Viewport-Rand einen Sub-Pixel-Spalt zum fixen Hintergrund (Betreiber 2026-07-27, "Spalt oben").
   1px nach oben deckt ihn zu, betrifft nur Firefox, aendert Chrome und das Anti-Ghosting nicht. */
@supports (-moz-appearance:none) {
  .hdr { top:-1px; }
}
.hdr-brand {
  display:flex;align-items:center;gap:10px;
  text-decoration:none;
  /* Brand yields width FIRST: with justify-content:space-between + non-shrinking
     nav, a fixed-width logo pushed the right-hand buttons off-screen on narrow
     iPhones ("Header abgeschnitten"). Now the logo clips/scales; buttons stay in. */
  flex:0 1 auto;min-width:0;overflow:hidden;
  transition:opacity .18s;
}
.hdr-brand:hover { opacity:.85; }
.hdr-logo-img { height:32px;width:auto;display:block;flex-shrink:1;min-width:0;max-width:100%;object-fit:contain;object-position:left center; }
.hdr-radar-sub {
  padding:2px 9px;border-radius:var(--r-pill);
  background:rgba(123,178,144,.09);border:1px solid rgba(123,178,144,.22);
  font-size:.57rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--green);white-space:nowrap;align-self:center;
}
.hdr-pill {
  display:inline-flex;align-items:center;gap:5px;
  padding:3px 10px;border-radius:var(--r-pill);
  background:rgba(123,178,144,.07);border:1px solid rgba(123,178,144,.18);
  font-size:.6rem;font-weight:600;letter-spacing:.07em;text-transform:uppercase;
  color:rgba(123,178,144,.75);white-space:nowrap;
}
.hdr-pill::before {
  content:'';width:5px;height:5px;border-radius:50%;
  background:var(--green);flex-shrink:0;
  animation:blink 2.4s ease-in-out infinite;
}
.hdr-nav { display:flex;gap:8px;align-items:center;flex-shrink:0; }
.hdr-btn {
  display:inline-flex;align-items:center;gap:6px;
  padding:7px 18px;border-radius:var(--r-pill);
  font-family:inherit;font-size:.78rem;font-weight:600;
  cursor:pointer;transition:transform .18s,box-shadow .18s,background .18s;
  text-decoration:none;border:none;
  white-space:nowrap;   /* header CTAs never break into two lines at odd viewport widths */
}
.hdr-btn.primary {
  background:var(--green);color:#0a1a10;
  box-shadow:0 4px 14px rgba(123,178,144,.28);
}
.hdr-btn.primary:hover { transform:translateY(-1px);box-shadow:0 6px 20px rgba(123,178,144,.45); }
.hdr-btn.ghost {
  background:rgba(var(--on-rgb),.06);color:var(--text);
  border:1px solid rgba(var(--on-rgb),.12);
}
.hdr-btn.ghost:hover { background:rgba(var(--on-rgb),.10); }
@media (max-width:640px) {
  .hdr { padding:10px 14px; }
  .hdr-pill { display:none; }
  .hdr-logo-img { height:26px; }
  /* Compact mobile header: icon-only Sign in, "Pro" (no price), compact Watchlist */
  .hdr-nav { gap:6px; }
  .hdr-label { display:none; }                      /* hide "Watchlist" + "Sign in" words */
  .hdr-pro-price, .hdr-pro-full { display:none; }   /* just "Pro" on mobile (no "Go", no price) */
  .hdr-account-btn, .hdr-wl-btn {
    padding:0; width:38px; height:38px; justify-content:center;   /* square icon buttons */
  }
  .hdr-wl-btn .wl-count-badge { position:absolute; top:-5px; right:-5px; }
  .hdr-pro-btn { padding:0 13px; height:30px; }
  /* Language switcher → single compact toggle on phones (shows the language you switch TO).
     It must look IDENTICAL to the 32px theme button beside it — a matched set. */
  .hdr-lang { padding:0; gap:0; height:auto; border:none; background:transparent; margin-right:auto; }
  .hdr-lang-opt.active { display:none; }
  .hdr-lang-opt:not(.active) { width:32px; height:32px; min-width:0; padding:0; font-size:12px;
    font-weight:700; background:rgba(var(--on-rgb),.06); border:1px solid var(--fvc-border);
    border-radius:var(--r-pill); color:var(--text); }
  .hdr-lang-opt:not(.active):hover { background:rgba(var(--on-rgb),.12); color:var(--text); }
  .hdr-theme-btn:has(+ .hdr-lang) { margin-right:6px; }
}
/* ≤480px: the 16px base gap plus shrinkable toggles pushed the PRO button past the
   right viewport edge (clipped corner) and squeezed the theme button to ~18px. */
@media (max-width:480px) {
  .hdr { gap:8px; padding:10px 10px; }
  .hdr-nav { gap:6px; }
  .hdr-theme-btn { flex:0 0 32px; }
  .hdr-lang-opt:not(.active) { flex:0 0 32px; }
}

/* ── Main layout ── */
.main { position:relative;z-index:1; }

/* ── Hero ── */
.hero {
  padding:72px 24px 64px;
  text-align:center;
  background:radial-gradient(ellipse 70% 50% at 50% 0%, rgba(74,183,143,.07) 0%, transparent 70%);
}
.hero-eyebrow {
  font-size:.7rem;letter-spacing:.28em;text-transform:uppercase;
  color:var(--green);margin-bottom:16px;
}
.hero h1 {
  font-size:clamp(2rem,5vw,3rem);font-weight:700;letter-spacing:-.03em;
  line-height:1.1;margin-bottom:14px;
  background:linear-gradient(135deg,var(--text) 0%,var(--green) 100%);
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.hero-sub {
  font-size:1.05rem;color:var(--muted);max-width:480px;margin:0 auto 10px;line-height:1.7;
}
.hero-disclaimer {
  font-size:.72rem;color:var(--dim);margin-bottom:36px;
}
.hero-actions {
  display:flex;gap:12px;justify-content:center;flex-wrap:wrap;
}
.btn {
  display:inline-flex;align-items:center;gap:8px;
  border-radius:var(--r-pill);padding:12px 24px;
  font-family:inherit;font-size:.88rem;font-weight:600;
  cursor:pointer;transition:transform .18s,box-shadow .18s,background .18s;
  text-decoration:none;border:none;
}
.btn-green {
  background:var(--green);color:#0a1a10;
  box-shadow:0 6px 20px rgba(123,178,144,.28);
}
.btn-green:hover { transform:translateY(-2px);box-shadow:0 10px 28px rgba(123,178,144,.42); }
.btn-ghost {
  background:var(--glass);color:var(--text);
  border:1px solid var(--glass-b);
}
.btn-ghost:hover { background:rgba(var(--on-rgb),.07); }

/* ── Section ── */
.section { padding:64px 24px;max-width:900px;margin:0 auto; }
.section-hdr {
  display:flex;align-items:baseline;justify-content:space-between;
  flex-wrap:wrap;gap:12px;margin-bottom:8px;
}
.section-title { font-size:1.25rem;font-weight:600; }
.section-meta { font-size:.75rem;color:var(--dim); }
.section-sub { font-size:.83rem;color:var(--muted);margin-bottom:32px; }

/* ── Status bar ── */
.status-bar {
  background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--r);
  padding:14px 20px;margin-bottom:28px;
  display:flex;align-items:center;gap:12px;flex-wrap:wrap;
  font-size:.78rem;color:var(--muted);
}
.status-dot { width:7px;height:7px;border-radius:50%;background:var(--green);flex-shrink:0;animation:blink 2.4s ease-in-out infinite; }
@keyframes blink { 0%,100%{opacity:1} 50%{opacity:.25} }

/* ── Stock cards ── */
.cards { display:flex;flex-direction:column;gap:16px; }

/* Desktop feed density (design audit): a single ~630px card per row meant ~1.4
   cards per 1440×900 viewport (50 results ≈ 51,000px page). On wide screens the
   results become a 2-column grid inside a slightly wider list section — layout/
   spacing only, all dark-mode colors untouched. Mobile/tablet unchanged. */
@media (min-width:1280px) {
  #stock-list-section { max-width:1160px; }
  #cards {
    display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:16px;
  }
  /* Full-width children (loading/empty/error boxes + values-filter note) span both columns */
  #cards > .state-box, #cards > .fvc-values-note { grid-column:1 / -1; }
  .stock-card { padding:16px 22px; }
  .card-thesis { margin-bottom:12px; }
  .fvc-interp { margin:12px 0; }
}

.stock-card {
  /* solid-ish tint, NO backdrop-filter: 50 blurred cards over the fixed
     background grid forced a per-frame GPU re-blur on scroll → whole-page
     flicker/jank (worse the more cards/the weaker the GPU). The blur was barely
     visible over the dark page anyway. */
  background:rgba(var(--on-rgb),.05);border:1px solid var(--glass-b);border-radius:var(--r);
  padding:24px 26px;
  transition:border-color .2s,box-shadow .2s;
  /* INP-Pass 2026-07-13: Below-Fold-Karten kosten weder Layout noch Paint, bis sie in
     Viewport-Nähe scrollen — ergänzt das Batched-Render vom 07-07 (185→129ms) auf der
     Präsentations-Seite. contain-intrinsic-size ≈ Kartenhöhe hält die Scrollbar stabil. */
  content-visibility:auto;
  contain-intrinsic-size:auto 340px;
}
.stock-card:hover {
  border-color:var(--green-b);
  box-shadow:0 4px 24px rgba(123,178,144,.08);
}

.card-top {
  display:flex;align-items:flex-start;justify-content:space-between;gap:16px;
  margin-bottom:6px;
}
.card-identity { flex:1;min-width:0; }
.card-ticker {
  font-size:1.2rem;font-weight:700;letter-spacing:.04em;color:var(--text);
}
.card-name {
  font-size:.8rem;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
  max-width:260px;margin-top:2px;
}
.card-score-wrap { text-align:right;flex-shrink:0; }
.card-score {
  font-size:2rem;font-weight:700;line-height:1;
  background:linear-gradient(135deg,var(--green) 0%,var(--green2) 100%);
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.card-score-lbl { font-size:.62rem;color:var(--dim);letter-spacing:.08em;text-transform:uppercase;margin-top:1px; }

.verdict-pill {
  display:inline-flex;align-items:center;gap:6px;
  padding:4px 12px;border-radius:var(--r-pill);
  font-size:.68rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
  margin-bottom:10px;
}
.verdict-strong { background:rgba(74,183,143,.15);color:var(--green2);border:1px solid rgba(74,183,143,.3); }
.verdict-watch  { background:rgba(123,178,144,.10);color:var(--green);border:1px solid var(--green-b); }
.verdict-mixed  { background:rgba(240,160,84,.10);color:var(--amber);border:1px solid rgba(240,160,84,.28); }
.verdict-weak   { background:rgba(224,95,95,.08);color:var(--red);border:1px solid rgba(224,95,95,.22); }

.card-thesis {
  font-size:.81rem;color:var(--muted);line-height:1.65;margin-bottom:18px;
  font-style:italic;
}

/* ── Factor bars ── */
.factor-bars { display:flex;flex-direction:column;gap:7px;margin-bottom:20px; }
.fb-row { display:grid;grid-template-columns:110px 1fr 36px;align-items:center;gap:10px; }
.fb-label { font-size:.7rem;color:var(--muted);letter-spacing:.04em; }
.fb-track {
  height:5px;border-radius:3px;
  background:rgba(var(--on-rgb),.06);overflow:hidden;
}
.fb-fill {
  height:100%;border-radius:3px;
  background:linear-gradient(90deg,var(--green) 0%,var(--green2) 100%);
  transition:width .6s cubic-bezier(.4,0,.2,1);
}
.fb-fill.medium { background:linear-gradient(90deg,var(--amber) 0%,#f5c875 100%); }
.fb-fill.low    { background:linear-gradient(90deg,var(--red) 0%,#e88080 100%); }
.fb-val { font-size:.7rem;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums; }

/* ── Key metrics ── */
.key-metrics {
  display:flex;flex-wrap:wrap;gap:8px 20px;
  margin-bottom:18px;
  padding:12px 0;
  border-top:1px solid var(--glass-b);
  border-bottom:1px solid var(--glass-b);
}
.km-item { font-size:.74rem; }
.km-label { color:var(--dim);margin-right:4px; }
.km-val { color:var(--text);font-weight:500; }
.km-val.up   { color:var(--green); }
.km-val.down { color:var(--red); }

/* ── Card footer ── */
.card-footer {
  display:flex;align-items:center;justify-content:space-between;
  flex-wrap:wrap;gap:10px;
}
.card-source { font-size:.66rem;color:var(--dim); }

/* ── Investment interpretation (signal label + one analytical sentence) ──── */
.fvc-interp {
  display:flex; align-items:center; gap:10px; flex-wrap:wrap;
  margin:18px 0; padding:11px 13px; border-radius:10px;
  background:rgba(var(--on-rgb),.035);
  border:1px solid var(--glass-b, rgba(var(--on-rgb),.1));
  border-left:3px solid #8a9aa0;            /* accent re-set per tone below */
  cursor:pointer; transition:background .15s, transform .12s, border-color .15s;   /* whole box opens the detail page */
  -webkit-tap-highlight-color:transparent;
}
.fvc-interp:hover { background:rgba(var(--on-rgb),.06); transform:translateY(-1px); }
.fvc-interp:active { transform:translateY(0); }
.fvc-interp:focus-visible { outline:2px solid var(--fvc-green,#7BB290); outline-offset:2px; }
.fvc-interp-badge {
  flex:0 0 auto; font-size:.67rem; font-weight:800; letter-spacing:.015em;
  padding:4px 11px; border-radius:999px; line-height:1.15; white-space:nowrap;
  background:rgba(var(--on-rgb),.06); border:1px solid var(--glass-b, rgba(var(--on-rgb),.12));
  color:var(--text,var(--text));
}
.fvc-interp-text {
  flex:1 1 220px; min-width:0; font-size:.78rem; line-height:1.4;
  color:var(--muted, rgba(var(--muted-rgb),.72));
}
/* Tone palette — green (positive) · grey (neutral/weak) · amber (caution) · red (negative) */
.fvc-interp.tone-positive,
.fvc-interp.tone-neutral-positive,
.fvc-interp.tone-positive-caution { border-left-color:#7BB290; }
.fvc-interp.tone-positive .fvc-interp-badge,
.fvc-interp.tone-neutral-positive .fvc-interp-badge,
.fvc-interp.tone-positive-caution .fvc-interp-badge {
  background:rgba(123,178,144,.16); border-color:rgba(123,178,144,.42); color:#7BB290;
}
.fvc-interp.tone-neutral,
.fvc-interp.tone-weak { border-left-color:#9aa0a6; }
.fvc-interp.tone-neutral .fvc-interp-badge,
.fvc-interp.tone-weak .fvc-interp-badge {
  background:rgba(var(--on-rgb),.06); border-color:rgba(var(--on-rgb),.16); color:#aab0b6;
}
.fvc-interp.tone-caution,
.fvc-interp.tone-neutral-caution { border-left-color:#f0a054; }
.fvc-interp.tone-caution .fvc-interp-badge,
.fvc-interp.tone-neutral-caution .fvc-interp-badge {
  background:rgba(240,160,84,.14); border-color:rgba(240,160,84,.4); color:#f0a054;
}
.fvc-interp.tone-negative { border-left-color:#e96a6a; }
.fvc-interp.tone-negative .fvc-interp-badge {
  background:rgba(233,106,106,.14); border-color:rgba(233,106,106,.42); color:#e96a6a;
}
@media (max-width:560px){
  .fvc-interp { padding:8px 10px; gap:8px; }
  .fvc-interp-badge { font-size:.62rem; padding:3px 9px; }
  .fvc-interp-text { font-size:.73rem; flex-basis:100%; }   /* sentence wraps under the badge */
}
/* Verdict / red-flag pill — one component matched to the .fvc-interp-badge pill, used
   for the red-flag badge on cards (under the verdict) and both badges on the detail page
   (under the sum row). Tone variants mirror the .fvc-interp tone palette so a solo badge
   carries its own colour without the .fvc-interp box. */
.fvc-vbadge {
  display:inline-flex; align-items:center; gap:5px;
  font-size:.67rem; font-weight:800; letter-spacing:.015em;
  padding:4px 11px; border-radius:999px; line-height:1.2; white-space:nowrap;
  border:1px solid var(--glass-b, rgba(var(--on-rgb),.12)); background:rgba(var(--on-rgb),.06); color:var(--text);
}
.fvc-vbadge.tone-positive,.fvc-vbadge.tone-neutral-positive,.fvc-vbadge.tone-positive-caution { background:rgba(123,178,144,.16); border-color:rgba(123,178,144,.42); color:#7BB290; }
.fvc-vbadge.tone-neutral,.fvc-vbadge.tone-weak { background:rgba(var(--on-rgb),.06); border-color:rgba(var(--on-rgb),.16); color:#aab0b6; }
.fvc-vbadge.tone-caution,.fvc-vbadge.tone-neutral-caution { background:rgba(240,160,84,.14); border-color:rgba(240,160,84,.4); color:#f0a054; }
.fvc-vbadge.tone-negative,.fvc-vbadge.flag { background:rgba(233,106,106,.14); border-color:rgba(233,106,106,.42); color:#e96a6a; }
/* Classification badges rendered in the SAME .fvc-vbadge component as the verdict, so the detail sum row
   reads as one consistently-sized set (operator 2026-07-12: "die badges verschieden groß"). */
.fvc-vbadge.tone-penny    { background:rgba(224,138,138,.13); border-color:rgba(224,138,138,.4); color:#e08a8a; }
.fvc-vbadge.tone-cyclical { background:rgba(144,184,240,.13); border-color:rgba(144,184,240,.4); color:#90b8f0; }
.fvc-vbadge.tone-dilution { background:rgba(240,160,84,.13);  border-color:rgba(240,160,84,.4);  color:#f0a054; }
.fvc-vbadge.flag { white-space:normal; text-align:left; display:inline-block; }   /* red-flag text can wrap — inline-block (NOT flex): any inner <span> would become its own flex item and shatter the sentence into columns */
.fvc-vbadge.flag .gq-dot { margin-right:5px; }   /* flex gap replacement for the 🚩 */
.fvc-flags-row { display:flex; flex-wrap:wrap; gap:6px; margin:7px 0 0; }   /* card: under the verdict box */
.fvc-sum-badges { display:flex; flex-wrap:wrap; gap:6px; margin:9px 0 2px; }  /* detail: under the sum rows */
@media (max-width:560px){ .fvc-vbadge { font-size:.62rem; padding:3px 9px; } }
.card-actions { display:flex;gap:8px;flex-wrap:wrap;justify-content:flex-end;flex:1 1 100%; }   /* full-width so flex-end actually pushes the buttons right (footer is space-between) → easier thumb reach */

.card-btn {
  display:inline-flex;align-items:center;justify-content:center;gap:6px;
  padding:10px 18px;border-radius:var(--r-pill);
  font-family:inherit;font-size:.82rem;font-weight:600;
  cursor:pointer;transition:background .18s,transform .18s;
  text-decoration:none;border:none;
}
.card-btn.details {
  background:var(--glass);color:var(--text);
  border:1px solid var(--glass-b);
}
.card-btn.details:hover { background:rgba(var(--on-rgb),.09); }
.card-btn.fvc {
  background:var(--green-d);color:var(--green);
  border:1px solid var(--green-b);
}
.card-btn.fvc:hover { background:rgba(123,178,144,.18); }
.card-btn.coffee {
  background:rgba(240,160,84,.10);color:var(--amber);
  border:1px solid rgba(240,160,84,.25);
}
.card-btn.coffee:hover { background:rgba(240,160,84,.18); }

/* iPhone (≤560px): shrink the three card actions (Details / Watch / Share this find)
   a touch so all three stay on ONE row instead of wrapping (operator, iPhone 12 Pro).
   Higher specificity than the base .card-btn → overrides padding/font on mobile only. */
@media (max-width:560px){
  .card-actions { gap:6px; }
  .card-actions .card-btn { padding:8px 10px; font-size:.74rem; gap:5px; white-space:nowrap; }
  .card-actions .card-btn svg { width:12px; height:12px; }
}
/* iPhone 12/13 class (≤430px): one notch tighter still — the GERMAN labels
   („Fair Value ansehen" · „+ Merken" · „Fund teilen") otherwise wrap to a second
   row (operator 2026-07-06). Buttons also flex-grow so a fitting row fills the
   card width evenly instead of hugging the right edge. */
@media (max-width:430px){
  .card-actions .card-btn { padding:8px 8px; font-size:.7rem; flex:1 1 auto; min-width:0; }
}

/* ── Confidence badge ── */
.conf-badge {
  display:inline-flex;align-items:center;gap:4px;
  font-size:.64rem;padding:2px 9px;border-radius:var(--r-pill);
  letter-spacing:.06em;text-transform:uppercase;
}
.conf-high   { background:rgba(123,178,144,.12);color:var(--green);border:1px solid var(--green-b); }
.conf-medium { background:rgba(240,160,84,.10);color:var(--amber);border:1px solid rgba(240,160,84,.25); }
.conf-low    { background:rgba(224,95,95,.08);color:var(--red);border:1px solid rgba(224,95,95,.2); }

/* ── Loading & empty states ── */
.state-box {
  text-align:center;padding:64px 24px;
  background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--r);
}
.state-box p { color:var(--muted);font-size:.88rem;margin-top:12px;line-height:1.7; }
/* ── No-results dialog (search returned 0 hits): apologise → AI → report gap → calculators ── */
.fvc-nores { max-width:520px;margin:0 auto;padding:40px 26px; }
.fvc-nores-emoji { font-size:2.2rem;line-height:1;margin-bottom:6px;opacity:.9; }
.fvc-nores-title { color:var(--text,#e9f1ec);font-size:1.08rem;font-weight:800;margin:6px 0 4px;line-height:1.35; }
.fvc-nores-sub { color:var(--muted);font-size:.86rem;line-height:1.65;margin:0 auto 18px;max-width:440px; }
.fvc-nores-actions { display:flex;flex-direction:column;gap:10px;max-width:360px;margin:0 auto; }
.fvc-nores-btn { display:block;width:100%;box-sizing:border-box;padding:12px 16px;border-radius:12px;
  font-size:.9rem;font-weight:700;cursor:pointer;text-decoration:none;text-align:center;
  border:1px solid var(--glass-b);background:rgba(255,255,255,.04);color:var(--text,#e9f1ec);
  transition:transform .12s ease,background .15s ease,border-color .15s ease; }
.fvc-nores-btn:hover { background:rgba(255,255,255,.08);transform:translateY(-1px); }
.fvc-nores-btn.primary { background:var(--fvc-green,#7BB290);border-color:transparent;color:#08130d; }
.fvc-nores-btn.primary:hover { background:#8cc4a2; }
.fvc-nores-btn.ghost { background:transparent;color:var(--muted);font-weight:600; }
.fvc-nores-hint { color:var(--dim,rgba(233,241,236,.5));font-size:.74rem;margin-top:16px; }
.fvc-nores-thanks { display:block;padding:12px 16px;border-radius:12px;font-size:.86rem;font-weight:700;line-height:1.5;
  color:#9be8bf;background:rgba(123,178,144,.12);border:1px solid rgba(123,178,144,.32); }
/* Pulse-highlight the search bar / magnifier when the user is sent there to use the AI */
@keyframes fvcBarPulse { 0%,100%{box-shadow:0 0 0 0 rgba(123,178,144,0);} 25%{box-shadow:0 0 0 4px rgba(123,178,144,.55);} }
.fvc-bar-pulse { animation:fvcBarPulse 0.85s ease-in-out 3;border-radius:14px; }
.spinner {
  width:36px;height:36px;border-radius:50%;
  border:3px solid var(--glass-b);border-top-color:var(--green);
  animation:spin .8s linear infinite;margin:0 auto 16px;
}
@keyframes spin { to { transform:rotate(360deg); } }
/* Small inline spinner for the sign-in / contact "verifying…/sending…" status line. */
.login-spin {
  display:inline-block;width:14px;height:14px;vertical-align:-2px;margin-right:7px;
  border:2px solid var(--glass-b);border-top-color:var(--green);border-radius:50%;
  animation:spin .7s linear infinite;
}

/* ── Modal ── */
.modal-overlay {
  position:fixed;inset:0;z-index:500;
  /* NO backdrop-filter: a blur on this fixed full-screen overlay forced the compositor to
     re-blur every frame while scrolling the modal → heavy scroll lag on Chrome (Safari never
     applied it — it needs the -webkit- prefix — which is why the jank was Chrome-only). A near-
     solid backdrop looks the same and scrolls smoothly. */
  background:rgba(0,0,0,.8);
  display:flex;align-items:center;justify-content:center;
  padding:20px;opacity:0;pointer-events:none;transition:opacity .25s;
}
.modal-overlay.open { opacity:1;pointer-events:all; }

.modal {
  background:var(--surface);border:1px solid var(--glass-b);border-radius:var(--r);
  width:100%;max-width:640px;max-height:86vh;max-height:86dvh;overflow-y:auto;overflow-x:hidden;
  -webkit-overflow-scrolling:touch;   /* momentum scrolling on iOS */
  padding:28px;position:relative;
  box-shadow:0 24px 70px rgba(0,0,0,.55);
  transform:translateY(12px);transition:transform .25s;
}
.modal-overlay.open .modal { transform:translateY(0); }

/* ── Embedded Stripe checkout: a framed, on-brand sheet so the white Stripe form lands softly on
   the dark site, plus an instant loading state (the click never feels frozen). ── */
/* A clean BRANDED header on the dark sheet — our logo + a quiet "secure payment via Stripe" trust
   line — then the familiar (tested) white Stripe card below. The logo is graphic brand identity, so
   it doesn't compete with Stripe's text product band; it just frames the checkout as ours. */
.fvc-embed-co { padding:14px 0 0; }
.fvc-embed-brandhead { display:flex; flex-direction:column; align-items:center; gap:9px; padding:6px 44px 13px; }
.fvc-embed-brandhead .fvc-embed-logo { height:25px; width:auto; display:block; }
/* Light mode: the white wordmark vanishes on the light sheet — swap to the dark-text variant. */
.fvc-embed-brandhead .fvc-embed-logo-light { display:none; }
html[data-theme="light"] .fvc-embed-brandhead .fvc-embed-logo-dark  { display:none; }
html[data-theme="light"] .fvc-embed-brandhead .fvc-embed-logo-light { display:block; }
.fvc-embed-brandhead .fvc-embed-secure { display:inline-flex; align-items:center; gap:6px;
  font-size:.78rem; font-weight:600; letter-spacing:.01em; color:var(--muted,#9fb0a8); }
.fvc-embed-brandhead .fvc-embed-stripe { display:inline-flex; align-items:center; }
.fvc-embed-brandhead .fvc-embed-stripe svg { height:16px; width:auto; display:block; }
/* Trust + founder reassurance under "Powered by Stripe", on the dark sheet, above the Stripe card. */
.fvc-co-trust { padding:2px 18px 10px; }
.fvc-co-trust-item { display:flex; align-items:flex-start; gap:9px; margin:9px 0;
  font-size:.83rem; line-height:1.45; color:var(--muted,#9fb0a8); }
.fvc-co-trust-item .fvc-co-ck { flex:0 0 auto; width:16px; height:16px; margin-top:1px; color:var(--green,#7BB290); }
.fvc-co-founder { display:flex; align-items:center; gap:13px; margin-top:14px; padding:13px 14px;
  background:rgba(123,178,144,.07); border:1px solid var(--green-b,rgba(123,178,144,.30)); border-radius:14px; }
.fvc-co-founder .fvc-co-photo { flex:0 0 auto; width:56px; height:56px; border-radius:50%;
  object-fit:cover; object-position:50% 22%; background:#fff; }
.fvc-co-founder .fvc-co-fnote { min-width:0; }
.fvc-co-founder .fvc-co-fnote p { margin:0; font-size:.82rem; line-height:1.4; color:var(--text,#e9f1ec); }
/* Trust-Block statt Unterschrift (operator 2026-07-16): Name in normaler Schrift, ruhig + seriös. */
.fvc-co-founder .fvc-co-name { display:block; margin-top:6px; line-height:1.2;
  font-weight:700; font-size:.88rem; color:var(--text,#e9f1ec); }
.fvc-co-founder .fvc-co-role { display:block; margin-top:2px; font-size:.68rem; font-weight:700;
  letter-spacing:.09em; text-transform:uppercase; color:var(--muted,#9fb0a8); }
.fvc-embed-mount { min-height:440px; padding:4px 6px 12px; }
/* Once Stripe's (light) form is mounted, frame it as an intentional white inset card — rounded to
   match the site's radii, soft shadow, breathing margin — so it reads as designed-in, not bolted-on.
   The loader above stays on the dark sheet (its muted text needs the dark bg for contrast). */
.fvc-embed-mount.is-ready { animation:fvcEmbedIn .35s ease; margin:12px; padding:8px 8px 10px;
  background:#fff; border-radius:16px; overflow:hidden; box-shadow:0 10px 34px rgba(0,0,0,.24); }
.fvc-embed-loading { display:flex; flex-direction:column; align-items:center; justify-content:center;
  gap:14px; min-height:420px; padding:0 24px; text-align:center; color:var(--muted,#9fb0a8); font-size:.9rem; }
.fvc-embed-spin { width:32px; height:32px; border-radius:50%;
  border:3px solid rgba(123,178,144,.22); border-top-color:var(--green,#7BB290); animation:fvcSpin .8s linear infinite; }
@keyframes fvcSpin { to { transform:rotate(360deg); } }
@keyframes fvcEmbedIn { from { opacity:0; } to { opacity:1; } }
@media (prefers-reduced-motion:reduce) { .fvc-embed-spin { animation-duration:1.6s; } .fvc-embed-mount.is-ready { animation:none; } }

/* ── DARK on-site checkout (Stripe Payment Element) — seamless with the dark site, no white box.
   The Payment Element itself is themed via its JS `appearance` API (FVC_PE_APPEARANCE); this styles
   our surrounding summary, pay button and trust line so the whole sheet reads as one dark unit. ── */
.fvc-pe-co { padding:30px 18px 20px; }
.fvc-pe-head { padding:2px 2px 14px; border-bottom:1px solid var(--fvc-border,rgba(255,255,255,.08)); margin-bottom:14px; }
.fvc-pe-brand { font-weight:800; font-size:1.12rem; letter-spacing:.01em; color:var(--text,#e9f1ec); }
.fvc-pe-brand span { color:var(--green,#7BB290); }
.fvc-pe-price { margin-top:5px; font-size:.95rem; color:var(--muted,#9fb0a8); }
.fvc-pe-price .fvc-pe-now { color:var(--green,#7BB290); font-weight:800; font-size:1.15rem; }
.fvc-pe-field { margin:12px 0; }
.fvc-pe-paybox { min-height:220px; }
.fvc-pe-pay { margin-top:18px; width:100%; padding:15px 16px; border:0; border-radius:14px;
  background:var(--green,#7BB290); color:#0a1a10; font-weight:800; font-size:1.04rem; cursor:pointer;
  transition:filter .15s ease, transform .05s ease; }
.fvc-pe-pay:hover { filter:brightness(1.06); }
.fvc-pe-pay:active { transform:translateY(1px); }
.fvc-pe-trust { margin-top:13px; display:flex; align-items:center; justify-content:center; gap:6px;
  flex-wrap:wrap; font-size:.8rem; color:var(--muted,#9fb0a8); }
.fvc-pe-trust .fvc-pe-stripe { display:inline-flex; align-items:center; }
.fvc-pe-trust .fvc-pe-stripe svg { height:15px; width:auto; display:block; opacity:.92; }

.modal-close {
  position:absolute;top:16px;right:16px;
  width:28px;height:28px;border-radius:50%;
  background:var(--glass);border:1px solid var(--glass-b);
  color:var(--muted);font-size:1rem;cursor:pointer;
  display:flex;align-items:center;justify-content:center;
  transition:background .15s,color .15s;
}
.modal-close:hover { background:rgba(var(--on-rgb),.10); }

.modal h2 { font-size:1.1rem;font-weight:700;margin-bottom:4px; }
.modal .modal-sub { font-size:.78rem;color:var(--muted);margin-bottom:20px; }

/* Detail-section rhythm (design-polish 2026-07): ONE gap between sections (32px, 8px grid),
   ONE gap after every section title (12px). Mobile scales both down (see .modal-sheet). */
.modal-section { margin-bottom:32px; }
.modal-section-title {
  font-size:.8rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--green);margin-bottom:12px;padding-bottom:6px;
  border-bottom:1px solid var(--glass-b);
}
/* collapsible section (<details class="modal-fold">) — Data Sources ships collapsed */
.modal-fold summary { display:flex;align-items:center;justify-content:space-between;gap:8px;
  cursor:pointer;list-style:none;-webkit-tap-highlight-color:transparent; }
.modal-fold summary::-webkit-details-marker { display:none; }
.modal-fold summary .modal-section-title { flex:1 1 auto;margin-bottom:0; }
.modal-fold summary .modal-fold-chev { flex:0 0 auto;color:var(--green);opacity:.75;
  margin-bottom:4px;transition:transform .18s; }
.modal-fold[open] summary .modal-fold-chev { transform:rotate(180deg); }
.modal-fold[open] summary { margin-bottom:2px; }
.modal-row {
  display:flex;justify-content:space-between;align-items:center;
  padding:5px 0;font-size:.8rem;color:var(--muted);
  border-bottom:1px solid rgba(var(--on-rgb),.03);
}
.modal-row:last-child { border-bottom:none; }
.modal-row .mr-label { flex:1; }
.modal-row .mr-val { font-weight:500;color:var(--text);font-variant-numeric:tabular-nums;text-align:right; }
.modal-row .mr-score {
  width:28px;height:28px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  font-size:.68rem;font-weight:700;margin-left:10px;flex-shrink:0;
}
.modal-warn {
  background:rgba(240,160,84,.08);border:1px solid rgba(240,160,84,.2);
  border-radius:var(--r-sm);padding:10px 14px;
  font-size:.78rem;color:var(--amber);margin-top:10px;line-height:1.55;
}
.modal-penalty {
  background:rgba(224,95,95,.07);border:1px solid rgba(224,95,95,.2);
  border-radius:var(--r-sm);padding:8px 12px;margin:4px 0;
  font-size:.78rem;color:var(--red);
}

/* ── Footer ── */
/* slim final strip — compact, premium, unobtrusive */
.footer {
  border-top:1px solid var(--glass-b);
  padding:12px 24px; margin-top:40px;
  background:rgba(10,15,11,.5);
}
.footer-inner {
  max-width:1180px; margin:0 auto;
  display:flex; justify-content:space-between; align-items:center;
  flex-wrap:wrap; gap:4px 18px;
}
.footer-copy { font-size:.74rem; font-weight:600; color:var(--muted); letter-spacing:.01em; }
.footer-note { font-size:.7rem; color:var(--dim); }
.footer-nav { display:flex; flex-wrap:wrap; gap:6px 22px; justify-content:center; max-width:1180px; margin:0 auto 14px; padding-bottom:14px; border-bottom:1px solid var(--fvc-border); }
.footer-nav a { font-size:.8rem; font-weight:600; color:var(--muted); text-decoration:none; transition:color .15s; }
.footer-nav a:hover { color:var(--green); }
.footer-legal { display:flex; flex-wrap:wrap; gap:6px 18px; justify-content:center; max-width:1180px; margin:0 auto 12px; }
.footer-legal a { font-size:.76rem; color:var(--muted); text-decoration:none; transition:color .15s; }
.footer-legal a:hover { color:var(--green); text-decoration:underline; }

/* ── Community leaderboard (footer) ───────────────────────────────────────── */
.fvc-lb {
  max-width:520px; margin:0 auto 22px; padding:16px 18px 14px;
  border:1px solid var(--glass-b); border-radius:14px;
  background:linear-gradient(180deg, rgba(123,178,144,.06), rgba(10,15,11,.2));
}
/* In the Evidence popup the leaderboard follows the "Bottom line" box with no gap → they
   stuck together. Add clear top spacing (footer leaderboard keeps margin-top:0). */
.fvc-lb-ev { margin-top:26px; }
/* Standalone leaderboard slot between the Statistics box and the Smaller-tests box. */
.ev3-lb-slot { margin:24px 0; }   /* Schluss-Rhythmus vereinheitlicht auf 24 (war 30/32, Rhythmus-Pass 2026-07-16) */
.fvc-lb-h { font-size:.92rem; font-weight:800; color:var(--text); margin-bottom:12px; display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
.fvc-lb-sub { font-size:.66rem; font-weight:600; letter-spacing:.04em; text-transform:uppercase; color:var(--dim); }
.fvc-lb-loading { list-style:none; padding:8px 10px; color:var(--dim); font-size:.84rem; }
.fvc-lb-list { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:2px; }
.fvc-lb-row { padding:8px 10px; border-radius:10px; font-size:.86rem; }
.fvc-lb-main { display:flex; align-items:center; gap:10px; }
.fvc-lb-click > .fvc-lb-main { cursor:pointer; }
.fvc-lb-click > .fvc-lb-main::after { content:'▾'; flex:0 0 auto; color:var(--dim); font-size:.7rem; transition:transform .15s; }
.fvc-lb-row.open > .fvc-lb-main::after { transform:rotate(180deg); }
.fvc-lb-top3 { display:flex; flex-wrap:wrap; gap:5px 14px; padding:9px 0 3px 38px; }
/* The `hidden` attribute (JS collapses ranks #4+) must beat display:flex above —
   else every row's stocks stay visible (operator: "immer schon ausgeklappt"). */
.fvc-lb-top3[hidden] { display:none; }
.fvc-lb-h3 { font-size:.74rem; color:var(--muted); font-variant-numeric:tabular-nums; background:none; border:1px solid var(--fvc-border,rgba(var(--on-rgb),.10)); border-radius:6px; padding:3px 8px; cursor:pointer; font-family:inherit; transition:border-color .15s,background .15s; }
.fvc-lb-h3:hover { border-color:var(--fvc-green,#7BB290); background:rgba(123,178,144,.08); }
.fvc-lb-h3 b { color:var(--text); font-weight:700; }
.fvc-lb-h3 .pos { color:var(--green,#7BB290); }
.fvc-lb-h3 .neg { color:#e08a8a; }
.fvc-lb-row:nth-child(odd) { background:rgba(var(--on-rgb),.025); }
.fvc-lb-top { background:rgba(123,178,144,.10) !important; }
.fvc-lb-rank { flex:0 0 28px; text-align:center; font-weight:800; font-size:1rem; color:var(--muted); }
.fvc-lb-nick { flex:1 1 auto; min-width:0; font-weight:700; color:var(--text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fvc-lb-hold { flex:0 0 auto; font-size:.72rem; color:var(--dim); white-space:nowrap; }
.fvc-lb-ret { flex:0 0 auto; font-weight:800; font-variant-numeric:tabular-nums; min-width:62px; text-align:right; }
.fvc-lb-ret.pos { color:var(--green,#7BB290); }
.fvc-lb-ret.neg { color:#e08a8a; }
.fvc-lb-foot { margin-top:11px; font-size:.7rem; color:var(--dim); text-align:center; }
@media (max-width:520px){ .fvc-lb-hold { display:none; } }

/* ── Hero stats panel ── */
.hero-stats {
  display:flex;flex-wrap:wrap;gap:10px;justify-content:center;
  margin-top:36px;
}
.hero-stat {
  background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--r);
  padding:14px 22px;min-width:130px;text-align:center;
}
.hero-stat-val {
  font-size:1.4rem;font-weight:700;line-height:1;margin-bottom:4px;
  background:linear-gradient(135deg,var(--text) 0%,var(--green) 100%);
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.hero-stat-label {
  font-size:.64rem;color:var(--dim);letter-spacing:.1em;text-transform:uppercase;
}

/* ── How it works section ── */
.hiw-grid {
  display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:14px;margin-top:28px;
}
.hiw-card {
  background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--r);
  padding:20px 22px;
  transition:border-color .2s;
}
.hiw-card:hover { border-color:var(--green-b); }
.hiw-icon {
  font-size:1.5rem;margin-bottom:10px;line-height:1;
}
.hiw-title {
  font-size:.85rem;font-weight:700;color:var(--green);margin-bottom:6px;
}
.hiw-weight {
  display:inline-block;font-size:.6rem;font-weight:600;
  background:var(--green-d);color:var(--green);border:1px solid var(--green-b);
  border-radius:var(--r-pill);padding:2px 8px;margin-bottom:8px;
  letter-spacing:.08em;text-transform:uppercase;
}
.hiw-desc {
  font-size:.77rem;color:var(--muted);line-height:1.6;
}
.hiw-note {
  margin-top:20px;text-align:center;font-size:.73rem;color:var(--dim);
}

/* ── Transparency panel ── */
.tp-panel {
  background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--r);
  padding:24px 28px;
}
.tp-title {
  font-size:.68rem;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--green);margin-bottom:14px;padding-bottom:8px;
  border-bottom:1px solid var(--glass-b);
}
.tp-row {
  display:flex;gap:14px;align-items:flex-start;
  padding:7px 0;border-bottom:1px solid rgba(var(--on-rgb),.03);
  font-size:.8rem;
}
.tp-row:last-child { border-bottom:none; }
.tp-dot {
  width:6px;height:6px;border-radius:50%;background:var(--green);
  flex-shrink:0;margin-top:6px;
}
.tp-text { color:var(--muted);line-height:1.6; }
.tp-text strong { color:var(--text);font-weight:600; }

/* ── Modal raw financials ── */
.fin-grid {
  display:grid;grid-template-columns:1fr 1fr;gap:4px 20px;margin-top:2px;
}
.fin-item {
  display:flex;justify-content:space-between;align-items:center;
  font-size:.77rem;padding:3px 0;border-bottom:1px solid rgba(var(--on-rgb),.03);
}
.fin-label { color:var(--dim); }
.fin-val { color:var(--text);font-weight:500;font-variant-numeric:tabular-nums; }

/* ── Modal warning / missing ── */
.modal-missing {
  background:rgba(var(--on-rgb),.04);border:1px solid rgba(var(--on-rgb),.08);
  border-radius:var(--r-sm);padding:10px 14px;margin:4px 0;
  font-size:.78rem;color:var(--dim);
}

/* ── Filter bar ── */
.filter-bar {
  background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--r);
  padding:16px 20px;margin-bottom:20px;
}
.filter-row {
  display:flex;flex-wrap:wrap;gap:10px;align-items:center;
}
.filter-select, .filter-input {
  background:rgba(var(--on-rgb),.06);border:1px solid var(--glass-b);
  border-radius:var(--r-sm);color:var(--text);
  font-family:inherit;font-size:.78rem;padding:7px 12px;
  cursor:pointer;min-width:130px;
  appearance:none;-webkit-appearance:none;
}
.filter-select:focus, .filter-input:focus {
  outline:none;border-color:var(--green-b);
}
.filter-input { min-width:160px; }
.filter-input::placeholder { color:var(--dim); }
.filter-btn {
  display:inline-flex;align-items:center;gap:5px;
  padding:7px 16px;border-radius:var(--r-pill);
  font-family:inherit;font-size:.78rem;font-weight:600;
  cursor:pointer;border:none;transition:background .18s;
}
.filter-btn.apply {
  background:var(--green);color:#0a1a10;
}
.filter-btn.apply:hover { background:var(--green2); }
.filter-btn.universe {
  background:var(--glass);color:var(--muted);
  border:1px solid var(--glass-b);
}
.filter-btn.universe:hover { background:rgba(var(--on-rgb),.09); }
.filter-label {
  font-size:.68rem;color:var(--dim);
  display:block;margin-bottom:2px;letter-spacing:.06em;text-transform:uppercase;
}
.filter-group { display:flex;flex-direction:column;gap:2px; }
.filter-row-sources {
  margin-top:10px;padding-top:10px;
  border-top:1px solid var(--glass-b);
}
.filter-hint {
  font-size:.66rem;color:var(--dim);margin-top:8px;
  font-style:italic;
}

/* ── Universe modal ── */
.univ-modal {
  background:var(--surface);border:1px solid var(--glass-b);border-radius:var(--r);
  width:100%;max-width:680px;max-height:88vh;max-height:88dvh;overflow-y:auto;
  padding:28px;position:relative;
  box-shadow:0 24px 70px rgba(0,0,0,.55);
  transform:translateY(12px);transition:transform .25s;
}
.modal-overlay.open .univ-modal { transform:translateY(0); }

.univ-stat-grid {
  display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));
  gap:12px;margin:16px 0;
}
.univ-stat-card {
  background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--r-sm);
  padding:14px 16px;
}
.univ-stat-val {
  font-size:1.3rem;font-weight:700;
  background:linear-gradient(135deg,var(--text) 0%,var(--green) 100%);
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
  margin-bottom:4px;
}
.univ-stat-label { font-size:.65rem;color:var(--dim);letter-spacing:.08em;text-transform:uppercase; }

.univ-progress-wrap { margin:16px 0; }
.univ-progress-label {
  display:flex;justify-content:space-between;
  font-size:.75rem;color:var(--muted);margin-bottom:6px;
}
.univ-progress-bar {
  height:8px;background:rgba(var(--on-rgb),.06);border-radius:4px;overflow:hidden;
}
.univ-progress-fill {
  height:100%;border-radius:4px;
  background:linear-gradient(90deg,var(--green) 0%,var(--green2) 100%);
  transition:width .6s ease;
}

.univ-breakdown-grid {
  display:grid;grid-template-columns:1fr 1fr;gap:6px;margin:12px 0;
}
.univ-breakdown-row {
  display:flex;justify-content:space-between;
  font-size:.78rem;padding:5px 10px;
  background:var(--glass);border-radius:6px;
}
.univ-breakdown-label { color:var(--muted); }
.univ-breakdown-val   { font-weight:600;color:var(--text); }

/* ── Badges ── */
.badge {
  display:inline-flex;align-items:center;gap:3px;
  padding:2px 8px;border-radius:var(--r-pill);
  font-size:.62rem;font-weight:600;letter-spacing:.04em;
  text-transform:uppercase;
}
.badge-green  { background:rgba(123,178,144,.18);color:var(--green); border:1px solid var(--green-b); }
.badge-amber  { background:rgba(240,160,84,.12); color:var(--amber); border:1px solid rgba(240,160,84,.25); }
.badge-red    { background:rgba(224,95,95,.12);  color:var(--red);   border:1px solid rgba(224,95,95,.25); }
.badge-blue   { background:rgba(100,160,240,.10);color:#90b8f0;      border:1px solid rgba(100,160,240,.2); }
.badge-dim    { background:var(--glass);color:var(--dim);             border:1px solid var(--glass-b); }
.card-badges  { display:flex;flex-wrap:wrap;gap:4px;margin-top:6px; }

/* ── Factor family row ── */
.fam-grid { display:flex;flex-direction:column;gap:6px;margin-top:10px; }
/* Unified quality list: family group headers + per-factor research basis */
.qf-fam { font-size:.86rem;font-weight:700;color:var(--text);margin:28px 0 11px;letter-spacing:.01em; }   /* larger sub-headings + more air above/below (operator 2026-07-09) */
.qf-item { display:flex;flex-direction:column;gap:1px; }
.qf-item + .qf-item { margin-top:0; }   /* Extra-Luft war fuer die Studienzeile darunter; seit die in der Erklaerblase steckt (2026-08-01), gilt derselbe 6px-Rhythmus wie bei KI-Qualitaet & Co. */
.qf-study { font-size:.62rem;color:var(--dim);line-height:1.35;padding-left:2px;margin-top:1px; }
/* Prominent Quality Score header (operator): big colour-coded number. */
.qf-scorehead { display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:8px; }
.qf-scorehead-lbl { font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--dim); }
.qf-scorehead-val { font-size:2.1rem;font-weight:800;line-height:1;font-variant-numeric:tabular-nums; }
.qf-scorehead-max { font-size:.95rem;font-weight:600;color:var(--dim); }
.fam-row {
  display:grid;grid-template-columns:150px 1fr 42px;align-items:center;gap:14px;   /* more air between the label and the bar so bars don't hug the text (operator 2026-07-09) */
  font-size:.73rem;
}
/* Label shrinks to its own text so the dotted tooltip underline only spans the WORDS,
   not the whole 150px column up to the bar (operator 2026-07-09). */
.fam-row .fam-name { justify-self:start; }
.fam-bar-wrap { background:rgba(var(--on-rgb),.06);border-radius:var(--r-pill);height:5px;overflow:hidden;margin-left:2px; }
.fam-bar-fill { height:100%;border-radius:var(--r-pill);background:var(--green);transition:width .3s;min-width:7px; }
.fam-score { text-align:right;font-weight:600;font-size:.73rem; }
.fam-missing { color:var(--dim);font-style:italic; }
/* Tap-to-explain on a quality-factor name (opens an .mv-pop bubble via fvcInfoPop). */
.fam-name-x { position:relative; cursor:pointer; }
.fam-name-x:hover, .fam-name-x:focus-visible { color:var(--text); outline:none; }
.fam-i { opacity:.45; font-size:.85em; }
.fam-name-x:hover .fam-i, .fam-name-x:focus-visible .fam-i { opacity:.95; }

/* ── Source confidence bar ── */
.src-conf-bar {
  display:flex;align-items:center;gap:8px;font-size:.72rem;margin-top:4px;
}
.src-conf-fill { flex:1;background:rgba(var(--on-rgb),.06);border-radius:var(--r-pill);height:4px;overflow:hidden; }
.src-conf-inner { height:100%;border-radius:var(--r-pill);transition:width .3s; }

/* ── Alpha factor audit table ── */
.factor-audit { width:100%;border-collapse:collapse;font-size:.72rem;margin-top:8px; }
.factor-audit th {
  text-align:left;padding:4px 8px;color:var(--dim);
  font-weight:500;font-size:.65rem;text-transform:uppercase;letter-spacing:.05em;
  border-bottom:1px solid var(--glass-b);
}
.factor-audit td { padding:5px 8px;border-bottom:1px solid rgba(var(--on-rgb),.04);vertical-align:top; }
.factor-audit tr.factor-missing td { color:var(--dim);font-style:italic; }
.factor-audit tr.factor-ok td:first-child { color:var(--text); }
.factor-audit .fa-score { font-weight:700; }
.factor-audit .fa-basis { color:var(--dim);font-size:.65rem; }

/* ── Reconciliation event row ── */
.recon-events { display:flex;flex-direction:column;gap:4px;margin-top:6px; }
.recon-event {
  padding:6px 10px;border-radius:8px;font-size:.72rem;
  border-left:3px solid;
}
.recon-event.error   { background:rgba(224,95,95,.08); border-color:var(--red);   color:var(--text); }
.recon-event.warning { background:rgba(240,160,84,.08);border-color:var(--amber); color:var(--text); }
.recon-event.info    { background:var(--glass);         border-color:var(--green-b);color:var(--muted); }

/* ── Data mode badge on card ── */
.card-mode-evidence { color:var(--green);  font-size:.64rem;font-weight:600; }
.card-mode-momentum { color:var(--amber);  font-size:.64rem;font-weight:600; }

/* ── Stats panel – new layout ── */
.stats-panel {
  display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));
  gap:12px;margin-top:24px;
}
.stat-card {
  background:var(--glass);border:1px solid var(--glass-b);border-radius:var(--r-sm);
  padding:14px 16px;text-align:center;
}
.stat-card-val   { font-size:1.5rem;font-weight:700;color:var(--green);line-height:1.1; }
.stat-card-label { font-size:.67rem;color:var(--dim);margin-top:3px;text-transform:uppercase;letter-spacing:.05em; }
.stat-card-note  { font-size:.62rem;color:var(--dim);margin-top:2px;font-style:italic; }

/* ── Responsive ── */
@media (max-width:640px) {
  .hero { padding:48px 16px 40px; }
  .section { padding:40px 16px; }
  .stock-card { padding:18px; }
  .card-top { flex-direction:column;gap:4px; }
  .card-score-wrap { display:flex;align-items:center;gap:10px; }
  .card-score { font-size:1.5rem; }
  .fb-row { grid-template-columns:90px 1fr 30px; }
  .footer-inner { flex-direction:column; align-items:flex-start; gap:3px; }
}

/* ── Fair Value Model Stack ── */
.fv-consensus {
  background:rgba(123,178,144,.08);border:1px solid rgba(123,178,144,.2);
  border-radius:8px;padding:18px 16px;margin:8px 0 14px;
}
/* Three fair values, larger with breathing room. When it must wrap (narrow): Bear
   top-left, Bull top-right, Fair Value centered on the line below (operator). */
/* One line on every width — Bear · Fair Value · Bull. Fonts scale with the screen
   (clamp) so all three stay on a single line even on a narrow iPhone, with the
   Fair Value kept the prominent one (operator). */
.fv-range-row { display:flex;align-items:baseline;justify-content:space-between;gap:6px;flex-wrap:nowrap;font-size:clamp(.72rem,3.2vw,.95rem);margin-bottom:0; }
.fv-range-row .fv-bear { text-align:left;white-space:nowrap; }
.fv-range-row .fv-bull { text-align:right;white-space:nowrap; }
.fv-range-row .fv-base { text-align:center;white-space:nowrap;font-size:clamp(.82rem,3.7vw,1.12rem);font-weight:600; }
.fv-range-row strong { font-weight:800; }
.fv-bear { color:var(--red); }
.fv-bull { color:var(--green); }
@media (min-width:560px) { .fv-range-row { justify-content:space-evenly; } }
/* Single centered score inside a .fv-consensus box (Quality Score / AI Quality) — same
   green box and same value size as the Fair Value headline, score colour-coded. */
.fv-scorebox { text-align:center;font-size:clamp(.82rem,3.7vw,1.12rem);font-weight:600;line-height:1.2; }
.fv-scorebox strong { font-weight:800; }
.fv-scorebox-sub { text-align:center;font-size:.74rem;color:var(--muted);margin-top:5px; }
.fv-scorebox-sub b { font-weight:800; }
/* Centred, colour-coded sentence inside a .fv-consensus box (Revenue/Growth verdict). */
.fv-boxsentence { text-align:center;font-size:.88rem;font-weight:600;line-height:1.45; }
/* Extra-long combined value string (e.g. high-priced stocks) → shrink the row a notch
   so Bear · Fair Value · Bull still never collide (operator). */
.fv-range-row--tight { font-size:clamp(.62rem,2.7vw,.82rem); }
.fv-range-row--tight .fv-base { font-size:clamp(.68rem,3vw,.92rem); }
.fv-meta { font-size:.72rem;color:var(--dim);margin-top:4px; }
.fv-note { font-size:.65rem;color:var(--dim);margin:6px 0 0;line-height:1.5; }
.fv-table { margin:8px 0; }
.fv-table-header,.fv-model-row {
  /* Bear·Base·Bull each get their OWN equal column so the values line up VERTICALLY across
     rows (a flex group staggered them). Headers + values are centred in each column; the
     value block keeps a clear gap to the Evidence badge (narrowed to what its 0–100 score
     needs). Value font is fluid so long numbers (e.g. Korean won in thousands) stay on one
     line on phones. (operator 2026-07-09) */
  display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.5fr) 48px;align-items:center;
  gap:13px;padding:3px 0;border-bottom:1px solid rgba(var(--on-rgb),.04);
}
.fv-family-group { margin-bottom:8px; }
.fv-family-label { font-size:.65rem;text-transform:uppercase;letter-spacing:.07em;color:var(--dim);padding:6px 0 2px;border-bottom:1px solid rgba(var(--on-rgb),.08); }
.fv-model-name  { font-size:.74rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;justify-self:start;max-width:100%; }   /* justify-self:start → the dotted tooltip underline hugs the model name, not the whole column up to the numbers (operator 2026-07-09) */
/* Bear · Base · Bull spread across the column (space-between) so they sit further
   apart and leave room for the wider "Evidence" header (operator). */
/* 3 equal columns → Bear·Base·Bull align vertically down the table; centred so each value
   sits under its centred header; 10px between them; fluid font so long values never wrap or
   collide on small screens. */
.fv-model-vals  { display:grid;grid-template-columns:1fr 1fr 1fr;gap:10px;font-size:clamp(.61rem,2.2vw,.72rem);font-family:monospace;font-variant-numeric:tabular-nums; }
.fv-bear-val    { color:var(--red);text-align:center;white-space:nowrap;min-width:0; }
.fv-base-val    { text-align:center;white-space:nowrap;min-width:0; }
.fv-bull-val    { color:var(--green);text-align:center;white-space:nowrap;min-width:0; }
.fv-conf        { font-size:.66rem;text-align:center;border-radius:4px;padding:1px 4px; }
.fv-conf-hi     { background:rgba(123,178,144,.18);color:var(--green); }
.fv-conf-med    { background:rgba(240,160,84,.15);color:var(--amber); }
.fv-conf-lo     { background:rgba(var(--on-rgb),.07);color:var(--dim); }
.fv-skipped     { margin-top:8px;border-radius:6px;background:rgba(var(--on-rgb),.04);padding:6px 8px; }

/* ══════════════════════════════════════════════════════════════════════════════
   DATA COMMAND CENTER
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── Command Center shell ── */
.cc-section {
  background:rgba(var(--on-rgb),.025);
  border:1px solid rgba(123,178,144,.15);
  border-radius:var(--r);
  padding:28px 28px 24px;
  margin:0 0 32px;
}
.cc-terminal-header {
  display:flex;align-items:center;gap:10px;
  font-size:.7rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--green);margin-bottom:22px;
}
.cc-terminal-header::before {
  content:'';display:inline-block;width:8px;height:8px;border-radius:50%;
  background:var(--green);box-shadow:0 0 6px var(--green);
  animation:ccBlink 2.4s ease-in-out infinite;
}
@keyframes ccBlink { 0%,100%{opacity:1} 50%{opacity:.3} }

/* ── 6-col metric grid ── */
.cc-metrics {
  display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:20px;
}
.cc-metric {
  background:rgba(var(--on-rgb),.04);border:1px solid rgba(var(--on-rgb),.08);
  border-radius:var(--r-sm);padding:14px 16px;
}
.cc-metric-val   { font-size:1.4rem;font-weight:700;color:var(--green);line-height:1.1; }
.cc-metric-label { font-size:.62rem;color:var(--dim);margin-top:3px;text-transform:uppercase;letter-spacing:.06em; }
.cc-metric-note  { font-size:.6rem;color:var(--dim);margin-top:2px;font-style:italic;opacity:.75; }

/* ── Two-panel row (pipeline + activity) ── */
.cc-panels { display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-top:4px; }
.cc-panel {
  background:rgba(var(--on-rgb),.04);border:1px solid rgba(var(--on-rgb),.08);
  border-radius:var(--r-sm);padding:14px 16px;
}
.cc-panel-title {
  font-size:.67rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;
  color:var(--muted);margin-bottom:10px;
}
.cc-row   { display:flex;justify-content:space-between;align-items:baseline;padding:3px 0;font-size:.78rem; }
.cc-row + .cc-row { border-top:1px solid rgba(var(--on-rgb),.04); }
.cc-row-key { color:var(--muted);flex-shrink:0; }
.cc-row-val { color:var(--text);text-align:right;margin-left:8px;word-break:break-all; }

/* ── Progress bar ── */
.cc-progress-wrap  { margin:10px 0 12px; }
.cc-progress-track {
  background:rgba(var(--on-rgb),.07);border-radius:4px;height:6px;
  overflow:hidden;position:relative;
}
.cc-progress-fill  {
  height:100%;border-radius:4px;background:var(--green);
  transition:width .6s ease;
}

/* ── Status chips ── */
.cc-chip {
  display:inline-block;font-size:.62rem;font-weight:600;
  padding:1px 6px;border-radius:4px;vertical-align:middle;
}
.cc-chip-green  { background:rgba(123,178,144,.18);color:var(--green); }
.cc-chip-amber  { background:rgba(240,160,84,.15);color:var(--amber); }
.cc-chip-red    { background:rgba(224,95,95,.12);color:var(--red); }
.cc-chip-blue   { background:rgba(100,160,220,.12);color:#7ab0e0; }
.cc-chip-dim    { background:rgba(var(--on-rgb),.06);color:var(--dim); }

/* ── Inline status dot ── */
.cc-dot {
  display:inline-block;width:6px;height:6px;border-radius:50%;
  vertical-align:middle;margin-right:4px;
}
.cc-dot-green { background:var(--green); }
.cc-dot-amber { background:var(--amber); }
.cc-dot-red   { background:var(--red); }
.cc-dot-dim   { background:var(--dim); }

/* ══════════════════════════════════════════════════════════════════════════════
   SOURCE STATUS MATRIX
   ══════════════════════════════════════════════════════════════════════════════ */

.src-matrix-section {
  margin:0 0 32px;
}
.src-matrix-section .section-hdr { margin-bottom:4px; }

.src-group        { margin-bottom:20px; }
.src-group-header {
  display:flex;align-items:center;gap:10px;padding:8px 0;
  cursor:pointer;user-select:none;border-bottom:1px solid rgba(var(--on-rgb),.07);
  margin-bottom:10px;
}
.src-group-header:hover .src-group-title { color:var(--text); }
.src-group-title  {
  font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.09em;
  color:var(--muted);transition:color .15s;
}
.src-group-count  {
  font-size:.65rem;color:var(--dim);
  background:rgba(var(--on-rgb),.06);border-radius:10px;padding:1px 7px;
}
.src-group-toggle { font-size:.75rem;color:var(--dim);margin-left:auto; }

.src-grid {
  display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;
}
.src-card {
  background:rgba(var(--on-rgb),.03);border:1px solid rgba(var(--on-rgb),.07);
  border-left:3px solid transparent;border-radius:var(--r-sm);
  padding:10px 12px;position:relative;
}
.src-card-active         { border-left-color:var(--green); }
.src-card-discovery_ready{ border-left-color:var(--amber); }
.src-card-not_configured { border-left-color:rgba(var(--on-rgb),.2); }
.src-card-cooldown       { border-left-color:var(--red); }
.src-card-planned        { border-left-color:rgba(var(--on-rgb),.1); opacity:.6; }

.src-card-name   { font-size:.75rem;font-weight:600;color:var(--text);line-height:1.3; }
.src-card-key    { font-size:.6rem;color:var(--dim);font-family:monospace;margin-top:1px; }
.src-card-status {
  display:inline-block;font-size:.58rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.06em;padding:1px 5px;border-radius:3px;margin-top:5px;
}
.src-status-active          { background:rgba(123,178,144,.15);color:var(--green); }
.src-status-discovery_ready { background:rgba(240,160,84,.13);color:var(--amber); }
.src-status-not_configured  { background:rgba(var(--on-rgb),.07);color:var(--dim); }
.src-status-cooldown        { background:rgba(224,95,95,.12);color:var(--red); }
.src-status-planned         { background:rgba(var(--on-rgb),.05);color:var(--dim); }

.src-role-pill {
  display:inline-block;font-size:.58rem;text-transform:uppercase;letter-spacing:.05em;
  padding:0px 5px;border-radius:3px;margin-left:4px;vertical-align:middle;
  border:1px solid rgba(var(--on-rgb),.1);color:var(--dim);
}
.src-role-filing       { border-color:rgba(123,178,144,.3);color:rgba(123,178,144,.8); }
.src-role-prices       { border-color:rgba(100,180,240,.3);color:rgba(100,180,240,.8); }
.src-role-identity     { border-color:rgba(200,160,80,.3);color:rgba(200,160,80,.8); }
.src-role-universe     { border-color:rgba(160,120,220,.3);color:rgba(160,120,220,.8); }
.src-role-macro        { border-color:rgba(200,100,100,.3);color:rgba(200,100,100,.8); }
.src-role-validator    { border-color:rgba(180,180,180,.3);color:rgba(180,180,180,.8); }

/* ── Source group body collapse ── */
.src-group-body.collapsed { display:none; }

/* ══════════════════════════════════════════════════════════════════════════════
   CROSS-VALIDATION PANEL
   ══════════════════════════════════════════════════════════════════════════════ */

.val-section { margin:0 0 32px; }
.val-grid    { display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:10px; }
.val-card    {
  background:rgba(var(--on-rgb),.04);border:1px solid rgba(var(--on-rgb),.08);
  border-radius:var(--r-sm);padding:12px 14px;
}
.val-num     { font-size:1.3rem;font-weight:700;color:var(--green); }
.val-label   { font-size:.63rem;color:var(--dim);margin-top:2px;text-transform:uppercase;letter-spacing:.06em; }
.val-bar-wrap { margin-top:7px;height:4px;background:rgba(var(--on-rgb),.07);border-radius:2px;overflow:hidden; }
.val-bar-fill { height:100%;background:var(--green);border-radius:2px; }

/* ── Automatic updates + history panels ── */
.au-panel {
  display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:32px;
}
.au-card {
  background:rgba(var(--on-rgb),.025);border:1px solid rgba(var(--on-rgb),.08);
  border-radius:var(--r-sm);padding:16px 18px;
}
.au-card-title {
  font-size:.67rem;font-weight:700;text-transform:uppercase;letter-spacing:.1em;
  color:var(--muted);margin-bottom:10px;
}

/* ── Responsive overrides ── */
@media (max-width:900px) {
  .cc-metrics { grid-template-columns:repeat(3,1fr); }
  .cc-panels  { grid-template-columns:1fr; }
  .au-panel   { grid-template-columns:1fr; }
}
@media (max-width:540px) {
  .cc-section { padding:18px 16px; }
  .cc-metrics { grid-template-columns:repeat(2,1fr); }
  .src-grid   { grid-template-columns:1fr 1fr; }
  .val-grid   { grid-template-columns:repeat(2,1fr); }
}

/* ══════════════════════════════════════════════════════════════════════════════
   API KEY CENTER
   ══════════════════════════════════════════════════════════════════════════════ */

.akc-table {
  width:100%;border-collapse:collapse;font-size:.78rem;
}
.akc-table th {
  text-align:left;font-size:.63rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.08em;color:var(--dim);padding:6px 10px;
  border-bottom:1px solid rgba(var(--on-rgb),.1);
  background:rgba(var(--on-rgb),.03);
}
.akc-table td {
  padding:9px 10px;border-bottom:1px solid rgba(var(--on-rgb),.05);
  vertical-align:top;
}
.akc-table tr:hover td { background:rgba(var(--on-rgb),.025); }

/* Key status badges */
.akc-badge {
  display:inline-flex;align-items:center;gap:4px;
  font-size:.62rem;font-weight:700;padding:2px 7px;border-radius:4px;
  white-space:nowrap;
}
.akc-badge-ok      { background:rgba(123,178,144,.18);color:var(--green); }
.akc-badge-missing { background:rgba(240,160,84,.15);color:var(--amber); }
.akc-badge-nokey   { background:rgba(123,178,144,.1);color:rgba(123,178,144,.7); }
.akc-badge-upgrade { background:rgba(100,160,220,.12);color:#7ab0e0; }
.akc-badge-notrecom{ background:rgba(var(--on-rgb),.06);color:var(--dim); }
.akc-badge-free    { background:rgba(123,178,144,.1);color:rgba(123,178,144,.6);font-size:.58rem; }
.akc-badge-nofree  { background:rgba(224,95,95,.1);color:rgba(224,95,95,.7);font-size:.58rem; }

/* Priority indicator */
.akc-pri {
  display:inline-block;font-size:.6rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.06em;padding:1px 5px;border-radius:3px;
}
.akc-pri-critical { background:rgba(224,95,95,.18);color:var(--red); }
.akc-pri-high     { background:rgba(123,178,144,.18);color:var(--green); }
.akc-pri-medium   { background:rgba(240,160,84,.15);color:var(--amber); }
.akc-pri-low      { background:rgba(var(--on-rgb),.08);color:var(--muted); }
.akc-pri-optional { background:rgba(var(--on-rgb),.05);color:var(--dim); }
.akc-pri-notrecom { background:rgba(var(--on-rgb),.04);color:var(--dim); }

.akc-action-link {
  color:var(--green);text-decoration:none;font-size:.72rem;
}
.akc-action-link:hover { text-decoration:underline; }
.akc-source-name  { font-weight:600;color:var(--text); }
.akc-source-value { font-size:.7rem;color:var(--muted);margin-top:2px; }
.akc-limit-note   { font-size:.67rem;color:var(--dim); }
.akc-action-text  { font-size:.7rem;color:var(--muted);margin-top:3px; }

/* Group header inside AKC */
.akc-group-hdr td {
  padding:10px 10px 4px;font-size:.63rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.09em;color:var(--muted);border-bottom:none;
  background:rgba(var(--on-rgb),.02);
}

/* ══════════════════════════════════════════════════════════════════════════════
   IMPROVED SOURCE STATUS MATRIX (status-grouped)
   ══════════════════════════════════════════════════════════════════════════════ */

.srm-summary {
  display:flex;flex-wrap:wrap;gap:10px;margin-bottom:20px;
}
.srm-summary-chip {
  display:flex;align-items:center;gap:6px;padding:6px 12px;
  background:rgba(var(--on-rgb),.04);border:1px solid rgba(var(--on-rgb),.08);
  border-radius:var(--r-sm);font-size:.72rem;cursor:pointer;
  transition:border-color .15s;
}
.srm-summary-chip:hover { border-color:rgba(var(--on-rgb),.2); }
.srm-summary-chip-n    { font-size:1.1rem;font-weight:700; }
.srm-summary-chip-label { color:var(--muted);font-size:.65rem; }
.srm-chip-active       .srm-summary-chip-n { color:var(--green); }
.srm-chip-discovery    .srm-summary-chip-n { color:var(--amber); }
.srm-chip-needs_key    .srm-summary-chip-n { color:#7ab0e0; }
.srm-chip-planned      .srm-summary-chip-n { color:var(--dim); }

.srm-status-group { margin-bottom:18px; }
.srm-status-hdr {
  display:flex;align-items:center;gap:8px;
  padding:8px 0;border-bottom:1px solid rgba(var(--on-rgb),.07);
  margin-bottom:10px;cursor:pointer;user-select:none;
}
.srm-status-title {
  font-size:.72rem;font-weight:700;text-transform:uppercase;letter-spacing:.09em;
}
.srm-status-count {
  font-size:.65rem;background:rgba(var(--on-rgb),.07);
  border-radius:10px;padding:1px 7px;color:var(--dim);
}
.srm-status-toggle { margin-left:auto;font-size:.75rem;color:var(--dim); }

.srm-cards {
  display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px;
}
.srm-card {
  background:rgba(var(--on-rgb),.03);border:1px solid rgba(var(--on-rgb),.07);
  border-left:3px solid transparent;border-radius:var(--r-sm);
  padding:10px 12px;
}
.srm-card-active         { border-left-color:var(--green); }
.srm-card-discovery_ready{ border-left-color:var(--amber); }
.srm-card-not_configured { border-left-color:#7ab0e0; }
.srm-card-planned        { border-left-color:rgba(var(--on-rgb),.1);opacity:.65; }
.srm-card-cooldown       { border-left-color:var(--red); }

.srm-card-name  { font-size:.75rem;font-weight:600;color:var(--text);line-height:1.3; }
.srm-card-meta  { font-size:.62rem;color:var(--dim);margin-top:3px;line-height:1.5; }
.srm-card-key   { font-size:.6rem;color:var(--dim);font-family:monospace; }

.srm-body.collapsed { display:none; }

/* Role pill in SRM */
.srm-role {
  display:inline-block;font-size:.57rem;text-transform:uppercase;letter-spacing:.05em;
  padding:0px 4px;border-radius:3px;border:1px solid rgba(var(--on-rgb),.1);
  color:var(--dim);vertical-align:middle;margin-top:2px;
}
.srm-role-filing   { border-color:rgba(123,178,144,.3);color:rgba(123,178,144,.75); }
.srm-role-prices   { border-color:rgba(100,180,240,.3);color:rgba(100,180,240,.75); }
.srm-role-identity { border-color:rgba(200,160,80,.3);color:rgba(200,160,80,.75); }
.srm-role-universe { border-color:rgba(160,120,220,.3);color:rgba(160,120,220,.75); }
.srm-role-macro    { border-color:rgba(200,100,100,.3);color:rgba(200,100,100,.75); }
.srm-role-optional { border-color:rgba(180,180,180,.2);color:rgba(180,180,180,.5); }

@media (max-width:640px) {
  .akc-table th:nth-child(4),
  .akc-table td:nth-child(4) { display:none; }
  .srm-cards { grid-template-columns:1fr 1fr; }
}

/* ── Source Ingestion Matrix (sim-*) ─────────────────────────────────────── */
.sim-exec-bar {
  display:flex;flex-wrap:wrap;gap:10px;margin-bottom:16px;padding:10px 0;
  border-bottom:1px solid rgba(var(--on-rgb),.06);
}
.sim-exec-metric { text-align:center;padding:6px 14px; }
.sim-exec-n   { display:block;font-size:1.2rem;font-weight:700;line-height:1.2; }
.sim-exec-lbl { display:block;font-size:.6rem;color:var(--dim);text-transform:uppercase;letter-spacing:.06em;margin-top:2px; }

.sim-status-group { margin-bottom:6px;border-radius:8px;border:1px solid rgba(var(--on-rgb),.05);overflow:hidden; }
.sim-status-hdr {
  display:flex;align-items:center;gap:8px;padding:8px 12px;cursor:pointer;
  background:rgba(var(--on-rgb),.03);user-select:none;
}
.sim-status-hdr:hover { background:rgba(var(--on-rgb),.06); }
.sim-status-dot   { width:7px;height:7px;border-radius:50%;flex-shrink:0; }
.sim-status-title { font-size:.72rem;font-weight:600;flex:1; }
.sim-status-count { font-size:.65rem;color:var(--dim);background:rgba(var(--on-rgb),.07);border-radius:var(--r-pill);padding:1px 7px; }
.sim-status-toggle{ font-size:.65rem;color:var(--dim); }

.sim-body         { padding:10px; }
.sim-body.collapsed { display:none; }

.sim-cards {
  display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:6px;
}
.sim-card {
  background:rgba(var(--on-rgb),.04);border-radius:6px;
  border-left:3px solid rgba(var(--on-rgb),.08);padding:8px 10px;
}
.sim-card-used_in_scoring { border-left-color:var(--green); }
.sim-card-ingested        { border-left-color:#4caf8a; }
.sim-card-discovered      { border-left-color:var(--amber); }
.sim-card-discovery_ready { border-left-color:#e0b040; }
.sim-card-needs_api_key   { border-left-color:#7ab0e0; }
.sim-card-cooldown        { border-left-color:var(--red); }
.sim-card-discovery_failed,.sim-card-ingestion_failed { border-left-color:#c06060;opacity:.8; }
.sim-card-planned         { border-left-color:rgba(var(--on-rgb),.1);opacity:.6; }

.sim-card-name    { font-size:.72rem;font-weight:600;color:var(--text);line-height:1.3;margin-bottom:3px; }
.sim-card-info    { font-size:.6rem;color:var(--dim);margin-bottom:3px; }
.sim-cat { display:inline-block;font-size:.55rem;padding:0px 4px;border-radius:3px;border:1px solid rgba(var(--on-rgb),.08);margin-left:4px; }
.sim-cat-filing_fundamental { border-color:rgba(123,178,144,.25);color:rgba(123,178,144,.7); }
.sim-cat-exchange_universe  { border-color:rgba(160,120,220,.25);color:rgba(160,120,220,.7); }
.sim-cat-identity { border-color:rgba(200,160,80,.25);color:rgba(200,160,80,.7); }
.sim-cat-price    { border-color:rgba(100,180,240,.25);color:rgba(100,180,240,.7); }
.sim-cat-macro    { border-color:rgba(200,100,100,.25);color:rgba(200,100,100,.7); }
.sim-cat-validator{ border-color:rgba(180,180,180,.15);color:rgba(180,180,180,.5); }
.sim-region { margin-right:4px; }
.sim-card-metrics { font-size:.62rem;color:var(--muted);margin-top:4px;line-height:1.6; }
.sim-card-error   { font-size:.6rem;color:#c06060;margin-top:4px;line-height:1.4; }

/* ── Database Coverage (dc-*) ────────────────────────────────────────────── */
.dc-exec-row {
  display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px;
  padding-bottom:12px;border-bottom:1px solid rgba(var(--on-rgb),.06);
}
.dc-exec-card {
  flex:1 1 120px;padding:10px 14px;background:rgba(var(--on-rgb),.04);
  border-radius:8px;text-align:center;
}
.dc-exec-val  { font-size:1.15rem;font-weight:700;line-height:1.2; }
.dc-exec-lbl  { font-size:.6rem;color:var(--dim);text-transform:uppercase;letter-spacing:.05em;margin-top:3px; }

.dc-progress { margin-bottom:12px; }
.dc-progress-label { display:flex;justify-content:space-between;font-size:.68rem;margin-bottom:6px;color:var(--muted); }
.dc-bar-wrap  { height:6px;background:rgba(var(--on-rgb),.07);border-radius:3px;overflow:hidden;position:relative; }
.dc-bar       { height:100%;border-radius:3px;transition:width .6s ease; }
.dc-bar-pending { position:absolute;top:0;right:0;height:100%;background:rgba(var(--on-rgb),.04); }

.dc-multi-row { display:flex;flex-wrap:wrap;gap:10px;margin-bottom:14px; }
.dc-multi-item { text-align:center;padding:6px 12px; }
.dc-multi-n    { font-size:1rem;font-weight:700;line-height:1.2; }
.dc-multi-lbl  { font-size:.6rem;color:var(--dim);margin-top:2px; }

.dc-raw-section { margin-top:12px; }
.dc-raw-table {
  width:100%;border-collapse:collapse;font-size:.68rem;margin-top:6px;
}
.dc-raw-table th {
  padding:5px 8px;text-align:left;font-size:.6rem;text-transform:uppercase;letter-spacing:.05em;
  color:var(--dim);border-bottom:1px solid rgba(var(--on-rgb),.06);
}
.dc-raw-table td { padding:4px 8px;border-bottom:1px solid rgba(var(--on-rgb),.04); }
.dc-raw-table tr:hover td { background:rgba(var(--on-rgb),.03); }

.dc-run-summary {
  display:flex;flex-wrap:wrap;gap:12px;margin-bottom:12px;padding:8px 10px;
  background:rgba(var(--on-rgb),.04);border-radius:6px;font-size:.68rem;color:var(--muted);
  border-left:3px solid var(--green);
}
.dc-run-label { color:var(--dim);font-size:.6rem;text-transform:uppercase;letter-spacing:.05em; }
.dc-empty     { padding:16px;font-size:.8rem;color:var(--dim); }

@media (max-width:640px) {
  .sim-cards { grid-template-columns:1fr 1fr; }
  .dc-exec-row { gap:6px; }
  .dc-multi-row { gap:6px; }
}

/* ══════════════════════════════════════════════════════════════════════════════
   DATA COMMAND CENTER — new layout
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── DCC grid + stat cards ── */
.dcc-grid {
  display:grid;
  grid-template-columns:repeat(auto-fit,minmax(130px,1fr));
  gap:10px;
  margin:12px 0;
}
.dcc-card {
  background:rgba(var(--on-rgb),.04);border:1px solid rgba(var(--on-rgb),.08);
  border-radius:var(--r-sm);padding:12px 14px;
}
.dcc-val   { font-size:1.45rem;font-weight:700;color:var(--green);line-height:1.1; }
.dcc-label { font-size:.62rem;color:var(--dim);margin-top:3px;text-transform:uppercase;letter-spacing:.06em; }
.dcc-note  { font-size:.6rem;color:var(--dim);margin-top:2px;font-style:italic;opacity:.8; }

/* ── DCC progress bar ── */
.dcc-progress-wrap  { margin:10px 0; }
.dcc-progress-labels {
  display:flex;justify-content:space-between;
  font-size:.68rem;color:var(--muted);margin-bottom:4px;
}
.dcc-progress-track {
  height:6px;background:rgba(var(--on-rgb),.07);border-radius:4px;overflow:hidden;
}
.dcc-progress-fill {
  height:100%;border-radius:4px;
  background:linear-gradient(90deg,var(--green) 0%,var(--green2) 100%);
  transition:width .6s ease;
}

/* ── DCC status line ── */
.dcc-status-line {
  display:flex;align-items:center;gap:6px;
  font-size:.75rem;margin-bottom:12px;
}

/* ── DCC warning banner ── */
.dcc-warning {
  font-size:.73rem;color:var(--amber);background:rgba(240,160,84,.07);
  border:1px solid rgba(240,160,84,.2);border-radius:var(--r-sm);
  padding:7px 12px;margin:6px 0;
}
.dcc-warning code { font-family:monospace;font-size:.7rem;opacity:.85; }

/* ── DCC next action panel ── */
.dcc-next-action {
  background:rgba(123,178,144,.06);border:1px solid rgba(123,178,144,.15);
  border-radius:var(--r-sm);padding:10px 14px;margin-top:10px;
}
.dcc-next-title    { font-size:.62rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--green);margin-bottom:5px; }
.dcc-next-primary  { font-size:.8rem;color:var(--text);font-weight:500; }
.dcc-next-secondary{ font-size:.72rem;color:var(--dim);margin-top:3px; }

/* ══════════════════════════════════════════════════════════════════════════════
   SOURCE BUCKETS
   ══════════════════════════════════════════════════════════════════════════════ */

/* ── Summary chip row ── */
.src-bkts-summary {
  display:flex;flex-wrap:wrap;gap:8px;margin-bottom:14px;
}
.src-bkt-chip {
  display:flex;align-items:center;gap:5px;
  background:rgba(var(--on-rgb),.05);border:1px solid rgba(var(--on-rgb),.1);
  border-radius:var(--r-pill);padding:4px 12px;
  font-size:.72rem;cursor:pointer;transition:background .15s;
}
.src-bkt-chip:hover  { background:rgba(var(--on-rgb),.09); }
.src-bkt-chip-n      { font-weight:700;font-size:.85rem; }
.src-bkt-chip-lbl    { color:var(--muted); }

/* ── Bucket group ── */
.src-bkt-group { margin-bottom:8px;border:1px solid rgba(var(--on-rgb),.06);border-radius:var(--r-sm);overflow:hidden; }
.src-bkt-hdr {
  display:flex;align-items:center;gap:8px;
  padding:10px 14px;cursor:pointer;background:rgba(var(--on-rgb),.03);
  transition:background .15s;
}
.src-bkt-hdr:hover     { background:rgba(var(--on-rgb),.06); }
.src-bkt-dot           { width:7px;height:7px;border-radius:50%;flex-shrink:0; }
.src-bkt-title         { font-size:.82rem;font-weight:600;flex:1; }
.src-bkt-count         { font-size:.72rem;font-weight:600;color:var(--muted); }
.src-bkt-note          { font-size:.68rem;color:var(--dim);margin-left:4px; }
.src-bkt-toggle        { color:var(--dim);font-size:.75rem;margin-left:auto;flex-shrink:0; }

.src-bkt-body          { overflow:hidden;transition:max-height .25s ease; }
.src-bkt-body.collapsed{ display:none; }

.src-bkt-cards {
  display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));
  gap:8px;padding:10px 12px;
}

/* ── Individual source card ── */
.src-card {
  background:rgba(var(--on-rgb),.03);border:1px solid rgba(var(--on-rgb),.07);
  border-radius:8px;padding:10px 12px;font-size:.78rem;
}
.src-card-name  { font-weight:600;color:var(--text);margin-bottom:2px; }
.src-card-role  { font-size:.68rem;color:var(--muted);margin-bottom:5px;line-height:1.4; }
.src-card-meta  { display:flex;flex-wrap:wrap;gap:4px;margin-bottom:3px; }
.src-card-stats { font-size:.65rem;color:var(--dim);margin-top:3px; }
.src-card-error {
  font-size:.62rem;color:var(--red);margin-top:4px;
  background:rgba(224,95,95,.07);border-radius:4px;padding:3px 6px;
  overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
}

/* ── Source region + flags ── */
.src-region {
  font-size:.62rem;color:var(--dim);
  background:rgba(var(--on-rgb),.05);border-radius:4px;padding:1px 5px;
}
.src-flag {
  font-size:.58rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  border-radius:4px;padding:1px 5px;
}
.src-flag-alpha { background:rgba(123,178,144,.15);color:var(--green);border:1px solid var(--green-b); }
.src-flag-fv    { background:rgba(100,160,240,.10);color:#90b8f0;border:1px solid rgba(100,160,240,.2); }

/* ══════════════════════════════════════════════════════════════════════════════
   METHOD DETAILS + DEV SECTION
   ══════════════════════════════════════════════════════════════════════════════ */

.method-details {
  margin-top:16px;
  border:1px solid rgba(var(--on-rgb),.07);border-radius:var(--r-sm);
  overflow:hidden;
}
.method-details > summary {
  padding:10px 16px;cursor:pointer;font-size:.78rem;color:var(--muted);
  background:rgba(var(--on-rgb),.03);
  list-style:none;
  display:flex;align-items:center;gap:6px;
}
.method-details > summary::before { content:'▸';color:var(--dim);font-size:.7rem; }
.method-details[open] > summary::before { content:'▾'; }
.method-details > summary:hover { background:rgba(var(--on-rgb),.06); }
.method-details > *:not(summary) { padding:0 16px 16px; }

.dev-section { display:none; }
.dev-only    { display:none; }

/* ══════════════════════════════════════════════════════════════════════════════
   SEARCH BAR — v3
   ══════════════════════════════════════════════════════════════════════════════ */

.search-wrap {
  margin-bottom:20px;
}
.search-box-row {
  display:flex;align-items:center;gap:0;
  background:rgba(var(--on-rgb),.06);border:1px solid var(--glass-b);
  border-radius:var(--r);padding:0 14px;
  transition:border-color .18s;
}
.search-box-row:focus-within { border-color:rgba(123,178,144,.5); }
.search-icon {
  flex-shrink:0;color:var(--dim);pointer-events:none;margin-right:10px;
}
.search-input {
  flex:1;background:transparent;border:none;outline:none;
  color:var(--text);font-family:inherit;font-size:.88rem;
  padding:13px 4px;
}
.search-input::placeholder { color:var(--dim); }
.search-clear {
  background:none;border:none;cursor:pointer;
  color:var(--dim);font-size:.9rem;padding:4px 6px;
  display:none;transition:color .15s;
}
.search-clear:hover { color:var(--muted); }
.search-hint {
  font-size:.72rem;color:var(--dim);margin-top:7px;
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
}
.adv-toggle {
  background:none;border:none;cursor:pointer;
  color:var(--green);font-size:.72rem;font-family:inherit;
  padding:0;text-decoration:underline;text-underline-offset:2px;
  transition:color .15s;
}
.adv-toggle:hover { color:var(--green2); }
.adv-filters {
  background:var(--glass);border:1px solid var(--glass-b);
  border-radius:var(--r);padding:16px 20px;margin-top:10px;
}
.adv-filters-inner {
  display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end;
}

/* ══════════════════════════════════════════════════════════════════════════════
   ACTIVE SOURCES PANEL — v3
   ══════════════════════════════════════════════════════════════════════════════ */

.sources-panel {
  background:var(--glass);border:1px solid var(--glass-b);
  border-radius:var(--r);padding:18px 22px;
}
.sources-two-col {
  display:grid;grid-template-columns:1fr 1fr;gap:16px;
  margin-bottom:16px;
}
.sources-col-title {
  font-size:.64rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;
  color:var(--muted);margin-bottom:8px;
}
.sources-badges {
  display:flex;flex-wrap:wrap;gap:5px;
}

/* Source badges */
.src-badge {
  display:inline-flex;align-items:center;gap:4px;
  padding:3px 10px;border-radius:var(--r-pill);
  font-size:.66rem;font-weight:600;letter-spacing:.03em;
}
.src-badge-green {
  background:rgba(123,178,144,.14);color:var(--green);border:1px solid rgba(123,178,144,.3);
}
.src-badge-green::before { content:'●';font-size:.55rem; }
.src-badge-blue {
  background:rgba(100,160,240,.10);color:#90b8f0;border:1px solid rgba(100,160,240,.25);
}
.src-badge-amber {
  background:rgba(240,160,84,.12);color:var(--amber);border:1px solid rgba(240,160,84,.28);
}
.src-badge-red {
  background:rgba(224,95,95,.10);color:var(--red);border:1px solid rgba(224,95,95,.25);
}
.src-badge-dim {
  background:rgba(var(--on-rgb),.05);color:var(--dim);border:1px solid rgba(var(--on-rgb),.09);
}

/* Stats row */
.sources-stats-row {
  display:flex;flex-wrap:wrap;gap:0;
  border-top:1px solid var(--glass-b);border-bottom:1px solid var(--glass-b);
  margin-bottom:14px;
}
.sources-stat {
  flex:1 1 100px;padding:10px 14px;text-align:center;
  border-right:1px solid var(--glass-b);
}
.sources-stat:last-child { border-right:none; }
.sources-stat-val {
  display:block;font-size:1.2rem;font-weight:700;color:var(--green);line-height:1.1;
}
.sources-stat-lbl {
  display:block;font-size:.6rem;color:var(--dim);margin-top:3px;
  text-transform:uppercase;letter-spacing:.06em;
}

/* Progress bars */
.sources-progress-row {
  display:grid;grid-template-columns:1fr 1fr;gap:14px;
  margin-bottom:12px;
}
.sources-progress-item {}
.sources-progress-label {
  display:flex;justify-content:space-between;
  font-size:.68rem;color:var(--muted);margin-bottom:5px;
}
.sources-prog-track {
  height:5px;background:rgba(var(--on-rgb),.07);
  border-radius:3px;overflow:hidden;
}
.sources-prog-fill {
  height:100%;background:linear-gradient(90deg,var(--green) 0%,var(--green2) 100%);
  border-radius:3px;transition:width .6s ease;
}

/* Footer */
.sources-footer {
  display:flex;flex-wrap:wrap;gap:6px;padding-top:10px;
  border-top:1px solid var(--glass-b);
}

@media (max-width:640px) {
  .sources-two-col { grid-template-columns:1fr; }
  .sources-stats-row { gap:0; }
  .sources-stat { flex:1 1 80px; padding:8px 8px; }
  .sources-stat-val { font-size:1rem; }
  .sources-progress-row { grid-template-columns:1fr; }
}

/* ══════════════════════════════════════════════════════════════════════════════
   STOCK CARD — REDESIGNED v3
   ══════════════════════════════════════════════════════════════════════════════ */

/* Card header: ticker/name on left, confidence badge on right */
.card-header {
  display:flex;align-items:flex-start;justify-content:space-between;
  gap:12px;margin-bottom:6px;
}
/* Override old card-identity width constraint */
.card-header .card-identity { flex:1;min-width:0; }
.card-header .card-ticker {
  font-size:1.15rem;font-weight:700;letter-spacing:.03em;
  display:flex;align-items:baseline;gap:6px;
}
.card-exchange {
  font-size:.65rem;color:var(--dim);font-weight:500;
  letter-spacing:.04em;
}
.card-conf-badge {
  flex-shrink:0;
  display:inline-flex;align-items:center;gap:4px;
  padding:3px 10px;border-radius:var(--r-pill);
  font-size:.64rem;font-weight:700;letter-spacing:.06em;
  border:1px solid;text-transform:uppercase;white-space:nowrap;
}

/* FV row: price → arrow → FV → upside */
.card-fv-row {
  display:flex;align-items:center;justify-content:space-around;
  gap:8px;margin-bottom:12px;
  padding:10px 14px;
  background:rgba(var(--on-rgb),.03);border-radius:var(--r-sm);
}
.card-fv-col {
  text-align:center;
}
.card-fv-main {
  padding:0 4px;
}
.card-fv-arrow {
  font-size:1.1rem;flex-shrink:0;opacity:.8;
}
.card-metric-lbl {
  font-size:.6rem;color:var(--dim);text-transform:uppercase;
  letter-spacing:.07em;margin-bottom:3px;
}
.card-metric-val {
  font-size:.95rem;font-weight:700;color:var(--text);
  font-variant-numeric:tabular-nums;
}
.card-fv-val {
  font-size:1.1rem;
}

/* FV Gauge */
.fv-gauge-wrap {
  margin-bottom:8px;
}
.fv-gauge-track {
  position:relative;height:6px;
  background:rgba(var(--on-rgb),.07);border-radius:3px;
  overflow:visible;
}
.fv-gauge-band {
  position:absolute;top:0;height:100%;
  background:rgba(123,178,144,.18);border-radius:3px;
}
.fv-gauge-fv-marker {
  position:absolute;top:-3px;
  width:3px;height:12px;border-radius:2px;
  transform:translateX(-50%);
  box-shadow:0 0 6px currentColor;
}
.fv-gauge-price-marker {
  position:absolute;top:-4px;
  width:14px;height:14px;border-radius:50%;
  background:var(--amber);
  transform:translateX(-50%);
  border:2px solid var(--bg);
  box-shadow:0 0 6px rgba(240,160,84,.5);
}
.fv-gauge-labels {
  display:flex;justify-content:space-between;align-items:center;
  font-size:.63rem;margin-top:5px;
  padding:0 2px;
}

/* Position label + verdict */
.card-pos-label {
  text-align:center;
  font-size:.7rem;font-weight:600;
  margin-top:4px;min-height:14px;
}
.card-verdict {
  text-align:center;
  margin:8px 0 4px;
}

/* Meta chips row */
.card-meta-row {
  display:flex;flex-wrap:wrap;gap:5px;
  margin:8px 0 12px;
}
.card-meta-chip {
  background:rgba(var(--on-rgb),.05);border:1px solid rgba(var(--on-rgb),.09);
  border-radius:var(--r-pill);padding:2px 9px;
  font-size:.63rem;color:var(--dim);
}

/* Share button */
.card-btn.share {
  background:rgba(100,160,240,.08);color:#90b8f0;
  border:1px solid rgba(100,160,240,.2);
}
.card-btn.share:hover { background:rgba(100,160,240,.15); }

/* ══════════════════════════════════════════════════════════════════════════════
   MODAL FAIR VALUE SECTION — v3
   ══════════════════════════════════════════════════════════════════════════════ */

.fv-public-block {
  background:rgba(123,178,144,.05);border:1px solid rgba(123,178,144,.15);
  border-radius:var(--r-sm);padding:14px 16px;
}
.fv-pub-row {
  display:flex;align-items:center;flex-wrap:wrap;gap:4px;
  margin-bottom:8px;
}
.fv-pub-sep {
  font-size:1rem;color:var(--dim);padding:0 4px;flex-shrink:0;
}
.fv-pub-item {
  text-align:center;flex:1;min-width:70px;
}
.fv-pub-main {
  flex:1.4;
}
.fv-pub-lbl {
  font-size:.62rem;color:var(--dim);text-transform:uppercase;
  letter-spacing:.07em;margin-bottom:3px;
}
.fv-pub-val {
  font-size:.95rem;font-weight:700;color:var(--text);
  font-variant-numeric:tabular-nums;
}
.fv-pub-val.up   { color:var(--green); }
.fv-pub-val.down { color:var(--red); }
.fv-pub-formula {
  display:flex;align-items:baseline;gap:6px;
  padding:6px 0;border-top:1px solid rgba(var(--on-rgb),.06);
  margin-bottom:6px;
}
.fv-formula-note {
  font-size:.68rem;color:var(--dim);line-height:1.6;margin-top:2px;
}

/* ══════════════════════════════════════════════════════════════════════════════
   DEEP DIVE SUMMARY — styled <summary> for modal collapsible sections
   ══════════════════════════════════════════════════════════════════════════════ */

.deep-dive-summary {
  display:flex;align-items:center;gap:6px;
  padding:8px 2px;cursor:pointer;list-style:none;
  font-size:.78rem;font-weight:600;color:var(--muted);
  transition:color .15s;user-select:none;
}
.deep-dive-summary::before { content:'▸';color:var(--dim);font-size:.7rem;flex-shrink:0; }
details[open] > .deep-dive-summary::before { content:'▾'; }
.deep-dive-summary:hover { color:var(--text); }

/* ══════════════════════════════════════════════════════════════════════════════
   SHARE CARD PREVIEW
   ══════════════════════════════════════════════════════════════════════════════ */

.share-preview-card {
  background:#0d1117;border:1px solid rgba(123,178,144,.3);
  border-radius:var(--r);padding:22px 24px;
  max-width:380px;margin:0 auto;
  font-family:'Space Grotesk',system-ui,sans-serif;
}
.spc-brand {
  font-size:.62rem;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--green);margin-bottom:8px;
  display:flex;align-items:center;gap:6px;
}
.spc-brand::before {
  content:'';display:inline-block;width:7px;height:7px;border-radius:50%;
  background:var(--green);box-shadow:0 0 6px var(--green);
}
.spc-ticker {
  font-size:2.2rem;font-weight:700;color:var(--green);
  letter-spacing:.04em;line-height:1;margin-bottom:4px;
}
.spc-name {
  font-size:.8rem;color:var(--muted);margin-bottom:14px;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.spc-row {
  display:flex;justify-content:space-around;
  padding:12px 0;margin-bottom:12px;
  border-top:1px solid rgba(var(--on-rgb),.07);
  border-bottom:1px solid rgba(var(--on-rgb),.07);
}
.spc-metric { text-align:center; }
.spc-lbl { font-size:.58rem;color:var(--dim);text-transform:uppercase;letter-spacing:.08em;margin-bottom:4px; }
.spc-val { font-size:1rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums; }
.spc-fv  { color:var(--green); }
.spc-chips {
  display:flex;flex-wrap:wrap;gap:5px;margin-bottom:10px;
}
.spc-chip {
  background:rgba(var(--on-rgb),.07);border-radius:var(--r-pill);
  padding:2px 9px;font-size:.63rem;color:var(--muted);
}
.spc-verdict {
  font-size:.72rem;color:var(--muted);
  margin-bottom:8px;line-height:1.5;
}
.spc-disclaimer {
  font-size:.6rem;color:var(--dim);
  border-top:1px solid rgba(var(--on-rgb),.06);
  padding-top:8px;margin-top:4px;line-height:1.6;
}

/* ── Valuation meter statement ── */
.val-meter-stmt {
  font-size:.72rem;color:var(--muted);text-align:center;
  margin-top:6px;line-height:1.5;
}

/* ── Card ticker row (ticker + exchange on one line) ── */
.card-ticker-row {
  display:flex;align-items:baseline;gap:6px;
}

/* ── Card footer: buttons left / meta chips right ── */
.card-footer {
  display:flex;align-items:center;justify-content:space-between;
  flex-wrap:wrap;gap:10px;margin-top:14px;
}
.card-meta-chips {
  display:flex;flex-wrap:wrap;gap:5px;align-items:center;justify-content:flex-end;
}

/* ── Results bar separator ── */
.results-bar-sep { color:var(--dim);margin:0 4px; }

/* ── Modal note (non-warn paragraph) ── */
.modal-note {
  font-size:.72rem;color:var(--dim);line-height:1.6;
  padding:6px 0;
}

/* ══════════════════════════════════════════════════════════════════════════════
   STATUS TOP BAR — v4
   ══════════════════════════════════════════════════════════════════════════════ */

.status-top-inner {
  display:flex;align-items:flex-start;justify-content:space-between;
  gap:20px;flex-wrap:wrap;
  background:var(--glass);border:1px solid var(--glass-b);
  border-radius:var(--r);padding:18px 22px;
}
.status-top-left {
  display:flex;align-items:flex-start;gap:14px;
  flex:1;min-width:220px;
}
.status-live-dot {
  width:10px;height:10px;border-radius:50%;
  background:var(--green);box-shadow:0 0 10px rgba(123,178,144,.7);
  flex-shrink:0;margin-top:4px;
  animation:blink 2.4s ease-in-out infinite;
}
.status-top-headline {
  font-size:.95rem;font-weight:700;color:var(--text);line-height:1.3;
}
.status-top-sub {
  font-size:.72rem;color:var(--muted);margin-top:3px;line-height:1.5;
  max-width:340px;
}
.status-top-right {
  flex:1;min-width:220px;
}
.status-badges {
  display:flex;flex-wrap:wrap;gap:5px;margin-bottom:10px;
}
.status-badge {
  display:inline-flex;align-items:center;gap:4px;
  padding:3px 10px;border-radius:var(--r-pill);
  font-size:.64rem;font-weight:600;letter-spacing:.04em;
}
.status-badge-green {
  background:rgba(123,178,144,.13);color:var(--green);border:1px solid rgba(123,178,144,.3);
}
.status-badge-green::before { content:'●';font-size:.5rem; }
.status-badge-blue {
  background:rgba(100,160,240,.10);color:#90b8f0;border:1px solid rgba(100,160,240,.25);
}
.status-meta-row {
  display:flex;align-items:center;flex-wrap:wrap;gap:6px;
  font-size:.73rem;color:var(--muted);
}
.status-meta-item { display:inline-flex;align-items:center;gap:4px; }
.status-meta-sep  { color:var(--dim);font-size:.7rem; }
.status-prog-track {
  display:inline-block;width:52px;height:5px;
  background:rgba(var(--on-rgb),.07);border-radius:3px;overflow:hidden;
  vertical-align:middle;
}
.status-prog-fill {
  height:100%;background:linear-gradient(90deg,var(--green) 0%,var(--green2) 100%);
  border-radius:3px;
}
.status-cron-ok  { color:var(--green);font-weight:600; }
.status-cron-off { color:var(--dim); }
.status-dim      { color:var(--dim); }

/* ══════════════════════════════════════════════════════════════════════════════
   RESULTS BAR — v4
   ══════════════════════════════════════════════════════════════════════════════ */

.results-bar {
  display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;
  gap:8px 10px;margin-bottom:8px;
  font-size:.78rem;color:var(--muted);
  min-height:26px;
}
.results-bar-sort { color:var(--dim);font-size:.73rem; }

/* Result-summary line + evidence/sort toggle controls */
.fvc-ctx-left { display:flex;align-items:baseline;flex-wrap:wrap;gap:5px;min-width:0; }
.fvc-ctx-region { color:var(--text);font-weight:600; }
.fvc-ctx-ev, .fvc-ctx-sort { color:var(--dim); }
/* count on the left (shrinks/wraps internally); the Cards/Table toggle stays pinned
   right on the SAME line at every width (operator 2026-07-07). */
/* Count keeps its intrinsic width (nowrap, no min-width:0) so it never clips to
   "Filter-…": when count + controls don't fit, the control group wraps instead. */
.fvc-ctx-count { color:var(--muted);flex:0 0 auto;white-space:nowrap; }
/* View toggle + Sort. margin-left:auto pins the group right; when the row can't fit both
   the count and the controls (iPhone-12 width) the whole group wraps to a 2nd line, still
   right-aligned — no horizontal overflow (operator 2026-07-07). */
.fvc-ctrl-row { display:flex;align-items:center;gap:8px;flex:0 0 auto;margin-left:auto;flex-wrap:wrap;justify-content:flex-end; }
.fvc-sort-toggle {
  display:inline-flex;align-items:center;gap:6px;
  background:rgba(123,178,144,.07);
  border:1px solid rgba(123,178,144,.28);
  color:var(--text);
  font-size:.75rem;font-weight:600;
  padding:7px 13px;border-radius:var(--r-pill,999px);
  cursor:pointer;white-space:nowrap;line-height:1;
  transition:background .14s,border-color .14s,opacity .14s,transform .05s;
}
.fvc-sort-toggle:hover { background:rgba(123,178,144,.15);border-color:rgba(123,178,144,.5); }
.fvc-sort-toggle:active { transform:translateY(1px); }
.fvc-ev-toggle.is-high { background:rgba(123,178,144,.16);border-color:var(--green,#7BB290);color:var(--green,#7BB290); }
.fvc-sort-caret { font-size:.6rem;opacity:.7;transform:translateY(1px); }
.fvc-lbl-short { display:none; }
/* Busy: dim the controls (no layout shift) while a fetch is in flight */
.results-bar.fvc-bar-busy .fvc-ctrl-row { opacity:.55;pointer-events:none; }

/* Elegant loading state on the list area while switching sort/filter/page */
#cards.fvc-list-loading { position:relative;opacity:.5;pointer-events:none;transition:opacity .12s; }
#cards.fvc-list-loading::after {
  content:"";position:absolute;left:0;right:0;top:0;height:2px;border-radius:2px;
  background:linear-gradient(90deg,transparent,var(--green,#7BB290),transparent);
  background-size:40% 100%;background-repeat:no-repeat;
  animation:fvcListBar 1.1s ease-in-out infinite;
}
@keyframes fvcListBar { 0%{background-position:-40% 0;} 100%{background-position:140% 0;} }
/* Clear "Searching…" pill so the user knows it's working (operator #34). */
#cards.fvc-list-loading { opacity:.45; }
#cards.fvc-list-loading::before {
  content:"Searching…"; position:absolute; left:50%; top:46px; transform:translateX(-50%);
  z-index:4; background:rgba(13,20,16,.94); color:var(--green,#7BB290);
  font-weight:700; font-size:.82rem; padding:9px 18px; border-radius:999px;
  border:1px solid rgba(123,178,144,.42); box-shadow:0 6px 18px rgba(0,0,0,.35); white-space:nowrap;
}

@media (max-width:640px) {
  /* Cards/Table toggle stays inline-right (handled by the base .results-bar now). */
  .fvc-view-toggle { flex:0 0 auto; }
  .fvc-ctrl-row { width:auto;justify-content:flex-end;flex:0 0 auto; }
  .fvc-sort-toggle { flex:0 0 auto; }
  .fvc-lbl-full  { display:none; }
  .fvc-lbl-short { display:inline; }
}

/* ══════════════════════════════════════════════════════════════════════════════
   SEARCH SUGGESTIONS — v4
   ══════════════════════════════════════════════════════════════════════════════ */

.search-suggestions {
  background:var(--surface);border:1px solid rgba(123,178,144,.25);
  border-radius:var(--r-sm);
  margin-top:4px;overflow:hidden;
  box-shadow:0 8px 24px rgba(0,0,0,.45);
  position:relative;z-index:100;
}
.sugg-item {
  display:flex;align-items:center;justify-content:space-between;
  padding:10px 14px;cursor:pointer;
  border-bottom:1px solid rgba(var(--on-rgb),.04);
  transition:background .12s;
}
.sugg-item:last-child { border-bottom:none; }
.sugg-item:hover { background:rgba(var(--on-rgb),.05); }
.sugg-left  { display:flex;align-items:baseline;gap:8px; }
.sugg-right { display:flex;align-items:center;gap:6px;flex-shrink:0; }
.sugg-ticker { font-weight:700;font-size:.88rem;color:var(--text); }
.sugg-name   { font-size:.73rem;color:var(--dim);max-width:200px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.sugg-upside { font-size:.73rem;font-weight:600; }
.sugg-conf   {
  font-size:.62rem;font-weight:600;padding:1px 7px;border-radius:var(--r-pill);
  letter-spacing:.04em;text-transform:uppercase;
}
.sugg-empty  { padding:12px 14px;font-size:.78rem;color:var(--dim);text-align:center; }

/* Subtle autocomplete loading row (only shown when a lookup exceeds ~150ms) */
.fvc-sug-loading {
  display:flex;align-items:center;gap:9px;
  padding:11px 14px;font-size:.78rem;color:var(--dim);
}
.fvc-sug-spin {
  width:12px;height:12px;border-radius:50%;flex-shrink:0;
  border:2px solid rgba(123,178,144,.3);border-top-color:var(--green,#7BB290);
  animation:fvcSugSpin .6s linear infinite;
}
@keyframes fvcSugSpin { to { transform:rotate(360deg); } }

/* ══════════════════════════════════════════════════════════════════════════════
   STOCK CARD — v4 redesigned numbers layout
   ══════════════════════════════════════════════════════════════════════════════ */

/* Ticker row + company name open the detail view on click */
.card-open { cursor:pointer; transition:color .15s; }
.card-open .card-ticker { transition:color .15s; }
.card-open:hover .card-ticker, .card-open:hover { color:var(--green,#7BB290); }
/* The ticker row is a real <a> (crawlable link to /stock/<TICKER>) — strip the default
   anchor look so it stays visually identical to the surrounding card text. */
a.card-ticker-row { color:inherit; text-decoration:none; }

/* Free per-stock fair-value alert CTA (detail-page lead funnel). */
.fvc-alert-cta { border:1px solid rgba(123,178,144,.28); border-radius:14px; background:rgba(123,178,144,.07); padding:14px 16px; }
.fvc-alert-row { display:flex; align-items:flex-start; gap:10px; }
.fvc-alert-ic { font-size:1.2rem; line-height:1.25; flex:0 0 auto; }
.fvc-alert-tx { display:flex; flex-direction:column; gap:2px; min-width:0; }
.fvc-alert-tx b { color:var(--text,#e9f1ec); font-size:.95rem; }
/* DIRECT child only: the subtitle. The glossary decorator wraps terms like "Fair
   Value" in a nested <span class="fvc-term"> INSIDE the <b> title — a plain
   `.fvc-alert-tx span` also matched those and shrank/dimmed "Fair Value" mid-title. */
.fvc-alert-tx > span { color:var(--dim,#9fb0a8); font-size:.78rem; line-height:1.4; }
.fvc-alert-form { display:flex; gap:8px; margin-top:11px; }
.fvc-alert-form.is-done { display:none; }
.fvc-alert-email { flex:1 1 0; min-width:0; box-sizing:border-box; border:1px solid rgba(123,178,144,.3); border-radius:10px; background:rgba(12,19,15,.55); color:var(--text,#e9f1ec); font-size:16px; padding:10px 12px; outline:none; }
.fvc-alert-email:focus { border-color:var(--fvc-green,#7BB290); }
.fvc-alert-email::placeholder { color:var(--dim,#9fb0a8); }
.fvc-alert-hp { position:absolute; left:-9999px; width:1px; height:1px; }
.fvc-alert-btn { flex:0 0 auto; border:none; border-radius:10px; background:var(--fvc-green,#7BB290); color:#08130d; font-weight:700; font-size:14px; padding:10px 16px; cursor:pointer; white-space:nowrap; transition:filter .15s; }
.fvc-alert-btn:hover { filter:brightness(1.07); }
.fvc-alert-msg { font-size:.8rem; margin-top:8px; min-height:1em; color:var(--dim,#9fb0a8); }
.fvc-alert-msg.ok { color:var(--green,#7BB290); }
.fvc-alert-msg.err { color:#e0816f; }
@media (max-width:480px){ .fvc-alert-form { flex-wrap:wrap; } .fvc-alert-email, .fvc-alert-btn { flex:1 1 100%; } }
.card-company {
  font-size:.96rem;font-weight:600;color:rgba(var(--muted-rgb),.92);margin:2px 0 10px;
  letter-spacing:.005em;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;
}
/* sector / ethics / penny / shared chips — own full-width row under the name */
.card-subbadges { display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 12px; }
.card-subbadges:empty { display:none; }
.card-exch {
  font-size:.63rem;color:var(--dim);font-weight:500;letter-spacing:.04em;
}
/* Sector chip under the company name — clickable → filter by sector */
.card-sector {
  display:inline-block;margin-top:6px;cursor:pointer;
  font-size:.62rem;font-weight:600;letter-spacing:.03em;
  padding:2px 8px;border-radius:999px;
  background:rgba(123,178,144,.10);border:1px solid rgba(123,178,144,.24);
  color:var(--green);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;
  transition:background .15s,border-color .15s;
}
.card-sector:hover { background:rgba(123,178,144,.18);border-color:rgba(123,178,144,.4); }
/* Subtle social-proof badge — only rendered when a stock has shares (>0). */
.card-shared-badge {
  display:inline-block;margin:6px 0 0 6px;
  font-size:.58rem;font-weight:600;letter-spacing:.03em;
  padding:2px 8px;border-radius:999px;
  background:rgba(var(--on-rgb),.05);border:1px solid rgba(var(--on-rgb),.12);
  color:var(--muted,rgba(var(--muted-rgb),.7));white-space:nowrap;
}
/* Penny-stock badge — warns that the Fair Value / upside is noise at a sub-10¢
   share price. Flag only (never hidden); muted red so it reads as a caveat. */
.card-penny-badge {
  display:inline-block;margin:6px 0 0 6px;cursor:default;
  font-size:.58rem;font-weight:700;letter-spacing:.03em;
  padding:2px 8px;border-radius:999px;
  background:rgba(224,138,138,.12);border:1px solid rgba(224,138,138,.34);
  color:#e08a8a;white-space:nowrap;
}
/* Cyclical-peak badge — a commodity producer at peak earnings whose Fair Value is dampened toward
   mid-cycle. Neutral slate-blue (informational, not an alarm). Overrides the shared penny-badge base. */
.card-cyclical-badge {
  background:rgba(144,184,240,.12);border-color:rgba(144,184,240,.34);color:#90b8f0;
}
/* Heavy-diluter badge — share count grew >10 %/y, FV dampened ×0.85 (DilutionGuard). Amber caveat. */
.card-dilution-badge {
  background:rgba(240,160,84,.12);border-color:rgba(240,160,84,.34);color:#f0a054;
}
.card-penny-badge.card-dilution-badge.fvc-term:hover, .card-penny-badge.card-dilution-badge.fvc-term:focus { color:#f0a054; }
.fvc-vbadge.tone-dilution.fvc-term:hover, .fvc-vbadge.tone-dilution.fvc-term:focus { color:#f0a054; }
/* Values exposure badge on cards — neutral amber, never alarming. Only shown
   when an exposure is clearly inferred from the industry (max 2 per card). */
.card-ethics-badge {
  display:inline-block;margin:6px 0 0 6px;cursor:default;
  font-size:.58rem;font-weight:600;letter-spacing:.03em;
  padding:2px 8px;border-radius:999px;
  background:rgba(240,160,84,.12);border:1px solid rgba(240,160,84,.3);
  color:var(--amber,#f0a054);white-space:nowrap;
}
/* ── Today's Focus (#menu 2026-07-07): a STRATEGY MENU on top; one panel below = either
   the pick card ("Today's Pick" entry) or one strategy list (Quality + Upside), sized to
   the SAME height as the card. Existing tokens only; default view only. */
#fvc-overview:not(:empty) { margin:0 0 16px; }
.fvc-ov-wrap {
  max-width:720px;margin-inline:auto;   /* card-sized focused panel, centered — not full-width */
  padding:12px 16px 14px;
  border:1px solid var(--glass-b);border-radius:var(--r);
  background:rgba(var(--on-rgb),.03);
}
.fvc-ov-title { font-size:.95rem;font-weight:700;letter-spacing:.02em;color:var(--text);margin-bottom:10px; }
.fvc-ov-accent { font-weight:600;color:var(--green); }

/* Strategy menu — horizontally scrollable chips (same on desktop + mobile). */
.fvc-ov-tabs { display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;padding:0 0 10px;-webkit-overflow-scrolling:touch; }
.fvc-ov-tabs::-webkit-scrollbar { display:none; }
.fvc-ov-tab {
  flex:0 0 auto;padding:5px 11px;border-radius:var(--r-pill,999px);cursor:pointer;
  background:rgba(var(--on-rgb),.06);border:1px solid var(--glass-b);
  color:var(--muted);font:inherit;font-size:.75rem;font-weight:600;line-height:1.2;white-space:nowrap;
}
.fvc-ov-tab.active { background:var(--green-d);border-color:var(--green-b);color:var(--text); }

/* Panel — one thing at a time; min-height is set inline to the pick card's height. */
.fvc-ov-panel { position:relative; }
.fvc-ov-focus {
  position:relative;
  border:1px solid var(--green-b);border-radius:var(--r);overflow:hidden;
  box-shadow:0 4px 24px rgba(123,178,144,.08);
}
.fvc-ov-focus .stock-card { border:0;border-radius:0;box-shadow:none; }
.fvc-ov-dismiss {
  position:absolute;top:8px;right:8px;z-index:3;width:24px;height:24px;border-radius:50%;
  display:inline-flex;align-items:center;justify-content:center;cursor:pointer;padding:0;
  background:rgba(var(--on-rgb),.10);border:1px solid var(--glass-b);color:var(--dim);
  font-size:.95rem;line-height:1;
}
.fvc-ov-dismiss:hover { color:var(--text); }

.fvc-ov-list { display:flex;flex-direction:column; }
.fvc-ov-lhead {
  display:flex;align-items:center;gap:8px;
  padding:2px 6px 6px;border-bottom:1px solid var(--glass-b);margin-bottom:2px;
  font-size:.66rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--muted);
}
.fvc-ov-lh-name { flex:1 1 auto;min-width:0; }
.fvc-ov-lhead .fvc-ov-q, .fvc-ov-lhead .fvc-ov-up { color:var(--muted);font-weight:700; }
.fvc-ov-row {
  display:flex;align-items:center;gap:8px;width:100%;
  padding:7px 6px;margin:0;border:0;border-radius:8px;cursor:pointer;
  background:transparent;color:var(--text);text-align:left;
  font:inherit;font-size:.82rem;line-height:1.3;
}
.fvc-ov-row:hover, .fvc-ov-row:focus-visible { background:rgba(var(--on-rgb),.07); }
.fvc-ov-rank { flex:0 0 18px;font-size:.7rem;font-weight:700;color:var(--muted);text-align:right; }
.fvc-ov-name { flex:1 1 auto;min-width:0;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.fvc-ov-q    { flex:0 0 44px;font-weight:800;font-size:.82rem;text-align:right;font-variant-numeric:tabular-nums; }
.fvc-ov-up   { flex:0 0 56px;font-weight:800;font-size:.82rem;text-align:right;font-variant-numeric:tabular-nums; }

/* ── Tabellen-Ansicht (#table-view 2026-07-07): dense re-sortable overview table —
   a second rendering of the same feed page (Karten ⇄ Tabelle toggle in the results
   bar). Column-header buttons trigger the existing SERVER sorts. */
.fvc-view-toggle { display:inline-flex;flex:0 0 auto;border:1px solid var(--glass-b);border-radius:var(--r-pill,999px);overflow:hidden; }
.fvc-view-btn {
  padding:4px 11px;border:0;cursor:pointer;background:transparent;color:var(--muted);
  font:inherit;font-size:.72rem;font-weight:600;line-height:1.3;white-space:nowrap;
}
.fvc-view-btn.active { background:var(--green-d);color:var(--text); }

/* Sort control — moved into the results bar (operator 2026-07-07). Pill matching the view
   toggle; a native <select> under the hood so it opens the OS picker on a phone and can
   never overflow. ↕ icon = sort affordance; ▾ caret is a pointer-events-none overlay so the
   whole pill taps through to the select. */
.fvc-rb-sort { position:relative;display:inline-flex;flex:0 0 auto;max-width:64vw;margin-left:auto; }   /* pin right; view toggle sits far left */
.fvc-rb-sort-btn {
  display:inline-flex;align-items:center;gap:6px;cursor:pointer;max-width:100%;
  border:1px solid var(--glass-b);border-radius:var(--r-pill,999px);
  background:transparent;color:var(--text);font:inherit;line-height:1.3;padding:5px 11px;
  transition:border-color .14s,background .14s;
}
.fvc-rb-sort-btn:hover { border-color:rgba(123,178,144,.5);background:rgba(123,178,144,.06); }
.fvc-rb-sort-lbl { font-size:.72rem;font-weight:600;color:var(--dim);white-space:nowrap;flex:0 0 auto; }
.fvc-rb-sort-val { font-size:.72rem;font-weight:700;color:var(--text);white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.fvc-rb-sort-car { font-size:.56rem;color:var(--dim);flex:0 0 auto;transition:transform .15s; }
.fvc-rb-sort.open .fvc-rb-sort-car { transform:rotate(180deg); }
/* the menu — solid dark panel (var(--surface) = #111a14 dark / #fff light), matches the site */
.fvc-rb-sort-menu {
  position:absolute;top:calc(100% + 6px);right:0;z-index:70;
  min-width:100%;width:max-content;max-width:80vw;
  background:var(--surface);border:1px solid var(--glass-b);border-radius:12px;
  box-shadow:0 14px 38px rgba(0,0,0,.5);padding:5px;display:none;flex-direction:column;
}
.fvc-rb-sort.open .fvc-rb-sort-menu { display:flex; }
.fvc-rb-sort-opt {
  display:flex;align-items:center;gap:8px;text-align:left;cursor:pointer;white-space:nowrap;
  background:transparent;border:0;border-radius:8px;color:var(--text);font:inherit;
  font-size:.82rem;font-weight:600;padding:9px 14px 9px 10px;
}
.fvc-rb-sort-opt::before { content:"";width:14px;flex:0 0 auto;text-align:center;color:var(--green,#7BB290);font-weight:800; }
.fvc-rb-sort-opt.is-sel::before { content:"✓"; }
.fvc-rb-sort-opt.is-sel { color:var(--green,#7BB290); }
.fvc-rb-sort-opt:hover { background:rgba(123,178,144,.12); }

/* Narrow phones: shrink the count + toggle a touch so both fit the SAME line without
   the count number getting ellipsised (operator 2026-07-07). */
@media (max-width:480px) {
  .fvc-context-line .fvc-ctx-count { font-size:.72rem; }
  .fvc-view-btn { padding:4px 8px; }
  .fvc-rb-sort-lbl, .fvc-rb-sort-val { font-size:.7rem; }
  .fvc-rb-sort { max-width:88vw; }   /* the control group wraps, so sort can use its own line */
}
/* ID specificity needed: the ≥1280px desktop rule sets `#cards { display:grid }`,
   which outranks a class-only override — the table then rendered inside ONE 548px
   grid cell (headless verify 2026-07-07). */
#cards.fvc-table-mode, .cards.fvc-table-mode { display:block; }
.fvc-tb-scroll { overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid var(--glass-b);border-radius:var(--r); }
.fvc-tb { width:100%;border-collapse:collapse;font-size:.8rem;line-height:1.35; }
.fvc-tb thead th {
  position:sticky;top:0;z-index:1;background:var(--bg);
  text-align:left;font-size:.68rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;
  color:var(--muted);padding:8px 10px;border-bottom:1px solid var(--glass-b);white-space:nowrap;
}
.fvc-tb-sort {
  border:0;background:transparent;cursor:pointer;color:inherit;
  font:inherit;text-transform:inherit;letter-spacing:inherit;padding:0;
}
.fvc-tb-sort:hover, .fvc-tb-sort.active { color:var(--text); }
.fvc-tb tbody td { padding:7px 10px;border-bottom:1px solid rgba(var(--on-rgb),.05);vertical-align:middle;white-space:nowrap; }
.fvc-tb tbody tr:last-child td { border-bottom:0; }
.fvc-tb-row { cursor:pointer; }
.fvc-tb-row:hover { background:rgba(var(--on-rgb),.06); }
.fvc-tb-rank { width:34px;text-align:center;padding-left:8px;padding-right:2px; }   /* holds the company logo (was the rank #) */
.fvc-tb-rank .fvc-row-logo { vertical-align:middle; }
.fvc-tb-name { max-width:280px;overflow:hidden;text-overflow:ellipsis; }
.fvc-tb-co { display:block;font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis; }
.fvc-tb-tk { display:block;font-size:.68rem;color:var(--muted); }
.fvc-tb-fv { font-weight:700;color:var(--text); }
.fvc-tb-up, .fvc-tb-q { font-weight:800;font-variant-numeric:tabular-nums; }
/* Plus-Spalte der Feed-Listenansicht: rechts zur Watchlist hinzufügen (operator 2026-07-09) */
.fvc-tb-wl { width:40px;text-align:right;padding-right:10px; }
.fvc-tb-wlbtn {
  width:26px;height:26px;border-radius:50%;border:1px solid var(--glass-b,rgba(255,255,255,.18));
  background:rgba(var(--on-rgb),.05);color:var(--muted);font-size:1rem;font-weight:700;line-height:1;
  cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:border-color .12s,color .12s,background .12s;
}
.fvc-tb-wlbtn:hover { border-color:var(--green,#7BB290);color:var(--green,#7BB290);background:rgba(123,178,144,.10); }
.fvc-tb-wlbtn.on { border-color:var(--green,#7BB290);color:var(--green,#7BB290);background:rgba(123,178,144,.14); }
@media (max-width:719px) {
  .fvc-tb .fvc-tb-hm { display:none; }   /* mobile keeps Logo / Name / vs. Fair Value / Qualität / + */
  /* table-layout:fixed → die Summe der Spaltenbreiten ist IMMER 100% des Containers;
     die Tabelle kann nie breiter als der Viewport werden (kein Horizontal-Scroll, das
     Plus bleibt sichtbar — Operator iPhone 12/Max 2026-07-09). */
  .fvc-tb { table-layout:fixed; width:100%; }
  .fvc-tb tbody td, .fvc-tb thead th { padding:7px 4px;overflow:hidden;text-overflow:ellipsis; }
  .fvc-tb thead th { font-size:.62rem; }   /* „Qualität" bleibt einzeilig, „vs. Fair Value" bricht sauber */
  .fvc-tb-rank { width:32px;padding-left:6px;padding-right:0; }
  .fvc-tb-name { max-width:none;width:auto; }   /* bekommt den Rest — der einzige flexible Spaltenkopf */
  /* Volle Labels „vs. Fair Value" / „Qualität": Header darf umbrechen (2 Zeilen), Header
     UND Wert zentriert → der Wert steht mittig unter der Überschrift (Operator 2026-07-09). */
  .fvc-tb thead th.fvc-tb-up, .fvc-tb thead th.fvc-tb-q { white-space:normal;line-height:1.12;vertical-align:middle; }
  .fvc-tb .fvc-tb-up { width:64px;text-align:center; }
  .fvc-tb .fvc-tb-q  { width:58px;text-align:center; }
  .fvc-tb-wl  { width:40px;padding-right:6px;padding-left:2px; }
  .fvc-tb-wlbtn { width:28px;height:28px; }   /* etwas größer = leichteres Tap-Ziel am Handy */
  /* B5 (2026-07-15, iPhone-Report): WATCHLIST-Tabelle — ohne feste Breiten teilte
     table-layout:fixed den Platz gleichmäßig, quetschte den Namen („Bayerisc…") und die
     Status-Zelle so knapp, dass der Ellipsis als mysteriöser „Punkt" hinter „Auf Kurs"
     erschien. Feste schmale Spalten rechts, overflow der Pill sichtbar, Name bekommt den Rest. */
  .wl-tb .wl-tb-verdict { overflow:visible;text-overflow:clip;text-align:right; }
  /* table-layout:fixed nimmt die Spaltenbreiten aus der ERSTEN Zeile (thead th, ohne Klassen)
     → Breiten per nth-child setzen; Spalte 1 (Name) bekommt den Rest. */
  .wl-tb thead th:nth-child(2) { width:74px; }
  .wl-tb thead th:nth-child(3) { width:60px; }
  .wl-tb thead th:nth-child(4) { width:84px; }
  .wl-tb thead th:nth-child(5) { width:30px; }
}

/* ── Spotlight — today's standout undervalued quality stock above the feed.
   Badge + card are ONE visual unit: the wrap carries the green accent frame,
   the badge is a docked header row INSIDE it (X small in its right corner),
   the card below merges seamlessly (no own border). Existing tokens only,
   dark-mode colors untouched. Full width (sits OUTSIDE the #cards grid). */
#fvc-spotlight:not(:empty) { margin:0 0 18px; }
.fvc-spotlight-wrap {
  border:1px solid var(--green-b);border-radius:var(--r);overflow:hidden;
  box-shadow:0 4px 24px rgba(123,178,144,.08);
}
.fvc-spotlight-wrap .stock-card { border:0;border-radius:0;box-shadow:none; }
.fvc-spotlight-head {
  display:flex;align-items:center;flex-wrap:wrap;gap:4px 10px;
  padding:8px 14px;background:rgba(123,178,144,.10);
  border-bottom:1px solid var(--green-b);
}
.fvc-spotlight-badge {
  display:inline-flex;align-items:center;min-width:0;
  font-size:.74rem;font-weight:600;letter-spacing:.02em;line-height:1.4;color:var(--green);
}
.fvc-spotlight-scope {
  flex:1 1 auto;min-width:0;
  font-size:.68rem;font-weight:500;letter-spacing:.02em;line-height:1.4;color:var(--muted);
  white-space:nowrap;
}
.fvc-spotlight-close {
  flex:0 0 auto;width:22px;height:22px;margin-left:auto;border-radius:50%;cursor:pointer;
  display:inline-flex;align-items:center;justify-content:center;
  background:rgba(var(--on-rgb),.05);border:1px solid var(--glass-b);
  color:var(--dim);font-size:.9rem;line-height:1;padding:0;
  transition:color .15s ease,border-color .15s ease;
}
.fvc-spotlight-close:hover { color:var(--text);border-color:var(--green-b); }

/* "N hidden by your values" note above the card grid. */
.fvc-values-note {
  grid-column:1/-1;font-size:.8rem;color:var(--muted);
  background:rgba(123,178,144,.07);border:1px solid rgba(123,178,144,.18);
  border-radius:12px;padding:10px 14px;margin-bottom:4px;line-height:1.5;
}
.fvc-values-note .dim { color:var(--dim);font-size:.74rem; }
.fvc-values-clear {
  background:none;border:none;cursor:pointer;color:var(--green);
  font:inherit;font-weight:700;text-decoration:underline;padding:0;
}
/* Values & ESG detail section */
.ve-sub { font-size:.78rem;color:var(--muted);font-weight:600;margin:0 0 8px; }
.ve-flags { display:flex;flex-wrap:wrap;gap:7px;margin-top:16px; }   /* Luft zwischen ESG-Balken und Exposure-Badges (operator 2026-07-09: „Badge klebt oben") */
.ve-flag {
  font-size:.7rem;font-weight:600;padding:3px 10px;border-radius:999px;
  background:rgba(240,160,84,.12);border:1px solid rgba(240,160,84,.3);color:var(--amber,#f0a054);
}
.ve-clean { font-size:.78rem;color:var(--dim); }
.ve-empty { font-size:.8rem;color:var(--dim);line-height:1.5; }
.ve-esg-grid { display:flex;flex-wrap:wrap;gap:14px;margin:2px 0 4px; }
.ve-metric { display:flex;flex-direction:column;gap:1px;min-width:74px; }
.ve-m-lbl { font-size:.66rem;color:var(--dim);text-transform:uppercase;letter-spacing:.04em; }
.ve-m-val { font-size:1.05rem;font-weight:800;color:var(--text,var(--text)); }
.ve-meta { font-size:.7rem;color:var(--dim);margin-top:10px; }
/* Sector / industry row in the detail modal overview */
.modal-meta-row { display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 16px; }
.modal-meta-chip {
  cursor:pointer;font-size:.68rem;font-weight:600;letter-spacing:.03em;
  padding:3px 10px;border-radius:999px;
  background:rgba(123,178,144,.12);border:1px solid rgba(123,178,144,.3);color:var(--green);
  transition:background .15s,border-color .15s;
}
.modal-meta-chip:hover { background:rgba(123,178,144,.2);border-color:rgba(123,178,144,.45); }
.modal-meta-sub { font-size:.74rem;color:var(--muted); }
@media (max-width:560px){ .card-sector { font-size:.58rem;padding:2px 7px;max-width:160px; } }
/* Confidence pill (clickable, replaces old conf-badge on card) */
.card-conf-pill {
  flex-shrink:0;display:inline-flex;align-items:center;
  padding:4px 12px;border-radius:var(--r-pill);
  font-size:.66rem;font-weight:700;letter-spacing:.05em;
  border:1px solid;cursor:pointer;white-space:nowrap;
  transition:opacity .15s;
}
.card-conf-pill:hover { opacity:.8; }

/* badge group at the top-right of the card: [Alpha Quality 82] [evidence] */
.card-badges { flex-shrink:0; display:flex; align-items:center; gap:6px; flex-wrap:wrap; justify-content:flex-end; }
.card-aq-pill {
  display:inline-flex; align-items:center; padding:4px 11px; border-radius:var(--r-pill);
  font-size:.66rem; font-weight:700; letter-spacing:.04em; white-space:nowrap; border:1px solid;
}
/* flex layout swallows the label's trailing space → explicit gap before the score */
.card-aq-pill .aq-num { margin-left:.3em; font-variant-numeric:tabular-nums; }
.card-aq-pill.aq-strong { background:rgba(123,178,144,.16); border-color:rgba(123,178,144,.45); color:var(--green); }
.card-aq-pill.aq-mid    { background:rgba(240,160,84,.12);  border-color:rgba(240,160,84,.32);  color:var(--amber); }
.card-aq-pill.aq-weak   { background:rgba(233,106,106,.12); border-color:rgba(233,106,106,.38); color:#e96a6a; }   /* weak quality = red warning, not muted (operator 2026-07-12: "Quality 37 weiß statt rot") */
@media (max-width:560px){ .card-aq-pill, .card-conf-pill { font-size:.6rem; padding:3px 9px; } }

/* Numbers row: price / fv / upside — 3-column with dividers */
.card-numbers {
  display:flex;align-items:stretch;
  gap:0;margin-bottom:14px;
  padding:0;
  background:rgba(var(--on-rgb),.03);border-radius:var(--r-sm);
  overflow:hidden;
}
.card-num-col {
  flex:1;text-align:center;padding:13px 10px;
}
.card-num-divider {
  width:1px;background:rgba(var(--on-rgb),.08);
  flex-shrink:0;margin:10px 0;
}
.card-num-arrow { display:none; }
.card-num-fv, .card-num-upside { }
.card-num-lbl {
  font-size:.59rem;color:var(--dim);text-transform:uppercase;
  letter-spacing:.07em;margin-bottom:5px;
}
/* Mobile legibility: card micro-labels rendered at 8–10px on phones — lift to
   ≥10.5px. Mobile-only (≤480px, later in source than the 560px overrides above);
   desktop look unchanged. */
@media (max-width:480px){
  .card-sector { font-size:.66rem; }
  .card-conf-pill, .card-aq-pill { font-size:.66rem; }
  .card-num-lbl { font-size:.69rem; }
  /* ticker row is a tap target — pad the hit area to ~40px without moving the
     text (negative margins pull the layout back, same trick as .fvh-howto) */
  .card-ticker-row { padding-block:6px; margin-block:-6px; }
}
.card-num-val {
  font-size:1.05rem;font-weight:700;color:var(--text);
  font-variant-numeric:tabular-nums;
}
.card-val-pill { display:none; }

/* Valuation label beneath gauge */
.card-val-label {
  display:flex;align-items:center;gap:5px;
  font-size:.7rem;font-weight:600;margin:4px 0 8px;
  justify-content:center;
}
.card-val-dot {
  width:7px;height:7px;border-radius:50%;flex-shrink:0;
}

/* Chip row (models / factors / SEC) */
.card-chips {
  display:flex;flex-wrap:wrap;gap:5px;margin:8px 0 14px;
}
.card-chip {
  background:rgba(var(--on-rgb),.05);border:1px solid rgba(var(--on-rgb),.09);
  border-radius:var(--r-pill);padding:2px 9px;
  font-size:.62rem;color:var(--dim);
}

/* Card buttons v4 */
.card-btn.primary-btn {
  background:var(--green);color:#0a1a10;
  border:none;
}
.card-btn.primary-btn:hover { background:var(--green2); }
.card-btn.share-btn {
  background:rgba(100,160,240,.08);color:#90b8f0;
  border:1px solid rgba(100,160,240,.2);
}
.card-btn.share-btn:hover { background:rgba(100,160,240,.15); }
/* "Share this find" — highlighted share button on standout (undervalued + quality)
   cards to nudge sharing of the strongest opportunities (#48). */
.card-btn.share-btn.share-btn-hot {
  background:rgba(100,160,240,.18); color:#bcd6ff; border-color:rgba(100,160,240,.5);
  font-weight:700; box-shadow:0 0 0 0 rgba(100,160,240,.5);
  animation:shareHotPulse 2.6s ease-out infinite;
}
.card-btn.share-btn.share-btn-hot:hover { background:rgba(100,160,240,.28); }
@keyframes shareHotPulse {
  0% { box-shadow:0 0 0 0 rgba(100,160,240,.45); }
  60% { box-shadow:0 0 0 7px rgba(100,160,240,0); }
  100% { box-shadow:0 0 0 0 rgba(100,160,240,0); }
}
@media (prefers-reduced-motion: reduce) { .card-btn.share-btn.share-btn-hot, .modal-act-share { animation:none; } }
.card-btn.calc-btn {
  background:var(--green-d);color:var(--green);
  border:1px solid var(--green-b);
}
.card-btn.calc-btn:hover { background:rgba(123,178,144,.18); }

/* ══════════════════════════════════════════════════════════════════════════════
   VALUATION METER — v5  (smiley marker, anti-overlap labels)
   ══════════════════════════════════════════════════════════════════════════════ */

.val-meter {
  margin:0 0 8px;user-select:none;
  animation:fadeIn .35s ease;
}
@keyframes fadeIn { from{opacity:0;transform:translateY(3px)} to{opacity:1;transform:translateY(0)} }

/* Track: margin provides space for above/below labels */
.val-meter-track {
  position:relative;height:7px;
  background:rgba(var(--on-rgb),.07);border-radius:4px;
  overflow:visible;
  margin:42px 0 48px;
}

/* Bear/bull band */
.val-meter-bear-bull-band {
  position:absolute;top:0;height:100%;
  background:rgba(var(--on-rgb),.055);border-radius:3px;
  pointer-events:none;
}
/* Fair zone band */
.val-meter-fair-band {
  position:absolute;top:0;height:100%;
  background:rgba(123,178,144,.28);border-radius:3px;
  border:1px solid rgba(123,178,144,.32);
}

/* FV marker — green bar with pulse glow */
.val-meter-fv-marker {
  position:absolute;top:-4px;transform:translateX(-50%);
  width:3px;height:15px;border-radius:2px;
  background:var(--green);
  z-index:1;
  animation:fvPulse 2.6s ease-in-out infinite;
}
@keyframes fvPulse {
  0%,100%{box-shadow:0 0 5px rgba(123,178,144,.55)}
  50%    {box-shadow:0 0 14px rgba(123,178,144,1),0 0 22px rgba(123,178,144,.4)}
}

/* FV label — always ABOVE the track */
.vml-fv-label {
  position:absolute;bottom:calc(100% + 17px);
  transform:translateX(-50%);
  color:var(--green);white-space:nowrap;
  font-size:.6rem;font-weight:600;line-height:1;
  pointer-events:none;
  text-shadow:0 0 8px rgba(123,178,144,.5);
}

/* ── Emoji price marker ── */
.val-meter-smiley {
  position:absolute;top:-23px;
  width:52px;height:52px;border-radius:50%;
  transform:translateX(-50%);
  display:flex;align-items:center;justify-content:center;
  border:2px solid;
  cursor:pointer;z-index:3;
  transition:transform .22s cubic-bezier(.4,0,.2,1);
  animation:smileIn .45s cubic-bezier(.34,1.56,.64,1);
}
.val-meter-smiley:hover { transform:translateX(-50%) scale(1.15); }
.vml-emoji { font-size:30px;line-height:1;display:block; }

@keyframes smileIn {
  from{opacity:0;transform:translateX(-50%) scale(0.45)}
  to  {opacity:1;transform:translateX(-50%) scale(1)}
}

/* Smiley colour variants */
.val-meter-smiley.happy {
  background:rgba(18,36,22,.95);
  border-color:rgba(123,178,144,.72);
  box-shadow:0 0 14px rgba(123,178,144,.44),0 0 30px rgba(123,178,144,.14);
}
.val-meter-smiley.neutral {
  background:rgba(18,20,18,.95);
  border-color:rgba(232,240,235,.25);
  box-shadow:none;
}
.val-meter-smiley.sad {
  background:rgba(38,16,16,.95);
  border-color:rgba(224,95,95,.62);
  box-shadow:0 0 12px rgba(224,95,95,.34),0 0 24px rgba(224,95,95,.12);
}

/* Tooltip on hover */
.val-meter-smiley .vml-tooltip {
  display:none;
  position:absolute;bottom:calc(100% + 7px);left:50%;
  transform:translateX(-50%);
  background:rgba(12,20,14,.96);
  border:1px solid rgba(123,178,144,.2);
  border-radius:6px;padding:4px 10px;
  white-space:nowrap;font-size:.6rem;
  color:var(--text);z-index:10;
  pointer-events:none;
  box-shadow:0 4px 12px rgba(0,0,0,.45);
}
.val-meter-smiley:hover .vml-tooltip { display:block; }

/* Price label — BELOW the track, clear of smiley bottom edge */
.vml-price-label {
  position:absolute;top:calc(100% + 32px);
  transform:translateX(-50%);
  color:var(--muted);white-space:nowrap;
  font-size:.6rem;line-height:1;
  pointer-events:none;
}
.vml-price-label.hidden { display:none; }

/* Valuation status pill inside card numbers row */
.card-val-pill {
  font-size:.6rem;font-weight:700;letter-spacing:.06em;
  text-transform:uppercase;align-self:flex-end;
  margin-left:auto;padding-bottom:2px;
  white-space:nowrap;
}

/* ══════════════════════════════════════════════════════════════════════════════
   MODAL v4 — topbar, summary bar, tabs
   ══════════════════════════════════════════════════════════════════════════════ */

/* Sticky detail header: ticker/name + Watchlist/Share + close, pinned while scrolling.
   Negative margins bleed it across the .modal's 28px padding so it spans full width and
   covers content scrolling underneath. */
/* The detail modal drops its own top padding so the sticky bar can sit flush at the very top
   (no negative-margin tricks → robust on Firefox + Chrome). The bar provides its own spacing. */
/* JS-Klasse (fvcSyncTabsTop) statt :has() — letzteres greift auf älterem Firefox nicht
   und ließ das 28px-Padding oben stehen (Spalt über der Sticky-Topbar). :has() bleibt als
   Progressive Enhancement für den Fall, dass die Klasse noch nicht gesetzt ist. */
.modal.has-topbar,
.modal:has(.modal-topbar) { padding-top:0; }
.modal-topbar {
  position:sticky;top:0;z-index:30;
  display:flex;align-items:center;justify-content:space-between;
  gap:8px;margin:0 -28px 16px;padding:15px 28px 12px;
  background:var(--surface);border-bottom:1px solid var(--glass-b);
  border-radius:var(--r) var(--r) 0 0;
}
.modal-topbar-id { min-width:0;flex:1 1 auto; }
.modal-topbar-tools { display:flex;align-items:center;gap:7px;flex:0 0 auto; }
.modal-topbar .modal-close { position:static;flex:0 0 auto; }
/* Compact action buttons inside the sticky bar (smaller so ticker + buttons + ✕ never collide). */
.modal-tb-btn { flex:0 0 auto;padding:6px 11px;font-size:.78rem;line-height:1.1; }
.modal-ticker {
  font-size:1.3rem;font-weight:700;letter-spacing:.04em;color:var(--text);line-height:1.2;
}
.modal-company {
  font-size:.78rem;color:var(--muted);margin-top:2px;
  max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}
.modal-ticker { white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%; }

.modal-summary-bar {
  display:flex;align-items:center;flex-wrap:wrap;gap:0;
  background:rgba(var(--on-rgb),.03);border:1px solid var(--glass-b);
  border-radius:var(--r-sm);padding:10px 16px;margin-bottom:16px;
}
.msb-item { flex:1;text-align:center;padding:0 10px; }
.msb-lbl  { font-size:.62rem;color:var(--dim);text-transform:uppercase;letter-spacing:.07em;margin-bottom:4px; }
.msb-val  { font-size:1.18rem;font-weight:700;color:var(--text);font-variant-numeric:tabular-nums; }
.msb-arrow  { font-size:1.1rem;padding:0 4px;flex-shrink:0; }
.msb-divider {
  width:1px;height:32px;background:var(--glass-b);
  flex-shrink:0;margin:0 4px;
}

/* Plain-language reading guide under the summary bar (#41 simpler wording). */
.modal-readguide {
  margin:-6px 2px 16px; font-size:.78rem; line-height:1.5; color:var(--dim);
}
.modal-readguide b { color:var(--text); font-weight:700; }

/* Detail-page actions (Watchlist + Share) — #44 */
.modal-actions { display:flex; gap:10px; margin:0 0 16px; }
.modal-act-btn {
  flex:1; display:inline-flex; align-items:center; justify-content:center; gap:7px;
  padding:11px 14px; border-radius:var(--r-sm,10px); cursor:pointer; white-space:nowrap;
  font-size:.92rem; font-weight:700; border:1px solid var(--glass-b,rgba(var(--on-rgb),.12));
  background:rgba(var(--on-rgb),.04); color:var(--text,var(--text)); transition:background .15s,border-color .15s,color .15s,transform .1s;
}
.modal-act-btn:hover { background:rgba(var(--on-rgb),.08); transform:translateY(-1px); }
.modal-act-btn.is-active { background:rgba(123,178,144,.16); border-color:var(--green,#7BB290); color:var(--green,#7BB290); }
/* "+ Watchlist" is the PRIMARY detail action (operator/audit): green-filled + louder than Share.
   Once the stock is already on the list (.is-active) it relaxes to the subtle green-outline above. */
.modal-act-btn.js-modal-wl:not(.is-active) { background:linear-gradient(135deg,#23C988 0%,#0a9c63 100%); color:#06281a; border-color:transparent; font-weight:800; }
.modal-act-btn.js-modal-wl:not(.is-active):hover { filter:brightness(1.05); }
/* Share steps back to a calm secondary on the detail page so it doesn't out-shout the primary
   action (it keeps its pulse elsewhere, e.g. the share modal). */
.modal-actions .modal-act-share, .modal-topbar-tools .modal-act-share { animation:none !important; box-shadow:none !important; }
/* Match the stock CARD's glowing-blue Share button (.card-btn.share-btn.share-btn-hot). */
.modal-act-share {
  background:rgba(100,160,240,.18); color:#bcd6ff; border-color:rgba(100,160,240,.5);
  box-shadow:0 0 0 0 rgba(100,160,240,.5); animation:shareHotPulse 2.6s ease-out infinite;
}
.modal-act-share:hover { background:rgba(100,160,240,.28); filter:none; }
/* Repeated mid-page Watchlist/Share buttons (funnel: detail→watchlist is the biggest leak).
   Just the two buttons, no frame (operator). Vertical breathing room from the sections. */
.modal-actions-repeat { margin:28px 0; }   /* uniform rhythm above+below (operator 2026-07-06) */
/* Share nudge at the bottom of the detail (before Evidence) — #44/#48 */
.modal-share-cta {
  margin:18px 0 4px; padding:16px; border-radius:var(--r);
  border:1px dashed rgba(123,178,144,.4); background:rgba(123,178,144,.06);
  display:flex; flex-direction:column; gap:12px; align-items:flex-start;
}
.modal-share-cta .msc-txt { font-size:.86rem; line-height:1.5; color:var(--text,var(--text)); }
.modal-share-cta .modal-act-share { flex:0 0 auto; align-self:stretch; }
/* Plain bottom Share button — just the button, no frame/blurb/icon (#13). */
.modal-share-bottom { flex:0 0 auto; width:100%; margin:20px 0 4px; }
/* Bottom action row: a content-width Share button (white text + paper-plane) next to a
   subtle "Back to top" button (chevron) — modern, not full-width (operator). */
/* Anordnung 2026-07-25 (Betreiber: "links und rechts stehen sie am Rand an und die Anordnung
   selbst ist nicht gut"): die Leiste hatte KEIN seitliches Padding, darum klebten die zwei
   Hauptaktionen auf dem Handy an beiden Raendern, und "Back to top" hing als drittes Element
   unausgewogen daneben. Jetzt: Watchlist + Teilen als GLEICH BREITES Paar mit Rand-Abstand,
   "Back to top" dezent in EIGENER, zentrierter Zeile darunter. */
.modal-bottom-actions { display:flex; gap:10px 12px; justify-content:center; align-items:stretch;
  flex-wrap:wrap; margin:26px auto 6px; padding:0 16px; max-width:560px; box-sizing:border-box; }
.modal-bottom-actions .modal-act-btn.js-modal-wl,
.modal-bottom-actions .modal-act-share { flex:1 1 148px; min-width:0; }   /* gleich breit, auch auf dem Handy nebeneinander */
.modal-bottom-actions .modal-act-share { width:auto; color:#bcd6ff; display:inline-flex; align-items:center; justify-content:center; gap:8px; }
.modal-bottom-actions .modal-act-share .mab-ico { flex:0 0 auto; }
/* "Back to top" = Hilfsaktion, kein dritter Haupt-Button: eigene Zeile, zentriert, rahmenlos
   und dezent, damit die Leiste nicht nach drei gleichwertigen Knoepfen aussieht. */
.modal-act-top { flex:0 0 100%; margin:10px 0 0; padding:6px 10px; display:inline-flex; align-items:center;
  justify-content:center; gap:6px; background:none; border:0; color:var(--muted); font-size:.86rem; }
.modal-act-top:hover { background:none; color:var(--text); transform:none; }
.modal-act-top svg { flex:0 0 auto; }
.modal-act-top:hover { color:var(--text); border-color:rgba(123,178,144,.45); }

/* Latest-news list on the detail page (#50) */
/* News header + 5-level "news mood" badge (avg article sentiment). */
.news-head { display:flex; align-items:center; justify-content:space-between; gap:10px; margin-bottom:6px; }
.news-mood { position:relative; display:inline-flex; align-items:center; gap:5px; font-family:inherit; border:0; cursor:pointer;
  font-size:.78rem; font-weight:700; padding:4px 11px; border-radius:var(--r-pill,100px); white-space:nowrap; }
.news-mood-i { opacity:.7; font-weight:400; font-size:.85em; }
.nm-5 { color:var(--green,#7BB290); background:rgba(123,178,144,.18); }
.nm-4 { color:var(--green,#7BB290); background:rgba(123,178,144,.10); }
.nm-3 { color:var(--dim,#8a9690);   background:rgba(var(--on-rgb),.05); }
.nm-2 { color:var(--amber,#d8a657); background:rgba(216,166,87,.12); }
.nm-1 { color:var(--red,#e0776e);   background:rgba(224,119,110,.14); }
.news-list { display:flex; flex-direction:column; gap:2px; margin-top:6px; }
.news-item {
  display:flex; flex-direction:column; gap:3px; padding:11px 12px; border-radius:10px;
  text-decoration:none; transition:background .15s,border-color .15s; border:1px solid transparent;
}
.news-item:hover { background:rgba(var(--on-rgb),.04); border-color:rgba(123,178,144,.25); }
.news-title { color:var(--text,var(--text)); font-size:.88rem; line-height:1.4; font-weight:600; }
.news-meta  { color:var(--green,#7BB290); font-size:.7rem; letter-spacing:.02em; }
.news-foot  { color:var(--dim,#9aa6a0); font-size:.66rem; margin:10px 0 0; }

/* Tab navigation */
/* ── Detail-Zusammenfassung (Overview-Kopf, Apple-clean) ────────────────── */
/* Kompakte Detail-Summary (Operator 2026-07-05): Einzeiler-Stack der grünen
   Verdict-Boxen, minimale Höhe, keine Überschrift, Copy = Icon oben rechts. */
.fvc-sum{position:relative;border:1px solid var(--fvc-border);border-radius:14px;background:var(--glass);padding:9px 14px;margin:2px 0 14px}
.sum-actions{position:absolute;top:7px;right:8px;display:flex;gap:6px;z-index:1}
.sum-actbtn{display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border-radius:8px;border:1px solid var(--fvc-border);background:transparent;color:var(--muted);cursor:pointer;transition:color .15s,border-color .15s,background .15s}
.sum-actbtn:hover{color:var(--text);border-color:var(--fvc-border-strong);background:var(--green-d)}
.sum-actbtn:active{transform:scale(.94)}
.sum-rows{display:flex;flex-direction:column}
.sum-row{display:flex;align-items:flex-start;gap:8px;padding:3px 0;font-size:12.5px;line-height:1.5}
.sum-row:first-child{padding-right:66px}
.sum-ico{flex:0 0 auto;margin-top:1px}
.sum-bear .sum-v{color:var(--red)}
.sum-v{color:var(--muted);min-width:0}
.sum-v strong{color:var(--text);font-weight:700}
.sum-dim{color:var(--dim);font-size:11px}
/* Bull/Bear/Neutral-Sentiment-Mark — auch vor den grünen Verdict-Boxen unten */
.fvc-sent{display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto}
.fvc-sent svg{width:16px;height:16px;display:block}
.fv-consensus .fvc-sent{margin-right:7px;vertical-align:middle}
.fv-consensus .fvc-sent svg{width:20px;height:20px}
.fv-boxsentence .fvc-sent{margin-top:-2px}
.sum-foot{margin-top:5px;padding-top:6px;border-top:1px solid var(--fvc-border)}
.sum-ev{color:var(--green);text-decoration:none;font-weight:600;font-size:11.5px;white-space:nowrap}
.sum-ev:hover{text-decoration:underline}

.modal-tabs {
  display:flex;gap:2px;overflow-x:auto;justify-content:space-between;
  margin-bottom:16px;
  border-bottom:1px solid var(--glass-b);
  -webkit-overflow-scrolling:touch;
  scrollbar-width:none;
  /* STICKY on detail + watchlist (operator 2026-07-07): sits FLUSH below the sticky .modal-topbar
     (top:0, z-index:30) so the section menu stays visible while scrolling. The topbar height
     varies by context — short on the watchlist panel (title only), tall on the stock detail page
     (ticker + company + tools) — so its exact height is measured live in JS (fvcSyncTabsTop) and
     fed in as --fvc-tabs-top; the 50px fallback covers the pre-measure paint. */
  position:sticky; top:var(--fvc-tabs-top, 50px); z-index:20; background:var(--surface);
}
.modal-tabs::-webkit-scrollbar { display:none; }
/* Watchlist tab menu: seit dem fuenften Reiter passen die langen Woerter nicht mehr nebeneinander.
   Lieber Luft lassen und schieben als quetschen (Betreiber 2026-07-30). */
.wl-tabs { justify-content:space-between; gap:2px; padding-inline:2px; }
.wl-tab-l { display:none; }
@media (min-width:560px){ .wl-tab-s { display:none; } .wl-tab-l { display:inline; } }
.wl-tabs .modal-tab { flex:1 1 auto; text-align:center; white-space:nowrap; font-size:.74rem;
  padding:9px 7px; letter-spacing:0; }
/* Ab genug Breite passen alle Reiter nebeneinander und duerfen den Platz gleichmaessig teilen. */
@media (min-width:560px){
  .wl-tabs { justify-content:space-between; }
  .wl-tabs .modal-tab { flex:1 1 auto; padding:9px 8px; }
}
.modal-tab {
  background:none;border:none;border-bottom:2px solid transparent;
  padding:8px 14px;margin-bottom:-1px;
  font-family:inherit;font-size:.75rem;font-weight:600;
  color:var(--dim);cursor:pointer;white-space:nowrap;
  transition:color .15s,border-color .15s;
}
.modal-tab:hover  { color:var(--muted); }
.modal-tab.active { color:var(--green);border-bottom-color:var(--green); }

/* All detail-modal panels are STACKED (desktop + mobile) — the tab bar is scroll-to
   navigation, not a show-one-hide-rest toggle. Previously desktop set `display:none` on
   inactive panels, so the desktop detail page showed ONLY the Overview/chart and hid Fair
   Value, Quality, Growth, Peers etc. (mobile already stacked via the .modal-sheet override). */
.tab-panel        { display:block; }
.tab-panel.active { display:block; }

/* ── Mobile stock-detail bottom sheet (≤768px) ──────────────────────────────
   Simple, robust single-scroller: the sheet (.modal) is itself the scroll
   container. Slides up from the bottom; content scrolls; the tab bar is sticky;
   drag the handle/title down to dismiss. All rules are gated to ≤768px, so
   desktop Details is unchanged. */
.sheet-handle { display:none; }   /* never shown on desktop */

/* Background scroll lock WITHOUT position:fixed — so the page never jumps and
   stays exactly where it was on close. Locking overflow:hidden on BOTH html and
   body freezes the document scroll regardless of which element owns it. */
html.fvc-scroll-locked, body.fvc-scroll-locked { overflow:hidden !important; }

@media (max-width:768px) {
  .modal-overlay.modal-sheet { align-items:flex-end; padding:0; }

  .modal-overlay.modal-sheet .modal {
    max-width:none; width:100%; max-height:90vh; max-height:90dvh;
    /* Clear the iOS home indicator so the bottom disclaimer isn't cut off (operator). */
    padding:0 0 calc(40px + env(safe-area-inset-bottom, 0px));
    border-radius:16px 16px 0 0; border-bottom:none;
    overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain;
    transform:translateY(100%);
    transition:transform .30s cubic-bezier(.22,.61,.36,1);
  }
  .modal-overlay.modal-sheet.sheet-in .modal { transform:translateY(0); }

  /* The watchlist is a full working panel (holdings, diversification, sectors, market), not a
     peek-sheet: on phones fill the viewport so there is NO dimmed backdrop strip between the site
     header and the panel ("Spalt zwischen Menü und Watchlist Inhalt", operator 2026-07-27) — the
     "My Watchlist" topbar sits flush at the top like the stock-detail page's sticky header. Scoped
     via :has(.wl-tabs) so the stock-detail sheet keeps its peek; if :has is unavailable it simply
     falls back to the default 90dvh. */
  .modal-overlay.modal-sheet:has(.wl-tabs) .modal { max-height:100dvh; border-radius:0; }

  /* Drag handle — sits at the very top (drag zone; touch-action set in JS). */
  .modal-sheet .sheet-handle {
    display:block; width:40px; height:5px; border-radius:3px;
    background:rgba(var(--on-rgb),.22); margin:9px auto 6px; cursor:grab;
  }
  /* Sticky bar on the mobile sheet: full-width (sheet has 0 side padding), flush corners
     (the drag handle sits above it). Compact buttons so ticker + Watchlist + Share + ✕ fit. */
  .modal-sheet .modal-topbar      { margin:0 0 10px; padding:10px 16px 9px; border-radius:0; }
  .modal-sheet .modal-tb-btn      { padding:6px 9px; font-size:.74rem; }
  .modal-sheet .modal-topbar-tools { gap:6px; }
  .modal-sheet .modal-summary-bar { margin:0 18px 12px; }
  /* Action row (Watchlist + Share) must share the SAME 18px inset as the summary
     bar — without it the buttons ran edge-to-edge and overhung the rounded sheet
     (operator #3). */
  .modal-sheet .modal-actions     { margin:0 18px 16px; }
  /* The diversification "swap this stock" sticky prompt is appended to #modal (0 side
     padding on the sheet) → give it the same 18px inset as the rest so it isn't clipped
     edge-to-edge by the sheet's overflow-x:hidden (operator: "zu breit, abgeschnitten"). */
  .modal-sheet .wl-swap-prompt    { margin:10px 18px 0; }
  /* The repeated mid-page CTAs already sit inside a 18px-inset tab-panel, so they must NOT
     take the extra side margin above (would double-indent) — vertical spacing only. */
  .modal-sheet .modal-actions-repeat { margin:28px 0; }
  /* Mobile: same rhythm, proportionally tighter (32→24px between sections). */
  .modal-sheet .modal-section { margin-bottom:30px; }   /* 24->30 (Betreiber 2026-08-01): ab KI-Qualitaet klebten die Sektionen */
  .modal-sheet .modal-readguide   { margin:0 18px 12px; }
  /* Share modal: the sheet has padding:0, so its content needs its own side inset
     (otherwise it ran edge-to-edge and the format toggle overlapped the ✕). */
  .modal-sheet .sm-content { padding:0 16px; }

  /* Sticky tab bar — stays visible at the top of the sheet while scrolling.
     4 tabs spread evenly across the screen width (no horizontal scroll). */
  .modal-sheet .modal-tabs {
    position:sticky; top:var(--fvc-tabs-top, 50px); z-index:20;   /* stick FLUSH below the sticky topbar (height measured live) */
    display:flex; overflow-x:hidden;
    background:var(--surface); margin:0; padding:5px 12px 0;
    box-shadow:0 1px 0 var(--glass-b);
  }
  .modal-sheet .modal-tab  {
    flex:1 1 0; text-align:center; padding:12px 4px; min-height:44px;
    font-size:.72rem; white-space:nowrap;
  }
  /* Seit dem fuenften Reiter (Laenderanalyse 2026-07-30) passen die langen Woerter nicht mehr
     nebeneinander. Vorher: padding 2px, dadurch klebten die Punkte aneinander. Jetzt behalten sie
     ihre Breite mit echtem Abstand, die Leiste laesst sich schieben (overflow-x steht oben). */
  .modal-sheet .wl-tabs .modal-tab { flex:1 1 auto; font-size:.72rem; padding:11px 6px; }
  /* pb 24→0: the last section's own 24px margin already separates the groups — the extra
     padding stacked to a ~62px dead hole between tab groups (double-spacing trap). */
  .modal-sheet .tab-panel  { display:block !important; padding:14px 18px 0; }
  /* Watchlist sheet: the modal has 0 horizontal padding (detail uses .tab-panel),
     so inset the watchlist's OWN sections — otherwise the signal pills / cards /
     teasers cling to the edge (HOLD badge clipped). */
  .modal-sheet #wl-signal-summary,
  .modal-sheet #wl-items-area,
  .modal-sheet #wl-div-area,
  .modal-sheet #wl-sector-area,   /* Allocation card — was MISSING from this inset list, so on mobile it sat edge-to-edge while every sibling was 16px inset ("die Breiten der Blöcke sind alle unterschiedlich", operator 2026-07-06) */
  .modal-sheet #wl-market-val,
  .modal-sheet #wl-country-area,
  .modal-sheet #wl-cash-bar,
  .modal-sheet #wl-autofill-prompt-area,
  .modal-sheet .wl-empty-state,
  .modal-sheet .wl-builder-bar,
  .modal-sheet .fvc-pro-card,
  .modal-sheet .modal-disclaimer { margin-left:16px; margin-right:16px; }
}

@media (prefers-reduced-motion: reduce) {
  .modal-overlay.modal-sheet .modal { transition:none; }
}

/* ══════════════════════════════════════════════════════════════════════════════
   FV EXPLAIN BOX — v4
   ══════════════════════════════════════════════════════════════════════════════ */

.fv-explain-box {
  background:rgba(123,178,144,.05);border:1px solid rgba(123,178,144,.15);
  border-radius:var(--r-sm);padding:12px 14px;
}
/* Clean vertical key→value breakdown (#7). The old horizontal "Current → Base ×
   Quality = Final" formula wrapped unevenly on a phone (content looked offset /
   "versetzt"). A stacked list — label left, value right — is unambiguous and
   evenly divided at every width. The →/×/= separators are hidden (redundant in a
   list); the Final row is set apart with a top border. */
.fv-explain-row {
  display:flex;flex-direction:column;
  gap:0;margin-bottom:4px;
}
.fv-explain-item {
  display:flex;align-items:baseline;justify-content:space-between;
  gap:12px;padding:5px 0;border-bottom:1px solid rgba(var(--on-rgb),.05);
}
.fv-explain-item:last-child { border-bottom:none; }
.fv-explain-main {
  margin-top:3px;padding-top:8px;border-top:1px solid rgba(123,178,144,.28);
  border-bottom:none;
}
.fv-explain-sep  { display:none; }
.fv-explain-lbl {
  font-size:.74rem;color:var(--dim);text-transform:none;
  letter-spacing:0;margin:0;text-align:left;
}
.fv-explain-main .fv-explain-lbl { color:var(--text);font-weight:700; }
/* One-line "Quality Score X/100 (incl. AI …) → Quality Factor ×M" formula — small and
   forced onto a single line so even a narrow iPhone Pro shows it as a one-liner. */
.fv-qline { margin-top:8px;font-size:clamp(.56rem,2.45vw,.8rem);color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.4; }
.fv-qline b { color:var(--text);font-weight:700; }
.fv-explain-val {
  font-size:.98rem;font-weight:700;color:var(--text);
  font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap;
}
.fv-explain-main .fv-explain-val { font-size:1.12rem; }
.fv-explain-upside {
  display:flex;align-items:baseline;flex-wrap:wrap;gap:6px;
  padding:8px 0;border-top:1px solid rgba(var(--on-rgb),.06);
  margin-bottom:8px;
}
.fv-explain-note {
  font-size:.68rem;color:var(--dim);line-height:1.6;
}
/* Collapsible "How is this calculated?" explanation */
.fv-explain-details { border-top:1px solid rgba(var(--on-rgb),.06); }
.fv-explain-details > summary {
  list-style:none;cursor:pointer;padding:8px 0 4px;
  font-size:.72rem;font-weight:700;color:var(--green,#7BB290);
  display:flex;align-items:center;gap:6px;user-select:none;
}
.fv-explain-details > summary::-webkit-details-marker { display:none; }
.fv-explain-details > summary::after {
  content:"▾";font-size:.6rem;color:var(--dim);transition:transform .18s ease;
}
.fv-explain-details[open] > summary::after { transform:rotate(180deg); }
.fv-explain-details > summary:hover { filter:brightness(1.1); }
.fv-explain-details .fv-explain-note { padding-bottom:4px; }
.pos-val { color:var(--green); }
.neg-val { color:var(--red); }

/* Factor family name */
.fam-name { color:var(--text); }   /* brighter/whiter factor labels — match the AI-Quality labels (operator) */

/* ══════════════════════════════════════════════════════════════════════════════
   EVIDENCE TAB — v4
   ══════════════════════════════════════════════════════════════════════════════ */

.evidence-row {
  padding:10px 0;border-bottom:1px solid rgba(var(--on-rgb),.04);
}
.evidence-row:last-child { border-bottom:none; }

/* ── Peer Group comparison (detail page) ───────────────────────────────────── */
/* Normal-case, muted — same style as the AI-Quality "adds +X pts" label (operator). */
.peer-section .peer-sec { text-transform:none; letter-spacing:.01em; font-size:.66rem; font-weight:600; color:var(--muted); margin-left:8px; white-space:nowrap; }
.peer-intro { font-size:.74rem; color:var(--dim,#9aa6a0); line-height:1.45; margin:2px 0 14px; }
.peer-basis { color:var(--amber,#d8a657); font-style:italic; }
.peer-row { margin-bottom:14px; }
.peer-row-top { display:flex; justify-content:space-between; align-items:baseline; margin-bottom:6px; }
/* Snowflake (5-axis radar) — this stock vs sector-peer median */
.snow-wrap { margin-top:0; }   /* now a standalone .modal-section — gap comes from the section margin */
.snow-head { font-size:.72rem; font-weight:800; letter-spacing:.06em; text-transform:uppercase; color:var(--fvc-green,#7BB290); margin:0 0 10px; display:flex; align-items:center; gap:6px; }
.snow-pair { display:flex; gap:12px; flex-wrap:wrap; }
.snow-fig { flex:1 1 140px; margin:0; text-align:center; background:rgba(var(--on-rgb),.03); border:1px solid var(--glass-b,rgba(255,255,255,.1)); border-radius:12px; padding:8px 6px 6px; }
.snow-svg { width:100%; max-width:210px; height:auto; display:block; margin:0 auto; overflow:visible; }
.snow-fig figcaption { font-size:.7rem; color:var(--muted); margin-top:4px; font-weight:600; }
.peer-lbl { font-size:.82rem; font-weight:600; color:var(--text,var(--text)); }
.peer-verdict { font-size:.78rem; font-weight:700; }
.peer-bar { position:relative; height:8px; border-radius:4px; background:rgba(var(--on-rgb),.07); }
.peer-band { position:absolute; top:0; bottom:0; background:rgba(123,178,144,.16); border-radius:4px; }
.peer-median { position:absolute; top:-3px; bottom:-3px; width:2px; background:rgba(var(--muted-rgb),.55); border-radius:2px; transform:translateX(-1px); }
.peer-marker { position:absolute; top:50%; width:14px; height:14px; border-radius:50%; border:2px solid #0e1512;
  box-shadow:0 1px 4px rgba(0,0,0,.5); transform:translate(-50%, -50%); z-index:2; }
.peer-evidence { margin-top:6px; font-size:.78rem; color:var(--dim,#9aa6a0); }
.peer-evidence .peer-lbl { font-size:.78rem; margin-right:4px; }
.evidence-header {
  display:flex;align-items:center;justify-content:space-between;
  margin-bottom:4px;
}
.evidence-fam   { font-weight:600;font-size:.8rem;color:var(--text); }
.evidence-score { font-weight:700;font-size:.8rem;font-variant-numeric:tabular-nums; }
.evidence-citation { font-size:.71rem;color:var(--dim);line-height:1.55; }

/* ══════════════════════════════════════════════════════════════════════════════
   CONFIDENCE EXPLAIN — v4
   ══════════════════════════════════════════════════════════════════════════════ */

.conf-row {
  display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 8px;
  padding:8px 0;border-bottom:1px solid rgba(var(--on-rgb),.04);
  font-size:.82rem;
}
.conf-row:last-child { border-bottom:none; }
.conf-pass .conf-icon { color:var(--green);font-size:.75rem; }
.conf-miss .conf-icon { color:var(--dim);font-size:.75rem; }
.conf-pass .conf-label { color:var(--text);font-weight:600; }
.conf-miss .conf-label { color:var(--muted);font-weight:600; }
/* Detail wraps to its own left-aligned line under the label — no far-right gap. */
.conf-detail { flex-basis:100%;margin-left:24px;text-align:left;color:var(--dim);font-size:.72rem; }
/* Confidence-level rows: fixed-width colour label + left-aligned criteria (kills
   the label-left / value-far-right spread that read as "too wide"). */
.conf-lvl .mr-label { flex:0 0 70px; font-weight:700; }
.conf-lvl .mr-val { flex:1; text-align:left; font-weight:500; color:var(--muted); }

/* "What does Evidence mean?" popup — its content lives directly in #modal-body, which
   on the bottom sheet has padding:0 → text ran edge-to-edge. Give it a side inset
   (narrower, consistent with .sm-content) and tighten the vertical rhythm so it reads
   compact. Scoped to .conf-explain so the shared modal classes stay untouched elsewhere. */
.modal-sheet .conf-explain { padding:0 16px; }
.modal-sheet .conf-explain .modal-disclaimer { margin-left:0; margin-right:0; }
.conf-explain .modal-sub          { margin-bottom:9px; }
.conf-explain .modal-section      { margin-bottom:14px; }
.conf-explain .modal-section-title { margin-bottom:7px; padding-bottom:5px; }
.conf-explain .conf-row           { padding:6px 0; }
.conf-explain .modal-row          { padding:4px 0; }
.conf-explain .modal-disclaimer   { margin-top:10px; padding-top:9px; }

/* ══════════════════════════════════════════════════════════════════════════════
   SHARE MODAL — v4
   ══════════════════════════════════════════════════════════════════════════════ */

.spc-val-label {
  text-align:center;font-size:.8rem;font-weight:700;
  margin-bottom:8px;padding:4px 0;
}
.share-btn-row {
  display:flex;flex-wrap:wrap;gap:8px;margin-top:8px;
}

/* ══════════════════════════════════════════════════════════════════════════════
   MODAL UTILITY — v4
   ══════════════════════════════════════════════════════════════════════════════ */

.modal-text {
  font-size:.78rem;color:var(--muted);line-height:1.65;margin-bottom:8px;
}
.modal-disclaimer {
  font-size:.66rem;color:var(--dim);line-height:1.6;margin-top:16px;
  padding-top:12px;border-top:1px solid var(--glass-b);
  font-style:italic;
}

/* ══════════════════════════════════════════════════════════════════════════════
   RESPONSIVE — v4 additions
   ══════════════════════════════════════════════════════════════════════════════ */

@media (max-width:640px) {
  .status-top-inner { flex-direction:column;gap:14px; }
  .card-numbers { padding:0; }
  .card-num-col { padding:10px 8px; }
  .card-num-val { font-size:.88rem; }
  .modal-summary-bar { padding:8px 6px; }
  .msb-item { padding:0 4px; }
  .msb-val  { font-size:.98rem; }
  .modal-tabs { gap:0; }
  .wl-tabs    { gap:2px; }   /* Watchlist-Leiste braucht die Luft, sie traegt 5 lange Punkte */
  .modal-tab  { padding:8px 10px;font-size:.7rem; }
  .val-meter-labels { font-size:.6rem; }
  .share-btn-row { flex-direction:column; }
}


/* ══════════════════════════════════════════════════════════════════════════════
   SHARE MODAL — v5 (platform workflow, caption, native + fallback)
   ══════════════════════════════════════════════════════════════════════════════ */

.sm-header {
  margin-bottom:14px;padding-bottom:12px;
  border-bottom:1px solid var(--glass-b);
}
.sm-ticker  { font-size:1.4rem;font-weight:700;color:var(--text);line-height:1.1; }
.sm-company { font-size:.77rem;color:var(--muted);margin-top:3px; }

.sm-preview-wrap {
  position:relative;
  background:#0a0f0b;
  border:1px solid rgba(123,178,144,.18);
  border-radius:var(--r-sm);overflow:hidden;
  margin-bottom:14px;text-align:center;min-height:60px;
}
.sm-preview-canvas { width:100%;height:auto;display:block; }

.sm-platform-row {
  display:grid;grid-template-columns:1fr 1fr;gap:8px;
  margin-bottom:10px;
}
.sm-platform-btn {
  display:flex;align-items:center;justify-content:center;gap:8px;
  padding:10px 12px;border-radius:var(--r-sm);
  font-family:inherit;font-size:.8rem;font-weight:600;
  cursor:pointer;border:1px solid;
  transition:background .18s,transform .12s,box-shadow .18s;
  white-space:nowrap;
}
.sm-platform-btn:hover { transform:translateY(-1px); }
.sm-instagram {
  background:linear-gradient(135deg,rgba(131,58,180,.13) 0%,rgba(193,53,132,.13) 50%,rgba(253,88,53,.13) 100%);
  border-color:rgba(193,53,132,.28);color:rgba(226,120,172,.9);
}
.sm-instagram:hover {
  background:linear-gradient(135deg,rgba(131,58,180,.2) 0%,rgba(193,53,132,.2) 50%,rgba(253,88,53,.2) 100%);
  box-shadow:0 4px 14px rgba(193,53,132,.15);
}
.sm-tiktok {
  background:rgba(0,0,0,.25);border-color:rgba(var(--on-rgb),.14);
  color:rgba(232,240,235,.8);
}
.sm-tiktok:hover { background:rgba(var(--on-rgb),.07); }

.sm-secondary-row {
  display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px;
}
.sm-action-btn {
  display:inline-flex;align-items:center;gap:5px;
  padding:5px 11px;border-radius:var(--r-pill);
  font-family:inherit;font-size:.73rem;font-weight:600;
  cursor:pointer;
  background:var(--glass);color:var(--muted);
  border:1px solid var(--glass-b);
  transition:background .18s;
}
.sm-action-btn:hover { background:rgba(var(--on-rgb),.09); }

.sm-status {
  padding:7px 12px;border-radius:var(--r-sm);
  font-size:.76rem;line-height:1.55;margin-top:6px;
}
.sm-status.success{background:rgba(123,178,144,.09);border:1px solid rgba(123,178,144,.25);color:var(--green);}
.sm-status.info   {background:rgba(var(--on-rgb),.03);border:1px solid rgba(var(--on-rgb),.09);color:var(--muted);}
.sm-status.error  {background:rgba(224,95,95,.07);border:1px solid rgba(224,95,95,.2);color:var(--red);}

.sm-caption-preview {
  background:rgba(var(--on-rgb),.03);border:1px solid rgba(var(--on-rgb),.07);
  border-radius:var(--r-sm);padding:9px 12px;
  font-size:.7rem;color:var(--dim);line-height:1.7;
  white-space:pre-wrap;max-height:90px;overflow-y:auto;
  margin-bottom:6px;
}
/* "Copy caption" sits directly under the caption preview, centred. */
.sm-caption-actions { display:flex;justify-content:center;margin:0 0 10px; }

/* Format toggle (Instagram Post / Story·TikTok) */
/* Top row: sits at the very top but leaves the right corner free for the ✕ close button. */
.sm-format-toggle { display:flex;gap:6px;background:rgba(var(--on-rgb),.04);border:1px solid var(--glass-b);border-radius:var(--r-pill);padding:4px;margin:0 40px 14px 0; }
.sm-fmt-btn { flex:1;padding:8px 10px;border:none;border-radius:var(--r-pill);background:transparent;color:var(--muted);font-family:inherit;font-size:.78rem;font-weight:700;cursor:pointer;transition:background .15s,color .15s; }
.sm-fmt-btn.active { background:var(--green);color:#0e1512; }
/* Story (9:16) preview constrained by height so the modal stays compact */
.sm-preview-wrap.is-story { display:flex;justify-content:center; }
.sm-preview-wrap.is-story .sm-preview-canvas { width:auto;height:64vh;max-height:560px;max-width:100%; }
/* Primary share row */
.sm-primary-row { display:flex;gap:8px;margin-bottom:8px; }
.sm-share-btn {
  flex:1;display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:11px 14px;border-radius:var(--r-sm);border:1px solid var(--green);
  background:var(--green);color:#0e1512;font-family:inherit;font-size:.84rem;font-weight:800;
  cursor:pointer;transition:transform .12s,box-shadow .18s;
}
.sm-share-btn:hover { transform:translateY(-1px);box-shadow:0 6px 20px rgba(123,178,144,.3); }
.sm-primary-row .sm-action-btn { padding:11px 16px;font-size:.8rem; }
/* Share-to-app row: 4 equal buttons in the platforms' real CI colours. */
.sm-app-row { display:flex;gap:8px;margin-bottom:10px; }
.sm-app {
  flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;
  padding:9px 3px;border-radius:12px;border:none;cursor:pointer;
  font-family:inherit;font-size:.61rem;font-weight:700;letter-spacing:.01em;line-height:1;
  transition:transform .12s ease, filter .18s ease;
}
.sm-app:hover { transform:translateY(-1px);filter:brightness(1.05); }
.sm-app svg { width:22px;height:22px;flex:0 0 auto; }
.sm-app-dl { background:rgba(var(--on-rgb),.06);color:var(--text);border:1px solid var(--glass-b); }
.sm-app-wa { background:#25D366;color:#fff; }                                       /* real WhatsApp green */
.sm-app-ig { background:linear-gradient(45deg,#FEDA75 0%,#FA7E1E 22%,#D62976 50%,#962FBF 76%,#4F5BD5 100%);color:#fff; }  /* Instagram app-icon gradient */
.sm-app-tt { background:#010101;color:#fff;border:1px solid rgba(255,255,255,.14); }  /* TikTok black (icon carries cyan/red) */
.sm-app-ml { background:linear-gradient(180deg,#54C7FB 0%,#1A8CF5 58%,#0A78F0 100%);color:#fff; }  /* Email — Apple-Mail blue (white envelope glyph) */
.sm-app-x  { background:#000;color:#fff;border:1px solid rgba(255,255,255,.16); }   /* X (Twitter) — public reach */
.sm-app-li { background:#0A66C2;color:#fff; }                                       /* LinkedIn blue */
.sm-app-rd { background:#FF4500;color:#fff; }                                       /* Reddit orange */
.sm-app-cl { background:rgba(var(--on-rgb),.08);color:var(--text); }                /* Copy link — neutral */
.sm-reach-label { font-size:.62rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:4px 0 6px; }

/* ── Personal signature dialog (opt-in when tapping Instagram/TikTok) ── */
.fvc-sig-back {
  position:fixed; inset:0; z-index:100050;
  background:rgba(4,8,6,.66); backdrop-filter:blur(3px); -webkit-backdrop-filter:blur(3px);
  display:flex; align-items:center; justify-content:center; padding:20px;
  animation:fvcSigIn .16s ease;
}
@keyframes fvcSigIn { from { opacity:0; } to { opacity:1; } }
.fvc-sig-card {
  position:relative; width:100%; max-width:380px; box-sizing:border-box;
  background:var(--card,#121a16); border:1px solid rgba(123,178,144,.22); border-radius:16px;
  padding:22px 20px 20px; box-shadow:0 24px 70px rgba(0,0,0,.55); color:var(--text,#e8f0eb);
}
.fvc-sig-x {
  position:absolute; top:9px; right:11px; background:none; border:0;
  color:var(--dim,#7a847d); font-size:1.15rem; line-height:1; cursor:pointer; padding:4px;
}
.fvc-sig-h { font-weight:800; font-size:1.18rem; margin:0 0 6px; color:var(--text,#eef4f0); }
.fvc-sig-sub { font-size:.84rem; line-height:1.45; color:var(--dim,#9fb0a8); margin:0 0 16px; }
.fvc-sig-sub b { color:#cfe0d6; }
.fvc-sig-lbl { display:block; font-size:.72rem; font-weight:700; letter-spacing:.03em; text-transform:uppercase; color:#8a948c; margin:0 0 6px; }
.fvc-sig-lbl span { font-weight:400; text-transform:none; letter-spacing:0; color:#6b756e; }
.fvc-sig-in {
  width:100%; box-sizing:border-box; background:rgba(0,0,0,.22);
  border:1px solid rgba(255,255,255,.1); border-radius:10px; padding:11px 13px;
  color:var(--text,#eef4f0); font-size:1rem; font-family:inherit; margin:0 0 16px; outline:none;
}
.fvc-sig-in:focus { border-color:rgba(123,178,144,.55); }
.fvc-sig-stars { display:flex; gap:7px; margin:0 0 20px; font-size:1.9rem; line-height:1; user-select:none; }
.fvc-sig-stars span { cursor:pointer; color:#3a423d; transition:color .12s, transform .12s; }
.fvc-sig-stars span.on { color:#e9c46a; }
.fvc-sig-stars span:active { transform:scale(.84); }
.fvc-sig-btns { display:flex; gap:10px; }
.fvc-sig-skip, .fvc-sig-add {
  flex:1 1 auto; border-radius:10px; padding:12px 10px; font-size:.92rem;
  font-weight:700; cursor:pointer; font-family:inherit; border:1px solid transparent;
}
.fvc-sig-skip { background:rgba(255,255,255,.06); color:#c2ccc5; border-color:rgba(255,255,255,.1); }
.fvc-sig-add  { background:#7bb290; color:#06120c; }
.fvc-sig-add:active, .fvc-sig-skip:active { transform:translateY(1px); }

/* ── AI Stock Chat (modern / SaaS, in the shared modal sheet) ── */
.fvc-chat { display:flex; flex-direction:column; height:100%; min-height:64vh; }
/* Mobile sheet has padding:0 → give the chat its own side inset so nothing is cut off. */
.modal-sheet .fvc-chat { padding-left:16px; padding-right:16px; min-height:72vh; }
.fvc-chat-head { display:flex; align-items:center; gap:11px; padding:2px 0 13px; }
.fvc-chat-ava { flex:0 0 auto; width:38px; height:38px; border-radius:50%;
  background:linear-gradient(140deg,#8fd0a6,#5a9c8f); display:flex; align-items:center; justify-content:center;
  box-shadow:0 4px 14px rgba(123,178,144,.32); }
.fvc-chat-ava svg { width:20px; height:20px; color:#06120c; }
.fvc-chat-htext { min-width:0; }
.fvc-chat-title { font-weight:800; font-size:1.04rem; letter-spacing:-.01em; color:var(--text); line-height:1.1; }
.fvc-chat-sub { display:flex; align-items:center; gap:6px; font-size:.72rem; color:var(--dim); margin-top:3px; }
.fvc-chat-live { width:7px; height:7px; border-radius:50%; background:#7BB290; animation:fvcChatLive 2.2s infinite; }
@keyframes fvcChatLive { 0%{box-shadow:0 0 0 0 rgba(123,178,144,.5)} 70%{box-shadow:0 0 0 6px rgba(123,178,144,0)} 100%{box-shadow:0 0 0 0 rgba(123,178,144,0)} }
.fvc-chat-msgs { flex:1 1 auto; overflow-y:auto; -webkit-overflow-scrolling:touch; padding:10px 0 6px;
  display:flex; flex-direction:column; gap:18px; scrollbar-width:thin; }
.fvc-chat-msg { display:flex; gap:10px; animation:fvcChatIn .24s cubic-bezier(.22,.61,.36,1) both; }
.fvc-chat-msg.is-user { justify-content:flex-end; }
.fvc-chat-msg.is-bot { align-items:flex-start; }
@keyframes fvcChatIn { from { opacity:0; transform:translateY(7px); } to { opacity:1; transform:translateY(0); } }
/* assistant avatar (small) */
.fvc-chat-mav { flex:0 0 auto; width:27px; height:27px; border-radius:50%; margin-top:1px;
  background:linear-gradient(140deg,#8fd0a6,#5a9c8f); display:flex; align-items:center; justify-content:center;
  box-shadow:0 2px 8px rgba(123,178,144,.3); }
.fvc-chat-mav svg { width:15px; height:15px; color:#06120c; }
.fvc-chat-b { word-wrap:break-word; }
/* assistant = clean, full-width text, NO bubble (Claude/ChatGPT style) */
.fvc-chat-msg.is-bot .fvc-chat-b { flex:1 1 auto; min-width:0; background:none; border:none; box-shadow:none; padding:2px 0 0;
  color:var(--text); font-size:.9rem; line-height:1.62; }
/* user = subtle, right-aligned bubble */
.fvc-chat-msg.is-user .fvc-chat-b { max-width:80%; background:rgba(var(--on-rgb),.07); color:var(--text);
  border:1px solid rgba(var(--on-rgb),.07); border-radius:16px; border-bottom-right-radius:5px; padding:9px 13px;
  font-size:.88rem; line-height:1.5; }
.fvc-chat-b a { color:var(--fvc-green,#7BB290); text-decoration:underline; }
.fvc-chat-b .fvc-chat-ul { margin:5px 0 2px; padding-left:17px; }
.fvc-chat-b .fvc-chat-ul li { margin:2px 0; }
.fvc-chat-b code { background:rgba(var(--on-rgb),.1); border-radius:4px; padding:1px 5px; font-size:.85em; font-family:ui-monospace,SFMono-Regular,Menlo,monospace; }
.fvc-chat-chips, .fvc-chat-wizrow { display:flex; flex-wrap:wrap; gap:7px; margin:2px 0; }
.fvc-chat-chip, .fvc-chat-wizbtn { background:rgba(var(--on-rgb),.05); border:1px solid rgba(var(--on-rgb),.12);
  color:var(--text); border-radius:999px; padding:8px 13px; font-size:.78rem; font-weight:600; cursor:pointer; font-family:inherit;
  transition:border-color .15s, background .15s, transform .1s; }
.fvc-chat-chip:hover, .fvc-chat-wizbtn:hover { border-color:rgba(123,178,144,.5); background:rgba(123,178,144,.1); }
.fvc-chat-chip:active, .fvc-chat-wizbtn:active { transform:translateY(1px); }
.fvc-chat-foot { flex:0 0 auto; padding-top:10px; }
.fvc-chat-status { margin-bottom:8px; }
.fvc-chat-bar { height:5px; border-radius:4px; background:rgba(var(--on-rgb),.1); overflow:hidden; }
.fvc-chat-bar span { display:block; height:100%; background:linear-gradient(90deg,#7BB290,#9fd3b3); border-radius:4px; transition:width .35s; }
.fvc-chat-bartxt { font-size:.68rem; color:var(--dim); margin-top:4px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fvc-chat-inputbar { display:flex; gap:9px; align-items:flex-end; }
.fvc-chat-inputbar textarea { flex:1 1 auto; min-width:0; resize:none; max-height:120px; box-sizing:border-box;
  background:rgba(var(--on-rgb),.05); border:1px solid rgba(var(--on-rgb),.14); border-radius:16px; padding:12px 16px;
  /* Explizite px-Metriken + min-height: Chrome Android rundet rows=1-Höhen anders und setzte
     den Caret oben-links statt mittig (Operator 2026-07-05). 22px Zeile + 2×12 Padding + 2
     Border = 48px — Caret exakt vertikal zentriert, identisch auf allen Engines. */
  height:48px; min-height:48px;
  color:var(--text); font-family:inherit; font-size:16px; line-height:22px; outline:none; transition:border-color .15s, box-shadow .15s; }
.fvc-chat-inputbar textarea::placeholder { color:rgba(var(--muted-rgb),.55); }
.fvc-chat-inputbar textarea:focus { border-color:rgba(123,178,144,.55); box-shadow:0 0 0 3px rgba(123,178,144,.14); }
.fvc-chat-send { flex:0 0 auto; width:44px; height:44px; border-radius:50%; border:0;
  background:linear-gradient(145deg,#7BB290,#5f9e86); color:#06120c; cursor:pointer; display:flex; align-items:center; justify-content:center;
  box-shadow:0 4px 14px rgba(123,178,144,.32); transition:transform .12s, filter .15s; }
.fvc-chat-send:hover { filter:brightness(1.06); }
.fvc-chat-send:active { transform:scale(.92); }
.fvc-chat-disc { font-size:.64rem; color:var(--dim); text-align:center; margin-top:8px; opacity:.8; }
.fvc-chat-dots { display:inline-flex; gap:4px; padding:3px 0; }
.fvc-chat-dots i { width:6px; height:6px; border-radius:50%; background:var(--dim); animation:fvcChatDot 1s infinite; }
.fvc-chat-dots i:nth-child(2) { animation-delay:.15s; }
.fvc-chat-dots i:nth-child(3) { animation-delay:.3s; }
@keyframes fvcChatDot { 0%,60%,100% { opacity:.3; transform:translateY(0); } 30% { opacity:1; transform:translateY(-3px); } }

/* ── AI chat window (ChatGPT-style): anchored at the search bar, thread on top,
   input field at the BOTTOM. Shown only in AI mode (#fvc-ai-panel). ── */
/* position:fixed + top/left/width/height set by JS (fvcAiPositionPanel) so the keyboard
   never scrolls the page / shifts the window. */
.fvc-ai-panel { position:fixed; z-index:1210;
  display:flex; flex-direction:column;
  background:rgba(12,19,15,.72); backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
  border:1px solid rgba(123,178,144,.35); border-radius:16px;
  box-shadow:0 24px 70px rgba(0,0,0,.55); overflow:hidden;
  /* fixed-duration slide → identical speed in every browser (NOT coupled to visualViewport
     event cadence, which Chrome/Firefox fire very differently). ease-out = no overshoot.
     ~0.24s felt right on Chrome. Suppressed via inline transition:none for first placement. */
  transition:top .24s ease-out, height .24s ease-out; }
.fvc-ai-panel[hidden] { display:none; }
/* header row mirrors the search bar: [✦ @magnifier spot] [divider] [label] … [✕] */
.fvc-ai-head { flex:0 0 auto; display:flex; align-items:center; gap:10px; padding:8px 10px 8px 14px;
  border-bottom:1px solid rgba(var(--on-rgb),.08); }
/* glittering Valyra ✦ — EXACT size/spot of the search magnifier (left of the divider) */
.fvc-ai-toggle { flex:0 0 auto; position:relative; overflow:hidden; cursor:pointer; padding:0;
  width:34px; height:34px; border-radius:50%; display:flex; align-items:center; justify-content:center;
  background:linear-gradient(135deg, rgba(205,214,230,.18), rgba(123,178,144,.15)); color:var(--fvc-green,#7BB290);
  border:1px solid rgba(123,178,144,.4); animation:fvcWizGlow 2.8s ease-in-out infinite; }
.fvc-ai-toggle::after { content:''; position:absolute; inset:0; border-radius:50%; pointer-events:none;
  background:linear-gradient(115deg, transparent 32%, rgba(255,255,255,.6) 48%, rgba(222,231,245,.25) 56%, transparent 72%);
  transform:translateX(-130%); animation:fvcWizShimmer 2.8s ease-in-out infinite; }
.fvc-ai-toggle svg { width:18px; height:18px; position:relative; z-index:1; animation:fvcWizTwinkle 2.8s ease-in-out infinite; }
.fvc-ai-toggle:active { transform:scale(.92); }
/* divider + label mirror the search bar's [|] [Search xy stocks..] */
.fvc-ai-head-div { flex:0 0 auto; width:1px; height:22px; background:rgba(123,178,144,.32); }
.fvc-ai-head-label { flex:1 1 auto; min-width:0; color:rgba(var(--muted-rgb),.55); font-size:.86rem;
  overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.fvc-ai-x { flex:0 0 auto; background:rgba(var(--on-rgb),.06); border:none;
  width:30px; height:30px; border-radius:50%; color:var(--dim,#9fb0a8); font-size:.92rem; cursor:pointer; line-height:1;
  display:flex; align-items:center; justify-content:center; transition:background .15s, color .15s; }
.fvc-ai-x:hover { background:rgba(var(--on-rgb),.12); color:var(--text); }
@media (prefers-reduced-motion: reduce) { .fvc-ai-toggle, .fvc-ai-toggle::after, .fvc-ai-toggle svg { animation:none; } }
/* AI panel: clean full-width assistant text — no avatar/speech-bubble */
.fvc-ai-thread .fvc-chat-mav { display:none; }
.fvc-ai-thread .fvc-chat-msg.is-bot { gap:0; }
.fvc-ai-thread { flex:1 1 0; min-height:0; overflow-y:auto; -webkit-overflow-scrolling:touch; overscroll-behavior:contain;
  padding:13px 15px 10px; display:flex; flex-direction:column; gap:16px; scrollbar-width:thin; }
.fvc-ai-panel-foot { flex:0 0 auto; padding:9px 13px 12px; border-top:1px solid rgba(var(--on-rgb),.08); background:transparent; }
.fvc-ai-foot { margin-bottom:8px; }
.fvc-ai-foot:empty { display:none; }
.fvc-ai-inputbar { display:flex; gap:8px; align-items:flex-end; }
.fvc-ai-inputbar textarea { flex:1 1 auto; min-width:0; resize:none; min-height:44px; max-height:120px; box-sizing:border-box;
  background:rgba(var(--on-rgb),.05); border:1px solid rgba(var(--on-rgb),.14); border-radius:16px; padding:10px 14px;
  color:var(--text); font-family:inherit; font-size:16px; line-height:1.4; outline:none; caret-color:var(--fvc-green,#7BB290); transition:border-color .15s, box-shadow .15s;
  /* Chrome-Caret-Bug (2026-07-14): der backdrop-filter des .fvc-ai-panel verschiebt sonst die
     Cursor-Position beim Klick (Klick landet woanders als der Caret erscheint). Ein eigener
     Compositing-Layer (will-change/translateZ) entkoppelt die textarea vom Filter-Layer. */
  will-change:transform; transform:translateZ(0); }
.fvc-ai-inputbar textarea::placeholder { color:rgba(var(--muted-rgb),.55); }
.fvc-ai-inputbar textarea:focus { border-color:rgba(123,178,144,.55); box-shadow:0 0 0 3px rgba(123,178,144,.14); }
.fvc-ai-send { flex:0 0 auto; background:var(--fvc-green); color:var(--on-green); border:none; border-radius:50%;
  width:36px; height:36px; padding:0; line-height:0; cursor:pointer;
  display:inline-flex; align-items:center; justify-content:center;
  box-shadow:0 4px 14px rgba(123,178,144,.32); transition:filter .15s, transform .12s, box-shadow .15s; }
.fvc-ai-send svg { display:block; }
.fvc-ai-send:hover { filter:brightness(1.07); transform:translateY(-1px); box-shadow:0 6px 20px rgba(123,178,144,.42); }
.fvc-ai-send:active { transform:translateY(0); }
.fvc-ai-send:focus-visible { outline:2px solid #eafff2; outline-offset:2px; }
/* Suggestion chips in the chat greeting (tap → sends the example prompt) */
.fvc-ai-suggs { display:flex; flex-wrap:wrap; gap:7px; margin:2px 0 2px 2px; }
.fvc-ai-sugg { padding:7px 12px; border-radius:999px; cursor:pointer; text-align:left;
  background:rgba(var(--on-rgb),.05); border:1px solid rgba(var(--on-rgb),.14); color:var(--text);
  font-size:.82rem; transition:background .14s, border-color .14s; }
.fvc-ai-sugg:hover { background:rgba(123,178,144,.12); border-color:rgba(123,178,144,.4); }
/* Stock chips under an answer: [ ticker ↗ | + ] — open the analysis OR add to watchlist */
.fvc-ai-picks { margin:-4px 0 2px; }
.fvc-ai-picks-lbl { display:block; font-size:.72rem; color:rgba(var(--muted-rgb),.6); margin:0 0 6px 1px; }
.fvc-ai-picks-row { display:flex; flex-wrap:wrap; gap:7px; }
.fvc-ai-pick { display:inline-flex; align-items:stretch; border-radius:999px; overflow:hidden;
  background:rgba(123,178,144,.12); border:1px solid rgba(123,178,144,.34); }
.fvc-ai-pick-open { display:inline-flex; align-items:center; gap:5px; padding:5px 9px 5px 12px; cursor:pointer;
  background:transparent; border:none; color:var(--text); font-size:.82rem; font-weight:700; letter-spacing:.01em; transition:background .14s; }
.fvc-ai-pick-open:hover { background:rgba(123,178,144,.16); }
.fvc-ai-pick-wl { padding:0 10px; cursor:pointer; background:transparent; border:none; border-left:1px solid rgba(123,178,144,.32);
  color:var(--fvc-green,#7BB290); font-size:1.05rem; font-weight:800; line-height:1; display:inline-flex; align-items:center; transition:background .14s, color .14s; }
.fvc-ai-pick-wl:hover { background:rgba(123,178,144,.22); }
.fvc-ai-pick-wl.on { color:var(--dim,#9fb0a8); }                                  /* already saved → "−" removes it */
.fvc-ai-pick-wl.on:hover { background:rgba(224,115,107,.18); color:#e0736b; }
.fvc-ai-pick-up { font-size:.74rem; font-weight:800; color:var(--fvc-green,#7BB290); }
/* Bulk "add these to your watchlist?" row under a stock list */
.fvc-ai-pickbulk { display:flex; flex-wrap:wrap; align-items:center; gap:7px; margin-top:10px; }
.fvc-ai-pickbulk-q { font-size:.78rem; font-weight:600; color:var(--text); }
.fvc-ai-bulkbtn { padding:5px 12px; border-radius:999px; cursor:pointer; font-size:.78rem; font-weight:700;
  background:var(--fvc-green,#7BB290); color:var(--on-green,#0e1512); border:1px solid var(--fvc-green,#7BB290); transition:filter .14s, background .14s; }
.fvc-ai-bulkbtn:hover { filter:brightness(1.08); }
.fvc-ai-bulkbtn.ghost { background:transparent; color:var(--text); border-color:rgba(123,178,144,.4); }
.fvc-ai-bulkbtn.ghost:hover { background:rgba(123,178,144,.12); }
/* Tappable FVC-feature mentions inside assistant replies (Search Wizard, presets, …) */
.fvc-chat-flink { color:var(--fvc-green); font-weight:700; cursor:pointer; border-bottom:1px solid rgba(123,178,144,.45); transition:filter .12s, border-color .12s; }
.fvc-chat-flink:hover { filter:brightness(1.12); border-bottom-color:rgba(123,178,144,.85); }
.fvc-chat-flink:focus-visible { outline:2px solid rgba(123,178,144,.55); outline-offset:2px; border-radius:3px; }
/* Company name / ticker in a reply → link to that stock's detail page */
.fvc-chat-slink { color:var(--fvc-green); cursor:pointer; border-bottom:1px solid rgba(123,178,144,.45); transition:filter .12s, border-color .12s; }
.fvc-chat-slink:hover { filter:brightness(1.12); border-bottom-color:rgba(123,178,144,.85); }

/* ── Filter-bar Search-Wizard sparkle button (silver shimmer, opens the Wizard) ── */
.fvc-control-wiz { position:relative; overflow:hidden;
  background:linear-gradient(135deg, rgba(205,214,230,.18), rgba(123,178,144,.14)) !important;
  border:1px solid rgba(123,178,144,.42) !important; color:var(--fvc-green,#7BB290) !important;
  animation:fvcCtlGlow 2.8s ease-in-out infinite; }
.fvc-control-wiz::after { content:''; position:absolute; inset:0; pointer-events:none;
  background:linear-gradient(115deg, transparent 32%, rgba(255,255,255,.55) 48%, rgba(222,231,245,.22) 56%, transparent 72%);
  transform:translateX(-130%); animation:fvcCtlShimmer 2.8s ease-in-out infinite; }
.fvc-control-wiz svg { position:relative; z-index:1; animation:fvcCtlTwinkle 2.8s ease-in-out infinite; }
@keyframes fvcCtlShimmer { 0% { transform:translateX(-130%); } 55%,100% { transform:translateX(130%); } }
@keyframes fvcCtlGlow { 0%,100% { box-shadow:0 0 0 0 rgba(205,216,235,0); } 50% { box-shadow:0 0 10px 1px rgba(205,216,235,.34); } }
@keyframes fvcCtlTwinkle { 0%,100% { opacity:.85; transform:scale(1); } 50% { opacity:1; transform:scale(1.13); } }
@media (prefers-reduced-motion: reduce) { .fvc-control-wiz, .fvc-control-wiz::after, .fvc-control-wiz svg { animation:none; } }

/* ── Coming-soon Pro upsell card (watchlist panel) ── */
.fvc-pro-card {
  margin-top:14px;padding:18px;border-radius:16px;
  background:linear-gradient(180deg, rgba(123,178,144,.07), rgba(var(--on-rgb),.02));
  border:1px solid rgba(123,178,144,.28);
}
/* The inline watchlist Pro block reuses the modal's content (.login-modal.pro-modal) — drop
   its own padding so the card's padding is the only frame. */
.fvc-pro-card .login-modal { padding:0; }
/* Unified "Pro preview" teaser — shared chrome for the Diversification + Market
   Valuation locked cards (consistent PRO badge + title + benefit + blurred preview).
   The single .fvc-pro-card below is the one CTA. Token-based → works in both themes. */
/* EINE Geometrie fuer alle unteren Sektionen (Betreiber 2026-07-31: „die ganzen Sektionen ab
   Diversifikation wirken unregelmaessig und wie zusammengestoppelt"). Gemessen bei 390 px standen
   dort drei verschiedene Huellen nebeneinander: .mv-card mit Radius 16 und Polster 16/18, dieser
   Block mit Radius 14 und Polster 15/16, und zwei Bloecke ganz ohne Huelle. Werte jetzt identisch
   zu .mv-card, damit der senkrechte Rhythmus stimmt. */
.pro-teaser {
  margin-top:16px;border:1px solid var(--fvc-border);border-radius:16px;
  background:rgba(var(--on-rgb),.03);padding:16px 18px;overflow:hidden;
}
.pro-teaser-head { display:flex;align-items:center;gap:9px;margin-bottom:7px; }
.pro-teaser-badge {
  flex:0 0 auto;font-size:.6rem;font-weight:800;letter-spacing:.6px;
  padding:3px 8px;border-radius:4px;background:var(--green);color:var(--on-green);
  border:0;font-family:inherit;cursor:pointer;transition:filter .15s;
}
.pro-teaser-badge:hover { filter:brightness(1.08); }
.pro-teaser-title { font-size:.95rem;font-weight:800;color:var(--text); }   /* match .mv-title/.wl-div-title heading size (operator 2026-07-08) */
.pro-teaser-sub { font-size:.8rem;line-height:1.5;color:var(--muted);margin:0 0 12px; }
.pro-teaser-prev { position:relative;filter:blur(3px);opacity:.5;pointer-events:none;user-select:none; }
/* "Real tool, results locked" preview (operator 2026-07-07): the tool's real row LABELS stay
   sharp and readable; each result value is a padlock chip. Reads as the real thing with the
   answers withheld — not a blurred fake placeholder. */
.pro-lock-panel { position:relative;margin-bottom:2px; }
.pro-lock-rows { display:flex;flex-direction:column;gap:9px; }
.pro-lock-row, .pro-lock-total { display:flex;align-items:center;justify-content:space-between;gap:12px; }
.pro-lock-total { margin-top:10px;padding-top:10px;border-top:1px solid var(--fvc-border); }
.pro-lock-lbl { font-size:.82rem;font-weight:600;color:var(--text); }
.pro-lock-total .pro-lock-lbl { font-weight:800; }
.pro-lock-val {
  flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;
  width:64px;height:22px;border-radius:6px;color:var(--green);cursor:pointer;
  background:repeating-linear-gradient(135deg, rgba(123,178,144,.16) 0 5px, rgba(123,178,144,.04) 5px 10px);
  border:1px solid rgba(123,178,144,.22);
  transition:filter .15s;
}
.pro-lock-val:hover { filter:brightness(1.2); }
.pro-lock-val-lg { width:78px;height:24px; }
/* Locked REAL Pro card (operator 2026-07-07 v2): the genuine mv-card markup — only the decisive
   details are locked. Redacted "meaning" bar, blurred cash band, blurred chart plot behind a
   padlock veil (legend stays crisp + toggleable), blurred exact % in the real heatmap cells. */
.mv-lockbar {
  display:inline-block;width:72px;max-width:100%;height:11px;border-radius:4px;vertical-align:middle;
  background:repeating-linear-gradient(135deg, rgba(var(--on-rgb),.14) 0 5px, rgba(var(--on-rgb),.05) 5px 10px);
}
.mv-lockblur { filter:blur(4px);opacity:.75;pointer-events:none; }
.mv-vwrap { position:relative; }
.mv-locked .mv-vsvg { filter:blur(6px);opacity:.8; }
.mv-locked .mv-vchart { pointer-events:none; }   /* no scrubbing a blurred plot */
.mv-chart-veil {
  position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle at 50% 45%, rgba(8,12,10,.06), rgba(8,12,10,.38));
  border:0;border-radius:10px;cursor:pointer;font-family:inherit;padding:0;width:100%;
}
.mv-chart-veil .pro-lock-ico { color:#eafff2;filter:drop-shadow(0 2px 8px rgba(0,0,0,.55)); }
.mv-locked .mv-sec-gap { filter:blur(5px); }     /* real heatmap: exact % is the Pro detail */
.mv-locked .mv-head .pro-teaser-badge { align-self:center; }
.wl-btn-lock { display:inline-flex;align-items:center;margin-right:6px;vertical-align:-1px;color:var(--green); }
.wl-action-btn .wl-btn-lock svg { display:inline-block; }
/* FREE Portfolio-Check mini card (top of the non-Pro Diversifikation tab). */
.wl-freecheck .wl-fc-row { display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:6px 2px;border-bottom:1px solid rgba(var(--on-rgb),.05);font-size:.82rem; }
.wl-freecheck .wl-fc-lbl { color:rgba(var(--muted-rgb),.85);font-weight:600;flex:0 0 auto; }
.wl-freecheck .wl-fc-val { text-align:right;color:var(--text); }
.wl-freecheck .wl-fc-note { margin-top:10px;font-size:.74rem;line-height:1.5;color:var(--muted); }
.wl-fc-optbtn {
  display:flex;align-items:center;justify-content:center;gap:7px;width:100%;margin-top:11px;
  padding:9px 14px;border-radius:10px;border:1px solid rgba(123,178,144,.38);
  background:rgba(123,178,144,.12);color:var(--green);font-family:inherit;font-size:.8rem;font-weight:700;
  cursor:pointer;transition:filter .15s;
}
.wl-fc-optbtn:hover { filter:brightness(1.12); }
.pro-teaser-cta {
  display:flex;align-items:center;justify-content:center;gap:8px;
  width:100%;margin-top:13px;padding:10px 16px;
  background:var(--green);color:var(--on-green);border:0;border-radius:10px;
  font-family:inherit;font-size:.85rem;font-weight:800;cursor:pointer;
  transition:filter .15s, transform .12s;
}
.pro-teaser-cta:hover { filter:brightness(1.06);transform:translateY(-1px); }
.pro-cta-lock { display:inline-flex;align-items:center; }
.pro-cta-lock svg { display:block; }
.fvc-pro-soon {
  display:inline-block;font-size:.6rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;
  color:var(--green);background:rgba(123,178,144,.14);border:1px solid rgba(123,178,144,.32);
  padding:3px 9px;border-radius:999px;
}
.fvc-pro-title { font-size:1.15rem;font-weight:800;color:var(--text);margin-top:9px; }
.fvc-pro-sub   { font-size:.8rem;color:var(--muted);margin-top:3px;line-height:1.45; }
.fvc-pro-feats { list-style:none;margin:14px 0;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:8px 16px; }
.fvc-pro-feats li { position:relative;padding-left:24px;font-size:.8rem;color:var(--text);line-height:1.35; }
.fvc-pro-feats li::before { content:'✓';position:absolute;left:0;top:0;color:var(--green);font-weight:800; }
.fvc-pro-btn {
  display:flex;align-items:center;justify-content:center;width:100%;box-sizing:border-box;
  text-align:center;text-decoration:none;padding:13px 16px;border-radius:var(--r-pill);
  background:var(--green);color:#0e1512;font-weight:800;font-size:.9rem;transition:transform .12s,box-shadow .18s;
}
.fvc-pro-btn:hover { transform:translateY(-1px);box-shadow:0 6px 20px rgba(123,178,144,.32); }
.fvc-pro-note { text-align:center;font-size:.72rem;color:var(--dim);margin-top:8px; }

/* ── Header Go Pro button ── */
/* PRO badge (operator: SaaS-style, like the small per-filter PRO badge — solid
   green, rounded CORNERS not a pill, UPPERCASE, no star, a touch taller). Themed
   via --green/--on-green so it works in BOTH dark and light. */
.hdr-pro-btn {
  display:inline-flex;align-items:center;gap:5px;
  background:var(--green);border:1px solid var(--green);
  color:var(--on-green);font-weight:800;
  border-radius:6px;padding:6px 13px;
  text-transform:uppercase;letter-spacing:.08em;font-size:.72rem;line-height:1;
}
.hdr-pro-btn:hover { background:var(--green2);border-color:var(--green2);transform:translateY(-1px); }
/* Pro ACTIVE — reads as a STATUS chip, not a buy CTA: translucent green fill, green
   ring + text, a soft glow and a ✓. Instantly distinguishable from the solid "Go Pro"
   button so a paid user can see at a glance that Pro is live. Themed via --green. */
.hdr-pro-btn.is-pro {
  background:rgba(123,178,144,.16);
  border-color:var(--green);
  color:var(--green);
  box-shadow:0 0 0 1px rgba(123,178,144,.22), 0 0 13px rgba(123,178,144,.26);
}
.hdr-pro-btn.is-pro:hover { background:rgba(123,178,144,.24);border-color:var(--green2);color:var(--green); }
.hdr-pro-check { font-size:.86em;line-height:1;font-weight:900;margin-right:1px; }
/* One-shot activation pulse the moment Pro goes live (added briefly by fvcFlashProBadge). */
.hdr-pro-btn.just-activated { animation:fvcProActivate 1.15s ease-out 2; }
@keyframes fvcProActivate {
  0%   { box-shadow:0 0 0 0 rgba(123,178,144,.55), 0 0 13px rgba(123,178,144,.26); }
  70%  { box-shadow:0 0 0 11px rgba(123,178,144,0), 0 0 13px rgba(123,178,144,.26); }
  100% { box-shadow:0 0 0 0 rgba(123,178,144,0), 0 0 13px rgba(123,178,144,.26); }
}
@media (prefers-reduced-motion: reduce) { .hdr-pro-btn.just-activated { animation:none; } }
.hdr-pro-price { font-weight:700;letter-spacing:.02em;opacity:.9; }
.hdr-account-btn { font-weight:600; }

/* ── Sign-in (magic-link) / Pro modal ── (tightened, balanced, premium) */
.login-modal { padding:10px 6px 4px;text-align:center; }
.login-title { font-size:1.2rem;font-weight:800;color:var(--text);letter-spacing:-.01em; }
.login-sub   { font-size:.85rem;color:var(--muted);line-height:1.55;margin:8px auto 14px;max-width:360px;text-align:center; }
.login-modal form { margin:0; }
#login-email {
  width:100%;box-sizing:border-box;background:rgba(12,19,15,.72);text-align:center;
  border:1px solid rgba(123,178,144,.35);border-radius:10px;
  padding:12px 14px;color:var(--text,var(--text));font-size:16px;outline:none;margin-bottom:12px;
}
#login-email:focus { border-color:var(--green);box-shadow:0 0 0 3px rgba(123,178,144,.18); }
#cf-ts-box { display:flex;justify-content:center; }
/* Contact form (founder Mail badge) — reuses the sign-in input look */
.fvc-contact input[type="text"], .fvc-contact input[type="email"], .fvc-contact textarea {
  width:100%;box-sizing:border-box;background:rgba(12,19,15,.72);
  border:1px solid rgba(123,178,144,.35);border-radius:10px;
  padding:12px 14px;color:var(--text,var(--text));font-size:16px;font-family:inherit;outline:none;margin-bottom:10px;
}
.fvc-contact textarea { text-align:left;resize:vertical;min-height:92px;line-height:1.5; }
.fvc-contact input:focus, .fvc-contact textarea:focus { border-color:var(--green);box-shadow:0 0 0 3px rgba(123,178,144,.18); }
#ct-hp { position:absolute;left:-9999px;width:1px;height:1px;opacity:0; }   /* honeypot */
.login-btn {
  display:flex;align-items:center;justify-content:center;
  width:100%;box-sizing:border-box;padding:13px 16px;border:none;border-radius:999px;cursor:pointer;
  background:var(--green);color:#0e1512;font-family:inherit;font-size:.92rem;font-weight:800;
  transition:transform .12s,box-shadow .18s;
}
.login-btn:hover { transform:translateY(-1px);box-shadow:0 6px 20px rgba(123,178,144,.32); }
.login-status { margin-top:12px;padding:9px 12px;border-radius:10px;font-size:.8rem;line-height:1.5; }
.login-status.ok  { background:rgba(123,178,144,.1);border:1px solid rgba(123,178,144,.3);color:var(--green); }
.login-status.err { background:rgba(224,95,95,.08);border:1px solid rgba(224,95,95,.25);color:#e96a6a; }
.login-fine { margin-top:16px;font-size:.7rem;color:var(--dim);line-height:1.5; }

/* ── Modern Pro modal: compact one-pager — feature check-list + trust row + cancel explainer ── */
.modal:has(.pro-modal) { padding:22px 22px 24px; }
/* The watchlist panel CONTAINS a .pro-modal upsell card, so the broad rule above ALSO matched it
   and re-introduced the top padding, pushing the sticky "My Watchlist" topbar down (Spalt über der
   Topbar, operator 2026-07-27). When a sticky topbar is present the topbar owns the top spacing, so
   the modal's own top padding must stay 0. Higher specificity + later source than the rule above. */
.modal.has-topbar:has(.pro-modal),
.modal:has(.modal-topbar):has(.pro-modal) { padding-top:0; }
.pro-modal .fvc-pro-soon { margin-bottom:11px!important; }

/* Anon-Watchlist-Ablauf: Countdown-/Restore-Box im Watchlist-Panel (Soft-Expiry 2026-07-18) */
.wl-anon-expiry { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap;
  margin:10px 0 4px; padding:10px 14px; border-radius:12px; font-size:.78rem; line-height:1.4; text-align:left;
  border:1px solid rgba(214,178,94,.45); background:rgba(214,178,94,.10); color:var(--text); }
.wl-anon-expiry.wl-anon-expired { border-color:rgba(224,122,106,.5); background:rgba(224,122,106,.10); }
.wl-anon-cta { flex-shrink:0; background:var(--fvc-green,#7bb290); color:var(--on-green,#08130d); border:none;
  border-radius:999px; padding:7px 14px; font:inherit; font-size:.76rem; font-weight:800; cursor:pointer; }
.wl-anon-cta:hover { filter:brightness(1.06); }

/* Ex-Trial „Test abgelaufen"-Screen (In-App-Angebot beim Trial-Ende, Operator 2026-07-17) */
.extrial-modal { padding:6px 4px 4px; text-align:center; }
.extrial-emoji { font-size:2.4rem; line-height:1; margin:2px 0 6px; }
.extrial-title { font-size:1.15rem; font-weight:800; color:var(--text); margin:0 0 6px; }
.extrial-sub   { font-size:.82rem; color:rgba(var(--muted-rgb),.8); margin:0 0 10px; }
.extrial-feats { list-style:none; margin:0 auto 12px; padding:0; max-width:320px; text-align:left; display:flex; flex-direction:column; gap:6px; }
.extrial-feats li { position:relative; padding-left:24px; font-size:.82rem; color:var(--text); line-height:1.3; }
.extrial-feats li::before { content:'✓'; position:absolute; left:2px; top:0; color:var(--fvc-green,#7bb290); font-weight:800; }
.extrial-offer { display:inline-block; margin:0 0 12px; padding:6px 12px; border-radius:999px; background:rgba(123,178,144,.16); border:1px solid rgba(123,178,144,.45); color:var(--fvc-green,#7bb290); font-size:.8rem; font-weight:700; }
.extrial-cta { display:block; width:100%; max-width:340px; margin:2px auto 8px; background:var(--fvc-green,#7bb290); color:var(--on-green,#08130d); border:none; border-radius:12px; padding:13px 18px; font:inherit; font-weight:800; font-size:.95rem; cursor:pointer; transition:filter .12s, transform .1s; }
.extrial-cta:hover { filter:brightness(1.06); transform:translateY(-1px); }
.extrial-later { display:block; margin:0 auto; background:none; border:none; color:rgba(var(--muted-rgb),.7); font:inherit; font-size:.78rem; cursor:pointer; padding:6px; }
.extrial-later:hover { color:var(--text); }
.pro-modal .login-title { font-size:1.14rem;margin:0 0 10px;max-width:none; }
/* The Pro popup's intro block should run almost the full modal width (not the narrow 360px
   the default .login-sub uses) so the heading + first paragraph read as one wide, clear block. */
.pro-modal .login-sub { max-width:540px; }
.pro-modal .login-price { font-size:1.95rem;line-height:1.02;margin:8px 0 2px;font-weight:800; }
.pro-modal .login-price-intro { font-size:.4em;font-weight:600; }
.pro-modal .login-intro-sub { margin:0;font-size:.75rem; }
.pro-feats { list-style:none;margin:22px 0;padding:0;text-align:left;display:flex;flex-direction:column;gap:14px; }
.pro-feats li { display:flex;align-items:flex-start;gap:10px;font-size:.83rem;color:var(--text);line-height:1.4; }
.pro-feat-ic { flex:0 0 auto;width:18px;height:18px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  background:rgba(123,178,144,.16);color:#8FE3B0;margin-top:1px; }
.pro-feat-d { display:block;font-size:.72rem;color:rgba(var(--muted-rgb),.76);margin-top:1px;line-height:1.32;font-weight:400; }
/* Primary CTA — modern SaaS: confident saturated gradient, crisp lift shadow + inset highlight,
   a forward arrow and a sheen sweep on hover. Dark text = max readability on the bright fill. */
.pro-modal .login-btn {
  position:relative;overflow:hidden;
  background:linear-gradient(135deg,#5BE6A0 0%,#1FBE82 54%,#0DA46D 100%);
  color:#06281a;font-size:1.06rem;font-weight:800;letter-spacing:.005em;
  padding:16px 18px;border-radius:14px;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.42), 0 5px 16px rgba(15,170,110,.42), 0 1px 3px rgba(0,0,0,.16);
  transition:transform .14s ease, box-shadow .2s ease, filter .2s ease;
}
.pro-modal .login-btn::after { content:"→";font-weight:800;margin-left:10px;transition:transform .2s ease; }
.pro-modal .login-btn::before {
  content:"";position:absolute;top:0;left:-65%;width:48%;height:100%;pointer-events:none;opacity:0;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.5),transparent);transform:skewX(-18deg);
}
.pro-modal .login-btn:hover { transform:translateY(-2px);filter:brightness(1.04);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.5), 0 9px 24px rgba(15,170,110,.55), 0 2px 5px rgba(0,0,0,.2); }
.pro-modal .login-btn:hover::after { transform:translateX(4px); }
.pro-modal .login-btn:hover::before { animation:fvcBtnSheen .75s ease; }
.pro-modal .login-btn:active { transform:translateY(0) scale(.99); }
@keyframes fvcBtnSheen { 0%{left:-65%;opacity:0} 22%{opacity:.85} 100%{left:125%;opacity:0} }
@media (prefers-reduced-motion:reduce){ .pro-modal .login-btn:hover::before{animation:none} }
html[data-theme="light"] .pro-modal .login-btn { background:linear-gradient(135deg,#23C988 0%,#0a9c63 100%);color:#ffffff; }

/* ── CI-BUTTONS, wiederverwendbar (Betreiber 2026-07-25: "haessliche Buttons, kein Glanz,
   unharmonische Abstaende"). Genau DER Stil, der im Pro-Dialog schon ueberzeugt: satter
   Gradient, Innenkante als Glanzkante, Lift-Schatten, Sheen-Sweep beim Hover. Damit sehen
   Haupt-Aktionen ueberall gleich aus, statt je Flaeche anders. ───────────────────────── */
.fvc-cta, .fvc-cta-ghost {
  position:relative;overflow:hidden;display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-family:inherit;font-weight:800;letter-spacing:.005em;text-decoration:none;cursor:pointer;
  border-radius:13px;padding:12px 16px;line-height:1.2;box-sizing:border-box;
  transition:transform .14s ease, box-shadow .2s ease, filter .2s ease, border-color .18s ease, background .18s ease;
}
.fvc-cta {
  background:linear-gradient(135deg,#5BE6A0 0%,#1FBE82 54%,#0DA46D 100%);color:#06281a;border:0;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.42), 0 5px 16px rgba(15,170,110,.38), 0 1px 3px rgba(0,0,0,.16);
}
.fvc-cta::before{content:"";position:absolute;top:0;left:-65%;width:48%;height:100%;pointer-events:none;opacity:0;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.5),transparent);transform:skewX(-18deg)}
.fvc-cta:hover{transform:translateY(-2px);filter:brightness(1.04);
  box-shadow:inset 0 1px 0 rgba(255,255,255,.5), 0 9px 24px rgba(15,170,110,.5), 0 2px 5px rgba(0,0,0,.2)}
.fvc-cta:hover::before{animation:fvcBtnSheen .75s ease}
.fvc-cta:active{transform:translateY(0) scale(.99)}
html[data-theme="light"] .fvc-cta{background:linear-gradient(135deg,#23C988 0%,#0a9c63 100%);color:#fff}
/* Sekundaer: gleiche Geometrie, dezente Glasflaeche mit feiner Glanzkante (kein flaches Grau). */
.fvc-cta-ghost{
  background:linear-gradient(180deg,rgba(255,255,255,.07),rgba(255,255,255,.03));color:var(--text,#eef4f0);
  border:1px solid rgba(255,255,255,.14);font-weight:700;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.10), 0 2px 8px rgba(0,0,0,.16);
}
.fvc-cta-ghost:hover{border-color:rgba(123,178,144,.5);color:var(--text,#eef4f0);transform:translateY(-1px);
  background:linear-gradient(180deg,rgba(123,178,144,.16),rgba(123,178,144,.07));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.16), 0 6px 18px rgba(15,170,110,.20)}
html[data-theme="light"] .fvc-cta-ghost{background:linear-gradient(180deg,#fff,#f3f6f4);border-color:rgba(0,0,0,.12);color:#16221c}
@media (prefers-reduced-motion:reduce){
  .fvc-cta:hover,.fvc-cta-ghost:hover{transform:none}
  .fvc-cta:hover::before{animation:none}
}
/* Mobile: pin the primary "$1 first month" CTA to the bottom of the popup so it is ALWAYS reachable
   without scrolling past the feature list (it was landing ~80-190px below the fold). The button's
   solid gradient hides content scrolling behind it. */
@media(max-width:560px){
  .pro-modal .login-btn { position:sticky; bottom:8px; z-index:3;
    /* Opaque surface "platform" halo (last two shadows): the sticky CTA used to float naked over the
       feature list — text shone through around it, which read as improvised (operator 2026-07-06). */
    /* SOLIDES Dock statt weichem Schleier (Betreiber 2026-07-25: Listenzeilen schimmerten am
       Knopfrand durch = wirkte unsauber): zwei harte Surface-Platten (Ring + Balken oben). */
    box-shadow:inset 0 1px 0 rgba(255,255,255,.42), 0 6px 22px rgba(0,0,0,.5), 0 5px 16px rgba(15,170,110,.5),
               0 0 0 12px var(--surface), 0 -18px 0 12px var(--surface); }
}
.pro-trust { display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:7px 18px;margin:20px 0 2px; }
.pro-trust-link { color:var(--green,#7BB290);text-decoration:none;font-weight:600; }
.pro-trust-link:hover { text-decoration:underline; }
.pro-modal .login-fine { margin-top:13px;font-size:.68rem; }
.pro-modal .login-have-acct { margin-top:12px;padding-top:12px; }
.pro-trust-item { display:inline-flex;align-items:center;gap:6px;font-size:.77rem;color:rgba(var(--muted-rgb),.85); }
.pro-trust-item svg { color:#8FE3B0;flex:0 0 auto; }
.pro-trust-stripe { display:inline-flex;align-items:center; }
.pro-trust-stripe svg { height:14px;width:auto;color:inherit; }
.pro-tip { position:relative;display:inline-flex;align-items:center;color:var(--muted);cursor:pointer;margin-left:2px;outline:none;vertical-align:middle; }
/* Open DOWN-LEFT, right-aligned to the icon, so it never gets clipped at the screen edge
   (the icon sits near the right of the price line). Width capped to the viewport. */
/* Centered under the (i) icon (was right:-6px = right-aligned → the 236px bubble ran into the
   modal's LEFT edge and got clipped by the modal's overflow-x:hidden — looked cut-off/improvised,
   operator 2026-07-06). The icon sits mid-modal, so centering keeps it fully inside on every phone. */
.pro-tip-bubble { position:absolute;top:calc(100% + 9px);left:50%;right:auto;transform:translateX(-50%);
  width:236px;max-width:calc(100vw - 56px);
  background:var(--surface,#10160f);border:1px solid var(--glass-b);border-radius:10px;padding:11px 13px;
  font-size:.74rem;line-height:1.5;color:var(--text);text-align:left;font-weight:400;
  box-shadow:0 14px 38px rgba(0,0,0,.55);opacity:0;pointer-events:none;transition:opacity .15s;z-index:6; }
.pro-tip-bubble::after { content:"";position:absolute;bottom:100%;left:50%;margin-left:-6px;right:auto;
  border:6px solid transparent;border-bottom-color:var(--glass-b); }
.pro-tip:hover .pro-tip-bubble, .pro-tip:focus .pro-tip-bubble, .pro-tip:focus-within .pro-tip-bubble { opacity:1;pointer-events:auto; }
/* "Already have an account? Sign in" — returning-user link shown wherever we sell Pro
   (Go Pro / feature-gate modals, watchlist Pro card, screener lock). Secondary by design. */
.login-have-acct { margin-top:10px;font-size:.78rem; }
.fvc-pro-signin { margin-top:4px; }
.fvc-screen-signin { font-size:.78rem;color:rgba(var(--muted-rgb),.85);margin-top:9px; }
.login-have-acct a, .fvc-pro-signin a, .fvc-screen-signin a { color:var(--green);font-weight:600;text-decoration:none; }
.login-have-acct a:hover, .fvc-pro-signin a:hover, .fvc-screen-signin a:hover { text-decoration:underline; }
.login-price { font-size:1.05rem;font-weight:800;color:var(--green,#7BB290);margin:2px 0 16px;letter-spacing:-.01em; }
.login-price-intro { font-size:.62em;font-weight:600;color:var(--muted);letter-spacing:0; }
.login-intro-sub { margin-top:-12px;color:var(--muted); }
.login-mail-ico {
  width:46px;height:46px;margin:4px auto 14px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:1.3rem;
  background:rgba(123,178,144,.14);border:1px solid rgba(123,178,144,.35);color:var(--green,#7BB290);
}
/* Pro modal "Coming soon"-style tag centered */
.login-modal .fvc-pro-soon { display:inline-block; }

/* ── Pro account recovery (recovery-code modal, account hub, lost-access) ───── */
.fvc-rec, .fvc-acct { padding:10px 6px 4px; text-align:center; }
.fvc-rec-ic {
  width:48px;height:48px;margin:2px auto 12px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:1.4rem;
  background:rgba(123,178,144,.14);border:1px solid rgba(123,178,144,.35);
}
.fvc-rec .login-mail-ic {
  width:46px;height:46px;margin:4px auto 14px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;font-size:1.3rem;
  background:rgba(123,178,144,.14);border:1px solid rgba(123,178,144,.35);color:var(--green);
}
.fvc-rec-code {
  font-family:'Courier New',ui-monospace,monospace;font-size:1.18rem;font-weight:700;
  letter-spacing:.1em;color:var(--text);background:rgba(12,19,15,.72);
  border:1px dashed rgba(123,178,144,.5);border-radius:12px;
  padding:14px 10px;margin:6px 0 14px;user-select:all;word-break:break-all;
}
.fvc-rec-actions { display:flex;gap:10px;flex-wrap:wrap;justify-content:center;margin:14px 0 12px; }   /* 14px top gap to the divider of the row above (operator 2026-07-06) */
.fvc-rec-btn {
  flex:1 1 auto;min-width:140px;padding:11px 14px;border-radius:999px;cursor:pointer;
  background:rgba(var(--on-rgb),.06);color:var(--text);border:1px solid rgba(123,178,144,.4);
  font-family:inherit;font-size:.84rem;font-weight:700;transition:background .15s,border-color .15s;
}
.fvc-rec-btn:hover { background:rgba(123,178,144,.16);border-color:var(--green); }
.fvc-rec-btn.fvc-rec-danger { border-color:rgba(224,95,95,.45);color:#e96a6a; }
.fvc-rec-btn.fvc-rec-danger:hover { background:rgba(224,95,95,.12);border-color:#e96a6a; }
.fvc-rec-link { background:none;border:none;color:var(--muted);font:inherit;font-size:.8rem;cursor:pointer;text-decoration:underline;margin:2px auto 10px;display:inline-block; }
.fvc-rec-link:hover { color:var(--green); }
.fvc-rec-qrwrap { margin:6px auto 14px;display:flex;flex-direction:column;align-items:center;gap:8px; }
.fvc-rec-qr { width:200px;height:200px;max-width:62vw;background:#fff;border-radius:12px;padding:10px;box-sizing:content-box; }
.fvc-rec-qrcap { font-size:.74rem;color:var(--muted);line-height:1.5;max-width:300px;margin:0; }
.fvc-rec-warn {
  font-size:.76rem;line-height:1.55;color:#e0a16a;text-align:left;
  background:rgba(224,161,106,.1);border:1px solid rgba(224,161,106,.28);border-radius:10px;
  padding:10px 12px;margin:6px 0 14px;
}
.fvc-rec input[type="email"], .fvc-rec input[type="text"] {
  width:100%;box-sizing:border-box;background:rgba(12,19,15,.72);text-align:center;
  border:1px solid rgba(123,178,144,.35);border-radius:10px;
  padding:12px 14px;color:var(--text);font-size:16px;font-family:inherit;outline:none;margin-bottom:12px;
}
.fvc-rec input:focus { border-color:var(--green);box-shadow:0 0 0 3px rgba(123,178,144,.18); }
/* account hub */
.fvc-acct { text-align:left; }
.fvc-acct .login-title { text-align:center;display:block; }
.fvc-acct-row { display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 0;border-bottom:1px solid var(--glass-b); }
.fvc-acct-k { font-size:.72rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em; }
.fvc-acct-v { font-size:.92rem;color:var(--text);font-weight:600;word-break:break-all; }
.fvc-acct-plan { font-size:.72rem;font-weight:700;color:var(--green);background:var(--green-d);border:1px solid var(--green-b);border-radius:999px;padding:4px 10px;white-space:nowrap; }
.fvc-acct .login-btn { margin-top:14px; }
.fvc-acct-sep { height:1px;background:var(--glass-b);margin:18px 0 14px; }
.fvc-acct-h { font-size:.95rem;font-weight:800;color:var(--text); }
.fvc-rec-status.fvc-rec-active  { color:var(--green); }
.fvc-rec-status.fvc-rec-used    { color:var(--muted); }
.fvc-rec-status.fvc-rec-revoked { color:#e0a16a; }
.fvc-rec-status.fvc-rec-none    { color:#e96a6a; }

/* ── Sign-out confirmation dialog ── */
.logout-confirm-ic {
  width:46px;height:46px;margin:4px auto 14px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:rgba(123,178,144,.14);border:1px solid rgba(123,178,144,.35);color:var(--green,#7BB290);
}
.logout-confirm-ic svg { width:22px;height:22px; }
.logout-confirm-actions { display:flex;gap:10px;margin-top:4px; }
.logout-confirm-actions .login-btn { flex:1 1 0;width:auto;margin:0; }
.logout-confirm-no {
  flex:1 1 0;box-sizing:border-box;padding:13px 16px;border-radius:999px;cursor:pointer;
  background:transparent;border:1px solid var(--glass-b,rgba(123,178,144,.3));color:var(--text);
  font-family:inherit;font-size:.92rem;font-weight:700;transition:background .15s,border-color .15s;
}
.logout-confirm-no:hover { background:rgba(var(--on-rgb),.05);border-color:rgba(123,178,144,.5); }

/* ── Fair-Value backtest popup (hero Evidence) ── */
.bt-modal { max-width:560px;padding-left:18px;padding-right:18px; }
.bt-modal .login-title { padding:0 36px;line-height:1.3; }   /* clear the ✕ top-right (A) */
.bt-chart { margin:14px 0 6px;border:1px solid rgba(var(--on-rgb),.08);border-radius:12px;background:rgba(10,16,13,.5);padding:8px 6px; }
.bt-legend { display:flex;gap:18px;justify-content:center;flex-wrap:wrap;font-size:.74rem;color:rgba(var(--muted-rgb),.92); }
.bt-legend i { display:inline-block;width:11px;height:11px;border-radius:3px;margin-right:6px;vertical-align:-1px; }
.bt-legend b { color:var(--text,var(--text));font-weight:800; }
.bt-headline { margin-top:12px;font-size:.92rem;font-weight:800;color:var(--text,var(--text)); }
.bt-headline b { color:#7BB290; }
.bt-result { margin:12px 0 0;font-size:.88rem;line-height:1.62;color:var(--text);text-align:left; }
.bt-result b { color:var(--text,var(--text)); }
.bt-research { margin-top:14px;border-top:1px solid rgba(var(--on-rgb),.08);padding-top:12px;text-align:left; }
.bt-research-h { font-size:.6rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:rgba(123,178,144,.85);margin-bottom:8px; }
.bt-facts { margin:0;padding-left:18px;display:flex;flex-direction:column;gap:7px; }
.bt-facts li { font-size:.86rem;line-height:1.6;color:var(--text); }
.bt-facts li b { color:var(--text,var(--text));font-weight:700; }
.bt-steps { margin:8px 0 0;padding-left:22px;display:flex;flex-direction:column;gap:7px;list-style:decimal; }
.bt-steps li { font-size:.86rem;line-height:1.6;color:var(--text);padding-left:3px; }
.bt-steps li b { font-weight:700; }
.bt-steps li::marker { color:var(--green);font-weight:800; }
.bt-take { margin-top:11px;font-size:.8rem;line-height:1.55;color:rgba(var(--muted-rgb),.95);background:rgba(123,178,144,.08);border:1px solid rgba(123,178,144,.22);border-radius:10px;padding:9px 11px; }

/* ── Extended Evidence & Historical Tests (appended below the backtest summary) ── */
.ev-ext { margin-top:22px;padding-top:18px;border-top:1px solid rgba(var(--on-rgb),.10);text-align:left; }
.ev-ext-kick { display:block;font-size:.64rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:#7BB290; }
.ev-ext-intro { margin:9px 0 0;font-size:.86rem;line-height:1.62;color:var(--text); }
.ev-ext-intro b { color:rgba(var(--muted-rgb),.9); }
/* eBook download panel inside the Evidence popup (read online / PDF / EPUB) */
.ev-ebook { display:flex;align-items:flex-start;gap:12px;margin:14px 0 2px;padding:13px 14px;border-radius:12px;
  border:1px solid rgba(123,178,144,.4);background:linear-gradient(160deg,rgba(123,178,144,.16),rgba(123,178,144,.06)); }
.ev-ebook-ic { flex:0 0 auto;width:38px;height:38px;margin-top:2px;display:flex;align-items:center;justify-content:center;border-radius:10px;
  background:rgba(123,178,144,.2);border:1px solid rgba(123,178,144,.4);color:#8FE3B0; }
.ev-ebook-ic svg { width:20px;height:20px; }
.ev-ebook-tx { flex:1;min-width:0;display:flex;flex-direction:column;gap:4px;line-height:1.35; }
.ev-ebook-tx b { font-size:.86rem;color:var(--text,var(--text));font-weight:800; }
.ev-ebook-tx > span { font-size:.7rem;color:rgba(var(--muted-rgb),.6); }
.ev-ebook-fmts { display:flex;flex-wrap:wrap;gap:7px;margin-top:5px; }
.ev-ebook-fmts a { font-size:.7rem;font-weight:800;text-decoration:none;color:#8FE3B0;white-space:nowrap;
  border:1px solid rgba(123,178,144,.4);background:rgba(123,178,144,.12);border-radius:999px;padding:4px 11px; }
.ev-ebook-fmts a:hover { background:rgba(123,178,144,.24);border-color:rgba(123,178,144,.6); }

/* Stat cards — always-visible key findings */
.ev-stats { display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:14px 0 4px; }
.ev-stat { background:linear-gradient(160deg,rgba(123,178,144,.12),rgba(123,178,144,.04));
  border:1px solid rgba(123,178,144,.24);border-radius:12px;padding:11px 12px; }
.ev-stat b { display:block;font-size:1.3rem;font-weight:800;color:#8FE3B0;line-height:1.05;letter-spacing:-.01em; }
.ev-stat b small { font-size:.62rem;font-weight:700;color:rgba(143,227,176,.7); }
.ev-stat span { display:block;margin-top:4px;font-size:.68rem;line-height:1.4;color:rgba(var(--muted-rgb),.85); }
.ev-stat span b { display:inline;font-size:inherit;color:rgba(var(--muted-rgb),.9); }

/* Accordions (native <details>) */
.ev-acc { border:1px solid rgba(var(--on-rgb),.10);border-radius:12px;background:rgba(10,16,13,.4);margin-top:13px;overflow:hidden; }
.ev-acc > summary { list-style:none;cursor:pointer;display:flex;align-items:center;justify-content:space-between;
  gap:10px;padding:12px 14px;font-size:.84rem;font-weight:700;color:var(--text,var(--text));user-select:none; }
.ev-acc > summary::-webkit-details-marker { display:none; }
.ev-acc > summary:hover { background:rgba(123,178,144,.06); }
.ev-acc[open] > summary { border-bottom:1px solid rgba(var(--on-rgb),.08);background:rgba(123,178,144,.05); }
.ev-acc .ev-chev { width:16px;height:16px;flex:0 0 auto;fill:none;stroke:#7BB290;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;transition:transform .2s; }
.ev-acc[open] .ev-chev { transform:rotate(180deg); }
.ev-acc-risk { border-color:rgba(224,150,90,.3); }
.ev-acc-body { padding:14px 16px 18px; }
.ev-acc-body p { margin:0 0 12px;font-size:.86rem;line-height:1.68;color:var(--text); }
.ev-acc-body p:last-child { margin-bottom:0; }
.ev-acc-body b { color:var(--text,var(--text));font-weight:700; }
.ev-note { font-size:.7rem !important;font-style:italic;color:rgba(var(--muted-rgb),.66) !important; }
.ev-tcap { font-size:.72rem !important;font-weight:700;color:rgba(123,178,144,.85) !important;margin-top:4px !important; }

/* Figures / charts — responsive, never overflow */
.ev-fig { margin:20px 0;text-align:center; }
.ev-fig img { display:block;width:100%;max-width:100%;height:auto;border-radius:10px;
  border:1px solid rgba(var(--on-rgb),.1);background:#0c120f; }
.ev-fig figcaption { margin-top:10px;font-size:.74rem;line-height:1.5;color:rgba(var(--muted-rgb),.95);font-style:italic; }
.ev-grid2 { display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:4px; }
.ev-grid2 .ev-fig { margin:0; }
/* Native SVG charts (replace the old raster charts) */
.ev-svg { display:block;width:100%;height:auto;border:1px solid rgba(var(--on-rgb),.1);border-radius:10px;
  background:linear-gradient(160deg,rgba(18,26,21,.55),rgba(10,16,13,.65)); }
.ev-legend2 { display:flex;gap:16px;margin:8px 0 12px;font-size:.66rem;color:rgba(var(--muted-rgb),.88); }
.ev-legend2 span { display:inline-flex;align-items:center;gap:6px; }
.ev-legend2 i { width:16px;height:0;display:inline-block;vertical-align:middle; }
.ev-li-solid { border-top:2.4px solid #7BB290; }
.ev-li-dash { border-top:1.8px dashed rgba(143,227,176,.7); }

/* Tables — premium dark, horizontally scrollable on small screens */
.ev-table-wrap { margin:8px 0 4px;overflow-x:auto;-webkit-overflow-scrolling:touch;
  border:1px solid rgba(var(--on-rgb),.1);border-radius:10px; }
.ev-table-wrap:focus-visible { outline:2px solid rgba(123,178,144,.5);outline-offset:1px; }
.ev-table { width:100%;border-collapse:collapse;font-size:.76rem;min-width:300px; }
.ev-table th, .ev-table td { padding:8px 12px;text-align:left;border-bottom:1px solid rgba(var(--on-rgb),.07);white-space:nowrap; }
.ev-table thead th { position:sticky;top:0;background:#13201a;color:rgba(123,178,144,.9);
  font-size:.62rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;z-index:1; }
.ev-table tbody tr:last-child td { border-bottom:none; }
.ev-table tbody tr:nth-child(even) td { background:rgba(var(--on-rgb),.018); }
.ev-table td b { color:#8FE3B0; }
.ev-table td:first-child { color:rgba(var(--muted-rgb),.78); }

/* References — academic hanging-indent list */
.ev-refs-h { margin:12px 0 7px;font-size:.66rem;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:rgba(123,178,144,.85); }
/* APA-style hanging-indent bibliography (author–year in-text → alphabetical list) */
.ev-refs { margin:0;padding:0;list-style:none; }
.ev-refs li { padding:0 0 8px 1.6em;text-indent:-1.6em;font-size:.7rem;line-height:1.5;color:rgba(var(--muted-rgb),.62); }
.ev-refs li i { color:rgba(var(--muted-rgb),.78);font-style:italic; }

/* Limits & risks */
.ev-risk { margin:0;padding-left:18px;display:flex;flex-direction:column;gap:7px; }
.ev-risk li { font-size:.76rem;line-height:1.5;color:rgba(var(--muted-rgb),.72); }
.ev-risk li b { color:var(--text,var(--text)); }

/* Back to top */
.ev-top { display:inline-block;margin:14px 0 4px;font-size:.72rem;font-weight:700;color:#7BB290;text-decoration:none; }
.ev-top:hover { text-decoration:underline; }

@media (max-width:560px) {
  .ev-stats { grid-template-columns:1fr; }
  .ev-grid2 { grid-template-columns:1fr; }
  .ev-stat b { font-size:1.2rem; }
}

/* ── Toast ── */
.fvc-toast {
  position:fixed;left:50%;bottom:24px;transform:translate(-50%,20px);
  background:rgba(12,19,15,.97);border:1px solid rgba(123,178,144,.32);color:var(--text,var(--text));
  padding:12px 16px;border-radius:14px;font-size:.82rem;font-weight:500;line-height:1.45;
  box-shadow:0 14px 38px rgba(0,0,0,.5);z-index:9999;opacity:0;pointer-events:none;
  transition:opacity .2s,transform .2s;max-width:min(380px,90vw);text-align:left;
}
.fvc-toast.show { opacity:1;transform:translate(-50%,0); }
/* On phones the sticky watchlist bar sits at the bottom — lift the toast above it
   so the "signed in" badge never covers the bar. */
@media (max-width:768px) {
  .fvc-toast { bottom: calc(94px + env(safe-area-inset-bottom, 0px)); }
}

/* ── Pro lock affordance (for any [data-pro-lock] element) ── */
[data-pro-lock] { position:relative; }
[data-pro-lock]:not(.pro-unlocked) { opacity:.55;filter:grayscale(.3); }
.pro-lock-badge {
  display:inline-flex;align-items:center;gap:5px;font-size:.62rem;font-weight:800;
  letter-spacing:.04em;color:var(--green);background:rgba(123,178,144,.14);
  border:1px solid rgba(123,178,144,.34);border-radius:999px;padding:3px 9px;
}

@media (max-width:480px) {
  .sm-secondary-row { gap:5px; }
  .fvc-pro-feats { grid-template-columns:1fr; }
}
@media (max-width:560px) {
  .hdr-pro-btn .hdr-pro-full { display:none; }   /* "Pro $9.90" on phones */
}

/* ── Async pagination (below the stock list) ── */
.fvc-pagination { display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;margin:26px 0 8px; }
.fvc-pagination:empty { display:none; }
.fvc-page-btn {
  min-width:38px;height:38px;padding:0 12px;border-radius:10px;cursor:pointer;font-family:inherit;
  font-size:.82rem;font-weight:700;color:var(--text,var(--text));
  background:rgba(var(--on-rgb),.05);border:1px solid var(--glass-b,rgba(var(--on-rgb),.12));
  transition:background .15s,border-color .15s,transform .12s;
}
.fvc-page-btn:hover:not(.active):not(.dis) { background:rgba(123,178,144,.14);border-color:rgba(123,178,144,.4);transform:translateY(-1px); }
.fvc-page-btn.active { background:var(--green);border-color:var(--green);color:#0e1512;cursor:default; }
.fvc-page-btn.dis { opacity:.4;cursor:default; }
.fvc-page-gap { color:var(--dim);padding:0 4px; }
@media (max-width:560px){
  .fvc-page-btn { min-width:34px;height:34px;padding:0 9px;font-size:.78rem; }
}

/* ── Methodology prose + AI summary ── */
.mt-ai-summary {
  display:flex;flex-direction:column;gap:6px;
  background:rgba(123,178,144,.07);border:1px solid rgba(123,178,144,.26);
  border-left:3px solid var(--green);border-radius:12px;
  padding:13px 16px;margin-bottom:18px;
}
.mt-ai-tag {
  font-size:.6rem;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--green);
}
.mt-ai-summary p { margin:0;font-size:.82rem;line-height:1.55;color:var(--text); }
.mt-prose { margin:0 0 6px; }
.mt-prose p { margin:0 0 10px;font-size:.83rem;line-height:1.62;color:var(--muted); }
.mt-prose p strong { color:var(--text);font-weight:700; }
.mt-h {
  font-size:.74rem;font-weight:800;letter-spacing:.06em;text-transform:uppercase;
  color:var(--text);margin:20px 0 9px;
}

/* ── FAQ accordion ── */
.fvc-faq-section { }
.fvc-faq-title { font-size:1.05rem;font-weight:800;color:var(--text);margin:0 0 14px;letter-spacing:-.01em; }
.fvc-faq { display:flex;flex-direction:column;gap:8px; }
.faq-item {
  background:rgba(var(--on-rgb),.025);border:1px solid var(--glass-b,rgba(var(--on-rgb),.1));
  border-radius:12px;overflow:hidden;transition:border-color .15s,background .15s;
}
.faq-item[open] { border-color:rgba(123,178,144,.3);background:rgba(123,178,144,.04); }
.faq-item > summary {
  list-style:none;cursor:pointer;padding:14px 16px;
  font-size:.86rem;font-weight:700;color:var(--text);
  display:flex;align-items:center;justify-content:space-between;gap:12px;
}
.faq-item > summary::-webkit-details-marker { display:none; }
.faq-item > summary::after {
  content:'+';flex:0 0 auto;color:var(--green);font-size:1.1rem;font-weight:800;line-height:1;
  transition:transform .2s;
}
.faq-item[open] > summary::after { content:'−'; }
.faq-item > summary:hover { color:var(--green); }
.faq-a { padding:0 16px 15px; }
.faq-a p { margin:0;font-size:.82rem;line-height:1.62;color:var(--muted); }

@media (max-width:560px) {
  .mt-prose p, .mt-ai-summary p, .faq-a p { font-size:.8rem; }
  .faq-item > summary { font-size:.82rem;padding:13px 14px; }
}

/* ── Watchlist ── */

.hdr-wl-btn { position:relative; }
/* Pulse the header Watchlist button when a stock is added → "it landed up there" */
@keyframes fvcWlPulse {
  0%   { transform:scale(1);    box-shadow:0 0 0 0 rgba(123,178,144,0); }
  28%  { transform:scale(1.14); box-shadow:0 0 0 4px rgba(123,178,144,.40), 0 0 16px 3px rgba(123,178,144,.55); }
  100% { transform:scale(1);    box-shadow:0 0 0 0 rgba(123,178,144,0); }
}
.hdr-wl-btn.fvc-wl-pulse {
  animation:fvcWlPulse .9s ease-out;
  border-color:var(--green) !important; color:var(--green);
}
.hdr-wl-btn.fvc-wl-pulse .wl-count-badge { animation:fvcWlPulse .9s ease-out; }
@media (prefers-reduced-motion: reduce) {
  .hdr-wl-btn.fvc-wl-pulse { animation:none; box-shadow:0 0 0 3px rgba(123,178,144,.45); transition:box-shadow .2s; }
  .hdr-wl-btn.fvc-wl-pulse .wl-count-badge { animation:none; }
}

/* ── Sticky watchlist bar (ALL widths since 2026-07-06 — operator: on desktop the
   watchlist was nearly undiscoverable; the top-right star stays as second entry) ── */
/* While the Filters drawer OR the Search Wizard is open the sticky bar must not
   cover their footer button (operator: wizard footer button was covered). */
body.fvc-filters-open .fvc-wl-bar,
body.fvc-valyra-open .fvc-wl-bar { display:none !important; }
/* Reserve the bar's FULL height incl. the iPhone home-indicator safe area — a flat
   70px left ~24px of content (e.g. the Search Wizard button) clipped under the bar
   on notched phones, because the bar itself adds env(safe-area-inset-bottom).
   Scoped via :has — style.css is shared and only index.php renders the bar. */
body:has(.fvc-wl-bar) { padding-bottom: calc(80px + env(safe-area-inset-bottom, 0px)); }
.fvc-wl-bar {
  display:flex; align-items:center; gap:11px;
  position:fixed; left:0; right:0; bottom:0; z-index:120; width:100%;
  /* Follow the retractable mobile browser toolbar (operator report 2026-08-04: on iPhone
     Chrome the bar stayed ~90px up and page content showed BELOW it once the toolbar hid).
     `bottom:100%` resolves against the LAYOUT viewport, `100dvh` is the DYNAMIC visible
     height: while the toolbar is shown they are equal (→ 0, unchanged), and when it
     retracts dvh grows, so bottom goes negative by exactly that amount and the bar rides
     down to the real bottom edge. CSS-only on purpose: the browser animates it in step with
     its own toolbar, and JS updates to fixed elements are frozen during iOS momentum scroll.
     Browsers without dvh simply drop this line and keep the plain bottom:0 above. */
  bottom: calc(100% - 100dvh);
  padding:10px 16px calc(10px + env(safe-area-inset-bottom, 0px));
  border:0; border-top:1px solid rgba(123,178,144,.30);
  /* fully solid, NO backdrop-filter: the blur on this fixed bar re-composited every frame
     while the feed scrolled → scroll jank on Chrome. Near-solid alpha let content
     ghost through the bar while scrolling → same colour, alpha 1.0. */
  background:rgb(12,18,14);
  box-shadow:0 -6px 24px rgba(0,0,0,.45);
  font-family:inherit; text-align:left; cursor:pointer;
  transition:box-shadow .25s, background .25s;
}
/* desktop: align the bar's content with the page column instead of spanning edge to edge */
@media (min-width:769px) {
  .fvc-wl-bar { padding-left:max(24px, calc((100vw - 1240px) / 2)); padding-right:max(24px, calc((100vw - 1240px) / 2)); }
}
.fvc-wlb-star { position:relative; flex:0 0 auto; display:inline-flex; margin-right:6px; color:rgba(var(--muted-rgb),.55); }
.fvc-wl-bar.has-items .fvc-wlb-star { color:var(--green,#7BB290); }
.fvc-wlb-count {
  position:absolute; top:-7px; right:-9px; min-width:17px; height:17px; padding:0 4px;
  border-radius:999px; background:var(--green,#7BB290); color:#0c120e;
  font-size:.62rem; font-weight:800; line-height:17px; text-align:center;
}
.fvc-wlb-main { flex:1 1 auto; min-width:0; display:flex; flex-direction:column; gap:1px; }
.fvc-wlb-title { font-size:.86rem; font-weight:800; color:var(--text,var(--text)); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fvc-wlb-rec { font-size:.72rem; color:rgba(var(--muted-rgb),.62); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.fvc-wlb-score {
  flex:0 0 auto; min-width:44px; text-align:center; padding:5px 9px; border-radius:10px;
  font-size:.95rem; font-weight:800; font-variant-numeric:tabular-nums;
  background:rgba(123,178,144,.16); color:var(--green,#7BB290);
}
.fvc-wlb-score.grade-A, .fvc-wlb-score.grade-B { background:rgba(123,178,144,.16); color:var(--green,#7BB290); }
.fvc-wlb-score.grade-C { background:rgba(230,180,90,.16); color:#e6b45a; }
.fvc-wlb-score.grade-D { background:rgba(224,138,138,.16); color:#e08a8a; }
.fvc-wl-bar.fvc-wlb-glow { animation:fvcWlBarGlow 1s ease-out; }
.fvc-wl-bar.fvc-wlb-glow .fvc-wlb-star { animation:fvcWlPulse 1s ease-out; }
@keyframes fvcWlBarGlow {
  0%   { box-shadow:0 -6px 24px rgba(0,0,0,.45); background:rgba(12,18,14,.96); }
  25%  { box-shadow:0 -2px 32px 5px rgba(123,178,144,.6); background:rgba(24,42,31,.98); }
  100% { box-shadow:0 -6px 24px rgba(0,0,0,.45); background:rgba(12,18,14,.96); }
}
@media (prefers-reduced-motion: reduce) {
  .fvc-wl-bar.fvc-wlb-glow { animation:none; box-shadow:0 -2px 0 2px rgba(123,178,144,.5); }
}
.wl-count-badge {
  display:inline-flex;align-items:center;justify-content:center;
  min-width:16px;height:16px;border-radius:var(--r-pill);
  background:var(--green);color:#0a1a10;
  font-size:.58rem;font-weight:700;padding:0 4px;
  position:absolute;top:-5px;right:-6px;
}

/* Star button on cards */
.wl-btn {
  padding:0 12px;font-size:.77rem;min-width:78px;white-space:nowrap;font-weight:600;
  color:var(--text);background:rgba(var(--on-rgb),.08);border:1px solid rgba(var(--on-rgb),.22);
  border-radius:var(--r-sm);cursor:pointer;font-family:inherit;
  transition:all .17s;
}
.wl-btn:hover { color:var(--text);background:rgba(var(--on-rgb),.14);border-color:rgba(var(--on-rgb),.34);transform:translateY(-1px); }
.wl-btn.wl-active {
  color:#0a1a10;background:var(--green);font-weight:700;
  border:1px solid var(--green);
}
.wl-btn.wl-active:hover { background:var(--green2); }

/* Empty state */
.wl-empty-state { text-align:center;padding:40px 24px 26px; }

/* ── Inline "add a stock" search in the watchlist (#portfolio-merge 2026-07-07) ── */
.wl-addrow { position:relative; margin:10px 16px 12px; text-align:left; }
.wl-empty-state .wl-addrow { max-width:430px; margin:16px auto 6px; }
.wl-addinput {
  width:100%;box-sizing:border-box;padding:11px 13px;border-radius:11px;
  border:1px solid var(--glass-b);background:rgba(var(--on-rgb),.04);color:var(--text);
  font-size:16px;font-family:inherit;   /* 16px stops iOS focus-zoom (which traps the sheet swipe) */
}
.wl-addinput:focus { outline:none;border-color:var(--green); }
.wl-addsug {
  position:absolute;left:0;right:0;top:48px;z-index:30;background:var(--bg);
  border:1px solid var(--glass-b);border-radius:11px;max-height:260px;overflow:auto;
  box-shadow:0 12px 34px rgba(0,0,0,.42);display:none;
}
.wl-addsug.open { display:block; }
.wl-sugrow { display:flex;align-items:center;gap:8px;padding:9px 12px;cursor:pointer;border-bottom:1px solid rgba(var(--on-rgb),.05); }
.wl-sugrow:last-child { border-bottom:0; }
.wl-sugrow:hover { background:rgba(123,178,144,.12); }
.wl-sugnm { flex:1;min-width:0;font-size:.9rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.wl-sugtk { font-size:.78rem;color:var(--dim);white-space:nowrap; }
.wl-empty-icon  { font-size:2.8rem;margin-bottom:14px;opacity:.35; }
/* The "+" is a real button now (#1): tapping it browses stocks. Strip the button
   chrome but keep the glyph look; lift opacity + nudge on hover so it reads tappable. */
.wl-empty-cta   { display:inline-block;background:none;border:0;padding:0;line-height:1;color:inherit;cursor:pointer;transition:opacity .15s ease,transform .15s ease; }
.wl-empty-cta:hover,.wl-empty-cta:focus-visible { opacity:.75;transform:translateY(-2px);outline:none; }
.wl-empty-title { font-size:1.05rem;font-weight:600;margin-bottom:8px; }
.wl-empty-sub   { font-size:.8rem;color:var(--dim);line-height:1.75; }
/* Starter-Watchlist (2026-08-01): der Ein-Klick ist die Hauptaktion des Empty-States,
   Durchstoebern wird zur Zweitaktion (Outline). */
.wl-empty-starter{ margin-top:20px;display:inline-block;background:var(--green);color:#0e1512;border:0;border-radius:var(--r-pill);padding:12px 24px;font-size:.88rem;font-weight:800;cursor:pointer;transition:transform .12s ease,box-shadow .18s ease; }
.wl-empty-starter:hover{ transform:translateY(-1px);box-shadow:0 6px 20px rgba(123,178,144,.32); }
.wl-empty-starter:disabled{ opacity:.6;cursor:default;transform:none;box-shadow:none; }
.wl-empty-starter-sub{ margin-top:7px;font-size:.74rem;color:var(--dim,#8a988f);line-height:1.4; }
.wl-empty-browse{ margin-top:12px;display:inline-block;background:transparent;color:var(--green);border:1px solid var(--green);border-radius:var(--r-pill);padding:10px 20px;font-size:.82rem;font-weight:700;cursor:pointer;transition:transform .12s ease,box-shadow .18s ease; }
.wl-empty-browse:hover{ transform:translateY(-1px);box-shadow:0 6px 20px rgba(123,178,144,.22); }

/* Signal summary row */
.wl-signal-summary {
  display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  padding:10px 0 14px;border-bottom:1px solid rgba(var(--on-rgb),.06);
  margin-bottom:12px;
}
.wl-sig-pill {
  display:inline-flex;align-items:center;gap:5px;
  padding:4px 11px;border-radius:var(--r-pill);
  font-size:.75rem;font-weight:500;border:1px solid;
}
.wl-sig-hold   { background:rgba(123,178,144,.12);border-color:rgba(123,178,144,.28);color:var(--green); }
.wl-sig-sell   { background:rgba(224,95,95,.10);border-color:rgba(224,95,95,.25);color:var(--red); }
.wl-sig-review { background:rgba(240,160,84,.10);border-color:rgba(240,160,84,.25);color:var(--amber); }
.wl-sig-rule-hint { font-size:.67rem;color:var(--dim);margin-left:4px; }
/* Watchlist toolbar: the Cards⇄Table toggle, top-left above the cards (operator 2026-07-08 —
   replaced the on-track/review pills + "based on…" hint). */
.wl-toolbar { display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap;padding:10px 0 12px; }
.wl-sig-pills { display:flex;align-items:center;gap:6px;flex-wrap:wrap; }   /* On-track / Review count pills, top-right */
.wl-tb-scroll { margin-bottom:10px; }
.wl-tb-scroll .fvc-tb thead th { position:static; }   /* non-sticky inside the modal scroller */
.wl-tb-act { width:32px;text-align:center;padding:4px 6px !important; }
.wl-tb-act .wl-act-remove { padding:5px 7px;min-height:0; }
/* Watchlist table verdict pill — On track (green) / Review (red-coded background) */
.wl-tb-verdict { white-space:nowrap; }
.wl-tb-vpill { display:inline-block;padding:3px 10px;border-radius:999px;font-size:.72rem;font-weight:700;white-space:nowrap; }
.wl-tb-vpill-ok { background:rgba(123,178,144,.16);color:var(--green); }
.wl-tb-vpill-review { background:rgba(224,95,95,.16);color:var(--red); }
/* iPhone-Breite (12 Pro 390 / 15 Pro Max 430): die Watchlist-TABELLE lief mit auto-Layout +
   white-space:nowrap — ein langer Firmenname (z.B. "MFE MEDIAFOREUROPE") drückte die Tabelle
   über den Viewport, sodass die letzte Spalte (der rote "−"-Entfernen-Button) rechts abgeschnitten
   wurde. table-layout:fixed pinnt Fair Value/Qualität/Status/Entfernen und lässt die UNTERNEHMENS-
   Spalte den Rest ellipsieren → der Button passt immer. Scoped auf .wl-tb (Feed-Tabelle unberührt). */
@media (max-width:480px) {
  table.fvc-tb.wl-tb { table-layout:fixed;width:100%; }
  /* Die Watchlist-Tabelle passt jetzt IMMER (fixed layout) → der Container braucht keinen
     Horizontal-Scroll mehr. overflow-x:clip statt auto entfernt den hellen Scroll-Indikator/Punkt,
     der sonst am rechten Rand neben dem "−" auftauchte. Scrollbar zusätzlich ausgeblendet. */
  .wl-tb-scroll { overflow-x:clip; }
  .wl-tb-scroll::-webkit-scrollbar { display:none; }
  .wl-tb-scroll { scrollbar-width:none; }
  .wl-tb thead th, .wl-tb tbody td { padding-left:7px;padding-right:7px; }
  .wl-tb thead th:nth-child(2) { width:82px; }    /* Fair Value */
  .wl-tb thead th:nth-child(3) { width:40px; }    /* Qualität   */
  .wl-tb thead th:nth-child(4) { width:82px; }    /* Status     */
  .wl-tb thead th:nth-child(5) { width:42px; }    /* Entfernen − : breit genug, dass der 28px-Button
                                                     GANZ hineinpasst — sonst schnitt overflow:hidden
                                                     seinen hellen Rand an → weißer Punkt am rechten Rand. */
  .wl-tb td.fvc-tb-fv { overflow:hidden;text-overflow:ellipsis; }   /* langer FV kann seine Spalte nicht sprengen */
  .wl-tb td.wl-tb-act { width:42px;padding-left:4px !important;padding-right:6px !important;overflow:visible; }
  .wl-tb .wl-tb-vpill { padding:3px 8px;font-size:.68rem; }
}

/* Watchlist stock rows */
.wl-item {
  background:rgba(var(--on-rgb),.025);border:1px solid rgba(var(--on-rgb),.07);
  border-radius:var(--r-sm);padding:13px 14px 10px;margin-bottom:10px;
  transition:border-color .18s;
}
.wl-item:hover { border-color:rgba(var(--on-rgb),.13); }
.wl-item.wl-item-pending { opacity:.82; }
.wl-item.wl-item-pending .wl-item-top { align-items:center; }
.wl-item.wl-item-hold {
  background:rgba(123,178,144,.04);border-color:rgba(123,178,144,.14);
}
.wl-item.wl-item-hold:hover { border-color:rgba(123,178,144,.28); }
.wl-item.wl-item-sell {
  background:rgba(224,95,95,.04);border-color:rgba(224,95,95,.14);
}
.wl-item.wl-item-sell:hover { border-color:rgba(224,95,95,.28); }

.wl-item-top {
  display:flex;align-items:flex-start;justify-content:space-between;gap:8px;margin-bottom:6px;flex-wrap:nowrap;
}
.wl-item-identity {
  display:flex;align-items:center;gap:6px;flex:1;min-width:0;flex-wrap:wrap;
}
.wl-item-emoji  { font-size:1.1rem;flex-shrink:0;line-height:1; }
.wl-item-ticker { font-size:.9rem;font-weight:700;color:var(--green);flex-shrink:0; }
.wl-item-exch   { font-size:.63rem;color:var(--dim);flex-shrink:0; }
.wl-item-co     {
  font-size:.74rem;color:var(--muted);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:180px;
}
.wl-item-signal {
  position:relative;display:inline-flex;align-items:center;justify-content:center;
  padding:6px 26px;border-radius:var(--r-pill);min-width:80px;
  font-size:.92rem;font-weight:800;letter-spacing:.02em;flex-shrink:0;
  border:1px solid currentColor;
}
.wl-item-signal strong { font-weight:800; }
/* the (i) help sits in the right padding so the signal word stays centred in the badge */
.wl-item-signal .sec-help { position:absolute;right:8px;top:50%;transform:translateY(-50%); }
.wl-sig-rule-badge { font-size:.6rem;opacity:.65; }
.wl-remove-btn {
  background:none;border:none;color:var(--dim);cursor:pointer;
  font-size:.78rem;padding:2px 6px;border-radius:4px;
  flex-shrink:0;transition:color .14s;
}
.wl-remove-btn:hover { color:var(--red); }

.wl-item-reason {
  font-size:.72rem;color:var(--dim);margin-bottom:9px;padding-left:2px;
  line-height:1.55;
}
.wl-item-metrics {
  display:flex;flex-wrap:wrap;gap:10px 20px;margin-bottom:7px;
  align-items:flex-start;
}
.wl-met { position:relative; }
.wl-met-lbl {
  font-size:.57rem;color:var(--dim);text-transform:uppercase;letter-spacing:.06em;margin-bottom:2px;
}
.wl-met-val { font-size:.82rem;font-weight:600;font-variant-numeric:tabular-nums; }
.wl-met-ma .wl-met-val { font-size:.72rem; }
.wl-item-footer { display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:.62rem;color:rgba(232,240,235,.2);margin-top:8px; }
.wl-foot-txt { min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.wl-foot-acts { flex:1 1 auto;display:flex;gap:6px;justify-content:flex-end; }
.wl-act-btn {
  display:inline-flex;align-items:center;gap:5px;font-family:inherit;cursor:pointer;
  font-size:.72rem;font-weight:700;padding:6px 12px;border-radius:999px;touch-action:manipulation;
  border:1px solid rgba(123,178,144,.34);background:rgba(123,178,144,.10);color:var(--green,#7BB290);
  transition:background .15s,border-color .15s;
}
.wl-act-btn:hover { background:rgba(123,178,144,.2);border-color:rgba(123,178,144,.5); }
.wl-act-share { border-color:rgba(100,160,240,.34);background:rgba(100,160,240,.10);color:#7fb0f0; }
.wl-act-share:hover { background:rgba(100,160,240,.2);border-color:rgba(100,160,240,.5); }
.wl-act-remove { border-color:rgba(224,138,138,.34);background:rgba(224,138,138,.10);color:#e08a8a; }
.wl-act-remove:hover { background:rgba(224,138,138,.2);border-color:rgba(224,138,138,.55); }

/* Diversification panel */
/* Modern-SaaS card — same gradient treatment as the Market Valuation card below it
   (operator: the panel was flat "green on green"); the green bars now pop against the
   neutral dark gradient instead of disappearing into a green tint. */
.wl-div-panel {
  border-radius:16px;padding:16px 18px;margin-top:16px;
  background:radial-gradient(120% 130% at 90% 0%, rgba(123,178,144,.10), transparent 60%), linear-gradient(160deg, rgba(20,30,24,.7), rgba(10,16,13,.6));
}
/* Sector-allocation donut panel (between Diversification and Market Valuation) — same shell. */
.wl-sec-panel {
  border-radius:16px;padding:16px 18px;margin-top:16px;
  background:radial-gradient(120% 130% at 90% 0%, rgba(123,178,144,.10), transparent 60%), linear-gradient(160deg, rgba(20,30,24,.7), rgba(10,16,13,.6));
}

/* Weltkarte im Watchlist-Panel (Betreiber 2026-07-30): sitzt unter dem Laender-Donut, weil es
   dieselbe Frage ist. Die Karte selbst bringt ihr Aussehen mit (assets/fvc-valuation-map.js),
   hier steht nur die Einbettung. */
.wl-vmap{margin:14px 0 0}
.wl-vmap-open{width:100%;background:rgba(123,178,144,.1);border:1px solid rgba(123,178,144,.3);
  color:var(--green,#7BB290);border-radius:11px;padding:10px 14px;font-weight:700;font-size:.86rem;cursor:pointer}
.wl-vmap-open:hover{background:rgba(123,178,144,.18)}
.wl-vmap-load{padding:20px 12px;text-align:center;color:var(--dim,#8a988f);font-size:.85rem}
.wl-vmap-note{font-size:.76rem;line-height:1.5;color:var(--dim,#8a988f);margin:8px 0 0}
.wl-vmap-teaser{margin-top:12px;filter:none;opacity:1}
.pro-teaser .wl-vmap-teaser{border-top:1px solid rgba(123,178,144,.18);padding-top:12px}
.wl-sec-wrap { display:flex; align-items:center; gap:18px; margin-top:12px; flex-wrap:wrap; }
.wl-sec-donut { position:relative; flex:0 0 auto; width:112px; height:112px; }
/* Thinner ring (hole 88px, was 74px) → a lighter, more modern donut instead of a chunky solid ring
   (operator 2026-07-08). The wider hole also gives the centre type more room (no clipping). */
.wl-sec-donut::before { content:""; position:absolute; inset:0; border-radius:50%; background:var(--wlg);
  -webkit-mask:radial-gradient(circle 46px at 50% 50%, #0000 0 44px, #000 46px);
          mask:radial-gradient(circle 46px at 50% 50%, #0000 0 44px, #000 46px); }
.wl-sec-ctr { position:absolute; inset:0; display:flex; flex-direction:column; align-items:center; justify-content:center; pointer-events:none; }
.wl-sec-ctr b { font-size:23px; font-weight:800; color:var(--text); line-height:1; }
.wl-sec-ctr span { font-size:10px; font-weight:600; letter-spacing:.08em; text-transform:uppercase; color:var(--dim); margin-top:3px; white-space:nowrap; }
.wl-sec-legend { list-style:none; margin:0; padding:0; flex:1 1 150px; min-width:150px; display:flex; flex-direction:column; gap:7px; }
/* Match the Diversifikations-Manager score bars right above it (.div-brk-lbl/.div-brk-pts = .72rem,
   weight 600) so the two adjacent panels read as one scale — the .82/700 legend looked oversized on
   the right (operator 2026-07-08). */
.wl-sec-legend li { display:flex; align-items:center; gap:9px; font-size:.72rem; }
.wl-sec-dot { width:11px; height:11px; border-radius:3px; flex:0 0 auto; }
.wl-sec-nm { flex:1; min-width:0; color:var(--muted); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.wl-sec-pc { color:var(--text); font-weight:600; font-variant-numeric:tabular-nums; }
/* Allocation verdict = the SAME boxed, colour-coded statement as the Diversifikation verdict
   (.wl-div-tip/.wl-div-done): a green box when nicely spread, an amber box when concentrated — so
   the two statement boxes read identically, only colour-coded (operator 2026-07-08). */
.wl-sec-note {
  margin-top:16px; padding:10px 12px; border-radius:10px; font-size:.8rem; line-height:1.45; font-weight:600;
  color:var(--green,#7BB290); background:rgba(123,178,144,.08); border:1px solid rgba(123,178,144,.22);
}
.wl-sec-note.wl-sec-warn, .mv-sec-note.mv-warn {
  margin-top:16px; padding:10px 12px; border-radius:10px; font-size:.8rem; line-height:1.45; font-weight:600;
  color:var(--amber,#e0a86a); background:rgba(224,168,106,.09); border:1px solid rgba(224,168,106,.30);
}
/* Allocation merged into the Pro diversification card: sits under the diversification verdict with
   a subtle divider + extra breathing room above (operator 2026-07-08). */
.wl-div-alloc { margin-top:20px; padding-top:16px; border-top:1px solid rgba(var(--on-rgb),.08); }
.wl-div-alloc .wl-alloc-tabs { margin-top:0; }
/* "Most correlated pairs" → cap + pill badges (was a verbose list). */
.wl-corr-cap { margin-top:18px; font-size:.6rem; font-weight:800; letter-spacing:.07em; text-transform:uppercase; color:rgba(var(--muted-rgb),.5); }
.wl-corr-badges { display:flex; flex-wrap:wrap; gap:6px; margin-top:14px; }   /* spacing when it's the Correlation tab view */
.wl-corr-badge { font-size:.72rem; padding:4px 10px; border-radius:999px; white-space:normal;
  max-width:100%; line-height:1.5;   /* full company names (not tickers) may wrap inside the pill */
  color:var(--muted); background:rgba(var(--on-rgb),.05); border:1px solid var(--fvc-border,rgba(var(--on-rgb),.14)); }
.wl-corr-badge b { white-space:nowrap; }
.wl-corr-badge b { color:var(--amber,#e0a86a); font-weight:700; margin-left:3px; font-variant-numeric:tabular-nums; }
/* Allocation view switch (Sectors / Countries / Market cap) — pill tabs above the donut. */
.wl-alloc-tabs { display:flex; gap:6px; margin-top:12px; flex-wrap:wrap; }
/* font-family MUST be its own declaration — `font:600 .8rem/1 inherit` is INVALID (a CSS-wide
   keyword can't be the family inside the `font` shorthand), so the whole declaration was dropped
   and the button fell back to a monospace UA default → the Aufteilung tabs looked different from
   every other watchlist Pro tool (operator 2026-07-08). */
.wl-alloc-tab { appearance:none; -webkit-appearance:none; cursor:pointer; font-family:inherit; font-weight:600; font-size:.8rem; line-height:1; padding:7px 13px;
  border-radius:999px; color:var(--muted); background:rgba(255,255,255,.04);
  border:1px solid var(--fvc-border,rgba(255,255,255,.1)); transition:background .15s, color .15s, border-color .15s; }
.wl-alloc-tab:hover { color:var(--text); }
.wl-alloc-tab.active { color:var(--text); background:rgba(123,178,144,.16); border-color:rgba(123,178,144,.5); }
.wl-alloc-view { display:none; }
.wl-alloc-view.active { display:block; }
/* Section title styled exactly like the "Market Valuation" heading (bright, title-case). */
.wl-div-title {
  font-size:.95rem;font-weight:800;letter-spacing:0;
  color:var(--text);margin-bottom:12px;
}
/* In the flex header row (next to the "What is diversification?" link) drop the
   bottom margin so the title + info link align like the Market Valuation header. */
.mv-head .wl-div-title { margin-bottom:0; }
.wl-div-score-row {
  display:flex;align-items:center;gap:16px;margin-bottom:14px;
}
.wl-div-grade   { font-size:2.6rem;font-weight:800;line-height:1;min-width:36px; }
/* Grade as a worded badge (Excellent / Good / Fair / Needs work). */
.wl-div-gradeword { font-size:.92rem;font-weight:800;line-height:1;padding:6px 12px;border-radius:999px;
  border:1.5px solid currentColor;background:rgba(var(--on-rgb),.04);white-space:nowrap; }
.wl-div-final   { font-size:1.45rem;font-weight:700;color:var(--text);margin-left:auto; }
.wl-div-max     { font-size:.85rem;color:var(--dim); }
.wl-div-sub     { font-size:.67rem;color:var(--dim);margin-top:2px; }

.div-brk-row {
  display:flex;align-items:center;gap:10px;margin-bottom:7px;
}
.div-brk-lbl  { font-size:.72rem;color:rgba(var(--on-rgb),.78);width:130px;flex-shrink:0; }
/* Collapsed label mirrors the verdict inside its expandable panel (green = spread fine, amber =
   concentration/correlation warning) — bar, label and verdict always tell the same story. */
.div-brk-lbl.div-brk-good { color:var(--green);font-weight:600; }
.div-brk-lbl.div-brk-warn { color:var(--amber);font-weight:600; }
.div-brk-bar  {
  flex:1;height:6px;border-radius:999px;
  background:rgba(var(--on-rgb),.10);overflow:hidden;
}
.div-brk-fill {
  height:100%;background:linear-gradient(90deg,#7BB290,#9ed3b0);border-radius:999px;
  transition:width .5s ease;
}
.div-brk-pts {
  font-size:.72rem;font-weight:600;color:rgba(var(--on-rgb),.92);width:30px;text-align:right;
  flex-shrink:0;font-variant-numeric:tabular-nums;
}
.wl-div-corr {
  margin-top:14px;padding-top:12px;border-top:1px solid rgba(var(--on-rgb),.06);
  display:flex;flex-direction:column;gap:3px;
}
.wl-div-corr-lbl { font-size:.6rem;text-transform:uppercase;letter-spacing:.09em;font-weight:700;color:var(--dim); }
.wl-div-corr-verdict { font-size:1.1rem;font-weight:800;line-height:1.15; }
.wl-div-corr-note { color:rgba(var(--muted-rgb),.55);font-size:.62rem;margin-top:6px; }
/* Diversification — concrete "Next step" action tip */
.wl-div-tip {
  margin:12px 0 2px;padding:10px 12px;border-radius:10px;
  font-size:.8rem;line-height:1.45;color:#cfe6d6;
  background:rgba(123,178,144,.08);border:1px solid rgba(123,178,144,.22);
}
.wl-div-tip b { color:#9ed3b0;font-weight:800; }
/* "Fix it" handoff button — diversification panel + sticky bar chip (#47).
   Modern-SaaS single-line CTA (operator): the next step reads on the left, the
   "Fix it →" action sits on the right — obviously one tappable button. Extra top
   margin separates it from the "Low correlation" bar above. */
.wl-div-fix-btn {
  display:flex; flex-direction:row; align-items:center; justify-content:space-between; gap:12px; width:100%;
  margin:14px 0 2px; padding:10px 14px; border-radius:12px; text-align:left;
  border:1px solid var(--green,#7BB290); background:rgba(123,178,144,.16);
  color:var(--green,#7BB290); cursor:pointer; transition:background .15s,transform .1s,box-shadow .15s;
}
.wl-div-fix-btn:hover { background:rgba(123,178,144,.24); transform:translateY(-1px); box-shadow:0 4px 14px rgba(123,178,144,.18); }
/* The step text is already the SHORT form (next_step_short) — let it wrap to 2 lines instead of
   ellipsizing away the point of the hint on narrow screens (operator 2026-07-08). */
/* Schriftgröße an den Rest der Diversifikations-Zeilen angeglichen (.div-brk-lbl = .72rem);
   war .88rem/700 → stach zu groß hervor (Operator 2026-07-17). */
.wl-fix-step { flex:1; min-width:0; font-size:.74rem; font-weight:600; line-height:1.32;
  display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.wl-fix-cta  { flex-shrink:0; display:inline-flex; align-items:center; gap:6px; font-size:.74rem; font-weight:700; letter-spacing:.02em; opacity:.95; }
.wl-fix-arr  { font-size:.85rem; line-height:1; transition:transform .15s; }
.wl-div-fix-btn:hover .wl-fix-arr { transform:translateX(3px); }
/* "Nicely diversified" done-state tip (no further next step). */
.wl-div-done { color:var(--green,#7BB290); background:rgba(123,178,144,.08); border-color:rgba(123,178,144,.22); font-weight:600; }
/* Swap-a-stock prompt: scroll to the holding, highlight it, ask swap-or-pick. */
.wl-swap-hl { outline:2px solid var(--green,#7BB290); outline-offset:1px; border-radius:12px; transition:outline-color .2s; }
.wl-swap-prompt { position:sticky; bottom:0; z-index:6; margin:10px 0 0; padding:11px 13px; box-sizing:border-box;
  background:var(--surface,#111a14); border:1px solid var(--green-b,rgba(123,178,144,.45)); border-radius:12px;
  box-shadow:0 -8px 24px rgba(0,0,0,.35); }
.wl-swap-q { font-size:.82rem; color:var(--text); line-height:1.45; margin-bottom:9px; }
.wl-swap-q b { color:var(--green,#7BB290); }
.wl-swap-why { color:rgba(var(--muted-rgb),.6); font-size:.74rem; }
.wl-swap-acts { display:flex; gap:8px; align-items:center; flex-wrap:wrap; }
.wl-swap-btn { flex:1 1 auto; padding:10px 12px; border-radius:10px; font-family:inherit; font-size:.82rem; font-weight:700; cursor:pointer;
  border:1px solid var(--fvc-border,rgba(var(--on-rgb),.16)); background:rgba(var(--on-rgb),.05); color:var(--text); }
.wl-swap-btn.primary { background:var(--green,#7BB290); color:var(--on-green,#0e1512); border-color:var(--green,#7BB290); }
.wl-swap-btn:hover { filter:brightness(1.06); }
.wl-swap-x { flex:0 0 auto; width:32px; height:32px; border-radius:50%; border:none; background:rgba(var(--on-rgb),.06); color:var(--dim); cursor:pointer; font-size:.9rem; }
.fvc-wlb-fix {
  flex:0 0 auto; align-self:center; margin-left:auto; padding:8px 13px; border-radius:999px;
  border:0; font-family:inherit; cursor:pointer; min-height:32px; line-height:1;
  background:var(--green,#7BB290); color:#07120c; font-size:.74rem; font-weight:800; white-space:nowrap;
  touch-action:manipulation; -webkit-tap-highlight-color:transparent;
  position:relative; z-index:2;   /* sit above the bar's backdrop-filter layer so taps land on the chip */
}
.fvc-wlb-fix:active { transform:scale(.96); }
.fvc-wlb-fix[hidden] { display:none; }
.wl-div-formula {
  font-size:.6rem;color:rgba(232,240,235,.14);margin-top:8px;
  font-family:monospace;letter-spacing:.02em;
}

/* Diversification — "How it works" accordion */
.wl-div-how {
  margin-top:12px;border-top:1px solid rgba(var(--on-rgb),.06);padding-top:10px;
}
.wl-div-how > summary {
  font-size:.67rem;color:var(--dim);cursor:pointer;list-style:none;
  display:flex;align-items:center;gap:5px;user-select:none;
}
.wl-div-how > summary::before { content:'▸';font-size:.6rem;transition:transform .18s; }
.wl-div-how[open] > summary::before { transform:rotate(90deg); }
.wl-div-how-body {
  margin-top:8px;font-size:.67rem;color:rgba(232,240,235,.3);line-height:1.65;
}
.wl-div-how-body p { margin:0 0 5px; }

/* Diversification — early-stage message */
.wl-div-early {
  font-size:.72rem;color:var(--dim);margin-top:12px;padding:9px 12px;
  background:rgba(var(--on-rgb),.025);border-radius:var(--r-sm);
  border:1px solid rgba(var(--on-rgb),.06);
}

/* Data unavailable section */
.wl-unavail-section {
  margin-top:16px;
}
.wl-unavail-section > summary.wl-unavail-title {
  font-size:.68rem;color:var(--dim);cursor:pointer;list-style:none;
  display:flex;align-items:center;gap:6px;padding:7px 0;user-select:none;
  border-top:1px solid rgba(var(--on-rgb),.06);
}
.wl-unavail-section > summary.wl-unavail-title::before { content:'▸';font-size:.6rem;transition:transform .18s; }
.wl-unavail-section[open] > summary.wl-unavail-title::before { transform:rotate(90deg); }
.wl-unavail-card {
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:8px 10px;margin-bottom:6px;
  background:rgba(var(--on-rgb),.018);border:1px solid rgba(var(--on-rgb),.06);
  border-radius:var(--r-sm);
}
.wl-unavail-left  { display:flex;flex-direction:column;gap:2px; }
.wl-unavail-ticker { font-size:.82rem;font-weight:700;color:var(--muted); }
.wl-unavail-co     { font-size:.67rem;color:var(--dim); }
.wl-unavail-missing { font-size:.63rem;color:rgba(224,95,95,.6); }

/* Replace button */
.wl-replace-btn {
  background:none;border:none;color:var(--dim);cursor:pointer;
  font-size:.72rem;padding:2px 5px;border-radius:4px;
  flex-shrink:0;transition:color .14s;
}
.wl-replace-btn:hover { color:var(--green); }
.wl-replace-reason {
  display:block;font-size:.67rem;color:var(--dim);margin:3px 0 5px;
}
.wl-replace-actions { display:flex;gap:6px;margin-top:4px; }

/* Smart action buttons */
.wl-action-sm {
  font-size:.71rem;padding:3px 10px;border-radius:var(--r-sm);cursor:pointer;
  font-family:inherit;border:1px solid rgba(123,178,144,.3);
  background:rgba(123,178,144,.1);color:var(--green);transition:all .15s;
}
.wl-action-sm:hover { background:rgba(123,178,144,.2); }
.wl-action-sm.wl-action-ghost {
  background:transparent;border-color:rgba(var(--on-rgb),.12);color:var(--dim);
}
.wl-action-sm.wl-action-ghost:hover { color:var(--text);border-color:rgba(var(--on-rgb),.25); }

/* Builder bar */
.wl-builder-bar {
  display:flex;gap:8px;flex-wrap:wrap;justify-content:center;align-items:center;
  padding:16px 0 6px;border-top:1px solid rgba(var(--on-rgb),.06);
  margin-top:14px;
}
/* Two-button footer (Save Watchlist · Email Alert) — always side by side, equal width. */
.wl-builder-bar.wl-builder-bar-2 { flex-direction:row;flex-wrap:nowrap; }
.wl-builder-bar-2 .wl-action-btn { flex:1 1 0;min-width:0;justify-content:center;text-align:center; }
/* Pro: Save Watchlist is hidden (Pro lists are stored automatically) → only the Email
   Alert button remains. Centre it, a touch bigger, but capped so it never spans edge-to-edge. */
.wl-builder-bar-2.wl-builder-bar-solo { justify-content:center; }
.wl-builder-bar-2.wl-builder-bar-solo .wl-action-btn { flex:0 1 auto;min-width:220px;max-width:360px;font-size:.95rem;padding:14px 26px; }

/* ── Portfolio diversification — Pro lock (blurred preview + overlay) ── */
.wl-div-lockwrap { position:relative;margin-top:16px;border-radius:14px;overflow:hidden;border:1px solid var(--glass-b,rgba(var(--on-rgb),.1)); }
.wl-div-blur { filter:blur(5px);opacity:.5;pointer-events:none;padding:18px;background:rgba(var(--on-rgb),.02); }
.wl-div-blur .wl-div-title { font-size:.95rem;font-weight:700;color:var(--text);margin-bottom:14px; }
.wl-div-bars { display:flex;flex-direction:column;gap:11px; }
.wl-div-bar { display:flex;align-items:center;gap:12px;font-size:.78rem;color:var(--muted); }
.wl-div-bar span { width:90px;flex:0 0 auto; }
.wl-div-bar i { height:8px;border-radius:6px;background:var(--green);display:block; }
.wl-div-lock {
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  text-align:center;padding:20px;background:rgba(10,15,11,.55);backdrop-filter:blur(1px);
}
.wl-div-lock-title { font-size:1rem;font-weight:800;color:var(--text); }
.wl-div-lock-sub { font-size:.82rem;color:var(--muted);margin-top:6px;max-width:300px; }
.wl-action-btn {
  font-size:.76rem;padding:6px 14px;border-radius:var(--r-sm);cursor:pointer;
  font-family:inherit;border:1px solid rgba(var(--on-rgb),.12);
  background:rgba(var(--on-rgb),.04);color:var(--muted);transition:all .16s;
  white-space:nowrap;
}
.wl-action-btn:hover { background:rgba(var(--on-rgb),.08);color:var(--text);border-color:rgba(var(--on-rgb),.22); }
.wl-action-btn:disabled { opacity:.45;cursor:default; }
.wl-action-btn.wl-action-primary {
  background:rgba(123,178,144,.12);border-color:rgba(123,178,144,.3);color:var(--green);
}
.wl-action-btn.wl-action-primary:hover { background:rgba(123,178,144,.22); }
/* Email-alert button when alerts are ON → checked/active (green) */
.wl-action-btn.is-active {
  background:rgba(123,178,144,.16);border-color:var(--green,#7BB290);color:var(--green,#7BB290);font-weight:700;
}
.wl-action-btn.is-active:hover { background:rgba(123,178,144,.24);color:var(--green,#7BB290);border-color:var(--green,#7BB290); }

/* Autofill prompt (post-delete) */
.wl-autofill-prompt {
  display:flex;align-items:center;gap:10px;flex-wrap:wrap;
  font-size:.76rem;color:var(--dim);
  padding:8px 12px;margin:8px 0;
  background:rgba(123,178,144,.04);border:1px solid rgba(123,178,144,.1);
  border-radius:var(--r-sm);
}

/* Save & Alerts CTA */
.wl-save-cta {
  padding:14px 0 0;margin-top:4px;
  border-top:1px solid rgba(var(--on-rgb),.06);
}
.wl-save-btn {
  width:100%;padding:10px 18px;font-size:.85rem;font-weight:600;
  font-family:inherit;cursor:pointer;border-radius:var(--r-sm);
  border:1px solid rgba(123,178,144,.35);
  background:rgba(123,178,144,.12);color:var(--green);
  transition:all .17s;white-space:nowrap;
}
.wl-save-btn:hover { background:rgba(123,178,144,.22);border-color:rgba(123,178,144,.55); }
.wl-save-status { margin-top:6px;font-size:.7rem;text-align:center; }
.wl-save-active-txt { color:var(--green); }
.wl-save-local-txt  { color:var(--dim); }

/* Back button in modal */
.wl-back-btn {
  background:none;border:none;color:var(--dim);cursor:pointer;
  font-size:.76rem;padding:0;font-family:inherit;transition:color .14s;
}
.wl-back-btn:hover { color:var(--text); }

/* Save & Alerts panel */
.wl-save-panel { padding:4px 0 8px; }
.wl-save-section { margin-bottom:18px; }
.wl-save-section-title {
  font-size:.66rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;
  color:var(--dim);margin-bottom:8px;
}
.wl-save-tickers { display:flex;flex-wrap:wrap;gap:5px; }
.wl-save-ticker {
  font-size:.75rem;font-weight:600;padding:3px 8px;
  background:rgba(var(--on-rgb),.05);border:1px solid rgba(var(--on-rgb),.1);
  border-radius:var(--r-sm);color:var(--muted);
}
.wl-save-features {
  list-style:none;padding:0;margin:0;font-size:.8rem;
  color:var(--muted);line-height:1.85;
}
.wl-save-email-lbl  { font-size:.72rem;color:var(--dim);display:block;margin-bottom:6px; }
.wl-save-email-input {
  width:100%;box-sizing:border-box;
  background:rgba(var(--on-rgb),.04);border:1px solid rgba(var(--on-rgb),.14);
  border-radius:var(--r-sm);padding:9px 12px;font-size:.9rem;
  color:var(--text);font-family:inherit;outline:none;
  transition:border-color .16s;
}
.wl-save-email-input:focus { border-color:rgba(123,178,144,.4); }
.wl-save-price-row { display:flex;align-items:baseline;gap:10px; }
.wl-save-price {
  font-size:1.5rem;font-weight:800;color:var(--green);line-height:1;
}
.wl-save-price-note { font-size:.72rem;color:var(--dim); }
.wl-save-unavail {
  font-size:.8rem;color:var(--dim);padding:12px 14px;
  background:rgba(var(--on-rgb),.025);border-radius:var(--r-sm);
  border:1px solid rgba(var(--on-rgb),.06);
}
.wl-save-disclaimer { font-size:.63rem;color:rgba(232,240,235,.2);margin-top:16px; }

/* Payment success */
.wl-save-success {
  padding:32px 16px;text-align:center;
}
.wl-success-icon {
  width:52px;height:52px;border-radius:50%;
  background:rgba(123,178,144,.15);border:2px solid rgba(123,178,144,.4);
  display:flex;align-items:center;justify-content:center;
  font-size:1.4rem;color:var(--green);margin:0 auto 16px;
}
.wl-success-title { font-size:1.1rem;font-weight:700;color:var(--green);margin:0 0 8px; }
.wl-success-sub   { font-size:.82rem;color:var(--muted);margin-bottom:6px; }
.wl-success-note  { font-size:.72rem;color:var(--dim);margin-top:10px; }

@media (max-width:480px) {
  .wl-item-co { max-width:120px; }
  .div-brk-lbl { width:100px; }
  .wl-builder-bar { flex-direction:column; }
  .wl-action-btn { text-align:center; }
}

/* ═══════════════════════════════════════════════════════════════════
   INTELLIGENCE PANEL (ip-) — Live status bar rendered by app.js
   ═══════════════════════════════════════════════════════════════════ */
.ip-bar {
  display:flex;align-items:center;flex-wrap:wrap;gap:8px 14px;
  background:rgba(123,178,144,.03);
  border:1px solid rgba(123,178,144,.11);
  border-radius:var(--r);
  padding:11px 20px;
  font-size:.71rem;color:var(--muted);
  backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);
}
.ip-live {
  display:flex;align-items:center;gap:7px;
  font-size:.74rem;font-weight:700;color:var(--text);white-space:nowrap;
}
.ip-dot {
  display:inline-block;width:6px;height:6px;border-radius:50%;
  background:var(--green);box-shadow:0 0 7px rgba(123,178,144,.8);
  animation:blink 2.4s ease-in-out infinite;flex-shrink:0;
}
.ip-vsep {
  display:inline-block;width:1px;height:13px;
  background:rgba(var(--on-rgb),.1);flex-shrink:0;align-self:center;
}
.ip-sources { color:var(--muted);white-space:nowrap; }
.ip-cov { display:flex;align-items:center;gap:6px;white-space:nowrap; }
.ip-num { font-weight:700;color:var(--green); }
.ip-prog {
  display:inline-block;width:36px;height:3px;
  background:rgba(var(--on-rgb),.07);border-radius:2px;overflow:hidden;
  vertical-align:middle;
}
.ip-prog span {
  display:block;height:100%;
  background:linear-gradient(90deg,var(--green) 0%,var(--green2) 100%);
  border-radius:2px;
}
.ip-dim { color:var(--dim); }
.ip-cron-on  { color:var(--green);font-weight:600; }
.ip-cron-off { color:var(--dim); }
.ip-right { margin-left:auto; }
.ip-scope {
  font-size:.61rem;font-weight:600;letter-spacing:.06em;
  background:rgba(100,160,240,.08);color:#90b8f0;
  border:1px solid rgba(100,160,240,.18);
  border-radius:var(--r-pill);padding:2px 10px;white-space:nowrap;
}
@media (max-width:640px) {
  .ip-vsep,.ip-right { display:none; }
  .ip-sources { display:none; }
}

/* ═══════════════════════════════════════════════════════════════════
   METHODOLOGY STEPPER (meth-)
   ═══════════════════════════════════════════════════════════════════ */
.meth-track {
  position:relative;
  display:flex;align-items:flex-start;
  margin:20px 0 24px;overflow-x:auto;padding-bottom:4px;
}
.meth-track::before {
  content:'';position:absolute;
  top:13px;left:10%;right:10%;height:1px;
  background:rgba(123,178,144,.2);
  pointer-events:none;
}
.meth-step {
  flex:1;min-width:110px;max-width:200px;
  display:flex;flex-direction:column;align-items:center;
  padding:0 10px;text-align:center;cursor:default;
}
.meth-node {
  width:26px;height:26px;border-radius:50%;
  background:var(--bg);
  border:1px solid rgba(123,178,144,.3);
  display:flex;align-items:center;justify-content:center;
  font-size:.62rem;font-weight:700;color:var(--green);
  position:relative;z-index:1;
  margin-bottom:12px;
  transition:background .2s,border-color .2s,box-shadow .2s;
}
.meth-step:hover .meth-node {
  background:rgba(123,178,144,.1);
  border-color:rgba(123,178,144,.6);
  box-shadow:0 0 14px rgba(123,178,144,.3);
}
.meth-num  { font-size:.56rem;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--green);margin-bottom:3px; }
.meth-title{ font-size:.77rem;font-weight:600;color:var(--text);margin-bottom:5px;line-height:1.2; }
.meth-desc { font-size:.67rem;color:var(--dim);line-height:1.5; }
@media (max-width:680px) {
  .meth-track { flex-direction:column;gap:14px; }
  .meth-track::before { display:none; }
  .meth-step { flex-direction:row;align-items:flex-start;text-align:left;max-width:none; }
  .meth-node { flex-shrink:0;margin-bottom:0;margin-right:14px; }
}

/* ═══════════════════════════════════════════════════════════════════
   CHART KPI STRIP (rh-kpi-)
   ═══════════════════════════════════════════════════════════════════ */
.rh-kpi-strip {
  display:flex;align-items:stretch;
  border-top:1px solid var(--glass-b);
  flex-wrap:wrap;
}
.rh-kpi {
  flex:1;min-width:100px;
  text-align:center;padding:12px 8px;
}
.rh-kpi + .rh-kpi { border-left:1px solid var(--glass-b); }
.rh-kpi-val {
  font-size:1.05rem;font-weight:700;line-height:1;margin-bottom:4px;
  background:linear-gradient(135deg,var(--text) 0%,var(--green) 100%);
  -webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text;
}
.rh-kpi-val.dim {
  background:none;-webkit-text-fill-color:var(--muted);color:var(--muted);font-size:.92rem;
}
.rh-kpi-lbl {
  font-size:.59rem;color:var(--dim);letter-spacing:.09em;text-transform:uppercase;
}
@media (max-width:480px) {
  .rh-kpi { flex:0 0 50%; }
  .rh-kpi:nth-child(2n+1) { border-left:none; }
  .rh-kpi:nth-child(n+3)  { border-top:1px solid var(--glass-b); }
}

/* ── Data Pipeline Center ─────────────────────────────────────────────────── */

.dpc-section { }
.dpc-loading {
  display:flex;align-items:center;gap:10px;padding:20px 0;
  color:var(--dim);font-size:.8rem;
}
.dpc-loading-dot {
  width:8px;height:8px;border-radius:50%;background:var(--green);
  animation:dpcPulse 1.4s ease-in-out infinite;
}
@keyframes dpcPulse { 0%,100%{opacity:.3;transform:scale(.8)} 50%{opacity:1;transform:scale(1)} }
.dpc-error {
  padding:16px;color:var(--dim);font-size:.8rem;text-align:center;
}

/* Wrapper */
.dpc-wrap { padding:20px 0 28px; }

/* Header */
.dpc-header {
  display:flex;align-items:flex-start;justify-content:space-between;
  padding-bottom:16px;gap:12px;flex-wrap:wrap;
}
.dpc-title {
  font-size:1rem;font-weight:700;color:var(--text);letter-spacing:.01em;
}
.dpc-sub { font-size:.72rem;color:var(--dim);margin-top:3px; }
.dpc-header-right { display:flex;align-items:center;gap:10px;flex-shrink:0; }
.dpc-updated { font-size:.62rem;color:var(--dim); }

/* KPI row */
.dpc-kpis {
  display:grid;
  grid-template-columns:repeat(6,1fr);
  gap:10px;margin-bottom:14px;
}
@media (max-width:900px) { .dpc-kpis { grid-template-columns:repeat(3,1fr); } }
@media (max-width:560px) { .dpc-kpis { grid-template-columns:repeat(2,1fr); } }

.dpc-kpi {
  background:rgba(var(--on-rgb),.04);
  border:1px solid rgba(var(--on-rgb),.08);
  border-radius:10px;padding:12px 14px;
  transition:border-color .2s;
}
.dpc-kpi-live {
  border-color:rgba(123,178,144,.3);
  background:rgba(123,178,144,.06);
}
.dpc-kpi-val {
  font-size:1.4rem;font-weight:700;color:var(--text);
  display:flex;align-items:center;gap:6px;line-height:1;
}
.dpc-kpi-lbl {
  font-size:.62rem;color:var(--dim);margin-top:5px;
  text-transform:uppercase;letter-spacing:.05em;
}
.dpc-live-dot {
  display:inline-block;width:7px;height:7px;border-radius:50%;
  background:var(--green);
  animation:dpcPulse 1.2s ease-in-out infinite;
  flex-shrink:0;
}

/* Progress bar */
.dpc-progress-section {
  background:rgba(var(--on-rgb),.03);
  border:1px solid rgba(var(--on-rgb),.07);
  border-radius:10px;padding:12px 16px;margin-bottom:14px;
}
.dpc-progress-row {
  display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap;
}
.dpc-progress-label {
  font-size:.65rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.07em;color:var(--dim);flex:1;
}
.dpc-progress-nums { font-size:.72rem;font-weight:600;color:var(--text); }
.dpc-progress-pct  { font-size:.72rem;font-weight:700;color:var(--green); }
.dpc-progress-track {
  height:6px;border-radius:3px;background:rgba(var(--on-rgb),.08);
  overflow:hidden;margin-bottom:7px;
}
.dpc-progress-fill {
  height:100%;border-radius:3px;
  background:linear-gradient(90deg,#4a9e6a,var(--green));
  transition:width .6s ease;
}
.dpc-progress-meta {
  font-size:.62rem;color:var(--dim);
}

/* Pipeline lanes */
.dpc-lanes {
  display:grid;
  grid-template-columns:repeat(5,1fr);
  gap:10px;margin-bottom:14px;
}
@media (max-width:1100px) { .dpc-lanes { grid-template-columns:repeat(3,1fr); } }
@media (max-width:700px)  { .dpc-lanes { grid-template-columns:repeat(2,1fr); } }
@media (max-width:420px)  { .dpc-lanes { grid-template-columns:1fr; } }

.dpc-lane {
  background:rgba(var(--on-rgb),.04);
  border:1px solid rgba(var(--on-rgb),.08);
  border-radius:10px;padding:12px;
  transition:border-color .2s;
}
.dpc-lane-active  { border-color:rgba(123,178,144,.25); }
.dpc-lane-running { border-color:rgba(123,178,144,.4);background:rgba(123,178,144,.06); }
.dpc-lane-blocked { border-color:rgba(224,94,94,.3); }
.dpc-lane-warn    { border-color:rgba(240,168,80,.3); }
.dpc-lane-idle    { }

/* Status dot */
.dpc-dot {
  width:7px;height:7px;border-radius:50%;flex-shrink:0;
}
.dpc-dot-green { background:var(--green); }
.dpc-dot-pulse {
  background:var(--green);
  animation:dpcPulse 1s ease-in-out infinite;
}
.dpc-dot-red   { background:#e05e5e; }
.dpc-dot-amber { background:#f0a850; }
.dpc-dot-grey  { background:rgba(var(--on-rgb),.2); }

.dpc-lane-head {
  display:flex;align-items:center;gap:7px;margin-bottom:8px;
}
.dpc-lane-title {
  font-size:.72rem;font-weight:700;color:var(--text);flex:1;
}
.dpc-lane-badge {
  font-size:.55rem;font-weight:700;padding:1px 6px;border-radius:6px;
  background:rgba(var(--on-rgb),.07);color:var(--dim);flex-shrink:0;
}
.dpc-lane-active  .dpc-lane-badge { background:rgba(123,178,144,.15);color:var(--green); }
.dpc-lane-running .dpc-lane-badge { background:rgba(123,178,144,.2);color:var(--green); }
.dpc-lane-blocked .dpc-lane-badge { background:rgba(224,94,94,.12);color:#e05e5e; }
.dpc-lane-warn    .dpc-lane-badge { background:rgba(240,168,80,.12);color:#f0a850; }

.dpc-lane-count {
  font-size:.65rem;color:var(--muted);margin-bottom:7px;min-height:14px;
}
.dpc-lane-row {
  display:flex;align-items:center;justify-content:space-between;
  font-size:.62rem;gap:4px;margin-bottom:3px;
}
.dpc-lane-key { color:var(--dim);flex-shrink:0; }
.dpc-lane-val { font-weight:600;color:var(--text);text-align:right; }
.dpc-val-ok   { color:var(--green); }
.dpc-val-warn { color:#f0a850; }
.dpc-val-dim  { color:var(--dim);font-weight:400; }
.dpc-val-crit { color:#e05555;font-weight:700; }
.dpc-section-header {
  font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;
  color:var(--dim);margin:18px 0 8px;padding:6px 0 6px 2px;
  border-top:1px solid rgba(var(--on-rgb),.08);
}
.dpc-lane-note {
  font-size:.6rem;color:var(--dim);margin-top:6px;line-height:1.4;
  border-top:1px solid rgba(var(--on-rgb),.06);padding-top:5px;
}
.dpc-note-warn { color:#f0a850; }

/* Bottom: activity + bottleneck */
.dpc-bottom {
  display:grid;grid-template-columns:1fr 280px;gap:10px;
}
@media (max-width:700px) { .dpc-bottom { grid-template-columns:1fr; } }

.dpc-card {
  background:rgba(var(--on-rgb),.04);
  border:1px solid rgba(var(--on-rgb),.08);
  border-radius:10px;padding:14px;
}
.dpc-card-label {
  font-size:.62rem;font-weight:700;text-transform:uppercase;
  letter-spacing:.07em;color:var(--dim);margin-bottom:10px;
}

/* Activity feed */
.dpc-act-feed { display:flex;flex-direction:column;gap:3px; }
.dpc-act-empty { font-size:.72rem;color:var(--dim);text-align:center;padding:16px 0; }
.dpc-act-row {
  display:flex;align-items:center;gap:8px;
  font-size:.67rem;padding:3px 5px;border-radius:4px;
  transition:background .15s;
}
.dpc-act-row:hover { background:rgba(var(--on-rgb),.04); }
.dpc-act-time   { color:var(--dim);min-width:44px;flex-shrink:0;font-family:monospace;font-size:.6rem; }
.dpc-act-ticker { font-family:monospace;font-weight:700;min-width:48px;flex-shrink:0; }
.dpc-act-badge  { padding:1px 7px;border-radius:6px;font-size:.58rem;font-weight:600;flex-shrink:0; }
.dpc-act-ok     { background:rgba(123,178,144,.15);color:var(--green); }
.dpc-act-err    { background:rgba(224,94,94,.12);color:#e05e5e; }
.dpc-act-warn   { background:rgba(240,168,80,.12);color:#f0a850; }
.dpc-act-info   { background:rgba(100,149,237,.1);color:#6495ed; }

/* Bottleneck card */
.dpc-bn-critical { border-color:rgba(224,94,94,.35); }
.dpc-bn-warn     { border-color:rgba(240,168,80,.3); }
.dpc-bn-ok       { }
.dpc-bn-body { display:flex;align-items:flex-start;gap:8px;margin-bottom:8px; }
.dpc-bn-icon { font-size:.9rem;flex-shrink:0;padding-top:1px; }
.dpc-bn-msg  { font-size:.72rem;color:var(--text);font-weight:500;line-height:1.4; }
.dpc-bn-action { margin-top:8px; }
.dpc-bn-action code {
  font-size:.6rem;background:rgba(var(--on-rgb),.06);padding:4px 8px;border-radius:6px;
  color:var(--green);word-break:break-all;display:block;line-height:1.5;
}

/* MANUAL ONLY lane */
.dpc-lane-manual {
  border-color:rgba(240,168,80,.2);
}
.dpc-lane-manual .dpc-lane-badge {
  background:rgba(240,168,80,.12);color:#f0a850;
}

/* Scope tag (US-only / Global) */
.dpc-scope-tag {
  display:inline-flex;align-items:center;
  font-size:.55rem;font-weight:700;padding:1px 6px;border-radius:6px;
  margin-left:6px;vertical-align:middle;
}
.dpc-scope-us     { background:rgba(240,168,80,.15);color:#f0a850; }
.dpc-scope-global { background:rgba(123,178,144,.15);color:var(--green); }
.dpc-scope-note   { background:rgba(var(--on-rgb),.07);color:var(--dim); }
.dpc-fill-seed    { background:linear-gradient(90deg,#3a6ea8,#5b9bd5); }

/* Running value text */
.dpc-val-run { color:var(--green);font-size:.6rem; }

/* Dependencies row in header */
.dpc-dep-row {
  display:flex;align-items:center;gap:5px;flex-wrap:wrap;
}
.dpc-dep {
  font-size:.55rem;font-weight:600;padding:1px 6px;border-radius:6px;
  border:1px solid transparent;
}
.dpc-dep-ok      { background:rgba(123,178,144,.1);border-color:rgba(123,178,144,.25);color:var(--green); }
.dpc-dep-missing { background:rgba(224,94,94,.1);border-color:rgba(224,94,94,.25);color:#e05e5e; }

/* ════════════════════════════════════════════════════════════════════════
   Revenue History & Growth + Financial Data (stock detail view only)
   Dark glass / premium SaaS styling; mobile-friendly, no horizontal overflow.
   ════════════════════════════════════════════════════════════════════════ */
.modal-subtitle { font-size:.74rem;color:var(--dim);margin:2px 0 16px;line-height:1.45; }
.company-profile { font-size:.84rem;line-height:1.6;color:var(--muted,#9aa39e);margin:2px 0 14px; }

/* Overview "in short": no frame/badges. Collapsed = a semantic 3-line teaser
   (no numbers); expanded = the full detailed report + a read-aloud button. */
.ov-summary { margin:2px 0 16px; }
.ov-profile-text { font-size:.84rem; line-height:1.6; color:var(--muted,#9aa39e); margin:0; }
.ov-teaser { display:-webkit-box; -webkit-line-clamp:4; -webkit-box-orient:vertical; overflow:hidden; }
.ov-profile.ov-expanded .ov-teaser { display:none; }
.ov-full { display:none; }
.ov-profile.ov-expanded .ov-full { display:block; }
.ov-full p { font-size:.84rem; line-height:1.62; color:var(--text,var(--text)); margin:0 0 9px; }
/* Subheadings that structure the (now much longer) expanded profile report (operator 2026-07-08). */
.ov-full .ov-h { font-size:.7rem; font-weight:800; text-transform:uppercase; letter-spacing:.06em;
  color:var(--green); margin:16px 0 6px; }
.ov-full .ov-h:first-child { margin-top:2px; }
/* Action row sits on the RIGHT (thumb reach, operator): collapsed = just "Show more";
   expanded = "🔊 Read aloud" and "Show less" together on the same line. */
.ov-actions { display:flex; justify-content:flex-end; align-items:center; gap:12px; margin-top:8px; }
.ov-profile:not(.ov-expanded) .ov-read-btn { display:none; }
.ov-read-btn { display:inline-flex; align-items:center; gap:6px; font-size:.8rem; font-weight:700; cursor:pointer;
  padding:7px 15px; border-radius:var(--r-pill,100px); border:1px solid rgba(123,178,144,.32);
  background:rgba(123,178,144,.10); color:var(--green,#7BB290); transition:background .15s; }
.ov-read-btn:hover { background:rgba(123,178,144,.18); }
.ov-read-btn.is-reading { background:rgba(224,138,138,.14); border-color:rgba(224,138,138,.36); color:#e08a8a; }
.ov-more { background:none; border:none; padding:0; cursor:pointer; font-size:.8rem; font-weight:700; color:var(--green,#7BB290); }
/* Rollover help (ⓘ) next to a section title — e.g. explains "ESG" */
.sec-help { position:relative;display:inline-flex;cursor:help;font-size:.72rem;color:var(--green,#7BB290);margin-left:6px;vertical-align:middle;outline:none; }
.sec-help-tip { position:absolute;left:0;bottom:150%;width:max-content;max-width:260px;
  background:rgba(12,19,15,.98);border:1px solid rgba(123,178,144,.4);color:var(--text,var(--text));
  font-size:.72rem;font-weight:500;line-height:1.45;padding:9px 11px;border-radius:10px;
  text-transform:none;letter-spacing:normal;   /* never inherit a section title's UPPERCASE */
  opacity:0;pointer-events:none;transition:opacity .15s;z-index:60;box-shadow:0 8px 24px rgba(0,0,0,.55); }
/* Right-anchored variant: tooltip extends LEFT so an ⓘ near the right edge doesn't clip. */
.sec-help.sec-help-r .sec-help-tip { left:auto;right:0; }
.sec-help:hover .sec-help-tip, .sec-help:focus .sec-help-tip, .sec-help:focus-visible .sec-help-tip { opacity:1; }
.dim-val { color:var(--dim); }

/* Summary cards (wrap on mobile) */
.rev-cards { display:flex;flex-wrap:wrap;gap:8px;margin-top:12px;margin-bottom:26px; }
.rev-card {
  /* Desktop: 3-up so 5 cards wrap to 2 rows (was flex-basis 90px → all squeezed
     into ONE row, labels cut off). min-width keeps each tile wide enough that the
     label text fits on one line. Mobile (≤768px) drops to 2-up below. */
  flex:1 1 calc(33.333% - 6px);min-width:120px;
  background:var(--glass);border:1px solid var(--glass-b);border-radius:10px;
  padding:9px 11px;
}
.rev-card-lbl { font-size:.6rem;letter-spacing:.06em;text-transform:uppercase;color:var(--dim);margin-bottom:3px; }
.rev-card-val { font-size:1.02rem;font-weight:700;line-height:1.1; }
.rev-card-val.pos-val { color:var(--green); }
.rev-card-val.neg-val { color:var(--red); }
/* Growth-Quality card: verdict text fits the card form/size, score smaller + muted. */
.rev-card-val.gq-cardval { font-size:.86rem;line-height:1.25; }
.gq-cardscore { font-size:.68rem;color:var(--dim);font-weight:600;white-space:nowrap; }

/* Annual-revenue bar chart (CSS bars — no chart library, no number list) */
.rev-chart {
  /* Unterluft 8->18px (Betreiber 2026-08-01): das Balkendiagramm klebte auf der naechsten
     Sektions-Ueberschrift (Dividendenanalyse). */
  display:flex;align-items:flex-end;gap:7px;height:132px;margin:22px 0 18px;padding:0 2px;
}
.rev-col { flex:1 1 0;display:flex;flex-direction:column;align-items:center;height:100%;min-width:0;cursor:pointer;-webkit-tap-highlight-color:transparent; }
.rev-col-track { width:100%;flex:1;display:flex;align-items:flex-end;justify-content:center;min-height:0; }
.rev-col-bar {
  width:100%;max-width:34px;border-radius:4px 4px 0 0;
  background:var(--green);opacity:.9;transition:opacity .15s,filter .15s;
}
.rev-col-bar.up   { background:linear-gradient(180deg,var(--green2) 0%,var(--green) 100%); }
.rev-col-bar.down { background:linear-gradient(180deg,#f08a8a 0%,var(--red) 100%);opacity:.8; }
.rev-col-bar.flat { background:var(--dim); }
.rev-col:hover .rev-col-bar { opacity:1;filter:brightness(1.12); }
.rev-col-yr { font-size:.62rem;color:var(--dim);margin-top:6px;font-variant-numeric:tabular-nums; }
.rev-chart-cap { font-size:.66rem;color:var(--dim);margin-bottom:14px;text-align:center; }

/* Severe-only, subtle inline note (no big orange box). Sits inside .rev-method. */
.rev-method-warn { color:var(--amber);opacity:.8; }
/* Historical Fair Value chart */
.histfv-ranges { display:flex;flex-wrap:wrap;gap:6px;margin:12px 0 26px;justify-content:flex-end; }   /* right-aligned for thumb reach (#10); 26px below → breathing room before the legend */
/* Forecast toggle + info bubble sit in a row with the range buttons. */
.histfv-ctrls { display:flex;flex-wrap:wrap;align-items:center;gap:8px 14px;margin:12px 0 12px;justify-content:flex-end; }
.histfv-ctrls .histfv-ranges { margin:0; }
.histfv-projctl { display:inline-flex;align-items:center;gap:5px;flex:0 0 auto; }
.histfv-projtoggle { display:inline-flex;align-items:center;gap:5px;cursor:pointer;font-size:.72rem;font-weight:700;color:var(--muted);-webkit-tap-highlight-color:transparent; }
.histfv-projtoggle input { accent-color:var(--fvc-green,#7BB290);width:14px;height:14px;cursor:pointer;margin:0; }
.histfv-projinfo { width:17px;height:17px;border-radius:50%;border:1px solid rgba(var(--on-rgb),.3);background:none;color:var(--muted);font:italic 800 .66rem/1 serif;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;-webkit-tap-highlight-color:transparent; }
.histfv-projinfo:hover { color:var(--text);border-color:var(--fvc-green,#7BB290); }
.histfv-proj-help { font-size:.72rem;line-height:1.5;color:var(--muted);background:rgba(var(--on-rgb),.04);border:1px solid var(--glass-b,rgba(255,255,255,.1));border-radius:10px;padding:10px 12px;margin:0 0 12px; }
.histfv-proj-help b { color:var(--text); }
.histfv-range {
  cursor:pointer;font:inherit;font-size:.72rem;font-weight:700;line-height:1;
  padding:6px 12px;border-radius:999px;
  background:rgba(var(--on-rgb),.045);border:1px solid var(--glass-b,rgba(var(--on-rgb),.12));color:var(--muted);
  transition:background .15s,border-color .15s,color .15s;
}
.histfv-range:hover { background:rgba(123,178,144,.1);border-color:rgba(123,178,144,.4); }
.histfv-range.active { background:rgba(123,178,144,.16);border-color:var(--green);color:var(--green); }
/* aligned HTML legend (flex) — replaces the old in-SVG legend */
.histfv-legend { display:flex;flex-wrap:wrap;gap:10px;font-size:.72rem;color:var(--muted);margin:0 0 8px;justify-content:center; }
.histfv-leg { display:inline-flex;align-items:center;gap:6px; }
.histfv-leg i { width:13px;height:3px;border-radius:2px;display:inline-block;flex:0 0 auto; }
/* Clickable legend toggles */
.histfv-leg-btn { background:transparent;border:1px solid var(--glass-b);border-radius:999px;padding:4px 10px;color:var(--muted);font-size:.72rem;font-weight:600;cursor:pointer;line-height:1;transition:opacity .12s,border-color .12s,background .12s; }
.histfv-leg-btn:hover { border-color:var(--green-b);background:var(--glass); }
.histfv-leg-btn.off { opacity:.4;text-decoration:line-through;text-decoration-thickness:1px; }
.histfv-leg-btn.off i { opacity:.25 !important; }
.histfv-leg-info { opacity:.85;padding:4px 4px; }
.histfv-svg { margin-top:2px; }
/* Phones: let the price chart use more screen width (bleed into the sheet's side
   padding) + trim the bottom gap → bigger chart, scales with the screen (operator). */
@media (max-width:560px) {
  #histfv-chart-host { margin-left:-14px; margin-right:-14px; }
  #histfv-chart-host .histfv-svg { margin-bottom:-20px; }   /* pull the next section up → tighter gap below the chart */
}
/* Interactive crosshair tooltip (#39) */
.histfv-wrap { position:relative; }
.histfv-tip {
  position:absolute; z-index:6; min-width:120px; max-width:200px; pointer-events:none;
  background:rgba(10,16,12,.96); border:1px solid rgba(123,178,144,.4); border-radius:10px;
  padding:8px 10px; box-shadow:0 6px 18px rgba(0,0,0,.4); font-size:.74rem; line-height:1.5;
}
.histfv-tip[hidden] { display:none; }
.histfv-tip .ht-date { color:var(--dim,#9aa6a0); font-size:.66rem; font-weight:700; letter-spacing:.03em; margin-bottom:3px; }
.histfv-tip .ht-row { display:flex; align-items:center; gap:6px; color:var(--text,var(--text)); }
.histfv-tip .ht-row i { width:8px; height:8px; border-radius:50%; flex:0 0 auto; }
.histfv-tip .ht-row b { margin-left:auto; font-variant-numeric:tabular-nums; }
.histfv-tip .ht-perf { margin-top:4px; font-weight:700; font-variant-numeric:tabular-nums; }
.histfv-tip .ht-perf.pos { color:var(--green,#7BB290); }
.histfv-tip .ht-perf.neg { color:var(--red,#e08a8a); }
.histfv-hint { color:var(--green,#7BB290); }
.histfv-cap { font-size:.68rem;color:var(--dim);margin-top:8px; }
.histfv-empty { font-size:.8rem;color:var(--dim);line-height:1.5;padding:6px 0; }
.histfv-metrics { display:flex;flex-wrap:wrap;gap:8px;margin:18px 0 4px; }
.histfv-metric {
  flex:1 1 120px;min-width:120px;background:var(--glass,rgba(var(--on-rgb),.04));
  border:1px solid var(--glass-b,rgba(var(--on-rgb),.1));border-radius:10px;padding:8px 11px;
}
.histfv-m-lbl { display:block;font-size:.62rem;color:var(--dim);text-transform:uppercase;letter-spacing:.04em;margin-bottom:2px; }
.histfv-m-val { font-size:.98rem;font-weight:800;color:var(--text,var(--text)); }
@media (max-width:560px){ .histfv-metric { flex:1 1 calc(50% - 8px);min-width:0; } }
.rev-method, .rev-empty { font-size:.7rem; }

/* Financial Data — grouped metric cards */
.fin-source { font-size:.72rem;color:var(--dim);margin-bottom:10px; }
.fin-groups { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px; }
.fin-group {
  background:var(--glass);border:1px solid var(--glass-b);border-radius:12px;padding:11px 13px;
}
.fin-group-title {
  font-size:.64rem;letter-spacing:.07em;text-transform:uppercase;color:var(--green);
  font-weight:700;margin-bottom:8px;
}
.fin-group-grid { display:flex;flex-direction:column;gap:5px; }
.fin-metric { display:flex;justify-content:space-between;align-items:baseline;gap:10px;font-size:.8rem; }
.fin-m-lbl { color:var(--dim);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.fin-m-val { font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap; }
.fin-metric.is-na .fin-m-val { color:var(--dim);font-weight:500; }
/* Dividend Analysis block */
.div-section .modal-section-title { display:flex;align-items:center;flex-wrap:wrap;gap:8px; }
.div-verdict { font-size:.66rem;font-weight:800;letter-spacing:.02em;padding:3px 9px;border-radius:999px;white-space:nowrap; }
.div-verdict.div-good { background:rgba(123,178,144,.16);color:var(--fvc-green,#7BB290);border:1px solid rgba(123,178,144,.4); }
.div-verdict.div-warn { background:rgba(216,166,87,.14);color:var(--amber,#d8a657);border:1px solid rgba(216,166,87,.4); }
.div-verdict.div-bad  { background:rgba(224,119,110,.14);color:var(--red,#e0776e);border:1px solid rgba(224,119,110,.4); }
.div-grid { display:flex;flex-direction:column;gap:7px;margin-top:10px; }
.div-grid .fin-metric { font-size:.82rem;align-items:center; }
.div-grid .fin-m-lbl { overflow:visible;white-space:normal;display:inline-flex;align-items:center; }   /* show the ⓘ + its tooltip */
.div-bars { margin-top:26px; }
.div-bars-cap { font-size:.7rem;color:var(--dim);margin:0 0 6px; }
.div-bars-cap b { color:var(--fvc-green,#7BB290);font-weight:700; }

@media (max-width:768px) {
  .fin-groups { grid-template-columns:1fr; }     /* stack on phones */
  .rev-card { flex:1 1 calc(50% - 8px); }         /* 2-up cards on phones */
  .rev-chart { height:108px;gap:5px; }
  .rev-col-bar { max-width:26px; }
  .rev-col-yr { font-size:.56rem; }
}

/* ════════════════════════════════════════════════════════════════════════
   Plain-language glossary tooltips (stock detail view)
   ════════════════════════════════════════════════════════════════════════ */
.fvc-term {
  border-bottom:1px dotted var(--green-b);
  cursor:help;
  text-decoration:none;
}
/* When the trigger is a pill (e.g. the dividend verdict badge) a border-bottom clashes
   with the rounded shape — underline the text with dots instead. */
.div-verdict.fvc-term { border-bottom:none;text-decoration:underline dotted;text-underline-offset:2px;text-decoration-thickness:1px; }
.fvc-term:hover, .fvc-term:focus { color:var(--green); outline:none; }
/* Classification pills (penny / cyclical) used as tap-tooltip triggers: drop the dotted border and KEEP the
   pill's own tone colour on hover/tap instead of the green term-highlight (operator 2026-07-12: tapping a
   badge on mobile showed no tooltip → moved from title= to .fvc-term/data-tip, which is tap-aware). */
.fvc-vbadge.fvc-term, .card-penny-badge.fvc-term { border-bottom:none; text-decoration:none; cursor:help; }
.fvc-vbadge.tone-penny.fvc-term:hover,    .fvc-vbadge.tone-penny.fvc-term:focus    { color:#e08a8a; }
.fvc-vbadge.tone-cyclical.fvc-term:hover, .fvc-vbadge.tone-cyclical.fvc-term:focus { color:#90b8f0; }
.card-penny-badge.fvc-term:hover, .card-penny-badge.fvc-term:focus { color:#e08a8a; }
.card-penny-badge.card-cyclical-badge.fvc-term:hover, .card-penny-badge.card-cyclical-badge.fvc-term:focus { color:#90b8f0; }
#fvc-tip {
  position:fixed; z-index:99999; max-width:min(340px,90vw);
  padding:11px 14px; border-radius:10px;
  background:#0e1611; border:1px solid var(--green-b); color:var(--text);
  font-size:.78rem; line-height:1.5; font-weight:400; white-space:pre-line;
  box-shadow:0 10px 32px rgba(0,0,0,.55);
  opacity:0; transform:translateY(3px); pointer-events:none;
  transition:opacity .12s ease, transform .12s ease;
}
#fvc-tip.show { opacity:1; transform:translateY(0); }

/* ════════════════════════════════════════════════════════════════════════
   Growth Quality interpretation block (stock detail — display only)
   ════════════════════════════════════════════════════════════════════════ */
.gq-block { margin-top:18px; }
.gq-head { display:flex; align-items:center; gap:8px; margin-bottom:11px; }
.gq-info { cursor:help; color:var(--dim); font-size:.9rem; border-bottom:none !important; line-height:1; }
.gq-info:hover, .gq-info:focus { color:var(--green); outline:none; }
.gq-badge {
  display:inline-flex; align-items:center; gap:8px; font-weight:800; font-size:1.0rem;
  padding:8px 15px; border-radius:999px; border:1px solid var(--glass-b);
  margin-top:8px;   /* a little more breathing room above the badge (#8) */
}
.gq-dot { font-size:.85rem; line-height:1; }
.gq-score { margin-left:6px; font-size:.7rem; font-weight:700; color:var(--dim); }
.gq-sentence { margin:10px 0 8px; font-size:.86rem; line-height:1.5; color:var(--text); }
.gq-metrics { display:flex; flex-wrap:wrap; gap:8px; }
.gq-metric { flex:1 1 92px; min-width:92px; background:var(--glass); border:1px solid var(--glass-b); border-radius:10px; padding:8px 11px; }
.gq-m-lbl { display:block; font-size:.58rem; letter-spacing:.06em; text-transform:uppercase; color:var(--dim); margin-bottom:3px; }
.gq-m-val { font-size:.95rem; font-weight:700; font-variant-numeric:tabular-nums; }
.gq-method { margin-top:12px; font-size:.7rem; }
/* category accents on the badge */
.gq-block.gq-healthy   .gq-badge { background:rgba(123,178,144,.14); border-color:var(--green-b); color:var(--green); }
.gq-block.gq-mixed     .gq-badge { background:rgba(240,200,90,.12);  border-color:rgba(240,200,90,.40); color:#e7c75a; }
.gq-block.gq-expensive .gq-badge { background:rgba(240,160,84,.12);  border-color:rgba(240,160,84,.42); color:var(--amber); }
.gq-block.gq-weak      .gq-badge { background:rgba(233,106,106,.12); border-color:rgba(233,106,106,.40); color:var(--red); }
.gq-block.gq-none      .gq-badge { background:var(--glass); border-color:var(--glass-b); color:var(--dim); }
@media (max-width:560px){ .gq-metric { flex:1 1 calc(50% - 8px); } }

/* ── AI Moat block (stock detail · Alpha tab) ───────────────────────────── */
.modal-section.aimoat .aimoat-head { display:flex; align-items:baseline; gap:16px; margin:8px 0 4px; }
.aimoat-score { font-size:1.6rem; font-weight:800; color:var(--green); line-height:1; }
.aimoat-score small { font-size:.8rem; color:var(--dim); font-weight:600; }
.aimoat-conf { font-size:.8rem; color:var(--dim); }
.aimoat-chips { display:flex; flex-wrap:wrap; gap:6px; margin:10px 0 4px; }
.aimoat-chip { font-size:.7rem; font-weight:700; color:var(--text); padding:4px 10px; border-radius:999px;
  border:1px solid rgba(var(--on-rgb),.14); white-space:nowrap; }
/* Red-flag pills — same shape/weight as the Growth-Quality badge for one
   consistent look (#12). */
.aimoat-flags { display:flex; flex-wrap:wrap; gap:8px; margin:12px 0 4px; }
.aimoat-flag-badge {
  display:inline-flex; align-items:flex-start; gap:7px; font-weight:700; font-size:.82rem;
  padding:7px 13px; border-radius:12px; line-height:1.4; max-width:100%;
  background:rgba(224,118,110,.14); border:1px solid rgba(224,118,110,.42); color:#e0776e;
}
/* Keep the 🚩 on the FIRST line (not vertically centred) when the flag text wraps —
   the old pill+center made long flags read as a lopsided multi-line capsule. */
.aimoat-flag-badge .gq-dot { flex:0 0 auto; margin-top:1px; }
.aimoat-meta { font-size:.74rem; color:var(--dim); margin-top:8px; }
.aimoat-fv { font-size:.82rem; color:var(--text); margin-top:4px; }
.modal-section.aimoat .modal-fine { font-size:.66rem; color:rgba(var(--muted-rgb),.64); margin-top:8px; font-style:italic; }
/* "adds +X pts to Quality Score" — inline next to the AI Quality number (operator) */
.aimoat-contrib { text-transform:none; letter-spacing:.01em; font-weight:600; font-size:.66rem; color:var(--muted); margin-left:8px; white-space:nowrap; }

/* ── Watchlist · Market Valuation & Cash Range (Pro module) ─────────────── */
.wl-market-val { margin:4px 0 14px; }
/* No border: the card already sits inside the bordered watchlist panel — the extra
   outline read as a redundant double frame. The gradient bg keeps it a distinct card. */
.mv-card { border-radius:16px; padding:16px 18px; margin-top:16px;   /* margin-top matches .wl-div-panel/.wl-sec-panel → one vertical rhythm for ALL bottom cards (operator 2026-07-06: unify the blocks) */
  background:radial-gradient(120% 130% at 90% 0%, rgba(123,178,144,.10), transparent 60%), linear-gradient(160deg, rgba(20,30,24,.7), rgba(10,16,13,.6));
  animation:mvFade .25s ease-out; }   /* gentle fade-in: it loads after the items, in place at the bottom */
@media (prefers-reduced-motion: reduce) { .mv-card { animation:none; } }
.mv-loading { display:flex; align-items:center; justify-content:center; min-height:60px; }
/* ── Unified bottom-card head (2026-07-06): ONE head style for Diversification / Allocation /
   Market Valuation / By-sector — same title size, same spacing, subtle divider under every head. */
.mv-head { display:flex; align-items:baseline; justify-content:space-between; gap:10px; flex-wrap:wrap;
  margin-bottom:12px; padding-bottom:10px; border-bottom:1px solid rgba(var(--on-rgb),.07); }
.mv-title { font-size:.95rem; font-weight:800; color:var(--text); }
.mv-info { font-size:.68rem; color:#7BB290; cursor:help; border-bottom:1px dotted rgba(123,178,144,.5); }
.mv-grid { display:grid; grid-template-columns:1.1fr 1.2fr .9fr; gap:14px; align-items:center; }
.mv-gauge-svg { width:100%; height:auto; display:block; }
.mv-gauge-end { fill:rgba(var(--muted-rgb),.64); font-size:9px; font-weight:600; }
.mv-center { text-align:center; }
.mv-status { display:inline-block; font-size:.92rem; font-weight:800; padding:3px 12px; border-radius:999px;
  color:#0e1512; background:#c9cf6a; }
.mv-status.mv-z-deepundervalued { background:#2e9e63; color:#eafff2; }
.mv-status.mv-z-undervalued { background:#7BB290; color:#0e1512; }
.mv-status.mv-z-fairvalue { background:#c9cf6a; color:#0e1512; }
.mv-status.mv-z-expensive { background:#e0a24d; color:#0e1512; }
.mv-status.mv-z-veryexpensive { background:#e0584d; color:#fff; }
.mv-ratio { font-size:1.05rem; font-weight:800; color:var(--text); margin-top:6px; }
.mv-gap { font-size:.74rem; color:rgba(var(--muted-rgb),.7); margin-top:3px; } .mv-gap b { color:var(--text); }
.mv-cash { text-align:center; border-left:1px solid rgba(var(--on-rgb),.08); padding-left:12px; }
.mv-cash-lbl { font-size:.6rem; text-transform:uppercase; letter-spacing:.05em; color:rgba(var(--muted-rgb),.70); }
.mv-cash-val { font-size:1.7rem; font-weight:800; color:#7BB290; line-height:1.1; } .mv-cash-val small { font-size:.9rem; }
.mv-cash-note { font-size:.58rem; color:rgba(var(--muted-rgb),.64); }
.mv-foot { margin-top:12px; font-size:.66rem; color:rgba(var(--muted-rgb),.70); border-top:1px solid rgba(var(--on-rgb),.07); padding-top:9px; }
.mv-fine { font-size:.62rem; color:rgba(var(--muted-rgb),.62); margin-top:6px; font-style:italic; }
/* locked teaser */
.mv-locked { text-align:center; position:relative; }
.mv-lock-ico { font-size:1.3rem; opacity:.85; }
.mv-teaser { font-size:.8rem; color:rgba(var(--muted-rgb),.72); margin:6px auto 12px; max-width:420px; line-height:1.45; }
.mv-blur { position:relative; filter:blur(5px); opacity:.5; pointer-events:none; user-select:none; margin-bottom:6px; }
.mv-blur-gauge { height:54px; margin:0 auto 8px; max-width:200px; border-radius:999px 999px 0 0;
  background:conic-gradient(from 270deg at 50% 100%, #2e9e63, #7BB290, #c9cf6a, #e0a24d, #e0584d); }
.mv-lock-list { list-style:none; display:flex; flex-wrap:wrap; gap:6px; justify-content:center; padding:0; margin:0; }
.mv-lock-list li { font-size:.66rem; color:rgba(var(--muted-rgb),.7); border:1px solid rgba(var(--on-rgb),.12); border-radius:999px; padding:3px 10px; }
.mv-cta-row { display:flex; gap:8px; justify-content:center; margin-top:12px; }
.mv-cta { font-family:inherit; font-weight:800; font-size:.8rem; color:#0e1512; background:#7BB290; border:none;
  border-radius:10px; padding:9px 18px; cursor:pointer; transition:filter .15s, transform .12s; }
.mv-cta:hover { filter:brightness(1.06); transform:translateY(-1px); }
.mv-cta-ghost { background:rgba(var(--on-rgb),.05); border:1px solid rgba(var(--on-rgb),.16); color:var(--text); }
@media (max-width:560px){ .mv-grid { grid-template-columns:1fr; gap:10px; } .mv-cash { border-left:none; border-top:1px solid rgba(var(--on-rgb),.08); padding-left:0; padding-top:10px; } }

/* ── Market Valuation — three sections (Macro · FVC Aggregate · Combined) ── */
.mv-sec { padding:11px 0; border-top:1px solid rgba(var(--on-rgb),.07); }
.mv-sec:first-of-type { border-top:none; }
.mv-sec-h { font-size:.72rem; font-weight:800; letter-spacing:.02em; color:var(--text); text-transform:uppercase; margin-bottom:6px; display:flex; align-items:center; gap:8px; }
.mv-sec-sub { font-weight:600; text-transform:none; color:rgba(var(--muted-rgb),.70); letter-spacing:0; }
.mv-sec-row { display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
.mv-sec-note { font-size:.66rem; color:rgba(var(--muted-rgb),.70); margin-top:5px; line-height:1.4; }
.mv-big { font-size:1.5rem; font-weight:800; color:var(--text); line-height:1; }
.mv-badge { font-size:.72rem; font-weight:800; padding:3px 11px; border-radius:999px; color:#0e1512; background:#c9cf6a; }
.mv-info { display:inline-flex; width:15px; height:15px; align-items:center; justify-content:center; border-radius:50%;
  border:1px solid rgba(123,178,144,.5); color:#7BB290; font-size:.62rem; cursor:help; }
.mv-info-link { font-size:.66rem; color:#7BB290; cursor:help; border-bottom:1px dotted rgba(123,178,144,.5); }
.mv-cov { font-size:.62rem; font-weight:700; padding:2px 9px; border-radius:999px; border:1px solid rgba(var(--on-rgb),.14); }
.mv-cov-good { color:#7BB290; border-color:rgba(123,178,144,.45); background:rgba(123,178,144,.12); }
.mv-cov-limited { color:#e0a24d; border-color:rgba(224,162,77,.4); background:rgba(224,162,77,.1); }
.mv-cov-low { color:#e0584d; border-color:rgba(224,88,77,.4); background:rgba(224,88,77,.1); }
.mv-sec-combined { border-top:1px solid rgba(123,178,144,.25); margin-top:2px; }
.mv-grid2 { display:grid; grid-template-columns:1fr auto; gap:14px; align-items:center; }
@media (max-width:520px){ .mv-grid2 { grid-template-columns:1fr; } }

/* ── Market Valuation — insufficient-data (premium clean) state ─────────── */
.mv-incomplete { text-align:left; }
.mv-status-badge { display:inline-block; font-size:.66rem; font-weight:800; letter-spacing:.04em; text-transform:uppercase;
  color:#e0a24d; background:rgba(224,162,77,.12); border:1px solid rgba(224,162,77,.4); border-radius:999px; padding:4px 12px; margin:6px 0 8px; }
.mv-chips { display:flex; flex-wrap:wrap; gap:7px; margin-top:8px; }
.mv-chip { font-size:.66rem; color:rgba(var(--muted-rgb),.65); border:1px solid rgba(var(--on-rgb),.12); border-radius:999px; padding:3px 10px; }
.mv-chip b { color:var(--text); font-weight:700; text-transform:capitalize; }
.mv-warn { color:#e0a24d; }

/* ── Market Valuation info popover (click-to-toggle; works on tap, not just hover) ── */
.mv-info-link { position:relative; font-family:inherit; background:none; border:none; cursor:pointer;
  font-size:.66rem; color:#7BB290; border-bottom:1px dotted rgba(123,178,144,.5); padding:0; }
.mv-pop { position:fixed; z-index:9999; width:max-content; max-width:min(280px, calc(100vw - 16px)); text-align:left;
  background:rgba(8,13,10,.98); border:1px solid rgba(var(--on-rgb),.16); border-radius:10px;
  padding:9px 11px; font-size:.68rem; line-height:1.45; color:rgba(var(--muted-rgb),.82); font-weight:500;
  box-shadow:0 14px 36px rgba(0,0,0,.55); cursor:default; }

/* ── Market Valuation — three glass cards (Macro · Internal · Cash) ─────── */
.mv-cards { display:grid; grid-template-columns:repeat(3,1fr); gap:12px; margin:12px 0 8px; }
@media (max-width:600px){ .mv-cards { grid-template-columns:1fr; } }
.mv-tile { border:1px solid rgba(var(--on-rgb),.10); border-radius:16px; padding:14px 15px;
  background:linear-gradient(158deg, rgba(var(--on-rgb),.07), rgba(var(--on-rgb),.02));
  display:flex; flex-direction:column; gap:6px; }   /* backdrop-filter raus (Scroll-Flacker-Fix 2026-07-28): Re-Blur des fixen BG pro Frame; Gradient minimal angehoben statt Blur */
.mv-tile-cash { background:linear-gradient(158deg, rgba(123,178,144,.12), rgba(123,178,144,.02)); border-color:rgba(123,178,144,.22); }
.mv-tile-muted { opacity:.78; }
.mv-tile-lbl { font-size:.62rem; font-weight:700; letter-spacing:.05em; text-transform:uppercase; color:rgba(var(--muted-rgb),.74); }
.mv-tile-val { font-size:1.85rem; font-weight:800; color:var(--text); line-height:1; }
.mv-tile-val small { font-size:.9rem; font-weight:700; color:rgba(var(--muted-rgb),.74); }
.mv-tile-val.mv-pos { color:#e0584d; }   /* trades ABOVE FV = expensive = red */
.mv-tile-val.mv-neg { color:#7BB290; }   /* trades BELOW FV = cheap = green */
.mv-tile-na { color:rgba(var(--muted-rgb),.66); font-weight:700; }
.mv-tile-badge { align-self:flex-start; font-size:.66rem; font-weight:800; padding:3px 10px; border-radius:999px;
  color:#0e1512; background:#c9cf6a; }
.mv-tile-note { font-size:.62rem; color:rgba(var(--muted-rgb),.70); line-height:1.4; margin-top:auto; }
/* badge valuation colours (shared scale) */
.mv-z-cheap, .mv-z-deepundervalued { background:#2e9e63; color:#eafff2; }
.mv-z-undervalued { background:#7BB290; color:#0e1512; }
.mv-z-fair, .mv-z-fairvalue { background:#c9cf6a; color:#0e1512; }
.mv-z-expensive { background:#e0a24d; color:#0e1512; }
.mv-z-veryexpensive { background:#e0584d; color:#fff; }
.mv-z-mixedsignal, .mv-z-indicativeonly, .mv-z-notavailableyet { background:rgba(var(--on-rgb),.12); color:var(--text); }

/* ── Market Valuation — combined gauge (top) ───────────────────────────── */
.mv-combined { display:grid; grid-template-columns:170px 1fr; gap:16px; align-items:center; margin:10px 0 4px; }
@media (max-width:560px){ .mv-combined { grid-template-columns:1fr; text-align:center; } }
.mv-combined .mv-gauge { width:170px; max-width:100%; margin:0 auto; }
.mv-combined-status { display:inline-block; font-size:1rem; font-weight:800; padding:4px 14px; border-radius:999px; color:#0e1512; background:#c9cf6a; }
.mv-combined-sub { font-size:.68rem; color:rgba(var(--muted-rgb),.70); margin-top:5px; }
.mv-inputs { display:flex; flex-direction:column; gap:6px; margin-top:10px; }
.mv-input { font-size:.7rem; color:rgba(var(--muted-rgb),.75); display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.mv-input-lbl { color:rgba(var(--muted-rgb),.70); min-width:130px; }
@media (max-width:560px){ .mv-inputs { align-items:center; } .mv-input-lbl { min-width:0; } }
/* ── Collapsible "3 sources" — uniform rows, revealed on tap ── */
.mv-sources { margin-top:12px; border:1px solid var(--fvc-border); border-radius:var(--r-sm); background:rgba(var(--on-rgb),.03); overflow:hidden; }
.mv-sources-sum { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:9px 12px; cursor:pointer; list-style:none; font-size:.74rem; color:var(--muted); }
.mv-sources-sum::-webkit-details-marker { display:none; }
.mv-sources-sum b { color:var(--text); font-weight:700; }
.mv-sources-chev { color:var(--green); transition:transform .18s; }
.mv-sources[open] .mv-sources-chev { transform:rotate(180deg); }
.mv-sources-body { padding:2px 8px 8px; }
/* Shown expanded directly (no summary above the rows) → a little top breathing room. */
.mv-sources-open .mv-sources-body { padding:6px 8px 8px; }
/* Pillar weight tag (how much each pillar drives the unified score). */
.mv-src-w { display:inline-block; margin-left:6px; font-size:.6rem; font-weight:700; color:rgba(var(--muted-rgb),.62);
  background:rgba(var(--on-rgb),.06); border-radius:var(--r-pill); padding:1px 6px; vertical-align:middle; }

/* ── Modern module blocks inside the Market Valuation card (trend + sector heatmap) ── */
.mv-block { margin-top:16px; }   /* divider above the chart removed (operator 2026-07-08) */
/* In-card section head = ONE micro-uppercase style (same as the SUGGESTED-CASH label) so the
   Market-Valuation card's sections stop looking like three different pasted-in widgets. */
.mv-block-h { font-size:.66rem; font-weight:800; text-transform:uppercase; letter-spacing:.08em; color:rgba(var(--muted-rgb),.62); margin-bottom:9px; display:flex; align-items:baseline; gap:8px; flex-wrap:wrap; }
.mv-block-sub { font-size:.62rem; font-weight:600; text-transform:uppercase; letter-spacing:.04em; color:rgba(var(--muted-rgb),.58); }

/* Sector heatmap — responsive grid of tinted cells (green cheap → red expensive) */
.mv-sec-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(98px,1fr)); gap:6px; }
.mv-sec-cell { display:flex; flex-direction:column; gap:2px; padding:9px 10px; border-radius:10px; border:1px solid rgba(var(--on-rgb),.07);
  min-width:0; width:100%; text-align:left; font-family:inherit; cursor:pointer; -webkit-appearance:none; appearance:none;
  transition:transform .12s, box-shadow .12s, filter .12s; }
.mv-sec-cell:hover { transform:translateY(-1px); box-shadow:0 4px 14px rgba(0,0,0,.16); filter:brightness(1.04); }
.mv-sec-cell:active { transform:translateY(0); }
.mv-sec-ico  { font-size:1.7rem; line-height:1; margin-bottom:6px; color:var(--card-sec-ico,#8a978f); }
/* Sector/industry name on up to TWO lines (was nowrap+ellipsis → long names like
   "Communication Services" / "Consumer Discretionary" were cut off unreadably).
   min-height reserves 2 lines so the cells stay aligned in the grid. */
.mv-sec-name { font-size:.68rem; font-weight:600; color:var(--text); line-height:1.22; min-height:2.44em;
  display:-webkit-box; -webkit-line-clamp:2; line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; word-break:break-word; }
.mv-sec-gap  { font-size:.86rem; font-weight:800; font-variant-numeric:tabular-nums; }
.mv-drill-back { background:rgba(var(--on-rgb),.06); border:1px solid var(--fvc-border); border-radius:var(--r-pill); color:var(--text);
  font-family:inherit; font-size:.66rem; font-weight:700; padding:2px 9px; cursor:pointer; margin-right:2px; }
.mv-drill-back:hover { background:rgba(123,178,144,.14); border-color:rgba(123,178,144,.5); }
.mv-drill-sec { font-weight:800; color:var(--text); }
/* Heatmap legend dots (green = undervalued, red = overvalued) — like the filter legend. */
.mv-leg { display:inline-flex; align-items:center; gap:3px; flex-wrap:wrap; }
.mv-leg-dot { display:inline-block; width:7px; height:7px; border-radius:50%; vertical-align:middle; }
.mv-leg-up { background:var(--green,#7BB290); }
.mv-leg-dn { background:var(--red,#e0736b); margin-left:7px; }
.mv-fade { animation:mvFade .22s ease-out; }
@keyframes mvFade { from { opacity:0; transform:translateY(4px); } to { opacity:1; transform:translateY(0); } }
@media (prefers-reduced-motion: reduce) { .mv-fade { animation:none; } }

/* Sector heatmap sized by MARKET SIGNIFICANCE (Marktbedeutung): flex-treemap, tile area ≈ weight.
   Bigger market share → bigger tile; colour still encodes valuation (green cheap → red expensive). */
.mv-sec-treemap { display:flex; flex-wrap:wrap; gap:5px; align-content:flex-start; }
.mv-sec-treemap .mv-sec-cell { width:auto; padding:6px 8px; gap:1px; }
.mv-sec-treemap .mv-sec-ico  { font-size:1.02rem; margin-bottom:2px; }
.mv-sec-treemap .mv-sec-name { font-size:.6rem; min-height:0; line-height:1.15; }
.mv-sec-treemap .mv-sec-gap  { font-size:.72rem; }

/* Major-index valuation charts (look-through over time): QQQ / S&P 500 / MSCI World / DAX / EM / Eurozone */
.mv-idx-block { margin-top:20px; }
/* Die Laenderanalyse stand als EINZIGE Sektion ohne Huelle zwischen lauter Karten und wirkte
   dadurch angeklebt. Gleiche Huelle wie .mv-card, gleicher Rhythmus (2026-07-31). */
.wl-country-block { margin-top:16px; border:1px solid var(--fvc-border); border-radius:16px;
  padding:16px 18px; background:rgba(var(--on-rgb),.03); }
/* Ihre Ueberschrift ist eine SEKTIONS-Ueberschrift, keine Unter-Zwischenzeile: gleiche Groesse und
   Gewicht wie .mv-title/.pro-teaser-title, mit derselben Trennlinie darunter wie .mv-head. Vorher
   stand dort das kleine Versalien-Format der Unterbloecke (10,6 px), was die Sektion optisch eine
   Stufe zu tief einordnete. */
/* Laenderanalyse-Ueberschrift EXAKT wie .mv-sec-h der Nachbar-Sektionen (Betreiber 2026-08-01,
   dritte Meldung: "immer noch andere Schriftgroesse"). Kein Sonderweg mehr. */
.wl-country-block > .mv-block-h { font-size:.72rem; font-weight:800; letter-spacing:.02em;
  text-transform:uppercase; color:var(--text); margin-bottom:6px; padding-bottom:0; border-bottom:none; }
.mv-idx-grid  { display:grid; grid-template-columns:repeat(auto-fill,minmax(210px,1fr)); gap:10px; }
.mv-idx-cell  { display:flex; flex-direction:column; gap:5px; padding:11px 13px; border-radius:12px;
  border:1px solid rgba(var(--on-rgb),.08); background:rgba(var(--on-rgb),.02); text-align:left;
  font-family:inherit; cursor:pointer; -webkit-appearance:none; appearance:none;
  transition:transform .12s, box-shadow .12s, filter .12s; }
.mv-idx-cell:hover  { transform:translateY(-1px); box-shadow:0 4px 14px rgba(0,0,0,.16); filter:brightness(1.05); }
.mv-idx-cell:active { transform:translateY(0); }
.mv-idx-top  { display:flex; align-items:baseline; justify-content:space-between; gap:8px; }
.mv-idx-name { font-size:.82rem; font-weight:700; color:var(--text); }
.mv-idx-tk   { font-size:.6rem; font-weight:700; letter-spacing:.05em; color:rgba(var(--muted-rgb),.6); }
.mv-idx-val  { font-size:.74rem; font-weight:800; font-variant-numeric:tabular-nums; }
.mv-idx-svg  { width:100%; height:auto; display:block; margin-top:2px; border-radius:6px; overflow:hidden; }
.mv-idx-foot { display:flex; justify-content:space-between; font-size:.56rem; font-weight:600; color:rgba(var(--muted-rgb),.5); }

.mv-trend-empty { font-size:.72rem; color:rgba(var(--muted-rgb),.62); line-height:1.45; }
/* Interactive valuation-over-time chart (multi-line, % of fair, crosshair, legend) */
.mv-vchart { position:relative; margin:14px -8px 8px; }   /* bleeds slightly into the card padding → wider chart (operator 2026-07-06; head row removed, zones explain the scale) */
.mv-vsvg { width:100%; height:auto; display:block; touch-action:pan-y; overflow:visible; }
.mv-vtip { position:absolute; top:6px; z-index:3; pointer-events:none; background:var(--surface,#111a14);
  border:1px solid var(--fvc-border,rgba(255,255,255,.14)); border-radius:10px; padding:6px 9px; min-width:120px;
  box-shadow:0 8px 24px rgba(0,0,0,.4); font-size:.7rem; }
.mv-vtd { font-weight:800; color:var(--text); margin-bottom:3px; font-size:.66rem; }
.mv-vtr { display:flex; align-items:center; gap:5px; color:rgba(var(--muted-rgb),.9); white-space:nowrap; line-height:1.5; }
.mv-vtr i { width:7px; height:7px; border-radius:50%; flex:0 0 auto; }
.mv-vtr b { color:var(--text); margin-left:auto; font-variant-numeric:tabular-nums; }

/* Leit-Index-Chart: EIN Chart statt sechs Karten (Betreiber 2026-07-30). Optik kommt von
   .mv-vchart/.mv-vlegend, hier nur die Zusaetze der Index-Badges: aktueller Abstand und das
   Kuerzel als Weg zur ETF-Seite. */
.mv-idx-sub{font-size:.8rem;line-height:1.5;color:var(--dim,#8a988f);margin:0 0 10px}
/* Oberflaechliche Index-Fassung fuer Gaeste: echte Werte als Liste, kein Verlauf. */
.mv-isnap{display:flex;flex-direction:column;gap:1px}
/* Laenderanalyse: eigener Reiter, Karte ohne Zwischenklick (Betreiber 2026-07-30). */
.wl-country-own{margin:0 0 14px}
.wl-country-maph{margin-top:16px}
.wl-country-area .wl-vmap{margin-top:8px}
.mv-isnap-row{display:grid;grid-template-columns:10px minmax(0,1fr) auto;gap:9px;align-items:center;
  padding:8px 9px;border-radius:9px;text-decoration:none;color:inherit;font-size:.9rem}
.mv-isnap-row:hover{background:rgba(123,178,144,.1)}
.mv-isnap-dot{width:10px;height:10px;border-radius:3px;display:block}
.mv-isnap-n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mv-isnap-v{font-weight:800;font-variant-numeric:tabular-nums}
.mv-isnap-t{font-size:.66rem;letter-spacing:.04em;color:var(--dim,#8a988f);
  border:1px solid rgba(255,255,255,.14);border-radius:6px;padding:1px 5px}
.mv-isnap-cta{margin:12px 0 0;border:1px solid rgba(123,178,144,.28);border-radius:12px;padding:12px 13px;
  background:linear-gradient(180deg,rgba(123,178,144,.1),rgba(123,178,144,.03))}
.mv-isnap-cta p{font-size:.82rem;line-height:1.55;color:var(--muted,#9fb0a6);margin:0 0 10px}
.mv-ilegend .mv-vleg{gap:7px}
.mv-ileg-v{font-weight:800;font-variant-numeric:tabular-nums;font-size:.78rem}
.mv-ileg-tk{font-size:.66rem;letter-spacing:.04em;color:var(--dim,#8a988f);text-decoration:none;
  border:1px solid rgba(255,255,255,.14);border-radius:6px;padding:1px 5px;margin-left:2px}
.mv-ileg-tk:hover{color:var(--green,#7BB290);border-color:rgba(123,178,144,.45)}
.mv-vlegend { display:flex; flex-wrap:wrap; gap:5px 8px; align-items:center; margin-top:14px; }
.mv-vleg { display:inline-flex; align-items:center; gap:5px; background:rgba(var(--on-rgb),.05); border:1px solid var(--fvc-border,rgba(var(--on-rgb),.12));
  border-radius:999px; padding:3px 9px; font-size:.68rem; font-weight:600; color:var(--text); cursor:pointer; font-family:inherit; }
.mv-vleg i { width:8px; height:8px; border-radius:50%; }
.mv-vleg.off { opacity:.4; text-decoration:line-through; }
.mv-vleg-yr { font-size:.62rem; color:rgba(var(--muted-rgb),.55); margin-left:auto; }

/* ── Market-valuation MODELS table (Name | Up/Downside | Meaning) ── */
.mv-models { margin-top:4px; }
.mv-mrow { display:grid; grid-template-columns:1fr auto 1fr; align-items:baseline; gap:10px; padding:7px 2px; border-bottom:1px solid rgba(var(--on-rgb),.05); }
.mv-mrow:last-child { border-bottom:0; }
.mv-mhead { padding-top:0; }
.mv-mhead .mv-mname, .mv-mhead .mv-mou, .mv-mhead .mv-mmean { font-size:.6rem; font-weight:700; text-transform:uppercase; letter-spacing:.05em; color:rgba(var(--muted-rgb),.58); }
.mv-mname { font-size:.82rem; font-weight:600; color:var(--text); min-width:0; display:flex; flex-direction:column; gap:1px; }
.mv-mdetail { font-size:.62rem; font-weight:500; color:rgba(var(--muted-rgb),.6); line-height:1.3; }
/* Model name = dotted-underline tooltip term (same UI as jargon terms; tap → fvcInfoPop bubble). */
.mv-mterm { align-self:flex-start; border-bottom:1px dotted var(--green-b, rgba(123,178,144,.55)); cursor:help;
  -webkit-tap-highlight-color:transparent; }
.mv-mterm:hover { border-bottom-color:var(--green); }
.mv-mou { font-size:.86rem; font-weight:800; font-variant-numeric:tabular-nums; white-space:nowrap; text-align:center; }
.mv-mmean { font-size:.72rem; color:rgba(var(--muted-rgb),.82); text-align:right; }
.mv-mrow-na .mv-mou, .mv-mrow-na .mv-mmean { color:rgba(var(--muted-rgb),.45); font-weight:600; }
.mv-mdivider { height:0; border-top:2px solid rgba(var(--on-rgb),.16); margin:4px 0 0; }
.mv-mtotal { padding-top:9px; }
.mv-mtotal .mv-mname { font-size:.9rem; font-weight:800; }
.mv-mtotal .mv-mou { font-size:1rem; }
.mv-mtotal .mv-mmean { font-size:.78rem; font-weight:700; color:var(--text); }
.mv-src { display:flex; align-items:center; justify-content:space-between; gap:10px; width:100%; padding:9px 8px; font-size:.74rem; color:var(--muted); border:0; border-top:1px solid var(--fvc-border); border-radius:0; outline:none; background:none; font-family:inherit; text-align:left; -webkit-appearance:none; appearance:none; }
.mv-src:first-child { border-top:0; }
.mv-src-lbl { color:rgba(var(--muted-rgb),.74); }
.mv-src-v { display:flex; align-items:center; gap:7px; white-space:nowrap; }
.mv-src-v b { font-weight:700; color:var(--text); }
.mv-src-note { color:var(--dim); font-size:.68rem; }
.mv-src-tag { font-size:.62rem; padding:1px 7px; border-radius:var(--r-pill); border:1px solid var(--fvc-border); }
.mv-src-btn { cursor:pointer; transition:background .15s; }
.mv-src-btn:hover { background:var(--green-d); }
.mv-src-go { color:var(--green); font-size:.64rem; font-weight:600; }
/* Technical-signal dashboard popup */
.fvc-signal-ov { position:fixed; inset:0; z-index:9000; background:rgba(5,8,6,.78); backdrop-filter:blur(4px); display:none; align-items:center; justify-content:center; padding:18px; }
.fvc-signal-ov.open { display:flex; }
.fvc-signal-modal { width:min(1100px,100%); height:min(92vh,900px); background:var(--bg); border:1px solid var(--fvc-border-strong); border-radius:var(--r); overflow:hidden; display:flex; flex-direction:column; box-shadow:var(--shadow); }
.fvc-signal-bar { display:flex; align-items:center; gap:12px; padding:10px 14px; border-bottom:1px solid var(--fvc-border); background:var(--glass); }
.fvc-signal-ttl { font-size:.82rem; font-weight:600; color:var(--text); }
.fvc-signal-open { margin-left:auto; font-size:.74rem; color:var(--green); text-decoration:none; }
.fvc-signal-x { background:none; border:0; color:var(--muted); font-size:1.1rem; cursor:pointer; padding:2px 6px; line-height:1; }
.fvc-signal-x:hover { color:var(--text); }
.fvc-signal-frame { flex:1; width:100%; border:0; background:var(--bg); }

/* ── Model Cash Range — glass bar under the diversification panel ───────── */
/* Was a framed glass box INSIDE the card (card-in-card → the "pasted together" look, operator
   2026-07-06). Now a plain section like every other in-card block: divider on the bottom only. */
.mv-cashbar { margin:2px 0 16px; padding:0 0 14px; border:0; border-bottom:1px solid rgba(var(--on-rgb),.08); border-radius:0; background:none; }
.mv-cashbar-paused { border-color:rgba(var(--on-rgb),.10); background:linear-gradient(158deg, rgba(var(--on-rgb),.05), rgba(var(--on-rgb),.01)); }
.mv-cashbar-h { display:flex; align-items:baseline; justify-content:space-between; gap:12px; }
.mv-cashbar-lbl { font-size:.66rem; font-weight:800; letter-spacing:.08em; text-transform:uppercase; color:rgba(var(--muted-rgb),.62); white-space:nowrap; }
.mv-cashbar-val { font-size:1.6rem; font-weight:800; color:#7BB290; line-height:1; white-space:nowrap; } .mv-cashbar-val small { font-size:.8rem; font-weight:700; }
.mv-cashbar-track { position:relative; height:10px; border-radius:999px; background:rgba(var(--on-rgb),.06); margin:14px 0 0; overflow:hidden; }
.mv-cashbar-base { position:absolute; left:0; top:0; bottom:0; border-radius:999px 0 0 999px; background:rgba(123,178,144,.28); }   /* 0→min, anchored at 0 */
.mv-cashbar-band { position:absolute; top:0; bottom:0; border-radius:999px; background:linear-gradient(90deg,#7BB290,#9ed3b0); box-shadow:0 0 12px rgba(123,178,144,.5); }   /* recommended range */
.mv-cashbar-axis { display:flex; justify-content:space-between; font-size:.58rem; color:rgba(var(--muted-rgb),.64); }
.mv-cashbar-note { font-size:.62rem; color:rgba(var(--muted-rgb),.70); margin-top:8px; font-style:italic; }

/* Combined-status badge colour must follow the valuation scale (two-class
   specificity beats the .mv-combined-status base background). */
.mv-combined-status.mv-z-cheap, .mv-combined-status.mv-z-deepundervalued { background:#2e9e63; color:#eafff2; }
.mv-combined-status.mv-z-undervalued { background:#7BB290; color:#0e1512; }
.mv-combined-status.mv-z-fair, .mv-combined-status.mv-z-fairvalue { background:#c9cf6a; color:#0e1512; }
.mv-combined-status.mv-z-expensive { background:#e0a24d; color:#0e1512; }
.mv-combined-status.mv-z-veryexpensive { background:#e0584d; color:#fff; }
.mv-combined-status.mv-z-mixedsignal, .mv-combined-status.mv-z-dataincomplete { background:rgba(var(--on-rgb),.12); color:var(--text); }

/* ── Sprach-Umschalter in den Hubs (Bibliothek/Rechner) ── */
.lib-lang-switch { display:flex; gap:8px; margin-bottom:16px; }
.lib-lang-switch a { font-size:13px; font-weight:600; padding:7px 15px; border-radius:var(--r-pill); border:1px solid var(--fvc-border); color:var(--muted); text-decoration:none; transition:border-color .15s,color .15s; }
.lib-lang-switch a.on { background:var(--green-d); border-color:var(--green-b); color:var(--green); }
.lib-lang-switch a:hover { border-color:var(--fvc-border-strong); }
/* ── Sprachwahl-Popup (Footer) ── */
.fvc-lang-ov { position:fixed; inset:0; z-index:9100; background:rgba(5,8,6,.74); backdrop-filter:blur(3px); display:none; align-items:center; justify-content:center; padding:20px; }
.fvc-lang-ov.open { display:flex; }
.fvc-lang-box { position:relative; width:min(380px,100%); background:var(--bg); border:1px solid var(--fvc-border-strong); border-radius:var(--r); box-shadow:var(--shadow); padding:26px 22px; text-align:center; }
.fvc-lang-h { font-size:17px; font-weight:700; color:var(--text); margin-bottom:18px; line-height:1.3; }
.fvc-lang-h span { font-size:13px; font-weight:500; color:var(--muted); }
.fvc-lang-opts { display:flex; gap:12px; }
.fvc-lang-opts a { flex:1; display:flex; flex-direction:column; align-items:center; gap:7px; padding:18px 10px; border:1px solid var(--fvc-border); border-radius:var(--r-sm); background:var(--glass); color:var(--text); text-decoration:none; font-weight:600; font-size:15px; transition:border-color .15s,background .15s; }
.fvc-lang-opts a:hover,.fvc-lang-opts a.last { border-color:var(--green-b); background:var(--green-d); }
.fvc-lang-opts .fl { font-size:34px; line-height:1; }
.fvc-lang-x { position:absolute; top:10px; right:12px; background:none; border:0; color:var(--muted); font-size:1.1rem; cursor:pointer; }
.fvc-lang-x:hover { color:var(--text); }

/* ── Strategy / legend chips: plain pills like every other filter chip, with a
   subtle inline "?" that opens the exact-setup bubble. No box, no attached
   segment — same flat design as the Region/Sort/Evidence chips. ──────────────── */
.fvc-strategy-chip { display:inline-flex; align-items:center; gap:6px; }
.fvc-legend-q {
  display:inline-flex; align-items:center; justify-content:center;
  width:16px; height:16px; border-radius:50%;
  font-size:.66rem; font-weight:800; line-height:1; cursor:pointer;
  color:inherit; opacity:.55; background:rgba(127,127,127,.16);
  touch-action:manipulation; transition:opacity .15s, background .15s;
}
.fvc-legend-q:hover, .fvc-legend-q:focus-visible { opacity:1; background:rgba(123,178,144,.28); outline:none; }

/* Strategy "?" bubble — centred popup (mirrors .fvc-lang-ov). */
.fvc-strat-ov { position:fixed; inset:0; z-index:9100; background:rgba(5,8,6,.74); backdrop-filter:blur(3px); display:none; align-items:center; justify-content:center; padding:20px; }
.fvc-strat-ov.open { display:flex; }
.fvc-strat-box { position:relative; width:min(440px,100%); max-height:86vh; overflow-y:auto; background:var(--bg); border:1px solid var(--fvc-border-strong,rgba(123,178,144,.4)); border-radius:var(--r,16px); box-shadow:var(--shadow,0 24px 80px rgba(0,0,0,.6)); padding:24px 22px; }
.fvc-strat-x { position:absolute; top:10px; right:12px; background:none; border:0; color:var(--muted); font-size:1.1rem; cursor:pointer; touch-action:manipulation; }
.fvc-strat-x:hover { color:var(--text); }
.fvc-strat-h { font-size:1.12rem; font-weight:800; color:var(--text); margin:0 26px 6px 0; }
.fvc-strat-who { font-size:.86rem; line-height:1.5; color:var(--muted); margin:0 0 16px; }
.fvc-strat-sub { font-size:.66rem; font-weight:800; letter-spacing:.12em; text-transform:uppercase; color:var(--fvc-green,#7BB290); margin:0 0 9px; }
.fvc-strat-list { list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:7px; }
.fvc-strat-list li { position:relative; padding-left:20px; font-size:.86rem; line-height:1.45; color:var(--text); }
.fvc-strat-list li::before { content:'✓'; position:absolute; left:0; top:0; color:var(--fvc-green,#7BB290); font-weight:800; font-size:.8rem; }
.fvc-strat-note { margin:14px 0 0; font-size:.78rem; line-height:1.45; color:var(--muted); border-left:2px solid rgba(123,178,144,.35); padding-left:10px; }
.fvc-strat-disc { margin:14px 0 0; font-size:.7rem; line-height:1.4; color:var(--dim,rgba(var(--muted-rgb),.5)); }

/* ── How-it-works tutorial overlay (#42) ─────────────────────────────────── */
.fvtut-overlay { position:fixed; inset:0; z-index:1200; display:flex; align-items:center;
  justify-content:center; padding:20px; background:rgba(8,12,10,.72);
  backdrop-filter:blur(4px); -webkit-backdrop-filter:blur(4px);
  opacity:0; transition:opacity .2s ease; }
.fvtut-overlay.open { opacity:1; }
.fvtut-card { position:relative; width:100%; max-width:430px; background:#121a16;
  border:1px solid rgba(123,178,144,.28); border-radius:16px; padding:30px 22px 20px;
  box-shadow:0 24px 70px rgba(0,0,0,.55); text-align:center;
  /* never exceed the viewport — scroll inside instead of sticking out top/bottom */
  max-height:calc(100dvh - 40px); overflow-y:auto; overflow-x:hidden; overscroll-behavior:contain;
  transform:translateY(14px) scale(.97); transition:transform .22s cubic-bezier(.3,1.2,.5,1); }
.fvtut-overlay.open .fvtut-card { transform:none; }
/* Subtle header + the cloned animated hero stage hosted inside the popup (#1). */
.fvtut-head { font-size:.66rem; font-weight:800; letter-spacing:.14em; text-transform:uppercase;
  color:var(--fvc-green,#7BB290); margin:0 0 4px; }
.fvtut-slide-head { font-size:1.08rem; font-weight:800; color:var(--text); margin:0 0 10px; line-height:1.25; }
/* sell-logic tutorial slide */
.fvtut-sell { display:flex; flex-direction:column; gap:14px; padding:10px 4px; text-align:left; }
.fvtut-sellrow { display:flex; gap:12px; align-items:flex-start; }
.fvtut-sellico { font-size:1.5rem; flex:0 0 auto; line-height:1.1; }
.fvtut-selltxt { display:flex; flex-direction:column; gap:3px; }
.fvtut-selltxt b { font-size:.9rem; color:var(--text); }
.fvtut-selltxt span { font-size:.78rem; color:rgba(var(--muted-rgb),.85); line-height:1.45; }
.fvtut-stage-host { width:100%; overflow:hidden; }
.fvtut-stage { max-width:100%; }
/* evidence note above the value-gap chart (tutorial slide 1) */
.fvh-evnote { margin:0 0 12px; font-size:.8rem; line-height:1.45; text-align:center; color:rgba(var(--muted-rgb),.78); }
.fvh-evnote b { color:var(--fvc-green,#7BB290); font-weight:700; }
.fvh-evlink { background:none; border:none; padding:0; cursor:pointer; color:var(--fvc-green,#7BB290); font:inherit; font-weight:700; text-decoration:underline; text-underline-offset:2px; }
.fvtut-stage { margin:0 auto; }   /* the cloned .fvh-tutor keeps its own aspect-ratio/min-height */
.fvtut-cap { margin:14px 2px 0; font-size:.9rem; line-height:1.5; color:rgba(var(--muted-rgb),.8);
  min-height:54px; text-align:center; }
.fvtut-x { position:absolute; top:10px; right:12px; width:34px; height:34px; border:none;
  background:transparent; color:rgba(var(--muted-rgb),.55); font-size:1.7rem; line-height:1;
  cursor:pointer; border-radius:10px; -webkit-tap-highlight-color:transparent; }
.fvtut-x:hover { color:var(--text,var(--text)); background:rgba(var(--on-rgb),.05); }
.fvtut-ic { font-size:2.6rem; line-height:1; margin:0 0 4px; }
.fvtut-t { margin:8px 0 0; font-size:1.18rem; font-weight:800; color:var(--text,var(--text)); }
.fvtut-b { margin:11px 0 0; font-size:.92rem; line-height:1.55; color:rgba(var(--muted-rgb),.74); min-height:74px; }
.fvtut-b b { color:var(--text,var(--text)); font-weight:700; }
.fvtut-dots { display:flex; gap:8px; justify-content:center; margin:18px 0 0; }
.fvtut-dot { width:8px; height:8px; border-radius:50%; background:rgba(var(--muted-rgb),.22);
  cursor:pointer; transition:background .15s, transform .15s; }
.fvtut-dot.on { background:var(--fvc-green,#7BB290); transform:scale(1.25); }
.fvtut-nav { display:flex; gap:10px; margin:20px 0 0; }
.fvtut-nav button { flex:1; font-family:inherit; font-weight:800; font-size:.9rem;
  border-radius:12px; padding:12px 16px; cursor:pointer; border:1px solid transparent;
  -webkit-tap-highlight-color:transparent; transition:filter .15s, background .15s; }
.fvtut-back { background:transparent; border-color:rgba(var(--muted-rgb),.2); color:rgba(var(--muted-rgb),.8); }
.fvtut-back:hover { background:rgba(var(--on-rgb),.05); }
.fvtut-next { background:var(--fvc-green,#7BB290); color:#0e1512; box-shadow:0 6px 20px rgba(123,178,144,.28); }
.fvtut-next:hover { filter:brightness(1.06); }

/* ── Tutorial: final "Share your finds" slide (built in JS) ── */
.fvh-scene-share { padding:6px 4px; }
.fvh-share2 { display:flex; flex-direction:column; height:100%; width:100%; }
.fvh-share-stage { flex:1 1 auto; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:30px; }
.fvh-share-btnwrap { position:relative; display:inline-flex; }
/* the demo button reuses the card's .card-btn.share-btn look, just scaled up + frozen */
.fvh-share-demo-btn { transform:scale(1.55); transform-origin:center; pointer-events:none;
  box-shadow:0 10px 26px rgba(123,178,144,.30); }
.fvh-scene-share.active .fvh-share-demo-btn { animation:fvhShareTap 2.6s ease both; }
.fvh-cur-share { left:50%; top:50%; margin-left:-3px; margin-top:-1px; }
.fvh-scene-share.active .fvh-cur-share { animation:fvhShareCur 2.6s ease both; }
.fvh-share-apps { display:flex; gap:14px; }
.fvh-sapp { width:50px; height:50px; border-radius:14px; display:flex; align-items:center; justify-content:center;
  color:#fff; opacity:0; transform:translateY(10px) scale(.82); box-shadow:0 6px 18px rgba(0,0,0,.28); }
.fvh-sapp svg { width:27px; height:27px; }
.fvh-scene-share.active .fvh-sapp { animation:fvhSappPop .5s cubic-bezier(.3,1.4,.5,1) both; animation-delay:calc(1.45s + var(--i) * .14s); }
.fvh-sapp-ig { background:linear-gradient(45deg,#FEDA75 0%,#FA7E1E 22%,#D62976 50%,#962FBF 76%,#4F5BD5 100%); }
.fvh-sapp-tt { background:#010101; border:1px solid rgba(255,255,255,.16); }
.fvh-sapp-wa { background:#25D366; }
/* ── Tutorial: Pro-tool screenshot slides (Diversification · Market valuation · Sector heatmap) ──
   Each slide shows a REAL portrait/landscape screenshot of a Pro tool, fully contained inside the
   stage (object-fit:contain → never cropped, never overflowing), rounded, with a small "Pro" badge. */
.fvh-scene-proimg { padding:6px 4px; }
.fvh-proimg-wrap { flex:1 1 auto; min-height:0; width:100%;
  display:flex; align-items:center; justify-content:center; }
.fvh-proimg-frame { position:relative; display:flex; max-width:100%; max-height:100%; }
.fvh-proimg-img { display:block; width:auto; height:auto; max-width:100%; max-height:340px;
  object-fit:contain; border-radius:14px; background:#0e1512;
  border:1px solid rgba(123,178,144,.20); box-shadow:0 12px 32px rgba(0,0,0,.42); }
.fvh-proimg-badge { position:absolute; top:8px; right:8px; z-index:2;
  font-size:.6rem; font-weight:800; letter-spacing:.05em; line-height:1; padding:4px 8px;
  border-radius:8px; color:#0e1512; background:var(--fvc-green,#7BB290);
  box-shadow:0 4px 12px rgba(0,0,0,.32); }
.fvh-scene-proimg.active .fvh-proimg-frame { animation:fvhProImgIn .5s cubic-bezier(.3,1.2,.5,1) both; }
@keyframes fvhProImgIn { from { opacity:0; transform:translateY(8px) scale(.97); } to { opacity:1; transform:none; } }
@media (prefers-reduced-motion: reduce) { .fvh-scene-proimg.active .fvh-proimg-frame { animation:none; } }
/* ── tutorial slide: switch search modes (magnifier ↔ AI chat) ── */
.fvh-scene-aiswitch .fvh-tour { display:flex; flex-direction:column; align-items:center; }
.fvh-aisw-bar { position:relative; display:flex; align-items:center; gap:9px; width:min(300px,86%); margin:22px auto 0;
  background:rgba(var(--on-rgb),.06); border:1px solid rgba(123,178,144,.35); border-radius:999px; padding:8px 12px; }
.fvh-aisw-ico { position:relative; flex:0 0 auto; width:30px; height:30px; border-radius:50%; display:inline-flex; align-items:center; justify-content:center;
  background:linear-gradient(135deg, rgba(205,214,230,.16), rgba(123,178,144,.14)); border:1px solid rgba(123,178,144,.4); color:var(--fvc-green,#7BB290); }
.fvh-aisw-lupe, .fvh-aisw-star { position:absolute; inset:0; display:inline-flex; align-items:center; justify-content:center; }
.fvh-aisw-ico svg { width:16px; height:16px; }
.fvh-aisw-div { flex:0 0 auto; width:1px; height:18px; background:rgba(123,178,144,.32); }
.fvh-aisw-ph { position:relative; flex:1 1 auto; min-width:0; height:1.15em; }
.fvh-aisw-ph-s, .fvh-aisw-ph-a { position:absolute; left:0; top:0; white-space:nowrap; color:rgba(var(--muted-rgb),.6); font-size:.84rem; }
.fvh-cur-aisw { position:absolute; left:17px; top:24px; width:20px; height:20px; color:#fff; opacity:0; pointer-events:none; }
.fvh-cur-aisw svg { width:20px; height:20px; filter:drop-shadow(0 1px 2px rgba(0,0,0,.5)); }
.fvh-aisw-chat { display:flex; align-items:center; gap:9px; width:min(300px,86%); margin:16px auto 0; padding:9px 13px; border-radius:14px;
  background:rgba(123,178,144,.1); border:1px solid rgba(123,178,144,.25); opacity:0; }
.fvh-aisw-av { flex:0 0 auto; color:var(--fvc-green,#7BB290); font-weight:800; }
.fvh-aisw-msg { font-size:.82rem; color:var(--text); text-align:left; }
.fvh-scene-aiswitch.active .fvh-aisw-lupe { animation:fvhAiswLupe 4.2s ease-in-out infinite; }
.fvh-scene-aiswitch.active .fvh-aisw-star { animation:fvhAiswStar 4.2s ease-in-out infinite; }
.fvh-scene-aiswitch.active .fvh-aisw-ico  { animation:fvhAiswIco 4.2s ease-in-out infinite; }
.fvh-scene-aiswitch.active .fvh-aisw-ph-s { animation:fvhAiswPhS 4.2s ease-in-out infinite; }
.fvh-scene-aiswitch.active .fvh-aisw-ph-a { animation:fvhAiswPhA 4.2s ease-in-out infinite; }
.fvh-scene-aiswitch.active .fvh-cur-aisw  { animation:fvhAiswCur 4.2s ease-in-out infinite; }
.fvh-scene-aiswitch.active .fvh-aisw-chat { animation:fvhAiswChat 4.2s ease-in-out infinite; }
@keyframes fvhAiswLupe { 0%,40%{opacity:1} 50%,92%{opacity:0} 100%{opacity:1} }
@keyframes fvhAiswStar { 0%,40%{opacity:0} 50%,92%{opacity:1} 100%{opacity:0} }
@keyframes fvhAiswIco  { 0%,44%{transform:scale(1)} 48%{transform:scale(.86)} 52%,100%{transform:scale(1)} }
@keyframes fvhAiswPhS  { 0%,40%{opacity:1} 50%,92%{opacity:0} 100%{opacity:1} }
@keyframes fvhAiswPhA  { 0%,40%{opacity:0} 50%,92%{opacity:1} 100%{opacity:0} }
@keyframes fvhAiswCur  { 0%{opacity:0;transform:translate(10px,8px)} 18%{opacity:1} 38%{transform:translate(0,0) scale(1)} 46%{transform:translate(0,0) scale(.8)} 54%{transform:translate(0,0) scale(1)} 78%{opacity:1} 90%,100%{opacity:0;transform:translate(0,0)} }
@keyframes fvhAiswChat { 0%,50%{opacity:0;transform:translateY(8px)} 60%,90%{opacity:1;transform:translateY(0)} 98%,100%{opacity:0;transform:translateY(8px)} }
@media (prefers-reduced-motion: reduce) {
  .fvh-scene-aiswitch.active .fvh-aisw-lupe, .fvh-scene-aiswitch.active .fvh-aisw-star, .fvh-scene-aiswitch.active .fvh-aisw-ico,
  .fvh-scene-aiswitch.active .fvh-aisw-ph-s, .fvh-scene-aiswitch.active .fvh-aisw-ph-a, .fvh-scene-aiswitch.active .fvh-cur-aisw,
  .fvh-scene-aiswitch.active .fvh-aisw-chat { animation:none; }
  .fvh-scene-aiswitch .fvh-aisw-lupe { opacity:0; } .fvh-scene-aiswitch .fvh-aisw-star { opacity:1; }
  .fvh-scene-aiswitch .fvh-aisw-ph-s { opacity:0; } .fvh-scene-aiswitch .fvh-aisw-ph-a { opacity:1; } .fvh-scene-aiswitch .fvh-aisw-chat { opacity:1; }
}
.fvh-sapp-ml { background:linear-gradient(180deg,#54C7FB 0%,#1A8CF5 58%,#0A78F0 100%); }  /* Apple-Mail blue */
@keyframes fvhShareTap { 0%,40% { transform:scale(1.55); } 50% { transform:scale(1.38); } 60%,100% { transform:scale(1.55); } }
@keyframes fvhShareCur {
  0%   { opacity:0; transform:translate(42px,36px); }
  22%  { opacity:1; transform:translate(14px,12px); }
  44%  { opacity:1; transform:translate(2px,2px); }
  50%  { opacity:1; transform:translate(0,0) scale(.84); }
  60%  { opacity:1; transform:translate(2px,2px) scale(1); }
  86%  { opacity:1; transform:translate(2px,2px); }
  100% { opacity:0; transform:translate(2px,2px); }
}
@keyframes fvhSappPop { from { opacity:0; transform:translateY(10px) scale(.82); } to { opacity:1; transform:translateY(0) scale(1); } }

/* ════════════════════════════════════════════════════════════════════════════
   LIGHT THEME (operator-requested switcher). DEFAULT = DARK; light is opt-in via
   the header sun/moon toggle (persisted under the fresh key 'fvc-theme2', so any
   stale 'fvc-theme'=light from the first attempt is ignored → everyone defaults to
   dark). Flips ONLY the theme channels + a few non-tokenised surfaces, so dark mode
   stays pixel-identical.
   ════════════════════════════════════════════════════════════════════════════ */
html[data-theme="light"] {
  color-scheme: light;
  --bg:        #eceef2;          /* soft NEUTRAL grey-white so the white cards clearly lift off it */
  --hdr-bg:    #e6e9ee;
  --on-rgb:    24,28,34;         /* NEUTRAL dark-slate overlays (kills the green cast) */
  --text-rgb:  17,21,27;         /* primary text → near-black, maximum comfortable contrast */
  --muted-rgb: 20,25,32;         /* secondary text channel → near-black so even low-alpha greys stay legible */
  --surface:   #ffffff;          /* solid panels → white */
  --hdr-rgb:   238,241,245;      /* header background channel */
  --green:     #1f8a52;          /* legible as text on white AND as a fill under white text */
  --green2:    #17935a;
  --green-d:   rgba(31,138,82,.12);
  --green-b:   rgba(31,138,82,.40);
  --red:       #d23b3b;
  --amber:     #b06a12;
  --fvc-accent:#1f8a52;
  --fvc-border:        rgba(24,28,34,.20);   /* crisper element edges → clearer structure */
  --glass-b:           rgba(24,28,34,.20);
  --fvc-border-strong: rgba(31,138,82,.42);
  --muted:     rgba(var(--muted-rgb),.95);   /* stronger secondary text on light */
  --dim:       rgba(var(--muted-rgb),.88);   /* faint detail greys (citations/subtitles) — dark on light */
  --shadow:    0 6px 24px rgba(20,28,38,.10);
}
/* Light-mode READABILITY pass: many small/secondary texts use low-alpha greys that read
   fine on the dark bg but wash out on white. Lift them to a strong, comfortable contrast.
   (Dark mode is untouched — these rules are scoped to [data-theme="light"].) */
html[data-theme="light"] .fvc-search-bar input::placeholder,
html[data-theme="light"] .fvc-chat-inputbar textarea::placeholder,
html[data-theme="light"] .fvc-ai-inputbar textarea::placeholder { color:rgba(var(--muted-rgb),.66); }
html[data-theme="light"] .fvc-context-line .fvc-ctx-count,
html[data-theme="light"] .fvc-context-line .fvc-ctx-sort,
html[data-theme="light"] .fvc-ai-head-label,
html[data-theme="light"] .fvc-ai-picks-lbl,
html[data-theme="light"] .mv-cash-note,
html[data-theme="light"] .mv-fine,
html[data-theme="light"] .mv-chip,
html[data-theme="light"] .mv-cashbar-lbl,
html[data-theme="light"] .mv-cashbar-axis,
html[data-theme="light"] .ev-refs li,
html[data-theme="light"] .ev-ebook-tx > span,
html[data-theme="light"] .modal-section.aimoat .modal-fine,
html[data-theme="light"] .fvc-wlb-rec,
html[data-theme="light"] .ops-an-note { color:rgba(var(--muted-rgb),.92); }
/* AI CHAT PANEL — its base background is a hardcoded DARK glass (rgba(12,19,15,.72)), so in
   light mode the near-black --text sat on a dark panel = unreadable (operator screenshot).
   Give the panel a LIGHT glass surface in light mode; everything inside already uses theme
   tokens (--text, --on-rgb overlays, --fvc-green=#1f8a52), so it then reads correctly.
   Dark mode is untouched (scoped to [data-theme="light"]). */
html[data-theme="light"] .fvc-ai-panel {
  background:rgba(255,255,255,.94);
  border:1px solid rgba(24,28,34,.16);
  box-shadow:0 24px 70px rgba(20,28,38,.22); }
html[data-theme="light"] .fvc-ai-head   { border-bottom:1px solid rgba(24,28,34,.10); }
html[data-theme="light"] .fvc-ai-panel-foot { border-top:1px solid rgba(24,28,34,.10); }
html[data-theme="light"] .fvc-ai-head-div { background:rgba(31,138,82,.30); }
/* A touch more card separation + a hairline so cards are crisp on the light canvas. */
html[data-theme="light"] .stock-card { border:1px solid rgba(24,28,34,.09); }
/* Calmer page texture so reading is easy (the grid was a bit busy on white). */
html[data-theme="light"] body::before { opacity:.32; }
/* Non-tokenised solid dark-hex surfaces → light equivalents. */
html[data-theme="light"] .share-preview-card,
html[data-theme="light"] .sm-preview-wrap,
html[data-theme="light"] .fvtut-card,
html[data-theme="light"] #fvc-tip { background:#fff; }
html[data-theme="light"] .ev-table thead th { background:#eef1ec; color:#2e8159; }
html[data-theme="light"] .ev-fig img { background:#f3f5f0; }
/* Evidence popup dark panels → light (chart frame + accordions). */
html[data-theme="light"] .bt-chart,
html[data-theme="light"] .ev-acc { background:rgba(28,32,38,.03); }
/* Evidence/backtest chart labels are near-white SVG text — recolor ONLY the near-white
   fills so axis/heading text stays readable on light (colored value labels keep hue). */
html[data-theme="light"] .ev-svg text[fill^="rgba(233"],
html[data-theme="light"] .ev-svg tspan[fill^="rgba(233"],
html[data-theme="light"] .bt-chart svg text[fill^="rgba(233"] { fill:rgba(var(--muted-rgb),.78); }
/* Header hairline + softened page grid on light. */
html[data-theme="light"] .hdr { border-bottom:1px solid rgba(28,32,38,.10); }
html[data-theme="light"] body::before { opacity:.5; }
/* Cards: solid white + soft shadow so they lift cleanly off the light canvas. */
html[data-theme="light"] .stock-card {
  background:#ffffff;
  box-shadow:0 1px 2px rgba(20,28,38,.05), 0 4px 14px rgba(20,28,38,.06);
}
/* Valuation gauge needle/hub are hardcoded near-white (#eef4f0) — CSS overrides the
   SVG presentation attribute so they're visible on light. */
html[data-theme="light"] .mv-gauge-svg line   { stroke:var(--text); }
html[data-theme="light"] .mv-gauge-svg circle { fill:var(--text); }
/* Green-filled buttons hardcode near-black text → force white on light. */
html[data-theme="light"] .hdr-btn.primary,
html[data-theme="light"] .btn-green,
html[data-theme="light"] .filter-btn.apply,
html[data-theme="light"] .card-btn.primary-btn,
html[data-theme="light"] .sm-fmt-btn.active,
html[data-theme="light"] .sm-share-btn,
html[data-theme="light"] .hdr-pro-btn,
html[data-theme="light"] .hdr-pro-btn.is-pro,
html[data-theme="light"] .login-btn,
html[data-theme="light"] .fvc-page-btn.active,
html[data-theme="light"] .wl-count-badge,
html[data-theme="light"] .wl-btn.wl-active,
html[data-theme="light"] .wl-empty-starter { color:#ffffff; }   /* browse ist jetzt Outline (gruener Text passt in hell) */
/* Pale-blue accent text is invisible on white → deepen to a readable blue. */
html[data-theme="light"] .badge-blue,
html[data-theme="light"] .src-flag-fv,
html[data-theme="light"] .card-btn.share-btn,
html[data-theme="light"] .card-btn.share-btn.share-btn-hot { color:#2f6fd0; }

/* ── Hero section (fvc-hero-section.html) — light overrides. The hero is its own
   inline stylesheet; the channel swaps already flipped its overlays/text/green, so
   here we only relight the SOLID dark panels + set the green + on-green values. ── */
html[data-theme="light"] { --fvc-green:#1f8a52; --on-green:#ffffff; }
/* Main hero "stage" panel (the big dark gradient card) → light. */
html[data-theme="light"] .fvh-stage {
  background:
    radial-gradient(120% 95% at 90% -10%, rgba(31,138,82,.10), transparent 58%),
    linear-gradient(162deg, #ffffff, #eef1f4);
  border-color:rgba(28,32,38,.12);
  box-shadow:0 18px 50px rgba(20,28,38,.10), inset 0 1px 0 rgba(255,255,255,.6);
}
/* Search bar + autocomplete dropdown. Softer border/shadow on light so it doesn't
   pop too hard (operator: "hebt sich arg weit ab, feiner"). */
html[data-theme="light"] .fvc-search-bar {
  background:#ffffff;
  border-color:rgba(28,32,38,.10);
  box-shadow:0 2px 12px rgba(20,28,38,.07);
}
html[data-theme="light"] .fvc-search-bar:focus-within {
  box-shadow:0 0 0 3px rgba(31,138,82,.15), 0 4px 16px rgba(20,28,38,.10);
}
html[data-theme="light"] .fvc-suggest    { background:#ffffff; }
/* Pro teaser (Market Valuation & Cash Range locked card) → light. */
html[data-theme="light"] .mv-card,
html[data-theme="light"] .wl-div-panel,
html[data-theme="light"] .wl-sec-panel {
  background:
    radial-gradient(120% 130% at 90% 0%, rgba(31,138,82,.08), transparent 60%),
    linear-gradient(160deg, #ffffff, #eef1f4);
  border:1px solid rgba(24,28,34,.10);
}
/* Hero H1 accent ("Fair Value") — dark-mode mint + glow looks washed/ugly on light. */
html[data-theme="light"] .fvh-h1 em { color:#1f8a52; text-shadow:none; }
/* Hero demo-chart SVG labels ("FAIR VALUE $118", "+90% VALUE GAP") hardcode the
   dark-mode mint #9ed3b0 → washed out on light. Brand green + stronger axis text. */
html[data-theme="light"] .fvh-svg .t-gk,
html[data-theme="light"] .fvh-svg .t-gap,
html[data-theme="light"] .fvh-svg .t-v.g { fill:#1f8a52; }
html[data-theme="light"] .fvh-svg .t-ax { fill:rgba(var(--muted-rgb),.72); }
/* Card FV-marker label keeps a mint glow (dark-mode text-shadow) → fuzzy on white. */
html[data-theme="light"] .vml-fv-label { text-shadow:none; }
/* Alert error text: salmon #e0816f is under-contrast on white → theme red. */
html[data-theme="light"] .fvc-alert-msg.err { color:var(--red); }
/* Detail price-chart (histfv): axis text, in-chart "Forecast" label and the grid are
   dark-mode hardcodes (#9aa6a0 / #9fb6cf / white-alpha strokes) → invisible or washed
   on light. CSS wins over SVG presentation attributes; dark mode untouched. */
html[data-theme="light"] .histfv-svg text[fill="#9aa6a0"] { fill:rgba(var(--muted-rgb),.80); }
html[data-theme="light"] .histfv-svg text[fill="#9fb6cf"] { fill:#4a6d96; }
html[data-theme="light"] .histfv-svg line[stroke="rgba(255,255,255,.045)"] { stroke:rgba(24,28,34,.07); }
html[data-theme="light"] .histfv-svg line[stroke="rgba(255,255,255,.2)"]  { stroke:rgba(24,28,34,.20); }
/* Sticky mobile watchlist bar (bottom) was dark → light so its text is readable. */
html[data-theme="light"] .fvc-wl-bar {
  background:rgba(248,249,251,.97);
  border-top-color:rgba(28,32,38,.12);
  box-shadow:0 -6px 24px rgba(20,28,38,.10);
}
/* "Go Pro" header button → solid green CTA (was a faint tint → invisible white text). */
html[data-theme="light"] .hdr-pro-btn { background:var(--green); border-color:var(--green); }
html[data-theme="light"] .hdr-pro-btn:hover { background:var(--green2); border-color:var(--green2); }
/* Pro ACTIVE chip in light mode — translucent green fill + green text (must beat the
   solid "Go Pro" override above, hence the same theme-scoped specificity). */
html[data-theme="light"] .hdr-pro-btn.is-pro {
  background:rgba(31,138,82,.12); border-color:#1f8a52; color:#1f8a52;
  box-shadow:0 0 0 1px rgba(31,138,82,.18), 0 0 12px rgba(31,138,82,.18);
}
html[data-theme="light"] .hdr-pro-btn.is-pro:hover { background:rgba(31,138,82,.18); border-color:#1f8a52; color:#1f8a52; }
/* Detail-page green action button ("Share this stock") → white text on dark green. */
html[data-theme="light"] .modal-act-share { color:#2f6fd0; background:rgba(100,160,240,.1); border-color:rgba(100,160,240,.35); }
/* Watchlist "Portfolio Diversification" locked overlay was dark → light. */
html[data-theme="light"] .wl-div-lock { background:rgba(244,246,248,.62); }
/* Filters drawer (fvc-filter-panel) was solid dark → light, so its (theme-aware)
   title/labels/chips become readable instead of dark-on-dark. */
html[data-theme="light"] .fvc-filter-panel { background:#ffffff; }
html[data-theme="light"] .fvc-fp-foot { background:#ffffff; }
html[data-theme="light"] .fvc-filter-backdrop { background:rgba(20,28,38,.42); }
html[data-theme="light"] .fvc-screen-lock-inner { background:rgba(244,246,248,.92); }
/* Exclusion ("Hide stocks with:") chips hardcode light-pink text → deepen on light. */
html[data-theme="light"] .fvc-chip.fvc-excl.active { color:#b3261e; }
/* Logo: the wordmark "Fair" + "calculator.com" are white in the SVG → invisible on the
   light header. Swap to a dark-text logo variant in light mode (green + stripes kept). */
.hdr-logo-light { display:none; }
html[data-theme="light"] .hdr-logo-dark  { display:none; }
html[data-theme="light"] .hdr-logo-light { display:block; }
/* Sticky watchlist-bar star count → white on the green badge (match the header star). */
html[data-theme="light"] .fvc-wlb-count { color:#ffffff; }
/* Sign-in / Pro email fields were dark → light so it's clear they're inputs. */
html[data-theme="light"] #login-email,
html[data-theme="light"] #ct-email,
html[data-theme="light"] .wl-save-email-input { background:#ffffff; }
/* Detail "free alert" email field hardcodes a near-black bg (rgba(12,19,15,.55)) with
   no light flip → a dark box with near-black text on the light alert card = unreadable.
   Flip it to white with a green-tinted border to match the other light inputs. */
html[data-theme="light"] .fvc-alert-email { background:#ffffff; border-color:rgba(31,138,82,.30); }
/* The whole <footer> (which wraps the leaderboard + blog) has a 50%-dark bg → that
   was the real grey "veil" over both on light. + the leaderboard panel gradient. */
html[data-theme="light"] .footer { background:rgba(28,32,38,.025); border-top-color:rgba(28,32,38,.10); }
html[data-theme="light"] .fvc-lb {
  background:linear-gradient(180deg, rgba(31,138,82,.06), rgba(20,28,38,.025));
}
/* Valuation-gauge smiley sat on a dark circle → light tinted circle (keeps the
   green/amber/red valuation cue, emoji stays clear). */
html[data-theme="light"] .val-meter-smiley.happy   { background:rgba(31,138,82,.14);  border-color:rgba(31,138,82,.5); }
html[data-theme="light"] .val-meter-smiley.neutral { background:#eef1f4;               border-color:rgba(28,32,38,.18); }
html[data-theme="light"] .val-meter-smiley.sad     { background:rgba(210,59,59,.12);   border-color:rgba(210,59,59,.5); }
/* Green "Go Pro" / sign-in buttons hardcode dark text → white on light. */
html[data-theme="light"] .login-btn,
html[data-theme="light"] .fvc-pro-btn { color:#ffffff; }
/* Info popover (News-mood "ⓘ" bubble etc.) hardcodes a near-black bg → light. */
html[data-theme="light"] .mv-pop {
  background:#ffffff;
  border-color:rgba(28,32,38,.14);
  box-shadow:0 14px 36px rgba(20,28,38,.18);
}
/* Watchlist "Next step" diversification tip uses light-mint text → faint on light. */
html[data-theme="light"] .wl-div-tip   { color:#2f4a3b; }
html[data-theme="light"] .wl-div-tip b { color:#1f8a52; }
/* article.php (blog + guides) — relight its few hardcoded dark/white surfaces. */
html[data-theme="light"] .fvc-pick,
html[data-theme="light"] .fvc-formula        { background:rgba(28,32,38,.04); }
html[data-theme="light"] .art-idx-search     { background:#ffffff; }
html[data-theme="light"] .fvc-live-bar i.trk { background:rgba(28,32,38,.08); }
html[data-theme="light"] .fvc-live-bar i.trk em { background:rgba(28,32,38,.42); }
/* "How it works" tutorial demo = a clone of the hero animated card (.fvh-*). Its mock
   panels (search bar, result card, watchlist, callouts, scenes) are hardcoded dark →
   light so the demo matches the bright theme. (Also relights the desktop hero card.) */
html[data-theme="light"] .fvh-wlp,
html[data-theme="light"] .fvh-stock,
html[data-theme="light"] .fvh-cap,
html[data-theme="light"] .fvh-bub-q,
html[data-theme="light"] .fvh-chk,
html[data-theme="light"] .fvh-ins-c,
html[data-theme="light"] .fvh-msearch,
html[data-theme="light"] .fvh-mdrop { background:#ffffff; border-color:rgba(28,32,38,.12); }
/* The scene CONTAINER stays borderless/transparent in light too (design: the slides
   "sit directly on the hero stage, no frame") — a pure-white #fff here read as a stark
   white block clashing with the stage's light-grey end (operator). The inner demo cards
   above keep their own white surface; only the wrapper is de-framed. */
html[data-theme="light"] .fvh-scene { background:transparent; border-color:transparent; }
html[data-theme="light"] .fvh-fimg img { background:#eef1f4; }
/* Tutorial Next / Got-it button hardcodes dark text → white on green. */
html[data-theme="light"] .fvtut-next { color:#ffffff; }
/* All hover/scrub bubbles that hardcode a dark bg → light (chart scrubber, section
   help, gauge smiley tooltip, toast). #fvc-tip glossary + .mv-pop already handled. */
html[data-theme="light"] .histfv-tip,
html[data-theme="light"] .sec-help-tip,
html[data-theme="light"] .val-meter-smiley .vml-tooltip,
html[data-theme="light"] .fvc-toast {
  background:#ffffff;
  border-color:rgba(28,32,38,.14);
  box-shadow:0 12px 32px rgba(20,28,38,.18);
}
/* Add-to-watchlist sticky-bar pulse forces a DARK bg mid-animation → black flash on
   light. Run a light-tinted keyframe instead (dark mode keeps fvcWlBarGlow untouched). */
html[data-theme="light"] .fvc-wl-bar.fvc-wlb-glow { animation:fvcWlBarGlowLight 1s ease-out; }
@keyframes fvcWlBarGlowLight {
  0%,100% { box-shadow:0 -6px 24px rgba(20,28,38,.12); background:rgba(248,249,251,.97); }
  25%     { box-shadow:0 -2px 32px 5px rgba(31,138,82,.40); background:rgba(225,242,232,.98); }
}
/* World-map UI chrome (selected-label, zoom controls, tooltip) was dark → light. */
html[data-theme="light"] .fvc-map-label,
html[data-theme="light"] .fvc-map-ctrls button { background:rgba(255,255,255,.92); border-color:rgba(31,138,82,.40); }
html[data-theme="light"] .fvc-map-tip { background:rgba(255,255,255,.96); border-color:rgba(31,138,82,.40); }
/* Map SVG labels: swap the dark glow for a light halo so they read on the light map. */
html[data-theme="light"] .fvc-cont-lbl,
html[data-theme="light"] .fvc-exch-lbl { text-shadow:0 1px 4px rgba(255,255,255,.9); }
/* Valyra search-wizard panel was solid dark → light (inner content is theme-aware). */
html[data-theme="light"] .fvc-valyra-panel { background:#ffffff; }
html[data-theme="light"] .fvc-valyra-backdrop { background:rgba(20,28,38,.45); }
/* Founder avatar ring/logo tile used dark hexes → light. */
html[data-theme="light"] .fvc-trust-avatar img,
html[data-theme="light"] .fvc-trust-fallback { border-color:#ffffff; }
html[data-theme="light"] .fvc-trust-logo { background:#eef1f4 !important; }

/* ── Hero H1 responsive fit ──────────────────────────────────────────────────
   Higher specificity than the partial's inline `.fvh-h1` (which is later in the
   document) so this wins. Fluid clamp + balanced wrapping so BOTH the English
   ("Know What a Stock Is Really Worth") and the longer German heading ("Wisse,
   was eine Aktie wirklich wert ist") fit a 390px iPhone with no overflow and no
   mashed words. */
.fvh-left .fvh-h1 {
  font-size:clamp(1.5rem, 6.2vw, 3.05rem);
  line-height:1.1;
  text-wrap:balance;
  overflow-wrap:break-word;
  word-break:normal;
  /* manual (not auto): the heading must NEVER mid-word-hyphenate — German "auto" split
     "Ak-tie" across two lines, which looks untidy. balance + break-word still keep a
     genuinely over-long word from overflowing a 390px screen; normal words wrap whole. */
  hyphens:manual;
}

/* ── Theme toggle button (header, left of the logo, away from the Watchlist star) ── */
.hdr-theme-btn {
  display:inline-flex; align-items:center; justify-content:center;
  width:32px; height:32px; margin-right:auto; padding:0;
  background:rgba(var(--on-rgb),.06); border:1px solid var(--fvc-border);
  border-radius:var(--r-pill); color:var(--text); cursor:pointer;
  transition:background .15s, transform .12s;
}
.hdr-theme-btn:hover { background:rgba(var(--on-rgb),.12); transform:translateY(-1px); }
.hdr-theme-btn svg { width:16px; height:16px; display:block; }
/* EN/DE language switcher — a visual PEER of the theme button: same 32px height,
   border, radius and background tint. Desktop = a clean EN|DE segmented pill; the
   auto-margin (which right-aligns the nav) moves to the switcher so theme + language
   stay adjacent on the left. */
.hdr-theme-btn:has(+ .hdr-lang) { margin-right:6px; }
/* Desktop-only EN|DE segmented pill. Scoped to min-width:641px so these rules do
   NOT override the mobile single-toggle (@media max-width:640px, ~line 159).
   Previously they sat outside any query and — being later in source order with
   equal specificity — re-applied the container border on phones, producing a
   DOUBLE border (container ring + single-opt ring). Mobile now shows exactly one
   border on the active toggle, matching .hdr-theme-btn. */
@media (min-width:641px) {
  .hdr-lang { display:inline-flex; align-items:center; gap:0; margin-right:auto; height:32px;
    box-sizing:border-box; padding:2px; background:rgba(var(--on-rgb),.06);
    border:1px solid var(--fvc-border); border-radius:var(--r-pill); }
  .hdr-lang-opt { display:inline-flex; align-items:center; justify-content:center; height:100%;
    min-width:30px; border:none; background:transparent; color:var(--muted,#9fb0a6); cursor:pointer;
    text-decoration:none; font-size:12px; font-weight:700; padding:0 10px; border-radius:var(--r-pill);
    line-height:1; transition:background .15s, color .15s; }
  .hdr-lang-opt.active { background:var(--fvc-green,#7BB290); color:var(--on-green,#08130d); }
  .hdr-lang-opt:hover:not(.active) { color:var(--text); background:rgba(var(--on-rgb),.10); }
}
.hdr-theme-sun { display:none; }            /* dark mode shows the SUN (→ go light) */
html:not([data-theme="light"]) .hdr-theme-sun  { display:block; }
html:not([data-theme="light"]) .hdr-theme-moon { display:none; }
html[data-theme="light"] .hdr-theme-moon { display:block; }
html[data-theme="light"] .hdr-theme-sun  { display:none; }

/* ============================================================================
   EVIDENCE v3 — rebuilt SAAS evidence page (2026-06-22)
   ============================================================================ */
.ev3 { --ev3-gap:14px; }
.ev3-hero { margin-bottom:16px; }
.ev3-sec-h { font-size:.95rem;font-weight:800;letter-spacing:.01em;margin:24px 0 12px;color:var(--text);
  padding-top:16px;border-top:1px solid var(--glass-b); }
.ev3-p { font-size:.82rem;line-height:1.5;color:var(--muted);margin:0 0 12px; }
.ev3-muted { color:var(--dim);font-size:.78rem; }
/* numbers align in columns everywhere in the evidence popup (typography polish 2026-07) */
.ev3 .ev3-stat-big, .ev3 .ev3-dual-big, .ev3 .ev3-num { font-variant-numeric:tabular-nums; }

/* Live track record table (cohorts vs market, harmonised 8px rhythm) */
.ev3-live-tbl { border:1px solid var(--glass-b);background:var(--glass);border-radius:12px;overflow:hidden;margin:12px 0 8px; }
.ev3-live-row { padding:10px 14px;border-bottom:1px solid var(--glass-b); }
.ev3-live-main { display:flex;align-items:baseline;justify-content:space-between;gap:8px;font-size:.82rem; }
.ev3-live-m { font-weight:700;color:var(--text);min-width:72px; }
.ev3-live-n { color:var(--dim);font-size:.72rem; }
.ev3-live-ret { font-weight:800; }
.ev3-live-win { color:var(--dim);font-size:.72rem;min-width:76px;text-align:right; }
.ev3-live-sub { display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-top:3px;font-size:.72rem;color:var(--dim); }
.ev3-live-total { display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 12px;padding:10px 14px;font-size:.76rem;color:var(--muted);border-top:1px solid var(--glass-b); }
.ev3-live-tl b { font-weight:800;color:var(--text); }
.ev3-live-diff { font-weight:700;font-size:.72rem; }
.ev3-live-fine { font-size:.72rem;color:var(--dim); }

/* stat cards */
.ev3-stats-row { display:grid;grid-template-columns:repeat(4,1fr);gap:var(--ev3-gap);margin:8px 0 24px; }
.ev3-stat { background:var(--glass);border:1px solid var(--glass-b);border-radius:14px;padding:14px 12px;text-align:center; }
.ev3-stat-big { font-size:1.5rem;font-weight:800;color:var(--text);line-height:1.1; }
.ev3-stat-lbl { font-size:.68rem;color:var(--muted);margin-top:4px;font-weight:600; }
.ev3-stat-sub { font-size:.6rem;color:var(--dim);margin-top:3px; }
.ev3-stat-hero { background:var(--green-d);border-color:var(--green-b); }
.ev3-stat-hero .ev3-stat-big { color:var(--green); }
@media(max-width:620px){ .ev3-stats-row{grid-template-columns:repeat(2,1fr);} }

/* Dual headline band: before-tax (gross) vs after-tax (net) edge, shown side by side.
   margin-top 24 = Sektionswechsel: das Band gehört zum BACKTEST-Teil und darf nicht am
   Kleingedruckten der Live-Bilanz kleben (Rhythmus-Pass 2026-07-16, Operator „klebt zusammen"). */
.ev3-dual { display:grid;grid-template-columns:1fr 1fr;gap:var(--ev3-gap);margin:24px 0 8px; }
.ev3-dual-single { grid-template-columns:1fr;max-width:460px;margin-left:auto;margin-right:auto; }
.ev3-dual-single .ev3-dual-big { font-size:2.4rem; }
.ev3-dual-card { border-radius:14px;padding:16px 14px;text-align:center;border:1px solid var(--glass-b);background:var(--glass); }
.ev3-dual-gross { background:var(--green-d);border-color:var(--green-b); }
.ev3-dual-tag { font-size:.62rem;font-weight:700;letter-spacing:.03em;text-transform:uppercase;color:var(--muted);margin-bottom:7px;line-height:1.3; }
.ev3-dual-big { font-size:2.1rem;font-weight:800;line-height:1.05;color:var(--text); }
.ev3-dual-gross .ev3-dual-big { color:var(--green); }
.ev3-dual-big small { font-size:.85rem;font-weight:700;color:var(--muted);margin-left:2px; }
.ev3-dual-sub { font-size:.68rem;color:var(--dim);margin-top:6px; }
/* Fußnote klebt bewusst an IHRER Karte (8px oben via .ev3-dual margin-bottom) und hält
   volle 24px Abstand zum nächsten Block, vorher 10/20 = falsche Zugehörigkeit. */
.ev3-dual-note { font-size:.66rem;color:var(--dim);margin:0 0 24px;text-align:center;line-height:1.55; }
@media(max-width:620px){ .ev3-dual{grid-template-columns:1fr;} }

/* chart */
.ev3-chartwrap { background:var(--glass);border:1px solid var(--glass-b);border-radius:14px;padding:14px 12px 12px;margin-bottom:0; }
.ev3-chart-h { font-size:.8rem;font-weight:700;color:var(--text);margin-bottom:8px; }
.ev3-chart-sub { font-size:.62rem;color:var(--dim);font-weight:500; }
.ev3-chart-tax { display:inline-block;font-size:.6rem;font-weight:800;letter-spacing:.02em;text-transform:uppercase;color:var(--green);background:var(--green-d);border:1px solid var(--green-b);border-radius:999px;padding:2px 8px;vertical-align:middle; }
.ev3-svg { display:block; }
.ev3-noChart { padding:40px 0;text-align:center;color:var(--dim);font-size:.78rem; }
.ev3-legend { display:flex;flex-wrap:wrap;gap:14px;justify-content:center;margin-top:10px; }
.ev3-legend-main { margin-top:12px; }
.ev3-lgi { font-size:.72rem;color:var(--muted);display:inline-flex;align-items:center;gap:6px; }
.ev3-lgi i { width:11px;height:11px;border-radius:3px;display:inline-block;flex-shrink:0; }
.ev3-lgi b { color:var(--text); }
.ev3-lgi small { font-size:.86em;color:var(--dim);margin-left:1px; }

/* method cards */
.ev3-mgrid { display:grid;grid-template-columns:repeat(2,1fr);gap:var(--ev3-gap); }
.ev3-mcard { display:flex;gap:12px;background:var(--glass);border:1px solid var(--glass-b);border-radius:12px;padding:12px 14px; }
.ev3-mcard-ic { font-size:1.25rem;flex-shrink:0;line-height:1.1; }
.ev3-mcard-t { font-size:.8rem;font-weight:700;color:var(--text);margin-bottom:3px; }
.ev3-mcard-x { font-size:.74rem;line-height:1.45;color:var(--muted); }
@media(max-width:620px){ .ev3-mgrid{grid-template-columns:1fr;} }

/* notable */
.ev3-notable { display:flex;flex-direction:column;gap:10px; }
.ev3-note { display:flex;gap:10px;font-size:.82rem;line-height:1.5;color:var(--muted);
  background:var(--glass);border:1px solid var(--glass-b);border-radius:12px;padding:12px 14px; }
.ev3-note-dot { color:var(--green);flex-shrink:0;font-size:.9rem; }

/* hold/sell cards */
.ev3-hsgrid { display:grid;grid-template-columns:repeat(2,1fr);gap:var(--ev3-gap); }
.ev3-hs { background:var(--glass);border:1px solid var(--glass-b);border-left:3px solid var(--hsc);border-radius:12px;padding:12px 14px; }
.ev3-hs-sig { font-size:.66rem;font-weight:800;letter-spacing:.04em;color:var(--hsc);text-transform:uppercase;margin-bottom:5px; }
.ev3-hs-t { font-size:.8rem;font-weight:700;color:var(--text);margin-bottom:3px; }
.ev3-hs-x { font-size:.74rem;line-height:1.45;color:var(--muted); }
@media(max-width:620px){ .ev3-hsgrid{grid-template-columns:1fr;} }

/* Pro-CTA-Karte trägt inline margin 18/4 (geteilte Komponente); im Evidence-Kontext
   auf den 24er-Sektionsrhythmus heben (Schluss war 30/32/18/16 = unruhig). */
.ev3 .fvc-pro-cta { margin:24px 0 0 !important; }

/* statistics accordion */
.ev3-acc { margin-top:24px;border:1px solid var(--glass-b);border-radius:14px;background:var(--glass);overflow:hidden; }
.ev3-acc>summary { cursor:pointer;padding:15px 16px;font-size:.86rem;font-weight:800;color:var(--text);list-style:none;display:flex;align-items:center;gap:8px; }
.ev3-acc>summary::-webkit-details-marker { display:none; }
.ev3-acc>summary::before { content:'▸';color:var(--green);transition:transform .2s; }
.ev3-acc[open]>summary::before { transform:rotate(90deg); }
.ev3-acc-body { padding:4px 16px 16px; }
.ev3-stat-h { font-size:.84rem;font-weight:800;color:var(--green);margin:20px 0 8px; }
.ev3-stat-sub2 { font-size:.74rem;color:var(--muted);margin:10px 0 6px;font-weight:600; }
.ev3-list { margin:0 0 6px;padding-left:18px;text-align:left; }   /* Aufzählungen linksbündig — zentrierter Text neben linken Bullets liest sich zerrissen (operator 2026-07-09) */
.ev3-list li { font-size:.78rem;line-height:1.5;color:var(--muted);margin-bottom:6px; }
.ev3-refs li { color:var(--dim);font-size:.74rem; }

/* haircut callout */
.ev3-callout { display:flex;align-items:center;justify-content:center;gap:18px;margin:14px 0;
  background:var(--green-d);border:1px solid var(--green-b);border-radius:12px;padding:14px; }
.ev3-callout-big { font-size:1.3rem;font-weight:800;color:var(--muted);text-align:center; }
.ev3-callout-big.ev3-good { color:var(--green); }
.ev3-callout-lbl { font-size:.64rem;color:var(--dim);text-align:center;margin-top:2px; }
.ev3-callout-arrow { font-size:1.4rem;color:var(--green);opacity:.7; }

/* evidence v3 — 6-card stat row + chart note (real MSCI World) */
.ev3-stats-6 { grid-template-columns:repeat(3,1fr); }
@media(max-width:620px){ .ev3-stats-6{grid-template-columns:repeat(2,1fr);} }
.ev3-stats-4 { grid-template-columns:repeat(4,1fr); }
@media(max-width:620px){ .ev3-stats-4{grid-template-columns:repeat(2,1fr);} }
.ev3-stats-2 { grid-template-columns:repeat(2,1fr); }
.ev3-chart-note { font-size:.7rem;color:var(--dim);margin:10px 2px 0;line-height:1.4;text-align:center; }
.ev3-chart-caveat { margin-top:12px;padding:10px 12px;border:1px solid var(--glass-b);border-radius:10px;background:rgba(var(--on-rgb),.03);font-style:italic; }
/* tested-universe composition */
.ev3-comp-lead { font-size:.82rem;color:var(--muted);line-height:1.5;margin:0 0 12px; }
.ev3-comp-grid { display:grid;grid-template-columns:1fr 1fr;gap:var(--ev3-gap); }
@media(max-width:620px){ .ev3-comp-grid{grid-template-columns:1fr;} }
.ev3-comp-h { font-size:.7rem;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--green);margin:0 0 8px; }
.ev3-compbars { display:flex;flex-direction:column;gap:5px; }
.ev3-compbar { display:grid;grid-template-columns:120px 1fr 34px;align-items:center;gap:8px;font-size:.72rem;color:var(--muted); }
.ev3-compbar-lbl { white-space:nowrap;overflow:hidden;text-overflow:ellipsis; }
.ev3-compbar-track { height:8px;background:rgba(var(--on-rgb),.06);border-radius:4px;overflow:hidden; }
.ev3-compbar-fill { display:block;height:100%;background:var(--green);opacity:.7;border-radius:4px; }
.ev3-compbar-val { text-align:right;font-variant-numeric:tabular-nums;color:var(--dim); }
.ev3-chart-caveat b { font-style:normal; }

/* ── Watchlist "most-correlated (redundant) pairs" list under the Low-correlation bar (2026-06-29) ── */
.wl-bp { margin:10px 0 2px;border-top:1px solid rgba(var(--on-rgb),.08);padding-top:9px; }
.wl-bp-title { font-size:.74rem;font-weight:600;color:var(--text);margin-bottom:6px; }
.wl-bp-head { display:grid;grid-template-columns:auto 1fr auto;gap:10px;font-size:.6rem;text-transform:uppercase;letter-spacing:.04em;color:var(--dim);padding:0 1px 4px;border-bottom:1px solid rgba(var(--on-rgb),.06);margin-bottom:3px; }
.wl-bp-row { display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:5px 1px;border-bottom:1px solid rgba(var(--on-rgb),.05); }
.wl-bp-syms { font-size:.76rem;font-weight:600;color:var(--text);white-space:nowrap; }
.wl-bp-names { font-size:.72rem;color:var(--dim);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.wl-bp-x { color:var(--dim);font-weight:400;margin:0 4px; }
.wl-bp-val { font-size:.82rem;font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap; }
.wl-bp-none { font-size:.74rem;color:var(--green); }
/* Every diversification score bar is an expandable <details> → its donut/breakdown (or the
   correlated-pair badges / held-stocks list) slides in inline between the bars. The rotating
   chevron is the "this opens" affordance (operator 2026-07-08: allocation tabs weg, jede Leiste
   selbst aufklappbar). */
.div-brk-details { margin-bottom:7px; }
.div-brk-summary { display:flex;align-items:center;gap:10px;margin-bottom:0;cursor:pointer;list-style:none;
  -webkit-tap-highlight-color:transparent;border-radius:8px;transition:background .12s; }
.div-brk-summary::-webkit-details-marker { display:none; }
.div-brk-summary::marker { content:''; }
.div-brk-summary:hover { background:rgba(var(--on-rgb),.04); }
.div-brk-summary:hover .div-brk-lbl { color:rgba(var(--on-rgb),.95); }
.div-brk-chev,.div-brk-chev-sp { flex-shrink:0;width:24px; }
.div-brk-chev { display:inline-flex;align-items:center;justify-content:center;height:24px;
  border-radius:7px;font-size:1rem;line-height:1;color:var(--text);background:rgba(var(--on-rgb),.08);
  transition:transform .18s ease,background .12s,color .12s;transform:rotate(0deg); }
.div-brk-summary:hover .div-brk-chev { background:rgba(var(--on-rgb),.15); }
.div-brk-details[open] > .div-brk-summary .div-brk-chev {
  transform:rotate(90deg);color:var(--green);background:rgba(var(--green-rgb,123,178,144),.18); }
.div-brk-expand { padding:13px 2px 16px; }
.div-brk-details[open] > .div-brk-expand { animation:divBrkIn .2s ease; }
@keyframes divBrkIn { from { opacity:0;transform:translateY(-5px); } to { opacity:1;transform:none; } }
.div-brk-expand .wl-bp { border-top:none;margin:0;padding-top:0; }
.div-brk-expand .wl-sec-note { margin-top:13px; }

/* ── Multiple tailored recommendation cards under the diversification panel (2026-06-29) ── */
.wl-div-recs { margin-top:13px;border-top:1px solid rgba(var(--on-rgb),.08);padding-top:11px; }
.wl-div-recs-title { font-size:.74rem;font-weight:600;color:var(--text);margin-bottom:8px; }
.wl-div-rec { display:flex;align-items:center;gap:10px;margin-bottom:7px; }
.wl-div-rec-head { flex:0 0 122px;font-size:.72rem;color:var(--muted);line-height:1.2; }
.wl-div-rec-pick { flex:1;min-width:0;display:flex;align-items:center;gap:6px; }
.wl-div-rec-load,.wl-div-rec-none { font-size:.72rem;color:var(--dim); }
.wl-div-rec-add { flex:1;min-width:0;display:grid;grid-template-columns:auto 1fr auto auto;align-items:center;gap:8px;
  background:rgba(var(--on-rgb),.05);border:1px solid rgba(var(--green-rgb,123,178,144),.28);border-radius:10px;
  padding:7px 10px;cursor:pointer;text-align:left;transition:background .12s,border-color .12s; }
.wl-div-rec-add:active { background:rgba(var(--on-rgb),.10); }
.wl-div-rec-tk { font-size:.78rem;font-weight:700;color:var(--green); }
.wl-div-rec-co { font-size:.72rem;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap; }
.wl-div-rec-meta { font-size:.66rem;color:var(--dim);font-variant-numeric:tabular-nums;white-space:nowrap; }
.wl-div-rec-plus { font-size:1rem;font-weight:700;color:var(--green); }
.wl-div-rec-refresh { flex:0 0 auto;background:none;border:none;color:var(--dim);font-size:.95rem;cursor:pointer;padding:4px 6px;border-radius:8px; }
.wl-div-rec-refresh:active { background:rgba(var(--on-rgb),.10); }

/* ═══ Apple-polish Konsistenz-Layer (2026-07-02) ════════════════════════════
   1) EIN konsistenter Tastatur-Fokusring, nur :focus-visible (Maus/Touch
      unverändert). :where() = Spezifität 0 → jede bestehende outline-Regel
      (inkl. outline:none auf Inputs/Custom-Widgets) gewinnt weiterhin.
      Farbe = bestehendes Grün-Token, keine neue Farbwelt. */
:where(a, button, summary, select, [role="button"], [tabindex]):focus-visible {
  outline:2px solid rgba(123,178,144,.7);
  outline-offset:2px;
}
/* 2) Tabellenziffern auf Stat-/Zähler-Werten, die sie noch nicht hatten —
      Zahlen "springen" nicht mehr und Spalten fluchten (Qualitätsdetail). */
.hero-stat-val, .univ-stat-val, .univ-breakdown-val, .stat-card-val,
.cc-metric-val, .srm-summary-chip-n, .sim-status-count, .src-group-count,
.fvc-pe-price, .card-chip, .hdr-pro-price {
  font-variant-numeric:tabular-nums;
}

/* ── Watchlist search bar: hero-look pill + AI sparkle entry (operator 2026-07-13) ── */
.wl-searchbar { display:flex;align-items:center;border-radius:999px;
  border:1px solid var(--glass-b);background:rgba(var(--on-rgb),.05);
  padding:4px 5px;transition:border-color .2s, box-shadow .2s; }
.wl-searchbar:focus-within { border-color:var(--green);box-shadow:0 0 0 3px rgba(123,178,144,.14); }
.wl-sb-ai { flex:0 0 auto;width:38px;height:38px;border-radius:50%;border:0;cursor:pointer;
  display:flex;align-items:center;justify-content:center;color:var(--green);
  background:rgba(123,178,144,.12);transition:background .2s; }
.wl-sb-ai:hover { background:rgba(123,178,144,.24); }
.wl-sb-ai svg { width:18px;height:18px; }
.wl-sb-div { width:1px;height:22px;background:var(--glass-b);margin:0 4px 0 8px;flex:0 0 auto; }
.wl-searchbar .wl-addinput { border:0;background:transparent;padding:9px 6px;flex:1 1 auto;min-width:0; }
.wl-searchbar .wl-addinput:focus { border:0;outline:none;box-shadow:none; }
.wl-sb-go { flex:0 0 auto;width:34px;height:34px;border-radius:50%;border:0;cursor:pointer;
  display:flex;align-items:center;justify-content:center;color:#fff;
  background:linear-gradient(180deg,#3d8a5f,#1f7a4a);box-shadow:0 6px 16px -8px rgba(31,122,74,.8);
  transition:transform .15s; }
.wl-sb-go:hover { transform:scale(1.06); }
.wl-sb-go svg { width:15px;height:15px; }
.wl-addrow .wl-addsug { top:56px; }

/* Teilen-Modal: Ansichts-Umschalter (Chart ↔ Übersicht) + Swipe-Punkte (2026-07-13) */
.sm-view-toggle { margin-top:8px; }
.sm-view-dots { display:flex;justify-content:center;gap:7px;margin:8px 0 2px; }
.sm-view-dots i { width:7px;height:7px;border-radius:50%;background:rgba(var(--on-rgb),.18);transition:background .2s; }
.sm-view-dots i.on { background:var(--green); }
/* Filter-Drawer Farb-Legende (2026-07-16 wiederhergestellt): erklärt die Bewertungs-Tints der Chips. */
.fvc-fp-vlegend { display:flex; align-items:center; gap:6px 8px; flex-wrap:wrap; margin:14px 0 2px;
  font-size:.7rem; color:var(--muted,#9fb0a8); }
.fvc-leg-dot { width:9px; height:9px; border-radius:50%; display:inline-block; margin-left:8px; }
.fvc-leg-dot:first-child { margin-left:0; }
.fvc-leg-green { background:hsl(145 64% 42% / .85); }
.fvc-leg-red   { background:hsl(7 70% 48% / .85); }
.fvc-leg-grey  { background:rgba(255,255,255,.22); }
.fvc-fp-vlegend .fvc-leg-hint { flex-basis:100%; font-size:.64rem; color:var(--dim,rgba(233,241,236,.5)); margin-top:1px; }

/* ── Thin-results hint: <5 Treffer bei aktiver Verfeinerung → 1-Klick-Lockerung
   (Audit 2026-07-16: quality_value + Large = 3 Treffer wirkte wie eine leere Seite) ── */
.fvc-thin-hint {
  display:flex; align-items:center; gap:12px; flex-wrap:wrap;
  margin:0 0 14px; padding:10px 14px;
  border:1px solid var(--border, rgba(123,178,144,.25)); border-radius:10px;
  background:rgba(123,178,144,.06); font-size:.92rem; color:var(--dim, #9ab);
}
.fvc-thin-hint-btn {
  border:1px solid var(--accent, #7bb290); border-radius:8px; background:transparent;
  color:var(--accent, #7bb290); padding:4px 12px; font:inherit; font-size:.88rem; cursor:pointer;
}
.fvc-thin-hint-btn:hover { background:rgba(123,178,144,.12); }
