fix(ui): native safe-area under Android 15+ edge-to-edge (WebView < 140)
targetSdk 36 forces edge-to-edge, so the WebView draws behind the system bars. On Android WebView < 140, env(safe-area-inset-*) wrongly reports 0, so the app chrome (which only read env()) drew under the status bar (top nav untappable) and the gesture-nav home indicator (the game's centre Hint button intercepted; side buttons fine). Capacitor 8's SystemBars core plugin (built into @capacitor/core, insetsHandling:'css' by default) injects the correct --safe-area-inset-* values on every WebView; consume them ahead of env(): --tg-safe-*: var(--safe-area-inset-*, env(safe-area-inset-*, 0px)) Web / PWA / Telegram / VK are unchanged (--safe-area-inset-* is unset there, so it falls back to env()). Verified on-device (Pixel_10 / API 37) via the injected var — the emulator's auto-updated WebView 149 hides the env() bug, so the visual alone won't reproduce it.
This commit is contained in:
+10
-4
@@ -435,10 +435,16 @@ and `ui/src/screens/NewGame.svelte:177-431`. This phase makes them reachable on
|
||||
with no network**.
|
||||
|
||||
**Status:** D.1–D.6 are **done & verified** (foundations committed `bcd5a1d`; boot + reconciliation +
|
||||
Profile committed on `feature/android-native`, 2026-07-12), with `e2e/native.spec.ts` green locally
|
||||
(chromium + webkit) and in CI. Remaining for D: the on-device emulator airplane-mode smoke (owner /
|
||||
stage G) and the deferred local-game-visibility decision (Progress §D / §G). **Verify every line ref
|
||||
below against current code.**
|
||||
Profile + the Android edge-to-edge safe-area fix committed on `feature/android-native`, 2026-07-12), with
|
||||
`e2e/native.spec.ts` green (chromium + webkit) AND an **on-device emulator smoke** (Pixel_10 / API 37,
|
||||
airplane mode): cold-boot → offline guest lobby, offline vs_ai played end-to-end (bundled dawg — Hint
|
||||
placed "FEZ", the robot replied "NEEDFIRE"), New Game offers both modes. The smoke surfaced a native-chrome
|
||||
bug on **Android 15+ edge-to-edge** (WebView < 140 reports `env(safe-area-inset-*)`=0 → the top nav draws
|
||||
under the status bar and the game's centre Hint button under the gesture-nav home indicator) — **fixed** by
|
||||
consuming the SystemBars core plugin's injected `--safe-area-inset-*` in `app.css` (see `.claude/CLAUDE.md`;
|
||||
no dep/config — the plugin ships in `@capacitor/core` v8). Remaining for D: the reconcile-online leg
|
||||
on-device (hits prod — a guest mint) and the deferred local-game-visibility decision (§G). **Verify every
|
||||
line ref below against current code.**
|
||||
|
||||
**Decisions locked this session (owner-approved) — bake these before implementing:**
|
||||
- **The blocking Login is bypassed on native only.** Web / PWA / Telegram / VK keep the current
|
||||
|
||||
Reference in New Issue
Block a user