diff --git a/apps/dashboard/src/app/(auth)/layout.tsx b/apps/dashboard/src/app/(auth)/layout.tsx index 3cce9bb..b4e0602 100644 --- a/apps/dashboard/src/app/(auth)/layout.tsx +++ b/apps/dashboard/src/app/(auth)/layout.tsx @@ -1,7 +1,7 @@ export default function AuthLayout({ children }: { children: React.ReactNode }) { return (
-
+
{children}
diff --git a/apps/dashboard/src/app/globals.css b/apps/dashboard/src/app/globals.css index 3c9d68b..4b2ff09 100644 --- a/apps/dashboard/src/app/globals.css +++ b/apps/dashboard/src/app/globals.css @@ -70,6 +70,37 @@ --color-sidebar-primary: var(--sidebar-primary); --color-sidebar-foreground: var(--sidebar-foreground); --color-sidebar: var(--sidebar); + + /* ── Dark mode page tokens ── */ + --color-bg-page: var(--bg-page); + --color-bg-card: var(--bg-card); + --color-bg-sidebar: var(--bg-sidebar); + --color-text-primary: var(--text-primary); + --color-text-secondary: var(--text-secondary); + --color-border-color: var(--border-color); + --color-input-bg: var(--input-bg); + --color-input-border: var(--input-border); + --color-code-bg: var(--code-bg); + + /* ── Chart theming tokens ── */ + --color-chart-tick: var(--chart-tick); + --color-chart-grid: var(--chart-grid); + --color-chart-tooltip-bg: var(--chart-tooltip-bg); + --color-chart-tooltip-text: var(--chart-tooltip-text); + + /* ── Status tokens ── */ + --color-status-success-bg: var(--status-success-bg); + --color-status-success-text: var(--status-success-text); + --color-status-warning-bg: var(--status-warning-bg); + --color-status-warning-text: var(--status-warning-text); + --color-status-error-bg: var(--status-error-bg); + --color-status-error-text: var(--status-error-text); + --color-status-info-bg: var(--status-info-bg); + --color-status-info-text: var(--status-info-text); + --color-status-purple-bg: var(--status-purple-bg); + --color-status-purple-text: var(--status-purple-text); + --color-status-amber-bg: var(--status-amber-bg); + --color-status-amber-text: var(--status-amber-text); } @layer base { @@ -90,6 +121,38 @@ :root { --header-height: 3.5rem; + /* ── Dark mode specific tokens (dark-first) ── */ + --bg-page: #0B1628; + --bg-card: #1A2332; + --bg-sidebar: #0F1D2E; + --text-primary: #F8F9FA; + --text-secondary: #6C757D; + --border-color: #2D3748; + --input-bg: #1A2332; + --input-border: #2D3748; + --code-bg: #0B1628; + + /* ── Chart theming tokens ── */ + --chart-tick: #F8F9FA; + --chart-grid: rgba(248, 249, 250, 0.08); + --chart-tooltip-bg: #1A2332; + --chart-tooltip-text: #F8F9FA; + --chart-tooltip-border: #2D3748; + + /* ── Semantic status tokens ── */ + --status-success-bg: rgba(34, 197, 94, 0.12); + --status-success-text: #4ade80; + --status-warning-bg: rgba(245, 158, 11, 0.12); + --status-warning-text: #fbbf24; + --status-error-bg: rgba(239, 68, 68, 0.12); + --status-error-text: #f87171; + --status-info-bg: rgba(59, 130, 246, 0.12); + --status-info-text: #60a5fa; + --status-purple-bg: rgba(168, 85, 247, 0.12); + --status-purple-text: #c084fc; + --status-amber-bg: rgba(245, 158, 11, 0.12); + --status-amber-text: #fbbf24; + /* Sidebar uses Useroutr ink tiers for dark-first design */ --sidebar: var(--ink2); --sidebar-foreground: var(--lead); @@ -102,6 +165,35 @@ } .light { + --bg-page: #FFFFFF; + --bg-card: #F8F9FA; + --bg-sidebar: #F3F4F6; + --text-primary: #1A202C; + --text-secondary: #6B7280; + --border-color: #E2E8F0; + --input-bg: #FFFFFF; + --input-border: #D1D5DB; + --code-bg: #F1F5F9; + + --chart-tick: #1A202C; + --chart-grid: rgba(0, 0, 0, 0.08); + --chart-tooltip-bg: #FFFFFF; + --chart-tooltip-text: #1A202C; + --chart-tooltip-border: #E2E8F0; + + --status-success-bg: rgba(34, 197, 94, 0.1); + --status-success-text: #16a34a; + --status-warning-bg: rgba(245, 158, 11, 0.1); + --status-warning-text: #d97706; + --status-error-bg: rgba(239, 68, 68, 0.1); + --status-error-text: #dc2626; + --status-info-bg: rgba(59, 130, 246, 0.1); + --status-info-text: #2563eb; + --status-purple-bg: rgba(168, 85, 247, 0.1); + --status-purple-text: #7c3aed; + --status-amber-bg: rgba(245, 158, 11, 0.1); + --status-amber-text: #d97706; + --sidebar: oklch(0.975 0.003 265); --sidebar-foreground: oklch(0.15 0.01 265); --sidebar-primary: var(--blue); @@ -113,14 +205,14 @@ } .dark { - --sidebar: hsl(240 5.9% 10%); - --sidebar-foreground: hsl(240 4.8% 95.9%); - --sidebar-primary: hsl(224.3 76.3% 48%); - --sidebar-primary-foreground: hsl(0 0% 100%); - --sidebar-accent: hsl(240 3.7% 15.9%); - --sidebar-accent-foreground: hsl(240 4.8% 95.9%); - --sidebar-border: hsl(240 3.7% 15.9%); - --sidebar-ring: hsl(217.2 91.2% 59.8%); + --sidebar: var(--bg-sidebar); + --sidebar-foreground: var(--text-primary); + --sidebar-primary: var(--blue); + --sidebar-primary-foreground: #FFFFFF; + --sidebar-accent: #1E293B; + --sidebar-accent-foreground: var(--text-primary); + --sidebar-border: var(--border-color); + --sidebar-ring: var(--blue2); } /* ── Modern card surface ── */ diff --git a/apps/dashboard/src/app/layout.tsx b/apps/dashboard/src/app/layout.tsx index 11fb4c1..ba1fb9f 100644 --- a/apps/dashboard/src/app/layout.tsx +++ b/apps/dashboard/src/app/layout.tsx @@ -6,6 +6,7 @@ import { QueryProvider } from "@/providers/QueryProvider"; import { AuthProvider } from "@/providers/AuthProvider"; import "./globals.css"; import { ToastProvider } from "@useroutr/ui"; +import { TooltipProvider } from "@/components/ui/tooltip"; const inter = Inter({ subsets: ["latin"], @@ -34,12 +35,21 @@ export default function RootLayout({ }) { return ( + +