:root {
  /* ── COLORS · semantisch benannt (Dark-Mode-fähig später) ─────── */

  /* Surfaces */
  --c-bg-page:        #fafafa;
  --c-bg-card:        #ffffff;
  --c-bg-sunken:      #f5f5f5;
  --c-bg-elevated:    #ffffff;

  /* Borders */
  --c-border-subtle:  #e5e5e5;
  --c-border-strong:  #d1d5db;
  --c-border-focus:   #0050a0;

  /* Text */
  --c-text-primary:   #1a1a1a;
  --c-text-secondary: #4b5563;
  --c-text-muted:     #6b7280;
  --c-text-disabled:  #9ca3af;
  --c-text-inverse:   #ffffff;

  /* Brand */
  --c-accent:         #0050a0;
  --c-accent-hover:   #003d80;
  --c-accent-soft:    #e6eff8;

  /* Direction (Bull/Bear/Neutral) */
  --c-bull-strong:    #047857;
  --c-bull-soft:      #d1fae5;
  --c-bull-text:      #065f46;
  --c-bear-strong:    #b91c1c;
  --c-bear-soft:      #fee2e2;
  --c-bear-text:      #991b1b;
  --c-neutral-strong: #6b7280;
  --c-neutral-soft:   #f3f4f6;
  --c-neutral-text:   #374151;

  /* Status (Warn / Info / Success / Error) */
  --c-warn-strong:    #d97706;
  --c-warn-soft:      #fef3c7;
  --c-warn-text:      #92400e;
  --c-info-strong:    #1d4ed8;
  --c-info-soft:      #dbeafe;

  /* ── RADIUS · D2=16px Default ─────────────────────────────────── */
  --r-xs:             4px;
  --r-sm:             8px;
  --r-md:             12px;
  --r-card:           16px;     /* D2 Default */
  --r-pill:           999px;

  /* ── SHADOWS · D1=mild Default ────────────────────────────────── */
  --shadow-none:       none;
  --shadow-soft:       0 1px 3px rgba(0, 0, 0, 0.04),
                       0 1px 2px rgba(0, 0, 0, 0.03);
  --shadow-card:       0 2px 8px rgba(0, 0, 0, 0.06);     /* D1 Default */
  --shadow-card-hover: 0 4px 16px rgba(0, 0, 0, 0.08);
  --shadow-modal:      0 16px 40px rgba(0, 0, 0, 0.18);

  /* ── SPACING · 4er-Grid ───────────────────────────────────────── */
  --sp-0:             0;
  --sp-1:             0.25rem;   /*  4px */
  --sp-2:             0.5rem;    /*  8px */
  --sp-3:             0.75rem;   /* 12px */
  --sp-4:             1rem;      /* 16px */
  --sp-5:             1.25rem;   /* 20px */
  --sp-6:             1.5rem;    /* 24px */
  --sp-8:             2rem;      /* 32px */
  --sp-10:            2.5rem;    /* 40px */
  --sp-12:            3rem;      /* 48px */

  /* ── TYPOGRAPHY · System-Stack, D3=2rem bold Default ──────────── */
  --ff-base:          system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --ff-mono:          ui-monospace, "SF Mono", Consolas, monospace;

  --fs-meta:          0.75rem;   /* 12px — Captions, Hint */
  --fs-sm:            0.85rem;   /* 14px — Sekundär */
  --fs-body:          0.95rem;   /* 15px — Standard-Lauftext */
  --fs-h3:            1.05rem;   /* 17px */
  --fs-h2:            1.25rem;   /* 20px */
  --fs-h1:            1.6rem;    /* 26px */
  --fs-display:       2rem;      /* 32px — Score-Zahlen · D3 Default */

  --lh-tight:         1.25;
  --lh-base:          1.5;
  --lh-relaxed:       1.65;

  --fw-regular:       400;
  --fw-medium:        500;
  --fw-semibold:      600;
  --fw-bold:          700;

  /* ── MOTION ───────────────────────────────────────────────────── */
  --motion-fast:      120ms ease-out;
  --motion-base:      220ms ease-out;
  --motion-slow:      400ms ease-out;

  /* ── INTERAKTION ──────────────────────────────────────────────── */
  --touch-target:     44px;
  --focus-ring-width: 3px;
  --focus-ring-color: rgba(0, 80, 160, 0.35);

  /* ── SCORE-METER "Tachometer-Light" · verbindlich fur alle 4 Hauptseiten ─── */
  /* Quelle: bundle-spec §1.5 + design-tokens-2026-05-24 §2 als kanonischer Standard.
     Werte hier zentral, damit jede Spec/Komponente nur referenziert. */
  --score-meter-bar-height:    10px;
  --score-meter-marker-width:  6px;  /* Bundle P score-meter-visibility-fix: 4px->6px fuer bessere Sichtbarkeit */
  --score-meter-marker-height: 18px;
  --score-meter-zone-low:      35%;    /* 0-35 % = rot   (= Score 0,0 – 3,5) */
  --score-meter-zone-high:     65%;    /* 65-100 % = grun (= Score 6,5 – 10,0) */

  /* ── Z-INDEX-STACKING · Zentral damit alle Lanes sicher stacken (R1) ────── */
  /* Werte gewahlt um IST-Hardcodes zu umschiffen — siehe architecture.md §3.4  */
  /* Inventar IST-Hardcodes: .app-topbar=100, footer-nav=100, .wl-table th=2,   */
  /* .toasts=1000, .footer-nav-more__panel=50, .mobile-nav-overlay=300,          */
  /* .news-quick-index=200, .nqi-pull-tab=201, .nqi-backdrop=199                 */
  --z-header:               50;   /* Sticky-Header (Desktop+Mobile) */
  --z-bottom-tab:           90;   /* Fixed Bottom-Tab Mobile (90 wg. .app-topbar=100) */
  --z-slide-out:           210;   /* Slide-Out-Drawer Mobile (210 wg. news-quick-index=200) */
  --z-user-prompt-banner:  320;   /* User-Prompt-Banner (320 wg. mobile-nav-overlay=300) */
}

/* Reduzierte Motion respektieren */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 0.01ms !important;
    transition-duration: 0.01ms !important;
  }
}

* { box-sizing: border-box; }

/* ── Section-Header-Konvention (Orchestrator-Look) ────────────────────── */
.section-label {
  font-size: var(--fs-meta);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--c-text-muted);
  font-weight: var(--fw-semibold);
  margin: var(--sp-8) 0 var(--sp-3);
}

body {
  font-family: system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  max-width: 1400px;
  margin: 0 auto;
  padding: 0 1rem;
  line-height: 1.5;
  color: var(--c-text-primary);
  background: #fafafa;
}

/* Sticky-Topbar (Header + Markt-Ticker bleiben oben beim Scrollen) */
.app-topbar {
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--c-bg-page);  /* DESIGN-10: war #fafafa = exakter Token-Wert */
  margin: 0 -1rem;       /* deckt body-padding ab, damit kein Loch links/rechts */
  padding: 0 1rem;
  box-shadow: 0 2px 6px rgba(0,0,0,0.08);
}

/* Environment-Banner: header bekommt color-Style aus inline (siehe base.html).
   Body bekommt zusaetzlich Klasse env-test/env-staging/env-dev fuer dezenten
   Rand. Layout (Abstaende, Hoehen) bleibt unveraendert. */
body.env-test header,
body.env-staging header,
body.env-dev header {
  color: #fff;
  border-bottom: 2px solid rgba(0,0,0,0.25);
}
body.env-test header a,
body.env-staging header a,
body.env-dev header a {
  color: #fff;
}
body.env-test header .header-nav a,
body.env-staging header .header-nav a,
body.env-dev header .header-nav a {
  color: rgba(255,255,255,0.85);
}
body.env-test header .header-nav a:hover,
body.env-staging header .header-nav a:hover,
body.env-dev header .header-nav a:hover {
  background: rgba(255,255,255,0.18);
  color: #fff;
}
body.env-test header .version,
body.env-staging header .version,
body.env-dev header .version {
  color: rgba(255,255,255,0.85);
}
/* Counts in Klammern (Watchlists (2), News (0), ...) sind sonst grau —
   auf farbigem env-Banner unlesbar. Hell ueberschreiben. */
body.env-test header .nav-count,
body.env-staging header .nav-count,
body.env-dev header .nav-count {
  color: rgba(255,255,255,0.8);
}
/* prices-refresh-marker (meta) auch */
body.env-test header .prices-refresh-marker,
body.env-staging header .prices-refresh-marker,
body.env-dev header .prices-refresh-marker {
  color: rgba(255,255,255,0.85);
}
body.env-test header .prices-refresh-marker .meta,
body.env-staging header .prices-refresh-marker .meta,
body.env-dev header .prices-refresh-marker .meta {
  color: rgba(255,255,255,0.85);
}
.env-label {
  font-size: 0.75em;
  font-weight: 700;
  letter-spacing: 0.05em;
  background: rgba(0,0,0,0.25);
  color: #fff;
  padding: 1px 6px;
  border-radius: 3px;
  margin-left: 4px;
  vertical-align: 1px;
}

/* CC-162 nav-overlap-durable: 3-Spalten-Grid (AC1).
   Spalte 1 (auto) = Burger+Brand, Spalte 2 (1fr) = .header__nav, Spalte 3 (auto) = .header__right.
   Spalte 3 reserviert IMMER ihre Content-Breite → Spalte 2 bekommt nur Restplatz → kein Overlap per Grid-Spec.
   grid-column-Zuweisung auf .header__brand + .header__nav + .header__right verhindert falsche Track-Belegung
   durch 5 DOM-Kinder (Burger, Brand, Nav, IIFE-script, Right). */
header {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: var(--sp-3);
  padding: 0.6rem 0 0.5rem 0;
  border-bottom: 1px solid var(--c-border-subtle);
}

header a { color: inherit; text-decoration: none; }
header .version { color: var(--c-text-muted); font-size: 0.85em; margin-left: auto; }
.header-nav { display: flex; gap: 0.75rem; }
.header-nav a { color: var(--c-text-muted); font-size: 0.9em; padding: 0.1em 0.3em; border-radius: 3px; }
.header-nav a:hover { background: var(--c-bg-sunken); color: var(--c-text-primary); }

main { padding: 1.5rem 0; }

/* === Markt-Ticker-Laufband === */
.market-ticker {
  position: relative;
  background: #1f2937;
  color: #f3f4f6;
  border-radius: 4px;
  margin: 0.5rem 0;
  padding: 0.4rem 0;
  overflow: hidden;       /* Laufband — keine Scrollbar */
  white-space: nowrap;
  font-size: 0.78rem;
}
.market-ticker__track {
  display: inline-flex;
  width: max-content;
  animation: market-ticker-scroll 90s linear infinite;
  will-change: transform;
}
.market-ticker:hover .market-ticker__track { animation-play-state: paused; }
@keyframes market-ticker-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
.market-ticker__group { display: inline-flex; gap: 1.4rem; padding: 0 0.7rem; }
.market-ticker__item { display: inline-flex; gap: 0.35rem; align-items: baseline; }
.market-ticker__label { color: #cbd5e1; }
.market-ticker__price { color: #f9fafb; font-weight: 500; font-variant-numeric: tabular-nums; }
.market-ticker__chg { font-variant-numeric: tabular-nums; }
.market-ticker__chg.positive { color: #10b981; }
.market-ticker__chg.negative { color: #f87171; }
.market-ticker__item--crypto .market-ticker__label,
.market-ticker__item--commodity .market-ticker__label { color: #fbbf24; }
.market-ticker__item--forex .market-ticker__label { color: #93c5fd; }
.market-ticker.htmx-request { opacity: 0.7; }
@media (prefers-reduced-motion: reduce) {
  .market-ticker__track { animation: none; }
  .market-ticker { overflow-x: auto; }
}

.news-ticker {
  position: relative;
  background: #0f172a;
  color: #e2e8f0;
  border-radius: 4px;
  margin: 0.25rem 0 0.5rem;
  padding: 0.35rem 0;
  overflow: hidden;
  white-space: nowrap;
  font-size: 0.78rem;
}
.news-ticker__track {
  display: inline-flex;
  width: max-content;
  animation: news-ticker-scroll 120s linear infinite;
  will-change: transform;
}
.news-ticker:hover .news-ticker__track { animation-play-state: paused; }
@keyframes news-ticker-scroll {
  from { transform: translateX(0); }
  to   { transform: translateX(-50%); }
}
.news-ticker__group { display: inline-flex; gap: 1.6rem; padding: 0 0.7rem; }
.news-ticker__item {
  display: inline-flex; gap: 0.35rem; align-items: baseline;
  color: #e2e8f0; text-decoration: none;
}
.news-ticker__item:hover { color: #fbbf24; }
.news-ticker__time { color: #94a3b8; font-variant-numeric: tabular-nums; }
.news-ticker__src  { color: #fbbf24; font-weight: 500; }
.news-ticker__head { color: #f1f5f9; }
.news-ticker__item--positive .news-ticker__head { color: #6ee7b7; }
.news-ticker__item--negative .news-ticker__head { color: #fca5a5; }
.news-ticker.htmx-request { opacity: 0.7; }
@media (prefers-reduced-motion: reduce) {
  .news-ticker__track { animation: none; }
  .news-ticker { overflow-x: auto; }
}

/* === v0.56.14 Watchlist-Add Live-Suggest === */
.suggest-box {
  width: 100%;
  margin: 0;
}
.suggest-box:empty { display: none; }
.suggest-list {
  list-style: none;
  margin: 0.2rem 0 0.5rem;
  padding: 0;
  max-height: 260px;
  overflow-y: auto;
  border: 1px solid #e5e7eb;
  border-radius: 4px;
  background: #fff;
}
.suggest-item { margin: 0; padding: 0; border-bottom: 1px solid #f3f4f6; }
.suggest-item:last-child { border-bottom: none; }
.suggest-btn {
  display: flex; align-items: baseline; gap: 0.6rem;
  width: 100%; padding: 0.45rem 0.7rem;
  background: transparent; border: none; cursor: pointer;
  font-size: 0.88rem; text-align: left;
}
.suggest-btn:hover, .suggest-btn:focus {
  background: #f9fafb;
  outline: none;
}
.suggest-ticker { min-width: 6em; }
.suggest-ticker code {
  background: #f3f4f6; padding: 0.05em 0.4em; border-radius: 3px;
  font-size: 0.85em;
}
.suggest-name { flex: 1; color: #111827; }
.suggest-meta { font-size: 0.78em; color: #6b7280; white-space: nowrap; }
.suggest-hint, .suggest-empty {
  font-size: 0.78em; color: #6b7280;
  margin: 0.25rem 0 0.5rem;
  padding: 0 0.2rem;
}

/* === Discovery-Landing /today (LEGACY-ROLLBACK-PFAD, FEATURE_BUNDLE_E_DISCOVERY_UI=false) === */
/* §3.4 Kür-Bereinigung: raw Hex → Token, Alt-Token → --c-*. Rollback-Pfad ist heute inaktiv. */
.today-section {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: 6px;
  padding: 1rem 1.2rem;
  margin: 1rem 0;
}
.today-section__title {
  display: flex; align-items: center; gap: 0.6rem;
  margin: 0 0 0.7rem 0;
  font-size: 1.05rem;
}
.today-section__count {
  font-size: 0.78rem; color: var(--c-text-secondary);
  background: var(--c-neutral-soft); padding: 0.1rem 0.5rem; border-radius: 9999px;
}
.today-section--newbuy   .today-section__title { color: var(--c-bull-strong); }
.today-section--sellrisk .today-section__title { color: var(--c-bear-strong); }
.today-section--watch    .today-section__title { color: var(--c-accent); }
.today-section--strong   .today-section__title { color: var(--c-bear-text); }
.today-empty {
  color: var(--c-text-secondary);
  font-style: italic;
  padding: 0.5rem 0;
}
.today-ticker-card {
  display: flex; flex-direction: column; gap: 0.25rem;
  padding: 0.6rem 0.8rem;
  border: 1px solid var(--c-border-subtle); border-radius: 4px;
  margin: 0.35rem 0;
  background: var(--c-bg-sunken);
}
.today-ticker-card__head {
  display: flex; align-items: baseline; justify-content: space-between;
}
.today-ticker-card__symbol { font-weight: 600; font-size: 0.95rem; }
.today-ticker-card__score  { font-variant-numeric: tabular-nums; font-weight: 600; }
.today-ticker-card__name   { color: var(--c-text-secondary); font-size: 0.85rem; }
.today-ticker-card__reasoning { font-size: 0.86rem; color: var(--c-neutral-text); }
.today-stub-banner {
  background: var(--c-warn-soft); color: var(--c-warn-text);
  border-left: 3px solid var(--c-warn-strong);
  padding: 0.6rem 0.9rem; border-radius: 4px;
  margin: 0.8rem 0; font-size: 0.88rem;
}

/* Bundle M Phase 2 Lane 4: today-cockpit-job-status-banner (v0.80.0)
   Banner-Varianten fuer Aggregator-Status (F-1 Reviewer: Klassen fehlten).
   Basis-Stil analog .today-stub-banner, Varianten fuer info/warning. */
.banner {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  padding: 0.6rem 0.9rem;
  border-radius: var(--r-card, 6px);
  margin: 0.6rem 0;
  font-size: 0.88rem;
}
.banner__icon { flex-shrink: 0; }
.banner__text { flex: 1; }
.banner--info {
  background: var(--c-info-soft, #e0f2fe);
  color: var(--c-info-text, #0369a1);
  border-left: 3px solid var(--c-info, #0ea5e9);
}
.banner--warning {
  background: #fef3c7;
  color: #92400e;
  border-left: 3px solid #f59e0b;
}
.today-info-pill {
  font-size: 0.84rem;
  border-radius: var(--r-pill, 4px);
}

footer {
  color: var(--c-text-muted);
  font-size: 0.85em;
  padding: 0.6rem 1rem;
  border-top: 1px solid var(--c-border-subtle);
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  align-items: center;
  justify-content: space-between;
  position: fixed;
  bottom: 0;
  left: 0;
  right: 0;
  background: #fafafa;
  z-index: 100;
  box-shadow: 0 -2px 6px rgba(0,0,0,0.06);
}
/* Damit der sticky Footer keinen Content verdeckt */
body { padding-bottom: 3.5rem; }
.footer-nav { display: flex; gap: 0.9rem; flex-wrap: wrap; }
.footer-nav a { color: var(--c-text-muted); text-decoration: none; }
.footer-nav a:hover { color: var(--c-text-primary); text-decoration: underline; }
.footer-meta { font-size: 0.8em; }

/* Multi-User Header */
/* DESIGN-10: #f6f8fa ≈ --c-bg-sunken (#f5f5f5); minimaler Grau-Drift, visuell neutral */
.header-user { margin-left: 0.5rem; font-size: 0.85em; padding: 0.2rem 0.5rem; border: 1px solid var(--c-border-subtle); border-radius: 3px; background: var(--c-bg-sunken); }
.role-pill { display: inline-block; padding: 0.05rem 0.4rem; font-size: 0.7em; border-radius: 3px; font-weight: 600; }
.role-pill--admin { background: var(--c-accent); color: var(--c-text-inverse); }  /* DESIGN-10: war #0050a0/#fff = exakte Token-Werte */
.role-pill--user { background: var(--c-text-muted); color: var(--c-text-inverse); }  /* DESIGN-10: war #6b7280/#fff */

a { color: var(--c-accent); }

h1 { margin-top: 0; color: var(--c-text-primary); }
h2 { color: var(--c-text-primary); margin-top: 1.5rem; }

.meta { color: var(--c-text-muted); font-size: 0.9em; }
.meta code { background: var(--c-bg-sunken); padding: 0.1em 0.4em; border-radius: 3px; }
.muted { color: var(--c-text-muted); }
.due { color: #c00; font-weight: 600; }

/* Bundle P: card-whitespace-pre-wrap-fix (2026-05-29)
   Globale article-Regel ent-globalisiert. pre-wrap wird nur noch
   explizit auf .report-body (Report-Fliesstext, Z.1505) und
   .news-detail__lead (News-Detail-Lead, Z.2283) angewendet.
   Supersedes: news-card-empty-sections-collapse (v0.80.0).
   Hinweis: .news-detail__lead (Z.2283) hat bereits pre-wrap,
   keine Redundanz-Einführung auf .news-detail nötig. */
article { line-height: 1.6; }

/* === Watchlist table === */
.table-wrap { margin: 1rem 0 2rem; overflow-x: hidden; }

.wl-table {
  width: 100%;
  table-layout: auto;
  border-collapse: collapse;
  font-size: 0.88rem;
}
.wl-table th, .wl-table td { word-wrap: break-word; overflow-wrap: anywhere; }
/* Kompakte Spaltenbreiten - lass Name + Aktionen flex, Rest fix */
.wl-ticker  { white-space: nowrap; width: 5em; }
.wl-wkn     { white-space: nowrap; width: 5em; font-size: 0.8em; }
.wl-quantity, .wl-price, .wl-value, .wl-perf { white-space: nowrap; text-align: right; padding: 0 0.3rem; }
.wl-last, .wl-next { white-space: nowrap; font-size: 0.8em; }
.wl-interval input { width: 3em; }

.wl-table th,
.wl-table td {
  padding: 0.55rem 0.6rem;
  text-align: left;
  vertical-align: top;
  border-bottom: 1px solid var(--c-border-subtle);
}

.wl-table th {
  background: var(--c-bg-sunken);
  font-weight: 600;
  color: var(--c-text-primary);
  position: sticky;
  top: 0;
  z-index: 2;
}
.wl-table th[data-sort] {
  cursor: pointer;
  user-select: none;
}
.wl-table th[data-sort]:hover { background: #e8e8e8; }
.wl-table th[data-sort]::after {
  content: " ↕";
  opacity: 0.3;
  font-size: 0.85em;
}
.wl-table th.sorted-asc::after { content: " ↑"; opacity: 1; color: var(--c-accent); }
.wl-table th.sorted-desc::after { content: " ↓"; opacity: 1; color: var(--c-accent); }
.wl-table tbody tr:hover { background: #f5f7fa; }

.wl-row { transition: opacity 200ms; }
.wl-row--paused { opacity: 0.55; }
.wl-row.htmx-swapping { opacity: 0; }

.wl-ticker { white-space: nowrap; }
.wl-ticker a { text-decoration: none; }
.wl-ticker a:hover { text-decoration: underline; }

.wl-edit-form input {
  display: block;
  width: 100%;
  margin-bottom: 0.25rem;
  padding: 0.25rem 0.4rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: 3px;
  font: inherit;
  font-size: 0.9rem;
}
.wl-edit-form input[name="display_name"] { font-weight: 500; }
.wl-edit-form button {
  margin-top: 0.25rem;
  padding: 0.2rem 0.55rem;
  font-size: 0.8rem;
}

.wl-interval input[type=number] {
  width: 4em;
  padding: 0.25rem 0.35rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: 3px;
  font: inherit;
}

.wl-actions { white-space: nowrap; text-align: right; }
.wl-actions form { display: inline; margin-right: 0.2rem; }
.wl-actions .wl-btn { margin-right: 0.2rem; margin-bottom: 0.15rem; }

/* Name+Fokus als reine Anzeige */
.wl-name__main { font-weight: 500; }
.wl-name__focus { font-size: 0.85rem; margin-top: 0.15rem; }

/* Kompakte Label-Buttons (Icon + Wort) */
.wl-btn--label {
  font-size: 0.78rem;
  padding: 0.3rem 0.55rem;
  line-height: 1.2;
  white-space: nowrap;
}

/* Icon-only Buttons fuer Action-Spalte - minimaler Footprint */
.wl-btn--icon {
  font-size: 1rem;
  padding: 0.25rem 0.4rem;
  line-height: 1;
  min-width: 0;
  white-space: nowrap;
}

/* Inline-Edit-Modus (komplette Zeile wird zur Form) */
.wl-row--editing td { background: #fff8e1; vertical-align: top; }
.wl-edit-form__row { display: flex; flex-direction: column; gap: 0.15rem; margin-bottom: 0.4rem; }
.wl-edit-form__row span { font-size: 0.75rem; }
.wl-edit-form__actions { display: flex; gap: 0.4rem; margin-top: 0.3rem; }

/* Such-Bar oberhalb der Tabelle */
.wl-search-bar {
  display: flex;
  gap: 0.75rem;
  align-items: flex-end;
  margin: 0.6rem 0 0.4rem 0;
  padding: 0.6rem 0.75rem;
  background: #fff8e1;
  border: 1px solid #e6d6a0;
  border-radius: 4px;
  flex-wrap: wrap;
}
.wl-search-bar__field { display: flex; flex-direction: column; gap: 0.2rem; min-width: 14em; flex: 1; }
.wl-search-bar__field span { font-size: 0.7rem; text-transform: uppercase; letter-spacing: 0.5px; }
.wl-search-input {
  padding: 0.4rem 0.55rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: 3px;
  font: inherit;
}
.wl-search-count { font-size: 0.8rem; }

/* Portfolio-Footer EUR-Gesamtsumme */
.wl-tfoot--eur td { border-top: 2px solid #0050a0; padding-top: 0.5rem; background: #f0f7ff; }

/* Gesamtportfolio ueber alle Watchlists */
.grand-total { margin: 2rem 0 1rem 0; padding: 1rem 1.2rem; background: #f0f7ff; border: 2px solid #0050a0; border-radius: 6px; }
.grand-total h2 { margin-top: 0; }
.grand-total__table { width: 100%; }
.grand-total__table td { padding: 0.35rem 0.5rem; }
.grand-total__val { text-align: right; font-variant-numeric: tabular-nums; }
.grand-total__eur td { border-top: 2px solid #0050a0; padding-top: 0.6rem; font-size: 1.1em; }

/* Fehler-Log */
.error-entry { margin: 0.5rem 0; padding: 0.5rem 0.7rem; background: #fff8e1; border-left: 3px solid #d4a72c; border-radius: 3px; }
.error-entry summary { cursor: pointer; }
.error-entry__payload { background: #1f2937; color: #f3f4f6; padding: 0.7rem; overflow: auto; font-size: 0.8em; border-radius: 3px; margin-top: 0.5rem; }
.error-entry--warning { background: #fff8e1; border-left-color: #f59e0b; }

/* Wertpapiere: NEU-Badge + Watchlist-Add */
.wp-new-badge { display: inline-block; padding: 0.05rem 0.4rem; background: #10b981; color: #fff; font-size: 0.7rem; border-radius: 3px; font-weight: 600; vertical-align: middle; }
.wp-row--new { background: #ecfdf5; }
.wp-row--new td { border-left: 3px solid #10b981; }
.wp-row--new td:not(:first-child) { border-left: none; }
.wp-wlcell { white-space: normal; }
.wp-wl-pill { display: inline-block; padding: 0.15rem 0.45rem; font-size: 0.72rem; border-radius: 3px; margin: 0.1rem 0.15rem 0.1rem 0; cursor: default; border: 1px solid transparent; }
.wp-wl-pill--in { background: #d1fae5; color: #065f46; border-color: #6ee7b7; }
.wp-wl-pill--add { background: #f0f9ff; color: #075985; border-color: #7dd3fc; cursor: pointer; }
.wp-wl-pill--add:hover { background: #075985; color: #fff; border-color: #075985; }
.wp-wlcell form { display: inline; }

/* PDF-Verwaltung: Rescan-Status-Hervorhebung */
.pdf-row--running td { background: #fef3c7; border-left: 3px solid #f59e0b; }
.pdf-row--done td    { background: #d1fae5; border-left: 3px solid #10b981; }
.pdf-row--failed td  { background: #fee2e2; border-left: 3px solid #dc2626; }
.pdf-status { display: inline-block; padding: 0.15rem 0.45rem; border-radius: 3px; font-size: 0.75rem; font-weight: 500; }
.pdf-status--running { background: #f59e0b; color: #fff; animation: pulse 1.2s ease-in-out infinite; }
.pdf-status--done    { background: #10b981; color: #fff; }
.pdf-status--failed  { background: #dc2626; color: #fff; }
@keyframes pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.65; } }

/* Bulk-PDF-Upload */
.bulk-queue { margin: 1.5rem 0; }
.bulk-queue__table td, .bulk-queue__table th { vertical-align: top; }
.bulk-queue__summary { margin-top: 0.5rem; font-size: 0.9em; }
.action-pill--ok   { background: #d1fae5; color: #065f46; border-color: #6ee7b7; }
.action-pill--fail { background: #fee2e2; color: #991b1b; border-color: #fca5a5; }
/* Mehrstufiger Fortschrittsbalken pro Bulk-Zeile */
.bulk-stages { display: flex; gap: 2px; min-width: 24em; height: 1.6rem; }
.bulk-stage {
  position: relative;
  background: #e5e7eb;
  border-radius: 3px;
  overflow: hidden;
  display: flex; align-items: center; justify-content: center;
  font-size: 0.72rem;
  color: #6b7280;
  transition: background 200ms ease, color 200ms ease;
}
.bulk-stage__lbl { padding: 0 0.4rem; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.bulk-stage--pending { background: #e5e7eb; color: #9ca3af; }
.bulk-stage--active  {
  background: linear-gradient(90deg, #fbbf24, #f59e0b);
  color: #1f2937;
  animation: bulk-stage-pulse 1.2s ease-in-out infinite;
}
.bulk-stage--done    { background: linear-gradient(90deg, #10b981, #34d399); color: #064e3b; }
.bulk-stage--fail    { background: #fee2e2; color: #991b1b; }
@keyframes bulk-stage-pulse {
  0%, 100% { opacity: 1; }
  50%      { opacity: 0.65; }
}
.bulk-result__err { margin-top: 0.3rem; font-size: 0.8em; }

/* === Buttons === */
button, .wl-btn {
  padding: 0.4rem 0.7rem;
  background: var(--c-bg-sunken);
  color: var(--c-text-primary);
  border: 1px solid var(--c-border-subtle);
  border-radius: 3px;
  cursor: pointer;
  font: inherit;
  font-size: 0.9rem;
}
button:hover, .wl-btn:hover { background: var(--c-bg-sunken); }

.wl-btn--primary {
  background: var(--c-accent);
  color: var(--c-text-inverse);
  border-color: var(--c-accent);
}
.wl-btn--primary:hover { background: var(--c-accent-hover); }

.wl-btn--danger:hover {
  background: var(--c-bear-soft);
  color: var(--c-bear-strong);
  border-color: var(--c-bear-strong);
}

/* ── [DESIGN-1 Foundation] ───────────────────────────────────────────────────
   BTN-SYSTEM + SCORE-BAR + TOKEN-ALIAS-BRIDGE
   Prerequisite fuer design2-10. NICHT anfassen: wl-btn, read-toggle-btn, pagination__btn
   ─────────────────────────────────────────────────────────────────────────── */

/* ── BTN-SYSTEM · Foundation (DESIGN-1) ─────────────────────────────── */
.btn {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 6px 14px;
  border-radius: var(--r-sm);
  font-size: var(--fs-sm);
  font-weight: var(--fw-medium);
  text-decoration: none;
  border: 1px solid var(--c-border-strong);
  background: var(--c-bg-card);
  color: var(--c-text-secondary);
  cursor: pointer;
}
.btn:hover { background: var(--c-bg-sunken); }

/* ── Farb-/Intent-Varianten ─────────────────────────────────────────── */
.btn--primary {
  background: var(--c-accent);
  color: var(--c-text-inverse);
  border-color: var(--c-accent);
}
.btn--primary:hover { background: var(--c-accent-hover); }

.btn--warn {
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
  border-color: var(--c-warn-strong);
}

.btn--secondary {
  background: var(--c-bg-sunken);
  color: var(--c-text-secondary);
  border-color: var(--c-border-strong);
}

.btn--outline {
  background: transparent;
}

.btn--ghost {
  background: transparent;
  border-color: transparent;
  color: var(--c-text-secondary);
}
.btn--ghost:hover { background: var(--c-bg-sunken); }

.btn--icon-only { padding: 6px 10px; }

/* ── Groessen-Varianten ─────────────────────────────────────────────── */
.btn--xs {
  padding: 2px 8px;
  font-size: var(--fs-meta);
}

.btn--sm, .btn--small {
  padding: 4px 10px;
  font-size: var(--fs-meta);
}

/* ── SCORE-BAR · Foundation (DESIGN-1) — generische 0-10-Fill-Bar ─── */
.score-bar {
  height: 6px;
  background: var(--c-neutral-soft);
  border-radius: var(--r-pill);
  overflow: hidden;
  flex: 1;
  max-width: 140px;
  align-self: center;
}
.score-bar__fill {
  height: 100%;
  background: var(--c-accent);
  border-radius: var(--r-pill);
  transition: width var(--motion-base);
}
.score-bar__fill--bull { background: var(--c-bull-strong); }
.score-bar__fill--bear { background: var(--c-bear-strong); }
.score-bar__fill--neut { background: var(--c-neutral-text); }

/* ── [/DESIGN-1 Foundation] ─────────────────────────────────────────────── */

/* === Add form === */
.add-form {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  margin-top: 1rem;
}
.add-form input {
  padding: 0.45rem 0.55rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: 3px;
  font: inherit;
}
.add-form input[name="ticker"] { width: 8em; text-transform: uppercase; }
.add-form input[name="display_name"] { flex: 1; min-width: 12em; }
.add-form input[name="focus"] { flex: 1; min-width: 12em; }
.add-form input[name="scan_interval_days"] { width: 5em; }
.add-form button { background: var(--c-accent); color: #fff; border-color: var(--c-accent); padding: 0.45rem 1rem; }
.add-form button:hover { background: #003d80; }

.inline-form { display: inline; margin: 0; }

/* === HTMX indicators === */
.htmx-indicator { display: none; }
.htmx-request .htmx-indicator { display: inline; }
.htmx-request.htmx-indicator { display: inline; }

/* === Report-Liste (ticker.html) === */
.report-list { list-style: none; padding: 0; }
.report-list li {
  padding: 0.6rem 0;
  border-bottom: 1px solid var(--c-border-subtle);
}
.report-list li a { display: block; font-weight: 500; }

/* === Watchlist-Sections (multi-list) === */
.watchlist-section {
  margin-bottom: 2.5rem;
  transition: opacity 200ms;
}
.watchlist-section.htmx-swapping { opacity: 0; }

.watchlist-header {
  display: flex;
  align-items: baseline;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 0.5rem;
}
.watchlist-header h2 { margin: 0; }
.watchlist-actions { display: flex; gap: 0.4rem; flex-wrap: wrap; align-items: center; }
.bulk-spinner { color: var(--c-accent); margin-left: 0.25rem; }
.wl-live-refresh { font-size: 0.75rem; padding: 0.2rem 0.5rem; border: 1px solid #d0d7de; border-radius: 4px; background: #f6f8fa; color: #57606a; white-space: nowrap; }
.wl-live-refresh.htmx-request { background: #fff8c5; border-color: #d4a72c; color: #4d2d00; }
.prices-refresh-marker { font-size: 0.75rem; margin-left: 0.5rem; padding: 0.2rem 0.5rem; border: 1px solid #d0d7de; border-radius: 4px; background: #f6f8fa; color: #57606a; white-space: nowrap; align-self: center; }
.prices-refresh-marker.htmx-request { background: #fff8c5; border-color: #d4a72c; color: #4d2d00; }
.wp-price, .ticker-hero-price { display: inline-flex; align-items: baseline; gap: 0.3rem; }

.bulk-result {
  background: #eef5e7;
  border-left: 3px solid #4d9c2c;
  padding: 0.5rem 0.75rem;
  margin: 0.5rem 0 0.75rem;
  font-size: 0.92em;
  border-radius: 0 3px 3px 0;
}
.bulk-result code {
  background: rgba(255,255,255,0.6);
  padding: 0.1em 0.3em;
  border-radius: 2px;
  font-size: 0.88em;
}
/* CC-179: Warn-Modifier (amber) fuer FW-Insights-Fehler / empty */
.bulk-result--warn {
  background: #fff8c5;
  border-left-color: #d4a72c;
  color: #4d2d00;
}
/* CC-179: Error-Modifier (rot) fuer fehlgeschlagene Ingests */
.bulk-result--error {
  background: #fee2e2;
  border-left-color: #dc2626;
  color: #7f1d1d;
}

.wl-wkn code {
  background: var(--c-bg-sunken);
  padding: 0.1em 0.4em;
  border-radius: 3px;
  font-size: 0.85em;
}
.wl-quantity {
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
}

.add-form--entry {
  font-size: 0.9rem;
  margin-top: 0.5rem;
  margin-bottom: 1rem;
}
.add-form--entry input[name="ticker"] { width: 7em; }
.add-form--entry input[name="wkn"] { width: 7em; text-transform: uppercase; }
.add-form--entry input[name="display_name"] { min-width: 10em; flex: 2; }
.add-form--entry input[name="quantity"] { width: 6em; }
.add-form--entry input[name="focus"] { min-width: 8em; flex: 1; }

.ticker-occurrence {
  margin-bottom: 2rem;
  padding-bottom: 1rem;
  border-bottom: 1px solid var(--c-border-subtle);
}
.ticker-occurrence:last-child { border-bottom: 0; }
.ticker-occurrence h2 { margin-bottom: 0.25rem; }
.ticker-occurrence h2 a { text-decoration: none; }

/* === stock3-Snapshot-Block === */
.stock3-block {
  background: #f7f9fc;
  border: 1px solid var(--c-border-subtle);
  border-radius: 4px;
  padding: 0.85rem 1rem;
  margin: 1rem 0 1.5rem;
}
.stock3-block__header {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.5rem 1rem;
  margin-bottom: 0.5rem;
}
.stock3-block__header h3 { margin: 0; font-size: 1rem; }
.stock3-block .meta { font-size: 0.82em; }

.stock3-kpis {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.25rem;
  margin: 0.5rem 0;
}
.stock3-kpis .kpi { display: flex; flex-direction: column; min-width: 5em; }
.stock3-kpis dt {
  font-size: 0.72em;
  color: var(--c-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.stock3-kpis dd { margin: 0; font-size: 1.08em; font-weight: 600; font-variant-numeric: tabular-nums; }

.rating { padding: 0.05em 0.4em; border-radius: 3px; font-weight: 600; }
.rating--buy, .rating--strong-buy { background: #d6f5db; color: #176a26; }
.rating--hold { background: #fff5d6; color: #7a5a00; }
.rating--sell, .rating--strong-sell { background: #ffd6d6; color: #a30000; }

.stock3-history { margin-top: 0.5rem; font-size: 0.88em; }
.stock3-history table { width: 100%; border-collapse: collapse; margin-top: 0.4rem; }
.stock3-history th, .stock3-history td {
  padding: 0.3rem 0.5rem;
  text-align: left;
  border-bottom: 1px solid var(--c-border-subtle);
}
.stock3-history th { background: rgba(0,0,0,0.03); font-weight: 600; }

.stock3-add { margin-top: 0.75rem; }
.stock3-add summary { cursor: pointer; color: var(--c-accent); font-size: 0.9em; }

.stock3-form {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 0.5rem 0.75rem;
  margin-top: 0.75rem;
}
.stock3-form label { display: flex; flex-direction: column; font-size: 0.82em; color: var(--c-text-muted); }
.stock3-form label.full { grid-column: 1 / -1; }
.stock3-form input,
.stock3-form select {
  margin-top: 0.2rem;
  padding: 0.35rem 0.45rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: 3px;
  font: inherit;
  font-size: 0.95rem;
  color: var(--c-text-primary);
  background: #fff;
}
.stock3-form button { grid-column: 1 / -1; justify-self: start; }

.stock3-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem 1rem;
  align-items: center;
  margin-top: 0.75rem;
  padding-top: 0.5rem;
  border-top: 1px solid var(--c-border-subtle);
}
.stock3-actions small.meta { flex: 1; min-width: 12em; font-size: 0.78em; }
.stock3-spinner { color: var(--c-accent); }

.stock3-paste { margin-top: 0.5rem; }
.stock3-paste summary { cursor: pointer; color: var(--c-accent); font-size: 0.9em; }
.stock3-paste-form { display: flex; flex-direction: column; gap: 0.5rem; margin-top: 0.5rem; }
.stock3-paste-form textarea {
  width: 100%;
  font-family: ui-monospace, "Cascadia Code", Menlo, monospace;
  font-size: 0.82rem;
  padding: 0.5rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: 3px;
  resize: vertical;
}
.stock3-paste-form button { align-self: flex-start; }

a.bookmarklet {
  display: inline-block;
  padding: 0.5rem 0.9rem;
  background: var(--c-accent);
  color: #fff;
  border-radius: 4px;
  text-decoration: none;
  font-weight: 600;
  cursor: grab;
}
a.bookmarklet:hover { background: #003d80; }

pre {
  background: var(--c-bg-sunken);
  padding: 0.6rem 0.8rem;
  border-radius: 4px;
  overflow-x: auto;
  font-size: 0.85rem;
}
code { font-family: ui-monospace, "Cascadia Code", Menlo, monospace; }

/* === News-Stream === */
.news-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}
.news-header h1 { margin: 0; }
.news-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
  margin: 0.75rem 0;
  padding-bottom: 0.5rem;
  border-bottom: 1px solid var(--c-border-subtle);
}
.news-filter select { padding: 0.3rem 0.4rem; font: inherit; border: 1px solid var(--c-border-subtle); border-radius: var(--r-sm); }

/* IP-2 Q6 (news-filter-completion §3.d): sticky Filter-Bar.
   top: 80px = .app-topbar-Hoehe (verifiziert via .news-quick-index top:80px Referenz).
   z-index: 10 — ueber News-Cards, unter .app-topbar (z-index: 100).
   background+border-bottom: verhindert Card-Durchscheinen beim Scrollen. */
.news-filter-bar {
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-sm);
  padding: 0.6rem 0.75rem;
  margin: 0.75rem 0 1rem;
  position: sticky;
  top: 80px;
  z-index: 10;
  border-bottom: 2px solid var(--c-border-subtle);
}
.news-filter-row {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 0.75rem;
  align-items: end;
}
.news-filter-row label {
  display: flex;
  flex-direction: column;
  font-size: 0.78em;
  color: var(--c-text-muted);
  gap: 0.2rem;
}
.news-filter-row label select,
.news-filter-row label input {
  padding: 0.3rem 0.45rem;
  font: inherit;
  font-size: 0.9rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-sm);
  background: var(--c-bg-card);
}
.news-filter-search { flex: 1; min-width: 16em; }
.news-filter-search input { width: 100%; }
.news-filter-summary { font-size: 0.85em; margin-top: 0.5rem; }
/* IP-2 Q6 (news-filter-completion §3.a + §3.d): Sentiment-Toggle-Group (reports_index.html) */
.news-sentiment-toggle {
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
}
/* Wrapper als Flex-Row fuer die Buttons */
.news-sentiment-toggle { flex-shrink: 0; }

/* IP-2 Q6: .news-sentiment-Farbregel bleibt an Z.3646ff. (Design-Token-Variante) — hier kein Duplikat. */

/* Bundle M Phase 2 Lane 3: bestand-empty-state-ux (v0.80.0)
   Orchestrator-Rounded-Box-Stil gemaess Memory feedback_ui_rounded_boxes_orchestrator_style.
   Erweitert den bestehenden .empty-state Block um Card-Design + CTA-Buttons. */
.empty-state {
  text-align: center;
  padding: 2rem 1.5rem;
  background: var(--c-bg-card, var(--c-bg-sunken));
  border-radius: var(--r-card, 8px);
  box-shadow: 0 1px 4px rgba(0,0,0,0.07);
  border: 1px solid var(--c-border-subtle);
  margin: 1rem 0;
}
.empty-state p { margin: 0.4rem 0; }
.empty-state__icon {
  font-size: 2.5rem;
  line-height: 1;
  margin-bottom: 0.75rem;
}
.empty-state__headline {
  font-size: var(--fs-h3, 1.15rem);
  font-weight: var(--fw-semibold, 600);
  margin: 0 0 0.5rem;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--c-text-primary);
}
.empty-state__body {
  color: var(--c-text-secondary);
  font-size: var(--fs-sm, 0.9rem);
  max-width: 42ch;
  margin: 0 auto 1.25rem;
  line-height: 1.55;
}
.empty-state__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.75rem;
  justify-content: center;
  align-items: center;
}
/* Mobile: Buttons voll-breit stapeln */
@media (max-width: 480px) {
  .empty-state { padding: 1.5rem 1rem; }
  .empty-state__actions { flex-direction: column; }
  .empty-state__actions .btn { width: 100%; justify-content: center; }
}

/* === Cluster (MVP-8) === */
.cluster-section { margin: 1.25rem 0; }
.cluster-section h2 { margin-bottom: 0.4rem; }

.cluster-chips-wrap {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin: 0.4rem 0;
}

.cluster-chip {
  display: inline-flex;
  align-items: center;
  gap: 0.35em;
  padding: 0.18em 0.55em;
  border-radius: 3px;
  font-size: 0.82em;
  font-weight: 600;
  color: #fff;
  text-decoration: none;
  white-space: nowrap;
}
.cluster-chip:hover { opacity: 0.85; color: #fff; }
.cluster-chip__count {
  background: rgba(255,255,255,0.25);
  padding: 0 0.4em;
  border-radius: 2px;
  font-size: 0.85em;
  font-weight: 500;
}
.cluster-chip--empty { opacity: 0.4; }

.cluster-chip--sektor           { background: #2563eb; }
.cluster-chip--sub-sektor       { background: #0891b2; }
.cluster-chip--region           { background: #16a34a; }
.cluster-chip--thema            { background: #d97706; }
.cluster-chip--investment-these { background: #a47d1a; }

.cluster-dim-description {
  font-size: 0.88em;
  color: var(--c-text-muted);
  margin: 0.2rem 0 0.6rem;
  font-style: italic;
}
.cluster-dim-description-detail { margin-top: 0.3rem; }
.cluster-description {
  background: #f7f9fc;
  border-left: 3px solid var(--c-accent);
  padding: 0.6rem 0.9rem;
  margin: 0.75rem 0;
  border-radius: 0 3px 3px 0;
}
.cluster-description strong { color: var(--c-text-primary); }
.cluster-description p { margin: 0.3rem 0 0; color: var(--c-text-primary); }
.cluster-description__short {
  font-style: italic;
  color: var(--c-text-muted);
  font-size: 0.92em;
}

/* === Watchlist-Tabs (MVP-8d) === */
.watchlist-tabs {
  display: flex;
  gap: 0.2rem;
  border-bottom: 2px solid var(--c-border-subtle);
  margin: 1rem 0 0.5rem;
  overflow-x: auto;
  overflow-y: hidden;  /* verhindert vertikalen Scrollbar durch -2px margin der .wl-tab */
  scrollbar-width: thin;
}
.wl-tab {
  padding: 0.6rem 1rem;
  background: transparent;
  border: 0;
  border-bottom: 3px solid transparent;
  margin-bottom: -2px;
  font: inherit;
  font-size: 0.95rem;
  font-weight: 500;
  color: var(--c-text-muted);
  cursor: pointer;
  white-space: nowrap;
  border-top-left-radius: 4px;
  border-top-right-radius: 4px;
}
.wl-tab:hover { color: var(--c-text-primary); background: var(--c-bg-sunken); }
.wl-tab.active {
  color: var(--c-accent);
  border-bottom-color: var(--c-accent);
  font-weight: 600;
  background: var(--c-bg-sunken);
}
.wl-tab__count {
  font-weight: 400;
  color: var(--c-text-muted);
  margin-left: 0.25em;
  font-size: 0.92em;
}

/* === Toast-Notifications (Errors aus HTMX-Calls) === */
.toasts {
  position: fixed;
  bottom: 1rem;
  right: 1rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  z-index: 1000;
  max-width: 26em;
  pointer-events: none;
}
.toast {
  padding: 0.7rem 1rem;
  border-radius: 4px;
  background: var(--c-accent);
  color: #fff;
  box-shadow: 0 4px 12px rgba(0,0,0,0.18);
  transition: opacity 0.3s;
  font-size: 0.92rem;
  pointer-events: auto;
}
.toast--error   { background: #c0392b; }
.toast--success { background: #27ae60; }
.toast--fade    { opacity: 0; }

/* === Ticker-Info-Box (Stammdaten oben auf /ticker/X) === */
.ticker-detail__symbol {
  font-size: 0.65em;
  font-weight: 400;
  color: var(--c-text-muted);
  letter-spacing: 0;
  margin-left: 0.3rem;
}

.ticker-info {
  background: #f7f9fc;
  border: 1px solid var(--c-border-subtle);
  border-radius: 4px;
  padding: 0.9rem 1.1rem;
  margin: 0.5rem 0 1.5rem;
}
.ticker-info--empty { background: var(--c-bg-sunken); }

.ticker-info__kpis {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem 1.5rem;
  margin: 0;
}
.ticker-info__kpis .kpi { display: flex; flex-direction: column; min-width: 8em; }
.ticker-info__kpis dt {
  font-size: 0.72em;
  color: var(--c-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.ticker-info__kpis dd {
  margin: 0;
  font-size: 0.98em;
  font-weight: 500;
  color: var(--c-text-primary);
}
.ticker-info__kpis dd a { color: var(--c-accent); }

/* ── KPI-Badges (DCF-Block, design9-analyse) ───────────────────────────── */
.kpi-warn-badge {
  display: inline-block;
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
  font-size: 0.72em;
  font-weight: 600;
  padding: 1px 5px;
  border-radius: 4px;
  margin-left: 3px;
  vertical-align: middle;
  cursor: help;
}
.kpi-upside-badge {
  font-size: 0.85em;
  font-weight: 600;
  margin-left: 3px;
}
.kpi--fair-value dt { font-weight: 600; }

.ticker-info__summary {
  margin: 0.85rem 0 0.3rem;
  font-size: 0.93rem;
  line-height: 1.55;
  color: var(--c-text-primary);
}
.ticker-info__summary p { margin: 0.3rem 0; }
.ticker-info__summary a.summary-toggle {
  font-size: 0.9em;
  font-weight: 500;
  margin-left: 0.3em;
}
.ticker-info__summary-lang {
  font-size: 0.75em;
  margin-top: 0.4rem;
  font-style: italic;
}

.ticker-info__source {
  margin-top: 0.5rem;
  font-size: 0.75em;
}
.ticker-info__source code { background: rgba(0,0,0,0.05); padding: 0.05em 0.3em; border-radius: 2px; }

.entry-clusters {
  background: #fafafa;
  border: 1px solid var(--c-border-subtle);
  border-radius: 4px;
  padding: 0.6rem 0.85rem;
  margin: 0.75rem 0;
}
.entry-clusters__chips {
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem;
  align-items: center;
  margin-bottom: 0.4rem;
}
.entry-clusters__edit summary {
  cursor: pointer;
  color: var(--c-text-muted);
  font-size: 0.85em;
}
.entry-clusters__edit summary:hover { color: var(--c-accent); }

.entry-clusters__actions {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  margin: 0.4rem 0 0.3rem;
}

.cluster-form {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  margin-top: 0.6rem;
}
.cluster-form label {
  display: grid;
  grid-template-columns: 10em 1fr;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.88rem;
}
.cluster-form input {
  padding: 0.35rem 0.5rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: 3px;
  font: inherit;
  font-size: 0.92rem;
}
.cluster-form button { align-self: flex-start; }

.news-list { list-style: none; padding: 0; }
.news-item { padding: 0.85rem 0; border-bottom: 1px solid var(--c-border-subtle); }
.news-item-meta {
  display: flex;
  gap: 0.6rem;
  align-items: center;
  font-size: 0.78em;
  color: var(--c-text-muted);
  margin-bottom: 0.2rem;
}
.news-source {
  background: var(--c-bg-sunken);
  padding: 0.1em 0.45em;
  border-radius: 3px;
  font-weight: 500;
}
.news-badge { padding: 0.05em 0.4em; border-radius: 3px; font-weight: 600; font-size: 0.92em; }
.news-badge--premium { background: #fff3d6; color: #7a5a00; }
/* market-context-schema (v0.71.0): Markt-Kontext-Badges */
.news-badge--recycled { background: #ffebd6; color: #8a5a00; }
.news-badge--priced-in { background: #e8e8e8; color: #555; }
.news-badge--hot { background: transparent; font-size: 1em; }
/* news-early-known-filter (v0.108.5): Freshness-Badges */
.news-badge--early { background: #d6f5e3; color: #1a6636; }
.news-badge--known { background: #ececec; color: #666; }

.news-headline { margin: 0.15rem 0 0.3rem; font-size: 1.05em; font-weight: 600; }
.news-headline a { text-decoration: none; color: var(--c-text-primary); }
.news-headline a:hover { color: var(--c-accent); text-decoration: underline; }
.news-lead { margin: 0; color: var(--c-text-muted); font-size: 0.93em; line-height: 1.45; }

.news-fetch-table { width: 100%; border-collapse: collapse; font-size: 0.85em; margin-top: 0.5rem; }
.news-fetch-table th, .news-fetch-table td {
  padding: 0.3rem 0.5rem;
  border-bottom: 1px solid var(--c-border-subtle);
  text-align: left;
}
.news-fetch-table th { background: rgba(0,0,0,0.03); font-weight: 600; }

.news-header-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; }

.news-tags { display: flex; gap: 0.3rem; flex-wrap: wrap; margin-top: 0.4rem; }
.news-tag {
  display: inline-block;
  padding: 0.1em 0.5em;
  background: var(--c-accent);
  color: #fff;
  border-radius: 3px;
  font-size: 0.78em;
  text-decoration: none;
  font-weight: 600;
}
.news-tag:hover { background: #003d80; color: #fff; }

.news-list--inline .news-item--compact { padding: 0.4rem 0; }
.news-list--inline .news-headline { font-size: 0.95em; margin: 0.1rem 0; font-weight: 500; }

.news-snippet-add { margin: 1rem 0; }
.news-snippet-add summary { cursor: pointer; color: var(--c-accent); padding: 0.4rem 0; }

.snippet-form {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 0.5rem 0.75rem;
  margin-top: 0.5rem;
  padding: 0.75rem;
  background: var(--c-bg-sunken);
  border-radius: 4px;
}
.snippet-form label { display: flex; flex-direction: column; font-size: 0.85em; color: var(--c-text-muted); }
.snippet-form label.full { grid-column: 1 / -1; }
.snippet-form label.checkbox { flex-direction: row; gap: 0.4rem; align-items: center; }
.snippet-form input, .snippet-form textarea, .snippet-form select {
  padding: 0.35rem 0.45rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: 3px;
  font: inherit;
  font-size: 0.92rem;
  margin-top: 0.2rem;
  background: #fff;
}
.snippet-form button { grid-column: 1 / -1; justify-self: start; }

/* === Chart-Section (ticker.html) === */
.chart-section { margin: 1rem 0 1.75rem; }
.chart-toolbar {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  margin-bottom: 0.5rem;
}
.chart-container {
  height: 380px;
  border: 1px solid var(--c-border-subtle);
  border-radius: 4px;
  background: #fff;
  position: relative;
}
.chart-loading {
  position: absolute;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
}
.chart-meta { margin-top: 0.4rem; font-size: 0.78em; }

.period-selector { display: flex; gap: 0.15rem; }
.period-selector button {
  padding: 0.28rem 0.6rem;
  font-size: 0.82em;
  background: var(--c-bg-sunken);
  color: var(--c-text-primary);
  border: 1px solid var(--c-border-subtle);
  cursor: pointer;
  border-radius: 3px;
  font-family: inherit;
}
.period-selector button:hover { background: #e8e8e8; }
.period-selector button.active {
  background: var(--c-accent);
  color: #fff;
  border-color: var(--c-accent);
}

/* === Home Mini-Dashboard === */
.home-stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: 0.5rem;
  margin: 1rem 0;
}
.stat-card {
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  border-radius: 4px;
  padding: 0.75rem 1rem;
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}
.stat-card strong { font-size: 1.6em; font-variant-numeric: tabular-nums; color: var(--c-accent); }
.stat-card span { font-size: 0.82em; color: var(--c-text-muted); }
.stat-card em { font-style: normal; color: var(--c-text-primary); font-weight: 500; }
.stat-card--link { text-decoration: none; color: inherit; cursor: pointer; }
.stat-card--link:hover { background: #eef5fc; border-color: var(--c-accent); }

.latest-news { margin: 0.5rem 0 1.5rem; }
.latest-news summary { cursor: pointer; padding: 0.4rem 0; font-weight: 500; }

/* === Report-Detail-Seite (Sandammeer-Style) === */
.report-breadcrumb { font-size: 0.9em; margin: 0 0 0.6rem; }
.report-breadcrumb a { color: var(--c-text-muted); }
.report-breadcrumb a:hover { color: var(--c-accent); }

.report-hero {
  background: linear-gradient(135deg, #f7f9fc 0%, #eef5fc 100%);
  border: 1px solid var(--c-border-subtle);
  border-radius: 6px;
  padding: 1.1rem 1.3rem;
  margin: 0 0 1.2rem;
}
.report-hero h1 { margin: 0 0 0.3rem; }
.report-hero__headline {
  margin: 0.3rem 0 0.7rem;
  font-size: 1.08em;
  color: var(--c-text-primary);
  font-weight: 500;
}
.report-hero__themes {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin: 0.6rem 0;
}
.theme-badge {
  display: inline-block;
  padding: 0.18rem 0.6rem;
  background: #fffbe6;
  border: 1px solid #e6c200;
  color: #7a5a00;
  border-radius: 999px;
  font-size: 0.82em;
  font-weight: 500;
}
.report-hero__meta {
  margin: 0.4rem 0 0;
  font-size: 0.88em;
  color: var(--c-text-muted);
  display: flex;
  flex-wrap: wrap;
  gap: 0.2rem 1.1rem;
}

.verdict-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(160px, 1fr));
  gap: 0.6rem;
  margin: 0 0 1.4rem;
}
.verdict-card {
  background: #fff;
  border: 1px solid var(--c-border-subtle);
  border-left: 4px solid var(--c-text-muted);
  border-radius: 4px;
  padding: 0.6rem 0.8rem;
}
.verdict-card dt {
  font-size: 0.72em;
  color: var(--c-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin: 0 0 0.2rem;
}
.verdict-card dd {
  margin: 0;
  font-size: 1.15em;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
.verdict-card--bull    { border-left-color: #4d9c2c; background: #f3faf0; }
.verdict-card--bull dd { color: #2f6b1a; }
.verdict-card--bear    { border-left-color: #c0392b; background: #fdf2f0; }
.verdict-card--bear dd { color: #8a2820; }
.verdict-card--neutral { border-left-color: #888; }

.report-section {
  margin: 1.4rem 0;
  padding: 0;
}
.report-section h2 {
  font-size: 1.15em;
  margin: 0 0 0.6rem;
  padding-bottom: 0.3rem;
  border-bottom: 1px solid var(--c-border-subtle);
}
.report-body {
  white-space: pre-wrap;
  line-height: 1.55;
  font-size: 0.98em;
}
.cluster-dim-line {
  margin: 0.35rem 0;
  display: flex;
  flex-wrap: wrap;
  gap: 0.3rem;
  align-items: center;
}
.cluster-dim-line strong { font-size: 0.85em; margin-right: 0.3rem; }

.report-roadmap {
  background: var(--c-bg-sunken);
  border: 1px dashed var(--c-border-subtle);
  border-radius: 4px;
  padding: 0.8rem 1.1rem;
}
.report-roadmap h2 { border-bottom: none; }
.report-roadmap__list {
  margin: 0.4rem 0 0 1.2rem;
  font-size: 0.92em;
  color: var(--c-text-primary);
}
.report-roadmap__list li { margin: 0.2rem 0; }

/* === Strukturierte LLM-Report-Sektionen === */
.prob-bar {
  display: flex;
  height: 32px;
  border-radius: 4px;
  overflow: hidden;
  border: 1px solid var(--c-border-subtle);
  font-size: 0.85em;
  font-weight: 600;
  color: var(--c-text-inverse);
}
.prob-bar__seg {
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 0 0.4rem;
  min-width: 0;
}
/* DESIGN-4 (design4-reports): raw Hex → Foundation-Token */
.prob-bar__seg--bull    { background: var(--c-bull-strong); }
.prob-bar__seg--neutral { background: var(--c-text-muted); }
.prob-bar__seg--bear    { background: var(--c-bear-strong); }

.report-narrative {
  display: grid;
  grid-template-columns: max-content 1fr;
  gap: 0.4rem 1rem;
  margin: 0;
}
.report-narrative dt {
  font-weight: 600;
  color: var(--c-text-muted);
  text-transform: uppercase;
  font-size: 0.78em;
  letter-spacing: 0.04em;
  padding-top: 0.15rem;
}
.report-narrative dd { margin: 0; }

.risk-matrix {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.92em;
}
.risk-matrix th, .risk-matrix td {
  border: 1px solid var(--c-border-subtle);
  padding: 0.4rem 0.6rem;
  text-align: left;
}
.risk-matrix th {
  background: var(--c-bg-sunken);
  font-weight: 600;
}
.risk-matrix tbody tr:hover { background: #f5f7fa; }

.report-llm-meta {
  margin-top: 1.5rem;
  padding-top: 0.6rem;
  border-top: 1px dashed var(--c-border-subtle);
  text-align: right;
  font-style: italic;
}

.llm-action-bar {
  margin: 0.5rem 0 1rem;
  padding: 0.6rem 0.8rem;
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  border-radius: 4px;
  display: flex;
  align-items: center;
  gap: 0.8rem;
  flex-wrap: wrap;
}
.llm-result { font-size: 0.92em; color: var(--c-text-muted); }
.llm-result a { font-weight: 500; }

/* === Glossar-Tooltips & /glossar-Seite === */
.verdict-card[title], .ticker-info__kpis .kpi[title], .risk-matrix th[title], .report-narrative dt[title] {
  cursor: help;
}
.verdict-card[title]:hover, .ticker-info__kpis .kpi[title]:hover {
  border-color: var(--c-accent);
}
.verdict-grid-hint {
  margin: -0.6rem 0 1.3rem;
  font-size: 0.85em;
  color: var(--c-text-muted);
  text-align: right;
}
.verdict-grid-hint a { color: var(--c-accent); text-decoration: none; }
.verdict-grid-hint a:hover { text-decoration: underline; }

.glossary-mark {
  display: inline-block;
  width: 1.1em;
  height: 1.1em;
  line-height: 1.05em;
  text-align: center;
  border-radius: 50%;
  background: var(--c-bg-sunken);
  color: var(--c-text-muted);
  font-size: 0.7em;
  text-decoration: none;
  margin-left: 0.25em;
  font-weight: 400;
  vertical-align: middle;
  border: 1px solid var(--c-border-subtle);
}
.glossary-mark:hover { background: var(--c-accent); color: #fff; border-color: var(--c-accent); }

.glossary-toc {
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  border-radius: 4px;
  padding: 0.6rem 0.9rem;
  margin: 0.8rem 0 1.4rem;
  font-size: 0.92em;
}
.glossary-toc a { margin-right: 0.8rem; }

.glossary-group { margin: 1.4rem 0; scroll-margin-top: 70px; }
.glossary-group h2 {
  font-size: 1.15em;
  padding-bottom: 0.3rem;
  border-bottom: 1px solid var(--c-border-subtle);
  margin: 0 0 0.6rem;
}
.glossary-list { margin: 0; }
.glossary-entry {
  padding: 0.7rem 0;
  border-bottom: 1px dashed var(--c-border-subtle);
  scroll-margin-top: 70px;
}
.glossary-entry:target {
  background: #fffbe6;
  margin: 0 -0.5rem;
  padding: 0.7rem 0.5rem;
  border-radius: 4px;
}
.glossary-entry dt {
  font-weight: 600;
  font-size: 1.02em;
  color: var(--c-text-primary);
  margin-bottom: 0.2rem;
}
.glossary-entry dd { margin: 0; }
.glossary-short {
  font-style: italic;
  color: var(--c-text-muted);
  margin: 0.2rem 0;
}
.glossary-long {
  margin: 0.3rem 0 0;
  line-height: 1.5;
}

/* === Ticker-Detail: shared research + slim watchlist-vorkommen === */
.shared-research {
  background: #f7f9fc;
  border: 1px solid var(--c-border-subtle);
  border-radius: 4px;
  padding: 0.8rem 1.1rem;
  margin: 1rem 0;
}
.shared-research__note {
  margin: 0 0 0.6rem;
  font-size: 0.85em;
  color: var(--c-text-muted);
}
.ticker-occurrences { margin: 1.5rem 0; }
.ticker-occurrences h2 {
  font-size: 1.1em;
  border-bottom: 1px solid var(--c-border-subtle);
  padding-bottom: 0.3rem;
  margin: 0 0 0.5rem;
}
.ticker-occurrences__list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.ticker-occurrence-slim {
  padding: 0.4rem 0;
  border-bottom: 1px dashed var(--c-border-subtle);
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem 1rem;
  align-items: baseline;
}
.ticker-occurrence-slim__wl {
  font-weight: 600;
  color: var(--c-accent);
  text-decoration: none;
}
.ticker-occurrence-slim__wl:hover { text-decoration: underline; }

.ticker-info__kpis--valuation {
  margin-top: 0.6rem;
  padding-top: 0.6rem;
  border-top: 1px dashed var(--c-border-subtle);
}
.ticker-info__kpis dd.positive { color: #2f6b1a; }
.ticker-info__kpis dd.negative { color: #8a2820; }

/* === Earnings-Table === */
.earnings-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.92em;
  margin: 0.5rem 0;
}
.earnings-table th, .earnings-table td {
  border-bottom: 1px solid var(--c-border-subtle);
  padding: 0.4rem 0.6rem;
  text-align: left;
}
.earnings-table th {
  background: var(--c-bg-sunken);
  font-weight: 600;
}
.earnings-upcoming { background: #f7f9fc; font-style: italic; }
.earnings-table .positive { color: #2f6b1a; font-weight: 600; }
.earnings-table .negative { color: #8a2820; font-weight: 600; }

/* PDF-Page-Link in News-Item-Meta */
.news-page-link {
  display: inline-block;
  padding: 0.05rem 0.4rem;
  border-radius: 3px;
  font-size: 0.78em;
  background: #fffbe6;
  color: #7a5a00;
  border: 1px solid #e6c200;
  text-decoration: none;
  margin-left: 0.2rem;
}
.news-page-link:hover { background: #fff3d6; }

/* Progress-Bar fuer PDF-Receive */
.progress-wrap {
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  border-radius: 4px;
  padding: 0.7rem 1rem;
  margin: 1rem 0;
}
.progress-status {
  font-weight: 500;
  margin-bottom: 0.4rem;
  color: var(--c-accent);
}
.progress-bar {
  height: 18px;
  background: #fff;
  border: 1px solid var(--c-border-subtle);
  border-radius: 9px;
  overflow: hidden;
  position: relative;
}
.progress-bar__fill {
  height: 100%;
  background: linear-gradient(90deg, #0050a0 0%, #4d9c2c 100%);
  width: 0%;
  transition: width 0.2s ease-out;
  background-size: 40px 40px;
  background-image: linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent), linear-gradient(90deg, #0050a0 0%, #4d9c2c 100%);
  animation: progress-stripes 1s linear infinite;
}
@keyframes progress-stripes { from { background-position: 0 0, 0 0; } to { background-position: 40px 0, 0 0; } }
.progress-time { font-size: 0.85em; margin-top: 0.3rem; text-align: right; }

/* Receive-Steps + Drop-Zone fuer PDF-Receive */
.receive-steps {
  background: var(--c-bg-sunken);
  border-left: 4px solid var(--c-accent);
  border-radius: 0 4px 4px 0;
  padding: 0.8rem 1rem 0.8rem 2.2rem;
  margin: 1rem 0;
  font-size: 0.95em;
}
.receive-steps li { margin: 0.3rem 0; }
.drop-zone {
  display: block;
  cursor: pointer;
  border: 3px dashed var(--c-accent);
  border-radius: 8px;
  padding: 2.5rem 1rem;
  text-align: center;
  background: #f7f9fc;
  transition: all 0.2s;
  margin: 1.5rem 0;
}
.drop-zone:hover { background: #eef5fc; }
.drop-zone--hover { background: #eef5fc; border-color: #ff8800; transform: scale(1.01); }
.drop-zone--processing { background: #fffbe6; border-color: #e6c200; }
.drop-zone--done { background: #f3faf0; border-color: #4d9c2c; }
.drop-zone__inner { display: flex; flex-direction: column; gap: 0.5rem; align-items: center; }
.drop-zone__icon { font-size: 3em; opacity: 0.6; }
.drop-zone__hint { font-size: 1.2em; font-weight: 600; color: var(--c-accent); }
.drop-zone__btn { cursor: pointer; }
.drop-zone__sub { font-size: 0.9em; }

/* PDF-Quick-Links + Bookmarklet */
.pdf-quick-links { display: flex; gap: 0.5rem; margin: 0.5rem 0; }
.pdf-method { margin: 0.5rem 0; padding-left: 0.5rem; border-left: 2px solid #e6c200; }
.pdf-method summary { cursor: pointer; font-weight: 500; padding: 0.3rem 0; }
.bookmarklet-drag {
  background: var(--c-bg-sunken);
  border: 2px dashed var(--c-accent);
  border-radius: 4px;
  padding: 1.2rem;
  margin: 1rem 0;
  text-align: center;
}
.bookmarklet-btn {
  display: inline-block;
  padding: 0.6rem 1.2rem;
  background: linear-gradient(90deg, #ff8800 0%, #0050a0 100%);
  color: #fff;
  font-weight: 700;
  border-radius: 4px;
  text-decoration: none;
  cursor: grab;
  user-select: none;
}
.bookmarklet-btn:active { cursor: grabbing; }

/* PDF-Upload-Form */
.news-pdf-upload {
  margin: 0.5rem 0;
  padding: 0.6rem 0.9rem;
  background: #fffbe6;
  border: 1px solid #e6c200;
  border-radius: 4px;
}
.news-pdf-upload summary { cursor: pointer; font-weight: 500; color: #7a5a00; }
.pdf-upload-form { display: flex; flex-wrap: wrap; gap: 0.5rem 1rem; margin-top: 0.5rem; align-items: end; }
.pdf-upload-form label { display: flex; flex-direction: column; font-size: 0.8em; color: var(--c-text-muted); }
.pdf-upload-form label.full { flex: 1 1 100%; }

/* LLM-Extract-Wrap im Snippet-Form */
.llm-extract-wrap {
  margin: 0.5rem 0;
  padding: 0.5rem 0.8rem;
  background: #eef5fc;
  border: 1px solid #0050a0;
  border-radius: 4px;
}
.llm-extract-wrap summary { cursor: pointer; font-weight: 500; color: #0050a0; }
.llm-extract-form textarea { width: 100%; font-family: ui-monospace, Consolas, monospace; font-size: 0.85em; }

/* Sub-Agents-Tabelle + Szenario-Tabelle (Sandammeer-Stil) */
.sub-agents-table td:first-child { white-space: nowrap; }
.scenario-table td { vertical-align: middle; font-variant-numeric: tabular-nums; }
.scenario-table td:first-child { white-space: nowrap; }

/* Idee-Form */
.idea-form-wrap {
  margin: 0.5rem 0 1rem;
  padding: 0.5rem 0.8rem;
  background: #fffbe6;
  border: 1px solid #e6c200;
  border-radius: 4px;
}
.idea-form-wrap summary {
  cursor: pointer;
  font-weight: 500;
  color: #7a5a00;
}
.idea-form {
  display: flex;
  gap: 0.5rem;
  flex-wrap: wrap;
  margin-top: 0.5rem;
  align-items: center;
}
.idea-form input[name="headline"] { flex: 2 1 250px; }
.idea-form input[name="note"] { flex: 1 1 200px; }

/* Job-Status */
.job-status {
  display: inline-block;
  padding: 0.1rem 0.5rem;
  border-radius: 999px;
  font-size: 0.78em;
  font-weight: 600;
}
.job-status--running { background: #fff3d6; color: #7a5a00; border: 1px solid #e6c200; animation: pulse 1.5s infinite; }
.job-status--done    { background: #e6f6e0; color: #2f6b1a; border: 1px solid #4d9c2c; }
.job-status--failed  { background: #fbe8e6; color: #8a2820; border: 1px solid #c0392b; }
@keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.6; } }

/* Report-Diff */
.report-diff {
  margin: 0.5rem 0 1rem;
  background: #fffbe6;
  border: 1px solid #e6c200;
  border-radius: 4px;
  padding: 0.5rem 0.8rem;
}
.report-diff summary {
  cursor: pointer;
  font-weight: 500;
  padding: 0.3rem 0;
}
.diff-table { width: 100%; border-collapse: collapse; font-size: 0.92em; margin-top: 0.3rem; }
.diff-table th, .diff-table td { padding: 0.3rem 0.5rem; vertical-align: top; border-bottom: 1px solid #e6c200; }
.diff-table .diff-old { color: #8a2820; text-decoration: line-through; opacity: 0.8; }
.diff-table .diff-new { color: #2f6b1a; font-weight: 500; }

/* Ticker-Logo + Cooldown */
.ticker-logo {
  width: 18px;
  height: 18px;
  min-width: 18px;  /* kein Layout-Shift bei nachtraeglichem Hide */
  vertical-align: middle;
  margin-right: 0.3rem;
  border-radius: 2px;
  background: #fff;
  object-fit: contain;
}
.subnav__logo {
  width: 24px;
  height: 24px;
  vertical-align: middle;
  border-radius: 3px;
  background: #fff;
  object-fit: contain;
}
.llm-cooldown {
  color: #7a5a00;
  font-size: 0.85em;
  margin-left: 0.5rem;
}

/* Audit-Action-Pill */
.action-pill {
  display: inline-block;
  padding: 0.1rem 0.5rem;
  border-radius: 999px;
  font-size: 0.78em;
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  white-space: nowrap;
}

/* Konsensus-Box auf /ticker/{X} */
/* [DESIGN-2] Cluster 3: raw-Hex-Gradient + 4px-Radius → Token + var(--r-card) */
.consensus-box {
  background: var(--c-accent-soft);            /* war: linear-gradient(90deg,#f7f9fc,#eef5fc) */
  border: 1px solid var(--c-accent);
  border-left: 4px solid var(--c-accent);
  border-radius: var(--r-card);                /* war: 4px → Foundation-Card-Radius */
  padding: var(--sp-3) var(--sp-4);            /* war: 0.7rem 1rem */
  margin: var(--sp-2) 0 var(--sp-5);           /* war: 0.6rem 0 1.2rem */
}
.consensus-box h3 { margin: 0 0 0.3rem; font-size: 1em; color: var(--c-accent); }
.consensus-box__line { display: flex; gap: 0.8rem 1.2rem; flex-wrap: wrap; align-items: center; }
.consensus-box__score strong { font-size: 1.2em; font-variant-numeric: tabular-nums; }
.consensus-box__trend { font-weight: 500; }
.consensus-box__trend.positive { color: var(--c-bull-strong); }   /* war: #2f6b1a */
.consensus-box__trend.negative { color: var(--c-bear-strong); }   /* war: #8a2820 */

/* FX-Rate-Box auf Stats-Seite */
.fx-rate-box {
  background: linear-gradient(90deg, #fffbe6, #eef5fc);
  border: 1px solid #e6c200;
  border-radius: 4px;
  padding: 0.7rem 1rem;
  margin: 1rem 0 1.5rem;
  font-size: 0.98em;
}
.fx-rate-box strong { color: #0050a0; }

.stats-cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 0.6rem;
  margin: 0.5rem 0;
}

/* Nav-Counter */
.nav-count {
  font-size: 0.78em;
  color: var(--c-text-muted);
  font-weight: 400;
}

/* Reports-Toolbar + Pills + Mini-Bar */
.reports-toolbar {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  flex-wrap: wrap;
  gap: 0.8rem;
  margin: 0.6rem 0 1rem;
}
.reports-filter {
  display: flex;
  gap: 0.5rem 0.8rem;
  flex-wrap: wrap;
  align-items: flex-end;
}
.reports-filter label {
  display: flex;
  flex-direction: column;
  font-size: 0.75em;
  color: var(--c-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  gap: 0.1rem;
}
.reports-filter select, .reports-filter input {
  font-size: 0.95rem;
  padding: 0.25rem 0.4rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: 3px;
  text-transform: none;
  letter-spacing: 0;
  color: var(--c-text-primary);
}
.dir-pill, .conf-pill {
  display: inline-block;
  padding: 0.1rem 0.5rem;
  border-radius: 999px;
  font-size: 0.78em;
  font-weight: 600;
  letter-spacing: 0.02em;
}
/* [DESIGN-2 Owner / DESIGN-4 konsumiert] Cluster 2: raw-Hex → Foundation-Token (identische Werte, Batch-A) */
.dir-pill--bull    { background: var(--c-bull-soft);    color: var(--c-bull-text);          border: 1px solid var(--c-bull-strong); }
.dir-pill--bear    { background: var(--c-bear-soft);    color: var(--c-bear-text);          border: 1px solid var(--c-bear-strong); }
.dir-pill--neutral { background: var(--c-neutral-soft); color: var(--c-text-secondary);     border: 1px solid var(--c-border-strong); }
/* Bundle T (bestand-anzeige-ux-overhaul): CSS-Bug-Fix — direction="neut" erzeugt dir-pill--neut,
   aber nur --neutral war definiert. Deckt wertpapiere (latent) + bestand (neu) ab. */
.dir-pill--neut    { background: var(--c-neutral-soft); color: var(--c-text-secondary);     border: 1px solid var(--c-border-strong); }
.conf-pill--hoch    { background: var(--c-accent-soft); color: var(--c-accent);             border: 1px solid var(--c-accent); }
.conf-pill--mittel  { background: var(--c-warn-soft);   color: var(--c-warn-text);          border: 1px solid var(--c-warn-strong); }
.conf-pill--niedrig { background: var(--c-neutral-soft); color: var(--c-text-muted);        border: 1px solid var(--c-border-strong); }
.prob-bar--mini {
  height: 18px;
  font-size: 0.7em;
  border-radius: 3px;
  min-width: 100px;
}
.prob-bar--mini .prob-bar__seg {
  padding: 0 0.2rem;
  font-size: 0.85em;
}
.theme-badge--mini {
  padding: 0.05rem 0.4rem;
  font-size: 0.72em;
  margin-right: 0.2rem;
}
.reports-table td { vertical-align: middle; }
.reports-themes, .reports-wls { font-size: 0.85em; }

/* Cluster-Performance-Karten */
.cluster-perf { margin: 1rem 0 1.5rem; }
.cluster-perf h2 {
  font-size: 1.05em;
  margin-bottom: 0.6rem;
  border-bottom: 1px solid var(--c-border-subtle);
  padding-bottom: 0.3rem;
}
.cluster-perf__cards {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: 0.6rem;
}
.cluster-perf__card {
  background: #fff;
  border: 1px solid var(--c-border-subtle);
  border-left: 4px solid var(--c-text-muted);
  border-radius: 4px;
  padding: 0.6rem 0.9rem;
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}
.cluster-perf__card.positive { border-left-color: #4d9c2c; background: #f3faf0; }
.cluster-perf__card.positive dd { color: #2f6b1a; }
.cluster-perf__card.negative { border-left-color: #c0392b; background: #fdf2f0; }
.cluster-perf__card.negative dd { color: #8a2820; }
.cluster-perf__card dt {
  font-size: 0.72em;
  color: var(--c-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin: 0;
}
.cluster-perf__card dd {
  font-size: 1.25em;
  font-weight: 700;
  font-variant-numeric: tabular-nums;
  margin: 0;
}
.cluster-perf__sub { font-size: 0.78em; margin-top: 0.2rem; }
.wl-perf { font-variant-numeric: tabular-nums; text-align: right; }
.wl-perf .positive { color: #2f6b1a; font-weight: 500; }
.wl-perf .negative { color: #8a2820; font-weight: 500; }

/* Conviction-Verlauf (Sparkline + Delta) */
.conviction-history {
  display: flex;
  gap: 1rem;
  align-items: center;
  padding: 0.5rem 0.8rem;
  background: var(--c-bg-sunken);
  border-radius: 4px;
  margin: 0.4rem 0 1rem;
}
.conviction-spark {
  width: 200px;
  height: 40px;
  flex-shrink: 0;
}
.consensus-box__spark {
  display: inline-flex;
  flex-direction: column;
  gap: 2px;
  align-items: flex-start;
  margin-left: auto;
  cursor: help;
}
.conviction-spark--hero {
  width: 160px;
  height: 32px;
  border: 1px solid var(--c-border, #ddd);
  border-radius: 3px;
  background: #fff;
}
.consensus-box__spark__legend {
  font-size: 0.75em;
  line-height: 1;
}
.conviction-history__meta strong {
  font-size: 1.3em;
  font-variant-numeric: tabular-nums;
  margin-right: 0.6rem;
}
.conviction-history__meta .positive { color: #2f6b1a; font-weight: 500; }
.conviction-history__meta .negative { color: #8a2820; font-weight: 500; }
.conviction-delta {
  font-size: 0.6em;
  font-weight: 400;
  margin-left: 0.3rem;
  vertical-align: middle;
}
.conviction-delta.positive { color: #2f6b1a; }
.conviction-delta.negative { color: #8a2820; }

/* Indikator-Sparklines (v0.53.0) */
.ind-spark-cell { white-space: nowrap; }
.ind-spark {
  width: 100px;
  height: 28px;
  vertical-align: middle;
  border-bottom: 1px solid var(--c-border, #ddd);
}
.ind-spark__meta {
  display: inline-block;
  margin-left: 0.4rem;
  font-variant-numeric: tabular-nums;
  font-size: 0.85em;
  vertical-align: middle;
}
.ind-spark__meta.positive { color: #2f6b1a; }
.ind-spark__meta.negative { color: #8a2820; }

/* Browser-Notifications Bell (v0.54.0) */
.cc-bell {
  position: relative;
  background: transparent;
  border: 1px solid transparent;
  border-radius: 4px;
  padding: 2px 6px;
  font-size: 1.05em;
  cursor: pointer;
  margin-left: 0.4rem;
  line-height: 1;
}
/* DESIGN-10: --c-bg-soft ist Alt-Token (kein :root-Eintrag, Fallback #f3f4f6 ≈ --c-bg-sunken) */
.cc-bell:hover { background: var(--c-bg-sunken); }
/* DESIGN-10: On-State #4d9c2c (Lime-Grün) → --c-bull-strong/#047857 (Emerald-Grün, token-konform)
   Sichtbarer Grüntön-Wechsel ist intentional (F-1 MINOR, architecture.md §3.1 DEV-NOTE) */
.cc-bell[data-state='on'] {
  border-color: var(--c-bull-strong);
  background: var(--c-bull-soft);
}
.cc-bell[data-state='off'] { opacity: 0.55; }
.cc-bell__badge {
  position: absolute;
  top: -4px;
  right: -4px;
  background: var(--c-bear-strong);  /* DESIGN-10: war #c0392b (nah an --c-bear-strong #b91c1c) */
  color: var(--c-text-inverse);  /* war #fff */
  font-size: 0.65em;
  font-weight: 700;
  border-radius: 8px;
  padding: 1px 5px;
  line-height: 1.1;
}

/* Portfolio-Wert in Watchlist-Tabelle */
.wl-price, .wl-value { text-align: right; font-variant-numeric: tabular-nums; }
.wl-price__cur { font-size: 0.85em; margin-left: 0.2rem; }
.wl-value strong { color: #2f6b1a; }
.wl-tfoot td { padding: 0.5rem 0.6rem; background: #f3faf0; border-top: 2px solid #4d9c2c; }

/* Sentiment-Pills (News-Items + Aggregate) */
.sentiment-pill {
  display: inline-block;
  padding: 0.05rem 0.4rem;
  border-radius: 999px;
  font-size: 0.78em;
  font-weight: 500;
  margin-left: 0.2rem;
}
.sentiment-pill--positive { background: #e6f6e0; color: #2f6b1a; }
.sentiment-pill--neutral  { background: #f1f1f1; color: #555; }
.sentiment-pill--negative { background: #fbe8e6; color: #8a2820; }
.sentiment-aggregate .sentiment-pill { margin-left: 0.3rem; }

/* News-Detail-Page (kompaktes Layout) */
.news-detail { max-width: 64rem; margin: 0 auto; }
.news-detail__head { border-bottom: 1px solid var(--c-border-subtle); padding-bottom: 0.8rem; margin-bottom: 1.2rem; }
.news-detail__meta-row {
  display: flex; flex-wrap: wrap; gap: 0.5rem; align-items: center;
  font-size: 0.85rem; color: var(--c-text-muted); margin-bottom: 0.5rem;
}
.news-detail__source { color: var(--c-text-primary); }
.news-detail__date { color: var(--c-text-muted); }
.news-detail__kind { font-size: 0.75rem; opacity: 0.7; }
.news-detail__sent {
  display: inline-flex; align-items: center; gap: 0.2rem;
  padding: 0.1rem 0.5rem; border-radius: 3px;
  font-size: 0.75rem; font-weight: 500;
}
.news-detail__sent--positive { background: #d1fae5; color: #065f46; }
.news-detail__sent--negative { background: #fee2e2; color: #991b1b; }
.news-detail__sent--neutral  { background: #f3f4f6; color: #4b5563; }

.news-detail__headline {
  font-size: 1.5rem;
  line-height: 1.3;
  margin: 0.3rem 0 0.8rem 0;
  color: var(--c-text-primary);
}
.news-detail__actions { display: flex; flex-wrap: wrap; gap: 0.4rem; margin-top: 0.5rem; }
.news-detail__lead-section { margin: 1rem 0 1.5rem; }
.news-detail__lead {
  font-size: 1rem;
  line-height: 1.6;
  color: var(--c-text-primary);
  padding: 0.8rem 1rem;
  background: #f9fafb;
  border-left: 3px solid var(--c-accent);
  border-radius: 3px;
  white-space: pre-wrap;
}
.news-detail__h2 { font-size: 1.05rem; margin: 1rem 0 0.4rem 0; }
.news-detail__tickers { list-style: none; padding: 0; margin: 0; }
.news-detail__tickers li { padding: 0.3rem 0; border-bottom: 1px solid #f0f0f0; }
.news-detail__wl-pill {
  display: inline-block; padding: 0.05rem 0.4rem;
  background: #eef5e7; color: #2f6b1a; font-size: 0.7rem;
  border-radius: 3px; margin-left: 0.3rem;
}
.news-detail__technical {
  margin-top: 2rem; padding-top: 0.6rem;
  border-top: 1px solid var(--c-border-subtle);
  font-size: 0.75rem;
}

/* ── Insights — Cockpit-Rebuild (insights-ui-rebuild Sprint_2026_14 Lane C) ── */
/* Token-Migration: raw-Hex → var(--..); F-2: .insights-card h2 entfernt (Specificity-Clash verhindert) */
.insights-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(28rem, 1fr));
  gap: var(--sp-4);
  margin-top: var(--sp-4);
}
/* Card = weiss auf grauem Page-Hintergrund (--c-bg-card, Cockpit-Standard, F-1 DEV-Entscheidung) */
.insights-card {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  overflow: hidden;
}
/* BEM: Card-Header — Versalien (Praezedenz: .cluster-perf__card dt Z.2256-2261) */
.insights-card__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: var(--sp-3) var(--sp-4);
  border-bottom: 1px solid var(--c-border-subtle);
}
.insights-card__head h2 {
  font-size: var(--fs-sm);
  font-weight: var(--fw-semibold);
  color: var(--c-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  margin: 0;
}
.insights-card__link {
  font-size: var(--fs-sm);
  color: var(--c-accent);
  text-decoration: none;
  white-space: nowrap;
}
.insights-card__link:hover { color: var(--c-accent-hover); }
/* BEM: Card-Body */
.insights-card__body {
  padding: var(--sp-3) var(--sp-4);
}
.insights-list { list-style: none; padding: 0; margin: 0.5rem 0; }
.insights-list li { padding: 0.3rem 0; border-bottom: 1px solid var(--c-border-subtle); font-size: 0.88rem; }
/* ind-pill: Token-Migration (raw-Hex→var, F-2 vollstaendig) */
.ind-pill { display: inline-block; padding: 0.05rem 0.4rem; font-size: 0.72rem; border-radius: 3px; font-weight: 500; margin-left: 0.2rem; }
.ind-pill--bull    { background: var(--c-bull-soft);    color: var(--c-bull-text); }
.ind-pill--bear    { background: var(--c-bear-soft);    color: var(--c-bear-text); }
.ind-pill--neutral { background: var(--c-neutral-soft); color: var(--c-neutral-text); }
/* Responsive Breakpoints (Cockpit-Konvention 768px/600px) */
@media (max-width: 768px) {
  .insights-grid { grid-template-columns: 1fr; gap: var(--sp-3); }
}
@media (max-width: 600px) {
  .insights-grid { grid-template-columns: minmax(100%, 1fr); gap: var(--sp-2); }
  .insights-card__head, .insights-card__body { padding: var(--sp-2) var(--sp-3); }
}

/* ── CC-195 report-tldr-summary: additiver Modifier auf .insights-card ──────
   (Review-Fix F-1: .insights-card als Schale statt eigenem Card-BEM-Set,
   analog .radar-card-tile-Praezedenzfall Z.8792.) Nur var(--...)-Tokens. */
.report-tldr {
  margin-bottom: var(--sp-4);
}
.report-tldr--bull    { border-left: 3px solid var(--c-bull-strong); }
.report-tldr--bear    { border-left: 3px solid var(--c-bear-strong); }
.report-tldr--neutral { border-left: 3px solid var(--c-neutral-strong); }
.report-tldr__direction { margin: 0 0 var(--sp-2) 0; }
.report-tldr__thesis {
  margin: 0 0 var(--sp-2) 0;
  font-size: var(--fs-body);
  font-weight: var(--fw-semibold);
  color: var(--c-text-primary);
}
.report-tldr__watch {
  margin: 0;
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
}
@media (max-width: 600px) {
  .report-tldr__thesis, .report-tldr__watch { font-size: var(--fs-sm); }
}

.funds-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(24rem, 1fr)); gap: 1rem; margin-top: 1rem; }
.funds-card { background: #fafafa; border: 1px solid var(--c-border-subtle); border-radius: 5px; padding: 0.8rem 1rem; }
.funds-card h2 { font-size: 1.05rem; margin-top: 0; }
.funds-snapshot { margin: 1.5rem 0; }

.themen-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(24rem, 1fr)); gap: 1rem; margin-top: 1rem; }
.theme-card { background: #fafafa; border: 1px solid var(--c-border-subtle); border-radius: 5px; padding: 0.8rem 1rem; }
.theme-card h2 { font-size: 1.05rem; margin-top: 0; }
/* Responsive Breakpoints fuer Fonds-/Themen-Grid (analog .insights-grid Cockpit-Konvention 768/600px) */
@media (max-width: 768px) {
  .funds-grid, .themen-grid { grid-template-columns: 1fr; gap: var(--sp-3); }
}
@media (max-width: 600px) {
  .funds-grid, .themen-grid { grid-template-columns: minmax(100%, 1fr); gap: var(--sp-2); }
}

.ind-section { margin: 1.5rem 0; }

/* === Subnav (Context-Zeile unter Hauptmenu) === */
.subnav {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 0.4rem 1rem;
  padding: 0.4rem 1rem;
  background: #eef5fc;
  border-bottom: 1px solid var(--c-border-subtle);
  font-size: 0.92em;
}
.subnav__active {
  font-weight: 600;
  color: var(--c-accent);
}
.subnav__name {
  color: var(--c-text-muted);
}
.subnav__links {
  margin-left: auto;
  display: flex;
  gap: 0.8rem;
}
.subnav__links a {
  font-size: 0.92em;
  color: var(--c-accent);
  text-decoration: none;
}
.subnav__links a:hover { text-decoration: underline; }

/* === Breadcrumbs === */
.breadcrumbs {
  font-size: 0.88em;
  color: var(--c-text-muted);
  margin: 0.3rem 0 0.8rem;
}
.breadcrumbs a {
  color: var(--c-text-muted);
  text-decoration: none;
}
.breadcrumbs a:hover {
  color: var(--c-accent);
  text-decoration: underline;
}
.breadcrumbs__sep {
  margin: 0 0.3rem;
  color: var(--c-border-subtle);
}
.breadcrumbs__current {
  color: var(--c-text-primary);
  font-weight: 500;
}
.breadcrumbs__hint {
  margin-left: 0.5rem;
}

/* === Sitemap === */
.sitemap, .sitemap ul {
  list-style: none;
  padding-left: 1.2rem;
}
.sitemap > li {
  padding: 0.5rem 0;
  border-bottom: 1px dashed var(--c-border-subtle);
}
.sitemap__tickers {
  columns: 3;
  column-gap: 1rem;
  font-size: 0.88em;
}
.sitemap-tree {
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  padding: 0.8rem 1rem;
  border-radius: 4px;
  font-size: 0.85em;
  line-height: 1.4;
  overflow-x: auto;
}

.tech-summary {
  font-family: ui-monospace, SFMono-Regular, Consolas, monospace;
  font-size: 0.82em;
  padding: 0.3rem 0.6rem;
  background: var(--c-bg-sunken);
  border-left: 3px solid var(--c-accent);
  border-radius: 0 3px 3px 0;
  margin-top: 0.4rem;
  cursor: help;
}

/* === Mobile CSS & Touch-Target Helpers === */
.touch-target {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 44px;
  min-height: 44px;
  padding: 0.6rem 0.8rem;
  border-radius: 0.75rem;
  touch-action: manipulation;
  -webkit-tap-highlight-color: rgba(0,0,0,0.12);
}

.mobile-nav-toggle-input {
  position: absolute;
  left: -9999px;
}

.mobile-nav-toggle {
  display: none;
  border: 1px solid transparent;
  background: transparent;
  font-size: 1.25rem;
  line-height: 1;
  color: inherit;
  cursor: pointer;
}

.mobile-nav-overlay {
  display: none;
}

.mobile-nav-backdrop {
  display: none;
}

.mobile-nav-panel {
  display: none;
}

.mobile-nav-panel__header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  gap: 0.75rem;
  margin-bottom: 1rem;
}

.mobile-nav-links {
  display: flex;
  flex-direction: column;
  gap: 0.6rem;
}

.mobile-nav-links a {
  display: block;
  padding: 0.9rem 1rem;
  border-radius: 0.85rem;
  background: #f8fbff;
  color: var(--c-text-primary);
  text-decoration: none;
  min-height: 44px;
}

.mobile-nav-links a:hover {
  background: #e8f2ff;
}

@media (max-width: 768px) {
  .header-nav { display: none; }
  .mobile-nav-toggle { display: inline-flex; }
  .cc-bell { min-width: 44px; min-height: 44px; padding: 0.4rem 0.6rem; }
  .header-user, .prices-refresh-marker { display: none; }
  /* Version bleibt auf Mobile sichtbar — User braucht den Hinweis dass
     der PROD-Stack tatsaechlich auf der aktuellen Version laeuft, gerade
     wenn er via Handy verifiziert. Klein im Header rechts neben dem
     Burger-Toggle. */
  .version {
    display: inline-block;
    font-size: 0.7rem;
    color: var(--c-text-muted);
    margin-left: auto;
    padding: 0 0.5rem;
    align-self: center;
  }

  /* Footer auf Mobile in den normalen Flow (B1, Bundle A) */
  footer {
    position: static;
    box-shadow: none;
    margin-top: 2rem;
  }
  body { padding-bottom: 0; }
  .footer-nav { gap: 0.6rem; }
  .footer-meta { display: none; }

  /* Admin-"Mehr"-Akkordeon */
  .footer-nav-more {
    background: transparent;
    border: none;
    padding: 0;
    color: var(--c-text-muted);
  }
  .footer-nav-more > summary {
    cursor: pointer;
    list-style: none;
    color: var(--c-text-muted);
    text-decoration: none;
  }
  .footer-nav-more > summary::-webkit-details-marker { display: none; }
  .footer-nav-more[open] > summary { color: var(--c-text-primary); }
  .footer-nav-more__panel {
    position: absolute;
    bottom: calc(100% + 0.3rem);
    right: 0.5rem;
    background: #fff;
    border: 1px solid var(--c-border-subtle);
    border-radius: 10px;
    padding: 0.5rem 0.8rem;
    box-shadow: 0 -2px 12px rgba(0,0,0,0.12);
    display: flex;
    flex-direction: column;
    gap: 0.5rem;
    z-index: 50;
    min-width: 180px;
  }
  .footer-nav-more__panel a { color: var(--c-text-primary); text-decoration: none; padding: 0.4rem 0; }

  .mobile-nav-overlay {
    position: fixed;
    inset: 0;
    z-index: 300;
    display: block;
    pointer-events: none;
  }

  .mobile-nav-toggle-input:checked ~ .mobile-nav-overlay {
    pointer-events: auto;
  }

  /* Mobile-Nav-Backdrop nur sichtbar wenn Toggle checked (B3, Bundle A) */
  .mobile-nav-backdrop {
    display: block;
    position: absolute;
    inset: 0;
    background: rgba(0,0,0,0.35);
    cursor: pointer;
    opacity: 0;
    transition: opacity 220ms ease;
    pointer-events: none;  /* doppelte Sicherheit, der Overlay-Parent regelt das schon */
  }

  .mobile-nav-toggle-input:checked ~ .mobile-nav-overlay .mobile-nav-backdrop {
    opacity: 1;
    pointer-events: auto;
  }

  .mobile-nav-panel {
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    width: min(320px, 90vw);
    height: 100%;
    background: #fff;
    padding: 1rem;
    box-shadow: -2px 0 24px rgba(0,0,0,0.14);
    transform: translateX(100%);
    transition: transform 220ms ease;
    overflow-y: auto;
  }

  .mobile-nav-toggle-input:checked ~ .mobile-nav-overlay .mobile-nav-panel {
    transform: translateX(0);
  }

  .mobile-nav-close {
    margin-left: auto;
    border: 1px solid transparent;
    background: transparent;
    font-size: 1.25rem;
    line-height: 1;
    color: inherit;
  }

  .market-ticker,
  .news-ticker {
    white-space: normal;
    overflow-x: auto;
  }

  .home-stats { gap: 0.75rem; }
  .wl-search-bar { display: grid; gap: 0.75rem; }
  .wl-search-bar__field { width: 100%; display: block; }
  .wl-search-input { width: 100%; }

  /* Mobile Table-Stacking: generisches Pattern via [data-mobile="stack"],
     .wl-table bleibt als Alias erhalten (B2, Bundle A) */
  table[data-mobile="stack"],
  .wl-table {
    display: block;
    width: 100%;
    border: none;
  }

  table[data-mobile="stack"] thead,
  .wl-table thead { display: none; }

  table[data-mobile="stack"] tbody tr,
  .wl-table tbody tr {
    display: block;
    margin-bottom: 1rem;
    border: 1px solid var(--c-border-subtle);
    border-radius: 14px;
    overflow: hidden;
    background: #fff;
    box-shadow: 0 1px 4px rgba(0,0,0,0.06);
  }

  table[data-mobile="stack"] td,
  .wl-table td {
    display: grid;
    grid-template-columns: max-content 1fr;
    gap: 0.75rem;
    padding: 0.85rem 0.9rem;
    border-bottom: 1px solid var(--c-border-subtle);
    text-align: left;
  }

  table[data-mobile="stack"] td:last-child,
  .wl-table td:last-child { border-bottom: none; }

  table[data-mobile="stack"] td::before,
  .wl-table td::before {
    content: attr(data-label);
    font-weight: 600;
    color: var(--c-text-muted);
    white-space: nowrap;
  }

  /* Fallback: <td>s ohne data-label rendern ohne ::before-Spalte
     (Single-Column-Layout, nicht hässlich aber ohne Label) */
  table[data-mobile="stack"] td:not([data-label])::before,
  .wl-table td:not([data-label])::before {
    content: none;
  }
  table[data-mobile="stack"] td:not([data-label]),
  .wl-table td:not([data-label]) {
    grid-template-columns: 1fr;
  }

  /* Bestehende .wl-table-Spezialregeln unverändert übernommen */
  .wl-table .wl-actions {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.5rem;
  }

  .wl-table .wl-actions .wl-btn {
    width: 100%;
  }

  .wl-table tr.wl-tfoot {
    display: block;
  }

  .wl-table tr.wl-tfoot td {
    display: block;
    grid-template-columns: 1fr;
  }

  .add-form,
  .add-form--entry { display: grid; gap: 0.75rem; }
  .add-form input,
  .add-form button { width: 100%; }
  .add-form input { font-size: 16px; }

  .period-selector { flex-wrap: wrap; }

  .news-list--inline .news-item--compact,
  .news-item { padding: 0.85rem 0; }

  .today-ticker-card,
  .stat-card,
  .mobile-card { width: 100%; }

  .mobile-card {
    background: #fff;
    border: 1px solid var(--c-border-subtle);
    border-radius: 14px;
    box-shadow: 0 1px 6px rgba(0,0,0,0.05);
    padding: 1rem;
    margin-bottom: 1rem;
  }

  input,
  button,
  select,
  textarea { font-size: 16px; }
}

/* ── Einzelreport-Form (Phase 8) ─────────────────────────────────────────── */

.einzelreport-section {
  border: 1px solid var(--c-border-subtle);
  border-radius: 8px;
  padding: 1.25rem 1.5rem;
  margin-bottom: 1.5rem;
  background: #fff;
}

.einzelreport-section h2 {
  margin-top: 0;
  margin-bottom: 0.5rem;
  font-size: 1.1rem;
}

.einzelreport-section--disabled {
  opacity: 0.5;
  pointer-events: none;
}

.einzelreport-form {
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
  max-width: 640px;
}

.einzelreport-field-label {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  font-weight: 500;
}

.einzelreport-field-label input[type="file"],
.einzelreport-field-label input[type="url"],
.einzelreport-field-label textarea {
  width: 100%;
  padding: 0.5rem 0.6rem;
  border: 1px solid var(--c-border-subtle);
  border-radius: 6px;
  font-family: inherit;
  font-size: 0.95rem;
}

.einzelreport-field-label textarea {
  resize: vertical;
  min-height: 160px;
}

.einzelreport-checkbox {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  font-size: 0.9rem;
  cursor: pointer;
}

/* ── Reports-Liste: Quelle-Spalte (Phase 8) ──────────────────────────────── */

.reports-source {
  white-space: nowrap;
  max-width: 200px;
}

.source-icon {
  font-size: 1rem;
  margin-right: 0.3rem;
}

.source-label-short {
  font-size: 0.8rem;
  color: var(--c-text-muted);
  overflow: hidden;
  text-overflow: ellipsis;
  vertical-align: middle;
}

/* ── Report-Hero: Themen-Report (Phase 8) ────────────────────────────────── */

.report-source-icon {
  font-size: 1.2rem;
  margin-right: 0.3rem;
}

.report-hero__source {
  font-size: 0.9rem;
  color: var(--c-text-muted);
  margin: 0.3rem 0 0;
}

.report-hero__source a {
  word-break: break-all;
}

/* Key-Facts-Liste (Themen-Report-spezifisch) */
.key-facts-list {
  margin: 0;
  padding-left: 1.4rem;
}

.key-facts-list li {
  margin-bottom: 0.4rem;
  line-height: 1.5;
}

/* Status-Pills fuer HTMX-Polling-Fragment */
.ok-pill {
  display: inline-block;
  padding: 0.2rem 0.6rem;
  background: #d4edda;
  color: #155724;
  border-radius: 4px;
  font-size: 0.85rem;
}

.err-pill {
  display: inline-block;
  padding: 0.2rem 0.6rem;
  background: #f8d7da;
  color: #721c24;
  border-radius: 4px;
  font-size: 0.85rem;
}

.warn-pill {
  display: inline-block;
  padding: 0.1rem 0.4rem;
  background: #fff3cd;
  color: #856404;
  border-radius: 4px;
  font-size: 0.8rem;
}

/* ── Bundle G (v0.72.0): Read-State Styles ──────────────────────────────── */

/* Gelesene News-Karten: gedimmt (55% Opazitaet) */
.news-item--read {
  opacity: 0.55;
  transition: opacity 0.25s ease;
}
.news-item--read:hover {
  opacity: 0.8;
}

/* Gelesene Report-Zeilen: gedimmt */
.report-row--read {
  opacity: 0.55;
  transition: opacity 0.25s ease;
}
.report-row--read:hover {
  opacity: 0.8;
}

/* Sprint10 llm-cost-usage-dashboard: Admin LLM-Cost-Badge im Header-Nav */
/* Eigene Klasse (nicht .nav-count-unread recyclen — gehoert news-unread-badge-cap) */
.nav-llm-cost {
  display: inline-flex;
  align-items: center;
  padding: 0.15em 0.55em;
  font-size: 0.8rem;
  font-weight: 600;
  color: var(--c-text-muted, #6b7280);
  text-decoration: none;
  border-radius: var(--r-sm, 8px);
  border: 1px solid var(--c-border-subtle, #e5e5e5);
  background: var(--c-bg-card, #fff);
  transition: background 0.15s ease, color 0.15s ease;
  white-space: nowrap;
}
.nav-llm-cost:hover {
  background: var(--c-bg-hover, #f3f4f6);
  color: var(--c-text, #111);
}
.nav-llm-cost--warn {
  background: var(--c-bear-strong, #b91c1c);
  color: var(--c-text-inverse, #fff);
  border-color: var(--c-bear-strong, #b91c1c);
}
.nav-llm-cost--warn:hover {
  background: #991b1b;
  color: #fff;
}

/* Unread-Badge im Header-Nav (rote Pill) */
.nav-count-unread {
  display: inline-block;
  min-width: 1.2em;
  padding: 0 0.3em;
  background: var(--c-bear-strong);  /* DESIGN-10: war #b91c1c = exakter Token-Wert */
  color: var(--c-text-inverse);      /* DESIGN-10: war #fff */
  border-radius: var(--r-pill, 999px);
  font-size: 0.7rem;
  font-weight: 700;
  line-height: 1.4;
  text-align: center;
  vertical-align: middle;
  margin-left: 0.15em;
}

/* Read-Toggle-Button — kompakt, inline mit Meta-Infos */
.read-toggle-btn {
  display: inline-block;
  padding: 0.1rem 0.45rem;
  font-size: 0.75rem;
  border: 1px solid var(--c-border-subtle, #e5e5e5);
  border-radius: var(--r-sm, 8px);
  background: var(--c-bg-card, #fff);
  color: var(--c-text-muted, #6b7280);
  cursor: pointer;
  vertical-align: middle;
  transition: background 0.15s, color 0.15s;
  margin-left: 0.4rem;
}
.read-toggle-btn:hover {
  background: var(--c-accent-soft, #e6eff8);
  color: var(--c-accent, #0050a0);
  border-color: var(--c-accent, #0050a0);
}

/* Aktiver Filter-Toggle-Button (Seite zeigt nur ungelesen) */
.read-toggle-btn--active {
  background: var(--c-accent, #0050a0);
  color: #fff;
  border-color: var(--c-accent, #0050a0);
}
.read-toggle-btn--active:hover {
  background: var(--c-accent-hover, #003d80);
  color: #fff;
}

/* "Ungelesen"-Button in der gelesenen Card / Zeile */
.read-toggle-btn--unread {
  color: var(--c-text-muted, #6b7280);
  font-size: 0.7rem;
}

/* read-toggle label wrapper in filter bar */
.read-toggle-label {
  display: inline-flex;
  align-items: center;
}
/* ── End Bundle G: Read-State Styles ─────────────────────────────────────── */

/* ══════════════════════════════════════════════════════════════════════════
   News Quick Headline Index — news-quick-headline-index v0.75.0 (2026-05-26)
   Solo-Slug: sticky Desktop-Sidebar + Mobile Bottom-Sheet + Scroll-Spy
   ══════════════════════════════════════════════════════════════════════════ */

/* N1 (Reviewer-Note): scroll-padding-top global damit Anchor-Klicks nicht
   unter dem sticky Page-Head verschwinden. Gilt fuer ALLE Seiten mit
   sticky Header (~80px). */
html {
  scroll-padding-top: 80px;
}

/* ── 2-Spalten-Grid (News-Content + Sidebar) ──────────────────────────── */
.news-page-grid {
  display: grid;
  grid-template-columns: 1fr 240px;
  gap: 1.5rem;
  align-items: start;
}

.news-page-content {
  min-width: 0; /* Verhindert Overflow im Grid-Child */
}

.news-page-sidebar {
  min-width: 0;
}

/* ── Desktop-Sidebar: Sticky Schnell-Index ────────────────────────────── */
.news-quick-index {
  position: sticky;
  top: 80px;
  max-height: calc(100vh - 100px);
  overflow-y: auto;
  border-left: 1px solid var(--c-border-subtle, #e5e5e5);
  padding-left: 1rem;
  /* Scrollbar dezent */
  scrollbar-width: thin;
  scrollbar-color: var(--c-border-strong, #d1d5db) transparent;
}

.nqi-header {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  margin-bottom: 0.75rem;
  padding-bottom: 0.5rem;
  border-bottom: 1px solid var(--c-border-subtle, #e5e5e5);
}

.nqi-icon {
  font-size: 1rem;
  flex-shrink: 0;
}

.nqi-title {
  font-size: 0.85rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--c-text-secondary, #4b5563);
  margin: 0;
  flex: 1;
}

.nqi-count {
  font-size: 0.75rem;
  color: var(--c-text-muted, #6b7280);
  white-space: nowrap;
}

/* ── Index-Liste ─────────────────────────────────────────────────────── */
.nqi-list {
  list-style: none;
  padding: 0;
  margin: 0;
}

.nqi-item {
  margin-bottom: 0.1rem;
}

.nqi-link {
  display: flex;
  flex-direction: column;
  gap: 0.1rem;
  padding: 0.35rem 0.4rem;
  border-radius: var(--r-sm, 8px);
  text-decoration: none;
  color: var(--c-text-primary, #1a1a1a);
  border-left: 3px solid transparent;
  transition: background 0.15s ease, border-color 0.15s ease;
}

.nqi-link:hover {
  background: var(--c-bg-sunken, #f5f5f5);
}

/* Aktives Item via Scroll-Spy */
.nqi-item.active .nqi-link {
  background: var(--c-accent-soft, #e6eff8);
  border-left-color: var(--c-accent, #0050a0);
  color: var(--c-accent, #0050a0);
}

.nqi-ticker {
  font-size: 0.7rem;
  font-weight: 700;
  text-transform: uppercase;
  color: var(--c-accent, #0050a0);
  letter-spacing: 0.03em;
}

.nqi-headline {
  font-size: 0.78rem;
  line-height: 1.3;
  color: var(--c-text-primary, #1a1a1a);
  word-break: break-word;
}

.nqi-meta {
  font-size: 0.7rem;
  color: var(--c-text-muted, #6b7280);
  display: flex;
  align-items: center;
  gap: 0.3rem;
}

.nqi-sentiment {
  font-weight: 700;
  font-size: 0.8rem;
}

.nqi-sentiment--pos { color: var(--c-bull-strong, #047857); }
.nqi-sentiment--neg { color: var(--c-bear-strong, #b91c1c); }
.nqi-sentiment--neu { color: var(--c-text-muted, #6b7280); }

.nqi-empty {
  font-size: 0.85rem;
  padding: 0.5rem 0;
}

/* ── Mobile: Sidebar wird Bottom-Sheet (<1024px) ──────────────────────── */
@media (max-width: 1023px) {

  /* Grid auf Mobile: eine Spalte (Sidebar verschwindet aus dem Flow) */
  .news-page-grid {
    grid-template-columns: 1fr;
  }

  .news-page-sidebar {
    display: contents; /* Wrapper aus Layout nehmen, aber Subtree im Render-Tree lassen (fixed child bleibt sichtbar) */
  }

  /* Quick-Index als festes Bottom-Sheet (Rework 0.108.2: transform statt bottom-animation) */
  /* display:contents auf .news-page-sidebar promotet #news-quick-index zum Grid-Item,       */
  /* weshalb bottom:-100% nicht als viewport-fixed aufloest. Loesung: bottom:0 als Anker    */
  /* + transform:translateY(100%) zum Off-Screen-Schieben (kein Layout-Recalc, GPU-composited). */
  .news-quick-index {
    position: fixed;
    left: 0;
    right: 0;
    bottom: 0;
    max-height: 70vh;
    background: var(--c-bg-card, #ffffff);
    box-shadow: var(--shadow-modal, 0 16px 40px rgba(0, 0, 0, 0.18));
    transform: translateY(100%);
    transition: transform 0.3s ease;
    z-index: 200;
    border-left: none;
    padding: 0.75rem 1rem calc(60px + 1rem + env(safe-area-inset-bottom, 0px));
    border-radius: var(--r-md, 12px) var(--r-md, 12px) 0 0;
    overflow-y: auto;
  }

  .news-quick-index.open {
    transform: translateY(0); /* Slide-up ins Viewport */
  }

  /* Pull-Tab: fixiert am unteren Rand */
  .nqi-pull-tab {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    height: 60px;
    background: var(--c-accent, #0050a0);
    color: #fff;
    font-size: 0.9rem;
    font-weight: 600;
    text-align: center;
    line-height: 60px;
    z-index: 201;
    cursor: pointer;
    border: none;
    border-top: 2px solid var(--c-accent-hover, #003d80);
    padding: 0 1rem;
    /* Touch-Target: 60px hoehe ist bereits ausreichend */
    -webkit-tap-highlight-color: transparent;
  }

  .nqi-pull-tab:hover,
  .nqi-pull-tab:focus-visible {
    background: var(--c-accent-hover, #003d80);
    outline: none;
  }

  /* Backdrop: Overlay fuer Outside-Click-Close (N2: Reviewer-Note) */
  .nqi-backdrop {
    display: none;
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.3);
    z-index: 199;
  }

  .nqi-backdrop.open {
    display: block;
  }
}

/* Pull-Tab + Backdrop auf Desktop verstecken */
@media (min-width: 1024px) {
  .nqi-pull-tab {
    display: none;
  }

  .nqi-backdrop {
    display: none !important;
  }
}

/* ── End News Quick Headline Index ─────────────────────────────────────── */


/* ════════════════════════════════════════════════════════════════
 * BUNDLE-E SECTION-MARKER · DO NOT REORDER · APPEND-ONLY PER LANE
 * Konvention aus discovery-engine-ia-refactor/architecture.md §5 R3
 * ════════════════════════════════════════════════════════════════ */

/* === [LANE-0c · NAV] ============================================
 * Owner: bundle-e-navigation-refactor
 * Inhalt: .bottom-tab · .slideout__section · .ticker-collapsed
 * ============================================================== */

/* === LANE-0c-NAV · BEGIN === */
/* Bundle E Lane 0c: 4-Gruppen-Header + Bottom-Tab + Slide-out + Ticker-Collapse.
   Alle Werte gegen Lane-0a-Tokens. Kein Touch am :root-Block (EXKLUSIV Lane 0a).
   Z-Index-Referenz: var(--z-bottom-tab), var(--z-slide-out) aus Lane 0a.
*/

/* CC-162 nav-overlap-durable: Brand-Wrapper fuer Grid-Spalte 1 (Burger + Brand als eine Einheit).
   DEV-NOTE F-BRAND: neue Klasse braucht CSS-Regel (Design-Gate §4b / 'jede Klasse hat eine Regel'). */
.header__brand {
  grid-column: 1;
  display: flex;
  align-items: center;
  gap: var(--sp-2);
}

/* --- CC-24 nav-responsive-redesign: 3-Breakpoint Desktop-Header --- */
/* CC-162 nav-overlap-durable (AC2): overflow:visible entfernt, overflow:hidden gesetzt.
   flex:1 + flex-wrap entfernt — Grid 1fr-Track (Spalte 2) übernimmt Breiten-Verteilung.
   grid-column:2 explizit — verhindert falsche Track-Belegung (5 DOM-Kinder in <header>).
   min-width:0 BLEIBT — erlaubt 1fr-Track unter min-content zu schrumpfen (UA setzt sonst min-width:auto). */
.header__nav {
  grid-column: 2;
  display: flex;
  align-items: center;
  gap: var(--sp-1);
  min-width: 0;
  overflow: hidden;
}

/* Solo-Item (Heute) — identisch nav-link, kein Dropdown */
.nav-link--solo {
  /* Erbt alle nav-link-Eigenschaften; kein eigener Trennstrich noetig */
}

/* Nav-Gruppe: Basis fuer alle 3 Breakpoints */
.nav-group {
  position: relative;
  display: flex;
  align-items: center;
}

/* Trigger-Button (Collapse-Band: sichtbar; Desktop: versteckt) */
.nav-group__trigger {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  padding: var(--sp-1) var(--sp-2);
  border-radius: var(--r-sm);
  border: 1px solid transparent;
  background: transparent;
  color: var(--c-text-secondary);
  font-size: var(--fs-sm);
  min-height: var(--touch-target);
  white-space: nowrap;
  cursor: pointer;
  transition: background var(--motion-fast), color var(--motion-fast);
}
.nav-group__trigger:hover { background: var(--c-bg-sunken); color: var(--c-text-primary); }
.nav-group__trigger.active { color: var(--c-accent); background: var(--c-accent-soft); }

/* Caret-Pfeil */
.nav-group__caret {
  font-size: 0.7em;
  transition: transform var(--motion-fast);
}

/* Menu-Container: Basis (wird per Breakpoint positioniert) */
.nav-group__menu {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-strong);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  padding: var(--sp-2);
}

/* === Breakpoint A: >= 1200px — Gruppen AUFGELOEST (eine Zeile, alle Items inline) === */
@media (min-width: 1200px) {
  /* CC-162 nav-overlap-durable: Overflow-Schutz durch Grid-Architektur (nicht mehr durch flex-wrap:wrap hier).
     flex-wrap:wrap + row-gap steuern NUR das ITEM-LAYOUT innerhalb Spalte 2 (nav-group-Items inline).
     KEIN Overlap-Schutz-Kommentar hier — Overlap wird durch grid-template-columns:auto 1fr auto verhindert.
     Die 767.98px-Schwelle (max-width) ist DIE EINE dokumentierte Header-Collapse-Schwelle (AC3).
     Desktop-Item-Darstellung (inline >=1200 vs Dropdown 768-1199) ist KEINE Collapse-Schwelle. */
  .header__nav { flex-wrap: wrap; row-gap: var(--sp-2); }
  .nav-group { gap: var(--sp-1); }
  /* Trigger unsichtbar — Items werden inline gezeigt */
  .nav-group__trigger { display: none; }
  /* Menu wird zur inline-Reihe (kein Dropdown) */
  .nav-group__menu {
    position: static;
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: var(--sp-1);
    background: none;
    border: none;
    box-shadow: none;
    padding: 0;
  }
  /* Trennstrich zwischen Nav-Gruppen */
  .nav-group + .nav-group::before {
    content: "";
    width: 1px;
    height: 1.2em;
    background: var(--c-border-subtle);
    margin: 0 var(--sp-1);
    flex-shrink: 0;
  }
}

/* === Breakpoint B: 768–1199px — Collapse (Dropdown-Trigger sichtbar) === */
@media (min-width: 768px) and (max-width: 1199.98px) {
  .nav-group__trigger { display: inline-flex; }
  .nav-group__menu {
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    min-width: 220px;
    z-index: 110; /* > .app-topbar(100), < --z-slide-out(210) */
    flex-direction: column;
  }
  /* Geschlossen: hidden-Attribut via JS gesetzt */
  .nav-group__menu[hidden] { display: none; }
  /* Geoeffnet: JS toggelt .is-open + entfernt [hidden] */
  .nav-group.is-open .nav-group__menu { display: flex; }
  .nav-group.is-open .nav-group__caret { transform: rotate(180deg); }
}

.nav-link {
  padding: var(--sp-1) var(--sp-2);
  color: var(--c-text-secondary);
  text-decoration: none;
  border-radius: var(--r-sm);
  font-size: var(--fs-sm);
  white-space: nowrap;
  min-height: var(--touch-target);
  display: flex;
  align-items: center;
  transition: background var(--motion-fast), color var(--motion-fast);
}
.nav-link:hover { background: var(--c-bg-sunken); color: var(--c-text-primary); }
.nav-link.active, .nav-link[aria-current="page"] {
  color: var(--c-accent);
  background: var(--c-accent-soft);
}
/* Persoenlich-Akzent fuer Bestand */
.nav-link--persoenlich {
  background: var(--c-accent-soft);
  color: var(--c-accent);
}
.nav-link--persoenlich:hover { background: var(--c-accent-soft); color: var(--c-accent-hover); }

/* Header-Right: Bell + Admin-Dropdown + User-Pill */
/* CC-162 nav-overlap-durable: grid-column:3 explizit (Spalte 3, auto-Track).
   margin-left:auto entfernt — Grid-auto-Track positioniert rechtsbündig per Grid-Spec.
   flex-shrink:0 entfernt — auto-Track schrumpft nicht unter Content-Breite (Grid-Garantie). */
.header__right {
  grid-column: 3;
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  white-space: nowrap;
}

/* Admin-Tools-Dropdown */
.tools-dropdown {
  position: relative;
}
.tools-trigger {
  padding: var(--sp-1) var(--sp-2);
  border-radius: var(--r-sm);
  border: 1px solid var(--c-border-strong);
  background: transparent;
  color: var(--c-text-secondary);
  cursor: pointer;
  font-size: var(--fs-sm);
  min-height: var(--touch-target);
  display: flex;
  align-items: center;
}
.tools-menu {
  display: none;
  position: absolute;
  top: calc(100% + 4px);
  right: 0;
  min-width: 200px;
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-strong);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  padding: var(--sp-2);
  z-index: var(--z-slide-out, 210);
}
.tools-menu a {
  display: flex;
  align-items: center;
  min-height: var(--touch-target);
  padding: var(--sp-2) var(--sp-3);
  color: var(--c-text-primary);
  text-decoration: none;
  font-size: var(--fs-sm);
  border-radius: var(--r-sm);
}
.tools-menu a:hover { background: var(--c-bg-sunken); }
/* CC-264 desktop-settings-profil-zugang: Aktiv-Zustand fuer Menue-Items (Muster .nav-link.active) */
.tools-menu a.active, .tools-menu a[aria-current="page"] {
  color: var(--c-accent);
  background: var(--c-accent-soft);
}
/* Hover-Oeffnen nur auf Hover-Geraeten (kein Sticky-Hover-Bug auf Touch) */
@media (hover: hover) {
  .tools-dropdown:hover .tools-menu { display: block; }
}
/* focus-within als Touch-Fallback */
.tools-dropdown:focus-within .tools-menu { display: block; }
/* Click-Toggle-Pfad (JS setzt .is-open via setOpen()) */
.tools-dropdown.is-open .tools-menu { display: block; }

/* --- Bottom-Tab-Nav (Mobile <= 768px, fix am unteren Rand) --- */
.bottom-tab {
  display: none; /* Standard: ausgeblendet */
}
@media (max-width: 768px) {
  .bottom-tab {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    display: grid;
    grid-template-columns: repeat(5, 1fr);
    background: var(--c-bg-card);
    border-top: 1px solid var(--c-border-subtle);
    box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.04);
    z-index: var(--z-bottom-tab, 90);
    padding: 4px 0 max(4px, env(safe-area-inset-bottom));
  }
  /* Platz fuer Bottom-Tab am Page-Ende schaffen */
  main {
    padding-bottom: calc(64px + env(safe-area-inset-bottom));
  }
  /* Body-Padding-Override: altes padding-bottom (3.5rem) fuer Fixed-Footer
     nicht mehr benoetigt wenn Bottom-Tab aktiv (F-3 fix) */
  body {
    padding-bottom: 0;
  }
}
.bottom-tab__item {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  padding: 4px var(--sp-1);
  color: var(--c-text-secondary);
  text-decoration: none;
  font-size: var(--fs-meta);
  min-height: var(--touch-target);
  cursor: pointer;
  background: none;
  border: none;
  gap: 2px;
}
.bottom-tab__item:hover { color: var(--c-text-primary); }
.bottom-tab__item--active { color: var(--c-accent); }
.bottom-tab__icon { font-size: 1.2rem; line-height: 1; }
.bottom-tab__label { font-size: 0.68rem; white-space: nowrap; }
@media (max-width: 360px) {
  .bottom-tab__label { font-size: 0.60rem; }
}

/* --- Mobile Slide-out mit Sektionen (erweitert) --- */
.slideout {
  display: flex;
  flex-direction: column;
  padding: var(--sp-2) 0;
}
.slideout a {
  display: block;
  padding: var(--sp-3) var(--sp-4);
  color: var(--c-text-primary);
  text-decoration: none;
  font-size: var(--fs-sm);
  min-height: var(--touch-target);
  display: flex;
  align-items: center;
}
.slideout a:hover { background: var(--c-bg-sunken); }
.slideout__section {
  margin-top: var(--sp-2);
  border-top: 1px solid var(--c-border-subtle);
}
.slideout__section-label {
  font-size: var(--fs-meta);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--c-text-muted);
  font-weight: var(--fw-semibold);
  padding: var(--sp-2) var(--sp-4) var(--sp-1);
}
.slideout__section-label--admin {
  color: var(--c-text-secondary);
}

/* --- Mobile Ticker-Collapse (CSS-only via Checkbox-Trick) --- */
.ticker-toggle {
  position: absolute;
  opacity: 0;
  pointer-events: none;
  width: 0;
  height: 0;
}
.ticker-collapsed {
  display: none; /* Desktop: versteckt */
}
.ticker-expanded-wrap {
  display: block; /* Desktop: immer sichtbar */
}
@media (max-width: 768px) {
  .ticker-collapsed {
    display: flex;
    align-items: center;
    gap: var(--sp-2);
    padding: var(--sp-2) var(--sp-3);
    background: var(--c-bg-sunken);
    border-radius: var(--r-sm);
    cursor: pointer;
    user-select: none;
    font-size: var(--fs-sm);
    color: var(--c-text-secondary);
    margin: 0 var(--sp-2) var(--sp-1);
  }
  .ticker-expanded-wrap {
    display: none; /* Mobile: versteckt by default */
  }
  .ticker-toggle:checked ~ .ticker-expanded-wrap {
    display: block; /* Mobile: bei checked sichtbar */
  }
  .ticker-toggle:checked ~ .ticker-collapsed .ticker-collapsed__caret {
    transform: rotate(180deg);
  }
}
.ticker-collapsed__icon { flex-shrink: 0; }
.ticker-collapsed__text { flex: 1; }
.ticker-collapsed__caret {
  flex-shrink: 0;
  transition: transform var(--motion-fast);
}

/* --- Breakpoint C: < 768px — Slide-out uebernimmt (CC-24: 768→767.98 Grenz-Konsistenz) --- */
/* [DEV-NOTE §2.1]: 767.98px statt 768px verhindert Off-by-one: bei exakt 768px greift
   Collapse-Band (min-width:768px), NICHT der Slide-out. Kein gleichzeitiger Burger+Trigger. */
@media (max-width: 767.98px) {
  .header__nav { display: none; } /* Desktop-Nav verschwinden auf Mobile, Slide-out uebernimmt */
}
@media (max-width: 600px) {
  /* User-Pill kollabiert: Username ausblenden */
  .header-user .header-user__username { display: none; }
  .version { display: none; }
}
@media (max-width: 360px) {
  /* Logout nur ueber Mehr-Menu auf kleinsten Geraeten */
  .header-user form { display: none; }
}

/* === LANE-0c-NAV · END === */

/* === [LANE-0b · MACROS] =========================================
 * Owner: bundle-e-querschnitts-macros
 * Inhalt: .score-meter · .minipill · .inline-action-dropdown · .pos-detail
 *         .news-card · .filter-bar · .page-head · .stats-bar
 * ============================================================== */

/* === LANE-0b-MACROS · BEGIN === */
/* Querschnitts-Macros fur Bundle E (Sub-Phase B-E.3).
   Reihenfolge: score-meter, minipill, inline-action-dropdown,
   pos-detail, news-card, filter-bar, page-head, stats-bar,
   subnav (ticker-only), hero-chart (ticker-only).
   Alle Werte aus Lane-0a-Tokens (var(--c-*), var(--sp-*), ...).
*/

/* --- _score_meter --- */
.score-meter { position: relative; width: 100%; }
.score-meter__bar {
  height: var(--score-meter-bar-height);
  border-radius: 999px;
  border: 1px solid var(--c-border-subtle);  /* Bundle P score-meter-visibility-fix: Track-Umriss sichtbar gegen weisse Card */
  background: linear-gradient(to right,
    var(--c-bear-soft) 0%,
    var(--c-bear-soft) var(--score-meter-zone-low),
    var(--c-neutral-soft) var(--score-meter-zone-low),
    var(--c-neutral-soft) var(--score-meter-zone-high),
    var(--c-bull-soft) var(--score-meter-zone-high),
    var(--c-bull-soft) 100%);
}
.score-meter__marker {
  position: absolute;
  top: -4px;
  width: var(--score-meter-marker-width);
  height: var(--score-meter-marker-height);
  background: var(--c-text-primary);
  transform: translateX(-50%);
}
.score-meter__marker[data-direction="bull"] { background: var(--c-bull-strong); }
.score-meter__marker[data-direction="bear"] { background: var(--c-bear-strong); }
.score-meter__ticks {
  display: flex;
  justify-content: space-between;
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
  font-variant-numeric: tabular-nums;
}

/* --- _minipills --- */
.minipills { display: flex; flex-wrap: wrap; gap: var(--sp-1); }
.minipill {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 2px 8px;
  border-radius: var(--r-pill);
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  font-size: var(--fs-meta);
}
.minipill[data-verdict="bull"] { color: var(--c-bull-text); border-color: var(--c-bull-text); }
.minipill[data-verdict="bear"] { color: var(--c-bear-text); border-color: var(--c-bear-text); }
.minipill[data-verdict="neut"] { color: var(--c-text-secondary); }
.minipill[data-verdict="warn"] { color: var(--c-warn-text); border-color: var(--c-warn-text); background: var(--c-warn-soft); }
.minipill--fallback { opacity: 0.7; font-style: italic; }
/* Bundle T (bestand-anzeige-ux-overhaul): numerischer Score-Wert in Pill */
.minipill__val {
  font-variant-numeric: tabular-nums;
  font-size: 0.75em;
  color: var(--c-text-secondary, #6b7280);
  margin-left: 2px;
}
/* Sprint_2026_12 (minipill-no-data-disambiguation): datenlose Domain visuell abgesetzt */
.minipill--nodata { opacity: 0.55; border-style: dashed; }
.minipill__val--nodata { color: var(--c-text-secondary, #6b7280); font-style: normal; }

/* --- _inline_action_dropdown --- */
.inline-action-dropdown { position: relative; display: inline-block; }
.iad-trigger {
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r-button, var(--r-sm));
  border: 1px solid var(--c-border-strong);
  background: var(--c-bg-card);
  cursor: pointer;
  font-size: var(--fs-sm);
  min-height: var(--touch-target);
}
.iad-panel {
  position: absolute; top: calc(100% + 4px); right: 0; min-width: 240px;
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-strong);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  padding: var(--sp-3);
  z-index: 100;
}
.iad-panel[hidden] { display: none; }
.iad-form { display: flex; flex-direction: column; gap: var(--sp-2); }
.iad-form__section { display: flex; flex-direction: column; gap: var(--sp-1); }
.iad-form__label { font-size: var(--fs-meta); color: var(--c-text-muted); font-weight: var(--fw-semibold); }
.iad-radio-row { display: flex; align-items: center; gap: var(--sp-2); font-size: var(--fs-sm); }
.iad-input { padding: var(--sp-2); border: 1px solid var(--c-border-subtle); border-radius: var(--r-sm); font-size: var(--fs-sm); width: 100%; }
.iad-submit { padding: var(--sp-2) var(--sp-3); border-radius: var(--r-sm); background: var(--c-accent); color: var(--c-text-inverse); border: none; cursor: pointer; font-size: var(--fs-sm); align-self: flex-end; }
.iad-submit--danger { background: var(--c-bear-strong); }
.iad-hint { font-size: var(--fs-meta); color: var(--c-text-muted); }
.iad-meta { font-size: var(--fs-meta); color: var(--c-text-muted); margin-top: var(--sp-2); }
.iad-broker-links { display: flex; flex-direction: column; gap: var(--sp-2); }
.iad-broker-btn {
  padding: var(--sp-2) var(--sp-3); border-radius: var(--r-sm);
  background: var(--c-accent-soft); color: var(--c-accent);
  text-decoration: none; font-size: var(--fs-sm); text-align: center;
}

/* --- _pos_detail --- */
.pos-detail {
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-4);
  background: var(--c-bg-card);
  box-shadow: var(--shadow-card);
}
.pos-detail--distress { border-color: var(--c-bear-strong); border-left-width: 4px; }
.pos-detail__user-banner {
  font-size: var(--fs-meta);
  color: var(--c-accent);
  margin-bottom: var(--sp-2);
}
.pos-detail__distress-context {
  background: var(--c-bear-soft);
  color: var(--c-bear-text);
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r-sm);
  margin-bottom: var(--sp-3);
}
.pos-detail__perf-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--sp-3);
  margin-bottom: var(--sp-4);
}
.pos-perf-tile { display: flex; flex-direction: column; }
.pos-perf-tile .label { font-size: var(--fs-meta); color: var(--c-text-muted); }
.pos-perf-tile .value { font-size: var(--fs-h3); font-variant-numeric: tabular-nums; }
.pos-detail__actions {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 1fr;
  gap: var(--sp-2);
  margin-top: var(--sp-3);
}
@media (max-width: 600px) {
  .pos-detail__perf-grid { grid-template-columns: 1fr 1fr; }
  .pos-detail__actions { grid-template-columns: 1fr 1fr; grid-auto-flow: row; }
  .pos-detail__actions > *:nth-child(3) { grid-column: 1 / -1; }
}

/* --- _news_card --- */
.news-card {
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-3);
  background: var(--c-bg-card);
  margin-bottom: var(--sp-3);
  box-shadow: var(--shadow-card);
  transition: box-shadow var(--motion-base);
}
.news-card:hover {
  box-shadow: var(--shadow-card-hover);
}
.news-card__meta {
  display: flex; gap: var(--sp-2); align-items: center;
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
  margin-bottom: var(--sp-2);
}
.news-sentiment { padding: 2px 6px; border-radius: var(--r-pill); font-weight: var(--fw-semibold); }
.news-sentiment--positive { background: var(--c-bull-soft); color: var(--c-bull-text); }
.news-sentiment--negative { background: var(--c-bear-soft); color: var(--c-bear-text); }
.news-sentiment--neutral { background: var(--c-neutral-soft); color: var(--c-text-secondary); }
.news-card__headline { font-size: var(--fs-h4, var(--fs-h3)); margin: 0 0 var(--sp-2); }
.news-card__lead { color: var(--c-text-secondary); font-size: var(--fs-sm); margin: 0 0 var(--sp-2); }
.news-card__tickers, .news-card__clusters { display: flex; flex-wrap: wrap; gap: var(--sp-1); margin-bottom: var(--sp-2); }

/* Bundle M Phase 2 Lane 2: news-card-empty-sections-collapse (v0.80.0)
   Last-Child-Margin-Reset: verhindert Whitespace-Kollaps wenn Card nur
   meta+headline (kein lead/tickers/clusters/topics) enthaelt.
   Eliminiert 8px ueberflussigen margin-bottom unter dem letzten gerenderten
   Inhalts-Element. Slug: news-card-empty-sections-collapse */
.news-card > *:last-child {
  margin-bottom: 0;
}
.news-ticker-pill {
  padding: 2px 8px; border-radius: var(--r-pill);
  background: var(--c-bg-sunken); color: var(--c-text-primary);
  font-size: var(--fs-meta); text-decoration: none;
}
.news-ticker-pill--owned { background: var(--c-accent-soft); color: var(--c-accent); }
.news-cluster-pill {
  padding: 2px 8px; border-radius: var(--r-pill);
  border: 1px solid var(--c-border-subtle); color: var(--c-text-secondary);
  font-size: var(--fs-meta); text-decoration: none;
}

/* Bundle J Lane B (v0.78.0): Topic-Pills (analog news-cluster-pill, F-8 NIT Fix).
   data-confidence="high"   -> volle Opacity (default)
   data-confidence="medium" -> leicht gedaempft
   Farbe: Teal-Variante um visuell von Cluster-Pills (grau) abzuheben.
   Bundle M Phase 2 Lane 2: RC-3 Hygiene — spezifischerer Selector
   .news-card__topics .news-topic-pill damit Bundle-E-Definition (Z.5244+)
   fuer Sektion-Header-Pills grau bleibt; Card-interne Pills bleiben teal. */
.news-card__topics .news-topic-pill {
  display: inline-block;
  padding: 2px 8px; border-radius: var(--r-pill);
  border: 1px solid var(--c-teal-subtle, #b2dfdb);
  background: var(--c-teal-bg, #e0f2f1);
  color: var(--c-teal-text, #00695c);
  font-size: var(--fs-meta);
  font-weight: 500;
}
.news-card__topics .news-topic-pill[data-confidence="medium"] { opacity: 0.75; }
.news-card__topics {
  display: flex; flex-wrap: wrap; gap: 4px;
  margin-top: var(--sp-1, 0.25rem);
}

/* CC-190 (news-event-taxonomie, v0.162.0): Event-Pill (analog news-topic-pill,
   Architecture §4b Design-Conformance). Token-basiert, kein raw-Hex/px.
   Neutraler Akzent-Hintergrund + Icon traegt die semantische Unterscheidung
   (13 Event-Typen), daher keine Per-Typ-Farb-Varianten noetig. */
.news-card__event {
  display: flex; flex-wrap: wrap; gap: 4px;
  margin-top: var(--sp-1, 0.25rem);
}
.news-event-pill {
  display: inline-block;
  padding: 2px 8px; border-radius: var(--r-pill);
  background: var(--c-accent-soft); color: var(--c-accent);
  font-size: var(--fs-meta);
  font-weight: 500;
}

/* --- _filter_bar --- */
.filter-bar {
  display: flex; flex-wrap: wrap; gap: var(--sp-3);
  padding: var(--sp-3);
  background: var(--c-bg-card);
  border-bottom: 1px solid var(--c-border-subtle);
}
.filter-bar[data-sticky="true"] { position: sticky; top: 0; z-index: 5; }
.filter-bar__form { display: flex; flex-wrap: wrap; gap: var(--sp-3); width: 100%; align-items: flex-end; }
.filter-bar__group { display: flex; flex-direction: column; gap: 4px; }
.filter-bar__group label { font-size: var(--fs-meta); color: var(--c-text-muted); }
.filter-bar__meta { margin-left: auto; display: flex; gap: var(--sp-2); align-items: center; }
.filter-bar__count {
  padding: 2px 8px; border-radius: var(--r-pill);
  background: var(--c-accent-soft); color: var(--c-accent);
  font-size: var(--fs-meta);
}
.filter-bar__reset { font-size: var(--fs-sm); color: var(--c-text-muted); }
.toggle-group { display: flex; gap: 2px; }
.toggle {
  padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--c-border-subtle);
  background: var(--c-bg-card);
  cursor: pointer;
}
.toggle--active { background: var(--c-accent-soft); color: var(--c-accent); border-color: var(--c-accent); }

/* --- _page_head --- */
.page-head {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: var(--sp-3) var(--sp-4);
  margin-bottom: var(--sp-5);
}
.page-head__title-block { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.page-head h1 { margin: 0; font-size: var(--fs-h1); line-height: var(--lh-tight); }
.page-head__sub { color: var(--c-text-muted); font-size: var(--fs-sm); }
.page-head__actions { display: flex; gap: var(--sp-2); align-items: center; flex-wrap: wrap; }
@media (max-width: 720px) {
  .page-head { grid-template-columns: 1fr; }
  .page-head__actions { justify-self: stretch; }
}

/* --- _stats_bar --- */
.stats-bar {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
  gap: var(--sp-3);
  margin-bottom: var(--sp-4);
}
.stats-bar__tile {
  display: flex; flex-direction: column; gap: 4px;
  padding: var(--sp-3);
  border-radius: var(--r-card);
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  text-decoration: none;
  color: inherit;
}
.stats-bar__tile--bull { border-left: 3px solid var(--c-bull-strong); }
.stats-bar__tile--bear { border-left: 3px solid var(--c-bear-strong); }
.stats-bar__tile--neut { border-left: 3px solid var(--c-neutral-strong); }
.stats-bar__icon { font-size: var(--fs-h3); }
.stats-bar__label { font-size: var(--fs-meta); color: var(--c-text-muted); text-transform: uppercase; letter-spacing: 0.05em; }
.stats-bar__value { font-size: var(--fs-display); font-variant-numeric: tabular-nums; }
@media (max-width: 600px) {
  .stats-bar { grid-template-columns: 1fr 1fr; }
}

/* --- _ticker_subnav (Stub-CSS, Lane 4 erweitert ggf.) --- */
.subnav {
  display: flex; gap: var(--sp-1);
  background: var(--c-bg-card);
  border-bottom: 1px solid var(--c-border-subtle);
  padding: 0 var(--sp-4);
  overflow-x: auto;
  position: sticky; top: 0; z-index: 10;
}
.subnav__tab {
  padding: 10px 14px;
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
  text-decoration: none;
  border-bottom: 2px solid transparent;
  white-space: nowrap;
}
.subnav__tab:hover { background: var(--c-bg-sunken); }
.subnav__tab--active {
  color: var(--c-accent);
  border-bottom-color: var(--c-accent);
  font-weight: var(--fw-semibold);
}

/* --- _hero_chart (Stub-CSS, Lane 4 erweitert) --- */
.hero-chart {
  border-radius: var(--r-card);
  background: var(--c-bg-card);
  padding: var(--sp-3);
  margin-bottom: var(--sp-4);
}
.hero-chart__head { display: flex; justify-content: space-between; align-items: center; }
.hero-chart__range-pills { display: flex; gap: var(--sp-1); }
.range-pill { padding: 4px 10px; border-radius: var(--r-pill); font-size: var(--fs-meta); text-decoration: none; color: var(--c-text-secondary); }
.range-pill--active { background: var(--c-accent); color: var(--c-bg-card); }
.hero-chart__svg { width: 100%; height: 220px; }
@media (max-width: 600px) {
  .hero-chart__svg { height: 160px; }
}

/* === LANE-0b-MACROS · END === */

/* === [LANE-1 · TODAY] ===========================================
 * Owner: B-E.4 Screen-Lane (bundle-e-screen-today/architecture.md §4)
 * ============================================================== */

/* Sektion-Container */
.today-section {
  margin-block: var(--sp-6);
}

.today-section__title {
  font-size: var(--fs-h1);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  margin-block-end: var(--sp-4);
  display: flex;
  align-items: baseline;
  gap: var(--sp-3);
}

.today-section__count {
  font-size: 0.8em;
  font-weight: 400;
  color: var(--c-text-muted);
  text-transform: none;
  letter-spacing: 0;
}

/* Sektion A · BESTAND (Persönlich-Akzent) */
.today-section--bestand {
  background: linear-gradient(
    135deg,
    var(--c-accent-soft) 0%,
    var(--c-bg-card) 100%
  );
  border-radius: var(--r-card);
  padding: var(--sp-4) var(--sp-5);
  border-inline-start: 3px solid var(--c-accent-soft);
}

/* Discretion-Banner (data-user-context-Wrapper) */
.user-context-banner {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  background: var(--c-accent-soft);
  color: var(--c-text-muted);
  font-size: 0.75rem;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 0.2rem 0.6rem;
  border-radius: 0.25rem;
  margin-block-end: var(--sp-4);
}

/* Achtung-Sub-Sektion (Bear-Border) */
.today-subsection--alert {
  border-inline-start: 3px solid var(--c-bear-strong);
  padding-inline-start: var(--sp-4);
  margin-block-end: var(--sp-5);
}

.today-subsection__title {
  font-size: 0.9rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--c-text-muted);
  margin-block: var(--sp-2) var(--sp-3);
}

/* Sub-Sektionen */
.today-subsection {
  margin-block: var(--sp-4);
}

/* More-Link */
.today-more-link {
  display: inline-block;
  margin-block-start: var(--sp-3);
  font-size: 0.85rem;
  color: var(--c-text-muted);
  text-decoration: none;
}
.today-more-link:hover { text-decoration: underline; }
.today-more-link-wrap { text-align: right; }

.today-empty {
  color: var(--c-text-muted);
  font-size: 0.9rem;
  padding: var(--sp-3) 0;
}

/* ── today-bestand-seit-gestern-digest (CC-243, Sprint_2026_40) ─────────────
   "Seit gestern"-Digest-Container in /today Sektion A. NEUE Layout-Huelle
   (design-principles.md §6 Pflicht-Sub-Item, F-1). Chips selbst nutzen die
   existierenden .dir-pill--*/.pill--* — hier NUR Container + Bucket-Layout.
   Token-basiert (--c-*/--sp-*/--r-*/--fs-*), 768/600px-Overrides. */
.today-digest {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-3) var(--sp-4);
  margin-block: var(--sp-3) var(--sp-5);
}
.today-digest__bucket {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: var(--sp-2);
  padding-block: var(--sp-2);
}
.today-digest__bucket + .today-digest__bucket {
  border-block-start: 1px solid var(--c-border-subtle);
}
.today-digest__label {
  flex: 0 0 auto;
  min-width: 9.5rem;
  font-size: var(--fs-meta);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--c-text-muted);
}
.today-digest__chips {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  flex: 1 1 auto;
}
.today-digest .dir-pill,
.today-digest .pill {
  text-decoration: none;
}
@media (max-width: 768px) {
  .today-digest { padding: var(--sp-2) var(--sp-3); }
}
@media (max-width: 600px) {
  .today-digest__bucket {
    flex-direction: column;
    align-items: stretch;
    gap: var(--sp-1, 0.25rem);
  }
  .today-digest__label { min-width: 0; }
}

/* ── Ticker-Card (tcard) ────────────────────────────────────────── */

.tcard {
  background: var(--c-bg-card);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  padding: var(--sp-5);
  margin-block-end: var(--sp-4);
  display: grid;
  gap: var(--sp-3);
}
.tcard:hover {
  box-shadow: var(--shadow-card-hover);
}

.tcard--alert {
  border-inline-start: 4px solid var(--c-bear-strong);
}

.tcard__head {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: var(--sp-3);
  flex-wrap: wrap;
}

.tcard__identity {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
}

.tcard__symbol {
  font-size: 1.05rem;
  font-weight: 700;
  text-decoration: none;
  color: var(--c-text-primary);
}
.tcard__symbol:hover { text-decoration: underline; }

.tcard__name {
  font-size: 0.8rem;
  color: var(--c-text-muted);
}

.tcard__score-wrap {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  min-width: 120px;
}

.tcard__score-label {
  font-size: 0.85rem;
  font-weight: 600;
  white-space: nowrap;
}

.tcard__score-fallback {
  color: var(--c-text-muted);
  font-size: 0.75em;
  vertical-align: super;
  cursor: help;
}

/* IP-2 Q6 today-trend-delta: Delta-Span neben Score-Label */
.tcard__score-delta {
  font-size: 0.78rem;
  font-weight: 600;
  white-space: nowrap;
}
.tcard__score-delta[data-direction="bull"] {
  color: var(--c-bull-text);
}
.tcard__score-delta[data-direction="bear"] {
  color: var(--c-bear-text);
}
.tcard__score-delta[data-direction="neut"] {
  color: var(--c-neutral-text);
}

/* stale-analysis-tile-marker (Sprint_2026_17 Lane C, CC-51):
   Inline-Stale-Marker im tcard__head bei Analyse-Daten > 7 Tage alt.
   Token-Disziplin: --c-warn-* (kein raw-Hex) — konsistent mit data-staleness-banner. */
.tcard__stale {
  display: inline-block;
  font-size: 0.72rem;
  font-weight: 600;
  padding: 0.1em 0.45em;
  border-radius: 4px;
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
  border: 1px solid var(--c-warn-strong);
  vertical-align: middle;
  white-space: nowrap;
  cursor: help;
}

.tcard__pills-row {
  /* minipills-Macro-Output */
}

.tcard__reasoning {
  font-size: 0.85rem;
  color: var(--c-text-muted);
  border-inline-start: 2px solid var(--c-border-subtle);
  padding-inline-start: var(--sp-3);
  margin: 0;
  font-style: italic;
}

/* Auslöser-Sektion (Spec §3.6) */
.tcard__trigger {
  font-size: 0.82rem;
}

.tcard__trigger-label {
  font-weight: 600;
  color: var(--c-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-size: 0.75em;
  display: block;
  margin-block-end: var(--sp-1);
}

.tcard__trigger-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
}

.tcard__trigger-item {
  display: flex;
  align-items: baseline;
  gap: var(--sp-2);
  flex-wrap: wrap;
}

.tcard__trigger-link {
  text-decoration: none;
  color: var(--c-text-primary);
  flex: 1;
  min-width: 0;
}
.tcard__trigger-link:hover { text-decoration: underline; }

.tcard__trigger-time {
  font-size: 0.75rem;
  color: var(--c-text-muted);
  white-space: nowrap;
}

/* Signal-Pill (tcard__sig-pill) — CSS-Regel vorhanden, aber heute nicht gerendert (kein Daten-Backing).
   Token-Haertung trotzdem Pflicht: --c-surface-alt ist in :root NICHT definiert → var(--c-bg-sunken). */
.tcard__sig-pill {
  display: inline-flex;
  align-items: center;
  gap: 0.2rem;
  font-size: 0.75rem;
  font-weight: 600;
  padding: 0.1rem 0.4rem;
  border-radius: 0.25rem;
  background: var(--c-bg-sunken);
}

/* Action-Slot */
.action-slot {
  display: grid;
  grid-auto-flow: column;
  grid-auto-columns: 1fr;
  gap: var(--sp-2);
}

.tcard__actions {
  margin-block-start: var(--sp-2);
}

/* WATCH-Section (collapsed by default via <details>) */
.today-watch-details > summary {
  cursor: pointer;
  font-size: 0.95rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.07em;
  padding: var(--sp-3);
  background: var(--c-bg-card);
  border-radius: var(--r-card);
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  list-style: none;
}
.today-watch-details > summary::-webkit-details-marker { display: none; }
.today-watch-details[open] > summary { border-radius: var(--r-card) var(--r-card) 0 0; }

.today-watch-list {
  background: var(--c-bg-card);
  border-radius: 0 0 var(--r-card) var(--r-card);
  padding: var(--sp-3);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.today-watch-row {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
}

.today-watch-symbol {
  font-weight: 700;
  text-decoration: none;
  color: var(--c-text-primary);
  min-width: 60px;
}

.today-watch-name {
  flex: 1;
  font-size: 0.85rem;
  color: var(--c-text-muted);
}

.today-watch-score {
  font-size: 0.85rem;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* Mobile (2×2 Stats-Bar bereits via stats_bar Macro) */
@media (max-width: 600px) {
  .action-slot {
    grid-auto-flow: row;
    grid-auto-columns: auto;
  }
  .tcard__head {
    flex-direction: column;
  }
  .tcard__score-wrap {
    min-width: auto;
  }
}

/* === [LANE-1 · TODAY] · END === */

/* === [LANE-2 · BESTAND] =========================================
 * Owner: B-E.5 Screen-Lane
 * ============================================================== */

/* ── Tab-Navigation ─────────────────────────────────────────── */
.bestand-tabs {
  display: flex;
  gap: 0.25rem;
  border-bottom: 2px solid var(--c-border-subtle, #e5e5e5);
  margin-bottom: 1.25rem;
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.bestand-tabs::-webkit-scrollbar { display: none; }

.bestand-tab {
  padding: 0.55rem 1rem;
  border: none;
  background: none;
  cursor: pointer;
  font-size: 0.9rem;
  color: var(--c-text-secondary, #4b5563);
  white-space: nowrap;
  border-bottom: 2px solid transparent;
  margin-bottom: -2px;
  border-radius: 4px 4px 0 0;
  transition: color 0.15s, border-color 0.15s;
}
.bestand-tab:hover {
  color: var(--c-accent, #0050a0);
  background: var(--c-accent-soft, #e6eff8);
}
.bestand-tab--active {
  color: var(--c-accent, #0050a0);
  border-bottom-color: var(--c-accent, #0050a0);
  font-weight: 600;
}
.bestand-tab--persoenlich {
  color: var(--c-text-secondary, #4b5563);
}
.bestand-tab--persoenlich.bestand-tab--active {
  color: var(--c-accent, #0050a0);
}
.bestand-tab--muted {
  color: var(--c-text-muted, #6b7280);
}
.bestand-tab__count {
  display: inline-block;
  background: var(--c-bg-sunken, #f5f5f5);
  color: var(--c-text-secondary, #4b5563);
  border-radius: 10px;
  padding: 0 0.45rem;
  font-size: 0.78rem;
  margin-left: 0.3rem;
  font-weight: 400;
}
.bestand-tab--active .bestand-tab__count {
  background: var(--c-accent-soft, #e6eff8);
  color: var(--c-accent, #0050a0);
}

/* Bundle M Phase 2 Lane 5: bestand-tab-clarity-fix (v0.80.0)
   Neuer Selektor .bestand-tab__counts fuer erweitertes Tab-Label (N Listen · M Eintraege).
   F-1 MAJ (Reviewer): alter Selektor .bestand-tab__count beibehalten (Zero-Risk).
   Quelle: docs/potentiale/bestand-tab-clarity-fix/architecture.md §3.3 */
.bestand-tab__counts {
  display: inline-block;
  background: var(--c-bg-sunken, #f5f5f5);
  color: var(--c-text-secondary, #4b5563);
  border-radius: 10px;
  padding: 0 0.45rem;
  font-size: 0.78rem;
  margin-left: 0.3rem;
  font-weight: 400;
}
.bestand-tab--active .bestand-tab__counts {
  background: var(--c-accent-soft, #e6eff8);
  color: var(--c-accent, #0050a0);
}

/* ── Section-Head ──────────────────────────────────────────── */
.bestand-section__head,
.bestand-group__head {
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--c-text-primary, #1a1a1a);
  margin: 1rem 0 0.5rem;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
.bestand-section__count,
.bestand-group__count {
  font-size: 0.8rem;
  font-weight: 400;
  color: var(--c-text-muted, #6b7280);
}

/* ── Depot-Head (Bestand-Tab) ──────────────────────────────── */
.bestand-depot {
  margin-bottom: 1.5rem;
}
.bestand-depot__head {
  font-size: 0.95rem;
  font-weight: 600;
  color: var(--c-text-primary, #1a1a1a);
  margin: 1rem 0 0.5rem;
  display: flex;
  align-items: baseline;
  gap: 0.75rem;
}
.bestand-depot__sum {
  font-size: 0.875rem;
  font-weight: 700;
  color: var(--c-bull-strong, #047857);
  margin-left: auto;
}

/* ── Card-List ─────────────────────────────────────────────── */
.bestand-cards {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 0.75rem;
}
.bestand-cards--compact {
  gap: 0.4rem;
}

/* ── Position-Card ─────────────────────────────────────────── */
.bestand-card {
  background: var(--c-bg-card, #fff);
  border: 1px solid var(--c-border-subtle, #e5e5e5);
  border-radius: 8px;
  padding: 0.75rem 1rem;
  cursor: pointer;
  transition: box-shadow 0.15s, border-color 0.15s;
}
.bestand-card:hover {
  box-shadow: 0 2px 8px rgba(0,0,0,0.08);
  border-color: var(--c-border-strong, #d1d5db);
}
.bestand-card[data-expanded="true"] {
  border-color: var(--c-accent, #0050a0);
  box-shadow: 0 0 0 2px var(--c-accent-soft, #e6eff8);
}
.bestand-card--watchlist {
  cursor: default;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 0.75rem;
}
.bestand-card--archiv {
  opacity: 0.65;
  cursor: default;
}

/* ── Card-Head ─────────────────────────────────────────────── */
.bestand-card__head {
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
  margin-bottom: 0.5rem;
}
.bestand-card__lead {
  flex: 1;
  min-width: 0;
}
.bestand-card__name {
  display: block;
  font-weight: 600;
  font-size: 0.95rem;
  color: var(--c-accent, #0050a0);
  text-decoration: none;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.bestand-card__name:hover { text-decoration: underline; }
.bestand-card__ticker,
.bestand-card__wkn {
  font-size: 0.78rem;
  color: var(--c-text-muted, #6b7280);
  display: block;
}
.bestand-card__score {
  font-size: 0.875rem;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  color: var(--c-text-primary, #1a1a1a);
  font-weight: 600;
}
.bestand-card__delta {
  font-size: 0.75rem;
  color: var(--c-text-muted, #6b7280);
  margin-left: 0.25rem;
}
/* Bundle T (bestand-anzeige-ux-overhaul): Score-Row Layout analog wp-card__score-row */
.bestand-card__score-row {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  padding: 0.15rem 0;
}
.bestand-card__score-val {
  font-size: 0.875rem;
  font-variant-numeric: tabular-nums;
  font-weight: 600;
  color: var(--c-text-primary, #1a1a1a);
  white-space: nowrap;
}
.bestand-card__spark {
  display: flex;
  align-items: center;
  width: 60px;
  flex-shrink: 0;
}

/* ── Sparkline ─────────────────────────────────────────────── */
.bestand-spark {
  width: 60px;
  height: 30px;
  color: var(--c-accent, #0050a0);
}
.bestand-spark--fallback {
  color: var(--c-text-muted, #6b7280);
}

/* ── Card-Body ─────────────────────────────────────────────── */
.bestand-card__body {
  margin-top: 0.5rem;
}
.bestand-card__perf {
  display: grid;
  grid-template-columns: auto 1fr;
  gap: 0.15rem 0.75rem;
  font-size: 0.82rem;
  margin-bottom: 0.5rem;
}
.bestand-card__perf dt {
  color: var(--c-text-muted, #6b7280);
  white-space: nowrap;
}
.bestand-card__perf dd {
  margin: 0;
  color: var(--c-text-primary, #1a1a1a);
}
.bestand-card__perf .meta {
  color: var(--c-text-muted, #6b7280);
  font-size: 0.78rem;
  margin-left: 0.3rem;
}

/* ── Card-Detail (expandiert via JS) ──────────────────────── */
.bestand-card__detail {
  margin-top: 0.75rem;
  border-top: 1px solid var(--c-border-subtle, #e5e5e5);
  padding-top: 0.75rem;
}
.bestand-card__detail:empty { display: none; }

/* ── Card-Broker-Footer ─────────────────────────────────────── */
.bestand-card__broker {
  margin-top: 0.5rem;
  padding-top: 0.5rem;
  border-top: 1px solid var(--c-border-subtle, #e5e5e5);
  display: flex;
  justify-content: flex-end;
}
.broker-action-link {
  font-size: 0.8rem;
  color: var(--c-text-secondary, #4b5563);
  text-decoration: none;
  display: flex;
  align-items: center;
  gap: 0.3rem;
  padding: 0.2rem 0.5rem;
  border-radius: 4px;
  border: 1px solid var(--c-border-subtle, #e5e5e5);
  transition: background 0.1s, color 0.1s;
}
.broker-action-link:hover {
  background: var(--c-accent-soft, #e6eff8);
  color: var(--c-accent, #0050a0);
}
.broker-suffix {
  font-size: 0.75rem;
  opacity: 0.7;
}

/* ── Page-Head Broker-Link ──────────────────────────────────── */
.page-head__broker-link {
  font-size: 0.82rem;
  color: var(--c-text-secondary, #4b5563);
  text-decoration: none;
  padding: 0.3rem 0.6rem;
  border: 1px solid var(--c-border-subtle, #e5e5e5);
  border-radius: 5px;
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  transition: background 0.12s;
}
.page-head__broker-link:hover {
  background: var(--c-accent-soft, #e6eff8);
  color: var(--c-accent, #0050a0);
}
.page-head__broker-link strong {
  font-weight: 600;
}

/* ── Bestand-Alert-Block (IP-1 B4: bestand-alert-block) ────── */
/* Rounded-Box-Stil analog Memory feedback_ui_rounded_boxes_orchestrator_style */
/* DESIGN-8: raw Hex → Token (--c-warn-*) */
.bestand-alert {
  background: var(--c-warn-soft);
  border: 1.5px solid var(--c-warn-strong);
  border-radius: 8px;
  box-shadow: 0 2px 6px rgba(0, 0, 0, 0.08);
  padding: 0.9rem 1rem 0.8rem;
  margin-bottom: 1.25rem;
}
.bestand-alert__title {
  font-size: 0.9rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--c-warn-text);
  margin: 0 0 0.7rem;
}
.bestand-alert__sub {
  margin-bottom: 0.6rem;
}
.bestand-alert__sub:last-child {
  margin-bottom: 0;
}
.bestand-alert__sub-title {
  font-size: 0.83rem;
  font-weight: 600;
  color: var(--c-text-primary, #1a1a1a);
  margin: 0 0 0.35rem;
  display: flex;
  align-items: center;
  gap: 0.35rem;
}
.bestand-alert__count {
  font-size: 0.78rem;
  font-weight: 400;
  color: var(--c-text-muted, #6b7280);
}
.bestand-alert__list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
}
.bestand-alert__item {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.85rem;
  flex-wrap: wrap;
}
.bestand-alert__ticker-link {
  display: flex;
  align-items: center;
  gap: 0.35rem;
  text-decoration: none;
  color: inherit;
}
.bestand-alert__ticker-link:hover .bestand-alert__ticker {
  text-decoration: underline;
}
.bestand-alert__ticker {
  font-weight: 600;
  font-size: 0.85rem;
  color: var(--c-text-primary, #1a1a1a);
}
.bestand-alert__name {
  font-size: 0.8rem;
  color: var(--c-text-muted, #6b7280);
}
.bestand-alert__badge {
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.03em;
  padding: 0.15rem 0.45rem;
  border-radius: 4px;
}
/* STRONG_SELL: schärfere Farbe (tiefer Rot) — DESIGN-8: Hex → Token */
.bestand-alert__badge--strong-sell {
  background: var(--c-bear-soft);
  color: var(--c-bear-text);
  border: 1px solid var(--c-bear-strong);
}
/* SELL_RISK: Warn-Orange — DESIGN-8: Hex → Token */
.bestand-alert__badge--sell-risk {
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
  border: 1px solid var(--c-warn-strong);
}
/* Earnings: Blau — DESIGN-8: Hex → Token (--c-accent-soft/--c-accent) */
.bestand-alert__badge--earnings {
  background: var(--c-info-soft);
  color: var(--c-info-strong);
  border: 1px solid var(--c-border-strong);
}
.bestand-alert__score {
  font-size: 0.78rem;
  color: var(--c-text-muted, #6b7280);
}

/* ── Bestand-News ───────────────────────────────────────────── */
.bestand-news {
  margin-bottom: 1.5rem;
}
.bestand-news__list {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}

/* ── Empty-State ────────────────────────────────────────────── */
.bestand-empty {
  padding: 2rem 1rem;
  text-align: center;
  color: var(--c-text-muted, #6b7280);
  background: var(--c-bg-sunken, #f5f5f5);
  border-radius: 8px;
  margin: 0.5rem 0;
}
.bestand-empty code {
  background: var(--c-bg-card, #fff);
  padding: 0.1rem 0.3rem;
  border-radius: 3px;
  font-size: 0.85em;
  border: 1px solid var(--c-border-subtle, #e5e5e5);
}

/* ── Add-Watchlist-Section ──────────────────────────────────── */
.bestand-add-watchlist {
  margin-top: 2rem;
  padding-top: 1.5rem;
  border-top: 1px solid var(--c-border-subtle, #e5e5e5);
}

/* ── Loading-Indicator ──────────────────────────────────────── */
.pos-detail-loading {
  font-size: 0.82rem;
  color: var(--c-text-muted, #6b7280);
  padding: 0.5rem 0;
}

/* ── Archiv-Badge ───────────────────────────────────────────── */
.bestand-card__archiv-badge {
  font-size: 0.75rem;
  background: var(--c-bg-sunken, #f5f5f5);
  padding: 0.15rem 0.4rem;
  border-radius: 4px;
  border: 1px solid var(--c-border-subtle, #e5e5e5);
}

/* ── Card-Actions (Watchlist-Tab) ──────────────────────────── */
.bestand-card__actions {
  display: flex;
  gap: 0.4rem;
  align-items: center;
  flex-shrink: 0;
}

/* ── Mobile Adjustments ─────────────────────────────────────── */
@media (max-width: 600px) {
  .bestand-card__head {
    flex-wrap: wrap;
  }
  .bestand-card__spark {
    order: 3;
    width: 50px;
  }
  .bestand-depot__head {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.2rem;
  }
  .bestand-depot__sum {
    margin-left: 0;
  }
  .bestand-card--watchlist {
    flex-direction: column;
    align-items: flex-start;
  }
  .bestand-card__actions {
    margin-top: 0.4rem;
  }
}

/* ── ARCHIV-STATS-CARD · DESIGN-8 (an bestand-preview .archive-card angeglichen) ── */
/* Klassen fix durch _archiv_stats.html (Q2b-LIVE-Macro, read-only). CSS folgt dem Macro. */
/* .value/.label IMMER verschachtelt selektiert (kein globales .value{}) — Kollisionsschutz. */
.archiv-stats-card {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-5);
  margin-bottom: var(--sp-4);
  box-shadow: var(--shadow-soft);
}
.archiv-stats-card__title {
  font-size: var(--fs-h3);
  font-weight: var(--fw-bold);
  margin: 0 0 var(--sp-4);
  display: flex;
  align-items: center;
  gap: var(--sp-2);
}
.archiv-stats-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
  gap: var(--sp-3);
  margin-bottom: var(--sp-3);
}
.archiv-stats-tile {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.archiv-stats-tile .label {
  font-size: var(--fs-meta);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--c-text-muted);
  font-weight: var(--fw-semibold);
}
.archiv-stats-tile .value {
  font-size: var(--fs-h2);
  font-weight: var(--fw-bold);
  font-variant-numeric: tabular-nums;
}
.archiv-stats-tile--pos { color: var(--c-bull-text); }
.archiv-stats-tile--neg { color: var(--c-bear-text); }
.archiv-stats-extremes {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-3);
  border-top: 1px solid var(--c-border-subtle);
  padding-top: var(--sp-3);
}
@media (max-width: 600px) {
  .archiv-stats-extremes { grid-template-columns: 1fr; }
}
.archiv-stats-extreme {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
/* --top / --worst: bewusst keine eigene CSS-Regel.
   Optik-Differenzierung laeuft ueber .archiv-stats-tile--pos/--neg am Value-Span.
   Falls Icon-/Badge-Anker noetig wird: hier ansetzen. */
.archiv-stats-extreme .label {
  font-size: var(--fs-meta);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--c-text-muted);
  font-weight: var(--fw-semibold);
}
.archiv-stats-extreme .value {
  font-size: var(--fs-body);
  font-weight: var(--fw-semibold);
  font-variant-numeric: tabular-nums;
}

/* === [LANE-2 · BESTAND] · END === */

/* === [LANE-3 · WERTPAPIERE] =====================================
 * Owner: B-E.6 Screen-Lane
 * ============================================================== */

/* === [LANE-4 · TICKER] ==========================================
 * Owner: B-E.7 Screen-Lane · bundle-e-screen-ticker
 * Lane 4 START · 2026-05-28 · konsolidierte Detail-Seite
 * ============================================================== */

/* ── Hero-Chart ──────────────────────────────────────────────── */
.hero-chart {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-3);
  margin-bottom: var(--sp-4);
}
.hero-chart__head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-2);
  margin-bottom: var(--sp-2);
  flex-wrap: wrap;
}
.hero-chart__title {
  font-weight: 600;
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.hero-chart__range-pills {
  display: flex;
  gap: var(--sp-1);
  flex-wrap: wrap;
}
.range-pill {
  display: inline-block;
  padding: 0.2rem 0.5rem;
  border-radius: var(--r-pill);
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
  border: 1px solid var(--c-border-subtle);
  text-decoration: none;
  transition: background 0.15s, color 0.15s;
}
.range-pill:hover {
  background: var(--c-accent-soft);
  color: var(--c-accent);
  border-color: var(--c-accent);
}
.range-pill--active {
  background: var(--c-accent);
  color: var(--c-text-inverse);
  border-color: var(--c-accent);
}
.hero-chart__container {
  width: 100%;
  height: 280px;
  min-height: 160px;
  position: relative;
}
/* Hover-Tooltip fuer News-Marker (chart-news-marker-overlap fix) */
.hero-chart__news-tip {
  position: absolute;
  z-index: 10;
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-1);
  font-size: var(--fs-sm);
  max-width: 220px;
  white-space: pre-line;
  pointer-events: none;
  line-height: 1.4;
}
.hero-chart__meta {
  margin-top: var(--sp-1);
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
}
.hero-chart__loading {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 200px;
  color: var(--c-text-muted);
}
@media (max-width: 600px) {
  .hero-chart__container { height: 180px; }
}

/* ── OSUR Hero-Card ──────────────────────────────────────────── */
.hero-card-osur {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  padding: var(--sp-3) var(--sp-4);
  margin-bottom: var(--sp-4);
}
.hero-card-osur__pills {
  display: flex;
  gap: var(--sp-1);
  flex-wrap: wrap;
  margin-bottom: var(--sp-2);
}
.hero-card-osur__pill {
  font-size: var(--fs-sm);
  padding: 0.2rem 0.6rem;
  border-radius: var(--r-pill);
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
}
.hero-card-osur__pill--bull { background: var(--c-bull-soft); color: var(--c-bull-text); border-color: var(--c-bull-strong); }
.hero-card-osur__pill--bear { background: var(--c-bear-soft); color: var(--c-bear-text); border-color: var(--c-bear-strong); }

/* ── Trade-Setup-Strip ───────────────────────────────────────── */
.trade-setup-strip {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: var(--sp-2);
  padding: var(--sp-2) 0;
  border-top: 1px solid var(--c-border-subtle);
  border-bottom: 1px solid var(--c-border-subtle);
  margin: var(--sp-2) 0;
}
.trade-setup-strip__cell {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.1rem;
}
.trade-setup-strip__label {
  font-size: 0.7rem;
  color: var(--c-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.trade-setup-strip__value {
  font-size: var(--fs-sm);
  font-weight: 600;
}
@media (max-width: 600px) {
  .trade-setup-strip {
    grid-template-columns: repeat(3, 1fr);
  }
  .trade-setup-strip__cell:nth-child(n+4) {
    grid-column: auto;
  }
}

/* ── Domain-Card-Grid ────────────────────────────────────────── */
.domain-card-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: var(--sp-3);
  margin-bottom: var(--sp-4);
}
@media (max-width: 980px) {
  .domain-card-grid {
    grid-template-columns: repeat(2, 1fr);
  }
}
@media (max-width: 600px) {
  .domain-card-grid {
    grid-template-columns: 1fr;
  }
}
.domain-card {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  padding: var(--sp-3);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}
.domain-card__header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-1);
}
.domain-card__title {
  font-size: var(--fs-sm);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--c-text-secondary);
}
.domain-card__score {
  font-size: 1.2rem;
  font-weight: 700;
  color: var(--c-text-primary);
}
.domain-card__score--bull { color: var(--c-bull-strong); }
.domain-card__score--bear { color: var(--c-bear-strong); }
.domain-card__trend {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
}
.domain-card__trend--up   { color: var(--c-bull-strong); }
.domain-card__trend--down { color: var(--c-bear-strong); }
.domain-card__footer {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  border-top: 1px solid var(--c-border-subtle);
  padding-top: var(--sp-1);
}
.domain-card__drill details {
  margin-top: var(--sp-1);
}
.domain-card__drill summary {
  font-size: var(--fs-sm);
  color: var(--c-accent);
  cursor: pointer;
  user-select: none;
}
.domain-card__drill-rows {
  margin-top: var(--sp-1);
  display: flex;
  flex-direction: column;
  gap: 0.2rem;
}
.domain-card__drill-row {
  display: grid;
  grid-template-columns: 1fr auto auto auto;
  gap: var(--sp-1);
  font-size: 0.75rem;
  padding: 0.15rem 0;
  border-bottom: 1px solid var(--c-border-subtle);
  color: var(--c-text-secondary);
}
.domain-card__drill-row--hit {
  background: var(--c-accent-soft);
  border-radius: 3px;
  padding-left: 0.3rem;
}

/* ── Sub-Agent-Verdict auf Domain-Cards (Slug domain-card-subagent-text, IP-2 Q1) ─── */
.subagent-bar {
  display: flex;
  flex-direction: column;
  gap: 0.3rem;
  margin-top: var(--sp-1);
  padding-top: var(--sp-1);
  border-top: 1px dashed var(--c-border-subtle);
}
.subagent-bar__reason {
  font-size: 0.78rem;
  color: var(--c-text-secondary);
  margin: 0;
  display: -webkit-box;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
.subagent-bar__drill summary {
  font-size: var(--fs-sm);
  color: var(--c-accent);
  cursor: pointer;
  user-select: none;
}
.subagent-bar__full {
  margin-top: var(--sp-1);
  font-size: 0.8rem;
  color: var(--c-text-secondary);
}
/* verdict-pill: kompakte Verdict-Marke, abgerundet (Orchestrator-Style) */
.verdict-pill {
  display: inline-block;
  padding: 1px 8px;
  font-size: 0.7rem;
  font-weight: var(--fw-semibold, 600);
  border-radius: var(--r-pill, 999px);
  border: 1px solid transparent;
  line-height: 1.5;
}
/* Fallback-Hex = echter CSS-Var-Wert aus style.css :root (F-3-korrigiert) */
.verdict-pill--bull { background: var(--c-bull-soft, #d1fae5); color: var(--c-bull-strong, #047857); border-color: var(--c-bull-strong, #047857); }
.verdict-pill--bear { background: var(--c-bear-soft, #fee2e2); color: var(--c-bear-strong, #b91c1c); border-color: var(--c-bear-strong, #b91c1c); }
.verdict-pill--neut { background: var(--c-neutral-soft, #f3f4f6); color: var(--c-neutral-text, #374151); border-color: var(--c-neutral-strong, #6b7280); }
.verdict-pill--warn { background: var(--c-warn-soft, #fef3c7); color: var(--c-warn-text, #92400e); border-color: var(--c-warn-strong, #d97706); }
/* subagent-pill: Alias-Layout ohne Farbvariante (fuer kuenftige Bar-Membership-Liste) */
.subagent-pill {
  display: inline-block;
  padding: 1px 8px;
  font-size: 0.7rem;
  border-radius: var(--r-pill, 999px);
  border: 1px solid var(--c-border-subtle);
  color: var(--c-text-secondary);
}
/* ── [/Sub-Agent-Verdict domain-card-subagent-text] ───────────────────────── */

/* ── Gesamt-Composite-Headline-Gauge (gesamt-composite-meter, Sprint_2026_18) ── */
.composite-headline {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  padding: var(--sp-3);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  margin-bottom: var(--sp-3);
}
.composite-headline__label {
  font-size: var(--fs-sm);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--c-text-secondary);
}
.composite-headline__score {
  font-size: 2rem;
  font-weight: 700;
  color: var(--c-text-primary);
  line-height: 1;
}
.composite-headline__score--bull { color: var(--c-bull-strong); }
.composite-headline__score--bear { color: var(--c-bear-strong); }
/* --neut: inherits c-text-primary */
/* ── [/Gesamt-Composite-Headline-Gauge] ──────────────────────────────────── */

/* ── Daten-Hub Divider ───────────────────────────────────────── */
.daten-hub__divider {
  margin: var(--sp-5) 0 var(--sp-4);
  display: flex;
  align-items: center;
  gap: var(--sp-2);
}
.daten-hub__divider-line {
  flex: 1;
  height: 1px;
  background: var(--c-border-strong);
}
.daten-hub__divider-label {
  font-size: var(--fs-sm);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--c-text-secondary);
  padding: 0.3rem 0.8rem;
  border: 1px solid var(--c-border-strong);
  border-radius: var(--r-pill);
  background: var(--c-bg-card);
}

/* ── Reports-List in Daten-Hub ───────────────────────────────── */
.reports-list {
  list-style: none;
  padding: 0;
  margin: 0;
}
.reports-list__item {
  display: flex;
  align-items: baseline;
  gap: var(--sp-2);
  padding: var(--sp-2) 0;
  border-bottom: 1px solid var(--c-border-subtle);
  flex-wrap: wrap;
}
.reports-list__item:last-child {
  border-bottom: none;
}
.reports-list__headline {
  flex: 1;
  font-size: var(--fs-sm);
}
.reports-list__meta {
  font-size: 0.75rem;
  color: var(--c-text-muted);
  white-space: nowrap;
}
.reports-list__older {
  margin-top: var(--sp-2);
}
.reports-list__older summary {
  font-size: var(--fs-sm);
  color: var(--c-accent);
  cursor: pointer;
}
.reports-list__empty {
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
  padding: var(--sp-2) 0;
}
.llm-action-bar {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  flex-wrap: wrap;
  margin-bottom: var(--sp-2);
}

/* ── Cluster-Tags ────────────────────────────────────────────── */
.cluster-tags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-1);
  margin: var(--sp-2) 0;
}
.cluster-tag {
  display: inline-flex;
  align-items: center;
  gap: 0.2rem;
  font-size: var(--fs-sm);
  padding: 0.2rem 0.6rem;
  border-radius: var(--r-pill);
  background: var(--c-accent-soft);
  color: var(--c-accent);
  border: 1px solid var(--c-accent);
  text-decoration: none;
}
.cluster-tag__x {
  cursor: pointer;
  color: var(--c-text-muted);
  font-size: 0.75rem;
  padding: 0 0.1rem;
  background: none;
  border: none;
  line-height: 1;
}
.cluster-tag__x:hover { color: var(--c-bear-strong); }

/* ── Watchlist-Membership ────────────────────────────────────── */
.watchlist-membership {
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-2) var(--sp-3);
  margin: var(--sp-2) 0;
  font-size: var(--fs-sm);
}
.watchlist-membership__list {
  list-style: none;
  padding: 0;
  margin: var(--sp-1) 0 0;
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-1);
}
.watchlist-membership__item {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-pill);
  padding: 0.2rem 0.6rem;
  color: var(--c-text-secondary);
}

/* ── Earnings-Block ──────────────────────────────────────────── */
.earnings-block {
  margin-top: var(--sp-3);
}
.earnings-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-sm);
}
.earnings-table th,
.earnings-table td {
  padding: var(--sp-1) var(--sp-2);
  border-bottom: 1px solid var(--c-border-subtle);
  text-align: left;
}
.earnings-table th {
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: 0.7rem;
  color: var(--c-text-muted);
}
.earnings-upcoming td:first-child::after {
  content: " (geplant)";
  font-size: 0.7rem;
  color: var(--c-text-muted);
}

/* ── Ticker-Subnav ───────────────────────────────────────────── */
.subnav__tab {
  display: inline-block;
  padding: 0.35rem 0.8rem;
  border-radius: var(--r-pill);
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
  text-decoration: none;
  transition: background 0.15s, color 0.15s;
  white-space: nowrap;
  border: 1px solid transparent;
}
.subnav__tab:hover {
  background: var(--c-accent-soft);
  color: var(--c-accent);
}
.subnav__tab--active {
  background: var(--c-accent);
  color: var(--c-text-inverse);
  border-color: var(--c-accent);
}

/* ── Anker-Scroll-Offset (DEV-NOTE-7) ────────────────────────── */
section[id="vollanalyse"],
section[id="reports"],
section[id="news"],
section[id="cluster"],
section[id="daten-hub"],
section[id="snapshots"],
section[id="earnings"] {
  scroll-margin-top: 60px;
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
}

/* ── Info-Section Ticker ─────────────────────────────────────── */
.ticker-kpis-section {
  margin-bottom: var(--sp-4);
}
.ticker-kpis-section__heading {
  font-size: var(--fs-sm);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--c-text-secondary);
  margin-bottom: var(--sp-2);
}
.section-heading {
  font-size: var(--fs-sm);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--c-text-secondary);
  margin-bottom: var(--sp-2);
  border-bottom: 1px solid var(--c-border-subtle);
  padding-bottom: var(--sp-1);
}
.ticker-section-block {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  padding: var(--sp-3) var(--sp-4);
  margin-bottom: var(--sp-4);
}

/* ── News-Impact-Timeline (CC-189, Sprint_2026_29) ─────────────────────
   Vertikaler Zeitstrahl mit Reaktions-Pills. Token-basiert (kein raw-Hex).
   Architecture: docs/potentiale/news-impact-timeline/architecture.md §4b */
.impact-timeline {
  list-style: none;
  margin: 0;
  padding: 0;
}
.impact-timeline__item {
  position: relative;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-2) 0 var(--sp-2) var(--sp-4);
  border-left: 2px solid var(--c-border-subtle);
}
.impact-timeline__item + .impact-timeline__item {
  margin-top: var(--sp-1);
}
.impact-timeline__rail {
  display: none; /* Rail wird ueber border-left des __item gerendert */
}
.impact-timeline__date {
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
  white-space: nowrap;
  min-width: 9rem;
}
.impact-timeline__headline {
  flex: 1 1 16rem;
  min-width: 0;
}
.impact-timeline__headline a {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
}
.impact-timeline__reaction {
  display: flex;
  gap: var(--sp-2);
  flex-wrap: wrap;
}
.impact-timeline__pill {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  padding: 0.15rem var(--sp-2);
  border-radius: var(--r-pill);
  font-size: var(--fs-sm);
  font-weight: 600;
  white-space: nowrap;
}
.impact-timeline__pill--bull {
  background: var(--c-bull-soft);
  color: var(--c-bull-text);
}
.impact-timeline__pill--bear {
  background: var(--c-bear-soft);
  color: var(--c-bear-text);
}
.impact-timeline__pill--neut {
  background: var(--c-neutral-soft);
  color: var(--c-neutral-text);
}
.impact-timeline__disclaimer {
  margin-top: var(--sp-3);
  font-style: italic;
}
@media (max-width: 768px) {
  .impact-timeline__item {
    flex-direction: column;
    align-items: flex-start;
    gap: var(--sp-1);
  }
  .impact-timeline__date {
    min-width: 0;
  }
}
@media (max-width: 600px) {
  .impact-timeline__reaction {
    width: 100%;
  }
}

/* ── Ticker Action-Row (logged-out pill) ─────────────────────── */
.ticker-action-login-pill {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  font-size: var(--fs-sm);
  padding: 0.3rem 0.8rem;
  border-radius: var(--r-pill);
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  color: var(--c-text-muted);
  text-decoration: none;
}
.ticker-action-login-pill:hover {
  background: var(--c-accent-soft);
  color: var(--c-accent);
}

/* === [LANE-4 · TICKER] · END === */

/* === [LANE-5 · NEWS] ============================================
 * Owner: B-E.8 Screen-Lane
 * ============================================================== */

/* === [LANE-6 · CLUSTERS] ========================================
 * Owner: B-E.10 Screen-Lane
 * ============================================================== */

/* === [LANE-3 · WERTPAPIERE] =====================================
 * Owner: bundle-e-screen-wertpapiere (B-E.6)
 * Architecture: docs/potentiale/bundle-e-screen-wertpapiere/architecture.md §5
 * ============================================================== */

/* Toolbar (Search + Sort) */
.wp-toolbar {
  display: flex;
  gap: var(--sp-3);
  align-items: center;
  flex-wrap: wrap;
  margin-bottom: var(--sp-3);
}
.wp-toolbar__search-form {
  display: flex;
  gap: var(--sp-2);
  align-items: center;
  flex: 1;
  min-width: 200px;
}
.wp-toolbar__search-input {
  flex: 1;
  padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-sm);
  background: var(--c-bg-card);
  color: var(--c-text-primary);
  font-size: var(--fs-sm);
}
.wp-toolbar__sort-label {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
  display: flex;
  align-items: center;
  gap: var(--sp-2);
}
.wp-toolbar__sort-select {
  padding: var(--sp-1) var(--sp-2);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-sm);
  background: var(--c-bg-card);
  color: var(--c-text-primary);
  font-size: var(--fs-sm);
}

/* Result-Header */
.wp-result-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin: var(--sp-2) 0 var(--sp-3);
}
.wp-result-header__count {
  font-size: var(--fs-sm);
  color: var(--c-text-muted);
}

/* Card-Grid */
.wp-card-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--sp-4);
}
@media (max-width: 768px) {
  .wp-card-grid {
    grid-template-columns: 1fr;
  }
}

/* Card */
.wp-card {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-4);
  box-shadow: var(--shadow-card);
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}
.wp-card--in-bestand {
  border-left: 4px solid var(--c-accent);
}
.wp-card--alert {
  border-left: 4px solid var(--c-bear-strong);
}

/* Card-Head */
.wp-card__head {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: var(--sp-2);
  align-items: start;
}
.wp-card__name {
  font-size: var(--fs-body);
  text-decoration: none;
  color: var(--c-text-primary);
}
.wp-card__name:hover {
  color: var(--c-accent);
  text-decoration: underline;
}
.wp-card__meta-row {
  display: flex;
  gap: var(--sp-2);
  align-items: center;
  flex-wrap: wrap;
  margin-top: var(--sp-1);
}
.wp-card__ticker {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
}
.wp-card__sector,
.wp-card__region {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
  background: var(--c-bg-sunken);
  border-radius: var(--r-pill);
  padding: 1px 6px;
}

/* Sparkline */
.wp-card__spark {
  width: 120px;
  height: 40px;
  flex-shrink: 0;
}
.wp-sparkline {
  width: 100%;
  height: 100%;
}
.wp-sparkline--fallback {
  opacity: 0.3;
}

/* Score-Row */
.wp-card__score-row {
  display: flex;
  gap: var(--sp-2);
  align-items: center;
  flex-wrap: wrap;
}
.wp-card__score-val {
  font-size: var(--fs-sm);
  font-variant-numeric: tabular-nums;
  font-weight: 600;
}
.wp-card__score-delta {
  font-size: var(--fs-meta);
  font-variant-numeric: tabular-nums;
}

/* Price-Row */
.wp-card__price-row {
  display: flex;
  gap: var(--sp-2);
  align-items: baseline;
  font-variant-numeric: tabular-nums;
  font-size: var(--fs-sm);
}
.wp-card__price {
  font-weight: 600;
}
.wp-card__day-pct {
  font-size: var(--fs-meta);
}
.wp-card__reports {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
}

/* Actions */
.wp-card__actions {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--sp-2);
  margin-top: var(--sp-2);
}

/* Bestand-Marker */
.bestand-marker {
  font-size: var(--fs-sm);
  color: var(--c-accent);
  font-weight: 600;
}
.bestand-marker--watch {
  color: var(--c-text-muted);
}

/* Position-Hint (Kurzformat) */
.wp-card__pos-hint {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
  background: var(--c-bg-sunken);
  border-radius: var(--r-sm);
  padding: var(--sp-2) var(--sp-3);
}

/* Empty-State */
.wp-empty-state {
  text-align: center;
  padding: var(--sp-8) var(--sp-4);
  color: var(--c-text-muted);
}

/* A-Z-Jump */
.az-jump {
  display: flex;
  gap: 2px;
  background: var(--c-bg-card);
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r-md);
  overflow-x: auto;
  margin: var(--sp-3) 0;
  box-shadow: var(--shadow-card);
  -webkit-overflow-scrolling: touch;
  scrollbar-width: none;
}
.az-jump::-webkit-scrollbar {
  display: none;
}
.az-letter {
  width: 30px;
  height: 30px;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  border-radius: var(--r-sm);
  text-decoration: none;
  color: var(--c-text-primary);
  font-size: var(--fs-sm);
  flex-shrink: 0;
  transition: background 0.1s;
}
.az-letter:hover {
  background: var(--c-bg-sunken);
}
.az-letter--active {
  background: var(--c-accent);
  color: #fff;
  font-weight: 600;
}
.az-letter--disabled {
  color: var(--c-text-disabled);
  cursor: not-allowed;
  pointer-events: none;
}
.az-letter--reset {
  color: var(--c-text-muted);
  font-size: 1rem;
  font-weight: 600;
  margin-left: var(--sp-2);
}

/* Pagination */
.pagination {
  display: flex;
  gap: var(--sp-2);
  justify-content: center;
  align-items: center;
  margin: var(--sp-5) 0 var(--sp-2);
  flex-wrap: wrap;
}
.pagination__btn,
.pagination__prev,
.pagination__next {
  padding: var(--sp-2) var(--sp-3);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-sm);
  background: var(--c-bg-card);
  text-decoration: none;
  color: var(--c-text-primary);
  font-size: var(--fs-sm);
  transition: background 0.1s;
}
.pagination__btn:hover,
.pagination__prev:hover,
.pagination__next:hover {
  background: var(--c-bg-sunken);
}
.pagination__btn--active {
  background: var(--c-accent);
  color: #fff;
  border-color: var(--c-accent);
  font-weight: 600;
}
.pagination__btn--disabled {
  color: var(--c-text-disabled);
  pointer-events: none;
  cursor: default;
}
.pagination__ellipsis {
  padding: var(--sp-2);
  color: var(--c-text-muted);
}
.pagination__meta {
  text-align: center;
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
  margin: 0;
}

/* === [/LANE-3 · WERTPAPIERE] === */

/* === LANE-5 · NEWS === */
/* Bundle E B-E.8: K25-Split, Cluster-Pill, Wrapper-Div, Admin-Details.
   Architecture: docs/potentiale/bundle-e-screen-news/architecture.md §4.4 + §3
   Append-only — KEINE Aenderungen an bestehenden Selektoren oberhalb. */

/* ── News-Wrapper (F-1 Fallback-B: Sibling-Container fuer Cluster-Pill + Read-Dimming) ── */
.news-card-wrapper {
  position: relative;
  display: block;
  margin-bottom: var(--sp-3, 0.75rem);
}

.news-card-wrapper--read .news-card {
  opacity: 0.55;
  transition: opacity 0.2s ease;
}

.news-card-wrapper--read:hover .news-card {
  opacity: 0.85;
}

/* Bundle M Phase 2 Lane 2: news-card-empty-sections-collapse (v0.80.0)
   Wrapper-Margin-Konsolidierung (RC-1): innere .news-card soll keinen
   zusaetzlichen margin-bottom haben wenn bereits der Wrapper margin-bottom
   traegt — verhindert Whitespace-Doppelung auf /news.
   Slug: news-card-empty-sections-collapse */
.news-card-wrapper > .news-card {
  margin-bottom: 0;
}

/* ── Cluster-Pill (absolut positioniert als Sibling, z-index 1 ueber Card) ── */
.news-cluster-pill--inline {
  position: absolute;
  top: var(--sp-2);
  right: var(--sp-2);
  z-index: 1;  /* ueber news-card, unter sticky filter-bar (z-index: 20) */
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  padding: var(--sp-1) var(--sp-2);
  border-radius: var(--r-pill);
  font-size: var(--fs-meta);
  background: var(--c-cluster-bg, #fff4e5);  /* Sonderfarbe Amber — bewusst */
  color: var(--c-cluster-fg, #b25d00);        /* Sonderfarbe Amber — bewusst */
  border: 1px solid var(--c-cluster-border, #ffd9a8);  /* Sonderfarbe Amber — bewusst */
  white-space: nowrap;
  pointer-events: none;  /* Pill ist Dekoration, kein Click-Ziel */
}

/* ── News-Sektionen (K25-Split: Bestand / Watch / Markt) ──────────────────── */
/* DESIGN-4 (design4-reports): tote Fallback-Tokens → echte Foundation-Tokens */
.news-section {
  margin-bottom: var(--sp-6);
}

.news-section__head {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  margin-bottom: var(--sp-3);
  padding-bottom: var(--sp-2);
  border-bottom: 1px solid var(--c-border-subtle);
}

.news-section__icon {
  font-size: 1rem; /* kein --fs-body-Alias noetig, literal 1rem ist stable */
  flex-shrink: 0;
}

.news-section__title {
  font-size: var(--fs-sm);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  color: var(--c-text-secondary);
  margin: 0;
}

.news-section__head-right {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  margin-left: auto;
}

.news-section__count {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
  margin-left: auto;
}

.news-section__count--only-for-you {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
  background: var(--c-bg-sunken);
  padding: 2px var(--sp-2);
  border-radius: var(--r-sm);
  border: 1px solid var(--c-border-subtle);
}

.news-section--bestand .news-section__title {
  color: var(--c-accent);
}

.news-section--watch .news-section__title {
  color: var(--c-text-secondary);
}

.news-section--markt .news-section__title {
  color: var(--c-text-primary);
}

/* ── News-List-Reset fuer K25-Sektionen ─────────────────────────────────── */
.news-list--k25 {
  list-style: none;
  padding: 0;
  margin: 0;
}

.news-list--k25 > li {
  margin-bottom: 0;  /* Spacing uebernimmt .news-card-wrapper margin-bottom */
}

/* ── Section-Expand-Button ──────────────────────────────────────────────── */
.news-section__expand {
  margin-top: var(--sp-2);
  text-align: center;
}

/* ── Topic-Pills in Markt-Header ────────────────────────────────────────── */
.news-section__topics {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-1);
}

.news-topic-pill {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  padding: 2px var(--sp-2);
  border-radius: var(--r-pill);
  font-size: var(--fs-meta);
  background: var(--c-bg-sunken);
  color: var(--c-text-secondary);
  border: 1px solid var(--c-border-subtle);
  text-decoration: none;
}

.news-topic-pill:hover {
  background: var(--c-accent-soft);
  color: var(--c-accent);
  border-color: var(--c-accent);
}

.news-topic-pill__count {
  font-weight: 600;
  color: var(--c-text-primary);
}

/* ── Admin-Details ───────────────────────────────────────────────────────── */
.news-admin {
  margin-top: var(--sp-6);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-md);
  padding: var(--sp-3);
  background: var(--c-bg-sunken);
}

.news-admin__summary {
  cursor: pointer;
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--c-text-secondary);
  user-select: none;
  padding: var(--sp-1) 0;
}

.news-admin__summary:hover {
  color: var(--c-text-primary);
}

.news-admin__body {
  margin-top: var(--sp-3);
}

/* ── Empty-State ─────────────────────────────────────────────────────────── */
.news-empty-state {
  padding: var(--sp-6) 0;
  text-align: center;
}

/* ── Mobile: Stacking (kein z-Index-Konflikt mit Bottom-Tab / Pull-Tab) ──── */
@media (max-width: 1023px) {
  .news-cluster-pill--inline {
    position: static;
    display: inline-flex;
    margin-bottom: var(--sp-1);
  }

  .news-section__head {
    flex-wrap: wrap;
    gap: var(--sp-1, 0.25rem);
  }

  .news-section__head-right {
    width: 100%;
    margin-left: 0;
    flex-wrap: wrap;
  }
}

/* === [/LANE-5 · NEWS] === */

/* === [LANE-6 · CLUSTERS] === */

/* ── Cluster-Section-Block (Index) ──────────────────────────────────────── */
.cluster-section-block {
  margin-bottom: var(--sp-8, 2rem);
}

.cluster-section-block__header {
  display: flex;
  align-items: center;
  gap: var(--sp-2, 0.5rem);
  margin-bottom: var(--sp-2, 0.5rem);
  cursor: pointer;
  user-select: none;
}

.cluster-section-block__title {
  font-size: var(--text-sm, 0.875rem);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--c-text-secondary, #64748b);
}

.cluster-section-block__toggle {
  margin-left: auto;
  font-size: var(--text-sm, 0.875rem);
  color: var(--c-text-muted, #94a3b8);
  transition: transform 0.2s ease;
}

.cluster-section-block[aria-expanded="false"] .cluster-section-block__toggle {
  transform: rotate(-90deg);
}

.cluster-section-block__body {
  overflow: hidden;
}

.cluster-section-block[aria-expanded="false"] .cluster-section-block__body {
  display: none;
}

.cluster-dim-desc {
  font-size: var(--text-xs, 0.75rem);
  color: var(--c-text-muted, #94a3b8);
  margin-bottom: var(--sp-2, 0.5rem);
}

/* ── Cluster-Chip (modernisiert mit Token-Border-Akzent) ─────────────────── */
.cluster-chip {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1, 0.25rem);
  padding: var(--sp-1, 0.25rem) var(--sp-2, 0.5rem);
  border-radius: var(--radius-sm, 4px);
  font-size: var(--text-xs, 0.75rem);
  font-weight: 500;
  text-decoration: none;
  transition: opacity 0.15s, box-shadow 0.15s;
  background: var(--c-bg-card, #fff);
  border: 1px solid currentColor;
  color: var(--c-text-secondary, #64748b);
  line-height: 1.4;
}

.cluster-chip:hover {
  opacity: 0.8;
  box-shadow: 0 1px 4px rgba(0,0,0,0.10);
}

.cluster-chip--sektor          { color: #2563eb; border-color: #2563eba0; }
.cluster-chip--sub-sektor      { color: #0891b2; border-color: #0891b2a0; }
.cluster-chip--region          { color: #16a34a; border-color: #16a34aa0; }
.cluster-chip--thema           { color: #d97706; border-color: #d97706a0; }
.cluster-chip--investment-these { color: #a47d1a; border-color: #a47d1aa0; }

.cluster-chip--empty {
  opacity: 0.45;
}

.cluster-chip--user-match {
  font-weight: 700;
  box-shadow: 0 0 0 2px currentColor;
}

.cluster-chip__count {
  font-weight: 400;
  opacity: 0.7;
  font-size: 0.9em;
}

/* ── User-Match-Hit-List ─────────────────────────────────────────────────── */
.cluster-hit-list {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-1, 0.25rem);
  margin-top: var(--sp-2, 0.5rem);
}

.cluster-hit {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1, 0.25rem);
  padding: var(--sp-1, 0.25rem) var(--sp-2, 0.5rem);
  border-radius: var(--radius-sm, 4px);
  font-size: var(--text-xs, 0.75rem);
  background: var(--c-bg-subtle, #f8fafc);
  border: 1px solid var(--c-border, #e2e8f0);
  text-decoration: none;
  color: var(--c-text-secondary, #64748b);
  transition: background 0.15s;
}

.cluster-hit:hover {
  background: var(--c-bg-card, #fff);
}

.cluster-hit__count {
  font-weight: 600;
  color: var(--c-text-primary, #1e293b);
}

/* ── Allocation-Section (Sektion A: nur fuer eingeloggte User) ───────────── */
.cluster-allocation {
  background: var(--c-bg-card, #fff);
  border: 1px solid var(--c-border, #e2e8f0);
  border-radius: var(--radius, 8px);
  padding: var(--sp-4, 1rem);
  margin-bottom: var(--sp-6, 1.5rem);
  box-shadow: 0 1px 3px rgba(0,0,0,0.06);
}

.cluster-allocation__banner {
  display: flex;
  align-items: center;
  gap: var(--sp-2, 0.5rem);
  font-size: var(--text-xs, 0.75rem);
  color: var(--c-text-muted, #94a3b8);
  margin-bottom: var(--sp-3, 0.75rem);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

/* ── Donut-Grid ──────────────────────────────────────────────────────────── */
.cluster-donut-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  gap: var(--sp-4, 1rem);
  margin-bottom: var(--sp-4, 1rem);
}

.cluster-donut-card {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: var(--sp-2, 0.5rem);
}

.cluster-donut-card__title {
  font-size: var(--text-xs, 0.75rem);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--c-text-secondary, #64748b);
}

.cluster-donut-legend {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1, 0.25rem);
  font-size: var(--text-xs, 0.75rem);
  width: 100%;
}

.cluster-donut-legend__item {
  display: flex;
  align-items: center;
  gap: var(--sp-1, 0.25rem);
}

.cluster-donut-legend__swatch {
  width: 10px;
  height: 10px;
  border-radius: 2px;
  flex-shrink: 0;
}

.cluster-donut-legend__name {
  flex: 1;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  color: var(--c-text-secondary, #64748b);
}

.cluster-donut-legend__pct {
  font-weight: 600;
  color: var(--c-text-primary, #1e293b);
  white-space: nowrap;
}

.cluster-donut-footer {
  font-size: var(--text-xs, 0.75rem);
  color: var(--c-text-muted, #94a3b8);
  margin-top: var(--sp-1, 0.25rem);
  font-style: italic;
}

/* ── Member-Tabelle (Detail-View) ────────────────────────────────────────── */
.cluster-members {
  width: 100%;
  border-collapse: collapse;
}

.cluster-members th {
  text-align: left;
  font-size: var(--text-xs, 0.75rem);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  color: var(--c-text-muted, #94a3b8);
  padding: var(--sp-2, 0.5rem) var(--sp-3, 0.75rem);
  border-bottom: 2px solid var(--c-border, #e2e8f0);
  cursor: pointer;
  white-space: nowrap;
  user-select: none;
}

.cluster-members th:hover {
  color: var(--c-text-secondary, #64748b);
}

.cluster-members th[data-sort-active="asc"]::after  { content: " ↑"; }
.cluster-members th[data-sort-active="desc"]::after { content: " ↓"; }

.cluster-members td {
  padding: var(--sp-2, 0.5rem) var(--sp-3, 0.75rem);
  border-bottom: 1px solid var(--c-border-subtle, #f1f5f9);
  font-size: var(--text-sm, 0.875rem);
  vertical-align: middle;
}

.cluster-members tr:hover td {
  background: var(--c-bg-subtle, #f8fafc);
}

/* User-Position-Marker (Portemonnaie-Symbol) */
.cluster-member-marker {
  font-size: 0.8em;
  opacity: 0.7;
}

/* User-Positions-Block (Detail) */
.cluster-user-positions {
  background: var(--c-bg-card, #fff);
  border: 1px solid var(--c-border, #e2e8f0);
  border-radius: var(--radius, 8px);
  padding: var(--sp-4, 1rem);
  margin-bottom: var(--sp-4, 1rem);
  box-shadow: 0 1px 3px rgba(0,0,0,0.06);
}

.cluster-user-positions__banner {
  display: flex;
  align-items: center;
  gap: var(--sp-2, 0.5rem);
  font-size: var(--text-xs, 0.75rem);
  color: var(--c-text-muted, #94a3b8);
  margin-bottom: var(--sp-3, 0.75rem);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

.cluster-user-positions__stats {
  display: flex;
  gap: var(--sp-4, 1rem);
  font-size: var(--text-sm, 0.875rem);
  flex-wrap: wrap;
  margin-bottom: var(--sp-3, 0.75rem);
}

.cluster-user-positions__stat {
  display: flex;
  flex-direction: column;
  gap: 2px;
}

.cluster-user-positions__stat-label {
  font-size: var(--text-xs, 0.75rem);
  color: var(--c-text-muted, #94a3b8);
  text-transform: uppercase;
  letter-spacing: 0.04em;
}

.cluster-user-positions__stat-value {
  font-weight: 600;
  color: var(--c-text-primary, #1e293b);
}

/* Mobile: Stack-Cards fuer Member-Tabelle */
@media (max-width: 767px) {
  .cluster-members[data-mobile="stack"] thead {
    display: none;
  }

  .cluster-members[data-mobile="stack"] tbody,
  .cluster-members[data-mobile="stack"] tr,
  .cluster-members[data-mobile="stack"] td {
    display: block;
  }

  .cluster-members[data-mobile="stack"] tr {
    background: var(--c-bg-card, #fff);
    border: 1px solid var(--c-border, #e2e8f0);
    border-radius: var(--radius-sm, 4px);
    margin-bottom: var(--sp-3, 0.75rem);
    padding: var(--sp-2, 0.5rem);
  }

  .cluster-members[data-mobile="stack"] td {
    border-bottom: none;
    padding: var(--sp-1, 0.25rem) var(--sp-2, 0.5rem);
    font-size: var(--text-sm, 0.875rem);
  }

  .cluster-members[data-mobile="stack"] td::before {
    content: attr(data-label) ": ";
    font-weight: 600;
    color: var(--c-text-muted, #94a3b8);
    font-size: var(--text-xs, 0.75rem);
    display: block;
    text-transform: uppercase;
    letter-spacing: 0.04em;
  }

  .cluster-donut-grid {
    grid-template-columns: 1fr;
  }
}

/* === [/LANE-6 · CLUSTERS] === */

/* ── Bundle Y (watchlist-user-labels, v0.92.0) ─────────────────────────────── */
/* Rounded-Box-Stil analog Orchestrator-UI (Memory: feedback_ui_rounded_boxes_orchestrator_style) */

/* Label-Chip: einzelner Label-Badge */
.label-chip {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 2px 10px;
  background: var(--c-brand, #2563eb);
  color: #fff;
  border-radius: var(--r-pill, 9999px);
  font-size: var(--fs-xs, 0.75rem);
  font-weight: 500;
  text-decoration: none;
  box-shadow: 0 1px 3px rgba(0,0,0,0.12);
  transition: opacity 0.15s, box-shadow 0.15s;
  white-space: nowrap;
  cursor: default;
}
.label-chip:hover {
  opacity: 0.85;
  box-shadow: 0 2px 6px rgba(0,0,0,0.16);
}
/* Aktiver Chipbar-Filter */
.label-chip--active {
  box-shadow: 0 0 0 2px #fff, 0 0 0 4px var(--c-brand, #2563eb);
  font-weight: 600;
}
.label-chip--reset {
  background: var(--c-bg-sunken, #f1f5f9);
  color: var(--c-text-muted, #64748b);
  cursor: pointer;
}
/* Remove-Button innerhalb eines Chips */
.label-chip__remove {
  background: none;
  border: none;
  color: rgba(255,255,255,0.8);
  cursor: pointer;
  font-size: 1em;
  padding: 0;
  line-height: 1;
  display: inline-flex;
  align-items: center;
}
.label-chip__remove:hover {
  color: #fff;
}

/* Chipbar: horizontal scrollende Leiste unter der Filter-Bar */
.label-chipbar {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2, 0.5rem);
  align-items: center;
  padding: var(--sp-2, 0.5rem) var(--sp-3, 0.75rem);
  background: var(--c-bg-card, #fff);
  border: 1px solid var(--c-border, #e2e8f0);
  border-radius: var(--radius-md, 8px);
  box-shadow: 0 1px 4px rgba(0,0,0,0.06);
  margin-bottom: var(--sp-3, 0.75rem);
}
.label-chipbar__hint {
  font-size: var(--fs-xs, 0.75rem);
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-right: var(--sp-1, 0.25rem);
}

/* Label-Abschnitt auf der Card */
.label-card-section {
  margin-top: var(--sp-2, 0.5rem);
  padding-top: var(--sp-2, 0.5rem);
  border-top: 1px solid var(--c-border, #e2e8f0);
}
.label-chips-wrap {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1, 0.25rem);
}
.label-chips {
  display: flex;
  flex-wrap: wrap;
  gap: 4px;
}
/* Eingabe-Form */
.label-input-form {
  display: flex;
  gap: var(--sp-1, 0.25rem);
  align-items: center;
  margin-top: 4px;
}
.label-input {
  flex: 1;
  min-width: 0;
  font-size: var(--fs-xs, 0.75rem);
  padding: 3px 8px;
  border: 1px solid var(--c-border, #e2e8f0);
  border-radius: var(--radius-sm, 4px);
  background: var(--c-bg-sunken, #f8fafc);
  color: var(--c-text-primary, #1e293b);
}
.label-input:focus {
  outline: 2px solid var(--c-brand, #2563eb);
  outline-offset: 1px;
  border-color: var(--c-brand, #2563eb);
}
.label-input__hint {
  font-size: var(--fs-xs, 0.75rem);
  display: block;
  margin-top: 2px;
}

/* ── [/Bundle Y watchlist-user-labels] ──────────────────────────────────────── */

/* ── [IP-1 Block 2: distress-state-ui v0.93.0] ─────────────────────────────── */

.distress-card {
  border-left: 4px solid var(--c-warn-strong, #d97706);
  border-radius: var(--r-sm, 6px);
  background: var(--c-warn-soft, #fef3c7);
  padding: var(--sp-2, 0.5rem) var(--sp-3, 0.75rem);
  margin: var(--sp-2, 0.5rem) 0;
  font-size: var(--fs-sm, 0.875rem);
}
.distress-card--distress {
  border-left-color: var(--c-bear-strong, #b91c1c);
  background: var(--c-bear-soft, #fee2e2);
}
.distress-card--grey {
  border-left-color: var(--c-warn-strong, #d97706);
  background: var(--c-warn-soft, #fef3c7);
}
.distress-card__header {
  display: flex;
  align-items: center;
  gap: var(--sp-2, 0.5rem);
  margin-bottom: var(--sp-1, 0.25rem);
}
.distress-card__label {
  font-weight: 600;
  font-size: var(--fs-sm, 0.875rem);
  color: var(--c-text-primary, #1e293b);
}
.distress-card__pill {
  font-size: var(--fs-xs, 0.75rem);
  font-weight: 700;
  padding: 2px 8px;
  border-radius: 999px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
}
.distress-card__pill--distress {
  background: var(--c-bear-strong, #b91c1c);
  color: #fff;
}
.distress-card__pill--grey {
  background: var(--c-warn-strong, #d97706);
  color: #fff;
}
/* IP-2 Q0 distress-pill-visible (D-4): kompaktes Card-Kopf-Pill
   NICHT .distress-card__pill (grosses Panel-Pill auf Ticker-Detail) — separates Token.
   Re-use Farb-Tokens von .distress-card__pill--* */
.distress-pill {
  display: inline-flex;
  align-items: center;
  font-size: var(--fs-xs, 0.75rem);
  font-weight: 700;
  padding: 1px 6px;
  border-radius: 999px;
  text-transform: uppercase;
  letter-spacing: 0.04em;
  vertical-align: middle;
  margin-left: var(--sp-1, 0.25rem);
}
.distress-pill--distress {
  background: var(--c-bear-strong, #b91c1c);
  color: #fff;
}
.distress-pill--grey {
  background: var(--c-warn-strong, #d97706);
  color: #fff;
}
.distress-card__kpis {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-3, 0.75rem);
  margin-bottom: var(--sp-1, 0.25rem);
}
.distress-card__kpi {
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.distress-card__kpi-label {
  font-size: var(--fs-xs, 0.75rem);
  color: var(--c-text-muted, #64748b);
}
.distress-card__kpi-value {
  font-weight: 600;
  font-size: var(--fs-sm, 0.875rem);
}
.distress-card__kpi-value--distress { color: var(--c-bear-text, #991b1b); }
.distress-card__kpi-value--grey     { color: var(--c-warn-text, #92400e); }
.distress-card__kpi-value--safe     { color: var(--c-bull-text, #15803d); }
.distress-card__kpi-value--weak     { color: var(--c-bear-text, #991b1b); }
.distress-card__kpi-value--mid      { color: var(--c-text-secondary, #475569); }
.distress-card__kpi-value--strong   { color: var(--c-bull-text, #15803d); }
.distress-card__reasons {
  margin: var(--sp-1, 0.25rem) 0 0;
  padding-left: var(--sp-3, 0.75rem);
  font-size: var(--fs-xs, 0.75rem);
  color: var(--c-text-secondary, #475569);
}
.distress-card__reason {
  margin-bottom: 2px;
}

/* ── [/IP-1 Block 2: distress-state-ui] ─────────────────────────────────────── */

/* ── [CC-197 ticker-data-quality-flags, Sprint_2026_31] ──────────────────────
   Data-Quality-Flags-Badges (thin_trading / secondary_listing). Informative
   Warnung (kein Bull/Bear-Missbrauch) -> --c-warn-* Tokens, analog .distress-card.
   Architecture: docs/potentiale/ticker-data-quality-flags/architecture.md §4b */
.dq-flags {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-1);
  margin: var(--sp-2) 0;
}
.dq-flag {
  display: inline-flex;
  align-items: center;
  font-size: var(--fs-meta);
  font-weight: 600;
  padding: var(--sp-1) var(--sp-2);
  border-radius: var(--r-pill);
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
  border: 1px solid var(--c-warn-strong);
  cursor: default;
}
.dq-flag--info {
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
  border-color: var(--c-warn-strong);
}
/* ── [/CC-197 ticker-data-quality-flags] ─────────────────────────────────── */

/* ── [CC-254 upstream-freshness-provenance-badge, Sprint_2026_40] ────────────
   Provenance-/Freshness-Badge zum Gesamt-Composite-Score. Token-only (kein
   raw-Hex/px), Flex-Wrap-Pill-Reihe (Mobile bricht um), A11y via title/⚠.
   Frisch = dezent (muted), stale = Warn-Pill (analog .dq-flag).
   Architecture: docs/potentiale/upstream-freshness-provenance-badge/architecture.md §4b */
.prov-badge {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-1);
  margin: var(--sp-2) 0;
}
.prov-badge__item {
  display: inline-flex;
  align-items: center;
  font-size: var(--fs-meta);
  font-weight: 500;
  padding: var(--sp-1) var(--sp-2);
  border-radius: var(--r-pill);
  cursor: default;
}
.prov-badge__item--fresh {
  background: var(--c-neutral-soft);
  color: var(--c-text-muted);
  border: 1px solid var(--c-neutral-strong);
}
.prov-badge__item--stale {
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
  border: 1px solid var(--c-warn-strong);
  font-weight: 600;
}
/* ── [/CC-254 upstream-freshness-provenance-badge] ───────────────────────── */

/* ── [IP-1 Block 3: signals-screen-rebuild] ─────────────────────────────────── */

/* Base pill (shared by signal cards) */
.pill {
  display: inline-block;
  padding: 0.15rem 0.5rem;
  font-size: 0.72rem;
  border-radius: 3px;
  font-weight: 500;
  border: 1px solid transparent;
  cursor: default;
  white-space: nowrap;
}
.pill--bull    { background: var(--c-bull-soft); color: var(--c-bull-text); border-color: #6ee7b7; /* kein exaktes Token, Hex intentional */ }
.pill--bear    { background: var(--c-bear-soft); color: var(--c-bear-text); border-color: #fca5a5; /* kein exaktes Token, Hex intentional */ }
.pill--neutral { background: var(--c-neutral-soft); color: var(--c-text-secondary); border-color: var(--c-border-strong); }
.pill--active  { outline: 2px solid var(--c-accent, #4f46e5); outline-offset: 1px; }

/* Scope Tabs — design3-signals: Pass A Token-Re-Map */
.signals-tabs {
  display: flex;
  gap: var(--sp-2);
  margin-bottom: var(--sp-3);
  border-bottom: 2px solid var(--c-border-subtle);
  padding-bottom: 0;
}
.signals-tab {
  display: inline-flex;
  align-items: center;
  gap: 0.35rem;
  padding: 0.4rem 0.9rem;
  font-size: var(--fs-sm);
  font-weight: 500;
  color: var(--c-text-secondary);
  text-decoration: none;
  border-radius: 4px 4px 0 0;
  border: 1px solid transparent;
  border-bottom: none;
  transition: background var(--motion-fast);
}
.signals-tab:hover {
  background: var(--c-bg-sunken);
  color: var(--c-text-primary);
}
.signals-tab--active {
  background: var(--c-bg-card);
  color: var(--c-accent);
  border-color: var(--c-border-subtle);
  border-bottom-color: var(--c-bg-card);
}
.signals-tab__badge {
  display: inline-block;
  background: var(--c-bg-sunken);
  color: var(--c-text-secondary);
  font-size: 0.68rem;
  font-weight: 600;
  padding: 0.05rem 0.35rem;
  border-radius: 99px;
  min-width: 1.5rem;
  text-align: center;
}

/* Type Pills Filter Bar */
.signals-type-pills {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin-bottom: var(--sp-3);
}
.signals-type-pills a {
  text-decoration: none;
}

/* Filter form */
.signals-filter-form {
  margin-bottom: var(--sp-3);
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  flex-wrap: wrap;
}

/* Signal Card Grid — IST-Grid behalten (design3 §3.5: kein Layout-Re-Build) */
.signals-cards {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
  gap: var(--sp-3);
  margin-bottom: var(--sp-4);
}

/* Signal Card — Pass B: Radius 16px + Foundation-Shadow */
.signal-card {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);              /* 16px via Foundation-Token */
  box-shadow: var(--shadow-card);            /* raw rgba -> Token */
  padding: var(--sp-4);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  transition: box-shadow var(--motion-base);
}
.signal-card:hover {
  box-shadow: var(--shadow-card-hover);
}

/* Severity border-left accent — Pass A: Fallback-Hex entfernt */
.signal-card--strong { border-left: 4px solid var(--c-accent); }
.signal-card--medium { border-left: 4px solid var(--c-warn-text); }
.signal-card--weak   { border-left: 4px solid var(--c-border-subtle); }

/* Bestand highlight — Pass C: Hex -> bull-Token */
.signal-card--bestand {
  background: var(--c-bull-soft);
  border-color: var(--c-bull-strong);
}

/* Card Header */
.signal-card__header {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  flex-wrap: wrap;
}
.signal-card__ticker {
  font-size: var(--fs-body);
  font-weight: 700;
  color: var(--c-accent);
  text-decoration: none;
}
.signal-card__ticker:hover { text-decoration: underline; }
.signal-card__bestand-badge {
  display: inline-block;
  font-size: 0.65rem;
  font-weight: 600;
  padding: 0.05rem 0.35rem;
  border-radius: 3px;
  background: var(--c-bull-soft);
  color: var(--c-bull-text);
  border: 1px solid var(--c-bull-strong);
  text-transform: uppercase;
  letter-spacing: 0.05em;
}

/* Type-Pill auf Signal-Card-Header — NEU (design3 §3.4, Template Z.86 nutzt sie) */
.signal-card__type-pill {
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-weight: var(--fw-semibold);
}

/* Card Body */
.signal-card__body {
  display: flex;
  flex-direction: column;
  gap: var(--sp-1);
}
.signal-card__meta {
  display: flex;
  align-items: center;
  gap: var(--sp-2);
  flex-wrap: wrap;
  font-size: var(--fs-sm);
}
.signal-card__score--pos { color: var(--c-bull-text); font-weight: 600; }
.signal-card__score--neg { color: var(--c-bear-text); font-weight: 600; }
.signal-card__severity {
  font-size: 0.68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.06em;
  padding: 0.05rem 0.3rem;
  border-radius: 3px;
}
/* Pass C: Severity-Badges Hex -> Token (Entscheid B: strong = accent, medium = warn, weak = neutral) */
.signal-card__severity--strong { background: var(--c-accent-soft); color: var(--c-accent); }
.signal-card__severity--medium { background: var(--c-warn-soft); color: var(--c-warn-text); }
.signal-card__severity--weak   { background: var(--c-neutral-soft); color: var(--c-text-muted); }
.signal-card__source { color: var(--c-text-muted); font-size: var(--fs-meta); }
.signal-card__time   { color: var(--c-text-muted); font-size: var(--fs-meta); }

/* Evidence / Link */
.signal-card__evidence {
  font-size: var(--fs-meta);
  color: var(--c-text-secondary);
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.signal-card__link { color: var(--c-accent); text-decoration: none; }
.signal-card__link:hover { text-decoration: underline; }

/* IP-2 Q5a Slug 2 (signals-read-state): Dimming + Read-Toggle-Button — Q5 NON-REGRESSION */
.signal-card--read {
  opacity: 0.55;                             /* Q5-KERN: Wert erhalten */
  transition: opacity 0.15s ease;
}
.signal-card--read:hover {
  opacity: 0.85;
}
.signal-card__actions {
  display: flex;
  gap: var(--sp-2);
  align-items: center;
  padding: var(--sp-2) 0 0;
  border-top: 1px solid var(--c-border-subtle);
  margin-top: var(--sp-2);
}
.signal-card__read-toggle {
  font-size: var(--fs-meta);
  padding: 0.2rem 0.6rem;
  border-radius: var(--r-xs);
  border: 1px solid var(--c-border-subtle);
  background: var(--c-bg-card);
  color: var(--c-text-secondary);
  cursor: pointer;
  white-space: nowrap;
}
.signal-card__read-toggle:hover {
  background: var(--c-bg-sunken);
  border-color: var(--c-accent);
  color: var(--c-accent);
}

/* IP-2 Q5a Slug 3 (signals-hard-optik-actions): Hard-Signal-Optik — Q5 NON-REGRESSION */
/* Pass C Entscheid C: #dc2626 -> var(--c-bear-strong) fuer border/flag/pill */
.signal-card--hard {
  border-left: 4px solid var(--c-bear-strong) !important;  /* !important Q5-Pflicht erhalten */
}
.signal-card__hard-flag {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  font-size: var(--fs-meta);
  font-weight: 700;
  color: var(--c-bear-strong);
  background: var(--c-bear-soft);
  border: 1px solid #fecaca; /* raw: kein exaktes Border-Token fuer diesen Roston */
  border-radius: var(--r-xs);
  padding: 0.1rem 0.4rem;
}
.pill--solid-red {
  background: var(--c-bear-strong) !important;  /* !important Q5-Pflicht erhalten */
  color: var(--c-text-inverse) !important;       /* !important Q5-Pflicht erhalten */
}
.signal-card__score--lg {
  font-size: 1.1rem;
  font-weight: 700;
}
/* P&L / Position-Badge (IP-2 Q5a Slug 3) */
.signal-card__pos-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  font-size: var(--fs-meta);
  color: var(--c-text-secondary);
  background: var(--c-bg-sunken);
  border-radius: var(--r-xs);
  padding: 0.1rem 0.5rem;
}
.signal-card__pnl--pos { color: var(--c-bull-text); font-weight: 600; }
.signal-card__pnl--neg { color: var(--c-bear-text); font-weight: 600; }

/* Hard-Signal-Pulse (reduced-motion-respektierend) — Q5 NON-REGRESSION: beibehalten */
@media (prefers-reduced-motion: no-preference) {
  .signal-card--hard {
    animation: signal-hard-pulse 2.5s ease-in-out infinite;
  }
  @keyframes signal-hard-pulse {
    0%, 100% { box-shadow: 0 0 0 0 rgba(220, 38, 38, 0); }   /* raw rgba: Pulse-Glow, kein Channel-Token vorhanden */
    50%       { box-shadow: 0 0 0 3px rgba(220, 38, 38, 0.15); } /* raw rgba: Pulse-Glow, kein Channel-Token vorhanden */
  }
}

/* Empty state */
.signals-empty-state {
  padding: var(--sp-4);
  text-align: center;
  color: var(--c-text-muted);
}

/* Admin Collapsible */
.signals-admin-collapsible {
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-3);
  background: var(--c-bg-sunken);
}
.signals-admin-collapsible__summary {
  cursor: pointer;
  font-weight: 600;
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
  user-select: none;
}
.signals-admin-collapsible__summary:hover { color: var(--c-text-primary); }

/* Page-Head-Badge (Q5-LEAD Unread-Indikator) — NEU (design3 §3.4, Template Z.21 nutzt sie) */
.page-head__badge {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  font-size: var(--fs-sm);
  background: var(--c-bear-strong);
  color: var(--c-text-inverse);
  padding: 2px 10px;
  border-radius: var(--r-pill);
  font-weight: var(--fw-semibold);
  margin-left: var(--sp-2);
  vertical-align: middle;
}

/* Responsive */
@media (max-width: 600px) {
  .signals-cards {
    grid-template-columns: 1fr;
  }
  .signals-tabs {
    flex-wrap: wrap;
  }
}

/* ── [/IP-1 Block 3: signals-screen-rebuild] ─────────────────────────────────── */

/* ── [IP-1 Block 5: card-action-rows] ───────────────────────────────────────── */

/* News-Card-Action-Row */
.news-card__actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  padding: 0.4rem 0.75rem 0.5rem;
  border-top: 1px solid var(--c-border-subtle);
  background: var(--c-bg-sunken);
  border-radius: 0 0 var(--r-card) var(--r-card);
  align-items: center;
}

/* Report-Action-Footer */
.report-action-footer {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: center;
  padding: var(--sp-4, 1rem) var(--sp-3, 0.75rem);
  margin-top: var(--sp-4, 1rem);
  border-top: 2px solid var(--c-border-subtle, #e2e8f0);
  border-radius: var(--r-card, 8px);
  background: var(--c-bg-card, #ffffff);
  box-shadow: 0 2px 8px rgba(0,0,0,0.06);
}

/* ── [/IP-1 Block 5: card-action-rows] ──────────────────────────────────────── */

/* ── [IP-1 Block 5: pos-detail-full-panel] ────────────────────────────────── */

.pos-detail__action-grid {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin-top: var(--sp-3, 0.75rem);
  padding-top: var(--sp-3, 0.75rem);
  border-top: 1px solid var(--c-border-subtle, #e2e8f0);
}

.pos-detail__note-block {
  margin-top: var(--sp-3, 0.75rem);
}

.pos-detail__note {
  background: var(--c-bg-sunken, #f8fafc);
  border-left: 3px solid var(--c-accent, #3b82f6);
  padding: var(--sp-2, 0.5rem) var(--sp-3, 0.75rem);
  border-radius: 0 var(--r-sm, 4px) var(--r-sm, 4px) 0;
  font-size: var(--fs-sm, 0.875rem);
  color: var(--c-text-secondary, #475569);
  margin-bottom: var(--sp-2, 0.5rem);
}

.pos-detail__note-form {
  display: flex;
  flex-direction: column;
  gap: 0.35rem;
}

.pos-detail__note-input {
  width: 100%;
  min-height: 3.5rem;
  padding: var(--sp-2, 0.5rem);
  border: 1px solid var(--c-border, #cbd5e1);
  border-radius: var(--r-sm, 4px);
  font-size: var(--fs-sm, 0.875rem);
  resize: vertical;
  background: var(--c-bg-card, #fff);
  color: var(--c-text, #1e293b);
}

/* ── avg-kauf-pnl-bestand (CC-240): Edit-/Sell-/Buy-Dialoge stylen ─────────── */
/* Behebt zugleich den pre-existing unstyled-Gap der Q2b-Dialoge (§4b DEV-NOTE). */
.pos-detail__edit-dialog,
.pos-detail__sell-dialog,
.pos-detail__buy-dialog {
  margin-top: var(--sp-3, 0.75rem);
  padding: var(--sp-3, 0.75rem);
  background: var(--c-bg-sunken, #f8fafc);
  border: 1px solid var(--c-border-subtle, #e2e8f0);
  border-radius: var(--r-md, 8px);
}

.pos-detail__edit-form,
.pos-detail__sell-form,
.pos-detail__buy-form {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2, 0.5rem);
}

.pos-detail__edit-label {
  display: flex;
  flex-direction: column;
  gap: 0.25rem;
  font-size: var(--fs-sm, 0.875rem);
  color: var(--c-text-secondary, #475569);
}

.pos-detail__edit-input {
  width: 100%;
  min-height: 2.75rem; /* >=44px Touch-Target (A11y §4b) */
  padding: var(--sp-2, 0.5rem);
  border: 1px solid var(--c-border, #cbd5e1);
  border-radius: var(--r-sm, 4px);
  font-size: var(--fs-sm, 0.875rem);
  background: var(--c-bg-card, #fff);
  color: var(--c-text, #1e293b);
}

.pos-detail__edit-input[disabled] {
  background: var(--c-bg-sunken, #f1f5f9);
  color: var(--c-text-secondary, #64748b);
  cursor: not-allowed;
}

.pos-detail__edit-hint {
  margin: 0.15rem 0 0 0;
  font-size: var(--fs-xs, 0.75rem);
  color: var(--c-text-secondary, #64748b);
}

.pos-detail__edit-actions {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin-top: var(--sp-1, 0.25rem);
}

/* ── [/IP-1 Block 5: pos-detail-full-panel] ───────────────────────────────── */

/* ── [IP-1 Block 5: ticker-hero-card-completion] ─────────────────────────── */

.hero-card-osur__horizons {
  display: flex;
  flex-wrap: wrap;
  gap: 0.35rem;
  margin: var(--sp-2, 0.5rem) 0;
  align-items: center;
}

.hero-card-osur__footer {
  display: flex;
  flex-wrap: wrap;
  gap: 0.4rem;
  margin-top: var(--sp-3, 0.75rem);
  padding-top: var(--sp-3, 0.75rem);
  border-top: 1px solid var(--c-border-subtle, #e2e8f0);
  align-items: center;
}

/* ── [/IP-1 Block 5: ticker-hero-card-completion] ────────────────────────── */

/* ── IP-2 Q4 (reports-cardfeed-rebuild v0.99.0) ─────────────────────────── */

/* Report-Card: Card-Box (DRY: nutzt bestehende news-section, stats-bar, pagination) */
/* DESIGN-4 (design4-reports): tote Fallback-Tokens → echte Foundation-Tokens; --r-card + --shadow-card */
.report-card {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-3) var(--sp-4);
  box-shadow: var(--shadow-card);
  transition: box-shadow var(--motion-fast);
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
}

.report-card:hover {
  box-shadow: var(--shadow-card-hover);
}

.report-card--read {
  opacity: 0.6;
}

/* Header: Datum / Quelle / Ticker nebeneinander */
.report-card__header {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  align-items: center;
  font-size: var(--fs-meta);
}

.report-card__ticker {
  font-weight: 600;
  color: var(--c-accent);
  text-decoration: none;
  margin-left: auto;
}

.report-card__ticker:hover {
  text-decoration: underline;
}

/* Headline */
.report-card__headline {
  font-size: var(--fs-sm);
  font-weight: 500;
  line-height: 1.4;
}

.report-card__headline-link {
  color: var(--c-text-primary);
  text-decoration: none;
}

.report-card__headline-link:hover {
  color: var(--c-accent);
  text-decoration: underline;
}

/* Metadaten-Zeile */
.report-card__meta {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  align-items: center;
  font-size: var(--fs-meta);
}

.report-card__conviction,
.report-card__crv {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
}

/* CC-198 catalyst-next-event-anchor (Sprint_2026_31): Next-Event-Pill.
   Wiederverwendung des Muted-Pill-Musters (analog .report-card__conviction/
   .report-card__crv). Neutrale Semantik -- kein Bull/Bear-Farbcode, da ein
   Event-Datum weder gut noch schlecht ist. */
.next-event-anchor {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-1);
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
}

.next-event-anchor--empty {
  color: var(--c-text-muted);
  font-style: italic;
}

/* Prob-Bar */
.report-card__prob {
  margin-top: var(--sp-1);
}

/* Footer: Watchlists + Themen + Read-Toggle */
.report-card__footer {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-2);
  align-items: center;
  margin-top: auto;
  padding-top: var(--sp-2);
  border-top: 1px solid var(--c-border-subtle);
}

.report-card__wls,
.report-card__themes {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
}

.report-card__actions {
  margin-left: auto;
}

/* Report-Card-List (ul ohne Marker) */
.report-card-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: var(--sp-3, 0.75rem);
}

/* DESIGN-4 (design4-reports): .theme-badge reports-scoped neutral-grau (F-1: gelb behalten auf
   report.html / reports_index_legacy.html; nur auf /reports-Card-Liste neutral angleichen) */
.report-card-list .theme-badge {
  background: var(--c-neutral-soft);
  border: 1px solid var(--c-border-strong);
  color: var(--c-neutral-text);
}

/* ── DESIGN-4 Reports-Typ-Filter-Pills ─────────────────────────────────────── */
/* Neue Pill-Stile fuer .news-sentiment-toggle__btn auf /reports
   (analog Preview .filter-bar__pill; §3.4 architecture.md) */
.news-sentiment-toggle__btn {
  display: inline-flex;
  align-items: center;
  gap: 4px;
  padding: 4px 12px;
  border-radius: var(--r-pill);
  font-size: var(--fs-meta);
  font-weight: var(--fw-medium);
  color: var(--c-text-secondary);
  text-decoration: none;
  background: var(--c-bg-sunken);
  border: 1px solid transparent;
  transition: background var(--motion-fast), border-color var(--motion-fast);
}
.news-sentiment-toggle__btn:hover {
  background: var(--c-neutral-soft);
}
.news-sentiment-toggle__btn--active {
  background: var(--c-bg-card);
  color: var(--c-text-primary);
  border-color: var(--c-border-strong);
  box-shadow: var(--shadow-soft);
}

/* /reports-Wrapper: Pill-Gruppe als Reihe (override column-default fuer /news) */
.reports-toolbar ~ .news-sentiment-toggle,
nav.news-sentiment-toggle[aria-label="Typ-Filter"] {
  flex-direction: row;
  flex-wrap: wrap;
  gap: var(--sp-2);
  margin-bottom: var(--sp-4);
}

/* news-source-count (Zahl in Pill) */
.news-source-count {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
  margin-left: 2px;
}

/* ── [/IP-2 Q4: reports-cardfeed-rebuild] ────────────────────────────────── */

/* ── [IP-2 Q4: report-detail-completion] ────────────────────────────────── */

/* Collapsible report-section via native <details>/<summary> */
.report-section--collapsible {
  margin: 1.4rem 0;
  padding: 0;
}
.report-section--collapsible > summary {
  cursor: pointer;
  list-style: none;
  display: flex;
  align-items: center;
  gap: 0.4rem;
  padding-bottom: 0.3rem;
  border-bottom: 1px solid var(--c-border-subtle, #e2e8f0);
  user-select: none;
}
.report-section--collapsible > summary::-webkit-details-marker {
  display: none;
}
.report-section--collapsible > summary::before {
  content: "▶";
  font-size: 0.65em;
  color: var(--c-text-muted, #9ca3af);
  flex-shrink: 0;
  transition: transform 0.15s;
}
.report-section--collapsible[open] > summary::before {
  transform: rotate(90deg);
}
.report-section--collapsible > summary h2 {
  margin: 0;
  padding: 0;
  border: none;
  font-size: 1.15em;
}

/* Bull/Bear-Grid (Pro & Contra) */
.bull-bear-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
  margin-top: 0.6rem;
}
@media (max-width: 640px) {
  .bull-bear-grid { grid-template-columns: 1fr; }
}
.bull-list h3,
.bear-list h3 {
  font-size: 0.97em;
  margin: 0 0 0.4rem;
  padding-bottom: 0.2rem;
  border-bottom: 1px solid var(--c-border-subtle, #e2e8f0);
}
.bull-list h3 { color: var(--c-bull, #166534); }
.bear-list h3 { color: var(--c-bear, #991b1b); }
.bull-list ul,
.bear-list ul {
  margin: 0;
  padding-left: 1.2rem;
  font-size: 0.93em;
  line-height: 1.55;
}
.bull-list li,
.bear-list li {
  margin-bottom: 0.3rem;
}

/* User-Notiz + Wiedervorlage */
.report-user-note {
  background: var(--c-bg-subtle, #f8fafc);
  border: 1px solid var(--c-border-subtle, #e2e8f0);
  border-radius: var(--r-card, 8px);
  padding: var(--sp-3, 0.75rem) var(--sp-4, 1rem);
}
.report-user-note h2 {
  border: none;
  margin-bottom: 0.6rem;
}
.badge--private {
  font-size: 0.72em;
  font-weight: 500;
  padding: 0.1em 0.5em;
  border-radius: 3px;
  background: var(--c-bg-card, #ffffff);
  border: 1px solid var(--c-border-subtle, #e2e8f0);
  color: var(--c-text-muted, #9ca3af);
  vertical-align: middle;
  margin-left: 0.4em;
}
.report-user-note__fields {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
}
.report-user-note__textarea {
  width: 100%;
  box-sizing: border-box;
  border: 1px solid var(--c-border-subtle, #e2e8f0);
  border-radius: 4px;
  padding: 0.4rem 0.6rem;
  font-size: 0.92em;
  font-family: inherit;
  resize: vertical;
  background: var(--c-bg-card, #ffffff);
  color: inherit;
}
.report-user-note__date-label {
  font-size: 0.9em;
  display: flex;
  align-items: center;
  gap: 0.5rem;
}
.report-user-note__date {
  border: 1px solid var(--c-border-subtle, #e2e8f0);
  border-radius: 4px;
  padding: 0.25rem 0.4rem;
  font-size: 0.9em;
}
.report-user-note__actions {
  display: flex;
  align-items: center;
  gap: 0.6rem;
  margin-top: 0.5rem;
  flex-wrap: wrap;
}
.followup-pill {
  font-size: 0.82em;
  padding: 0.15em 0.5em;
  border-radius: 3px;
  background: var(--c-warning-bg, #fef3c7);
  color: var(--c-warning-text, #92400e);
  border: 1px solid var(--c-warning-border, #fcd34d);
}

/* ── [/IP-2 Q4: report-detail-completion] ───────────────────────────────── */

/* ── R12: earnings-forecast-probabilities (v0.110.0) ───────────────────── */
.forecast-card {
  background: var(--c-card-bg, #ffffff);
  border: 1px solid var(--c-border, #e2e8f0);
  border-radius: 8px;
  padding: 1rem 1.25rem;
  margin-bottom: 1rem;
  box-shadow: 0 1px 4px rgba(0,0,0,0.07);
}
.forecast-card--llm-only {
  border-left: 4px solid var(--c-warning-border, #fcd34d);
  background: var(--c-warning-bg-subtle, #fffdf0);
}
.forecast-card--full {
  border-left: 4px solid var(--c-success, #22c55e);
}
.forecast-card--iv-only {
  border-left: 4px solid var(--c-primary, #3b82f6);
}
.forecast-card--error {
  border-left: 4px solid var(--c-danger, #ef4444);
  background: var(--c-danger-bg-subtle, #fff5f5);
  padding: 0.75rem 1rem;
  color: var(--c-danger, #ef4444);
}
.forecast-card__header {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  margin-bottom: 0.75rem;
  flex-wrap: wrap;
}
.forecast-card__title {
  font-weight: 600;
  font-size: 1rem;
}
.forecast-card__date {
  color: var(--c-text-muted, #6b7280);
  font-size: 0.9em;
}
.forecast-badge {
  font-size: 0.75em;
  padding: 0.2em 0.55em;
  border-radius: 4px;
  font-weight: 600;
  text-transform: uppercase;
  letter-spacing: 0.03em;
}
.forecast-badge--full {
  background: #dcfce7;
  color: #166534;
  border: 1px solid #86efac;
}
.forecast-badge--iv {
  background: #dbeafe;
  color: #1e40af;
  border: 1px solid #93c5fd;
}
.forecast-badge--low {
  background: var(--c-warning-bg, #fef3c7);
  color: var(--c-warning-text, #92400e);
  border: 1px solid var(--c-warning-border, #fcd34d);
}
/* Wahrscheinlichkeits-Balken */
.forecast-probs {
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
  margin-bottom: 0.75rem;
}
.forecast-prob-row {
  display: flex;
  align-items: center;
  gap: 0.6rem;
}
.forecast-prob-label {
  width: 3.5rem;
  font-size: 0.85em;
  font-weight: 500;
  color: var(--c-text-muted, #6b7280);
  text-align: right;
}
.forecast-prob-bar-outer {
  flex: 1;
  background: var(--c-border-subtle, #f1f5f9);
  border-radius: 4px;
  height: 1rem;
  overflow: hidden;
}
.forecast-prob-bar {
  height: 100%;
  border-radius: 4px;
  transition: width 0.3s ease;
}
.forecast-prob-bar--bull { background: #22c55e; }
.forecast-prob-bar--range { background: #94a3b8; }
.forecast-prob-bar--bear { background: #ef4444; }
.forecast-prob-value {
  width: 3.2rem;
  font-size: 0.85em;
  font-weight: 600;
  text-align: right;
}
/* Expected Move */
.forecast-em {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.88em;
  margin-bottom: 0.5rem;
  flex-wrap: wrap;
}
.forecast-em__label {
  color: var(--c-text-muted, #6b7280);
  font-weight: 500;
}
.forecast-em__value {
  font-weight: 600;
}
.forecast-em__method {
  font-size: 0.85em;
}
/* LLM-Begruendung */
.forecast-rationale {
  margin-bottom: 0.5rem;
  font-size: 0.88em;
}
.forecast-rationale__label {
  display: block;
  color: var(--c-text-muted, #6b7280);
  font-weight: 500;
  margin-bottom: 0.2rem;
}
.forecast-rationale__text {
  margin: 0;
  line-height: 1.5;
  color: var(--c-text, #1e293b);
}
/* Disclaimer (llm_only) */
.forecast-disclaimer {
  display: flex;
  align-items: flex-start;
  gap: 0.4rem;
  background: var(--c-warning-bg, #fef3c7);
  border: 1px solid var(--c-warning-border, #fcd34d);
  border-radius: 4px;
  padding: 0.5rem 0.75rem;
  font-size: 0.82em;
  color: var(--c-warning-text, #92400e);
  margin-bottom: 0.5rem;
}
.forecast-disclaimer__icon {
  flex-shrink: 0;
  font-size: 0.9em;
}
/* Meta */
.forecast-meta {
  font-size: 0.78em;
  color: var(--c-text-muted, #6b7280);
  margin-top: 0.25rem;
}
.forecast-error-msg {
  font-size: 0.9em;
}
/* ── [/R12: earnings-forecast-probabilities] ───────────────────────────── */

/* ── R6: broker-integration (v0.111.0) ─────────────────────────────────── */

/* Broker-Forward-Button (in pos-detail Action-Grid) */
.broker-forward-btn {
  background: var(--c-primary, #2563eb);
  color: #fff;
  border: none;
  border-radius: 6px;
  padding: 0.3rem 0.7rem;
  font-size: 0.82em;
  font-weight: 600;
  cursor: pointer;
  transition: background 0.15s;
}
.broker-forward-btn:hover {
  background: var(--c-primary-dark, #1d4ed8);
}

/* Broker-Confirmation-Modal */
.broker-modal {
  position: fixed;
  inset: 0;
  background: rgba(0,0,0,0.55);
  display: flex;
  align-items: center;
  justify-content: center;
  z-index: 1000;
}
.broker-modal[hidden] {
  display: none;
}
.broker-modal__inner {
  background: var(--c-surface, #fff);
  border-radius: 12px;
  box-shadow: 0 8px 32px rgba(0,0,0,0.18);
  padding: 1.5rem 2rem;
  max-width: 420px;
  width: 90%;
}
.broker-modal__disclaimer {
  font-size: 0.9em;
  color: var(--c-text-muted, #6b7280);
  margin-bottom: 0.75rem;
  line-height: 1.5;
}
.broker-modal__target {
  font-size: 0.95em;
  margin-bottom: 1rem;
}
.broker-modal__label {
  color: var(--c-primary, #2563eb);
}
.broker-modal__actions {
  display: flex;
  gap: 0.75rem;
  justify-content: flex-end;
}

/* Profil-Broker-Seite */
.profil-broker-page {
  max-width: 600px;
  margin: 2rem auto;
  padding: 0 1rem;
}
.profil-broker-page__title {
  font-size: 1.4em;
  font-weight: 700;
  margin-bottom: 0.5rem;
}
.profil-broker-page__hint {
  color: var(--c-text-muted, #6b7280);
  margin-bottom: 1.5rem;
  font-size: 0.9em;
}
.profil-broker-page__disclaimer {
  font-size: 0.8em;
  color: var(--c-text-muted, #6b7280);
  margin-top: 1.5rem;
}

/* Broker-Select-Formular */
.broker-select-form__list {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  margin-bottom: 1.5rem;
}
.broker-select-form__item {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 0.75rem 1rem;
  border-radius: 8px;
  border: 1px solid var(--c-border, #e2e8f0);
  background: var(--c-surface, #fff);
  cursor: pointer;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.broker-select-form__item:hover,
.broker-select-form__item--active {
  border-color: var(--c-primary, #2563eb);
  box-shadow: 0 0 0 2px rgba(37,99,235,0.12);
}
.broker-select-form__radio {
  accent-color: var(--c-primary, #2563eb);
}
.broker-select-form__code {
  font-weight: 700;
  font-size: 0.9em;
  color: var(--c-primary, #2563eb);
  min-width: 40px;
}
.broker-select-form__label {
  flex: 1;
  font-size: 0.95em;
}
.broker-select-form__badge {
  font-size: 0.75em;
  padding: 0.1rem 0.5rem;
  border-radius: 4px;
  font-weight: 600;
  white-space: nowrap;
}
.broker-select-form__badge--deeplink {
  background: #dcfce7;
  color: #166534;
}
.broker-select-form__badge--login {
  background: #f1f5f9;
  color: #64748b;
}
.broker-select-form__actions {
  display: flex;
  gap: 0.75rem;
}

/* ── [/R6: broker-integration] ─────────────────────────────────────────── */

/* ═══════════════════════════════════════════════════════════════════════════
   CC-11: push-optin-banner-prefs (v0.112.3)
   Namespace: push-optin__* / notif-pref-page__*
   Alle Farben via var(--...) – KEIN raw-Hex, kein :root-Touch.
   Mobile-Breakpoints: 768px / 390px / 360px (additiv)
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Seiten-Layout ──────────────────────────────────────────────────────── */
.notif-pref-page {
  max-width: 640px;
  padding: var(--sp-4) var(--sp-4) var(--sp-8);
}
.notif-pref-page__title {
  font-size: 1.4rem;
  font-weight: 700;
  margin-bottom: var(--sp-4);
  color: var(--c-text);
}

/* ── Karten ─────────────────────────────────────────────────────────────── */
.notif-pref-page__card {
  background: var(--c-surface);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-5);
  margin-bottom: var(--sp-4);
  box-shadow: 0 1px 4px rgba(0,0,0,0.06);
}
.notif-pref-page__card--types {
  /* Same style, typ-spezifische Trennung optional */
}
.notif-pref-page__card-header {
  margin-bottom: var(--sp-4);
}
.notif-pref-page__card-title {
  font-size: 1rem;
  font-weight: 600;
  color: var(--c-text);
  margin-bottom: var(--sp-1);
}
.notif-pref-page__card-hint {
  font-size: 0.875rem;
  color: var(--c-text-muted);
  margin: 0;
}

/* ── Master-Toggle Zeile ─────────────────────────────────────────────────── */
.notif-pref-page__master-row {
  display: flex;
  align-items: center;
  min-height: var(--touch-target);
}

/* ── Push-Optin Toggle-Button (CSS-Toggle-Switch) ────────────────────────── */
.push-optin__toggle-label {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sp-3);
  width: 100%;
  cursor: pointer;
  user-select: none;
}
.push-optin__toggle-text {
  font-size: 0.95rem;
  font-weight: 500;
  color: var(--c-text);
}
.push-optin__toggle-btn {
  position: relative;
  display: inline-flex;
  align-items: center;
  width: 48px;
  height: var(--touch-target);   /* >= 44px Touch-Target */
  padding: 0;
  background: transparent;
  border: none;
  cursor: pointer;
  flex-shrink: 0;
}
.push-optin__toggle-btn:focus-visible {
  outline: 2px solid var(--c-border-focus);
  outline-offset: 2px;
  border-radius: var(--r-pill);
}
.push-optin__toggle-btn__track {
  position: absolute;
  top: 50%;
  left: 0;
  transform: translateY(-50%);
  width: 48px;
  height: 26px;
  background: var(--c-border-strong);
  border-radius: var(--r-pill);
  transition: background var(--motion-fast);
}
.push-optin__toggle-btn--on .push-optin__toggle-btn__track {
  background: var(--c-accent);
}
.push-optin__toggle-btn__thumb {
  position: absolute;
  top: 50%;
  left: 3px;
  transform: translateY(-50%);
  width: 20px;
  height: 20px;
  background: var(--c-surface);
  border-radius: 50%;
  box-shadow: 0 1px 3px rgba(0,0,0,0.22);
  transition: left var(--motion-fast);
}
.push-optin__toggle-btn--on .push-optin__toggle-btn__thumb {
  left: 25px;
}

/* ── Feedback-Slot ───────────────────────────────────────────────────────── */
/* Danger-Token lokal definiert (kein :root-Touch): kompatibel mit bestehenden Fallback-Values */
.push-optin__feedback--error,
.push-optin__feedback--error * {
  --_push-err-bg: var(--c-danger-bg-subtle, hsl(0 100% 97%));  /* neutral warm-rose tint */
  --_push-err-fg: var(--c-danger-text, hsl(0 72% 40%));        /* accessible dark rose */
  --_push-err-border: var(--c-danger-strong, hsl(0 72% 51%));  /* border only */
}
.push-optin__feedback {
  margin-top: var(--sp-3);
  padding: var(--sp-2) var(--sp-3);
  border-radius: var(--r-card);
  font-size: 0.875rem;
}
.push-optin__feedback--success {
  background: var(--c-accent-soft);
  color: var(--c-accent);
  border-left: 3px solid var(--c-accent);
}
.push-optin__feedback--error {
  background: var(--_push-err-bg);
  color: var(--_push-err-fg);
  border-left: 3px solid var(--_push-err-border);
}
.push-optin__feedback--warn {
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
  border-left: 3px solid var(--c-warn-strong);
}
.push-optin__feedback--info {
  background: var(--c-info-soft);
  color: var(--c-info-strong);
  border-left: 3px solid var(--c-info-strong);
}

/* ── iOS A2HS-Banner ─────────────────────────────────────────────────────── */
.push-optin__a2hs-banner {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-3);
  background: var(--c-info-soft);
  border: 1px solid var(--c-info-strong);
  border-radius: var(--r-card);
  padding: var(--sp-3) var(--sp-4);
  margin-bottom: var(--sp-4);
  font-size: 0.875rem;
  color: var(--c-text);
}
.push-optin__a2hs-banner__icon {
  font-size: 1.4rem;
  flex-shrink: 0;
  line-height: 1;
}
.push-optin__a2hs-banner__text {
  flex: 1;
  line-height: 1.5;
}
.push-optin__a2hs-banner__dismiss {
  flex-shrink: 0;
  min-width: var(--touch-target);
  min-height: var(--touch-target);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 1rem;
  color: var(--c-text-muted);
}

/* ── Denied-Hinweis ──────────────────────────────────────────────────────── */
.push-optin__denied-hint {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-3);
  background: var(--c-warn-soft);
  border: 1px solid var(--c-warn-strong);
  border-radius: var(--r-card);
  padding: var(--sp-3) var(--sp-4);
  margin-bottom: var(--sp-4);
  font-size: 0.875rem;
}
.push-optin__denied-hint__icon {
  font-size: 1.4rem;
  flex-shrink: 0;
  line-height: 1;
}
.push-optin__denied-hint__body {
  flex: 1;
  line-height: 1.5;
}
.push-optin__denied-hint__body strong {
  display: block;
  margin-bottom: var(--sp-1);
  color: var(--c-warn-text);
}
.push-optin__denied-hint__body p {
  color: var(--c-text);
  margin: 0;
}

/* ── Unsupported-Hinweis ─────────────────────────────────────────────────── */
.push-optin__unsupported-hint {
  background: var(--c-bg-subtle, var(--c-surface));
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  padding: var(--sp-3) var(--sp-4);
  margin-bottom: var(--sp-4);
  font-size: 0.875rem;
  color: var(--c-text-muted);
  display: flex;
  align-items: center;
  gap: var(--sp-2);
}

/* ── Per-Typ Pref-Liste ──────────────────────────────────────────────────── */
.notif-pref-page__pref-list {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  margin-bottom: var(--sp-4);
}
.notif-pref-page__pref-item {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-3);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  cursor: pointer;
  min-height: var(--touch-target);
  background: var(--c-surface);
  transition: border-color var(--motion-fast);
}
.notif-pref-page__pref-item:hover {
  border-color: var(--c-border-strong);
}
.notif-pref-page__pref-item--disabled {
  opacity: 0.7;
}
.notif-pref-page__pref-checkbox {
  width: 18px;
  height: 18px;
  min-width: 18px;
  accent-color: var(--c-accent);
  cursor: pointer;
}
.notif-pref-page__pref-name {
  flex: 1;
  font-size: 0.9rem;
  font-weight: 500;
  color: var(--c-text);
}
.notif-pref-page__pref-badge {
  font-size: 0.75rem;
  padding: 0.1rem 0.5rem;
  border-radius: var(--r-pill);
  font-weight: 600;
  white-space: nowrap;
}
.notif-pref-page__pref-badge--off {
  background: var(--c-border-strong);
  color: var(--c-text-muted);
}
.notif-pref-page__pref-empty {
  text-align: center;
  padding: var(--sp-4);
  color: var(--c-text-muted);
}

/* ── Form-Actions ────────────────────────────────────────────────────────── */
.notif-pref-page__pref-actions {
  display: flex;
  gap: var(--sp-3);
  flex-wrap: wrap;
}

/* ── Empty-State ─────────────────────────────────────────────────────────── */
.push-optin__empty-state {
  text-align: center;
  padding: var(--sp-4);
  background: var(--c-surface);
  border: 1px dashed var(--c-border-subtle);
  border-radius: var(--r-card);
  margin-bottom: var(--sp-4);
}

/* ── Mobile Breakpoints (768px, 390px, 360px) ────────────────────────────── */
@media (max-width: 768px) {
  .notif-pref-page {
    padding: var(--sp-3) var(--sp-3) var(--sp-6);
  }
  .notif-pref-page__card {
    padding: var(--sp-4);
  }
  .notif-pref-page__pref-actions {
    flex-direction: column;
  }
  .notif-pref-page__pref-actions .btn {
    width: 100%;
    text-align: center;
    justify-content: center;
  }
}

@media (max-width: 390px) {
  .notif-pref-page__title {
    font-size: 1.2rem;
  }
  .push-optin__a2hs-banner {
    flex-direction: column;
    gap: var(--sp-2);
  }
  .push-optin__a2hs-banner__dismiss {
    align-self: flex-end;
  }
}

@media (max-width: 360px) {
  .notif-pref-page {
    padding: var(--sp-2) var(--sp-2) var(--sp-4);
  }
  .notif-pref-page__card {
    padding: var(--sp-3);
  }
  .notif-pref-page__pref-item {
    padding: var(--sp-2) var(--sp-2);
  }
  .push-optin__toggle-label {
    gap: var(--sp-2);
  }
}

/* ── [/CC-11: push-optin-banner-prefs] ──────────────────────────────────── */

/* ── Sprint_2026_17 Lane D: news-pipeline-transparenz-viz ─────────────────── */
/* Kompakter Step-Strip im news_card_wrapped-Wrapper (Feed-View).
   Additiv — keine bestehenden News-Klassen ueberschrieben.
   Design-Token analog .news-badge / .news-topic-pill (abgerundete Pills).
   Architecture: docs/potentiale/news-pipeline-transparenz-viz/architecture.md §3 */

.news-pipeline-strip {
  display: flex;
  flex-wrap: wrap;
  gap: 0.25rem;
  margin: 0.35rem 0 0.1rem;
  padding: 0 0.1rem;
}

.news-pipeline-step {
  display: inline-block;
  padding: 0.1em 0.45em;
  border-radius: 4px;
  font-size: 0.75em;
  font-weight: 600;
  letter-spacing: 0.02em;
  cursor: default;
  transition: opacity 0.15s;
}

/* State-Varianten: done / skipped / failed / pending / neutral */
.news-pipeline-step--done    { background: #d6f5e3; color: #1a6636; }
.news-pipeline-step--skipped { background: #f0f0f0; color: #888;    }
.news-pipeline-step--failed  { background: #fde8e8; color: #8b1a1a; }
.news-pipeline-step--pending { background: #fff8d6; color: #7a5a00; }
.news-pipeline-step--neutral { background: #f4f4f4; color: #aaa;    }

/* Detail-Liste auf der News-Detail-Page */
.news-detail__pipeline {
  margin: 1.5rem 0;
  padding: 1rem 1.2rem;
  background: var(--surface, #f9f9f9);
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0,0,0,0.06);
}

.news-detail__pipeline .news-detail__h2 {
  font-size: 1em;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--muted, #888);
  margin: 0 0 0.75rem;
}

.news-pipeline-detail-list {
  list-style: none;
  margin: 0;
  padding: 0;
  display: flex;
  flex-direction: column;
  gap: 0.4rem;
}

.news-pipeline-detail-item {
  display: flex;
  align-items: baseline;
  gap: 0.5rem;
  flex-wrap: wrap;
  font-size: 0.9em;
}

.news-pipeline-detail-key {
  font-weight: 700;
  min-width: 5.5rem;
  color: var(--text, #333);
}

.news-pipeline-detail-state {
  display: inline-block;
  padding: 0.1em 0.4em;
  border-radius: 4px;
  font-size: 0.85em;
  font-weight: 600;
}

.news-pipeline-detail-hint {
  font-size: 0.82em;
  color: var(--muted, #888);
}

/* ── [/Sprint_2026_17 Lane D: news-pipeline-transparenz-viz] ──────────────── */
/* === scheduler-freshness === */
/* Freshness-Pill: Alter-Marker je Job auf der Scheduler-Status-Seite.
   scheduler-freshness-visibility (v0.122.0, Sprint_2026_15)
   Alle Farben ausschliesslich via Design-Tokens (kein raw-Hex). */

.fresh-pill {
  display: inline-block;
  padding: 0.15em 0.55em;
  border-radius: var(--r-pill);
  font-size: var(--fs-meta);
  font-weight: 600;
  line-height: 1.4;
  white-space: nowrap;
}

/* gruen: Alter innerhalb des erwarteten Intervalls (<=1.5x) */
.fresh-pill--fresh {
  background: var(--c-bull-soft);
  color: var(--c-bull-text);
}

/* gelb: Alter zwischen 1.5x und 3.0x Intervall */
.fresh-pill--aging {
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
}

/* rot: Alter >3.0x Intervall oder letzter Run failed/timeout */
.fresh-pill--stale {
  background: var(--c-bear-soft);
  color: var(--c-bear-text);
}

/* grau: kein Snapshot oder unbekanntes Intervall */
.fresh-pill--unknown {
  background: var(--c-neutral-soft);
  color: var(--c-neutral-text);
}

/* Token-migrierte Klassen fuer Scheduler-Status-Inline-Styles
   (ersetzt raw-Hex color:#2e7d32 / #c62828 / #f57c00 aus dem Template). */

/* Scheduler-Aktivitaets-Status in der Kopfzeile */
.scheduler-status--active {
  color: var(--c-bull-strong);
  font-weight: 600;
}

.scheduler-status--inactive {
  color: var(--c-bear-strong);
  font-weight: 600;
}

/* Inaktiv-Banner (ersetzt style="background:#fff3cd;border:1px solid #ffc107;...") */
.scheduler-inactive-banner {
  background: var(--c-warn-soft);
  border: 1px solid var(--c-warn-strong);
  border-radius: var(--r-sm);
  padding: 0.8rem 1rem;
  margin-bottom: 1rem;
}

/* Scheduler-Status-Spans in der Status-Spalte auf /admin/scheduler-status
   (eigene Klassen .sched-status--* um Kollision mit Bundle-M .job-status--* zu vermeiden;
   .job-status--* in Bundle M sind Pill-Klassen fuer queue.html mit background+border). */
.sched-status--ok {
  color: var(--c-bull-strong);
}

.sched-status--failed {
  color: var(--c-bear-strong);
}

.sched-status--running {
  color: var(--c-warn-strong);
}

.sched-status--timeout {
  color: var(--c-bear-strong);
}

/* Fehler-Zelle: Breiten-Limit + Ellipsis (ersetzt inline style= auf td) */
.job-error-cell {
  max-width: 200px;
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: 0.8em;
  color: var(--c-bear-strong);
}

/* jobs-scheduler-page-truth-and-polish (Sprint_2026_20, v0.129.0)
   ───────────────────────────────────────────────────────────────
   NEUE Klassen: .alert* / .sched-table* / .sched-status--disabled/degraded /
                 .sched-snapshot-stale / page-head-action-slot
   OWNER: Alle .sched-* / .fresh-pill* / .scheduler-* Praefix-Klassen

   Hinweis fuer Parallel-DEV: Nur scheduler-Namespace-Klassen; keine
   generischen Tokens oder Klassen anderer Lane-Namespaces veraendert. */

/* ── .alert / .alert--success / .alert--warning ────────────────────────────
   Bisher fehlend (§0.5 ⚠): run-now-Endpoint und Stale-Banner nutzen diese.
   Token-basiert analog .banner--warning/.banner--info (Z.422-435). */
.alert {
  padding: 0.75rem 1rem;
  border-radius: var(--r-sm);
  font-size: var(--fs-sm);
  line-height: var(--lh-relaxed);
  margin-bottom: var(--sp-3);
}
.alert--success {
  background: var(--c-bull-soft);
  color: var(--c-bull-text);
  border: 1px solid var(--c-bull-strong);
}
.alert--warning {
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
  border: 1px solid var(--c-warn-strong);
}

/* ── .sched-status--disabled / --degraded (Drei-Wege-Status §4.2) ──────────
   .scheduler-status--active/.scheduler-status--inactive bleiben fuer Compat. */
.sched-status--disabled {
  color: var(--c-neutral-text);
  font-weight: 600;
}
.sched-status--degraded {
  color: var(--c-bear-strong);
  font-weight: 600;
}

/* ── .sched-snapshot-stale (Snapshot-Zeile veraltet — J19 schreibt nicht) ──
   Gelb/Warn-Marker: ANDERE Aussage als .fresh-pill--stale (das ist Job-Alter).
   .sched-snapshot-stale = Snapshot-ZEILE selbst veraltet (J19 gestoppt?). */
.sched-snapshot-stale {
  color: var(--c-warn-text);
  font-weight: 600;
  font-size: var(--fs-meta);
}

/* ── feed-source-health-alerting (CC-210): Per-Source-Status-Pills ──────────
   Neue minimale Pill-Familie im feed-health-Namespace (Architecture §4b #3:
   die sched-status--* sind farb-only-Spans; hier Pills mit Hintergrund analog
   der etablierten Farbsemantik gruen=ok / gelb=degraded / rot=down). */
.feed-health-pill {
  display: inline-block;
  padding: 0.15rem 0.5rem;
  border-radius: var(--r-sm);
  font-size: var(--fs-meta);
  font-weight: 600;
  border: 1px solid transparent;
  white-space: nowrap;
}
.feed-health-pill--ok {
  background: var(--c-bull-soft);
  color: var(--c-bull-text);
  border-color: var(--c-bull-strong);
}
.feed-health-pill--degraded {
  background: var(--c-warn-soft);
  color: var(--c-warn-text);
  border-color: var(--c-warn-strong);
}
.feed-health-pill--down {
  background: var(--c-bear-soft);
  color: var(--c-bear-text);
  border-color: var(--c-bear-strong);
}
.feed-health-pill--unknown {
  background: var(--c-neutral-soft);
  color: var(--c-text-secondary);
  border-color: var(--c-border-strong);
}

/* ── .sched-table (Token-basierter Ersatz fuer .data-table ohne CSS) ────────
   §0.5 Befund: .data-table hat 0 CSS-Treffer in style.css → ungestylt.
   Neue Klasse .sched-table im Lane-Namespace; Template nutzt sched-table. */
.sched-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-meta);
}
.sched-table th,
.sched-table td {
  padding: var(--sp-2) var(--sp-3);
  text-align: left;
  border-bottom: 1px solid var(--c-border-subtle);
  vertical-align: top;
}
.sched-table thead th {
  font-weight: var(--fw-semibold);
  color: var(--c-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  font-size: 0.74em;
  background: var(--c-bg-page, #f8f8f8);
  position: sticky;
  top: 0;
  z-index: 1;
}
.sched-table tbody tr:hover {
  background: var(--c-bg-row-hover, rgba(0,0,0,0.02));
}
/* Stale-Snapshot-Zeile: leichter Warn-Hintergrund */
.sched-table .sched-row--snapshot-stale {
  background: var(--c-warn-soft);
}
.sched-table .sched-row--snapshot-stale:hover {
  background: var(--c-warn-soft);
  filter: brightness(0.97);
}

/* ── .sched-table-scroll (Mobile: Scroll-Container fuer 8-spaltige Tabelle) ─
   Design-Conformance §4b #5: 7+ Spalten brechen auf Mobile → overflow-x-auto */
.sched-table-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

/* ── .sched-table-card (Card fuer die Tabelle) ──────────────────────────── */
.sched-table-card {
  margin-top: var(--sp-4);
}
.sched-table-body {
  padding: 0;  /* Tabelle braucht kein extra Body-Padding — Scroll-Container direkt */
}

/* ── .sched-job-id (Monospace, kompakt) ─────────────────────────────────── */
.sched-job-id {
  font-family: var(--ff-mono, monospace);
  font-size: 0.83em;
  max-width: 20ch;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ── .sched-ts (Timestamp-Spalten, kompakt) ─────────────────────────────── */
.sched-ts {
  white-space: nowrap;
  font-size: 0.81em;
}

/* ── .sched-action-cell (Touch-Target >= 44px fuer Run-now-Button) ────────── */
.sched-action-cell {
  white-space: nowrap;
}
.sched-run-btn {
  min-height: 2.75rem;  /* >=44px Touch-Target (Design-Conformance §4b #10 A11y) */
  min-width: 5rem;
}

/* ── .sched-page-actions (Action-Slot im page_head-Macro) ─────────────────── */
.sched-page-actions {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  flex-wrap: wrap;
}
.sched-page-link {
  white-space: nowrap;
}
/* CC-191 signal-backtest-hit-rate: Window-Toggle (5/21 Tage) Active-State */
.sched-page-link--active {
  font-weight: var(--fw-semibold);
  color: var(--c-accent);
  text-decoration: underline;
}
/* CC-191 signal-backtest-hit-rate: ALL-Bucket-Zeile optisch hervorgehoben */
.backtest-row--total {
  font-weight: var(--fw-semibold);
  background: var(--c-bg-sunken);
}

/* ── .sched-empty-row / .sched-footer-meta ──────────────────────────────── */
.sched-empty-row {
  text-align: center;
  padding: var(--sp-5) var(--sp-4);
  color: var(--c-text-secondary);
  font-size: var(--fs-sm);
}
.sched-footer-meta {
  margin-top: var(--sp-3);
}

/* ── .sched-status-tooltip (inline-Fragezeichen fuer Degraded-Banner) ────── */
.sched-status-tooltip {
  cursor: help;
  color: var(--c-text-secondary);
  font-size: 0.85em;
  margin-left: var(--sp-1);
}

/* ── Mobile-Overrides (Breakpoints 768px + 600px, Design-Konvention) ───────── */
@media (max-width: 768px) {
  .sched-table-card { margin-top: var(--sp-3); }
  .sched-page-actions { gap: var(--sp-2); }
  .sched-table th,
  .sched-table td { padding: var(--sp-1) var(--sp-2); }
}
@media (max-width: 600px) {
  .sched-run-btn { min-width: 4rem; font-size: 0.83em; }
  .sched-ts { font-size: 0.77em; }
}

/* === [/scheduler-freshness] === */

/* === [compliance-layer] === */
/* Architecture: docs/potentiale/compliance-layer/architecture.md §3 */

/* ── Compliance-Disclaimer (shared Include auf Report-Seiten) ──────── */
.compliance-disclaimer {
  display: flex;
  align-items: flex-start;
  gap: var(--sp-3);
  margin-top: var(--sp-6);
  padding: var(--sp-3) var(--sp-4);
  background: var(--c-info-soft);
  border: 1px solid var(--c-border-subtle);
  border-left: 3px solid var(--c-info-strong);
  border-radius: var(--r-sm);
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
  line-height: var(--lh-relaxed);
}

.compliance-disclaimer__icon {
  flex-shrink: 0;
  font-size: 1rem;
  color: var(--c-info-strong);
  margin-top: 0.1em;
}

.compliance-disclaimer__text {
  flex: 1;
}

.compliance-disclaimer__link {
  color: var(--c-accent);
  text-decoration: underline;
}

.compliance-disclaimer__link:hover {
  color: var(--c-accent-hover);
}

/* ── Transparenz-Seite ─────────────────────────────────────────────── */
.transparenz-page {
  max-width: 860px;
  margin: 0 auto;
}

.transparenz-page__section {
  margin-top: var(--sp-8);
}

.transparenz-page__section h2 {
  font-size: var(--fs-h2);
  font-weight: var(--fw-semibold);
  color: var(--c-text-primary);
  margin-bottom: var(--sp-3);
  padding-bottom: var(--sp-2);
  border-bottom: 1px solid var(--c-border-subtle);
}

.transparenz-page__section h3 {
  font-size: var(--fs-h3);
  font-weight: var(--fw-medium);
  color: var(--c-text-primary);
  margin-top: var(--sp-4);
  margin-bottom: var(--sp-2);
}

.transparenz-page__card {
  background: var(--c-bg-card);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-card);
  padding: var(--sp-5) var(--sp-6);
  line-height: var(--lh-relaxed);
  color: var(--c-text-primary);
}

.transparenz-page__card p {
  margin-bottom: var(--sp-3);
}

.transparenz-page__card p:last-child {
  margin-bottom: 0;
}

.transparenz-page__list {
  margin: var(--sp-3) 0 var(--sp-3) var(--sp-5);
  padding: 0;
  line-height: var(--lh-relaxed);
}

.transparenz-page__list li {
  margin-bottom: var(--sp-2);
}

.transparenz-page__table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-sm);
}

.transparenz-page__table th,
.transparenz-page__table td {
  text-align: left;
  padding: var(--sp-2) var(--sp-3);
  border-bottom: 1px solid var(--c-border-subtle);
  vertical-align: top;
}

.transparenz-page__table th {
  font-weight: var(--fw-medium);
  color: var(--c-text-secondary);
  background: var(--c-bg-sunken);
}

.transparenz-page__table tr:last-child td {
  border-bottom: none;
}

/* === [/compliance-layer] === */

/* === CC-03 mobile-first-discovery (PtR + Skeleton) === */
/* Sprint_2026_18 Lane B — Append-Only, keine bestehenden Regeln ueberschrieben */

/* ── Pull-to-Refresh Spinner ─────────────────────────────────────────────── */

.ptr-spinner {
  position: fixed;
  top: 0;
  left: 50%;
  transform: translateX(-50%) translateY(0px);
  width: 40px;
  height: 40px;
  opacity: 0;
  pointer-events: none;
  z-index: var(--z-overlay, 200);
  transition: opacity 0.15s ease, transform 0.15s ease;
}

.ptr-spinner--visible {
  /* Sichtbar, Opacity wird per JS gesteuert */
}

.ptr-spinner__arc {
  width: 36px;
  height: 36px;
  border: 3px solid var(--c-border-subtle, rgba(255,255,255,0.15));
  border-top-color: var(--c-accent, #3b82f6);
  border-radius: 50%;
  box-sizing: border-box;
}

.ptr-spinner--spinning .ptr-spinner__arc {
  animation: ptr-spin 0.7s linear infinite;
}

@keyframes ptr-spin {
  to { transform: rotate(360deg); }
}

/* Verhindert nativen Browser-PtR auf Touch-Seiten mit data-ptr-reload */
/* Nur auf Mobile (max-width 768px) um Desktop-Scroll nicht zu beeinflussen */
@media (max-width: 768px) {
  main[data-ptr-reload] {
    overscroll-behavior-y: contain;
  }
}

/* ── Skeleton-Loader ─────────────────────────────────────────────────────── */

.skeleton {
  display: block;
  background: linear-gradient(
    90deg,
    var(--c-bg-sunken) 25%,
    var(--c-bg-elevated) 50%,
    var(--c-bg-sunken) 75%
  );
  background-size: 200% 100%;
  border-radius: var(--r-sm);
  animation: skeleton-pulse 1.2s ease-in-out infinite;
  color: transparent;
  user-select: none;
}

.skeleton--line {
  height: 1em;
  margin-bottom: 0.5em;
}

.skeleton--card {
  height: 80px;
  border-radius: var(--r-card);
  margin-bottom: 0.75rem;
}

.skeleton--title {
  height: 1.4em;
  width: 60%;
  margin-bottom: 0.75em;
}

.skeleton--label {
  height: 0.85em;
  width: 40%;
  margin-bottom: 0.4em;
}

@keyframes skeleton-pulse {
  0%   { background-position: 200% center; }
  100% { background-position: -200% center; }
}

/* Reduced-Motion (a11y-Pflicht): Skeleton + PtR-Spinner-Animation deaktivieren */
@media (prefers-reduced-motion: reduce) {
  .skeleton {
    animation: none;
    background: var(--c-bg-sunken);
  }
  .ptr-spinner--spinning .ptr-spinner__arc {
    animation: none;
  }
}

/* Skeleton im HTMX-Loading-State (news_index.html Variant B) */
.is-loading .skeleton {
  display: block;
}

/* === [/CC-03 mobile-first-discovery] === */

/* ============================================================
   CC-02 Short-Radar — radar-* Component Styles
   Sprint_2026_19 · REWORK-Runde-1 (AC6-Fix)
   CC-159 radar-design-rework · Sprint_2026_21
   CC-169 radar-short-card-standard-align · Sprint_2026_23
   Alle Klassen ausschliesslich mit var(--...) Design-Tokens.
   Container-Schale: .insights-grid / .insights-card (konsumiert, nicht definiert).
   Radar-spezifische Inhalts-Klassen: .radar-* (additiv, Radar-eigenes Vokabular).
   ============================================================ */

/* Beschreibungstext */
.radar-desc {
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
  margin-bottom: var(--sp-6);
  line-height: 1.6;
}

/* Grid-Tuning: additiver Modifier auf .insights-grid (Radar-spezifisch) */
.radar-grid {
  margin-bottom: var(--sp-8);
}

/* Radar-Card-Tile: additiver Modifier auf .insights-card — Distress-Akzentlinie */
.radar-card-tile {
  border-left: 3px solid var(--c-bear-strong);
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
  transition: box-shadow var(--motion-fast);
}
.radar-card-tile:hover {
  box-shadow: var(--shadow-card-hover);
}

/* Bestand-Markierung: leicht hervorgehobener Hintergrund */
.radar-card-tile--bestand {
  background: var(--c-accent-soft);
  border-color: var(--c-accent);
  border-left-color: var(--c-accent);
}

/* Ticker-Link */
.radar-ticker {
  font-weight: 700;
  font-size: 1rem; /* kein Token --fs-md vorhanden; intentional 1rem */
  text-decoration: none;
  color: var(--c-text-primary);
  margin-right: auto;
}
.radar-ticker:hover {
  text-decoration: underline;
  color: var(--c-accent);
}

/* Score-Pill (wrapper — das .pill.pill--bear Basis-Styling kommt von .pill) */
.radar-score-pill {
  font-weight: 600;
  font-size: var(--fs-meta);
}

/* Bestand-Badge */
.radar-bestand-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.2em; /* Mikro-Spacing unter --sp-1, kein Token vorhanden, intentional belassen */
  font-size: var(--fs-meta);
  font-weight: 500;
  color: var(--c-accent);
  background: var(--c-accent-soft);
  border: 1px solid var(--c-accent);
  border-radius: var(--r-xs);
  padding: 0.1rem 0.45rem; /* Mikro-Spacing unter --sp-1, kein Token vorhanden, intentional belassen */
  white-space: nowrap;
  text-transform: uppercase;
  letter-spacing: 0.04em; /* Mikro-Typo, codebase-weit etabliertes Muster, kein Token */
}

/* Reason-Chips-Zeile */
.radar-reasons {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-1);
}

/* KPI-Liste (dl) */
.radar-kpis {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
  gap: var(--sp-2) var(--sp-3);
  margin: 0;
  padding: 0;
}

/* Einzelne KPI-Zeile (dt + dd) */
.radar-kpi {
  display: flex;
  flex-direction: column;
  gap: 0.1rem; /* Mikro-Spacing unter --sp-1, kein Token vorhanden, intentional belassen */
}
.radar-kpi dt {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
  text-transform: uppercase;
  letter-spacing: 0.05em; /* Mikro-Typo, codebase-weit etabliertes Muster, kein Token */
  font-weight: 500;
}
.radar-kpi dd {
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--c-text-primary);
  font-variant-numeric: tabular-nums;
  margin: 0;
}
.radar-kpi dd.kpi--warn {
  color: var(--c-bear-strong);
}

/* Empty-State: via empty_state()-Macro (design-principles §6) — kein Eigenbau.
   CSS liegt global in .empty-state* (Bundle M, v0.80.0). CC-159 radar-design-rework. */

/* Legende/Details-Block */
.radar-legend {
  margin-top: var(--sp-6);
  padding: var(--sp-3) var(--sp-4);
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-sm);
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
}
.radar-legend summary {
  cursor: pointer;
  font-weight: 600;
  color: var(--c-text-primary);
  padding: var(--sp-1) 0;
  text-transform: uppercase;
  letter-spacing: 0.05em; /* Mikro-Typo, codebase-weit etabliertes Muster, kein Token */
  font-size: var(--fs-meta);
}
.radar-legend ul {
  margin: var(--sp-3) 0 var(--sp-2);
  padding-left: var(--sp-5);
  line-height: 1.8;
}
.radar-legend p {
  margin: var(--sp-2) 0 0;
  line-height: 1.6;
}

/* Pill-Modifier: klein (verwendet in radar-reasons) */
.pill--sm {
  font-size: var(--fs-meta); /* 0.75rem — intentional kleiner als .pill; kein sub-meta-Token vorhanden */
  padding: 0.1rem 0.4rem; /* Mikro-Spacing unter --sp-1, kein Token vorhanden, intentional belassen */
}

/* CC-192: Bestaetigungs-Zustand-Badge (nutzt .pill/.pill--bull/.pill--bear
   fuer Farbe; hier nur Spacing/Positionierung im Card-Header additiv). */
.radar-confirm-badge {
  margin-left: var(--sp-1);
}

/* Responsive: Kanon-Breakpoints 768px + 600px (design-principles §4/§7) */
@media (max-width: 768px) {
  .radar-grid {
    grid-template-columns: 1fr;
  }
}
@media (max-width: 600px) {
  .radar-grid {
    grid-template-columns: minmax(100%, 1fr);
  }
  .radar-kpis {
    grid-template-columns: 1fr 1fr;
  }
}

/* === [/CC-02 short-radar] === */


/* === [CC-62 user-settings-page] === */
/* Settings-Seite /settings: token-basierter Layout-Block (architecture.md §4b).
   Alle Werte ausschliesslich via CSS-Custom-Properties -- kein raw-Hex/px.
   Mobile-Overrides: 768px (Zwei-auf-eine-Spalte) + 600px (volle Breite).
   Neue Klassen: .settings-grid, .settings-form, .settings-form__row,
   .settings-form__label, .settings-form__input, .settings-form__toggle,
   .settings-form__actions, .settings-feedback. */

/* Grid: zwei Karten nebeneinander, mobil gestapelt */
.settings-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(28rem, 1fr));
  gap: var(--sp-4);
  margin-bottom: var(--sp-6);
}

@media (max-width: 768px) {
  .settings-grid {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 600px) {
  .settings-grid {
    grid-template-columns: minmax(100%, 1fr);
  }
}

/* Formular-Wrapper */
.settings-form {
  display: flex;
  flex-direction: column;
}

/* Zeile: Label + Input (vertikal gestapelt) */
.settings-form__row {
  display: flex;
  flex-direction: column;
  gap: var(--sp-2);
  margin-bottom: var(--sp-4);
}

.settings-form__row:last-child {
  margin-bottom: 0;
}

/* Label */
.settings-form__label {
  font-size: var(--fs-sm);
  font-weight: 600;
  color: var(--c-text-primary);
}

/* Text-Input */
.settings-form__input {
  padding: var(--sp-3) var(--sp-4);
  border: 1px solid var(--c-border-strong);
  border-radius: var(--r-sm);
  font-size: var(--fs-sm);
  color: var(--c-text-primary);
  background: var(--c-bg-card);
  min-height: 44px; /* Touch-Target >= 44px */
  box-sizing: border-box;
  width: 100%;
}

.settings-form__input:focus {
  outline: 2px solid var(--c-border-focus);
  outline-offset: 2px;
  border-color: var(--c-border-focus);
}

/* Toggle-Zeile (Checkbox + Label horizontal) */
.settings-form__toggle {
  display: flex;
  align-items: center;
  gap: var(--sp-3);
  min-height: 44px; /* Touch-Target >= 44px */
}

.settings-form__toggle input[type="checkbox"] {
  width: 1.25rem;
  height: 1.25rem;
  accent-color: var(--c-accent);
  cursor: pointer;
  flex-shrink: 0;
}

.settings-form__toggle .settings-form__label {
  cursor: pointer;
  font-weight: 500;
}

/* Aktionsleiste (Speichern + Sekundaer-Buttons) */
.settings-form__actions {
  display: flex;
  flex-wrap: wrap;
  gap: var(--sp-3);
  align-items: center;
}

/* Feedback-Banner (Speichern-Erfolg / Validierungsfehler) */
.settings-feedback {
  margin-bottom: var(--sp-4);
}

/* === [/CC-62 user-settings-page] === */

/* === [CC-xx user-settings-deepening v0.154.0] === */
/* body.ui-compact: Reduzierte Abstande und kompaktere Darstellung.
   Token-basiert (--sp-* CSS-Variablen), analog .bestand-cards--compact.
   Praezedenz: docs/potentiale/user-settings-deepening/architecture.md §2.3 */
body.ui-compact {
  --sp-2: 0.375rem;   /* default: 0.5rem  */
  --sp-3: 0.625rem;   /* default: 0.75rem */
  --sp-4: 0.875rem;   /* default: 1rem    */
}

body.ui-compact .insights-card__body,
body.ui-compact .settings-form__row {
  gap: var(--sp-2);
}

body.ui-compact table th,
body.ui-compact table td {
  padding-top: var(--sp-2);
  padding-bottom: var(--sp-2);
}

body.ui-compact .bestand-cards {
  gap: var(--sp-2);
}

body.ui-compact .bestand-card {
  padding: var(--sp-2) var(--sp-3);
}
/* === [/CC-xx user-settings-deepening] === */

/* ── CC-177 kpi-completeness-dashboard (Sprint_2026_26 Lane A, v0.157.0) ────
   Heatmap-Zellfarben fuer .kpi-cov-table.
   Nutzt bestehende --c-bull/--c-bear/--c-neutral-Tokens (Design-Conformance §4b).
   Analogie: .score-bar__fill--bull/--bear (style.css Z.806).
   CSS-Kontrakt: kein Eigenbau-Hex, nur Token-Referenzen.
   ─────────────────────────────────────────────────────────────────────────── */

/* Tabelle — nutzt .sched-table-Basis, eigener Namespace fuer Overrides */
.kpi-cov-table {
  width: 100%;
  border-collapse: collapse;
  font-size: var(--fs-meta);
}
.kpi-cov-table th,
.kpi-cov-table td {
  padding: var(--sp-2) var(--sp-3);
  text-align: left;
  border-bottom: 1px solid var(--c-border-subtle);
  vertical-align: middle;
}
.kpi-cov-table thead th {
  font-weight: var(--fw-semibold);
  color: var(--c-text-secondary);
  text-transform: uppercase;
  letter-spacing: 0.03em;
  font-size: 0.74em;
  background: var(--c-bg-page, #f8f8f8);
}
.kpi-cov-table tbody tr:hover {
  background: var(--c-bg-row-hover, rgba(0,0,0,0.02));
}
.kpi-cov-table td.num { text-align: right; font-variant-numeric: tabular-nums; }
.kpi-cov-table td.domain-label { font-weight: var(--fw-semibold); }

/* Scroll-Container (Mobile: overflow-x bei 8 Spalten) */
.table-scroll {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}

/* Heatmap-Farbklassen (gruen / gelb / rot) */
.kpi-cov-cell--good {
  background: var(--c-bull-soft);
  color: var(--c-bull-text);
  font-weight: var(--fw-semibold);
}
.kpi-cov-cell--warn {
  background: var(--c-warn-soft, #fef9c3);
  color: var(--c-warn-text, #854d0e);
  font-weight: var(--fw-semibold);
}
.kpi-cov-cell--bad {
  background: var(--c-bear-soft);
  color: var(--c-bear-text);
  font-weight: var(--fw-semibold);
}
.kpi-cov-cell--na {
  color: var(--c-text-muted);
  font-style: italic;
}
.kpi-cov-cell--missing {
  color: var(--c-text-muted);
  text-align: center;
}

/* Touch-Target fuer JSON-Link (A11y: >= 44px) */
.kpi-cov-json-link {
  display: inline-block;
  padding: var(--sp-2) var(--sp-3);
  min-height: 44px;
  min-width: 44px;
  line-height: 44px;
}

@media (max-width: 600px) {
  .kpi-cov-table th,
  .kpi-cov-table td { padding: var(--sp-1) var(--sp-2); font-size: 0.82em; }
}
/* === [/CC-177 kpi-completeness-dashboard] === */

/* === [CC-42 fulltext-search v0.159.0] ============================================
   Neue CSS-Klassen fuer /search + Command-Palette Overlay.
   Design-Conformance: nur Token-Variablen (--c-*/--sp-*/--fs-*/--r-*/--shadow-*).
   Architecture: docs/potentiale/fulltext-search/architecture.md §4b
   ================================================================================ */

/* ── Search-Palette Overlay (Command-Palette Cmd+K) ─────────────────────────── */
.search-palette__backdrop {
  position: fixed;
  inset: 0;
  background: rgba(0, 0, 0, 0.45);
  z-index: 900;
  display: none;
}
.search-palette__backdrop--visible {
  display: block;
}

.search-palette {
  position: fixed;
  top: 20%;
  left: 50%;
  transform: translateX(-50%);
  width: min(640px, 95vw);
  background: var(--c-bg-card);
  border-radius: var(--r-card);
  box-shadow: var(--shadow-modal);
  z-index: 910;
  padding: var(--sp-4);
  display: none;
}
.search-palette--visible {
  display: block;
}
@media (max-width: 600px) {
  .search-palette {
    top: 0;
    left: 0;
    transform: none;
    width: 100%;
    border-radius: 0 0 var(--r-card) var(--r-card);
  }
}

.search-palette__input {
  width: 100%;
  box-sizing: border-box;
  padding: var(--sp-3) var(--sp-4);
  font-size: var(--fs-body);
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-strong);
  border-radius: var(--r-sm);
  min-height: var(--touch-target);
  color: var(--c-text-primary);
  outline: none;
}
.search-palette__input:focus {
  border-color: var(--c-border-focus);
  box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring-color);
}

/* ── Search-Result-Group (Ergebnis-Sektionen auf /search + Palette) ─────────── */
.search-result-group {
  margin-top: var(--sp-6);
}
.search-result-group__head {
  font-size: var(--fs-h3);
  font-weight: var(--fw-semibold);
  color: var(--c-text-secondary);
  margin-bottom: var(--sp-3);
  display: flex;
  align-items: baseline;
  gap: var(--sp-2);
}
.search-result-group__count {
  font-size: var(--fs-sm);
  font-weight: var(--fw-regular);
  color: var(--c-text-muted);
}
.search-result-group__list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: var(--sp-3);
}

/* ── Search-Result-Card (einzelnes Treffer-Element) ─────────────────────────── */
.search-result-card {
  padding: var(--sp-3) var(--sp-4);
  background: var(--c-bg-sunken);
  border-radius: var(--r-sm);
  border: 1px solid var(--c-border-subtle);
}
.search-result-card__title {
  font-size: var(--fs-body);
  font-weight: var(--fw-medium);
  color: var(--c-accent);
  text-decoration: none;
  display: block;
  margin-bottom: var(--sp-1);
}
.search-result-card__title:hover {
  color: var(--c-accent-hover);
  text-decoration: underline;
}
.search-result-card__meta {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
  margin-bottom: var(--sp-1);
}
.search-result-card__ticker {
  font-weight: var(--fw-semibold);
  color: var(--c-text-secondary);
}
.search-result-card__snippet {
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
  margin: var(--sp-1) 0 0;
  line-height: var(--lh-relaxed);
}

/* ── Watchlist-Badge (Stern fuer eigene Watchlist-Ticker) ───────────────────── */
.watchlist-badge {
  font-size: var(--fs-meta);
  margin-left: var(--sp-1);
  vertical-align: middle;
  title: "In deiner Watchlist";
}

/* ── kbd.search-hint (Tastaturkuerzel-Anzeige in Nav oder Palette) ──────────── */
kbd.search-hint {
  font-size: var(--fs-meta);
  color: var(--c-text-muted);
  font-family: var(--ff-mono);
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-subtle);
  border-radius: var(--r-xs);
  padding: 1px var(--sp-1);
}

/* ── Suchformular auf /search Voll-Seite ────────────────────────────────────── */
.search-form {
  margin-bottom: var(--sp-6);
}
.search-form__row {
  display: flex;
  gap: var(--sp-3);
  align-items: center;
}
.search-form__input {
  flex: 1;
  padding: var(--sp-3) var(--sp-4);
  font-size: var(--fs-body);
  background: var(--c-bg-sunken);
  border: 1px solid var(--c-border-strong);
  border-radius: var(--r-sm);
  min-height: var(--touch-target);
  color: var(--c-text-primary);
  outline: none;
}
.search-form__input:focus {
  border-color: var(--c-border-focus);
  box-shadow: 0 0 0 var(--focus-ring-width) var(--focus-ring-color);
}
.search-form__submit {
  min-height: var(--touch-target);
  white-space: nowrap;
}
.search-form__scope-row {
  display: flex;
  gap: var(--sp-4);
  margin-top: var(--sp-3);
  flex-wrap: wrap;
}
.search-scope-label {
  display: inline-flex;
  align-items: center;
  gap: var(--sp-2);
  font-size: var(--fs-sm);
  color: var(--c-text-secondary);
  cursor: pointer;
}
.search-hint-text {
  color: var(--c-text-muted);
  font-size: var(--fs-sm);
  text-align: center;
  padding: var(--sp-8) var(--sp-4);
}

@media (max-width: 600px) {
  .search-form__row {
    flex-direction: column;
    align-items: stretch;
  }
  .search-form__submit {
    width: 100%;
  }
}
/* === [/CC-42 fulltext-search] === */
