# UX package 7 and iPhone screen edges — 2026-10-07 The operator approved continuing with package 7 and requested a continuous background behind the iPhone 17 Pro camera/battery/status area. They also confirmed that the generation-554 reconnect fix works on their device. Sol High retained; no delegation or model change. ## Behavior Buttons have at least 44 × 44 CSS-pixel hit areas with compact icons and visible focus. Phone headers wrap when needed; video calling moves to More actions. Menus support keyboard entry, arrow/Home/End selection, Escape with focus return, Tab and outside-pointer dismissal. A native modal fingerprint dialog contains focus and makes the background inert; the explicit opener gets focus after closing, even when opening did not focus it. New-chat and invitation fields take focus explicitly and Escape returns to their trigger. Group person actions focus their heading and return to the selected person. The existing viewport-fit=cover is supplemented with the Apple standalone and black-translucent status-bar metadata. Canvas/theme color match the header surface under light/dark/system themes, including a system theme change. All four safe-area insets protect controls; the connection banner consumes the top inset once. Portrait-only manifest orientation is removed. Implementation/source references: the root README's phone-controls section. ## Candidate evidence Zero svelte-check errors/warnings, production build, runner syntax/diff review and 68 passing tests (`node --test --test-isolation=none test/*.test.ts`). Reports/captures stay private under `/tmp/chat-ux-runner/results`; credentials and stable A/B profiles remain outside Git. No new audit device identities. - Chromium `state-chromium-1791409417010`: phone controls, drafts, actual closed-profile offline recovery, immediate Retry and group flow pass. Its old pagination assertion incorrectly required the first visible key to stay identical when a newly loaded preceding row occupied the old Load older/date space. The original message's position is now measured directly; corrected `state-chromium-1791409565255` passes navigation, reload, pagination, late sizing and latest jump with unchanged source. - WebKit `state-webkit-1791409597716`: controls, drafts, corrected reading anchors, Retry and complete group flow pass, zero page errors. - Controls are measured at 320/402 px portrait, 740 px compact landscape with simulated 58 px side insets, and 1280 px desktop. Simulated top/bottom insets, 32 px control text, themes, native modal containment/inertness, Escape/return, menu navigation/dismissal and the offline banner are checked. Screenshots inspected; no document overflow, composer remains on screen. - Group checks use disposable owned rooms, exercise owner/admin/member permission differences and absent people, verify person-heading focus and return, nickname navigation, invite/leave and retained drafts. Rooms are destroyed and their bookmarks removed; production policy is untouched. The explicit-opener regression opens the dialog while the textarea still owns focus. Final Chromium `state-chromium-1791409730063` and WebKit `state-webkit-1791409761823` pass it and all phone-controls checks, zero page errors. Final JS `assets/index-CLrBYhSP.js`, SHA-256 `2a2ac49b608c8bfcdada74bbbcf4aae53bf54d13dab06d8019d20d55733833e6`. ## Release and live evidence Client `f6feaa7` is pushed to main and pinned by blunix `f96d8e1`, pushed to capability-layout. Switch succeeded as **generation 555**, system `/nix/store/ph97mfjp2p9czfby65vbgzp7ih56lzvm-nixos-system-blunix-26.11.20260910.8ce4ef6`; nginx root `/nix/store/mch7r3n3h0yak6f0k6hvrkgvwixgzgml-0ff-chat-0.1.0`. Candidate, store and HTTPS JS hashes match. HTTP 200, unchanged strict CSP, screen-edge metadata and revalidation headers verified. Only nginx restarted; all ten checked platform services are active and there are zero failed units. Fallback is **554**. Existing 177 blunix handoff additions remain unstaged. Live Chromium `state-chromium-1791409921061`: matching HTTPS bundle/CSP, phone controls/focus/themes/layouts and actual closed-profile offline history/draft recovery pass. Retry begins in 66 ms and is online in 214 ms. Zero page errors. Live WebKit `state-webkit-1791409975210` passes matching HTTPS bundle/CSP, phone controls/focus/themes/layouts and the full owned group/person flow, with zero page errors. All fourteen owned audit rooms are confirmed absent after cleanup; their bookmarks were removed by the group runner. The local preview is stopped. The operator reloaded and fully reopened the PWA and explicitly answered “Ja, der Hintergrund geht durch” for the camera/battery/status area on their iPhone 17 Pro. This confirms that screen-edge request on the physical device; it does not certify VoiceOver, keyboard behavior or every native control. ## Remaining physical-device checks Screen-edge appearance is operator-confirmed above. Further keyboard/safe-area response, touch comfort and VoiceOver checks require the operator's phone. Linux WebKit is not native iOS certification. Fully offline WebKit emulation retains the documented limitation; actual closed-profile offline coverage uses Chromium. Reload and fully reopen the installed PWA after future rollouts. Do not clear browser storage as a routine update step. Packages 8–9 remain planned.