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 {