diff --git a/src/components/chat/tools/components/CollapsibleSection.tsx b/src/components/chat/tools/components/CollapsibleSection.tsx index f83135c..0d6615d 100644 --- a/src/components/chat/tools/components/CollapsibleSection.tsx +++ b/src/components/chat/tools/components/CollapsibleSection.tsx @@ -24,7 +24,7 @@ export const CollapsibleSection: React.FC = ({ }) => { return (
- + ) : showChatNewSession ? (
-

{t('mainContent.newSession')}

-
{selectedProject.displayName}
+

{t('mainContent.newSession')}

+
{selectedProject.displayName}
) : (
diff --git a/src/index.css b/src/index.css index 7b8c097..75f79ef 100644 --- a/src/index.css +++ b/src/index.css @@ -62,6 +62,9 @@ --safe-area-inset-bottom: env(safe-area-inset-bottom); --safe-area-inset-left: env(safe-area-inset-left); + /* Virtual keyboard height (set by JS for iOS/Safari fallback) */ + --keyboard-height: 0px; + /* Mobile navigation dimensions - Single source of truth */ /* Floating nav: ~52px bar + 8px bottom margin + 12px px-3 top spacing */ --mobile-nav-height: 52px; @@ -166,12 +169,16 @@ overflow: hidden; } + /* Virtual keyboard offset — works in both PWA and regular mobile browsers */ + .fixed.inset-0 { + bottom: max(env(keyboard-inset-bottom, 0px), var(--keyboard-height, 0px)); + } + /* Adjust fixed inset positioning in PWA mode */ body.pwa-mode .fixed.inset-0 { top: var(--header-total-padding); left: var(--safe-area-inset-left); right: var(--safe-area-inset-right); - bottom: 0; } /* Global transition defaults */ diff --git a/src/main.jsx b/src/main.jsx index cacb2db..55218af 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -7,6 +7,19 @@ import 'katex/dist/katex.min.css' // Initialize i18n import './i18n/config.js' +// Tell the browser to overlay the virtual keyboard instead of resizing the viewport (PWA) +if ('virtualKeyboard' in navigator) { + navigator.virtualKeyboard.overlaysContent = true; +} else if (window.visualViewport) { + // iOS/Safari fallback: track keyboard height via visualViewport + const viewport = window.visualViewport; + const updateKeyboardHeight = () => { + const keyboardHeight = Math.max(0, window.innerHeight - viewport.height); + document.documentElement.style.setProperty('--keyboard-height', `${keyboardHeight}px`); + }; + viewport.addEventListener('resize', updateKeyboardHeight); +} + // Clean up stale service workers on app load to prevent caching issues after builds if ('serviceWorker' in navigator) { navigator.serviceWorker.getRegistrations().then(registrations => {