diff --git a/src/frontend/App.tsx b/src/frontend/App.tsx
index 09b029f..838a693 100644
--- a/src/frontend/App.tsx
+++ b/src/frontend/App.tsx
@@ -4,38 +4,38 @@ import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import { createRouter, RouterProvider } from '@tanstack/react-router'
import { routeTree } from './routeTree.gen'
-const theme = createTheme({
+ const theme = createTheme({
primaryColor: 'brand-blue',
colors: {
'brand-blue': [
- '#ebf2ff',
- '#d6e4ff',
- '#adc8ff',
- '#85acff',
- '#5c90ff',
- '#2563eb', // Primary Blue
- '#1e4fb8',
- '#173b85',
- '#102752',
- '#09131f',
+ '#f0f9ff',
+ '#e0f2fe',
+ '#bae6fd',
+ '#7dd3fc',
+ '#38bdf8',
+ '#0ea5e9', // Primary Blue (Sky)
+ '#0284c7',
+ '#0369a1',
+ '#075985',
+ '#0c4a6e',
],
'brand-purple': [
- '#f3ebff',
- '#e7d6ff',
- '#cfadff',
- '#b785ff',
- '#9f5cff',
- '#7c3aed', // Primary Purple
- '#632eb8',
- '#4a2285',
- '#311652',
- '#180b1f',
+ '#faf5ff',
+ '#f3e8ff',
+ '#e9d5ff',
+ '#d8b4fe',
+ '#c084fc',
+ '#a855f7', // Primary Purple
+ '#9333ea',
+ '#7e22ce',
+ '#6b21a8',
+ '#581c87',
],
},
fontFamily: 'Inter, system-ui, Avenir, Helvetica, Arial, sans-serif',
headings: {
fontFamily: 'Inter, system-ui, sans-serif',
- fontWeight: '600',
+ fontWeight: '500', // Softer headings
},
})
@@ -59,8 +59,8 @@ declare module '@tanstack/react-router' {
export function App() {
return (
<>
-
-
+
+
diff --git a/src/frontend/components/AppCard.tsx b/src/frontend/components/AppCard.tsx
index 4880e26..130c03b 100644
--- a/src/frontend/components/AppCard.tsx
+++ b/src/frontend/components/AppCard.tsx
@@ -1,4 +1,4 @@
-import { Card, Group, Text, ThemeIcon, Badge, Avatar, Stack, Button, Progress, Box } from '@mantine/core'
+import { Card, Group, Text, ThemeIcon, Badge, Avatar, Stack, Button, Progress, Box, useComputedColorScheme } from '@mantine/core'
import { Link } from '@tanstack/react-router'
import { TbDeviceMobile, TbActivity, TbAlertTriangle, TbChevronRight } from 'react-icons/tb'
@@ -13,6 +13,7 @@ interface AppCardProps {
export function AppCard({ id, name, status, users, errors, version }: AppCardProps) {
const statusColor = status === 'active' ? 'teal' : status === 'warning' ? 'orange' : 'red'
+ const scheme = useComputedColorScheme('light', { getInitialValueInEffect: true })
return (
({
root: {
- backgroundColor: 'rgba(30, 41, 59, 0.4)',
- borderColor: 'rgba(255,255,255,0.08)',
- transition: 'transform 0.2s ease, box-shadow 0.2s ease',
+ backgroundColor: 'var(--mantine-color-body)',
+ borderColor: scheme === 'dark' ? 'rgba(255,255,255,0.08)' : 'rgba(0,0,0,0.05)',
+ transition: 'transform 0.2s ease, box-shadow 0.2s ease, background-color 0.2s ease, border-color 0.2s ease',
'&:hover': {
transform: 'translateY(-4px)',
- boxShadow: '0 12px 24px -8px rgba(0, 0, 0, 0.4)',
+ boxShadow: theme.shadows.md,
borderColor: 'rgba(37, 99, 235, 0.3)',
},
},
diff --git a/src/frontend/components/DashboardLayout.tsx b/src/frontend/components/DashboardLayout.tsx
index 1a119e7..133c8ad 100644
--- a/src/frontend/components/DashboardLayout.tsx
+++ b/src/frontend/components/DashboardLayout.tsx
@@ -1,5 +1,6 @@
import { APP_CONFIGS } from '@/frontend/config/appMenus'
import {
+ ActionIcon,
AppShell,
Avatar,
Box,
@@ -14,6 +15,7 @@ import {
ThemeIcon
} from '@mantine/core'
import { useDisclosure } from '@mantine/hooks'
+import { useMantineColorScheme, useComputedColorScheme } from '@mantine/core'
import { Link, useLocation, useMatches, useNavigate, useParams } from '@tanstack/react-router'
import {
TbApps,
@@ -23,7 +25,9 @@ import {
TbDeviceMobile,
TbLogout,
TbSettings,
- TbUserCircle
+ TbUserCircle,
+ TbSun,
+ TbMoon
} from 'react-icons/tb'
interface DashboardLayoutProps {
@@ -31,7 +35,10 @@ interface DashboardLayoutProps {
}
export function DashboardLayout({ children }: DashboardLayoutProps) {
- const [opened, { toggle }] = useDisclosure()
+ const [mobileOpened, { toggle: toggleMobile }] = useDisclosure()
+ const [desktopOpened, { toggle: toggleDesktop }] = useDisclosure(true)
+ const { toggleColorScheme } = useMantineColorScheme()
+ const computedColorScheme = useComputedColorScheme('light', { getInitialValueInEffect: true })
const location = useLocation()
const navigate = useNavigate()
const { appId } = useParams({ strict: false }) as { appId?: string }
@@ -54,19 +61,21 @@ export function DashboardLayout({ children }: DashboardLayoutProps) {
navbar={{
width: 260,
breakpoint: 'sm',
- collapsed: { mobile: !opened },
+ collapsed: { mobile: !mobileOpened, desktop: !desktopOpened },
}}
padding="xl"
styles={(theme) => ({
main: {
- backgroundColor: theme.colors.dark[7], // Dark mode background
+ backgroundColor: computedColorScheme === 'dark' ? theme.colors.dark[9] : theme.colors.gray[0],
+ transition: 'background-color 0.2s ease',
},
})}
>
-
+
+
+ toggleColorScheme()}
+ variant="default"
+ size="lg"
+ aria-label="Toggle color scheme"
+ >
+ {computedColorScheme === 'dark' ? : }
+