diff --git a/src/app/page-client.tsx b/src/app/page-client.tsx
index d358a5a6c..e8e193e7b 100644
--- a/src/app/page-client.tsx
+++ b/src/app/page-client.tsx
@@ -793,7 +793,12 @@ export default function DashboardPageClient() {
degrades to nothing (the hero itself returns null). The dense
tile grid + charts below are untouched. */}
{insightsEnabled &&
- (digestQuery.isLoading ? (
+ // `!mounted` pins the SSR pass AND the first hydration render to the
+ // skeleton (v1.16.4 pattern): the digest query rehydrates from the
+ // persisted cache on the client, so without this gate the client's
+ // first render would paint the hero while the server rendered the
+ // skeleton — a text-content hydration mismatch (React #418).
+ (!mounted || digestQuery.isLoading ? (
) : digestQuery.data ? (