diff --git a/src/components/insights/__tests__/ai-setup-hint-target.test.tsx b/src/components/insights/__tests__/ai-setup-hint-target.test.tsx
new file mode 100644
index 000000000..6e06357f6
--- /dev/null
+++ b/src/components/insights/__tests__/ai-setup-hint-target.test.tsx
@@ -0,0 +1,48 @@
+/**
+ * The overview's setup hint closes with an icon button in its header. On a
+ * phone it is the only control on the tile a thumb has to hit, so it carries
+ * the 44 px floor every other mobile action does (`size-11`), stepping down
+ * from `sm` like the rest of the app.
+ */
+import { renderToStaticMarkup } from "react-dom/server";
+import { describe, expect, it, vi } from "vitest";
+
+vi.mock("@/hooks/use-auth", () => ({
+ useAuth: () => ({ user: { id: "u1" }, isAuthenticated: true }),
+}));
+vi.mock("@/hooks/use-mounted", () => ({ useMounted: () => true }));
+vi.mock("@/hooks/use-ai-capability", () => ({
+ useAiProviderState: () => ({
+ configured: false,
+ managedBy: null,
+ canConfigure: true,
+ }),
+}));
+
+import { I18nProvider } from "@/lib/i18n/context";
+import { AiSetupHint } from "../ai-setup-hint";
+
+function dismissButton(): string {
+ vi.stubGlobal("window", {
+ localStorage: { getItem: () => null, setItem: () => undefined },
+ });
+ const html = renderToStaticMarkup(
+
+
+ ,
+ );
+ vi.unstubAllGlobals();
+ const match = html.match(
+ /