"use client" import { useState, useEffect } from "react" import { usePathname } from "next/navigation" import { motion, AnimatePresence } from "framer-motion" import { Sidebar } from "./sidebar" import { Topbar } from "./topbar" import { SystemMonitor } from "./system-monitor" interface AppShellProps { children: React.ReactNode } export function AppShell({ children }: AppShellProps) { const [sidebarCollapsed, setSidebarCollapsed] = useState(false) const [mobileOpen, setMobileOpen] = useState(false) const pathname = usePathname() // Close mobile sidebar on route change useEffect(() => { setMobileOpen(false) }, [pathname]) // Persist sidebar state useEffect(() => { const saved = localStorage.getItem("sidebar-collapsed") if (saved) setSidebarCollapsed(saved === "true") }, []) const toggleSidebar = () => { const next = !sidebarCollapsed setSidebarCollapsed(next) localStorage.setItem("sidebar-collapsed", String(next)) } return (
{/* Spider-Man top gradient bar */}
{/* Corner spider webs */}
setMobileOpen(false)} />
setMobileOpen(true)} />
{children}
) } function cn(...classes: (string | boolean | undefined | null)[]) { return classes.filter(Boolean).join(" ") }