fix: improve Android tablet keyboard-safe layout

Use dynamic viewport sizing and keyboard-aware spacing to keep new-game inputs and navigation reachable in PWA landscape mode on Android tablets. Refs #30.

Made-with: Cursor
This commit is contained in:
Frank Schwenk
2026-04-04 11:31:31 +02:00
parent f8d895ab21
commit 9bf4c20f11
10 changed files with 75 additions and 15 deletions
+29
View File
@@ -33,6 +33,35 @@ export default function App() {
const validationModal = useValidationModal();
const completionModal = useCompletionModal();
// Keep viewport height stable on Android tablets when virtual keyboard opens.
useEffect(() => {
const root = document.documentElement;
const updateViewportVars = () => {
const viewport = window.visualViewport;
const appHeight = viewport ? viewport.height : window.innerHeight;
const keyboardOffset = viewport
? Math.max(0, window.innerHeight - viewport.height - viewport.offsetTop)
: 0;
root.style.setProperty('--app-height', `${Math.round(appHeight)}px`);
root.style.setProperty('--keyboard-offset', `${Math.round(keyboardOffset)}px`);
};
updateViewportVars();
window.addEventListener('resize', updateViewportVars);
window.addEventListener('orientationchange', updateViewportVars);
window.visualViewport?.addEventListener('resize', updateViewportVars);
window.visualViewport?.addEventListener('scroll', updateViewportVars);
return () => {
window.removeEventListener('resize', updateViewportVars);
window.removeEventListener('orientationchange', updateViewportVars);
window.visualViewport?.removeEventListener('resize', updateViewportVars);
window.visualViewport?.removeEventListener('scroll', updateViewportVars);
};
}, []);
// Game lifecycle handlers
const handleCreateGame = useCallback(async (gameData: any) => {
try {