Skip to content

[bug] Preferences pans sideways on iPhone and the Connections rows crush their own text — the timezone select never shrinks in WebKit, and the guard only runs Chromium #384

Description

@serge-ivo

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 rowstore/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

  1. Timezone selectmin-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.
  2. Connections rowsflex-wrap on the two rows in AccountConnections.tsx (:132, :163), so
    the button group drops under the label instead of crushing it.
  3. 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).

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingfrontendFrontend / UI work

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions