({ metric: "RECOVERY_SCORE" });
diff --git a/src/components/insights/insights-layout-shell.tsx b/src/components/insights/insights-layout-shell.tsx
index c04fa0a26..2f6d31349 100644
--- a/src/components/insights/insights-layout-shell.tsx
+++ b/src/components/insights/insights-layout-shell.tsx
@@ -1,6 +1,7 @@
"use client";
import { useMemo, type ReactNode } from "react";
+import { useSelectedLayoutSegment } from "next/navigation";
import { useQuery } from "@tanstack/react-query";
import { useTranslations } from "@/lib/i18n/context";
@@ -57,6 +58,15 @@ export function InsightsLayoutShell({ children }: { children: ReactNode }) {
const flags = useFeatureFlags();
const advisorEnabled =
isAuthenticated && flags.enabled && flags.briefing;
+
+ // v1.12.6 — routes that carry their own purpose-built disclaimer must NOT
+ // also show the generic footer below (otherwise two disclaimers stack).
+ // The Coach full page renders its own `composerDisclaimer` under the
+ // composer, so its segment is excluded here. Every other segment — the
+ // overview (null segment), the metric sub-pages, mood, medications, the
+ // raw values table — keeps the single generic footer.
+ const segment = useSelectedLayoutSegment();
+ const showDisclaimerFooter = segment !== "coach";
const advisor = useInsightsAdvisorQuery(advisorEnabled);
// Shared analytics fetch — the layout shell only reads
@@ -118,13 +128,16 @@ export function InsightsLayoutShell({ children }: { children: ReactNode }) {
caveats (health score, correlations, mood relations, derived cards,
rhythm events) stay on their own cards — those convey real,
non-generic information. Other waves remove the generic line from the
- overview / mood / medications pages; this footer is where it lives. */}
-
- {t("insights.disclaimer.footer")}
-
+ overview / mood / medications pages; this footer is where it lives.
+ Suppressed on the Coach route, which carries its own disclaimer. */}
+ {showDisclaimerFooter ? (
+
+ {t("insights.disclaimer.footer")}
+
+ ) : null}
);
}