From 6f1833eb107c0834483054fcd2065e36bd7542bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Tue, 7 Jul 2026 16:19:14 +0200 Subject: [PATCH 1/2] fix(dashboard): anchor the hero greeting and unify the ring green MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The greeting drifted to the vertical centre of the taller ring column and the briefing sat a full step below it — the top row now aligns to its start and the section gap tightens, so the greeting anchors to the top edge and the briefing follows closely. The band-fallback ring green landed on its own hue (#3fb868) while every positive signal and trend delta beside it used --success (#50fa7b); a green ring now lands on --success too, so 'green' reads as one green across rings, signals, and deltas. Computed contrast 11.9:1 dark / 6.1:1 light — well past the graphics floor. --- src/app/globals.css | 14 +++++++++----- src/components/dashboard/hero/dashboard-hero.tsx | 12 +++++++----- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/app/globals.css b/src/app/globals.css index 7ee458730..68abd833c 100644 --- a/src/app/globals.css +++ b/src/app/globals.css @@ -283,9 +283,11 @@ --ring-strain-from: #e06aa8; --ring-strain-to: #ea74b1; --tile-strain: #ff79c6; - /* Band fallback (anatomy detail view, no per-metric hue). */ - --ring-green-from: #3fb868; - --ring-green-to: #48c473; + /* Band fallback (anatomy detail view, no per-metric hue). Lands on the + app-wide --success green (#50fa7b) so a "green" ring matches the green + of every positive signal / trend delta beside it. */ + --ring-green-from: #35d76a; + --ring-green-to: #50fa7b; --ring-yellow-from: #e0a050; --ring-yellow-to: #e8ab5c; --ring-red-from: #e0594a; @@ -409,8 +411,10 @@ --ring-strain-from: #b62478; --ring-strain-to: #bd2a7e; --tile-strain: #b0277d; - --ring-green-from: #138043; - --ring-green-to: #168a48; + /* Light: lands on the light-theme --success (#14720a) so ring green + matches every positive signal beside it. */ + --ring-green-from: #12760f; + --ring-green-to: #14720a; --ring-yellow-from: #b27018; --ring-yellow-to: #bd7a1e; --ring-red-from: #b22e20; diff --git a/src/components/dashboard/hero/dashboard-hero.tsx b/src/components/dashboard/hero/dashboard-hero.tsx index 48ec8c1e1..4d615f84f 100644 --- a/src/components/dashboard/hero/dashboard-hero.tsx +++ b/src/components/dashboard/hero/dashboard-hero.tsx @@ -254,11 +254,13 @@ export function DashboardHero({ "min-h-[8.75rem] p-4 md:min-h-[9.5rem] md:p-6", )} > - {/* Vertical rhythm: the section gap (greeting/ring row → briefing) - reads one step larger than the intra-block spacing so the two - zones separate cleanly; the card's own padding stays symmetric. */} -
-
+ {/* Vertical rhythm: greeting/ring row and the briefing sit one + spacing step apart — tight enough that the briefing doesn't feel + adrift below a floating greeting. The top row aligns to its start + on desktop so the greeting anchors to the top edge instead of + drifting to the vertical centre of the taller ring column. */} +
+
{/* Greeting leads the typographic hierarchy: larger + heavier than the verdict so the personalised line reads first. From 4aa3342ba213a2b75443234e65affc881ddf3b8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc-Andr=C3=A9=20Bombeck?= Date: Tue, 7 Jul 2026 17:35:50 +0200 Subject: [PATCH 2/2] =?UTF-8?q?chore(release):=20v1.27.21=20=E2=80=94=20he?= =?UTF-8?q?ro=20spacing=20and=20one=20green?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 7 +++++++ docs/api/openapi.yaml | 2 +- package.json | 2 +- public/sw.js | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c7b5a6214..fa7b25fee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,13 @@ ## [Unreleased] +## [1.27.21] — 2026-07-07 — Hero spacing and one green + +### Changed + +- The dashboard hero's greeting anchors to the top edge instead of drifting to the vertical centre of the taller ring column, and the briefing follows closely instead of sitting a full step below — the wide gap under the greeting is gone. +- A "green" score ring now uses the same green as every positive signal and trend delta beside it (the band-fallback ring green landed on its own hue before). Green reads as one green across rings, signals, and deltas — the change is app-wide (insights rings included), with computed contrast 11.9:1 dark / 6.1:1 light. + ## [1.27.20] — 2026-07-07 — Coach and cycle toggle from the modules hub ### Changed diff --git a/docs/api/openapi.yaml b/docs/api/openapi.yaml index 3a629e6a0..cf449faec 100644 --- a/docs/api/openapi.yaml +++ b/docs/api/openapi.yaml @@ -1,7 +1,7 @@ openapi: 3.1.0 info: title: HealthLog API - version: 1.27.20 + version: 1.27.21 description: >- Self-hosted personal-health-tracking PWA — public API surface for the iOS native client and external ingest. diff --git a/package.json b/package.json index 9f6f481ae..e5553ef73 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "healthlog", - "version": "1.27.20", + "version": "1.27.21", "description": "Self-hosted personal-health-tracking PWA with Withings integration, AI insights, and doctor-report PDF export.", "license": "PolyForm-Noncommercial-1.0.0", "homepage": "https://healthlog.dev", diff --git a/public/sw.js b/public/sw.js index c4b0b4b70..4653a7755 100644 --- a/public/sw.js +++ b/public/sw.js @@ -36,7 +36,7 @@ try { // v1.4.38.4 → v1.4.42. Do not hand-edit; bump `package.json` and rebuild. const CACHE_VERSION = (typeof self !== "undefined" && self.__APP_VERSION__) || - /* @sw-version-fallback */ "v1.27.20"; + /* @sw-version-fallback */ "v1.27.21"; const STATIC_CACHE = `healthlog-static-${CACHE_VERSION}`; const PAGE_CACHE = `healthlog-pages-${CACHE_VERSION}`; // v1.18.6 — read-only data cache for a curated allowlist of safe GET `/api/*`