@@ -193,29 +219,58 @@ export const DayViewContent = memo(() => {
"cursor-col-resize select-none": isResizing,
})}
>
-
-
- {/* biome-ignore lint/a11y/useSemanticElements: An hr cannot host the focusable, draggable window-splitter interaction. */}
-
+ {taskListTransition.isMounted ? (
+ <>
+
+
+
+
+ {/* biome-ignore lint/a11y/useSemanticElements: An hr cannot host the focusable, draggable window-splitter interaction. */}
+
+ >
+ ) : null}
diff --git a/packages/web/src/views/Root.tsx b/packages/web/src/views/Root.tsx
index d92b7be56..b3325d480 100644
--- a/packages/web/src/views/Root.tsx
+++ b/packages/web/src/views/Root.tsx
@@ -1,12 +1,15 @@
+import { useMemo } from "react";
import { UserProvider } from "@web/auth/compass/user/context/UserProvider";
-import { useIsMobile } from "@web/common/hooks/useIsMobile";
+import { isMobileOS } from "@web/common/utils/device/device.util";
import { AuthenticatedLayout } from "@web/components/AuthenticatedLayout/AuthenticatedLayout";
import { GlobalShortcutsHost } from "@web/components/CompassProvider/CompassProvider";
import { MobileGate } from "@web/components/MobileGate/MobileGate";
import SSEProvider from "@web/sse/provider/SSEProvider";
export const RootView = () => {
- const isMobile = useIsMobile();
+ // Gate on the device OS, not the window width: narrow desktop windows get
+ // the responsive layout. Static per session, so no listener is needed.
+ const isMobile = useMemo(() => isMobileOS(), []);
if (isMobile) {
return