diff --git a/frontend-modern/src/AppLayout.tsx b/frontend-modern/src/AppLayout.tsx
index c070a23c3..9d8b25d59 100644
--- a/frontend-modern/src/AppLayout.tsx
+++ b/frontend-modern/src/AppLayout.tsx
@@ -1,4 +1,5 @@
import { For, Show, Suspense, createEffect, createMemo, createSignal, onCleanup } from 'solid-js';
+import { Portal } from 'solid-js/web';
import type { JSX } from 'solid-js';
import { useLocation, useNavigate } from '@solidjs/router';
import BellIcon from 'lucide-solid/icons/bell';
@@ -976,15 +977,20 @@ export function AppLayout(props: AppLayoutProps) {
!dialogStackHasBlockingDialog()
}
>
-
+ {/* Portaled out of .app-scroll-shell: as a descendant the scroll
+ container's own scrollbar hit-tests above the tab's right edge,
+ leaving the screen-edge click zone dead. */}
+
+
+
);
diff --git a/frontend-modern/src/index.css b/frontend-modern/src/index.css
index 4f2194d32..a372be158 100644
--- a/frontend-modern/src/index.css
+++ b/frontend-modern/src/index.css
@@ -132,11 +132,11 @@
color: var(--color-text-base);
}
- /* Hide scrollbars during transitions to prevent flicker */
- html {
- overflow-y: scroll;
- scroll-behavior: smooth;
- }
+ /* The document root never scrolls: the app shell is h-screen with
+ overflow hidden and .app-scroll-shell owns vertical scrolling.
+ Forcing a root scrollbar here would reserve a dead gutter at the
+ right viewport edge and shift every fixed right-anchored element
+ (e.g. the Assistant launcher tab) off the true screen edge. */
}
@layer components {