Mobile (iPhone): user can get locked in browser-level zoom-in state with no clear escape during play #69
Labels
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/cellblock#69
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom (operator playtest 2026-06-21 23:21 iPhone post-round-11)
Operator: "Somehow I managed to lock myself in in a zoom on the controls".
Screenshot shows the play field rendering correctly at the top of the viewport, but the touch controls are clearly cropped on the right edge — LEFT/ROTATE visible but RIGHT is truncated, SOFT DROP visible but HARD DROP is partially cut, CCW visible alone. This is consistent with iOS Safari being in a zoomed-in state that the operator could not exit.
Root cause hypothesis
Despite PR #65 (#64) suppressing rapid-tap-double-tap-zoom via
touch-action: manipulationon containers + canvas explicitnone, iOS Safari still entered a zoom state. Likely paths:touch-action: manipulationALLOWS pinch-zoom (it only suppresses double-tap-zoom + click-delay). If operator's fingers contacted the controls in a pinch-out shape during rapid input, browser-level pinch-zoom would fire. Operator could then escape only via pinch-in or page reload — both non-obvious.user-scalable=noignored on modern iOS Safari (per Shipwright's grounding on #64): viewport-level zoom prevention doesn't work, so once zoom fires there's no programmatic way to reset it.Fix direction (decision tree)
touch-action: pan-x pan-yon game container (allows touch input but blocks pinch-zoom + double-tap-zoom). More restrictive thanmanipulation. Most likely to prevent the entry.touch-action: noneon touch-control container (matches canvas treatment) — blocks all browser gestures, only our event handlers fire. Aggressive but unambiguous.touch-actionto prevent entry + escape UI for the case where it still happens.Note:
user-scalable=nocannot be the solution per the prior grounding (ignored on modern iOS Safari).Workaround for operator while fix is in flight
Operator can escape current stuck state via either:
Acceptance criteria
Lane
Shipwright (same CSS family as #64; possibly extends into mobile-session iteration). Could fold into upcoming #59 PR if scope is touched, or standalone S CSS PR.
Effort
Size/S — investigation + scoped CSS refinement + iPhone device-verify.
Anchor
Operator iPhone playtest 2026-06-21 23:21 post-round-11. Refinement family with #60 + #64.