diff --git a/frontend/src/lib/components/blockshell/BlockShell.svelte b/frontend/src/lib/components/blockshell/BlockShell.svelte index 67cf216..415a61d 100644 --- a/frontend/src/lib/components/blockshell/BlockShell.svelte +++ b/frontend/src/lib/components/blockshell/BlockShell.svelte @@ -126,8 +126,29 @@ }); // --- Fullscreen toggle --- + // Fullscreen panels must escape Canvas's transform context, + // which breaks position:fixed. We move the DOM element to + // document.body when entering fullscreen, and back when exiting. + let originalParent: HTMLElement | null = null; + let originalNextSibling: Node | null = null; + function toggleFullscreen() { isFullscreen = !isFullscreen; + if (containerEl) { + if (isFullscreen) { + originalParent = containerEl.parentElement; + originalNextSibling = containerEl.nextSibling; + document.body.appendChild(containerEl); + } else if (originalParent) { + if (originalNextSibling) { + originalParent.insertBefore(containerEl, originalNextSibling); + } else { + originalParent.appendChild(containerEl); + } + originalParent = null; + originalNextSibling = null; + } + } onFullscreenChange?.(isFullscreen); } @@ -438,11 +459,12 @@ .blockshell-fullscreen { position: fixed; inset: 0; - z-index: 50; + z-index: 9999; width: 100% !important; height: 100% !important; border-radius: 0; border: none; + background: #0a0a0b; } .blockshell-minimized {