#polls-root { max-width: 1020px; }
.tracker-loading { color: #475569; }
.tracker-updated { font-size: 0.84rem; color: #94a3b8; font-style: italic; margin: 0 0 18px; }
.tracker-h2 { font-size: 1.6rem; margin: 44px 0 6px; }
.tracker-sub { color: #475569; margin: 0 0 18px; font-size: 0.95rem; max-width: 720px; }

/* party stat blocks */
.stat-row { display: grid; grid-template-columns: repeat(6, 1fr); gap: 10px; margin: 4px 0 18px; border-top: 2px solid #0f172a; }
.stat-block { padding: 10px 2px 0; }
.stat-num { font-size: 1.9rem; font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums; }
.stat-name { font-size: 0.74rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.06em; color: #475569; margin-top: 4px; }
.poll-lead-note { color: #1e293b; font-size: 1.02rem; margin: 0 0 6px; }
.week-note { color: #64748b; font-size: 0.9rem; font-style: italic; margin: 0 0 12px; }

/* trend chart + map share svg conventions */
.viz-frame { margin: 8px 0 4px; }
.viz-frame svg { width: 100%; height: auto; display: block; }
.viz-caption { font-size: 0.8rem; color: #94a3b8; margin: 6px 0 0; }

/* map legend */
.map-legend { display: flex; flex-wrap: wrap; gap: 14px; margin: 10px 0 0; font-size: 0.82rem; color: #475569; }
.map-legend span { display: inline-flex; align-items: center; gap: 6px; }
.map-legend i { width: 12px; height: 12px; border-radius: 2px; display: inline-block; }

/* ballot vs bet */
.bvb-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(330px, 1fr)); gap: 18px; margin: 6px 0 0; }
.bvb-card { border-top: 2px solid #0f172a; background: #fff; }
.bvb-race { font-weight: 800; font-size: 1.05rem; padding: 12px 0 10px; border-bottom: 1px solid #f1f5f9; }
.bvb-cols { display: grid; grid-template-columns: 1fr 1fr; }
.bvb-col { padding: 14px 18px 12px 0; }
.bvb-col + .bvb-col { border-left: 1px solid #f1f5f9; padding-left: 18px; }
.bvb-tag { font-size: 0.68rem; font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; color: #64748b; margin: 0 0 8px; }
.bvb-num { font-size: 2rem; font-weight: 800; line-height: 1; font-variant-numeric: tabular-nums; }
.bvb-num small { font-size: 0.9rem; font-weight: 700; color: #475569; }
.bvb-who { font-weight: 700; font-size: 0.92rem; margin: 6px 0 2px; }
.bvb-src { font-size: 0.76rem; color: #94a3b8; }
.bvb-read { padding: 10px 0 12px; font-size: 0.9rem; font-style: italic; color: #334155; border-top: 1px solid #f1f5f9; }

/* polls table */
.polls-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; margin: 8px 0 0; }
.polls-table th { text-align: right; padding: 8px 10px; border-bottom: 2px solid #0f172a; font-size: 0.74rem; text-transform: uppercase; letter-spacing: 0.08em; color: #475569; }
.polls-table th:first-child, .polls-table td:first-child { text-align: left; }
.polls-table td { padding: 8px 10px; border-bottom: 1px solid #e2e8f0; text-align: right; font-variant-numeric: tabular-nums; }
.polls-table td.poll-top { font-weight: 700; }

/* market cards */
.market-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 14px 32px; margin: 6px 0 0; }
.market-card { border-top: 1px solid #0f172a; padding: 12px 0 14px; background: #fff; display: flex; flex-direction: column; }
.market-q { font-weight: 700; font-size: 0.98rem; line-height: 1.3; margin: 0 0 12px; }
.market-delta { display: inline-block; font-size: 0.74rem; font-weight: 700; margin-left: 6px; vertical-align: 1px; }
.market-delta.up { color: #047857; }
.market-delta.down { color: #b91c1c; }
.market-outcome { display: grid; grid-template-columns: 1fr 44px; gap: 8px; align-items: center; font-size: 0.88rem; padding: 3px 0; }
.market-outcome-bar { grid-column: 1 / -1; background: #f1f5f9; height: 5px; margin-bottom: 4px; }
.market-outcome-fill { height: 100%; background: #ce1126; }
.market-outcome-pct { font-weight: 700; text-align: right; font-variant-numeric: tabular-nums; }
.market-meta { margin-top: auto; padding-top: 10px; font-size: 0.76rem; color: #94a3b8; }
.market-meta a { color: #94a3b8; }
.market-thin { color: #b45309; font-weight: 600; }
.methodology-block { max-width: 1020px; margin: 44px 0 0; padding: 18px 20px; background: #f8fafc; border-left: 3px solid #ce1126; font-size: 0.9rem; color: #475569; }

@media (max-width: 640px) {
  .stat-row { grid-template-columns: repeat(3, 1fr); }
  .stat-num { font-size: 1.5rem; }
  .bvb-cols { grid-template-columns: 1fr 1fr; }
  .polls-table { font-size: 0.78rem; }
  .polls-table th, .polls-table td { padding: 6px 5px; }
}
