:root { --bg: #f4f6f3; --panel: #ffffff; --line: #d8ddd7; --text: #1f2523; --muted: #65706b; --strong: #0f1614; --green: #138a51; --red: #c33b32; --amber: #af6a13; --blue: #2f6f9f; --teal: #147b7e; --purple: #7654a1; --shadow: 0 8px 18px rgba(27, 34, 31, 0.08); } * { box-sizing: border-box; } html { min-width: 320px; } body { margin: 0; background: var(--bg); color: var(--text); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; letter-spacing: 0; } button, input, select { font: inherit; } .app-shell { width: min(1440px, calc(100vw - 28px)); margin: 0 auto; padding: 18px 0 28px; } .topbar { position: sticky; top: 0; z-index: 10; display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: 14px 0 18px; background: rgba(244, 246, 243, 0.96); backdrop-filter: blur(8px); border-bottom: 1px solid var(--line); } h1, h2, p { margin: 0; } h1 { color: var(--strong); font-size: clamp(24px, 2.4vw, 34px); font-weight: 760; line-height: 1.1; } h2 { color: var(--strong); font-size: 15px; font-weight: 720; line-height: 1.3; } #statusLine { margin-top: 6px; color: var(--muted); font-size: 14px; } .top-actions { display: flex; align-items: center; justify-content: flex-end; gap: 12px; min-width: 260px; } button { min-width: 96px; border: 1px solid #1f2523; border-radius: 7px; background: #1f2523; color: #fff; padding: 9px 14px; cursor: pointer; } button:disabled { cursor: wait; opacity: 0.68; } .muted { color: var(--muted); font-size: 12px; line-height: 1.4; } .metric-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 12px; margin-top: 16px; } .metric-panel, .panel { border: 1px solid var(--line); border-radius: 8px; background: var(--panel); box-shadow: var(--shadow); } .metric-panel { min-height: 132px; padding: 16px; } .metric-title { display: flex; align-items: center; justify-content: space-between; gap: 10px; color: var(--muted); font-size: 13px; } .metric-value { margin-top: 12px; color: var(--strong); font-size: 30px; font-weight: 780; line-height: 1; } .metric-meta { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; margin-top: 14px; } .metric-meta span { display: block; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .metric-meta b { display: block; margin-top: 2px; color: var(--strong); font-size: 14px; } .change { font-variant-numeric: tabular-nums; } .pos { color: var(--green); } .neg { color: var(--red); } .flat { color: var(--muted); } .dashboard-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 12px; margin-top: 12px; } .panel { min-height: 260px; padding: 14px; overflow: hidden; } .panel-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; min-height: 22px; margin-bottom: 10px; } .span-4 { grid-column: span 4; } .span-5 { grid-column: span 5; } .span-6 { grid-column: span 6; } .span-7 { grid-column: span 7; } .span-8 { grid-column: span 8; } .span-12 { grid-column: span 12; } .chart-canvas { width: 100%; height: 250px; display: block; } .chart-canvas.tall { height: 300px; } .chart-canvas.xlarge { height: 390px; } .mag7-main-panel { min-height: 460px; } .chart-stats { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-bottom: 8px; } .chart-stat { min-height: 54px; border: 1px solid #e5e9e5; border-radius: 7px; padding: 8px 10px; background: #fbfcfb; } .chart-stat span { display: block; color: var(--muted); font-size: 11px; line-height: 1.2; } .chart-stat strong { display: block; margin-top: 4px; color: var(--strong); font-size: 16px; line-height: 1.2; font-variant-numeric: tabular-nums; } .chart-stats.compact { grid-template-columns: repeat(3, minmax(0, 1fr)); } .heatmap-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; } .heatmap-cell { min-height: 76px; border: 1px solid rgba(31, 37, 35, 0.08); border-radius: 7px; padding: 10px; color: #101613; overflow: hidden; } .heatmap-cell strong, .heatmap-cell span { display: block; } .heatmap-cell strong { font-size: 14px; line-height: 1.2; } .heatmap-cell .heat-change { margin-top: 8px; font-size: 18px; font-weight: 780; font-variant-numeric: tabular-nums; } .heatmap-cell .heat-meta { margin-top: 4px; color: rgba(16, 22, 19, 0.68); font-size: 11px; } .participation-meter { display: grid; gap: 14px; } .participation-card { border: 1px solid #e5e9e5; border-radius: 8px; padding: 12px; background: #fbfcfb; } .participation-head { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; margin-bottom: 10px; } .participation-head strong { color: var(--strong); font-size: 16px; } .participation-score { color: var(--strong); font-size: 22px; font-weight: 780; font-variant-numeric: tabular-nums; } .participation-bar { display: flex; width: 100%; height: 18px; overflow: hidden; border-radius: 999px; background: #e7ebe7; } .participation-bar span { min-width: 0; } .participation-bar .advance { background: var(--green); } .participation-bar .decline { background: var(--red); } .participation-bar .unchanged { background: #9aa39e; } .participation-meta { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 8px; margin-top: 10px; color: var(--muted); font-size: 12px; } .participation-meta b { display: block; margin-top: 2px; color: var(--strong); font-size: 13px; } .participation-state { display: inline-flex; align-items: center; min-height: 22px; border-radius: 999px; padding: 3px 9px; background: #edf4ef; color: var(--green); font-size: 12px; font-weight: 720; } .participation-state.mixed { background: #fff4df; color: var(--amber); } .participation-state.weak { background: #f8e8e6; color: var(--red); } .table-wrap { overflow: auto; max-height: 320px; } table { width: 100%; border-collapse: collapse; font-size: 13px; } th, td { padding: 7px 6px; border-bottom: 1px solid #ebeeeb; text-align: right; white-space: nowrap; } th:first-child, td:first-child { text-align: left; } th { position: sticky; top: 0; z-index: 1; background: var(--panel); color: var(--muted); font-size: 11px; font-weight: 720; } .range-list { display: grid; gap: 7px; max-height: 316px; overflow: auto; padding-right: 2px; } .range-row { display: grid; grid-template-columns: 58px minmax(100px, 1fr) 54px; align-items: center; gap: 10px; min-height: 20px; font-size: 12px; } .range-track { position: relative; height: 8px; border-radius: 999px; background: #e7ebe7; overflow: hidden; } .range-fill { position: absolute; inset: 0 auto 0 0; width: 0; border-radius: 999px; background: var(--blue); } .ticker { color: var(--strong); font-weight: 730; } .mover-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .mover-list h3 { margin: 0 0 6px; color: var(--muted); font-size: 12px; } .mini-row { display: flex; align-items: center; justify-content: space-between; gap: 8px; min-height: 24px; border-bottom: 1px solid #ebeeeb; font-size: 12px; } .source-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .source-grid > div { min-height: 74px; border: 1px solid #e1e5e1; border-radius: 8px; padding: 12px; background: #fbfcfb; } .source-grid strong { display: block; margin-top: 6px; color: var(--strong); font-size: 14px; line-height: 1.35; } .field-label { display: block; color: var(--muted); font-size: 12px; } .mode-pill { display: inline-flex; align-items: center; min-height: 22px; border-radius: 999px; padding: 3px 9px; background: #edf4ef; color: var(--green); font-size: 12px; font-weight: 720; } .mode-pill.seed { background: #fff4df; color: var(--amber); } .empty-state { display: grid; min-height: 120px; place-items: center; color: var(--muted); font-size: 13px; } @media (max-width: 1180px) { .metric-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .span-4, .span-5, .span-6, .span-7, .span-8 { grid-column: span 6; } .span-12 { grid-column: span 12; } } @media (max-width: 760px) { .app-shell { width: min(100vw - 20px, 720px); padding-top: 8px; } .topbar { align-items: flex-start; flex-direction: column; } .top-actions { width: 100%; justify-content: space-between; min-width: 0; } .metric-grid, .dashboard-grid { grid-template-columns: 1fr; } .span-4, .span-5, .span-6, .span-7, .span-8, .span-12 { grid-column: span 1; } .metric-meta, .source-grid, .chart-stats, .chart-stats.compact, .heatmap-grid, .participation-meta { grid-template-columns: 1fr; } .mover-grid { grid-template-columns: 1fr; } .chart-canvas, .chart-canvas.tall, .chart-canvas.xlarge { height: 240px; } .mag7-main-panel { min-height: auto; } }