diff --git a/frontend/src/routes/(root)/(logged)/+layout.svelte b/frontend/src/routes/(root)/(logged)/+layout.svelte index 11bd75022a..d9ab96d069 100644 --- a/frontend/src/routes/(root)/(logged)/+layout.svelte +++ b/frontend/src/routes/(root)/(logged)/+layout.svelte @@ -534,9 +534,6 @@ const { debounced: scheduleBandHide, clearDebounce: cancelBandHide } = debounce(() => { bandPeeked = false }, PEEK_CLOSE_DELAY_MS) - // Where the band's pin button will be once pinned, so the click moves nothing: the band's own - // pl-2, plus a slot (28px button + the row's gap-1) when the sidebar's handle takes the first. - const bandHandleOffset = $derived(navDetached.val && !menuHidden ? '2.5rem' : '0.5rem') // The handle and the edge band both open the card this layout owns. navHandleSlot.setOpener(() => (menuOpen = true), { @@ -1585,8 +1582,21 @@ style:left={floatBand ? `${leftInset}rem` : undefined} style:right={floatBand ? `${rightInset ?? 0}px` : undefined} style:padding-left={floatBand ? undefined : `${leftInset}rem`} - onmouseenter={bandPeek ? cancelBandHide : undefined} - onmouseleave={bandPeek ? scheduleBandHide : undefined} + onmouseenter={bandPeek + ? () => { + cancelBandHide() + // The band comes to rest over the access point, so the pointer leaves it the + // moment the band arrives. Hold both open while the pointer is anywhere on + // the band, or the card would retract under a header that stayed. + if (navDetached.val) navHandleSlot.open(bandHandleEl) + } + : undefined} + onmouseleave={bandPeek + ? () => { + scheduleBandHide() + if (navDetached.val) navHandleSlot.scheduleClose() + } + : undefined} role={bandPeek ? 'presentation' : undefined} > {#if bandPeek} - +
{ bandHandleHot = true