From d0f8896570b3d196cda2429b857c0600749259a0 Mon Sep 17 00:00:00 2001 From: enricobuehler Date: Fri, 12 Jun 2026 14:59:54 +0000 Subject: [PATCH] =?UTF-8?q?fix(web):=20mobile=20navigation=20=E2=80=94=20a?= =?UTF-8?q?dd=20a=20bottom=20tab=20bar=20+=20top=20bar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The app shell's only navigation was the desktop sidebar (`hidden … sm:flex`), so on phones (< sm) it was hidden with no replacement — you couldn't navigate at all. Add a responsive mobile layout shown only below `sm`: a top bar (brand + language switcher) and a fixed bottom tab bar with the five nav items (icon + label). The desktop sidebar is unchanged. Page content gets bottom padding so the fixed bar doesn't cover it, and the bar respects the iOS `safe-area-inset-bottom`. Co-Authored-By: Claude Opus 4.8 (1M context) --- web/src/components/app-shell.tsx | 39 +++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/web/src/components/app-shell.tsx b/web/src/components/app-shell.tsx index e2def0f..ccdc9e4 100644 --- a/web/src/components/app-shell.tsx +++ b/web/src/components/app-shell.tsx @@ -18,6 +18,7 @@ export function AppShell({ children }: { children: ReactNode }) { useLocale() return (
+ {/* Desktop sidebar (≥ sm). */} -
-
{children}
-
+ +
+ {/* Mobile top bar (< sm): brand + language. The sidebar is hidden here. */} +
+ +
{m.app_name()}
+
+ +
+
+ +
+ {/* pb-24 leaves room for the fixed bottom nav on mobile. */} +
{children}
+
+
+ + {/* Mobile bottom tab bar (< sm): the primary navigation on phones. */} +
) }