diff --git a/src/components/charts/trend-card.tsx b/src/components/charts/trend-card.tsx
index 68fdc94a4..c7dfa5a00 100644
--- a/src/components/charts/trend-card.tsx
+++ b/src/components/charts/trend-card.tsx
@@ -211,20 +211,52 @@ export function TrendCard({
return (
-
-
+ {/* v1.4.25 W20a — single-line discipline + deterministic height for
+ the heading row so the value row below sits at the same baseline
+ across every tile. The label is locale-abbreviated upstream (see
+ `dashboard.*Short` keys) so `truncate` is a layout safeguard
+ rather than the primary defence against wraps. `h-5` matches
+ `text-xs leading-5` ≈ 20 px; identical across every tile. */}
+
+
{label}
-
-
+ {/* v1.4.25 W20a — baseline-aligned value row. The headline value,
+ unit, and trend arrow share a single flex line with
+ `items-baseline` so the digits line up at the same y-coordinate
+ across every tile in the strip (Weight 80 kg vs. BP 122 mmHg used
+ to land at different heights when one tile had a one-line heading
+ and another had a two-line wrap). The arrow slot is always
+ present — when there is no slope yet, a muted "—" placeholder
+ renders so the value row keeps a deterministic width. Marc's
+ ask: "rechts neben der Zahl … der Pfeil [ist], wie gerade der
+ Trend ist". */}
+
+
{latest !== null ? renderPair(latest, secondary?.latest) : "—"}
-
+
{unit}
- {slope30 && }
+
+ {slope30 ? (
+
+ ) : (
+ —
+ )}
+
{/* v1.4.16 phase B8 — comparison delta callout. Sits on its own
line below the latest value so the tile stays scannable on