diff --git a/frontend/src/components/error/LazyOutlet/LazyOutlet.css b/frontend/src/components/error/LazyOutlet/LazyOutlet.css
new file mode 100644
index 0000000000..45e908db26
--- /dev/null
+++ b/frontend/src/components/error/LazyOutlet/LazyOutlet.css
@@ -0,0 +1,17 @@
+/* Center the route-loading fallback in the content area. */
+.lazyOutletFallback {
+ display: flex;
+ width: 100%;
+ min-height: 60vh;
+ align-items: center;
+ justify-content: center;
+}
+
+/* GenericLoader's .center uses `width/height: inherit`, which collapses to a
+ narrow column inside the flex content area (the loader text ends up wrapping
+ one word per line next to the sidebar). Pin it to the full fallback width so
+ it renders centered at its natural size instead. */
+.lazyOutletFallback > .center {
+ width: 100%;
+ height: auto;
+}
diff --git a/frontend/src/components/error/LazyOutlet/LazyOutlet.jsx b/frontend/src/components/error/LazyOutlet/LazyOutlet.jsx
index ce321c9c60..fb43d5a0eb 100644
--- a/frontend/src/components/error/LazyOutlet/LazyOutlet.jsx
+++ b/frontend/src/components/error/LazyOutlet/LazyOutlet.jsx
@@ -4,6 +4,7 @@ import { Outlet, useLocation } from "react-router-dom";
import { GenericLoader } from "../../generic-loader/GenericLoader.jsx";
import { ErrorBoundary } from "../../widgets/error-boundary/ErrorBoundary.jsx";
+import "./LazyOutlet.css";
// A failed dynamic import — almost always a stale hashed chunk after a
// redeploy (the client's index.html references a filename the CDN no longer
@@ -74,7 +75,15 @@ export function LazyOutlet() {
onError={handleRouteError}
fallbackComponent={}
>
- }>
+ {/* Wrap the loader so it fills the content area and stays centered — see
+ LazyOutlet.css for why GenericLoader needs this here. */}
+
+
+
+ }
+ >