diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index 36fad85..aa9439b 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -205,6 +205,22 @@ export const App: React.FC = () => { // Profile Dropdown State const [showProfileMenu, setShowProfileMenu] = useState(false); const connection = useConnectionState(); + + // Height of the app header as --app-header-h: the page background paints the header colour up to there, + // so the scrollbar gutter on the right continues the header instead of showing the page colour + const [headerEl, setHeaderEl] = useState(null); + useEffect(() => { + if (!headerEl || typeof ResizeObserver === 'undefined') return; + const root = document.documentElement; + const update = () => root.style.setProperty('--app-header-h', `${headerEl.offsetHeight}px`); + update(); + const observer = new ResizeObserver(update); + observer.observe(headerEl); + return () => { + observer.disconnect(); + root.style.removeProperty('--app-header-h'); + }; + }, [headerEl]); const [showAbout, setShowAbout] = useState(false); const [showTriageTrash, setShowTriageTrash] = useState(false); const { update: availableUpdate, dismiss: dismissUpdate } = useUpdateCheck(); @@ -909,7 +925,10 @@ export const App: React.FC = () => { }`} > {/* Top Header Bar: Floating on mobile, solid panel on desktop */} -
+
{/* Mobile Header: Floating Bar with Logo Action Dropdown Left & Profile Avatar Right */}