/* Consensus page, reusing the terminal palette from dashboard.css. */

.sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
}

.consensus-main {
  display: grid;
  gap: 36px;
  padding-block: 32px 64px;
}

.consensus-head {
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 24px;
  padding-bottom: 20px;
  border-bottom: 1px solid var(--wire);
}

.consensus-head h1 {
  margin: 0 0 8px;
  font-size: var(--type-key);
  font-weight: 650;
  line-height: 1.2;
  letter-spacing: -0.03em;
}

.consensus-sub {
  color: var(--signal-secondary);
  margin: 0;
  line-height: 1.6;
  text-wrap: pretty;
}

.consensus-updated {
  margin: 0;
  color: var(--signal-muted);
  font: 500 var(--type-meta)/1.4 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.consensus-tier {
  display: grid;
  gap: 16px;
}

.index-tier {
  padding-bottom: 36px;
  border-bottom: 1px solid var(--wire);
}

.index-board {
  overflow: hidden;
  border: 1px solid var(--wire);
  border-radius: var(--radius-panel);
  background: var(--terminal-raised);
}

.index-labels,
.index-row {
  display: grid;
  grid-template-columns: minmax(150px, 1.05fr) minmax(110px, 0.72fr) minmax(126px, 0.82fr) minmax(260px, 1.9fr) 90px;
  align-items: center;
  column-gap: 20px;
}

.index-labels {
  min-height: 34px;
  border-bottom: 1px solid var(--wire);
  color: var(--signal-muted);
  padding: 0 18px;
  font: 700 var(--type-meta)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  letter-spacing: 0.08em;
}

.index-row {
  min-height: 64px;
  border-bottom: 1px solid var(--wire-soft);
  padding: 10px 18px;
}

.index-row:last-child { border-bottom: 0; }

.index-row:hover { background: var(--wire-soft); }

.index-identity {
  width: max-content;
  display: inline-flex;
  align-items: baseline;
  gap: 9px;
  color: var(--signal-ink);
  text-decoration: none;
}

.index-identity:hover strong { color: var(--profit); }

.index-identity:focus-visible {
  outline: 2px solid var(--wire-focus);
  outline-offset: 4px;
}

.index-identity strong {
  font-size: var(--type-body);
  font-weight: 650;
}

.index-identity small,
.index-row > time {
  color: var(--signal-muted);
  font: 600 var(--type-meta)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
}

.index-direction {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  color: var(--signal-tertiary);
}

.index-direction i {
  width: 8px;
  height: 8px;
  display: block;
  border: 1px solid var(--signal-muted);
  background: transparent;
}

.index-direction b { font-size: var(--type-meta); font-weight: 650; }
.direction-bullish { color: var(--profit); }
.direction-bullish i { border-color: var(--profit); background: var(--profit-muted); }
.direction-bearish { color: var(--risk); }
.direction-bearish i { border-color: var(--risk); background: var(--risk-muted); }
.direction-mixed { color: var(--caution); }
.direction-mixed i { border-color: var(--caution); background: rgba(226, 183, 101, 0.34); }
.direction-neutral i { background: var(--signal-muted); }
/* One directional voice is reported, not promoted to a consensus. */
.direction-lone-voice { color: var(--signal-secondary); }
.direction-lone-voice i { border-color: var(--signal-secondary); background: transparent; }
.direction-no-data { color: var(--signal-muted); }

.index-split {
  display: flex;
  align-items: baseline;
  gap: 10px;
  font: 600 var(--type-meta)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  font-variant-numeric: tabular-nums;
}

.index-split b { font-weight: 600; }
.count-bullish { color: var(--profit); }
.count-bearish { color: var(--risk); }
.index-split small { color: var(--signal-muted); font-size: var(--type-meta); }

.index-participants {
  min-width: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 6px 12px;
  color: var(--signal-tertiary);
  font-size: var(--type-meta);
}

.index-participants > span { white-space: nowrap; }
.index-participants b { color: var(--signal-secondary); font-weight: 550; }
.participant-bullish { color: var(--profit); }
.participant-bearish { color: var(--risk); }
.participant-neutral { color: var(--caution); }
.index-participants .participant-empty { color: var(--signal-muted); }

.index-row > time {
  text-align: right;
  font-variant-numeric: tabular-nums;
}

.tier-heading {
  min-height: 44px;
  display: flex;
  align-items: end;
  justify-content: space-between;
  gap: 20px;
}

.tier-heading h2 {
  margin: 0;
  color: var(--signal-ink);
  font-size: var(--type-key);
  font-weight: 650;
  line-height: 1.25;
  letter-spacing: -0.02em;
}

.tier-heading p {
  margin: 5px 0 0;
  color: var(--signal-tertiary);
  font-size: var(--type-body);
}

.tier-heading > span {
  color: var(--signal-muted);
  font: 500 var(--type-meta)/1.4 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

/* Evidence-bound opportunity action table. */
.opportunity-tier {
  min-width: 0;
  padding-bottom: 36px;
  border-bottom: 1px solid var(--wire);
}

.opportunity-heading h2 {
  display: flex;
  align-items: center;
  gap: 8px;
}

.opportunity-heading h2::before {
  width: 8px;
  height: 8px;
  display: block;
  border: 1px solid var(--profit);
  background: var(--profit-muted);
  content: "";
}

.opportunity-tier.is-stale .opportunity-heading > span { color: var(--caution); }

.opportunity-meta {
  display: grid;
  justify-items: end;
  gap: 4px;
}

.opportunity-meta b {
  color: var(--signal-secondary);
  font-weight: 700;
}

.opportunity-meta-count { white-space: nowrap; }

.opportunity-meta time {
  color: var(--signal-muted);
  font: 500 var(--type-meta)/1.35 "Ubuntu Mono", "Nimbus Mono PS", monospace;
}

.opportunity-board {
  min-width: 0;
  overflow: hidden;
  border: 1px solid var(--wire);
  border-radius: var(--radius-panel);
  background: var(--terminal-raised);
}

.opportunity-table {
  width: 100%;
  border-collapse: collapse;
  table-layout: fixed;
}

.opportunity-col-symbol { width: 15%; }
.opportunity-col-zones { width: 24%; }
.opportunity-col-supporters { width: 25%; }
.opportunity-col-price { width: 17%; }
.opportunity-col-risk { width: 19%; }

.opportunity-table thead {
  background: var(--tape-inset);
}

.opportunity-table th {
  height: 36px;
  border-bottom: 1px solid var(--wire);
  color: var(--signal-muted);
  padding: 0 16px;
  font: 700 var(--type-meta)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  letter-spacing: 0.04em;
  text-align: left;
}

.opportunity-cell {
  position: relative;
  min-width: 0;
  border-bottom: 1px solid var(--wire-soft);
  color: var(--signal-secondary);
  padding: 16px;
  vertical-align: top;
  overflow-wrap: anywhere;
}

.opportunity-cell::before { display: none; }

.opportunity-group + .opportunity-group .opportunity-cell {
  border-top: 1px solid var(--wire);
}

.opportunity-row:hover .opportunity-cell { background: var(--wire-soft); }

.opportunity-row.is-buy-alert .opportunity-symbol-cell {
  box-shadow: inset 2px 0 var(--risk);
}

.opportunity-symbol-cell,
.opportunity-price-cell,
.opportunity-risk-cell {
  font-variant-numeric: tabular-nums;
}

.opportunity-symbol-cell {
  display: table-cell;
}

.opportunity-ticker {
  width: max-content;
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  color: var(--signal-ink);
  font: 700 var(--type-key)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  letter-spacing: -0.02em;
  text-decoration: none;
  transition: color 150ms ease-out, transform 120ms ease-out;
}

.opportunity-ticker:hover { color: var(--profit); }
.opportunity-ticker:active { transform: scale(0.97); }

.opportunity-ticker:focus-visible,
.opportunity-evidence summary:focus-visible,
.opportunity-evidence a:focus-visible {
  outline: 2px solid var(--wire-focus);
  outline-offset: 2px;
}

.opportunity-status {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  color: var(--caution);
  font-size: var(--type-meta);
  font-weight: 650;
}

.opportunity-symbol-cell .opportunity-status { margin-top: 10px; }

.opportunity-status i {
  width: 7px;
  height: 7px;
  flex: 0 0 auto;
  border: 1px solid currentColor;
  background: transparent;
}

.opportunity-status.status-in_zone { color: var(--profit); }
.opportunity-status.status-in_zone i { background: var(--profit-muted); }
.opportunity-status.status-unavailable { color: var(--signal-muted); }
/* Far under the disclosed zone reads as a warning, not a discount. */
.opportunity-status.status-broken_down { color: var(--risk); }
.opportunity-status.status-invalidated { color: var(--risk); }
.opportunity-row.status-invalidated { opacity: 0.68; }

.opportunity-row.is-buy-alert .opportunity-ticker,
.opportunity-row.is-buy-alert .opportunity-status { color: var(--risk); }

.opportunity-row.is-buy-alert .opportunity-status i { background: currentColor; }

.opportunity-row.is-buy-alert .opportunity-ticker:hover {
  color: var(--risk);
  text-decoration: underline;
  text-underline-offset: 3px;
}

.opportunity-zones,
.opportunity-supporters,
.opportunity-invalidations {
  display: grid;
  gap: 8px;
}

.opportunity-zone,
.opportunity-support,
.opportunity-invalidations > span {
  min-width: 0;
  display: grid;
  gap: 3px;
}

.opportunity-zone b,
.opportunity-price-cell strong,
.opportunity-invalidations b {
  color: var(--signal-ink);
  font: 650 var(--type-body)/1.3 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  font-variant-numeric: tabular-nums;
}

.opportunity-zone small,
.opportunity-support small,
.opportunity-price-cell small,
.opportunity-invalidations small,
.opportunity-risk-cell > time {
  color: var(--signal-muted);
  font-size: var(--type-meta);
  line-height: 1.35;
}

.opportunity-zone.is-overlap b,
.opportunity-zone.is-overlap small { color: var(--profit); }

.opportunity-zone.is-primary {
  border-left: 2px solid var(--profit);
  border-radius: var(--radius-control);
  background: var(--tape-inset);
  padding: 10px 12px;
}

.opportunity-zone.is-primary b { font-size: var(--type-key); }

.opportunity-zone:not(.is-primary) { padding-inline: 12px; }

.opportunity-support-cell { display: table-cell; }

.opportunity-support-summary {
  display: flex;
  align-items: baseline;
  gap: 8px;
  padding-bottom: 8px;
  border-bottom: 1px solid var(--wire-soft);
  font-variant-numeric: tabular-nums;
}

.opportunity-support-summary b {
  color: var(--profit);
  font: 700 var(--type-body)/1.2 "Ubuntu Mono", "Nimbus Mono PS", monospace;
}

.opportunity-support-summary small {
  color: var(--signal-muted);
  font-size: var(--type-meta);
}

.opportunity-supporters {
  grid-template-columns: repeat(2, minmax(0, 1fr));
  column-gap: 12px;
  margin-top: 12px;
}

.opportunity-support {
  grid-template-columns: minmax(0, 1fr) auto;
  grid-template-areas:
    "blogger stance"
    "support-time support-time";
  align-items: baseline;
  gap: 4px 8px;
}

.opportunity-support b {
  grid-area: blogger;
  min-width: 0;
  overflow: hidden;
  color: var(--signal-secondary);
  font-size: var(--type-meta);
  font-weight: 650;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.opportunity-support > small {
  grid-area: stance;
  color: var(--profit);
  font: 600 var(--type-meta)/1.3 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  white-space: nowrap;
}

.opportunity-support.is-weakened > small { color: var(--caution); }

.opportunity-support time {
  grid-area: support-time;
  min-width: 0;
  display: flex;
  justify-content: space-between;
  gap: 4px;
  color: var(--signal-muted);
  font: 500 var(--type-meta)/1.3 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.opportunity-support time span:last-child { text-align: right; }

.opportunity-support time.freshness-aging,
.opportunity-support time.freshness-old { color: var(--caution); }

.opportunity-support time.freshness-old { font-weight: 700; }

.opportunity-price-cell,
.opportunity-risk-cell {
  display: table-cell;
}

.opportunity-price-cell strong { display: block; font-size: var(--type-key); }
.opportunity-price-cell small {
  display: block;
  margin-top: 6px;
  color: var(--signal-tertiary);
}
.opportunity-row.status-unavailable .opportunity-price-cell strong {
  color: var(--signal-muted);
  font-size: var(--type-body);
}

.opportunity-price-state {
  width: max-content;
  display: block;
  margin-top: 6px;
  color: var(--caution);
  font-size: var(--type-meta);
  font-weight: 700;
}

.opportunity-price-state.status-in_zone { color: var(--profit); }
.opportunity-price-state.status-unavailable { color: var(--signal-muted); }
.opportunity-price-state.status-broken_down { color: var(--risk); }
.opportunity-price-state.status-invalidated { color: var(--risk); font-weight: 700; }

.opportunity-invalidations b { color: var(--risk); font-size: var(--type-meta); }
.opportunity-invalidations .is-unknown b { color: var(--signal-secondary); }
.opportunity-risk-cell > time {
  display: block;
  margin-top: 10px;
  font-family: "Ubuntu Mono", "Nimbus Mono PS", monospace;
}

.opportunity-evidence-row > td {
  border-bottom: 1px solid var(--wire-soft);
  padding: 0;
}

.opportunity-group:last-child .opportunity-evidence-row > td { border-bottom: 0; }

.opportunity-evidence summary {
  min-height: 44px;
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: 8px;
  color: var(--tape-blue);
  padding: 0 12px;
  font-size: var(--type-meta);
  font-weight: 650;
  cursor: pointer;
  list-style: none;
  transition: color 150ms ease-out, background-color 150ms ease-out;
}

.opportunity-evidence summary span {
  color: var(--signal-muted);
  font-weight: 500;
}

.opportunity-evidence summary b {
  color: var(--tape-blue);
  font-weight: 700;
}

.opportunity-evidence summary::-webkit-details-marker { display: none; }

.opportunity-evidence summary::after {
  width: 7px;
  height: 7px;
  border-right: 1px solid currentColor;
  border-bottom: 1px solid currentColor;
  content: "";
  transform: rotate(45deg) translateY(-2px);
  transition: transform 150ms cubic-bezier(0.23, 1, 0.32, 1);
}

.opportunity-evidence summary:hover {
  background: var(--wire-soft);
  color: var(--profit);
}

.opportunity-evidence[open] summary::after { transform: rotate(225deg) translate(-2px, -2px); }

.opportunity-evidence ol {
  margin: 0;
  border-top: 1px solid var(--wire-soft);
  background: var(--tape-inset);
  padding: 4px 12px;
  list-style: none;
}

.opportunity-evidence li {
  min-width: 0;
  display: grid;
  grid-template-columns: minmax(150px, 0.8fr) minmax(280px, 2fr) auto;
  align-items: start;
  gap: 16px;
  border-bottom: 1px solid var(--wire-soft);
  padding: 12px 0;
}

.opportunity-evidence li:last-child { border-bottom: 0; }

.evidence-meta,
.evidence-copy {
  min-width: 0;
  display: grid;
  gap: 4px;
}

.evidence-meta b,
.evidence-copy b {
  color: var(--signal-secondary);
  font-size: var(--type-meta);
  font-weight: 650;
}

.evidence-meta span,
.evidence-meta time,
.evidence-copy span {
  color: var(--signal-muted);
  font-size: var(--type-meta);
  line-height: 1.45;
}

.evidence-meta time,
.evidence-copy b {
  font-family: "Ubuntu Mono", "Nimbus Mono PS", monospace;
  font-variant-numeric: tabular-nums;
}

.opportunity-evidence a {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
  color: var(--tape-blue);
  font-size: var(--type-meta);
  font-weight: 650;
  text-decoration: none;
  white-space: nowrap;
}

.opportunity-evidence a:hover { color: var(--profit); }

.opportunity-empty {
  margin: 0;
  background: var(--terminal-raised);
}

.stance-columns {
  display: grid;
  /* 两栏：共同看多 / 分歧·观察 */
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 16px;
  align-items: start;
}

.stance-group {
  min-width: 0;
}

.stance-heading {
  min-height: 36px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  border-bottom: 2px solid var(--signal-muted);
  padding: 0 4px 10px;
}

.stance-bullish .stance-heading { border-bottom-color: var(--profit-muted); }
.stance-bearish .stance-heading { border-bottom-color: var(--risk-muted); }
.stance-neutral .stance-heading { border-bottom-color: rgba(226, 183, 101, 0.42); }

.stance-title {
  margin: 0;
  color: var(--signal-secondary);
  font-size: var(--type-body);
  font-weight: 650;
}

.stance-bullish .stance-title { color: var(--profit); }
.stance-bearish .stance-title { color: var(--risk); }
.stance-neutral .stance-title { color: var(--caution); }

.stance-heading > span {
  color: var(--signal-muted);
  font: 600 var(--type-meta)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  font-variant-numeric: tabular-nums;
}

.consensus-list {
  margin: 12px 0 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 8px;
}

.consensus-row {
  min-height: 142px;
  display: grid;
  align-content: start;
  gap: 12px;
  border: 1px solid var(--wire);
  border-radius: var(--radius-panel);
  background: var(--terminal-raised);
  color: var(--signal-ink);
  padding: 16px;
  text-decoration: none;
  cursor: pointer;
  transition: border-color 150ms ease-out, background-color 150ms ease-out;
}

.consensus-row:hover {
  border-color: var(--wire-focus);
  background: var(--tape-surface);
}

.consensus-row:focus-visible {
  outline: 2px solid var(--wire-focus);
  outline-offset: 2px;
}

.event-primary {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}

.event-primary strong {
  color: var(--signal-ink);
  font: 700 var(--type-key)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  letter-spacing: -0.02em;
}

.ticker-identity {
  min-width: 0;
  display: inline-flex;
  align-items: baseline;
  gap: 8px;
  color: inherit;
  text-decoration: none;
}

.consensus-row:hover .ticker-identity strong { color: var(--profit); }

.ticker-identity small {
  overflow: hidden;
  color: var(--signal-tertiary);
  font-size: var(--type-meta);
  font-weight: 500;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.event-primary time {
  color: var(--signal-muted);
  font: 500 var(--type-meta)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  font-variant-numeric: tabular-nums;
}

.blogger-actions {
  display: grid;
  gap: 6px;
}

.blogger-action {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  align-items: center;
  gap: 8px;
  border-left: 2px solid var(--signal-muted);
  background: var(--tape-inset);
  padding: 7px 9px;
}

.blogger-action.stance-bullish { border-left-color: var(--profit-muted); }
.blogger-action.stance-bearish { border-left-color: var(--risk-muted); }
.blogger-action.stance-neutral { border-left-color: rgba(226, 183, 101, 0.42); }
.blogger-action.action-reduce { border-left-color: rgba(226, 183, 101, 0.52); }
.blogger-action.action-close,
.blogger-action.action-stop { border-left-color: var(--risk-muted); }

.blogger-action b {
  min-width: 0;
  overflow: hidden;
  color: var(--signal-secondary);
  font-size: var(--type-body);
  font-weight: 550;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.blogger-action > span {
  color: var(--signal-tertiary);
  font: 500 var(--type-meta)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.blogger-action.stance-bullish > span { color: var(--profit); }
.blogger-action.stance-bearish > span { color: var(--risk); }
.blogger-action.stance-neutral > span { color: var(--caution); }
.blogger-action.action-reduce > span { color: var(--caution); }
.blogger-action.action-close > span,
.blogger-action.action-stop > span { color: var(--risk); }

.row-link-label {
  min-height: 40px;
  display: inline-flex;
  align-items: center;
  color: var(--signal-tertiary);
  font-size: var(--type-body);
  text-decoration: none;
}

.consensus-row:hover .row-link-label { color: var(--signal-secondary); }

.row-actions {
  min-height: 40px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  border-top: 1px solid var(--wire-soft);
  padding-top: 8px;
}

.research-action {
  min-height: 40px;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  border: 1px solid var(--wire);
  border-radius: var(--radius-control);
  background: var(--tape-surface);
  color: var(--signal-secondary);
  padding: 0 10px;
  font-size: var(--type-body);
  font-weight: 600;
  text-decoration: none;
  white-space: nowrap;
}

.research-action.status-ready { color: var(--profit); }
.research-action.status-queued,
.research-action.status-running { color: var(--caution); }
.research-action.status-failed { color: var(--risk); }
.research-action.is-disabled { color: var(--signal-muted); }

.hot-marker {
  color: var(--profit);
  font: 700 var(--type-meta)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  letter-spacing: 0.06em;
}

.stance-empty {
  color: var(--signal-muted);
  border: 1px dashed var(--wire);
  border-radius: var(--radius-panel);
  padding: 16px;
  margin: 12px 0 0;
}

.event-summary {
  margin: 0;
  line-height: 1.8;
}

.event-summary-missing { color: var(--signal-muted); font-style: italic; }

.event-meta {
  margin: 0;
  padding: 0;
  list-style: none;
  color: var(--signal-secondary);
  font-size: var(--type-body);
  display: grid;
  gap: 0.25rem;
}

@media (max-width: 1000px) {
  .stance-columns { grid-template-columns: 1fr; gap: 28px; }
  .consensus-row { min-height: 0; }
  .index-labels,
  .index-row { grid-template-columns: minmax(140px, 1fr) 110px 120px minmax(210px, 1.6fr); }
  .index-labels > :last-child,
  .index-row > time { display: none; }
}

@media (max-width: 840px) {
  .opportunity-board {
    overflow: visible;
    border: 0;
    background: transparent;
  }

  .opportunity-table,
  .opportunity-group,
  .opportunity-row,
  .opportunity-cell,
  .opportunity-evidence-row,
  .opportunity-evidence-row > td {
    display: block;
    width: 100%;
  }

  .opportunity-table colgroup,
  .opportunity-table thead { display: none; }

  .opportunity-group {
    overflow: hidden;
    border: 1px solid var(--wire);
    border-radius: var(--radius-panel);
    background: var(--terminal-raised);
  }

  .opportunity-group + .opportunity-group { margin-top: 12px; }

  .opportunity-row {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .opportunity-cell,
  .opportunity-group + .opportunity-group .opportunity-cell {
    display: grid;
    align-content: start;
    gap: 8px;
    border-top: 0;
    border-bottom: 1px solid var(--wire-soft);
    padding: 12px;
  }

  .opportunity-cell:nth-child(odd) { border-right: 1px solid var(--wire-soft); }

  .opportunity-cell::before {
    display: block;
    color: var(--signal-muted);
    font: 700 var(--type-meta)/1 "Ubuntu Mono", "Nimbus Mono PS", monospace;
    letter-spacing: 0.04em;
    content: attr(data-label);
  }

  .opportunity-symbol-cell {
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
  }

  .opportunity-symbol-cell::before { grid-column: 1 / -1; }
  .opportunity-ticker { min-height: 44px; }
  .opportunity-status { justify-self: end; }
  .opportunity-risk-cell {
    grid-column: 1 / -1;
    border-right: 0;
  }

  .opportunity-evidence-row > td { border-bottom: 0; }
  .opportunity-evidence summary { justify-content: space-between; }
  .opportunity-evidence li { grid-template-columns: 140px minmax(0, 1fr) auto; }
}

@media (max-width: 600px) {
  .consensus-main { gap: 24px; padding-block: 24px 48px; }
  .consensus-head { align-items: start; flex-direction: column; gap: 12px; }
  .consensus-head h1 { font-size: var(--type-key); }
  .consensus-sub { font-size: var(--type-meta); }
  .index-tier { padding-bottom: 28px; }
  .tier-heading { align-items: start; }
  .tier-heading p { max-width: 270px; line-height: 1.5; }
  .index-labels { display: none; }
  .index-row {
    grid-template-columns: minmax(132px, 1fr) auto;
    gap: 8px 16px;
    min-height: 82px;
    padding: 13px 12px;
  }
  .index-direction { justify-self: end; }
  .index-split { grid-column: 1; }
  .index-participants { grid-column: 2; grid-row: 2; justify-content: end; }
  .index-participants > span { font-size: var(--type-meta); }
  .consensus-row { padding: 14px 12px; }
  .blogger-action { grid-template-columns: 1fr; gap: 5px; }
  .opportunity-tier { padding-bottom: 28px; }
  .opportunity-heading { align-items: start; flex-direction: column; gap: 8px; }
  .opportunity-heading > span { white-space: normal; }
  .opportunity-meta { justify-items: start; }
  .opportunity-row { grid-template-columns: minmax(0, 1fr); }
  .opportunity-cell:nth-child(odd) { border-right: 0; }
  .opportunity-risk-cell { grid-column: auto; }
  .opportunity-supporters { grid-template-columns: minmax(0, 1fr); }
  .opportunity-support { grid-template-columns: minmax(0, 1fr) auto; }
  .opportunity-evidence li { grid-template-columns: minmax(0, 1fr); gap: 8px; }
  .opportunity-evidence a { min-height: 44px; }
}

.feeds-section h2 { margin-bottom: 1rem; }

.feed-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
  gap: 1rem;
}

.feed-card {
  border: 1px solid var(--wire);
  border-radius: 10px;
  background: var(--terminal-raised);
  padding: 1rem 1.1rem;
  min-width: 0;
}

.feed-card h3 { margin: 0 0 0.7rem; }

.signal-list {
  margin: 0;
  padding: 0;
  list-style: none;
  display: grid;
  gap: 0.45rem;
  font-size: var(--type-body);
}

.signal {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  align-items: baseline;
  border-left: 3px solid var(--wire);
  padding-left: 0.6rem;
  line-height: 1.5;
}

.signal.stance-bullish { border-left-color: var(--profit-muted); }
.signal.stance-bearish { border-left-color: var(--risk); }

.signal time { color: var(--signal-muted); font-variant-numeric: tabular-nums; }
.signal-ticker { font-weight: 600; }
.signal-action { color: var(--signal-secondary); }
.signal-inst, .signal-price { color: var(--signal-tertiary); }
.signal-note {
  flex-basis: 100%;
  color: var(--signal-tertiary);
}

.empty-note {
  color: var(--signal-muted);
  border: 1px dashed var(--wire);
  border-radius: 10px;
  padding: 1.2rem;
}

/* Latest price + day change on each consensus stock card. */
.quote-badge {
  display: inline-flex;
  align-items: baseline;
  gap: 0.35em;
  padding: 2px 8px;
  border-radius: var(--radius-control);
  border: 1px solid var(--wire);
  background: var(--tape-inset);
  font: 600 var(--type-meta)/1.4 "Ubuntu Mono", "Nimbus Mono PS", monospace;
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
}

.quote-badge .quote-price::before {
  content: "$";
  color: var(--signal-tertiary);
  font-weight: 400;
}

.quote-badge .quote-change {
  font-style: normal;
  font-size: var(--type-meta);
}

.quote-up { color: var(--profit); border-color: var(--profit-muted); }
.quote-down { color: var(--risk); border-color: var(--risk-muted); }
.quote-flat { color: var(--signal-secondary); }

/* 博主历史战绩。刻意不参与共识判定：博主的历史超额几乎预测不了下一次
   （八位博主前后半段 r=0.35，该样本量下与"无关"区分不开），拿它加权
   等于把噪声写进榜单，也会抹掉"两人独立同向"本身的信息量。
   这里只把事实摆出来，权重交给读者。 */
.track-record {
  display: inline-flex;
  align-items: baseline;
  gap: 0.2em;
  margin-left: 0.35em;
  padding: 0 0.35em;
  border-radius: 999px;
  border: 1px solid var(--wire-soft);
  font-size: var(--type-meta);
  font-variant-numeric: tabular-nums;
  white-space: nowrap;
  color: var(--signal-tertiary);
}
.track-record i {
  font-style: normal;
  opacity: 0.75;
}
/* 只有经得起多重比较校正的边际才着色；其余保持中性，
   避免读者把一个统计上无法区分于零的数字当成结论。 */
.track-record.tr-strong {
  color: var(--profit);
  border-color: var(--profit-muted);
}
.track-record.tr-insufficient {
  font-style: italic;
}

/* Model-written summaries are not the blogger's words; the audit list must
   not present them as though they were. */
.evidence-copy .evidence-paraphrase { font-style: italic; color: var(--signal-secondary); }

.opportunity-price-state .quote-extended {
  margin-left: 4px;
  font-style: normal;
  color: var(--signal-secondary);
  font-size: var(--type-meta);
}

/* Supporters the arena has never scored: the page must not let their backing
   look like backing from someone with a measured record. */
.track-record.tr-unmeasured { color: var(--signal-muted); border-style: dashed; }
