From f9b2edb40ac36fd5f1e773238b934b86c39db73d Mon Sep 17 00:00:00 2001 From: nullhack Date: Thu, 23 Jul 2026 03:53:54 -0400 Subject: [PATCH 1/4] =?UTF-8?q?fix(dashboard):=20rename=20recent=20activit?= =?UTF-8?q?y=20labels=20NEW=E2=86=92OPENED,=20NEWS=E2=86=92ARTICLES?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NEW and NEWS were visually/lexically confusing in the summary chips and row badges. Rename to OPENED (incident first reported in window) and ARTICLES (news articles published) for clear distinction from LOG. --- dashboard/app.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/dashboard/app.js b/dashboard/app.js index 6bde0507..3471b1e6 100644 --- a/dashboard/app.js +++ b/dashboard/app.js @@ -734,14 +734,14 @@ function renderRecentActivity() { ${events.length} events since ${cutoffLbl} - NEW ${newCt} + OPENED ${newCt} LOG ${logCt} - NEWS ${newsCt} + ARTICLES ${newsCt} `; const BADGE = { NEW: "recent-badge--new", LOG: "recent-badge--log", NEWS: "recent-badge--news" }; - const LABEL = { NEW: "NEW", LOG: "LOG", NEWS: "NEWS" }; + const LABEL = { NEW: "OPENED", LOG: "LOG", NEWS: "ARTICLES" }; $("#recentFeed").innerHTML = events.map((e) => { const tsLbl = (e.ts || "").slice(0, 16).replace("T", " ") || "—"; const name = e.incident_name || e.detail; From f38466d0cfa1d61cb118a9ac5170f980f83686aa Mon Sep 17 00:00:00 2001 From: nullhack Date: Thu, 23 Jul 2026 03:58:48 -0400 Subject: [PATCH 2/4] fix(dashboard): widen map to span 7, narrow trend to span 5 --- dashboard/styles.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dashboard/styles.css b/dashboard/styles.css index e84a9490..27e19e4e 100644 --- a/dashboard/styles.css +++ b/dashboard/styles.css @@ -273,8 +273,8 @@ code { font-family: var(--mono); font-size: .9em; } display: flex; flex-direction: column; overflow: hidden; } .span-full { grid-column: span 12; } -.card--map { grid-column: span 6; } -.card--trend { grid-column: span 6; } +.card--map { grid-column: span 7; } +.card--trend { grid-column: span 5; } .card--table { grid-column: span 12; } .card__head { display: flex; align-items: baseline; justify-content: space-between; From 5fe44966fce0ccf79df1640f57c28860e6d1e065 Mon Sep 17 00:00:00 2001 From: nullhack Date: Thu, 23 Jul 2026 04:03:31 -0400 Subject: [PATCH 3/4] =?UTF-8?q?fix(dashboard):=203-col=20top=20row=20?= =?UTF-8?q?=E2=80=94=20map=20span=204=20+=20trend=20panels=20side-by-side?= =?UTF-8?q?=20span=208?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/styles.css | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/dashboard/styles.css b/dashboard/styles.css index 27e19e4e..f3315265 100644 --- a/dashboard/styles.css +++ b/dashboard/styles.css @@ -273,8 +273,8 @@ code { font-family: var(--mono); font-size: .9em; } display: flex; flex-direction: column; overflow: hidden; } .span-full { grid-column: span 12; } -.card--map { grid-column: span 7; } -.card--trend { grid-column: span 5; } +.card--map { grid-column: span 4; } +.card--trend { grid-column: span 8; } .card--table { grid-column: span 12; } .card__head { display: flex; align-items: baseline; justify-content: space-between; @@ -300,11 +300,11 @@ code { font-family: var(--mono); font-size: .9em; } /* ============ TREND PANELS ============ */ .trend-grid { - display: grid; grid-template-columns: 1fr; gap: 0; + display: grid; grid-template-columns: 1fr 1fr; gap: 0; border-top: 1px solid var(--rc-line); } .trend-panel { position: relative; padding: 12px 18px 16px; min-width: 0; } -.trend-panel + .trend-panel { border-left: none; border-top: 1px solid var(--rc-line); } +.trend-panel + .trend-panel { border-left: 1px solid var(--rc-line); } .trend-panel__head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 4px; } .trend-panel__head h3 { font-size: 13px; font-weight: 700; color: var(--rc-ink); } .trend-panel__sub { font-size: 11px; font-weight: 500; color: var(--rc-muted); } From 992f1735e4d79a0c95a389d0ae0d8a638bf3fb4a Mon Sep 17 00:00:00 2001 From: nullhack Date: Thu, 23 Jul 2026 04:08:56 -0400 Subject: [PATCH 4/4] =?UTF-8?q?fix(dashboard):=20widen=20map=20span=205,?= =?UTF-8?q?=20trim=20heights=20=E2=80=94=20map=20320px,=20trend=20200px?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/app.js | 4 ++-- dashboard/styles.css | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dashboard/app.js b/dashboard/app.js index 3471b1e6..c66f735b 100644 --- a/dashboard/app.js +++ b/dashboard/app.js @@ -315,7 +315,7 @@ async function renderMap() { const world = await ensureWorld(); const countries = topojson.feature(world, world.objects.countries); const width = $("#worldMap").clientWidth || 800; - const height = 420; + const height = 320; svg.attr("viewBox", `0 0 ${width} ${height}`); _proj = d3.geoEqualEarth().fitExtent([[8, 8], [width - 8, height - 8]], countries); @@ -425,7 +425,7 @@ function renderTrendPanel(svgSel, tooltipSel, tdata, series, bucket) { const t = STATE.trend; const perLbl = bucket === "week" ? "wk" : "d"; const width = (document.querySelector(svgSel).clientWidth) || 520; - const height = 240, m = { t: 14, r: 16, b: 40, l: 40 }; + const height = 200, m = { t: 14, r: 16, b: 40, l: 40 }; const totals = series.map((s) => ({ key: s.key, color: s.color, total: d3.sum(s.values, (v) => v.count), peak: d3.max(s.values, (v) => v.count) || 0 })); totals.sort((a, b) => b.total - a.total); diff --git a/dashboard/styles.css b/dashboard/styles.css index f3315265..f1a9822a 100644 --- a/dashboard/styles.css +++ b/dashboard/styles.css @@ -273,8 +273,8 @@ code { font-family: var(--mono); font-size: .9em; } display: flex; flex-direction: column; overflow: hidden; } .span-full { grid-column: span 12; } -.card--map { grid-column: span 4; } -.card--trend { grid-column: span 8; } +.card--map { grid-column: span 5; } +.card--trend { grid-column: span 7; } .card--table { grid-column: span 12; } .card__head { display: flex; align-items: baseline; justify-content: space-between; @@ -283,7 +283,7 @@ code { font-family: var(--mono); font-size: .9em; } .card__head h2 { font-size: 14px; font-weight: 700; } .card__hint { font-size: 11px; color: var(--rc-muted); } .map-wrap { position: relative; padding: 8px; } -.map-wrap svg { width: 100%; height: 420px; display: block; } +.map-wrap svg { width: 100%; height: 320px; display: block; } .map-legend { position: absolute; left: 16px; bottom: 14px; background: rgba(255,255,255,.94); border: 1px solid var(--rc-line); @@ -308,7 +308,7 @@ code { font-family: var(--mono); font-size: .9em; } .trend-panel__head { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; margin-bottom: 4px; } .trend-panel__head h3 { font-size: 13px; font-weight: 700; color: var(--rc-ink); } .trend-panel__sub { font-size: 11px; font-weight: 500; color: var(--rc-muted); } -.trend-panel svg { width: 100%; height: 240px; display: block; } +.trend-panel svg { width: 100%; height: 200px; display: block; } /* ============ TREND TOOLTIP ============ */ .trend-tooltip {