+
{/* v1.8.7.1 — back-nav leads the page, above the heading. */}
{backLink}
@@ -262,13 +262,11 @@ export function SubPageShell({
brand-new-metric paths. Numbers-first is the Apple-Health /
Withings / Oura detail-screen convention.
- The stats describe the full range. Recomputing them for a window
- the user brushes / selects in the chart below would mean lifting the
- chart's domain into this shell so both the chart and the strip read
- it — but the shared `` (also driving the dashboard) has
- no Recharts `` or domain-change callback and keeps its range
- state internal, so that wiring is left for a later release to avoid
- destabilising the chart. */}
+ v1.12.7 — the stats are chart-reactive: when the user brushes a
+ window in the chart below, the page lifts the chart's per-type
+ windowed Min / Max / Median / Mean and threads it back into the
+ strip, which swaps the header to a "selected range" pill. No
+ selection falls back to the cheap full-range summary. */}
{statStrip}
{/* v1.12.6 — the canonical spine body: intro (header) → stat strip
(above) → chart → target card → assessment. The page renders
diff --git a/src/components/insights/vo2-max-chart-row.tsx b/src/components/insights/vo2-max-chart-row.tsx
index 5b87da9c9..2272cac32 100644
--- a/src/components/insights/vo2-max-chart-row.tsx
+++ b/src/components/insights/vo2-max-chart-row.tsx
@@ -193,7 +193,13 @@ export function Vo2MaxChartRow({
{/* Trend chart. The chartKey isolates per-chart overlay prefs from
the dashboard VO2 tile and from the pulse chart sitting above
- it on the same page. */}
+ it on the same page.
+
+ The chart mounts as soon as there is at least one reading. VO₂ max
+ arrives from Apple Health at most every few days, so the series is
+ inherently sparse; the line carries a visible dot per point
+ (`dot r=3`), so a one- or two-sample series still reads as a real
+ chart. A zero-reading account keeps the short onboarding note. */}
{hasData ? (