Reported
Preferences (global) is broken on mobile — horizontal scroll, and buttons don't wrap so the text
is squashed into one vertical line.
Both confirmed, against production, signed in, at six phone widths in two engines. They are two
separate defects, and a third one is why the first has been reported and closed as
"not reproducible" twice (#333).
1. The horizontal scroll is real, and it exists ONLY in WebKit
main.scrollWidth - main.clientWidth on /console/preferences:
| viewport |
Chromium |
WebKit |
| 320 |
0 |
59 |
| 360 |
0 |
27 |
| 375 |
0 |
18 |
| 390 |
0 |
9 |
| 414 |
0 |
0 |
| 430 |
0 |
0 |
Culprit: the Timezone row — store/console/src/pages/Preferences.tsx:192-207.
<div className="flex justify-between items-center py-2.5 text-sm gap-3">
<span className="text-muted font-medium">Your timezone</span>
<select … className="text-sm bg-paper border border-line rounded-lg px-3 py-2 max-w-[60%]">
Measured on that exact element (scrollWidth - clientWidth): +76px at 320, +34px at 390, which
propagates up through the card and the Page container until the whole page pans.
The <select> is a flex item with min-width: auto, so its automatic minimum size is its content
width — and its content is the longest option (America/Argentina/Buenos_Aires,
Not set — agents will say UTC). Chromium clamps that; WebKit does not, so max-w-[60%] caps
the used width and the minimum still wins. There is no min-w-0 on it, and nothing truncates.
Every phone that matters runs WebKit.
2. The squashed text is the Connections rows
store/console/src/components/AccountConnections.tsx:163 (and :132 for the GitHub row):
<div className="flex items-start justify-between gap-3 mb-3">
<div className="text-sm min-w-0 [overflow-wrap:anywhere]"> … Gmail · connected as … </div>
<div className="flex gap-2 shrink-0"> ← Reconnect + Disconnect, ~185px, will not wrap
At 320px the button pair takes the row and the text column is left with 67px, and runs 119px tall —
measured, both engines. The email renders as:
connecte
d as
serge.pro.
job@gmail
.com
Note the two halves of this are individually correct and were added on purpose:
[overflow-wrap:anywhere] (from #333) is what stops the unbreakable email token overflowing the
page, and shrink-0 is what stops the buttons collapsing. Together they mean the row cannot
overflow and cannot wrap, so all of the pressure lands on the one element that will yield — the
text. The row needs flex-wrap so the buttons drop below the label at narrow widths; that is what
the chip rows in VoiceFields.tsx:202,221 already do.
At 390px it is not catastrophic but still wrong: the Gmail label wraps to three lines beside two
buttons.
3. Why this was closed as "not reproducible" twice — the guard is Chromium-only
playwright.config.ts:26-31 declares exactly one project:
projects: [ { name: "chromium", use: { ...devices["Desktop Chrome"] } } ],
So measureOverflow, the wide geometry walk and the docOv tripwire — all of the machinery #333
built and hardened specifically for "the page scrolls sideways on mobile" — run in the one engine
where this bug does not exist. Two rounds of investigation on #333 correctly found nothing on
Preferences, because in Chromium there is nothing to find.
The measurement is otherwise sound; it just has no WebKit to run in. Adding a mobile-WebKit project
is what turns this class of defect from "reported by the owner on a phone" into "caught in CI".
Suggested fix
- Timezone select —
min-w-0 on the select (the automatic minimum size is the actual cause),
and let it take the full row width on a phone (w-full sm:max-w-[60%]) rather than sitting beside
the label. A <select> in a flex row needs min-w-0 as a rule; this is the first one measured,
probably not the only one.
- Connections rows —
flex-wrap on the two rows in AccountConnections.tsx (:132, :163), so
the button group drops under the label instead of crushing it.
- Guard — add a WebKit mobile project to
playwright.config.ts and run the existing overflow
guards under it. Without this, fix (1) has no regression test in the engine that needs it.
Method
Playwright against https://proagentstore.online/console/preferences, real session, viewports
320/360/375/390/414/430, chromium 141 and WebKit 26.4. Measured documentElement and main
overflow plus every element's right edge and own scrollWidth. Screenshots at 320 and 390 confirm
both symptoms visually.
Supersedes the Preferences half of #333 (the Profile half of that ticket is fixed and verified).
Files: store/console/src/pages/Preferences.tsx:192-207,
store/console/src/components/AccountConnections.tsx:132,163, playwright.config.ts:26-31,
e2e/console.spec.ts (measureOverflow).
Reported
Both confirmed, against production, signed in, at six phone widths in two engines. They are two
separate defects, and a third one is why the first has been reported and closed as
"not reproducible" twice (#333).
1. The horizontal scroll is real, and it exists ONLY in WebKit
main.scrollWidth - main.clientWidthon/console/preferences:Culprit: the Timezone row —
store/console/src/pages/Preferences.tsx:192-207.Measured on that exact element (
scrollWidth - clientWidth): +76px at 320, +34px at 390, whichpropagates up through the card and the
Pagecontainer until the whole page pans.The
<select>is a flex item withmin-width: auto, so its automatic minimum size is its contentwidth — and its content is the longest option (
America/Argentina/Buenos_Aires,Not set — agents will say UTC). Chromium clamps that; WebKit does not, somax-w-[60%]capsthe used width and the minimum still wins. There is no
min-w-0on it, and nothing truncates.Every phone that matters runs WebKit.
2. The squashed text is the Connections rows
store/console/src/components/AccountConnections.tsx:163(and:132for the GitHub row):At 320px the button pair takes the row and the text column is left with 67px, and runs 119px tall —
measured, both engines. The email renders as:
Note the two halves of this are individually correct and were added on purpose:
[overflow-wrap:anywhere](from #333) is what stops the unbreakable email token overflowing thepage, and
shrink-0is what stops the buttons collapsing. Together they mean the row cannotoverflow and cannot wrap, so all of the pressure lands on the one element that will yield — the
text. The row needs
flex-wrapso the buttons drop below the label at narrow widths; that is whatthe chip rows in
VoiceFields.tsx:202,221already do.At 390px it is not catastrophic but still wrong: the Gmail label wraps to three lines beside two
buttons.
3. Why this was closed as "not reproducible" twice — the guard is Chromium-only
playwright.config.ts:26-31declares exactly one project:So
measureOverflow, thewidegeometry walk and thedocOvtripwire — all of the machinery #333built and hardened specifically for "the page scrolls sideways on mobile" — run in the one engine
where this bug does not exist. Two rounds of investigation on #333 correctly found nothing on
Preferences, because in Chromium there is nothing to find.
The measurement is otherwise sound; it just has no WebKit to run in. Adding a mobile-WebKit project
is what turns this class of defect from "reported by the owner on a phone" into "caught in CI".
Suggested fix
min-w-0on the select (the automatic minimum size is the actual cause),and let it take the full row width on a phone (
w-full sm:max-w-[60%]) rather than sitting besidethe label. A
<select>in a flex row needsmin-w-0as a rule; this is the first one measured,probably not the only one.
flex-wrapon the two rows inAccountConnections.tsx(:132,:163), sothe button group drops under the label instead of crushing it.
playwright.config.tsand run the existing overflowguards under it. Without this, fix (1) has no regression test in the engine that needs it.
Method
Playwright against
https://proagentstore.online/console/preferences, real session, viewports320/360/375/390/414/430, chromium 141 and WebKit 26.4. Measured
documentElementandmainoverflow plus every element's right edge and own
scrollWidth. Screenshots at 320 and 390 confirmboth symptoms visually.
Supersedes the Preferences half of #333 (the Profile half of that ticket is fixed and verified).
Files:
store/console/src/pages/Preferences.tsx:192-207,store/console/src/components/AccountConnections.tsx:132,163,playwright.config.ts:26-31,e2e/console.spec.ts(measureOverflow).