From 95e13a707e4beb61781ab3e0546d8eec5354cbae Mon Sep 17 00:00:00 2001 From: sravan Date: Fri, 17 Jul 2026 16:44:12 +0530 Subject: [PATCH] fix(ios/mobile): safe-area insets, no keyboard auto-open, no h-scroll, swipe-back, hide desktop-download MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported on the iOS TestFlight build: - #1/#5 notch/home-indicator: apply top safe-area inset per surface (chat list column + content panels) instead of on the whole shell, so headers sit below the Dynamic Island and nothing is cut off top/bottom. - #2: opening a chat no longer auto-focuses the composer (was popping the phone keyboard and shoving the layout up); tapping the box still focuses normally. - #3: overflow-x:hidden + max-width:100vw guards so pages can't pan left/right. - #4: left-edge swipe-right now triggers the existing bzcBack() (close popup/search/open chat) — a native-feeling back gesture with no native code. - #6: hide the 'Download app' (Windows) button when running inside the Capacitor app. Build marker -> 2026-07-17-batch90. Co-Authored-By: Claude Opus 4.8 --- server/public/home.html | 33 +++++++++++++++++++++++++++------ server/public/index.html | 9 +++++---- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/server/public/home.html b/server/public/home.html index ff5348c..491f5fc 100644 --- a/server/public/home.html +++ b/server/public/home.html @@ -1020,7 +1020,13 @@ relocated into the chat-list header (see placeHdrRight). The shell is pushed below the device status bar so no view overlaps it. */ header{display:none;} - .shell{padding-top:env(safe-area-inset-top,0px);} + /* #3: kill any horizontal drift on phones (long content, 100vw children, safe-area math) — the page + should never pan left/right. */ + html,body{overflow-x:hidden;max-width:100vw;} + .shell,.content,.chatcol,.panel,.convo,.convo-msgs,.chatlist{overflow-x:hidden;max-width:100%;} + /* #1/#5: the top safe-area inset (notch / Dynamic Island) is applied PER SURFACE — the chat-list + column and each content panel — rather than on the whole shell, so nothing hides under the island + and there's no double-padding. Bottom inset is handled by the fixed nav + panel bottom below. */ .side-title{gap:.5rem;} .side-title h2{flex:1;} .side-title #hdrRight{display:flex;align-items:center;gap:.4rem;flex:0 0 auto;} @@ -1046,12 +1052,12 @@ /* Meeting room code: always fully visible, full-width, easy to read */ .meet-bar .code{flex:1 1 100%;font-size:.9rem;white-space:normal;word-break:break-word;text-align:center;background:var(--blue-soft);border-radius:8px;padding:.35rem .5rem;} /* Chat: one pane at a time (list, then the open conversation) */ - .chatcol{width:100%;flex:1 1 100%;padding-bottom:calc(60px + env(safe-area-inset-bottom,0px));} + .chatcol{width:100%;flex:1 1 100%;padding-top:env(safe-area-inset-top,0px);padding-bottom:calc(60px + env(safe-area-inset-bottom,0px));} body.chat-open .chatcol{display:none;} .content{display:none;} body.chat-open .content, .shell:not(.is-chat) .content{display:block;} .shell:not(.is-chat) .chatcol{display:none;} - .content .panel{bottom:calc(60px + env(safe-area-inset-bottom,0px));} /* clear the bottom nav + home indicator */ + .content .panel{top:env(safe-area-inset-top,0px);bottom:calc(60px + env(safe-area-inset-bottom,0px));} /* below the notch; clear the bottom nav + home indicator */ /* Bigger touch targets */ .chat-row{padding:.7rem .85rem;} .convo-head{padding:.7rem .85rem;} @@ -1078,7 +1084,7 @@ -