/* ── Market status banner ──────────────────────────────── */
#market-banner {
  background: #1a1a2e;
  color: #e2e8f0;
  font-size: .78rem;
  padding: .4rem 1.2rem;
  position: sticky;
  top: 0;
  z-index: 1031;
  border-bottom: 1px solid #2d3a55;
  min-height: 2rem;
}
#market-banner .mb-inner {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .25rem .35rem;
  min-height: 1.25rem;
}
#market-banner .mb-loading { color: #475569; font-style: italic; }
#market-banner .mb-label   { color: #64748b; margin-right: .15rem; }
#market-banner .mb-meta    { color: #475569; }
#market-banner .mb-sep     { color: #2d3a55; padding: 0 .3rem; user-select: none; }
#market-banner .mb-dot     { color: #2d3a55; padding: 0 .3rem; user-select: none; }
#market-banner .mb-news    { display: flex; flex-wrap: wrap; align-items: center; gap: 0 .1rem; }
#market-banner .mb-news-link { color: #94a3b8; text-decoration: none; }
#market-banner .mb-news-link:hover { color: #e2e8f0; text-decoration: underline; }
@media (max-width: 767px) {
  #market-banner .mb-sep-news { display: none; }
  #market-banner .mb-news     { margin-top: .3rem; flex-basis: 100%; flex-direction: column; align-items: flex-start; gap: .15rem; }
  #market-banner .mb-dot      { display: none; }
}

/* ── Base ─────────────────────────────────────────────── */
:root {
  --bull:       #16a34a;
  --bull-light: #dcfce7;
  --bull-mid:   #bbf7d0;
  --bear:       #dc2626;
  --bear-light: #fee2e2;
  --bear-mid:   #fecaca;
  --neutral:    #6b7280;
  --surface:    #ffffff;
  --surface-2:  #f9fafb;
  --border:     #e5e7eb;
  --text:       #111827;
  --text-muted: #6b7280;
  --radius:     .75rem;
  --shadow:     0 1px 3px rgba(0,0,0,.08), 0 1px 2px rgba(0,0,0,.05);
  --shadow-md:  0 4px 12px rgba(0,0,0,.08), 0 2px 4px rgba(0,0,0,.05);
}

html { font-size: 15px; }
@media (min-width: 768px) { html { font-size: 16px; } }

body {
  background: #f3f4f6;
  color: var(--text);
  margin-bottom: 60px;
}

.btn:focus, .form-control:focus {
  box-shadow: 0 0 0 3px rgba(59,130,246,.25);
}

/* ── Logo ────────────────────────────────────────────── */
.nav-logo {
  flex-shrink: 0;
  transition: transform .2s ease;
}
.navbar-brand:hover .nav-logo { transform: translateY(-1px); }
.app-version-badge { font-size: .65rem; font-weight: 500; color: #64748b; letter-spacing: .02em; margin-left: .1rem; align-self: flex-end; padding-bottom: .05rem; }

.oa-logo-mark {
  flex-shrink: 0;
  filter: drop-shadow(0 2px 6px rgba(34,197,94,.25));
}

/* ── Navbar override ─────────────────────────────────── */
.navbar {
  background: #0f172a !important;
  border-bottom: 1px solid #1e293b !important;
}
.navbar-brand, .nav-link {
  color: #e2e8f0 !important;
  font-weight: 600;
}
.nav-link:hover { color: #fff !important; }

/* ── Page header ─────────────────────────────────────── */
.oa-header {
  background: linear-gradient(135deg, #0f172a 0%, #1e3a5f 100%);
  border-radius: var(--radius);
  padding: 2rem 2rem 1.75rem;
  color: #fff;
}
.oa-header-inner {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 1.25rem;
}
.oa-title {
  font-size: 1.75rem;
  font-weight: 800;
  letter-spacing: -.02em;
  margin: 0 0 .25rem;
}
.oa-subtitle {
  color: #94a3b8;
  margin: 0;
  font-size: .9rem;
}

/* Summary pills */
.oa-summary-pills {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem;
  align-items: flex-start;
}
.oa-pill {
  background: rgba(255,255,255,.08);
  border: 1px solid rgba(255,255,255,.12);
  border-radius: .5rem;
  padding: .4rem .75rem;
  min-width: 70px;
  text-align: center;
}
.oa-pill-bull { background: rgba(22,163,74,.2); border-color: rgba(22,163,74,.4); }
.oa-pill-bear { background: rgba(220,38,38,.2); border-color: rgba(220,38,38,.4); }
.oa-pill-label { display: block; font-size: .65rem; color: #94a3b8; text-transform: uppercase; letter-spacing: .05em; }
.oa-pill-value { display: block; font-size: 1rem; font-weight: 700; color: #fff; }

/* ── Card ─────────────────────────────────────────────── */
.oa-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  overflow: hidden;
}
.oa-card-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: .5rem;
  padding: .9rem 1.25rem;
  background: var(--surface-2);
  border-bottom: 1px solid var(--border);
  font-weight: 600;
  font-size: .9rem;
}
.oa-header-hint { font-size: .75rem; color: var(--text-muted); font-weight: 400; }
.oa-card-body { padding: 1.5rem 1.25rem; }
.oa-card-footer {
  padding: .9rem 1.25rem;
  background: var(--surface-2);
  border-top: 1px solid var(--border);
  display: flex;
  align-items: center;
  gap: 1rem;
}
.oa-footer-note { font-size: .8rem; color: var(--text-muted); }

/* ── Upload / drop zone ──────────────────────────────── */
.drop-zone {
  border: 2px dashed var(--border);
  border-radius: .625rem;
  background: var(--surface-2);
  padding: 2.5rem 1.5rem;
  text-align: center;
  transition: border-color .15s, background .15s;
  position: relative;
  cursor: default;
}
.drop-zone.drop-active {
  border-color: #3b82f6;
  background: #eff6ff;
}
.drop-zone-input {
  position: absolute;
  inset: 0;
  opacity: 0;
  width: 100%;
  height: 100%;
  cursor: pointer;
  display: none;
}
.drop-icon {
  font-size: 2.5rem;
  color: #9ca3af;
  line-height: 1;
  margin-bottom: .5rem;
}
.drop-primary {
  color: var(--text);
  font-size: .9rem;
  margin: 0 0 .25rem;
}
.drop-secondary { font-size: .75rem; color: var(--text-muted); margin: 0; }
.drop-browse {
  background: none;
  border: none;
  padding: 0;
  color: #3b82f6;
  font-weight: 600;
  cursor: pointer;
  text-decoration: underline;
  font-size: inherit;
}
.drop-browse:hover { color: #1d4ed8; }

.drop-zone-selected {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: .75rem;
  font-size: .95rem;
  font-weight: 500;
  color: var(--text);
}
.drop-file-icon { font-size: 1.5rem; }
.drop-clear {
  background: none;
  border: 1px solid var(--border);
  border-radius: .375rem;
  padding: .1rem .4rem;
  cursor: pointer;
  color: var(--text-muted);
  font-size: .8rem;
  line-height: 1.4;
}
.drop-clear:hover { color: var(--bear); border-color: var(--bear); }

/* Paste toggle */
.paste-toggle-row { margin: .75rem 0 .5rem; text-align: center; }
.paste-toggle-btn {
  background: none;
  border: none;
  color: var(--text-muted);
  font-size: .8rem;
  cursor: pointer;
  padding: .25rem .5rem;
}
.paste-toggle-btn:hover { color: var(--text); }

.oa-textarea {
  width: 100%;
  border: 1px solid var(--border);
  border-radius: .5rem;
  padding: .75rem;
  font-size: .78rem;
  font-family: 'SF Mono', 'Fira Code', monospace;
  resize: vertical;
  min-height: 130px;
  background: #fafafa;
  color: var(--text);
  outline: none;
  transition: border-color .15s;
}
.oa-textarea:focus { border-color: #3b82f6; }

/* ── Submit button ───────────────────────────────────── */
.oa-btn-primary {
  background: #1d4ed8;
  color: #fff;
  border: none;
  border-radius: .5rem;
  padding: .6rem 1.5rem;
  font-weight: 600;
  font-size: .9rem;
  cursor: pointer;
  transition: background .15s, transform .1s;
  display: inline-flex;
  align-items: center;
  gap: .4rem;
}
.oa-btn-primary:hover { background: #1e40af; }
.oa-btn-primary:active { transform: scale(.98); }
.btn-icon { font-size: .7rem; }

/* ── Alert ───────────────────────────────────────────── */
.oa-alert {
  background: #fef2f2;
  border: 1px solid #fecaca;
  border-radius: .5rem;
  padding: .8rem 1rem;
  color: #b91c1c;
  font-size: .875rem;
  display: flex;
  align-items: center;
  gap: .5rem;
}
.oa-alert-icon { font-size: 1rem; }

/* ── Results label ───────────────────────────────────── */
.results-label {
  font-size: 1.1rem;
  font-weight: 700;
  color: var(--text);
  display: flex;
  align-items: center;
  gap: .6rem;
}
.results-count {
  background: #e5e7eb;
  border-radius: .375rem;
  padding: .1rem .5rem;
  font-size: .8rem;
  font-weight: 600;
  color: var(--text-muted);
}

/* ── Ticker card ─────────────────────────────────────── */
.ticker-card-header {
  background: #0f172a;
  color: #f8fafc;
  border-bottom-color: #1e293b;
}
.ticker-sym {
  font-size: 1.75rem;
  font-weight: 900;
  letter-spacing: .04em;
  font-family: 'SF Mono', monospace;
  color: #f8fafc;
}
.ticker-meta {
  font-size: .78rem;
  color: #94a3b8;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .3rem;
}
.meta-sep { opacity: .4; }

/* Recommendation badge */
.rec-badge {
  font-size: .7rem;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  border-radius: .375rem;
  padding: .3rem .7rem;
  white-space: nowrap;
}
.bg-success  { background: var(--bull) !important; color: #fff; }
.bg-danger   { background: var(--bear) !important; color: #fff; }
.bg-info     { background: #0ea5e9 !important; }
.bg-secondary{ background: #6b7280 !important; color: #fff; }
.bg-warning  { background: #d97706 !important; color: #fff; }
.text-dark   { color: #fff !important; }

/* ── Score bar ───────────────────────────────────────── */
.score-section { }
.score-labels {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: .5rem;
  font-size: .78rem;
  font-weight: 600;
}
.score-bear-lbl { color: var(--bear); }
.score-bull-lbl { color: var(--bull); }
.score-number { font-size: 1.4rem; font-weight: 800; }
.text-bull { color: var(--bull) !important; }
.text-bear { color: var(--bear) !important; }

.score-track {
  position: relative;
  height: 12px;
  background: #f1f5f9;
  border-radius: 6px;
  overflow: hidden;
}
.score-center-mark {
  position: absolute;
  left: 50%;
  top: 0; bottom: 0;
  width: 2px;
  background: #cbd5e1;
  z-index: 1;
  transform: translateX(-50%);
}
.score-fill {
  position: absolute;
  height: 100%;
  border-radius: 6px;
  transition: width .5s ease;
}
.score-fill-bull { background: linear-gradient(90deg, #86efac, #16a34a); }
.score-fill-bear { background: linear-gradient(270deg, #fca5a5, #dc2626); }

/* ── Stats grid ──────────────────────────────────────── */
.stats-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: .625rem;
}
@media (min-width: 576px) { .stats-grid { grid-template-columns: repeat(4, 1fr); } }
@media (min-width: 992px) { .stats-grid { grid-template-columns: repeat(8, 1fr); } }

.stat-item {
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: .5rem;
  padding: .6rem .75rem;
}
.stat-lbl {
  font-size: .65rem;
  text-transform: uppercase;
  letter-spacing: .05em;
  color: var(--text-muted);
  margin-bottom: .2rem;
  white-space: nowrap;
}
.stat-val {
  font-size: .95rem;
  font-weight: 700;
  white-space: nowrap;
}
.stat-sep { color: var(--text-muted); font-weight: 400; }

/* ── Split bars ──────────────────────────────────────── */
.split-bar-section { }
.split-bar-labels {
  display: flex;
  justify-content: space-between;
  font-size: .75rem;
  font-weight: 600;
  margin-bottom: .35rem;
}
.split-bar-title { color: var(--text-muted); font-weight: 400; }
.split-bar-track {
  display: flex;
  height: 8px;
  border-radius: 4px;
  overflow: hidden;
  background: #f1f5f9;
}
.split-bar-call {
  background: linear-gradient(90deg, #86efac, #16a34a);
  transition: width .5s ease;
}
.split-bar-put {
  background: linear-gradient(90deg, #dc2626, #fca5a5);
  transition: width .5s ease;
}
.split-bar-neut {
  background: #e5e7eb;
  transition: width .5s ease;
}

/* ── Signals ─────────────────────────────────────────── */
.signals-section {
  background: #f8fafc;
  border: 1px solid var(--border);
  border-radius: .5rem;
  padding: .875rem 1rem;
}
.signals-title {
  font-size: .7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .08em;
  color: var(--text-muted);
  margin-bottom: .6rem;
}
.signal-row {
  display: flex;
  align-items: center;
  gap: .6rem;
  padding: .25rem 0;
  font-size: .85rem;
  border-bottom: 1px solid #f1f5f9;
}
.signal-row:last-child { border-bottom: none; }
.signal-dot {
  width: 7px; height: 7px;
  border-radius: 50%;
  flex-shrink: 0;
}
.sig-bull { background: var(--bull); }
.sig-bear { background: var(--bear); }

/* ── Trade table ─────────────────────────────────────── */
.trade-details { }
.trade-details > summary {
  cursor: pointer;
  font-size: .8rem;
  color: var(--text-muted);
  font-weight: 500;
  padding: .35rem 0;
  user-select: none;
  list-style: none;
  display: flex;
  align-items: center;
  gap: .4rem;
}
.trade-details > summary::before {
  content: "▶";
  font-size: .6rem;
  color: #9ca3af;
  transition: transform .15s;
}
.trade-details[open] > summary::before { transform: rotate(90deg); }
.trade-details > summary::-webkit-details-marker { display: none; }
.trade-details > summary:hover { color: var(--text); }

.oa-table {
  width: 100%;
  border-collapse: collapse;
  font-size: .8rem;
}
.oa-table th {
  background: #0f172a;
  color: #94a3b8;
  font-weight: 600;
  font-size: .7rem;
  text-transform: uppercase;
  letter-spacing: .05em;
  padding: .55rem .7rem;
  white-space: nowrap;
  border: none;
}
.oa-table td {
  padding: .45rem .7rem;
  border-bottom: 1px solid #f1f5f9;
  vertical-align: middle;
}
.oa-table tbody tr:hover { background: #f8fafc; }
.row-bull { background: rgba(22,163,74,.04); }
.row-bear { background: rgba(220,38,38,.04); }

.type-badge, .sent-badge {
  display: inline-block;
  border-radius: .25rem;
  padding: .15rem .45rem;
  font-size: .7rem;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
  white-space: nowrap;
}
.type-call { background: var(--bull-light); color: var(--bull); }
.type-put  { background: var(--bear-light); color: var(--bear); }
.sent-bull { background: var(--bull-light); color: var(--bull); }
.sent-bear { background: var(--bear-light); color: var(--bear); }
.sent-neu  { background: #f3f4f6; color: var(--neutral); }

/* ── Buy/Sell premium grid ───────────────────────────── */
.buysell-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: .625rem;
}
@media (min-width: 576px) { .buysell-grid { grid-template-columns: repeat(4, 1fr); } }

.buysell-item {
  border-radius: .5rem;
  padding: .65rem .75rem;
  border: 1px solid var(--border);
}
.buysell-call-bought { background: rgba(22,163,74,.06);  border-color: rgba(22,163,74,.2); }
.buysell-call-sold   { background: rgba(107,114,128,.06); }
.buysell-put-bought  { background: rgba(220,38,38,.06);   border-color: rgba(220,38,38,.2); }
.buysell-put-sold    { background: rgba(107,114,128,.06); }
.buysell-count { font-size: .68rem; color: var(--text-muted); margin-top: .15rem; }

/* ── Top contracts ───────────────────────────────────── */
.contracts-section {
  background: #0f172a;
  border-radius: .625rem;
  padding: 1rem 1.125rem;
  color: #f8fafc;
}
.contracts-title {
  font-size: .68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .09em;
  color: #64748b;
  margin-bottom: .75rem;
}
.contract-row {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: .5rem .75rem;
  padding: .6rem 0;
  border-bottom: 1px solid #1e293b;
}
.contract-row:last-child { border-bottom: none; }
.contract-badges { display: flex; gap: .35rem; flex-shrink: 0; }
.contract-details {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: .25rem .4rem;
  flex: 1;
  font-size: .85rem;
}
.contract-strike { font-weight: 800; font-size: .95rem; font-family: monospace; }
.contract-expiry { color: #94a3b8; }
.contract-premium { font-weight: 700; color: #e2e8f0; }
.contract-meta { color: #64748b; font-size: .78rem; }
.contract-sep { color: #334155; }
.contract-reason {
  width: 100%;
  font-size: .75rem;
  color: #64748b;
  padding-left: .1rem;
}
.contract-tag {
  display: inline-block;
  border-radius: .25rem;
  padding: .15rem .4rem;
  font-size: .65rem;
  font-weight: 700;
  letter-spacing: .05em;
  text-transform: uppercase;
}
.tag-sweep { background: rgba(251,191,36,.15); color: #fbbf24; border: 1px solid rgba(251,191,36,.3); }

/* ── Section title ───────────────────────────────────── */
.section-title {
  font-size: .68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .09em;
  color: var(--text-muted);
  margin-bottom: .75rem;
}

/* ── Trade Thesis card ───────────────────────────────── */
.thesis-card {
  border-radius: .625rem;
  border: 1px solid var(--border);
  padding: 1.125rem 1.25rem;
  background: var(--surface-2);
}
.thesis-bull  { border-left: 4px solid var(--bull); background: rgba(22,163,74,.04); }
.thesis-bear  { border-left: 4px solid var(--bear); background: rgba(220,38,38,.04); }
.thesis-dist  { border-left: 4px solid #d97706;     background: rgba(217,119,6,.04); }
.thesis-neutral { border-left: 4px solid #6b7280;   background: #f9fafb; }

.thesis-top {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 1rem;
  margin-bottom: .875rem;
}
.thesis-left { flex: 1; }
.thesis-bias-label {
  font-size: 1rem;
  font-weight: 800;
  letter-spacing: .02em;
  text-transform: uppercase;
  line-height: 1.2;
}
.thesis-timeframe {
  font-size: .73rem;
  color: var(--text-muted);
  margin-top: .2rem;
}
.thesis-right { text-align: right; flex-shrink: 0; }
.conf-score {
  font-size: 2rem;
  font-weight: 900;
  line-height: 1;
}
.conf-label {
  font-size: .65rem;
  font-weight: 700;
  letter-spacing: .07em;
  text-transform: uppercase;
  margin: .1rem 0 .3rem;
}
.conf-bar-track {
  width: 80px;
  height: 6px;
  background: #e5e7eb;
  border-radius: 3px;
  overflow: hidden;
  margin-left: auto;
}
.conf-bar-fill {
  height: 100%;
  border-radius: 3px;
  transition: width .5s ease;
}
.conf-high  { color: var(--bull); background: var(--bull); }
.conf-medium { color: #d97706;   background: #d97706; }
.conf-low   { color: var(--neutral); background: #9ca3af; }

.thesis-trade-box {
  background: #0f172a;
  color: #f8fafc;
  border-radius: .5rem;
  padding: .65rem .875rem;
  margin-bottom: .75rem;
}
.thesis-trade-label {
  font-size: .6rem;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: #64748b;
  margin-bottom: .2rem;
}
.thesis-trade-value {
  font-size: .95rem;
  font-weight: 700;
  font-family: 'SF Mono', monospace;
}

.thesis-execution {
  display: flex;
  flex-wrap: wrap;
  gap: .3rem .75rem;
  align-items: center;
  margin-bottom: .75rem;
  font-size: .8rem;
}
.exec-sep { color: var(--border); }
.exec-item { display: flex; gap: .35rem; align-items: baseline; }
.exec-lbl {
  font-size: .6rem;
  font-weight: 700;
  letter-spacing: .07em;
  text-transform: uppercase;
  color: var(--text-muted);
}
.exec-val { font-weight: 600; }

.thesis-why {
  border-top: 1px solid var(--border);
  padding-top: .65rem;
}
.thesis-why-title {
  font-size: .6rem;
  font-weight: 700;
  letter-spacing: .09em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: .4rem;
}
.thesis-why-row {
  display: flex;
  gap: .5rem;
  align-items: flex-start;
  padding: .15rem 0;
  font-size: .82rem;
}
.thesis-why-check { color: var(--bull); font-weight: 700; flex-shrink: 0; }

/* ── Flow by Timeframe ───────────────────────────────── */
.timeframe-section { }
.timeframe-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: .75rem;
}
@media (max-width: 575px) { .timeframe-grid { grid-template-columns: 1fr; } }

.tf-box {
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: .5rem;
  padding: .75rem .875rem;
}
.tf-empty { opacity: .5; }
.tf-label {
  font-size: .78rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .05em;
  margin-bottom: .1rem;
}
.tf-range {
  font-size: .68rem;
  color: var(--text-muted);
  margin-bottom: .5rem;
}
.tf-premium {
  font-size: 1.05rem;
  font-weight: 800;
  margin-bottom: .1rem;
}
.tf-trades {
  font-size: .7rem;
  color: var(--text-muted);
  margin-bottom: .4rem;
}
.tf-bars {
  display: flex;
  height: 5px;
  border-radius: 3px;
  overflow: hidden;
  background: #f1f5f9;
  margin-bottom: .35rem;
}
.tf-bar-bull { background: var(--bull); }
.tf-bar-bear { background: var(--bear); }
.tf-pcts {
  font-size: .65rem;
  color: var(--text-muted);
  margin-top: .3rem;
}
.tf-none {
  font-size: .75rem;
  color: #9ca3af;
  font-style: italic;
  margin-top: .5rem;
}

/* ── Strike Activity Heatmap ─────────────────────────── */
.heatmap-section { }
.heatmap-row {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .3rem 0;
  border-bottom: 1px solid #f1f5f9;
}
.heatmap-row:last-child { border-bottom: none; }
.heatmap-strike {
  width: 70px;
  flex-shrink: 0;
  font-size: .78rem;
  font-weight: 700;
  font-family: 'SF Mono', monospace;
  color: var(--text-muted);
}
.heatmap-bars {
  flex: 1;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.heatmap-bar {
  height: 16px;
  border-radius: 3px;
  display: flex;
  align-items: center;
  min-width: 4px;
  transition: width .4s ease;
}
.heatmap-bar-label {
  font-size: .6rem;
  font-weight: 600;
  padding: 0 .4rem;
  color: #fff;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.heatmap-bull { background: linear-gradient(90deg, #16a34a, #86efac); }
.heatmap-bear { background: linear-gradient(90deg, #dc2626, #fca5a5); }
.heatmap-total {
  width: 36px;
  flex-shrink: 0;
  font-size: .68rem;
  color: var(--text-muted);
  text-align: right;
}

/* ── Flow grade badge ────────────────────────────────── */
.grade-badge {
  display: inline-block;
  border-radius: .25rem;
  padding: .1rem .4rem;
  font-size: .68rem;
  font-weight: 800;
  letter-spacing: .03em;
  text-transform: uppercase;
  white-space: nowrap;
}
.grade-aplus { background: #052e16; color: #4ade80; }
.grade-a     { background: var(--bull-light); color: var(--bull); }
.grade-b     { background: #eff6ff; color: #2563eb; }
.grade-c     { background: #f1f5f9; color: #475569; }
.grade-d     { background: #fef3c7; color: #92400e; }
.grade-f     { background: var(--bear-light); color: var(--bear); }

.opening-tag {
  display: inline-block;
  border-radius: .2rem;
  padding: .05rem .3rem;
  font-size: .6rem;
  font-weight: 600;
  text-transform: uppercase;
  background: rgba(59,130,246,.1);
  color: #2563eb;
  margin-left: .2rem;
}

/* ── Final Verdict Box ───────────────────────────────── */
.verdict-box {
  border-radius: .625rem;
  border: 2px solid var(--border);
  overflow: hidden;
}
.verdict-take  { border-color: var(--bull); }
.verdict-watch { border-color: #d97706; }
.verdict-avoid { border-color: #9ca3af; }

.verdict-top {
  display: flex;
  align-items: flex-start;
  gap: 1.5rem;
  padding: 1rem 1.25rem;
  background: var(--surface-2);
  border-bottom: 1px solid var(--border);
  flex-wrap: wrap;
}
.verdict-decision {
  display: flex;
  align-items: center;
  gap: .5rem;
  flex-shrink: 0;
}
.verdict-icon { font-size: 1.5rem; line-height: 1; }
.verdict-label {
  font-size: 1.25rem;
  font-weight: 900;
  letter-spacing: .02em;
  text-transform: uppercase;
}
.verdict-take  .verdict-label { color: var(--bull); }
.verdict-watch .verdict-label { color: #d97706; }
.verdict-avoid .verdict-label { color: #6b7280; }

.verdict-meta {
  display: flex;
  flex-wrap: wrap;
  gap: .2rem .75rem;
  flex: 1;
}
.verdict-row {
  display: flex;
  gap: .35rem;
  align-items: baseline;
  font-size: .8rem;
}
.vm-key {
  font-size: .6rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .07em;
  color: var(--text-muted);
  white-space: nowrap;
}
.vm-val { font-weight: 600; }

.verdict-body {
  display: none; /* hidden for now — restore to "flex" to re-enable */
  gap: 1.5rem;
  padding: .875rem 1.25rem;
  flex-wrap: wrap;
}
.verdict-reasons { flex: 1; min-width: 180px; }
.verdict-risk     { flex: 1; min-width: 180px; }
.verdict-section-lbl {
  font-size: .6rem;
  font-weight: 700;
  letter-spacing: .09em;
  text-transform: uppercase;
  color: var(--text-muted);
  margin-bottom: .45rem;
}
.verdict-reason-row {
  display: flex;
  gap: .4rem;
  font-size: .82rem;
  padding: .15rem 0;
}
.verdict-check { color: var(--bull); font-weight: 700; flex-shrink: 0; }
.verdict-risk-text {
  font-size: .83rem;
  font-weight: 600;
  margin-bottom: .35rem;
  color: #b45309;
}
.verdict-warn-row {
  font-size: .77rem;
  color: var(--text-muted);
  padding: .1rem 0;
}

/* ── Market Structure Panel ──────────────────────────── */
.ms-panel {
  background: #0f172a;
  border-radius: .625rem;
  padding: .875rem 1.125rem;
  color: #e2e8f0;
  display: flex;
  flex-direction: column;
  gap: .6rem;
}
.ms-top {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: .5rem .875rem;
}
.ms-price-block { display: flex; align-items: baseline; gap: .4rem; }
.ms-price  { font-size: 1.2rem; font-weight: 800; font-family: 'SF Mono', monospace; }
.ms-change { font-size: .8rem; font-weight: 700; }

.ms-trend {
  display: inline-block;
  font-size: .65rem;
  font-weight: 800;
  letter-spacing: .08em;
  text-transform: uppercase;
  border-radius: .3rem;
  padding: .2rem .55rem;
}
.trend-bull    { background: rgba(22,163,74,.2);   color: #4ade80; border: 1px solid rgba(22,163,74,.3); }
.trend-bear    { background: rgba(220,38,38,.2);   color: #f87171; border: 1px solid rgba(220,38,38,.3); }
.trend-neutral { background: rgba(107,114,128,.2); color: #9ca3af; border: 1px solid rgba(107,114,128,.3); }

.ms-pct-row { display: flex; gap: .5rem; flex-wrap: wrap; }
.ms-pct { font-size: .75rem; font-weight: 600; }

.ms-ma-row {
  display: flex;
  flex-wrap: wrap;
  gap: .35rem .875rem;
  padding: .5rem 0;
  border-top: 1px solid #1e293b;
  border-bottom: 1px solid #1e293b;
}
.ms-ma-item { display: flex; align-items: baseline; gap: .35rem; }
.ms-ma-lbl  { font-size: .6rem; font-weight: 700; text-transform: uppercase; letter-spacing: .07em; color: #64748b; }
.ms-ma-val  { font-size: .85rem; font-weight: 700; font-family: 'SF Mono', monospace; }

.ms-range-row {
  display: flex;
  align-items: center;
  gap: .5rem;
}
.ms-range-lbl { font-size: .6rem; font-weight: 700; text-transform: uppercase; color: #64748b; flex-shrink: 0; }
.ms-range-lo, .ms-range-hi { font-size: .72rem; font-family: monospace; color: #94a3b8; white-space: nowrap; }
.ms-range-track {
  flex: 1;
  height: 6px;
  background: #1e293b;
  border-radius: 3px;
  position: relative;
  overflow: visible;
}
.ms-range-fill {
  position: absolute;
  top: 0; bottom: 0;
  background: linear-gradient(90deg, #1e40af, #3b82f6);
  border-radius: 3px;
}
.ms-range-dot {
  position: absolute;
  top: 50%;
  transform: translate(-50%, -50%);
  width: 10px; height: 10px;
  background: #f8fafc;
  border: 2px solid #3b82f6;
  border-radius: 50%;
}

.ms-levels-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: .25rem .5rem;
  font-size: .75rem;
}
.ms-levels-lbl { font-size: .6rem; font-weight: 700; text-transform: uppercase; color: #64748b; }
.ms-res-lbl { margin-left: .5rem; }
.ms-level {
  border-radius: .2rem;
  padding: .1rem .4rem;
  font-family: monospace;
  font-size: .75rem;
  font-weight: 600;
}
.ms-support    { background: rgba(22,163,74,.15);  color: #4ade80; }
.ms-resistance { background: rgba(220,38,38,.15);  color: #f87171; }

/* ── Chart Confirmation panel ────────────────────────── */
.ms-chart-confirm { display:flex; flex-direction:column; gap:.3rem; padding-top:.5rem; border-top:1px solid #1e293b; margin-top:.35rem; }
.ms-chart-row { display:flex; align-items:center; gap:.5rem; flex-wrap:wrap; }
.ms-chart-val { font-size:.82rem; font-weight:700; color:#e2e8f0; font-family:'SF Mono',ui-monospace,monospace; }
.ms-chart-zone { font-size:.6rem; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:#64748b; }
.ms-chart-signal-row { display:flex; align-items:center; gap:.5rem; margin-top:.2rem; }
.ms-chart-signal-badge { font-size:.65rem; font-weight:800; letter-spacing:.08em; text-transform:uppercase; border-radius:.3rem; padding:.2rem .55rem; }
.chart-sig-strong   { background:rgba(234,179,8,.2);   color:#fde047; border:1px solid rgba(234,179,8,.4); }
.chart-sig-confirm  { background:rgba(22,163,74,.2);   color:#4ade80; border:1px solid rgba(22,163,74,.3); }
.chart-sig-neutral  { background:rgba(107,114,128,.2); color:#9ca3af; border:1px solid rgba(107,114,128,.3); }
.chart-sig-conflict { background:rgba(220,38,38,.2);   color:#f87171; border:1px solid rgba(220,38,38,.3); }
.cf-strong   { border-color: rgba(234,179,8,.5)  !important; color:#fde047 !important; }
.cf-confirm  { border-color: rgba(22,163,74,.5)  !important; color:#4ade80 !important; }
.cf-neutral  { border-color: rgba(107,114,128,.4)!important; color:#9ca3af !important; }
.cf-conflict { border-color: rgba(220,38,38,.5)  !important; color:#f87171 !important; }
.ms-chart-signal-lbl { font-size:.6rem; font-weight:700; text-transform:uppercase; letter-spacing:.06em; color:#64748b; }

/* ── Flow Timeline mini chart ────────────────────────── */
.timeline-section { }
.timeline-chart {
  display: flex;
  align-items: stretch;
  gap: 3px;
  height: 140px;
  padding: 0 .25rem;
  overflow-x: auto;
}
.timeline-col {
  display: flex;
  flex-direction: column;
  align-items: center;
  flex: 1;
  min-width: 28px;
  max-width: 60px;
  position: relative;
}
.timeline-upper {
  flex: 1;
  display: flex;
  align-items: flex-end;
  justify-content: center;
  width: 100%;
}
.timeline-lower {
  flex: 1;
  display: flex;
  align-items: flex-start;
  justify-content: center;
  width: 100%;
}
.timeline-bar-bull {
  width: 70%;
  min-height: 2px;
  background: linear-gradient(to top, #16a34a, #86efac);
  border-radius: 2px 2px 0 0;
  transition: height .3s;
}
.timeline-bar-bear {
  width: 70%;
  min-height: 2px;
  background: linear-gradient(to bottom, #dc2626, #fca5a5);
  border-radius: 0 0 2px 2px;
  transition: height .3s;
}
.timeline-baseline {
  height: 2px;
  width: 100%;
  background: #cbd5e1;
  flex-shrink: 0;
}
.timeline-sweep-dot {
  width: 6px; height: 6px;
  border-radius: 50%;
  background: #f59e0b;
  border: 1px solid #d97706;
  flex-shrink: 0;
  margin: 1px 0;
}
.timeline-lbl {
  font-size: .55rem;
  color: var(--text-muted);
  text-align: center;
  margin-top: 3px;
  white-space: nowrap;
}
.timeline-legend {
  display: flex;
  gap: 1rem;
  margin-top: .4rem;
  font-size: .68rem;
  color: var(--text-muted);
}
.tl-bull { color: var(--bull); font-weight: 600; }
.tl-bear { color: var(--bear); font-weight: 600; }
.tl-sweep { color: #d97706; font-weight: 600; }

/* ── Smart Filter bar ────────────────────────────────── */
.filter-bar {
  display: flex;
  align-items: center;
  gap: .35rem;
  flex-wrap: wrap;
}
.filter-lbl {
  font-size: .7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--text-muted);
}
.filter-btn {
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: .375rem;
  padding: .25rem .65rem;
  font-size: .72rem;
  font-weight: 600;
  color: var(--text-muted);
  cursor: pointer;
  transition: all .12s;
}
.filter-btn:hover { border-color: #3b82f6; color: #3b82f6; }
.filter-btn.active {
  background: #1d4ed8;
  border-color: #1d4ed8;
  color: #fff;
}

/* ── Top Picks strip ──────────────────────────────────── */
.top-picks-panel {
  background: #fff;
  border: 1px solid var(--border);
  border-left: 4px solid #1d4ed8;
  border-radius: var(--radius);
  padding: .75rem 1rem;
}
.top-picks-header {
  display: flex;
  align-items: baseline;
  gap: .75rem;
  margin-bottom: .6rem;
}
.top-picks-title {
  font-size: .75rem;
  font-weight: 700;
  letter-spacing: .06em;
  text-transform: uppercase;
  color: #1d4ed8;
}
.top-picks-sub {
  font-size: .72rem;
  color: var(--text-muted);
}
.top-picks-list {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem;
}
.pick-pill {
  display: inline-flex;
  align-items: center;
  gap: .3rem;
  padding: .25rem .55rem;
  border-radius: .4rem;
  text-decoration: none;
  font-size: .75rem;
  font-weight: 600;
  border: 1px solid transparent;
  transition: transform .1s, box-shadow .1s;
}
.pick-pill:hover { transform: translateY(-1px); box-shadow: 0 2px 6px rgba(0,0,0,.12); }
.pick-pill.pick-bull { background: #dcfce7; border-color: #86efac; color: #166534; }
.pick-pill.pick-bear { background: #fee2e2; border-color: #fca5a5; color: #991b1b; }
.pick-ticker { font-size: .78rem; }
.pick-score { font-size: .68rem; padding: .1rem .3rem; border-radius: .25rem; font-weight: 700; }
.pick-score-high { background: #fef3c7; color: #92400e; }
.pick-score-med  { background: #dbeafe; color: #1e3a8a; }
.pick-score-low  { background: #f3f4f6; color: #374151; }
.pick-arrow { font-size: .65rem; }

/* ── Score conviction filter bar ──────────────────────── */
.score-filter-bar {
  display: flex;
  align-items: center;
  gap: .5rem;
  flex-wrap: wrap;
}
.score-filter-bar .filter-label {
  font-size: .75rem;
  font-weight: 600;
  color: var(--text-muted);
  text-transform: uppercase;
  letter-spacing: .05em;
}
.score-filter-btn {
  padding: .28rem .75rem;
  font-size: .75rem;
  font-weight: 600;
  border: 1px solid var(--border);
  border-radius: 2rem;
  background: #fff;
  color: var(--text-muted);
  cursor: pointer;
  transition: border-color .15s, color .15s, background .15s;
}
.score-filter-btn:hover { border-color: #3b82f6; color: #3b82f6; }
.score-filter-btn.active { background: #1d4ed8; border-color: #1d4ed8; color: #fff; }

/* ── Flow Strength Score badge ─────────────────────────── */
.fss-badge {
  font-size: .68rem;
  font-weight: 700;
  padding: .2rem .5rem;
  border-radius: .35rem;
  letter-spacing: .02em;
}
.fss-high { background: #fef3c7; color: #78350f; border: 1px solid #fcd34d; }
.fss-med  { background: #dbeafe; color: #1e3a8a; border: 1px solid #93c5fd; }
.fss-low  { background: #f3f4f6; color: #4b5563; border: 1px solid #d1d5db; }

/* ── Time window filter bar ──────────────────────────── */
.tw-bar {
  display: flex;
  align-items: center;
  gap: .4rem;
  flex-wrap: wrap;
}
.tw-label {
  font-size: .7rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--text-muted);
  margin-right: .2rem;
}
.tw-btn {
  padding: .3rem .75rem;
  border-radius: 2rem;
  border: 1px solid var(--border);
  background: var(--surface);
  color: var(--text-muted);
  font-size: .8rem;
  font-weight: 600;
  text-decoration: none;
  transition: background .12s, color .12s, border-color .12s;
}
.tw-btn:hover { background: var(--surface-2); color: var(--text); }
.tw-active          { background: #1e3a5f; color: #fff; border-color: #1e3a5f; }
.tw-active:hover    { background: #1e3a5f; color: #fff; }
.tw-today.tw-active  { background: #16a34a; border-color: #16a34a; }
.tw-5d.tw-active     { background: #0369a1; border-color: #0369a1; }
.tw-30d.tw-active    { background: #7c3aed; border-color: #7c3aed; }
.tw-all.tw-active    { background: #374151; border-color: #374151; }
.tw-swing.tw-active  { background: #0369a1; border-color: #0369a1; }
.tw-weekly.tw-active { background: #b45309; border-color: #b45309; }
.tw-sep { color: var(--border); margin: 0 .35rem; }

/* Weekly tier badges */
.wtier-badge { display: inline-block; padding: .15rem .45rem; border-radius: 4px; font-size: .7rem; font-weight: 700; letter-spacing: .03em; white-space: nowrap; }
.wtier-strike { background: #7f1d1d; color: #fca5a5; border: 1px solid #991b1b; }
.wtier-high   { background: #451a03; color: #fcd34d; border: 1px solid #92400e; }
.wtier-radar  { background: #1e3a5f; color: #93c5fd; border: 1px solid #1d4ed8; }
.wtier-none   { display: none; }
.tw-note {
  font-size: .75rem;
  color: var(--text-muted);
  margin-left: .5rem;
  font-style: italic;
}
.tw-history-link {
  margin-left: .5rem;
  border-style: dashed;
  color: #3b82f6;
  border-color: #bfdbfe;
}
.tw-history-link:hover { background: #eff6ff; color: #1d4ed8; border-color: #93c5fd; }

/* ── History sessions strip ──────────────────────────── */
.history-sessions {
  display: flex;
  gap: .65rem;
  overflow-x: auto;
  padding-bottom: .4rem;
  flex-wrap: nowrap;
  -webkit-overflow-scrolling: touch;
  scrollbar-width: thin;
}
.history-session-card {
  flex-shrink: 0;
  min-width: 190px;
  background: var(--surface);
  border: 1.5px solid var(--border);
  border-radius: var(--radius);
  padding: .65rem 1rem;
  text-decoration: none;
  color: var(--text);
  transition: border-color .15s, background .15s;
}
.history-session-card:hover { border-color: #3b82f6; color: var(--text); background: #f8faff; }
.hsc-active { border-color: #3b82f6; background: #eff6ff; }
.hsc-date { font-size: .72rem; color: var(--text-muted); margin-bottom: .15rem; }
.hsc-file {
  font-size: .85rem;
  font-weight: 700;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  max-width: 170px;
}
.hsc-stats { display: flex; gap: .35rem; align-items: center; font-size: .72rem; color: var(--text-muted); margin-top: .25rem; }

/* ── Dashboard panels ────────────────────────────────── */
.dashboard-panels {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 1rem;
}
@media (max-width: 700px) {
  .dashboard-panels { grid-template-columns: 1fr; }
}
.dash-panel {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  overflow: hidden;
}
.dash-panel-header {
  display: flex;
  align-items: center;
  gap: .5rem;
  padding: .65rem 1rem;
  font-weight: 700;
  font-size: .85rem;
  letter-spacing: .01em;
}
.dash-panel-bull .dash-panel-header {
  background: var(--bull-light);
  color: #15803d;
  border-bottom: 1px solid var(--bull-mid);
}
.dash-panel-bear .dash-panel-header {
  background: var(--bear-light);
  color: #b91c1c;
  border-bottom: 1px solid var(--bear-mid);
}
.dash-panel-icon { font-size: .75rem; }
.dash-panel-count {
  margin-left: auto;
  font-weight: 400;
  font-size: .75rem;
  opacity: .7;
}
.dash-panel-body { padding: .25rem 0; }

.dash-panel-analyst .dash-panel-header {
  background: #1e1b4b;
  color: #a5b4fc;
  border-bottom: 1px solid #312e81;
}
.analyst-panel-body {
  display: flex;
  flex-wrap: wrap;
  gap: .35rem;
  padding: .6rem .75rem;
}
.ar-row {
  display: flex;
  align-items: center;
  gap: .4rem;
  padding: .25rem .55rem;
  border-radius: 6px;
  font-size: .78rem;
  border: 1px solid var(--border);
  background: var(--surface);
}
.ar-row.ar-bull { border-color: var(--bull-mid); background: var(--bull-light); }
.ar-row.ar-bear { border-color: var(--bear-mid); background: var(--bear-light); }
.ar-dir  { font-size: .7rem; }
.ar-bull .ar-dir { color: #15803d; }
.ar-bear .ar-dir { color: #b91c1c; }
.ar-ticker { font-weight: 700; font-size: .8rem; }
.ar-firm   { color: var(--muted); font-size: .72rem; }
.ar-rating { font-size: .72rem; }
.ar-score  { font-size: .68rem; color: #f59e0b; margin-left: .1rem; }
.analyst-match-badge {
  display: inline-block;
  font-size: .6rem;
  font-weight: 700;
  padding: 0 .3rem;
  border-radius: 3px;
  margin-left: .3rem;
  vertical-align: middle;
}
.analyst-match-badge.ar-bullish { background: var(--bull-light); color: #15803d; border: 1px solid var(--bull-mid); }
.analyst-match-badge.ar-bearish { background: var(--bear-light); color: #b91c1c; border: 1px solid var(--bear-mid); }

.dash-row {
  display: flex;
  align-items: center;
  gap: .6rem;
  padding: .45rem 1rem;
  text-decoration: none;
  color: var(--text);
  border-bottom: 1px solid var(--border);
  transition: background .12s;
}
.dash-row:last-child { border-bottom: none; }
.dash-row:hover { background: var(--surface-2); color: var(--text); }

.dash-rank {
  width: 1.4rem;
  text-align: right;
  font-size: .75rem;
  color: var(--text-muted);
  flex-shrink: 0;
}
.dash-ticker {
  font-weight: 700;
  font-size: .9rem;
  width: 4rem;
  flex-shrink: 0;
}
.dash-premium {
  margin-left: auto;
  font-size: .8rem;
  font-weight: 600;
  color: var(--text-muted);
}
.dash-verdict { padding: .15rem .35rem; font-size: .7rem; }


/* ── Watcher status bar ───────────────────────────────── */
.watcher-bar {
  padding: .6rem 1rem;
  border-radius: var(--radius);
  font-size: .82rem;
  font-weight: 500;
}
.watcher-analyzing { background: #eff6ff; border: 1px solid #93c5fd; color: #1e40af; }
.watcher-done      { background: #f0fdf4; border: 1px solid #86efac; color: #166534; }
.watcher-info      { background: #f9fafb; border: 1px solid var(--border); color: var(--text-muted); }
.watcher-bar a     { color: inherit; font-weight: 700; }

/* ── Saved banner + link ──────────────────────────────── */
.saved-link { font-size: .8rem; font-weight: 600; color: #1d4ed8; text-decoration: none; }
.saved-link:hover { text-decoration: underline; }

/* ── Results table page ───────────────────────────────── */
.results-toolbar {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
  flex-wrap: wrap;
}
.results-toolbar-left { display: flex; flex-direction: column; gap: .4rem; }
.session-select {
  padding: .35rem .6rem;
  border: 1px solid var(--border);
  border-radius: .4rem;
  font-size: .82rem;
  background: #fff;
  max-width: 480px;
}
.session-stats  { font-size: .75rem; color: var(--text-muted); }
.session-info   { display: flex; align-items: center; gap: .35rem; flex-wrap: wrap; font-size: .75rem; color: var(--text-muted); }
.session-filename { font-weight: 600; color: var(--text); }
.import-stats   { color: #16a34a; font-weight: 500; }
.import-dedup   { color: #9ca3af; }

/* Analyst rating badges */
.abadge { display: inline-block; padding: .15rem .45rem; border-radius: .3rem; font-size: .7rem; font-weight: 600; letter-spacing: .02em; }
.abadge-strong-buy  { background: #dcfce7; color: #15803d; }
.abadge-buy         { background: #d1fae5; color: #047857; }
.abadge-hold        { background: #fef9c3; color: #92400e; }
.abadge-sell        { background: #fee2e2; color: #b91c1c; }
.abadge-strong-sell { background: #fecaca; color: #7f1d1d; }
.abadge-none        { background: #f3f4f6; color: #9ca3af; }
.analyst-count { font-size: .7rem; color: var(--text-muted); margin-left: .2rem; }
.pt-dist  { font-size: .7rem; font-weight: 500; margin-left: .3rem; }
.pt-up    { color: #16a34a; }
.pt-down  { color: #dc2626; }

.verdict-filters { display: flex; gap: .4rem; flex-wrap: wrap; margin-bottom: .5rem; }
.vfilter-btn  { padding: .25rem .7rem; border-radius: 2rem; font-size: .75rem; font-weight: 500; text-decoration: none; border: 1px solid var(--border); color: var(--text-muted); background: #fff; transition: all .15s; }
.vfilter-btn:hover { border-color: #94a3b8; color: var(--text); }
.vfilter-active   { background: #1e293b !important; color: #fff !important; border-color: #1e293b !important; }
.vfilter-take  { border-color: #bbf7d0; color: #15803d; }
.vfilter-take.vfilter-active  { background: #16a34a !important; border-color: #16a34a !important; }
.vfilter-watch { border-color: #fde68a; color: #92400e; }
.vfilter-watch.vfilter-active { background: #d97706 !important; border-color: #d97706 !important; }
.vfilter-avoid { border-color: #fecaca; color: #b91c1c; }
.vfilter-avoid.vfilter-active { background: #dc2626 !important; border-color: #dc2626 !important; }
.vfilter-calls { border-color: #bfdbfe; color: #1d4ed8; }
.vfilter-calls.vfilter-active { background: #2563eb !important; border-color: #2563eb !important; color: #fff !important; }
.cf-strong.vfilter-active   { background:rgba(234,179,8,.3)   !important; border-color:rgba(234,179,8,.7)  !important; color:#fde047 !important; }
.cf-confirm.vfilter-active  { background:rgba(22,163,74,.3)   !important; border-color:rgba(22,163,74,.7)  !important; color:#4ade80 !important; }
.cf-neutral.vfilter-active  { background:rgba(107,114,128,.3) !important; border-color:rgba(107,114,128,.6)!important; color:#cbd5e1 !important; }
.cf-conflict.vfilter-active { background:rgba(220,38,38,.3)   !important; border-color:rgba(220,38,38,.7)  !important; color:#f87171 !important; }

.call-bought-badge { display: inline-block; padding: .1rem .45rem; border-radius: .9rem; font-size: .78rem; font-weight: 600; background: #1e3a5f; color: #93c5fd; border: 1px solid #2563eb33; }
.call-bought-badge.cb-pure { background: #14532d; color: #86efac; border-color: #16a34a44; }

.top-strike-cell { white-space: nowrap; }
.top-strike-val { font-weight: 600; font-size: .85rem; color: #e2e8f0; }
.ts-hit  { color: #4ade80; font-size: .75rem; margin-left: .25rem; font-weight: 700; }
.ts-miss { color: #f87171; font-size: .75rem; margin-left: .25rem; font-weight: 600; }

.search-form { display: flex; align-items: center; gap: .4rem; }
.search-wrap { position: relative; }
.ticker-suggestions {
  position: absolute;
  top: calc(100% + 2px);
  left: 0;
  min-width: 100%;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: .4rem;
  box-shadow: 0 4px 16px rgba(0,0,0,.35);
  z-index: 200;
  display: none;
  overflow: hidden;
}
.ticker-suggestions.open { display: block; }
.ts-item {
  padding: .35rem .7rem;
  cursor: pointer;
  font-size: .82rem;
  font-weight: 600;
  letter-spacing: .02em;
  color: var(--text);
  white-space: nowrap;
}
.ts-item:hover, .ts-item.ts-focused { background: var(--surface-2); color: #60a5fa; }
.search-input {
  padding: .3rem .65rem;
  border: 1px solid var(--border);
  border-radius: .4rem;
  font-size: .82rem;
  width: 160px;
}

/* ── Multi-ticker chip filter ────────────────────────── */
.multifilter-wrap {
  display: inline-flex; flex-wrap: wrap; align-items: center;
  gap: .3rem; border: 1px solid var(--border); border-radius: .4rem;
  padding: .2rem .5rem; background: #fff; cursor: text; min-height: 2rem;
}
.multifilter-wrap:focus-within { border-color: #60a5fa; box-shadow: 0 0 0 2px rgba(96,165,250,.2); }
.mf-chips { display: inline-flex; flex-wrap: wrap; gap: .25rem; align-items: center; }
.mf-chip {
  display: inline-flex; align-items: center; gap: .25rem;
  background: #1e3a5f; color: #93c5fd;
  border-radius: 1rem; padding: .12rem .5rem;
  font-size: .72rem; font-weight: 700; letter-spacing: .03em; white-space: nowrap;
}
.mf-chip-x { cursor: pointer; opacity: .65; font-size: .6rem; line-height: 1; }
.mf-chip-x:hover { opacity: 1; }
.mf-input {
  border: none; outline: none; background: transparent;
  font-size: .82rem; min-width: 90px; flex: 1; color: var(--text);
  padding: .1rem 0;
}
.search-btn {
  padding: .3rem .65rem;
  border: 1px solid var(--border);
  border-radius: .4rem;
  background: #fff;
  cursor: pointer;
  font-size: .82rem;
}
.search-clear {
  font-size: .75rem;
  color: var(--text-muted);
  text-decoration: none;
  padding: .2rem .4rem;
  border-radius: .3rem;
  background: #f3f4f6;
}

.results-table {
  width: 100%;
  border-collapse: collapse;
  font-size: .82rem;
  background: #fff;
  border: 1px solid var(--border);
  border-radius: var(--radius);
  overflow: hidden;
}
.results-table thead tr { background: #1e293b; color: #e2e8f0; }
.results-table th {
  padding: .6rem .75rem;
  font-weight: 600;
  font-size: .72rem;
  letter-spacing: .04em;
  text-transform: uppercase;
  white-space: nowrap;
}
.results-table td { padding: .55rem .75rem; border-bottom: 1px solid #f1f5f9; vertical-align: middle; }
.results-row:last-child td { border-bottom: none; }
.results-row:hover td { background: #f8fafc; }
.col-rank { width: 36px; text-align: right; }
.col-ticker { font-size: .9rem; }

.sort-link { color: #94a3b8; text-decoration: none; white-space: nowrap; }
.sort-link:hover { color: #e2e8f0; }
.sort-active { color: #fff !important; }

/* Verdict badges in results table */
.vbadge {
  display: inline-block;
  padding: .2rem .5rem;
  border-radius: .35rem;
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .03em;
  white-space: nowrap;
}
.vbadge-take  { background: #dcfce7; color: #166534; border: 1px solid #86efac; }
.vbadge-watch { background: #fef3c7; color: #92400e; border: 1px solid #fcd34d; }
.vbadge-avoid { background: #f1f5f9; color: #64748b; border: 1px solid #cbd5e1; }

.detail-btn {
  font-size: .75rem;
  font-weight: 600;
  color: #1d4ed8;
  text-decoration: none;
  padding: .25rem .55rem;
  border: 1px solid #bfdbfe;
  border-radius: .35rem;
  white-space: nowrap;
  background: #eff6ff;
}
.detail-btn:hover { background: #dbeafe; }

/* ── Pagination ───────────────────────────────────────── */
.pagination-bar {
  display: flex;
  align-items: center;
  gap: .35rem;
  flex-wrap: wrap;
}
.page-btn {
  padding: .3rem .65rem;
  border: 1px solid var(--border);
  border-radius: .35rem;
  font-size: .78rem;
  font-weight: 500;
  text-decoration: none;
  color: var(--text);
  background: #fff;
  transition: background .12s;
}
.page-btn:hover { background: #f1f5f9; }
.page-active { background: #1d4ed8 !important; color: #fff !important; border-color: #1d4ed8 !important; }
.page-info { font-size: .75rem; color: var(--text-muted); margin-left: .5rem; }

/* ── Detail page back link ────────────────────────────── */
.back-link {
  font-size: .82rem;
  font-weight: 600;
  color: #1d4ed8;
  text-decoration: none;
}
.back-link:hover { text-decoration: underline; }

/* ── Shared utility ───────────────────────────────────── */
.oa-btn-secondary {
  padding: .45rem 1rem;
  font-size: .82rem;
  font-weight: 600;
  border: 1px solid #1d4ed8;
  border-radius: .5rem;
  color: #1d4ed8;
  background: #fff;
  text-decoration: none;
  cursor: pointer;
  transition: background .12s;
}
.oa-btn-secondary:hover { background: #eff6ff; }

/* ── Weekly Flow page ────────────────────────────────── */
.weekly-header {
  background: linear-gradient(135deg, #0f172a 0%, #1a1040 100%);
  border-radius: var(--radius);
  padding: 1.75rem 2rem;
  color: #fff;
}
.weekly-header-inner {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 1.25rem;
}
.weekly-title {
  font-size: 1.6rem;
  font-weight: 800;
  letter-spacing: -.02em;
  margin: 0 0 .25rem;
}
.weekly-title-icon { font-size: 1.4rem; }
.weekly-subtitle { color: #94a3b8; font-size: .85rem; margin: 0; }

.weekly-stats { display: flex; gap: .75rem; flex-wrap: wrap; align-items: flex-start; }
.wstat {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: .6rem .875rem;
  border-radius: .5rem;
  min-width: 80px;
  text-align: center;
}
.wstat-fire { background: rgba(239,68,68,.2); border: 1px solid rgba(239,68,68,.35); }
.wstat-zap  { background: rgba(251,191,36,.2); border: 1px solid rgba(251,191,36,.35); }
.wstat-eye  { background: rgba(148,163,184,.15); border: 1px solid rgba(148,163,184,.25); }
.wstat-val  { font-size: 1.6rem; font-weight: 900; line-height: 1; color: #fff; }
.wstat-lbl  { font-size: .6rem; font-weight: 700; letter-spacing: .07em; text-transform: uppercase; color: #94a3b8; margin-top: .2rem; }

/* Tier filter buttons */
.weekly-tier-btn {
  padding: .3rem .8rem;
  border-radius: 2rem;
  border: 1px solid var(--border);
  background: #fff;
  color: var(--text-muted);
  font-size: .78rem;
  font-weight: 600;
  text-decoration: none;
  transition: all .12s;
}
.weekly-tier-btn:hover { border-color: #94a3b8; color: var(--text); }
.wtb-active { background: #1e293b !important; color: #fff !important; border-color: #1e293b !important; }
.wtb-fire.wtb-active { background: #dc2626 !important; border-color: #dc2626 !important; }
.wtb-zap.wtb-active  { background: #d97706 !important; border-color: #d97706 !important; }
.wtb-eye.wtb-active  { background: #0369a1 !important; border-color: #0369a1 !important; }

/* Grid of cards */
.weekly-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(420px, 1fr));
  gap: 1rem;
}
@media (max-width: 500px) { .weekly-grid { grid-template-columns: 1fr; } }

/* Individual card */
.weekly-card {
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: var(--radius);
  box-shadow: var(--shadow-md);
  padding: 1rem 1.125rem;
  display: flex;
  flex-direction: column;
  gap: .75rem;
}

.weekly-card-top {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 1rem;
}
.weekly-card-left { flex: 1; }
.weekly-card-right { text-align: right; flex-shrink: 0; }

.weekly-tier-badge {
  display: inline-block;
  padding: .18rem .55rem;
  border-radius: .35rem;
  font-size: .68rem;
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
}
.wtier-fire { background: #fef2f2; color: #b91c1c; border: 1px solid #fecaca; }
.wtier-zap  { background: #fefce8; color: #92400e; border: 1px solid #fde68a; }
.wtier-eye  { background: #f0f9ff; color: #075985; border: 1px solid #bae6fd; }

.weekly-repeat-badge {
  display: inline-block;
  font-size: .68rem;
  font-weight: 700;
  color: #6d28d9;
  background: #f5f3ff;
  border: 1px solid #ddd6fe;
  border-radius: .3rem;
  padding: .15rem .45rem;
}
.weekly-ticker {
  font-size: 1.5rem;
  font-weight: 900;
  letter-spacing: .03em;
  font-family: 'SF Mono', monospace;
  line-height: 1.1;
  margin: .25rem 0 .15rem;
}
.weekly-spot { font-size: .78rem; color: var(--text-muted); }
.wbias-bull { color: var(--bull); }
.wbias-bear { color: var(--bear); }
.wbias-mix  { color: #d97706; }

/* DTE block */
.weekly-dte-block { margin-bottom: .3rem; display: flex; align-items: baseline; gap: .35rem; justify-content: flex-end; }
.weekly-dte {
  display: inline-block;
  font-size: .78rem;
  font-weight: 800;
  letter-spacing: .06em;
  text-transform: uppercase;
  border-radius: .35rem;
  padding: .2rem .55rem;
}
.dte-urgent { background: #fef2f2; color: #b91c1c; border: 1px solid #fecaca; }
.dte-hot    { background: #fff7ed; color: #c2410c; border: 1px solid #fed7aa; }
.dte-warm   { background: #fefce8; color: #92400e; border: 1px solid #fde68a; }
.dte-pill   { display: inline-block; padding: .1rem .35rem; border-radius: .25rem; font-size: .65rem; font-weight: 700; }

.weekly-top-strike {
  font-size: .9rem;
  font-weight: 700;
  font-family: 'SF Mono', monospace;
}

/* Stats row */
.weekly-stats-row {
  display: flex;
  gap: .5rem;
  flex-wrap: wrap;
  background: var(--surface-2);
  border: 1px solid var(--border);
  border-radius: .5rem;
  padding: .6rem .75rem;
}
.wmetric { flex: 1; min-width: 70px; text-align: center; }
.wmetric-val { font-size: .9rem; font-weight: 700; line-height: 1.2; }
.wmetric-lbl { font-size: .58rem; text-transform: uppercase; letter-spacing: .05em; color: var(--text-muted); margin-top: .1rem; }

/* Sweep ratio bar */
.weekly-sweep-bar-row {
  display: flex;
  align-items: center;
  gap: .6rem;
}
.weekly-sweep-bar-lbl { font-size: .68rem; font-weight: 600; color: var(--text-muted); white-space: nowrap; min-width: 70px; }
.weekly-sweep-bar-track {
  flex: 1;
  height: 6px;
  background: #f1f5f9;
  border-radius: 3px;
  overflow: hidden;
}
.weekly-sweep-bar-fill {
  height: 100%;
  background: linear-gradient(90deg, #16a34a, #86efac);
  border-radius: 3px;
  transition: width .4s ease;
}

/* Trade details */
.weekly-trades-details > summary {
  cursor: pointer;
  font-size: .78rem;
  color: var(--text-muted);
  font-weight: 600;
  user-select: none;
  list-style: none;
  display: flex;
  align-items: center;
  gap: .4rem;
  padding: .2rem 0;
}
.weekly-trades-details > summary::before { content: "▶"; font-size: .55rem; color: #9ca3af; transition: transform .15s; }
.weekly-trades-details[open] > summary::before { transform: rotate(90deg); }
.weekly-trades-details > summary::-webkit-details-marker { display: none; }
.weekly-trades-details > summary:hover { color: var(--text); }
.weekly-trades-table { font-size: .78rem; }

/* ── Buysell grid clickable cards ────────────────────── */
.buysell-clickable {
  cursor: pointer;
  transition: border-color .15s, box-shadow .15s, transform .1s;
  user-select: none;
}
.buysell-clickable:hover {
  border-color: #93c5fd;
  box-shadow: 0 0 0 2px rgba(59,130,246,.15);
  transform: translateY(-1px);
}
.buysell-active {
  border-color: #3b82f6 !important;
  box-shadow: 0 0 0 2px rgba(59,130,246,.25) !important;
}
.buysell-toggle-icon {
  font-size: .55rem;
  opacity: .5;
  margin-left: .2rem;
}

/* ── Buysell detail panel ─────────────────────────────── */
.buysell-detail-panel {
  border: 1px solid #93c5fd;
  border-radius: var(--radius);
  background: #eff6ff;
  overflow: hidden;
}
.buysell-detail-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: .5rem .875rem;
  background: #dbeafe;
  border-bottom: 1px solid #93c5fd;
}
.buysell-detail-title {
  font-size: .75rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: #1e40af;
}
.buysell-detail-close {
  background: none;
  border: none;
  font-size: .75rem;
  color: #6b7280;
  cursor: pointer;
  padding: 0 .25rem;
  line-height: 1;
}
.buysell-detail-close:hover { color: #dc2626; }
.buysell-live-btn {
  background: #f0fdf4; color: #15803d;
  border: 1px solid #86efac; border-radius: .35rem;
  padding: .2rem .6rem; font-size: .72rem; font-weight: 600;
  cursor: pointer; white-space: nowrap;
}
.buysell-live-btn:hover:not(:disabled) { background: #dcfce7; }
.buysell-live-btn:disabled { opacity: .6; cursor: wait; }
.live-price-loaded { font-weight: 600; color: #15803d; }
.trade-quick-btn {
  background: #1e293b; color: #e2e8f0;
  border: 1px solid #334155; border-radius: .3rem;
  padding: .18rem .55rem; font-size: .7rem; font-weight: 600;
  cursor: pointer; white-space: nowrap;
}
.trade-quick-btn:hover { background: #334155; }
.buysell-detail-table { background: #fff; }

/* ── Trade action badges ──────────────────────────────── */
.trade-action-badge {
  display: inline-block;
  padding: .15rem .45rem;
  border-radius: .3rem;
  font-size: .72rem;
  font-weight: 700;
  letter-spacing: .05em;
  font-family: 'SF Mono', monospace;
}
.tab-bto { background: #dcfce7; color: #15803d; border: 1px solid #86efac; }
.tab-sto { background: #fef3c7; color: #92400e; border: 1px solid #fcd34d; }

/* ── Log Trade panel ──────────────────────────────────── */
.log-trade-suggested {
  display: flex;
  align-items: center;
  gap: .75rem;
  background: #0f172a;
  color: #f8fafc;
  border-radius: .5rem;
  padding: .65rem .875rem;
}
.log-trade-label {
  font-size: .6rem;
  font-weight: 700;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: #64748b;
  flex-shrink: 0;
}
.log-trade-value {
  font-size: .95rem;
  font-weight: 700;
  font-family: 'SF Mono', monospace;
}
.log-trade-fields {
  display: flex;
  flex-wrap: wrap;
  gap: 1.25rem;
  align-items: flex-end;
}
.log-trade-field { display: flex; flex-direction: column; gap: .3rem; }
.log-trade-field-label {
  font-size: .68rem;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: .06em;
  color: var(--text-muted);
}
.log-trade-input {
  padding: .35rem .6rem;
  border: 1px solid var(--border);
  border-radius: .4rem;
  font-size: .9rem;
  font-weight: 600;
  background: #fff;
  outline: none;
  transition: border-color .15s;
}
.log-trade-input:focus { border-color: #3b82f6; }
.log-trade-preview .log-trade-value {
  background: transparent;
  color: var(--text);
  font-size: .85rem;
  padding: 0;
}

/* ── Close trade button ───────────────────────────────── */
.close-trade-btn {
  font-size: .72rem;
  font-weight: 600;
  color: #b91c1c;
  border: 1px solid #fecaca;
  border-radius: .3rem;
  background: #fef2f2;
  padding: .2rem .55rem;
  cursor: pointer;
  white-space: nowrap;
}
.close-trade-btn:hover { background: #fee2e2; }
.port-sort-icon { font-size:.65rem; margin-left:.15rem; }
.port-pager { display:flex; align-items:center; gap:.6rem; padding:.6rem 1rem; border-top:1px solid var(--border); }
.port-pager-btn { padding:.25rem .7rem; border:1px solid var(--border); border-radius:.35rem; background:#fff; cursor:pointer; font-size:.78rem; color:var(--text-muted); }
.port-pager-btn:hover:not(:disabled) { border-color:#94a3b8; color:var(--text); }
.port-pager-btn:disabled { opacity:.4; cursor:default; }
.port-pager-info { font-size:.78rem; color:var(--text-muted); }

/* ── Delta change indicators ──────────────────────────── */
.delta-up   { color: var(--bull); font-size: .68rem; font-weight: 700; margin-left: .3rem; white-space: nowrap; }
.delta-down { color: var(--bear); font-size: .68rem; font-weight: 700; margin-left: .3rem; white-space: nowrap; }

/* ── Expiry Breakdown Table ──────────────────────────── */
.expiry-table th, .expiry-table td { white-space: nowrap; }
.expiry-bull-bar-wrap {
  position: relative;
  width: 80px;
  height: 16px;
  background: #f3f4f6;
  border-radius: .25rem;
  overflow: hidden;
  display: flex;
  align-items: center;
}
.expiry-bull-bar {
  position: absolute;
  left: 0; top: 0; height: 100%;
  background: linear-gradient(90deg, #16a34a55, #16a34a99);
  border-radius: .25rem;
  transition: width .3s;
}
.expiry-bull-pct {
  position: relative;
  font-size: .68rem;
  font-weight: 700;
  color: #374151;
  padding-left: .3rem;
  z-index: 1;
}
.expiry-trade {
  font-family: monospace;
  font-size: .78rem;
  font-weight: 700;
  color: #1d4ed8;
  background: #eff6ff;
  border: 1px solid #bfdbfe;
  border-radius: .3rem;
  padding: .15rem .45rem;
  white-space: nowrap;
}

/* ── Market data error ───────────────────────────────── */
.ms-error {
  font-size: .75rem;
  color: #92400e;
  background: #fef3c7;
  border: 1px solid #fde68a;
  border-radius: .4rem;
  padding: .35rem .7rem;
}

/* ── Strike Zone Panel ───────────────────────────────── */
.sz-panel { }
.sz-verdict {
  font-size: .82rem;
  font-weight: 700;
  padding: .45rem .75rem;
  border-radius: .45rem;
  margin-bottom: .75rem;
  letter-spacing: .01em;
}
.sz-bull    { background: #dcfce7; color: #15803d; border: 1px solid #bbf7d0; }
.sz-bear    { background: #fee2e2; color: #b91c1c; border: 1px solid #fecaca; }
.sz-neutral { background: #f3f4f6; color: #374151; border: 1px solid #e5e7eb; }

.sz-range-bar {
  position: relative;
  height: 20px;
  background: #f3f4f6;
  border-radius: .35rem;
  margin-bottom: .5rem;
  overflow: visible;
}
.sz-zone {
  position: absolute;
  top: 0;
  height: 100%;
  border-radius: .25rem;
  min-width: 4px;
}
.sz-buy-zone    { background: rgba(22, 163, 74, 0.35); border: 1px solid #16a34a; }
.sz-resist-zone { background: rgba(220, 38,  38, 0.30); border: 1px solid #dc2626; }
.sz-spot-marker {
  position: absolute;
  top: -4px;
  width: 2px;
  height: calc(100% + 8px);
  background: #1d4ed8;
  border-radius: 1px;
  transform: translateX(-50%);
}
.sz-spot-marker::after {
  content: attr(title);
  position: absolute;
  top: -18px;
  left: 50%;
  transform: translateX(-50%);
  font-size: .6rem;
  font-weight: 700;
  color: #1d4ed8;
  white-space: nowrap;
}
.sz-legend {
  display: flex;
  flex-wrap: wrap;
  gap: .6rem;
  font-size: .7rem;
  font-weight: 600;
  margin-top: .35rem;
}
.sz-leg-bull { color: #15803d; }
.sz-leg-bear { color: #b91c1c; }
.sz-leg-spot { color: #1d4ed8; }


/* ── Footer ──────────────────────────────────────────── */
.footer { background: #f9fafb; border-top: 1px solid var(--border) !important; }

/* ── Spread Ideas ────────────────────────────────────── */
.spread-ideas-body { display: flex; flex-direction: column; gap: 1.25rem; }

/* Best high-prob card */
.spread-best-card {
  border-radius: 8px;
  border: 1px solid;
  overflow: hidden;
}
.spread-credit { border-color: #166534; background: #052e16; }
.spread-debit  { border-color: #1e40af; background: #0c1a3a; }

.spread-best-header {
  display: flex; align-items: center; justify-content: space-between;
  padding: .55rem .9rem;
  border-bottom: 1px solid rgba(255,255,255,.08);
  background: rgba(255,255,255,.04);
}
.spread-best-label {
  font-size: .75rem; font-weight: 700; letter-spacing: .06em;
  color: #fbbf24; text-transform: uppercase;
}
.spread-score-badge {
  font-size: .95rem; font-weight: 700; color: #e2e8f0;
}
.spread-score-badge.sm { font-size: .8rem; }
.spread-score-denom { font-size: .65rem; color: #64748b; font-weight: 400; }

.spread-best-body { padding: .8rem .9rem; display: flex; flex-direction: column; gap: .6rem; }

.spread-meta-row { display: flex; align-items: center; gap: .75rem; }
.spread-strategy { font-size: .9rem; font-weight: 700; color: #e2e8f0; }
.spread-pop { font-size: .75rem; font-weight: 700; padding: .15rem .5rem;
  border-radius: 99px; white-space: nowrap; }
.pop-high { background: #14532d; color: #4ade80; border: 1px solid #166534; }
.pop-med  { background: #78350f; color: #fcd34d; border: 1px solid #92400e; }
.spread-pop-row { display: flex; align-items: center; gap: .6rem; margin-bottom: .25rem; }

/* Metric grid */
.spread-grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(110px, 1fr));
  gap: .35rem .6rem;
}
.spread-grid.compact { grid-template-columns: repeat(auto-fill, minmax(90px, 1fr)); }
.sg-item { display: flex; flex-direction: column; }
.sg-label { font-size: .65rem; font-weight: 600; text-transform: uppercase;
  letter-spacing: .04em; color: #64748b; }
.sg-val   { font-size: .82rem; font-weight: 600; color: #cbd5e1; }
.sg-green { color: #4ade80; }
.sg-red   { color: #f87171; }
.sg-amber { color: #fbbf24; }

/* Reason */
.spread-reason {
  font-size: .75rem; color: #94a3b8; line-height: 1.5;
  padding: .45rem .6rem;
  background: rgba(255,255,255,.03);
  border-radius: 4px;
  border-left: 2px solid #334155;
}
.spread-reason-label { font-weight: 700; color: #64748b; }

/* Other ideas */
.spread-others-header {
  font-size: .7rem; font-weight: 700; text-transform: uppercase;
  letter-spacing: .06em; color: #475569; padding: .1rem 0;
}
.spread-others-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px,1fr)); gap: .85rem; }
.spread-other-card {
  border-radius: 6px; border: 1px solid;
  padding: .75rem .85rem;
  display: flex; flex-direction: column; gap: .5rem;
}
.spread-other-top { display: flex; align-items: center; justify-content: space-between; }

/* ── Analyst Ratings Page ──────────────────────────────────────────────── */
.ar-date-select {
  border: 1px solid #d1d5db; border-radius: 6px;
  padding: .3rem .6rem; font-size: .875rem; height: 34px; min-width: 160px;
}
.ar-filter-input {
  border: 1px solid #d1d5db; border-radius: 6px;
  padding: .3rem .6rem; font-size: .85rem; height: 32px; width: 160px;
  outline: none;
}
.ar-filter-input:focus { border-color: #6366f1; box-shadow: 0 0 0 2px #e0e7ff; }
.ar-filter-btn {
  border: 1px solid #d1d5db; background: #fff; border-radius: 5px;
  padding: .25rem .65rem; font-size: .78rem; cursor: pointer; transition: .1s;
}
.ar-filter-btn.active, .ar-filter-btn:hover { background: #f1f5f9; border-color: #94a3b8; }
.ar-filter-btn.ar-filter-bull.active { background: var(--bull-light); border-color: var(--bull-mid); color: #15803d; }
.ar-filter-btn.ar-filter-bear.active { background: var(--bear-light); border-color: var(--bear-mid); color: #b91c1c; }
.ar-filter-btn.ar-filter-init.active { background: #ede9fe; border-color: #c4b5fd; color: #6d28d9; }
.ar-filter-btn.ar-filter-neut.active { background: #f1f5f9; border-color: #cbd5e1; color: #475569; }

.ar-stat {
  display: flex; flex-direction: column; align-items: center;
  padding: .4rem .85rem; border-radius: 8px; border: 1px solid var(--border);
  min-width: 80px; background: var(--surface);
}
.ar-stat-num  { font-size: 1.25rem; font-weight: 700; line-height: 1.2; }
.ar-stat-lbl  { font-size: .68rem; color: var(--text-muted); text-transform: uppercase; letter-spacing: .04em; }
.ar-stat-up   { background: var(--bull-light); border-color: var(--bull-mid); }
.ar-stat-up .ar-stat-num { color: #15803d; }
.ar-stat-down { background: var(--bear-light); border-color: var(--bear-mid); }
.ar-stat-down .ar-stat-num { color: #b91c1c; }
.ar-stat-init { background: #ede9fe; border-color: #c4b5fd; }
.ar-stat-init .ar-stat-num { color: #6d28d9; }
.ar-stat-neut { background: #f1f5f9; border-color: #cbd5e1; }
.ar-stat-total .ar-stat-num { color: var(--text); }

.ar-table { border-collapse: collapse; font-size: .83rem; }
.ar-table thead th {
  padding: .55rem .75rem; border-bottom: 2px solid var(--border);
  background: var(--surface-2); font-size: .72rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: .05em; color: var(--text-muted);
  white-space: nowrap; user-select: none;
}
.ar-table thead th:hover { color: var(--text); }
.ar-table thead th.ar-sort-desc::after { content: ' ↓'; color: #6366f1; }
.ar-table thead th.ar-sort-asc::after  { content: ' ↑'; color: #6366f1; }
.ar-tr { border-bottom: 1px solid var(--border); transition: background .1s; }
.ar-tr:hover { background: var(--surface-2) !important; }
.ar-tr td { padding: .5rem .75rem; vertical-align: middle; }
.ar-tr.ar-row-bull { background: #f0fdf4; }
.ar-tr.ar-row-bear { background: #fff5f5; }
.ar-tr.ar-row-init { background: #f5f3ff; }
.ar-tr.ar-row-neut { background: transparent; }
.ar-ticker-lbl { font-weight: 700; font-size: .88rem; }
.ar-td-firm { color: var(--text-muted); font-size: .78rem; white-space: nowrap; }
.ar-td-rating { font-size: .78rem; }
.ar-td-num { font-size: .82rem; white-space: nowrap; }
.ar-td-tgtchg { font-size: .75rem; color: var(--text-muted); }
.ar-dir-icon { font-size: .7rem; margin-right: .15rem; }
.ar-row-bull .ar-dir-icon { color: #15803d; }
.ar-row-bear .ar-dir-icon { color: #b91c1c; }
.ar-row-init .ar-dir-icon { color: #6d28d9; }
.ar-smart-score { font-weight: 600; color: #d97706; }

/* ── News sidebar ────────────────────────────────────── */
/* ── News Sidebar — dark terminal aesthetic ───────────────────────────────── */
#news-sidebar {
  position: fixed; top: 0; right: 0;
  height: 100vh;
  width: 292px;
  background: #0f172a;
  border-left: 1px solid #1e293b;
  z-index: 1025;
  display: flex; flex-direction: row;
  transition: width .2s ease;
  box-shadow: -4px 0 24px rgba(0,0,0,.35);
}
#news-sidebar.ns-collapsed { width: 44px; }
#news-sidebar.ns-collapsed #ns-panel { display: none; visibility: hidden; }

#ns-toggle {
  width: 44px; min-width: 44px;
  display: flex; flex-direction: column;
  align-items: center; justify-content: flex-start;
  padding-top: 4.5rem;
  cursor: pointer;
  border-right: 1px solid #1e293b;
  color: #475569;
  position: relative;
  user-select: none;
  transition: background .15s, color .15s;
}
#ns-toggle:hover { color: #94a3b8; background: #1e293b; }
#ns-toggle:focus-visible { outline: 2px solid #3b82f6; outline-offset: -2px; }
#ns-badge {
  width: 7px; height: 7px; border-radius: 50%;
  background: #ef4444; margin-top: .5rem; display: none;
}

#ns-panel {
  flex: 1; display: flex; flex-direction: column;
  min-width: 0; overflow: hidden;
}
#ns-header {
  display: flex; align-items: center; gap: .25rem;
  padding: .55rem .7rem;
  background: linear-gradient(135deg, #1e293b 0%, #0f172a 100%);
  border-bottom: 1px solid #1e293b;
  font-weight: 700; font-size: .78rem;
  color: #e2e8f0;
  letter-spacing: .02em;
  min-height: 2.4rem;
}
#ns-title {
  flex: 1; white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis;
}
#ns-refresh, #ns-close {
  background: none; border: none; cursor: pointer;
  color: #475569; font-size: .9rem;
  padding: 2px 5px; line-height: 1;
  border-radius: 3px;
  transition: color .1s, background .1s;
}
#ns-refresh:hover, #ns-close:hover { color: #e2e8f0; background: #1e293b; }

#ns-search-wrap {
  padding: .4rem .5rem;
  border-bottom: 1px solid #1e293b;
  background: #0f172a;
}
#ns-search {
  width: 100%; padding: .3rem .55rem;
  font-size: .75rem;
  border: 1px solid #334155;
  border-radius: 5px;
  background: #1e293b;
  color: #e2e8f0; outline: none;
  transition: border-color .15s;
}
#ns-search:focus { border-color: #3b82f6; background: #1e3a5f22; }
#ns-search::placeholder { color: #475569; }

.ns-section-label {
  padding: .28rem .7rem; font-size: .65rem; font-weight: 700;
  text-transform: uppercase; letter-spacing: .08em;
  color: #94a3b8;
  background: #1e293b;
  border-bottom: 1px solid #334155;
  border-top: 1px solid #334155;
}
.ns-section-sub { font-weight: 400; text-transform: none; letter-spacing: 0; font-size: .65rem; color: #334155; }
.ns-section-list { flex: 1; overflow-y: auto; overflow-x: hidden; min-height: 80px; }
.ns-section-list::-webkit-scrollbar { width: 4px; }
.ns-section-list::-webkit-scrollbar-track { background: transparent; }
.ns-section-list::-webkit-scrollbar-thumb { background: #334155; border-radius: 2px; }

.ns-item {
  display: block; padding: .55rem .7rem;
  border-bottom: 1px solid #1e293b;
  text-decoration: none; color: #cbd5e1;
  transition: background .12s;
  border-left: 3px solid transparent;
}
.ns-item:hover { background: #1e293b; color: #f1f5f9; border-left-color: #3b82f6; }
.ns-headline { line-height: 1.4; font-size: .76rem; }
.ns-meta { color: #475569; font-size: .67rem; margin-top: .2rem; }
.ns-loading, .ns-empty {
  display: block; padding: .9rem .75rem;
  color: #475569; font-size: .78rem; font-style: italic;
}

/* Flow news (BZ Pro) items */
.ns-flow-item {
  padding: .5rem .7rem; border-bottom: 1px solid #1e293b;
  border-left: 3px solid transparent;
  transition: background .12s, border-left-color .12s;
}
.ns-flow-item:hover { background: #1e293b; }
.ns-flow-item.ns-flow-bz:hover    { border-left-color: #3b82f6; }
.ns-flow-item.ns-flow-pr:hover    { border-left-color: #22c55e; }
.ns-flow-item.ns-flow-sec:hover   { border-left-color: #a78bfa; }
.ns-flow-top { display: flex; align-items: center; gap: .4rem; margin-bottom: .25rem; }
.ns-flow-title { font-size: .76rem; line-height: 1.4; color: #cbd5e1; }
.ns-flow-ts { font-size: .67rem; color: #475569; }
.ns-badge {
  font-size: .65rem; font-weight: 700; text-transform: uppercase;
  letter-spacing: .04em; padding: .1rem .35rem; border-radius: 3px;
  white-space: nowrap;
}
.ns-badge-bz-wire       { background: #1e3a5f; color: #93c5fd; }
.ns-badge-press-release { background: #14532d; color: #86efac; }
.ns-badge-sec-filing    { background: #3b1f6e; color: #c4b5fd; }

@media (max-width: 991px) {
  #news-sidebar { display: none !important; }
  body { padding-right: 0 !important; }
}

/* ── News & Filings card (TickerDetail) ─────────────────── */
.news-table       { width: 100%; border-collapse: collapse; font-size: .85rem; }
.news-th          { padding: .45rem 1rem; text-align: left; font-size: .75rem; font-weight: 600; color: var(--text-muted, #94a3b8); border-bottom: 1px solid var(--border); white-space: nowrap; }
.news-th-sortable:hover { color: var(--text, #e2e8f0); }
.sort-arrow       { opacity: .5; margin-left: .25rem; }
.news-td          { padding: .5rem 1rem; border-bottom: 1px solid var(--border); vertical-align: top; }
.news-row:last-child .news-td { border-bottom: none; }
.news-td-date     { white-space: nowrap; color: var(--text-muted, #94a3b8); font-size: .8rem; width: 5rem; }
.news-td-title    { line-height: 1.4; }
.news-badge       { font-size: .7rem; font-weight: 600; text-transform: uppercase; letter-spacing: .04em; padding: .15rem .45rem; border-radius: 3px; white-space: nowrap; }
.news-badge-bz-wire       { background: #1e3a5f; color: #93c5fd; }
.news-badge-press-release { background: #14532d; color: #86efac; }
.news-badge-sec-filing    { background: #3b1f6e; color: #c4b5fd; }
.news-edgar-link  { color: #c4b5fd; text-decoration: none; }
.news-edgar-link:hover { text-decoration: underline; color: #ddd6fe; }
.ns-flow-link     { color: #c4b5fd; text-decoration: none; font-size: .76rem; }
.ns-flow-link:hover { text-decoration: underline; color: #ddd6fe; }
.news-pager       { display: flex; align-items: center; gap: 1rem; }
.news-pager-btn   { padding: .25rem .75rem; font-size: .8rem; }
.news-pager-btn:disabled { opacity: .35; cursor: default; }
