diff --git a/apps/web/package.json b/apps/web/package.json index 01b5512..49df51f 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -16,6 +16,7 @@ "@dagrejs/dagre": "^2.0.4", "@xyflow/react": "^12.10.0", "bcryptjs": "^3.0.3", + "clsx": "^2.1.1", "ioredis": "^5.9.2", "lucide-react": "^0.469.0", "next": "^15.1.0", @@ -25,6 +26,7 @@ "react-dom": "^19.0.0", "shiki": "^3.22.0", "stripe": "^20.3.1", + "tailwind-merge": "^3.4.0", "zod": "^4.3.6" }, "devDependencies": { diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css index f1d8c73..98232b9 100644 --- a/apps/web/src/app/globals.css +++ b/apps/web/src/app/globals.css @@ -1 +1,38 @@ @import "tailwindcss"; + +@layer base { + :root { + /* Surfaces */ + --surface-page: #0a0a0a; + --surface-card: rgb(23 23 23); /* neutral-900 */ + --surface-card-hover: rgb(38 38 38 / 0.5); /* neutral-800/50 */ + --surface-elevated: rgb(23 23 23); /* neutral-900 */ + --surface-input: rgb(10 10 10); /* neutral-950 */ + + /* Text */ + --text-primary: rgb(245 245 245); /* neutral-100 */ + --text-secondary: rgb(163 163 163); /* neutral-400 */ + --text-muted: rgb(115 115 115); /* neutral-500 */ + + /* Borders */ + --border-default: rgb(38 38 38); /* neutral-800 */ + --border-subtle: rgb(38 38 38 / 0.5); /* neutral-800/50 */ + --border-strong: rgb(64 64 64); /* neutral-700 */ + + /* Accent (AgentLens emerald) */ + --accent: #10b981; + --accent-hover: #34d399; + --accent-muted: rgba(16, 185, 129, 0.15); + --accent-foreground: #0a0a0a; + + /* Radius */ + --radius-card: 1rem; + --radius-button: 0.5rem; + --radius-icon: 0.75rem; + --radius-badge: 9999px; + + /* Fonts */ + --font-sans: var(--font-inter), system-ui, sans-serif; + --font-mono: var(--font-jetbrains), 'JetBrains Mono', 'Fira Code', monospace; + } +} diff --git a/apps/web/src/app/layout.tsx b/apps/web/src/app/layout.tsx index 2928da8..cddd0de 100644 --- a/apps/web/src/app/layout.tsx +++ b/apps/web/src/app/layout.tsx @@ -1,9 +1,10 @@ -import { Inter } from "next/font/google"; +import { Inter, JetBrains_Mono } from "next/font/google"; import type { Metadata } from "next"; import { SessionProvider } from "next-auth/react"; import "./globals.css"; -const inter = Inter({ subsets: ["latin"] }); +const inter = Inter({ subsets: ["latin"], variable: "--font-inter", display: "swap" }); +const jetbrainsMono = JetBrains_Mono({ subsets: ["latin"], variable: "--font-jetbrains", display: "swap" }); export const metadata: Metadata = { metadataBase: new URL("https://agentlens.vectry.tech"), @@ -72,7 +73,7 @@ export default function RootLayout({ }>) { return ( -
+