Repository navigation
Polish phones: child reading mode, a 16px field floor on touch and shared sheet tokens - #484
Open
MaggieAppleton wants to merge 3 commits into
Open
MaggieAppleton wants to merge 3 commits into
MaggieAppleton wants to merge 3 commits into
Conversation
Collaborator
Author
|
Review: Looks good I built this branch (8839) and Verified
Nice-to-have
Real device: the caret's paragraph can sit under the docked toolbar in the simulated keyboard. This happens on root documents too, so it is not caused by this PR. Please confirm on iOS that the browser scrolls the caret clear, along with the zoom checks listed in the PR body. |
|
The preview deployment for chopin is in progress. 🟡 Open Build Logs | Open Application Logs Last updated at: 2026-10-11 13:29:43 CET |
…nd shared sheet tokens - Child documents on a phone open for reading; the parent's tab-bar pencil and docked formatting toolbar edit the open child instead of the hidden parent, and the child's decision cards save from the phone save bar. - The coarse-pointer 16px text-field floor is important, so unlayered `font: inherit` / `font-size: inherit` rules (question fields, the header rename) no longer drop fields below 16px and trigger iOS zoom. - Comment, documents and action sheets share one scrim, grabber and set of sheet durations and easing from the theme. The comment sheet's scrim was navy because it read an oklch triplet as rgb. - Wide-content and phone Chat markdown rules use :root[data-phone], which every route now sets. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- While formatting docks above the keyboard, the document scroller pads its foot by the dock's row and brings the caret's block back above it, in root and child documents. - A child opening over a document being edited returns that document to reading. - A flicked comment sheet still sets the pace of its dismissal. - The phone Chat composer keys off :root[data-phone]. - Drop an unreachable child fallback and note the 16px floor's tradeoff. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
preserved-values.json: - apps/web/src/theme.css: the coarse-pointer field floor is now max(var(--field-text-min), 1em) (with !important), so an unlayered font: inherit cannot drop a touch field below 16px; 1em keeps a larger inherited size. Replaces the var(--field-text-min) entry. - packages/editor/src/styles.css .plan-comment-sheet-popup: the approved swipe-scaled rise now uses the shared --sheet-rise-dur and --sheet-ease. - .plan-comment-sheet-popup[data-ending-style]: the dismissal duration is scaled by Base UI's runtime --drawer-swipe-strength the same way, using --sheet-fall-dur. - Removed the stale backdrop rgb(var(--shadow-color)) and the popup's raw upward box-shadow; both are tokens now (--color-scrim, --shadow-overlay). dynamic-editor.json: - packages/editor/src/plan-editor.tsx: the only change is an effect that scrolls the caret's block above the formatting dock; no class or style logic, and the reviewed className composition is unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
MaggieAppleton
force-pushed
the
mobile/phone-polish
branch
from
October 11, 2026 16:55
0474c66 to
4c98141
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Final follow-up to the mobile redesign (#470–#478). Covers the "phone polish" notes left by #477, #478 and #473. Desktop is unchanged.
Why
@layer base, but unlayered field rules beat it:.question-field { font: inherit }(the "Add an option" field, 13.4px) and.title-control-label { font-size: inherit }(the header rename on a touch tablet, 12.2px). On iOS, focusing either one zooms the page.rgb().What changed
apps/web/src/theme.cssis nowfont-size: max(var(--field-text-min), 1em) !important. Only!importantbeats an unlayeredinherit.1emis the inherited size, so a field that inherits larger type keeps it. The small--text-*tokens are still raised on the field, so placeholders follow. Fine pointers are untouched.room-workspace.tsxand the newchild-phone-chrome.ts):DecisionSaveHost(editor package): when there is no Decisions pane, as in a child, phone cards save from the sameSaveBaras the pane, resting above the tab bar. The save-bar CSS now applies to both hosts.packages/visuals/theme.css):--color-grabber,--sheet-grabber-width/height/inset,--sheet-easeand--sheet-scrim-mediumare new. Both sheet families also use the existing--color-scrim,--sheet-rise-dur,--sheet-fall-durand--radius-sheet.--shadow-overlay.packages/editor/src/styles.cssand phone Chat markdown now key off:root[data-phone].usePointerCapabilitiesnow runs for every route, including the development audit and gallery pages, so the attribute matchesisPhoneeverywhere.Review follow-ups (second commit)
--app-heightalready ends the workspace at the keyboard, so the keyboard inset is not added again. When the dock appears, the caret's block scrolls back above it, in root and child documents.:root[data-phone].childRoom && !childChromefallback: a child only ever renders inside its parent's workspace.!importantfloor.Screenshots
Child document on a phone, before (always editable; the pencil toggles the hidden parent into "Editing"):

After (opens for reading; the pencil edits the child):

Decision inside a child, before → after (card Discard/Save → phone save bar):

Header rename on a touch tablet (1194×834), before (12.2px) → after (16px):

Sheets, before (left pair) → after (right pair). The comment sheet's navy scrim now matches the documents sheet:

Testing
e2e/responsive-child-phone.e2e.tscovers:e2e/responsive-touch-fields.e2e.tsscans every visible input, textarea, select and editable root for at least 16px. It runs on a phone (document while editing, comment, Chat, Decisions "Add an option", rename, documents search) and on a touch tablet (document, comment, Decisions, header rename, search palette). Desktop rename stays below 16px.bun run e2eagainst my own databases, because another worktree held the Docker e2e ports:phone-read-mode,decisions-phone,comment-sheet,documents-sheet,phone-workspace,wide-content,research-child-surface,research-child-motion,chat-phone,focus-ring,discarded-mobile-geometry,document-navigation,pwa,interface-qualityandresponsive*bun run typespasses.bun test packages/editor apps/web packages/visualspasses: 1455 tests, with the ignored local design-jig folder moved aside.check-tokensandcheck-design-recordpass.check-design-contractpasses after the review commit.Design-contract review
Reviewed and applied in
Renew design-contract review exceptions for phone polish:preserved-values.json:font-size: max(var(--field-text-min), 1em), the token-based sheet rise transition, and the swipe-scaled dismissaltransition-duration.rgb(var(--shadow-color))backdrop, the raw upward shadow, the old popup transition, andvar(--field-text-min).dynamic-editor.json: renewed theplan-editor.tsxhash. The only change is the effect that scrolls the caret's block above the dock.Needs a real device
flushSync, as on root documents.🤖 Generated with Claude Code