diff --git a/static/score.js b/static/score.js index 3b7a3a7..8ad3d3a 100644 --- a/static/score.js +++ b/static/score.js @@ -122,19 +122,17 @@ function render(data) { const cards = METRIC_ORDER.map((k) => metricCard(annual.metrics[k])).join(""); const wbNote = wetbulbNote(annual.metrics.wetbulb, baseYrs); - // ---- by-season rows ---- + // ---- by-season table (seasons × metrics, columns aligned) ---- + const seasonHead = `Overall${METRIC_ORDER.map((k) => + `${shortLabel(k)}`).join("")}`; const seasonRows = SEASON_ORDER.map((sk) => { const sl = s.slices[sk]; - const chips = METRIC_ORDER.map((k) => seasonChip(sl.metrics[k])).join(""); const oc = sl.overall; - const overallChip = oc - ? `${oc.score}` - : ``; - return `
- ${SEASON_NAMES[sk]} - ${overallChip} - ${chips} -
`; + const overallCell = oc + ? `${oc.score}` + : `—`; + const cells = METRIC_ORDER.map((k) => seasonCell(sl.metrics[k])).join(""); + return `${SEASON_NAMES[sk]}${overallCell}${cells}`; }).join(""); scoreBody.innerHTML = ` @@ -142,8 +140,8 @@ function render(data) { ${wbNote}

By season

-

${METRIC_ORDER.map((k) => shortLabel(k)).join(" · ")}

- ${seasonRows} +
+ ${seasonHead}${seasonRows}
@@ -192,9 +190,9 @@ function scoreDirection(m) { return `~${pts} pts ${esc(m.direction)}`; } -function seasonChip(m) { - if (!m || m.score == null) return ``; - return `${m.score}`; +function seasonCell(m) { + if (!m || m.score == null) return `—`; + return `${m.score}`; } const shortLabel = (k) => ({ precip: "Precip", tmax: "High", tmin: "Low", feels: "Feels", diff --git a/static/style.css b/static/style.css index 4700ffe..0d77568 100644 --- a/static/style.css +++ b/static/style.css @@ -1730,7 +1730,6 @@ td.rec-date { color: var(--muted); font-size: 13px; } .score-note { font-size: 12px; color: var(--muted); margin: 12px 0 0; line-height: 1.4; } .score-section { margin: 20px 0; } -.score-legend { font-size: 12px; color: var(--muted); margin: -6px 0 10px; } /* Wet-bulb explainer + heat-stress-day share. */ .score-callout { @@ -1738,19 +1737,8 @@ td.rec-date { color: var(--muted); font-size: 13px; } padding: 12px 14px; margin: 14px 0 4px; font-size: 13px; line-height: 1.5; color: var(--text); } -/* One row per season: name · overall · a chip per metric. */ -.season-scores { - display: grid; grid-template-columns: 64px 40px 1fr; align-items: center; - gap: 10px; padding: 7px 0; border-top: 1px solid var(--border); -} -.season-scores-name { font-size: 13px; font-weight: 600; color: var(--text); } -.season-scores-chips { display: flex; flex-wrap: wrap; gap: 5px; } -.score-chip { - display: inline-flex; align-items: center; justify-content: center; - min-width: 30px; padding: 3px 6px; border-radius: 7px; - font-size: 12px; font-weight: 700; color: var(--text); -} -.season-scores-overall .score-chip { min-width: 34px; font-weight: 800; } +/* By-season scores: seasons as rows, one aligned column per metric. */ +.season-table th:first-child, .season-table td:first-child { text-align: left; } /* Summary reveal — pill button + caret, mirrors the season-expand pattern. */ .summary-toggle { @@ -1787,7 +1775,6 @@ td.rec-date { color: var(--muted); font-size: 13px; } @media (max-width: 640px) { .score-num { font-size: 40px; } .score-hero { padding: 14px 15px; } - .season-scores { grid-template-columns: 56px 36px 1fr; gap: 8px; } } /* Monthly temperature-range strip: one gradient bar per month, low→high on a shared