diff --git a/apps/web/src/components/layout/DashboardLayout.tsx b/apps/web/src/components/layout/DashboardLayout.tsx
index 31207dbab..58cda4070 100644
--- a/apps/web/src/components/layout/DashboardLayout.tsx
+++ b/apps/web/src/components/layout/DashboardLayout.tsx
@@ -1,6 +1,7 @@
import type { ReactNode } from 'react';
import { Header } from './Header';
import { Sidebar } from './Sidebar';
+import { MobileBottomNav } from './MobileBottomNav';
import { AnnouncementBanner } from '../feedback/AnnouncementBanner';
import { GlobalPlayer } from '@/features/player/components/GlobalPlayer';
import { useQueueSync } from '@/features/player/hooks/useQueueSync';
@@ -14,12 +15,21 @@ interface DashboardLayoutProps {
/**
* Layout principal "App Shell" - Veza Professional V2
- *
+ *
* Architecture:
* - Body: Fixed viewport (overflow-hidden)
- * - Sidebar: Fixed left, z-index high
+ * - Sidebar: Fixed left, z-index high (desktop only)
+ * - MobileBottomNav: Fixed bottom (mobile only, lg:hidden)
* - Main: Scrollable container independent of window
* - Header: Sticky top within Main
+ * - Player: Fixed above bottom nav (mobile) / above content (desktop)
+ *
+ * Z-index hierarchy (bottom to top):
+ * z-raised (10) — main content
+ * z-40 — MobileBottomNav
+ * z-player — GlobalPlayer (z-sticky = 200)
+ * z-sidebar — Sidebar (95)
+ * z-sticky — Header (200)
*/
export function DashboardLayout({ children }: DashboardLayoutProps) {
const { sidebarOpen } = useUIStore();
@@ -30,7 +40,7 @@ export function DashboardLayout({ children }: DashboardLayoutProps) {
{/* 1. Global Background (Fixed z-0) */}
{user?.username}
{user?.email}
diff --git a/apps/web/src/components/layout/MobileBottomNav.tsx b/apps/web/src/components/layout/MobileBottomNav.tsx index 4171c2d8a..a22d9be1f 100644 --- a/apps/web/src/components/layout/MobileBottomNav.tsx +++ b/apps/web/src/components/layout/MobileBottomNav.tsx @@ -1,21 +1,26 @@ import { useLocation, Link } from 'react-router-dom'; import { Home, Search, Layers, MessageSquare, User } from 'lucide-react'; +import { useTranslation } from 'react-i18next'; import { cn } from '@/lib/utils'; const navItems = [ - { id: 'home', label: 'Home', icon: Home, path: '/dashboard' }, - { id: 'search', label: 'Search', icon: Search, path: '/search' }, - { id: 'library', label: 'Library', icon: Layers, path: '/library' }, - { id: 'chat', label: 'Chat', icon: MessageSquare, path: '/chat' }, - { id: 'profile', label: 'Profile', icon: User, path: '/settings' }, + { id: 'home', labelKey: 'nav.items.dashboard', icon: Home, path: '/dashboard' }, + { id: 'search', labelKey: 'nav.items.discover', icon: Search, path: '/discover' }, + { id: 'library', labelKey: 'nav.items.tracks', icon: Layers, path: '/library' }, + { id: 'chat', labelKey: 'nav.items.chat', icon: MessageSquare, path: '/chat' }, + { id: 'profile', labelKey: 'nav.settings', icon: User, path: '/settings' }, ]; export function MobileBottomNav() { const location = useLocation(); + const { t } = useTranslation(); return ( -