Index: app/(app)/analytics/analytics-client.tsx
===================================================================
--- app/(app)/analytics/analytics-client.tsx	(revision 9ec098528fb384ef3c18265624016eccda36e715)
+++ app/(app)/analytics/analytics-client.tsx	(revision e2fa2e31c4602d840bb4a3d273832bf408b4db19)
@@ -1,5 +1,5 @@
 "use client";
 
-import { useMemo, useRef, useState } from 'react';
+import { useEffect, useMemo, useRef, useState } from 'react';
 import { usePathname, useRouter, useSearchParams } from 'next/navigation';
 import { CalendarDaysIcon, CheckIcon, XMarkIcon, ArrowsPointingOutIcon } from '@heroicons/react/24/outline';
@@ -10,6 +10,13 @@
 
 const COLORS = ['#60a5fa', '#34d399', '#fbbf24', '#f472b6', '#a78bfa', '#fb7185', '#22d3ee', '#f97316'];
-
-export default function AnalyticsClient({ data }: { data: AnalyticsData }) {
+const ANALYTICS_KEYS = ['query', 'accountId', 'period', 'startDate', 'endDate', 'focusTags'] as const;
+
+export default function AnalyticsClient({
+    data,
+    userId,
+}: {
+    data: AnalyticsData;
+    userId: number;
+}) {
     const searchParams = useSearchParams();
     const pathname = usePathname();
@@ -24,4 +31,53 @@
     const endDate = searchParams.get('endDate') ?? '';
     const selectedFocusTags = (searchParams.get('focusTags') ?? '').split(',').filter(Boolean);
+
+    const storageKey = `fein:analyticsState:v1:${userId}`;
+
+    useEffect(() => {
+        try {
+            const raw = localStorage.getItem(storageKey);
+            if (!raw) {
+                return;
+            }
+
+            const hasActiveParams = ANALYTICS_KEYS.some((key) => searchParams.get(key));
+            if (hasActiveParams) {
+                return;
+            }
+
+            const stored = JSON.parse(raw) as Record<string, string | undefined>;
+            const params = new URLSearchParams();
+            for (const key of ANALYTICS_KEYS) {
+                const value = stored[key];
+                if (value) {
+                    params.set(key, value);
+                }
+            }
+
+            const nextQuery = params.toString();
+            if (nextQuery) {
+                replace(`${pathname}?${nextQuery}`);
+            }
+        } catch {
+            // ignore storage errors
+        }
+        // eslint-disable-next-line react-hooks/exhaustive-deps
+    }, [storageKey, userId]);
+
+    useEffect(() => {
+        try {
+            const snapshot: Record<string, string | undefined> = {};
+            for (const key of ANALYTICS_KEYS) {
+                const value = searchParams.get(key) ?? undefined;
+                if (value) {
+                    snapshot[key] = value;
+                }
+            }
+
+            localStorage.setItem(storageKey, JSON.stringify(snapshot));
+        } catch {
+            // ignore storage errors
+        }
+    }, [searchParams, storageKey]);
 
     const updateParams = (mutate: (params: URLSearchParams) => void) => {
@@ -107,6 +163,6 @@
                                 onClick={() => setPeriod(value)}
                                 className={`rounded-xl px-4 py-2 text-sm font-medium transition whitespace-nowrap ${period === value
-                                        ? 'bg-sky-500 text-slate-950'
-                                        : 'text-white/65 hover:text-white hover:bg-white/10'
+                                    ? 'bg-sky-500 text-slate-950'
+                                    : 'text-white/65 hover:text-white hover:bg-white/10'
                                     }`}
                             >
Index: app/(app)/analytics/page.tsx
===================================================================
--- app/(app)/analytics/page.tsx	(revision 9ec098528fb384ef3c18265624016eccda36e715)
+++ app/(app)/analytics/page.tsx	(revision e2fa2e31c4602d840bb4a3d273832bf408b4db19)
@@ -58,5 +58,5 @@
             </h1>
 
-            <AnalyticsClient data={data} />
+            <AnalyticsClient data={data} userId={userId} />
         </div>
     );
