:root {
  --bg: #050810;
  --panel-bg: #0b1224;
  --panel-bg-alt: #0e1830;
  --border: #22d3ee;
  --border-dim: #0e5866;
  --long: #22c55e;
  --short: #ef4444;
  --warn: #eab308;
  --level: #a855f7;
  --text: #e5e7eb;
  --text-dim: #94a3b8;
  /* Informational (non-blocking) notices -- deliberately distinct from
     --warn/--short so a "quote newer than trade" style note is never
     mistaken for a WARN/blocked-gate signal. */
  --info: #38bdf8;
  --font-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
  --glow: 0 0 8px rgba(34, 211, 238, 0.25);
}

* {
  box-sizing: border-box;
}

html, body {
  margin: 0;
  padding: 0;
  background: var(--bg);
  color: var(--text);
  font-family: var(--font-mono);
  min-height: 100%;
}

body {
  padding: 12px;
}

.app {
  max-width: 1600px;
  margin: 0 auto;
  display: flex;
  flex-direction: column;
  gap: 12px;
}

/* ---------- Header ---------- */

.header {
  background: var(--panel-bg);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 10px 14px;
  box-shadow: var(--glow);
}

.header-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 12px;
}

/* Trading halt banner: deliberately the loudest thing on the page --
   safety-critical, must never be mistaken for a routine WARN badge. */
.halt-banner {
  background: var(--short);
  color: #fff;
  font-weight: bold;
  text-align: center;
  padding: 8px 12px;
  border-radius: 4px;
  margin-bottom: 8px;
  letter-spacing: 0.03em;
  animation: halt-banner-pulse 1.2s ease-in-out infinite;
}

@keyframes halt-banner-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.75; }
}

.header-top {
  margin-bottom: 6px;
}

.brand {
  font-weight: bold;
  font-size: 1.1rem;
  color: var(--border);
  letter-spacing: 0.08em;
}

.badge {
  border: 1px solid var(--border-dim);
  border-radius: 4px;
  padding: 2px 8px;
  font-size: 0.72rem;
  letter-spacing: 0.05em;
}

/* Nav badges are real links (glossary <-> dashboard) -- undo the anchor
   default so they read as badges first, links second. */
.badge-link {
  color: var(--text-dim);
  text-decoration: none;
  cursor: pointer;
}
.badge-link:hover {
  color: var(--border);
  border-color: var(--border);
}

.badge-mock {
  color: var(--warn);
  border-color: var(--warn);
}

.badge-status {
  color: var(--text-dim);
}

.badge-status.status-connected { color: var(--long); border-color: var(--long); }
.badge-status.status-polling { color: var(--cyan); border-color: var(--cyan); }
.badge-status.status-loading { color: var(--text-dim); }
/* DELAYED = expected delay from a derived/delayed feed (e.g. overnight),
   not an error -- kept visually distinct (amber) from STALE (red), which
   means the feed has genuinely stopped updating. */
.badge-status.status-delayed { color: var(--warn); border-color: var(--warn); }
.badge-status.status-last_known { color: var(--warn); border-color: var(--warn); }
.badge-status.status-closed { color: var(--text-dim); border-color: var(--border-dim); }
.badge-status.status-stale { color: var(--short); border-color: var(--short); }
.badge-status.status-disconnected { color: var(--short); border-color: var(--short); }
.badge-status.status-error { color: var(--short); border-color: var(--short); }

/* Provider badge: ALPACA IEX/SIP LIVE, DELAYED SIP, IEX FALLBACK,
   CONFIG REQUIRED, AUTH FAILED, MOCK DATA */
.badge-mock.provider-live { color: var(--long); border-color: var(--long); }
.badge-mock.provider-delayed { color: var(--warn); border-color: var(--warn); }
.badge-mock.provider-fallback { color: var(--warn); border-color: var(--warn); }
.badge-mock.provider-error { color: var(--short); border-color: var(--short); }

/* Live tick badge (v0.6): visible only while the WebSocket fast-lane is
   actually connected -- distinct from badge-status (which reflects the
   slower REST poll's data_freshness_status) so the two never get
   confused. */
.badge-live-tick {
  color: var(--long);
  border-color: var(--long);
  animation: live-tick-pulse 2s ease-in-out infinite;
}

@keyframes live-tick-pulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.55; }
}

.last-update {
  margin-left: auto;
  color: var(--text-dim);
  font-size: 0.78rem;
}

.header-timestamps {
  margin-top: 4px;
  font-size: 0.72rem;
  color: var(--text-dim);
  gap: 16px;
}

.header-session {
  margin-top: 4px;
  font-size: 0.75rem;
  color: var(--text-dim);
  gap: 8px;
  align-items: center;
}

.badge-session {
  color: var(--text);
  border-color: var(--border-dim);
}

.badge-feed {
  color: var(--text-dim);
}
.badge-feed.feed-live { color: var(--long); border-color: var(--long); }
.badge-feed.feed-delayed { color: var(--warn); border-color: var(--warn); }
.badge-feed.feed-unavailable { color: var(--short); border-color: var(--short); }

.badge-delay {
  color: var(--text-dim);
}
.badge-delay.delay-active {
  color: var(--warn);
  border-color: var(--warn);
}

.badge-semantics {
  color: var(--text-dim);
}
.badge-semantics.semantics-live { color: var(--long); border-color: var(--long); }
.badge-semantics.semantics-last-known { color: var(--warn); border-color: var(--warn); }
.badge-semantics.semantics-stale { color: var(--short); border-color: var(--short); }

/* STATUS badge: mirrors the top status pill's data_freshness_status
   coloring (LIVE/DELAYED/STALE/LAST_KNOWN/CLOSED), placed alongside
   SESSION/FEED/DELAY for at-a-glance locality. */
.badge-freshness {
  color: var(--text-dim);
}
.badge-freshness.status-connected { color: var(--long); border-color: var(--long); }
.badge-freshness.status-delayed { color: var(--warn); border-color: var(--warn); }
.badge-freshness.status-last_known { color: var(--warn); border-color: var(--warn); }
.badge-freshness.status-closed { color: var(--text-dim); border-color: var(--border-dim); }
.badge-freshness.status-stale { color: var(--short); border-color: var(--short); }

.header-timestamps span span {
  color: var(--text);
}

.badge-label {
  color: var(--text-dim);
  font-size: 0.68rem;
  letter-spacing: 0.05em;
}

.ts-age {
  color: var(--text-dim);
  font-size: 0.7rem;
}

.ts-feed {
  color: var(--text-dim);
  font-size: 0.68rem;
  text-transform: uppercase;
}

.header-info {
  margin-top: 4px;
  gap: 6px;
}

.badge-info {
  color: var(--info);
  border-color: var(--info);
  background: transparent;
}

.header-ticker {
  font-size: 1.05rem;
}

.hdr-symbol {
  font-weight: bold;
  color: var(--text);
  background: var(--panel-bg-alt);
  padding: 2px 8px;
  border-radius: 4px;
}

.hdr-price {
  color: var(--border);
  font-weight: bold;
}

/* Price-type badge: LAST TRADE | LATEST BAR CLOSE | INDICATIVE MIDPOINT |
   LAST KNOWN -- always says precisely which of the four different
   price concepts the headline number actually is. */
.badge-price-type {
  color: var(--text);
  border-color: var(--border-dim);
}
.badge-price-type.price-type-last-trade { color: var(--long); border-color: var(--long); }
.badge-price-type.price-type-latest-bar { color: var(--border); border-color: var(--border); }
.badge-price-type.price-type-midpoint { color: var(--info); border-color: var(--info); }
.badge-price-type.price-type-last-known { color: var(--warn); border-color: var(--warn); }

.hdr-change.positive { color: var(--long); }
.hdr-change.negative { color: var(--short); }

.hdr-change-label {
  color: var(--text-dim);
  font-size: 0.75rem;
}

.hdr-session {
  color: var(--warn);
  text-transform: uppercase;
  font-size: 0.85rem;
}

.hdr-health {
  font-size: 0.85rem;
}

.hdr-health.health-normal { color: var(--long); }
.hdr-health.health-warn { color: var(--warn); }
.hdr-health.health-fail { color: var(--short); }

/* ---------- Search bar ---------- */

.search-bar {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.symbol-input {
  background: var(--panel-bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-mono);
  padding: 6px 10px;
  border-radius: 4px;
  font-size: 0.95rem;
  text-transform: uppercase;
  width: 160px;
}

.symbol-input:focus {
  outline: none;
  box-shadow: var(--glow);
}

.analyze-btn {
  background: var(--panel-bg-alt);
  border: 1px solid var(--border);
  color: var(--border);
  font-family: var(--font-mono);
  padding: 6px 16px;
  border-radius: 4px;
  cursor: pointer;
  font-size: 0.9rem;
  letter-spacing: 0.05em;
}

.analyze-btn:hover {
  box-shadow: var(--glow);
}

.scenario-select {
  background: var(--panel-bg);
  border: 1px solid var(--border-dim);
  color: var(--text-dim);
  font-family: var(--font-mono);
  padding: 6px 8px;
  border-radius: 4px;
}

.scenario-select:disabled {
  opacity: 0.4;
  cursor: not-allowed;
}

.input-error {
  color: var(--short);
  font-size: 0.8rem;
}

.options-window-btn {
  background: var(--panel-bg);
  border: 1px solid var(--border-dim);
  border-radius: 4px;
  color: var(--text-dim);
  font-family: var(--font-mono);
  padding: 6px 14px;
  cursor: pointer;
  font-size: 0.82rem;
  letter-spacing: 0.05em;
}

.options-window-btn:hover {
  background: var(--panel-bg-alt);
  color: var(--border);
}

.alert-toast-stack {
  position: fixed;
  right: 16px;
  bottom: 16px;
  z-index: 100;
  display: flex;
  flex-direction: column;
  gap: 8px;
  max-width: 320px;
}

.alert-toast {
  background: var(--panel-bg-alt);
  border: 1px solid var(--border-dim);
  border-left: 4px solid var(--long);
  border-radius: 6px;
  padding: 10px 12px;
  font-size: 0.82rem;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
  animation: alert-toast-in 0.2s ease-out;
}

.alert-toast.side-put {
  border-left-color: var(--short);
}

.alert-toast-title {
  font-weight: bold;
  margin-bottom: 4px;
}

.alert-toast-detail {
  color: var(--text-dim);
}

.alert-toast-close {
  float: right;
  background: none;
  border: none;
  color: var(--text-dim);
  cursor: pointer;
  font-size: 0.9rem;
  line-height: 1;
}

@keyframes alert-toast-in {
  from {
    opacity: 0;
    transform: translateY(8px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.iex-notice {
  background: var(--panel-bg-alt);
  border: 1px solid var(--warn);
  color: var(--warn);
  border-radius: 6px;
  padding: 8px 14px;
  font-size: 0.82rem;
}

.fallback-notice {
  border-color: var(--short);
  color: var(--short);
}

/* ---------- Grid ---------- */

.grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
  align-items: start;
}

.col {
  display: flex;
  flex-direction: column;
  gap: 12px;
  min-width: 0;
}

@media (max-width: 1100px) {
  .grid {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 720px) {
  .grid {
    grid-template-columns: 1fr;
  }
  .symbol-input {
    width: 100%;
  }
  .search-bar {
    flex-direction: column;
    align-items: stretch;
  }
}

/* ---------- Panels ---------- */

.panel {
  background: var(--panel-bg);
  border: 1px solid var(--border);
  border-radius: 6px;
  padding: 12px 14px;
  box-shadow: var(--glow);
  min-width: 0;
  overflow-x: auto;
}

.panel-title {
  margin: 0 0 10px 0;
  font-size: 0.85rem;
  letter-spacing: 0.08em;
  color: var(--border);
  border-bottom: 1px solid var(--border-dim);
  padding-bottom: 6px;
}

.panel-wide {
  width: 100%;
}

/* ---------- Score bars ---------- */

.score-row {
  display: grid;
  grid-template-columns: 56px 1fr 70px 64px;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
}

.score-label {
  font-weight: bold;
  font-size: 0.85rem;
}

.score-long { color: var(--long); }
.score-short { color: var(--short); }

.score-bar-track {
  background: var(--panel-bg-alt);
  border-radius: 4px;
  height: 14px;
  overflow: hidden;
  border: 1px solid var(--border-dim);
}

.score-bar-fill {
  height: 100%;
  transition: width 0.25s ease;
}

.score-bar-long { background: var(--long); }
.score-bar-short { background: var(--short); }

.score-value {
  font-size: 0.8rem;
  text-align: right;
  color: var(--text-dim);
}

.score-grade {
  font-size: 0.75rem;
  text-align: right;
  font-weight: bold;
}

.grade-strong { color: var(--long); }
.grade-good { color: #86efac; }
.grade-neutral { color: var(--warn); }
.grade-weak { color: var(--short); }

.score-meta-row {
  display: flex;
  justify-content: space-between;
  font-size: 0.75rem;
  color: var(--text-dim);
  margin-top: 4px;
  gap: 8px;
}

.tradeability { font-weight: bold; }
.tradeability-allowed { color: var(--long); }
.tradeability-watch_only { color: var(--warn); }
.tradeability-blocked { color: var(--short); }

/* ---------- Quote strip ---------- */

.quote-strip-row {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 8px;
}

.qs-item {
  background: var(--panel-bg-alt);
  border: 1px solid var(--border-dim);
  border-radius: 4px;
  padding: 6px 8px;
  text-align: center;
}

.qs-label {
  font-size: 0.68rem;
  color: var(--text-dim);
  letter-spacing: 0.05em;
}

.qs-value {
  font-size: 0.95rem;
  font-weight: bold;
  color: var(--text);
  margin-top: 2px;
}

.qs-size {
  font-size: 0.68rem;
  color: var(--text-dim);
  margin-top: 2px;
}

@media (max-width: 480px) {
  .quote-strip-row {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* ---------- Key/value tables ---------- */

.kv-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.85rem;
}

.kv-table td {
  padding: 4px 2px;
  border-bottom: 1px dashed var(--border-dim);
}

.kv-table td:first-child {
  color: var(--text-dim);
}

.kv-value {
  text-align: right;
  color: var(--text);
  font-weight: bold;
}

/* ---------- Data integrity / market coverage (v0.5 split) ---------- */

.integrity-normal { color: var(--long); }
.integrity-warn { color: var(--warn); }
.integrity-fail { color: var(--short); }

.coverage-full { color: var(--long); }
.coverage-partial { color: var(--warn); }
.coverage-delayed { color: var(--warn); }
.coverage-mock { color: var(--text-dim); }

/* ---------- Score drivers ---------- */

.drivers-list {
  list-style: none;
  margin: 0;
  padding: 0;
  font-size: 0.85rem;
  max-height: 320px;
  overflow-y: auto;
}

.drivers-list li {
  display: flex;
  justify-content: space-between;
  gap: 8px;
  padding: 4px 0;
  border-bottom: 1px dashed var(--border-dim);
}

.driver-points {
  font-weight: bold;
  min-width: 42px;
  text-align: right;
}

.driver-points.long { color: var(--long); }
.driver-points.short { color: var(--short); }

.driver-reason {
  color: var(--text);
  flex: 1;
}

/* ---------- News ---------- */

.news-list {
  list-style: none;
  margin: 0;
  padding: 0;
  font-size: 0.8rem;
  max-height: 260px;
  overflow-y: auto;
}

.news-list li {
  padding: 6px 0;
  border-bottom: 1px dashed var(--border-dim);
}

.news-list li:last-child {
  border-bottom: none;
}

.news-headline {
  color: var(--text);
  display: block;
  text-decoration: none;
}

.news-headline:hover {
  color: var(--border);
}

.news-meta {
  color: var(--text-dim);
  font-size: 0.7rem;
  margin-top: 2px;
}

.news-empty {
  color: var(--text-dim);
}

.event-risk-note {
  margin-top: 8px;
  padding-top: 6px;
  border-top: 1px dashed var(--border-dim);
  color: var(--text-dim);
  font-size: 0.68rem;
  line-height: 1.4;
}

/* ---------- Options panel ---------- */

.options-expiration {
  font-size: 0.78rem;
  color: var(--text-dim);
  margin-bottom: 8px;
}

.options-expiration span {
  color: var(--text);
  font-weight: bold;
}

.options-strikes {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  margin-top: 8px;
}

.options-strikes-title {
  font-size: 0.68rem;
  color: var(--text-dim);
  letter-spacing: 0.05em;
  margin-bottom: 4px;
}

.options-strike-list {
  list-style: none;
  margin: 0;
  padding: 0;
  font-size: 0.8rem;
}

.options-strike-list li {
  display: flex;
  justify-content: space-between;
  padding: 2px 0;
  border-bottom: 1px dashed var(--border-dim);
}

/* ---------- Unusual options volume (v0.19) ---------- */

.unusual-options-intro {
  font-size: 0.78rem;
  color: var(--text-dim);
  margin: 0 0 10px;
  line-height: 1.4;
}

.unusual-options-group {
  margin-bottom: 12px;
  padding-bottom: 10px;
  border-bottom: 1px dashed var(--border-dim);
}

.unusual-options-group:last-of-type {
  border-bottom: none;
  margin-bottom: 0;
  padding-bottom: 0;
}

.unusual-options-group-title {
  font-weight: bold;
  color: var(--border);
  font-size: 0.85rem;
  margin-bottom: 6px;
}

/* ---------- Watchlist scanner ---------- */

.watchlist-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.85rem;
}

.watchlist-table th {
  text-align: left;
  color: var(--text-dim);
  font-weight: normal;
  border-bottom: 1px solid var(--border-dim);
  padding: 4px 6px;
}

.watchlist-table td {
  padding: 6px;
  border-bottom: 1px dashed var(--border-dim);
}

.watchlist-table th:not(:first-child),
.watchlist-table td:not(:first-child) {
  text-align: right;
}

.watchlist-row {
  cursor: pointer;
}

.watchlist-row:hover {
  background: var(--panel-bg-alt);
}

.watchlist-symbol {
  font-weight: bold;
  color: var(--border);
}

.watchlist-row.watchlist-disconnected td {
  color: var(--text-dim);
}

.watchlist-manage-row,
.options-compare-controls {
  display: flex;
  align-items: center;
  gap: 8px;
  margin-bottom: 10px;
  flex-wrap: wrap;
}

.watchlist-add-input {
  background: var(--panel-bg-alt);
  color: var(--text);
  border: 1px solid var(--border-dim);
  border-radius: 4px;
  padding: 5px 8px;
  font-family: inherit;
  font-size: 0.85rem;
  width: 8rem;
  text-transform: uppercase;
}

.watchlist-add-btn {
  background: var(--panel-bg-alt);
  color: var(--border);
  border: 1px solid var(--border-dim);
  border-radius: 4px;
  padding: 5px 10px;
  font-family: inherit;
  font-size: 0.85rem;
  cursor: pointer;
}

.watchlist-add-btn:hover {
  background: var(--border-dim);
}

.watchlist-add-btn:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

.watchlist-manage-status {
  font-size: 0.8rem;
  color: var(--text-dim);
}

.watchlist-manage-status-error {
  color: var(--short);
}

.watchlist-remove-btn {
  background: none;
  border: 1px solid var(--border-dim);
  border-radius: 4px;
  color: var(--text-dim);
  cursor: pointer;
  font-size: 0.85rem;
  line-height: 1;
  padding: 2px 7px;
}

.watchlist-remove-btn:hover {
  color: var(--short);
  border-color: var(--short);
}


/* ---------- Term hover tooltips (v0.13) ---------- */

.term-label {
  cursor: help;
  text-decoration: underline dotted var(--border-dim);
  text-underline-offset: 3px;
}

.term-label:hover,
.term-label:focus-visible {
  color: var(--border);
  outline: none;
}

.term-tooltip {
  position: fixed;
  z-index: 100;
  max-width: 280px;
  background: var(--panel-bg-alt);
  border: 1px solid var(--border-dim);
  border-radius: 6px;
  padding: 10px 12px;
  box-shadow: 0 4px 16px rgba(0, 0, 0, 0.4);
  font-size: 0.8rem;
  line-height: 1.45;
  pointer-events: none;
}

.term-tooltip-title {
  font-weight: bold;
  color: var(--border);
  margin-bottom: 4px;
}

.term-tooltip-desc {
  color: var(--text);
}

.term-tooltip-compare {
  margin-top: 6px;
  padding-top: 6px;
  border-top: 1px dashed var(--border-dim);
  font-weight: 600;
}

.term-tooltip-compare.compare-high {
  color: var(--long);
}

.term-tooltip-compare.compare-low {
  color: var(--short);
}

.term-tooltip-compare.compare-normal {
  color: var(--warn);
}

.term-tooltip-compare.compare-na {
  color: var(--text-dim);
  font-weight: normal;
}

/* ---------- Level ladder ---------- */

.ladder-table {
  width: 100%;
  border-collapse: collapse;
  font-size: 0.85rem;
}

.ladder-table th {
  text-align: left;
  color: var(--text-dim);
  font-weight: normal;
  border-bottom: 1px solid var(--border-dim);
  padding: 4px 2px;
}

.ladder-table th:last-child,
.ladder-table td:last-child {
  text-align: right;
}

.ladder-table td {
  padding: 4px 2px;
  border-bottom: 1px dashed var(--border-dim);
}

.level-resistance { color: var(--short); }
.level-support { color: var(--long); }
.level-now { color: var(--border); font-weight: bold; }
.level-target { color: var(--level); }

.level-meta {
  margin-top: 8px;
  font-size: 0.72rem;
  color: var(--text-dim);
}
.level-meta span { color: var(--text); }
.level-confidence-low { color: var(--warn) !important; }

/* ---------- Entry gates ---------- */

.blocked-list {
  list-style: none;
  margin: 8px 0 0 0;
  padding: 0;
  font-size: 0.82rem;
}

.blocked-list li {
  color: var(--short);
  padding: 3px 0;
}

.blocked-list li::before {
  content: "🚫 ";
}

.blocked-list.gates-clear li {
  color: var(--long);
}

.blocked-list.gates-clear li::before {
  content: "✅ ";
}

.final-decision {
  margin-top: 10px;
  padding-top: 8px;
  border-top: 1px solid var(--border-dim);
  font-weight: bold;
  font-size: 0.95rem;
}

.decision-long_candidate { color: var(--long); }
.decision-short_candidate { color: var(--short); }
.decision-watch_only { color: var(--warn); }
.decision-blocked { color: var(--short); }

.decision-reason {
  margin-top: 6px;
  font-size: 0.78rem;
  color: var(--text-dim);
  line-height: 1.4;
}

/* Coverage ramp-up note (below LONG/SHORT) -- informational, same tone as
   --info elsewhere, never implies a blocked/warn state. */
.score-coverage-note {
  margin-top: 6px;
  padding-top: 6px;
  border-top: 1px dashed var(--border-dim);
  font-size: 0.75rem;
  color: var(--info);
  line-height: 1.4;
}

/* Historical reference (v0.9): descriptive backtest context, ALWAYS shown
   (both LONG and SHORT independent of the live decision) -- info tone (not
   long/short/warn colored), explicitly framed as history, not a
   prediction. */
.historical-reference {
  margin-top: 8px;
  padding-top: 8px;
  border-top: 1px dashed var(--border-dim);
}

.historical-reference-title {
  font-size: 0.75rem;
  color: var(--info);
  margin-bottom: 4px;
}

.historical-reference .kv-table td {
  font-size: 0.75rem;
}

.hr-direction-block + .hr-direction-block {
  margin-top: 8px;
}

.hr-direction-title {
  font-size: 0.72rem;
  color: var(--text-dim);
  margin-bottom: 2px;
}

.hr-empty-note {
  font-size: 0.75rem;
  color: var(--text-dim);
  font-style: italic;
}

/* My entry price check (v0.10) */
.my-entry-input-row {
  display: flex;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

.my-entry-input-row label {
  font-size: 0.8rem;
  color: var(--text-dim);
}

.my-entry-input {
  background: var(--panel-bg);
  border: 1px solid var(--border);
  color: var(--text);
  font-family: var(--font-mono);
  padding: 6px 10px;
  border-radius: 4px;
  font-size: 0.9rem;
  width: 120px;
}

.my-entry-input:focus {
  outline: none;
  box-shadow: var(--glow);
}

.my-entry-check-btn {
  background: var(--panel-bg-alt);
  border: 1px solid var(--border);
  color: var(--border);
  font-family: var(--font-mono);
  padding: 6px 14px;
  border-radius: 4px;
  cursor: pointer;
  font-size: 0.85rem;
}

.my-entry-check-btn:hover {
  box-shadow: var(--glow);
}

.my-entry-result {
  margin-top: 10px;
}

.me-verdict {
  font-size: 1.05rem;
  font-weight: 600;
  padding: 8px 10px;
  border-radius: 4px;
  margin-bottom: 8px;
  text-align: center;
  border: 1px solid var(--border-dim);
}

.me-verdict.verdict-good {
  color: var(--long);
  border-color: var(--long);
}

.me-verdict.verdict-neutral {
  color: var(--warn);
  border-color: var(--warn);
}

.me-verdict.verdict-bad {
  color: var(--short);
  border-color: var(--short);
}

.my-entry-result .kv-value.positive {
  color: var(--long);
}

.my-entry-result .kv-value.negative {
  color: var(--short);
}

.my-entry-disclaimer {
  margin-top: 6px;
  font-size: 0.72rem;
  color: var(--text-dim);
  font-style: italic;
}

/* ---------- Buy/sell verdict reasons + sell block (v0.17) ---------- */

.me-reasons {
  list-style: none;
  margin: 0 0 10px;
  padding: 0;
  font-size: 0.8rem;
  color: var(--text);
}

.me-reasons li {
  padding: 3px 0;
  border-bottom: 1px dashed var(--border-dim);
}

.me-reasons li:last-child {
  border-bottom: none;
}

.my-entry-sell-block {
  margin-top: 14px;
  padding-top: 12px;
  border-top: 1px solid var(--border-dim);
}

.my-entry-sell-title {
  font-weight: bold;
  color: var(--border);
  margin-bottom: 8px;
}

/* ---------- Level ladder: distance column + zone rows ---------- */

.ladder-table td.level-dist {
  text-align: right;
  color: var(--text-dim);
  font-size: 0.78rem;
}

.level-zone-row td {
  font-size: 0.82rem;
}

/* ---------- Footer ---------- */

.footer {
  text-align: center;
  color: var(--text-dim);
  font-size: 0.75rem;
  padding: 8px 0 16px 0;
}
