The symptom
I had a sticky site header with a blurred background and a full-screen mobile nav panel set to position: fixed; inset: 0. On desktop everything was fine. On mobile the panel refused to cover the viewport: it was clipped to the header's box, sitting in a thin strip at the top instead of filling the screen.
No overflow: hidden anywhere. No transform on an ancestor. The markup was correct. The panel was a child of the header for accessibility reasons, and that turned out to be the entire problem.