diff --git a/frontend/src/components/PlayerModal.tsx b/frontend/src/components/PlayerModal.tsx index 8b08aa7..02dcf52 100644 --- a/frontend/src/components/PlayerModal.tsx +++ b/frontend/src/components/PlayerModal.tsx @@ -583,7 +583,12 @@ export default function PlayerModal({ // eslint-disable-next-line react-hooks/exhaustive-deps }, [active.id]); - return ( + // Portaled to , like every other full-screen overlay here. A fixed, full-viewport modal + // must not render inside the page scroller: once that scroller is a stacking context (its + // edge-fade mask makes it one) this z-50 is scoped inside it, and the nav rail (z-40) and the + // header (z-30) paint over the modal — worst at browser zoom, where the centered card is smaller + // relative to the rail/panel. (Same class as PlexPlayer; this one was the miss in that sweep.) + return createPortal(
)}
- + , + document.body ); }