diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index cc1e2d5..0a6b52b 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -374,17 +374,9 @@ export default function App() { confirmRef.current = confirm; pageRef.current = page; }); - - // Warn on a hard navigation (reload / tab close) while preference changes are unsaved. - useEffect(() => { - if (!prefsDirty) return; - const handler = (e: BeforeUnloadEvent) => { - e.preventDefault(); - e.returnValue = ""; - }; - window.addEventListener("beforeunload", handler); - return () => window.removeEventListener("beforeunload", handler); - }, [prefsDirty]); + // No beforeunload guard: a reload/close can only raise the browser's own native prompt + // (we can't show our in-app confirm there), and unsaved prefs are local-only — they + // revert to the saved server baseline on the next load — so there's nothing to lose. if (meQuery.isLoading) return ( diff --git a/frontend/src/components/SettingsPanel.tsx b/frontend/src/components/SettingsPanel.tsx index 9e1b5d1..6e65456 100644 --- a/frontend/src/components/SettingsPanel.tsx +++ b/frontend/src/components/SettingsPanel.tsx @@ -92,22 +92,14 @@ export default function SettingsPanel({ })} - {/* All tabs stacked in one grid cell so the panel sizes to the tallest tab - (stable height, no jump on switch); the active one is shown on top. */} -