+
Loading chart…
+
+ {/* Header row — title + range tabs match the real chart's
+ `mb-4 flex flex-col gap-2 sm:flex-row` chrome. */}
+
+
+ {/* Chart band — mirrors the same `h-[var(--chart-height,…)]`
+ contract `health-chart.tsx` paints at line 1087-1089. */}
+
+
+ );
+}
diff --git a/src/components/insights/sleep-duration-chart.tsx b/src/components/insights/sleep-duration-chart.tsx
index 6922e7b85..5e5e31095 100644
--- a/src/components/insights/sleep-duration-chart.tsx
+++ b/src/components/insights/sleep-duration-chart.tsx
@@ -2,6 +2,7 @@
import dynamic from "next/dynamic";
+import { ChartSkeleton } from "@/components/charts/chart-skeleton";
import { useTranslations } from "@/lib/i18n/context";
import type { ComparisonBaseline } from "@/lib/dashboard-layout";
@@ -26,7 +27,7 @@ const HealthChart = dynamic(
import("@/components/charts/health-chart").then((mod) => ({
default: mod.HealthChart,
})),
- { ssr: false },
+ { ssr: false, loading: () =>