From 3cc82bdc4cd18c1e5da0d697a7124de4365009f1 Mon Sep 17 00:00:00 2001 From: gsxdsm Date: Sat, 13 Jun 2026 17:10:59 -0700 Subject: [PATCH] fix: lock mobile board to viewport by pinning .visually-hidden Screen-reader-only spans were position:absolute with no offsets, so inside the horizontally-scrolled kanban columns they rendered off-screen-right and ballooned documentElement.scrollWidth to ~1388px on a 390px viewport. That triggered iOS Safari shrink-to-fit zoom-out (the "cut off, zoomed out" view, which persisted into list view) and let the whole page pan, dragging columns off-screen. Pinning the utility to its containing block origin (top/left: 0) keeps the document locked to the viewport; the span stays 1px and clipped. Co-Authored-By: Claude Opus 4.8 (1M context) --- .changeset/mobile-board-sr-only-overflow.md | 5 +++++ packages/dashboard/app/styles.css | 8 ++++++++ 2 files changed, 13 insertions(+) create mode 100644 .changeset/mobile-board-sr-only-overflow.md diff --git a/.changeset/mobile-board-sr-only-overflow.md b/.changeset/mobile-board-sr-only-overflow.md new file mode 100644 index 0000000000..cb1ad7aeb5 --- /dev/null +++ b/.changeset/mobile-board-sr-only-overflow.md @@ -0,0 +1,5 @@ +--- +"@runfusion/fusion": patch +--- + +Fix mobile board horizontal overflow that caused iOS Safari to zoom-out/cut-off the board and let the whole page pan off-screen. Screen-reader-only `.visually-hidden` spans were `position: absolute` with no offsets, so inside the horizontally-scrolled kanban columns they rendered off-screen-right and ballooned the document's scroll width. Pinning the utility to its containing block's origin keeps the document locked to the viewport on mobile. diff --git a/packages/dashboard/app/styles.css b/packages/dashboard/app/styles.css index a8dac93175..068829d8f0 100644 --- a/packages/dashboard/app/styles.css +++ b/packages/dashboard/app/styles.css @@ -48,6 +48,14 @@ html { /* === Utility Classes === */ .visually-hidden { position: absolute; + /* Pin to the containing block's origin. Without offsets an absolute box + renders at its static-flow position; inside a horizontal scroller (e.g. + the kanban board) that position is off-screen-right, and because the + scroll container isn't a positioned containing block its overflow can't + clip the span — so it balloons documentElement.scrollWidth and triggers + iOS shrink-to-fit zoom-out + whole-page panning on mobile. */ + top: 0; + left: 0; width: 1px; height: 1px; padding: 0;