- To get started, edit the page.tsx file. -
-- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -
-diff --git a/web/src/app/globals.css b/web/src/app/globals.css index a2dc41e..fc61139 100644 --- a/web/src/app/globals.css +++ b/web/src/app/globals.css @@ -1,26 +1,80 @@ @import "tailwindcss"; :root { - --background: #ffffff; - --foreground: #171717; + /* ChronoMind Dark Theme */ + --cm-bg-canvas: #06070A; + --cm-bg-elevated: #0E1118; + --cm-surface-card: #121725; + --cm-surface-muted: #1A2335; + --cm-text-primary: #EFF4FF; + --cm-text-secondary: #A5B1C7; + --cm-text-tertiary: #6C7C98; + --cm-border: #1E293B; + --cm-border-subtle: #151D2E; + + /* Urgency colors */ + --cm-critical: #FF4757; + --cm-important: #FF9F43; + --cm-standard: #FECA57; + --cm-gentle: #2ED573; + --cm-passive: #A5B1C7; + + /* Accent */ + --cm-accent: #5A8CFF; + --cm-accent-secondary: #2EE6D6; + + /* Semantic */ + --cm-success: #34D399; + --cm-warning: #F59E0B; + --cm-danger: #FF6E6E; + + --background: var(--cm-bg-canvas); + --foreground: var(--cm-text-primary); +} + +.light { + --cm-bg-canvas: #F8FAFC; + --cm-bg-elevated: #FFFFFF; + --cm-surface-card: #F1F5F9; + --cm-surface-muted: #E2E8F0; + --cm-text-primary: #0F172A; + --cm-text-secondary: #475569; + --cm-text-tertiary: #94A3B8; + --cm-border: #CBD5E1; + --cm-border-subtle: #E2E8F0; + --background: var(--cm-bg-canvas); + --foreground: var(--cm-text-primary); } @theme inline { --color-background: var(--background); --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); -} - -@media (prefers-color-scheme: dark) { - :root { - --background: #0a0a0a; - --foreground: #ededed; - } + --font-sans: "Inter", system-ui, -apple-system, sans-serif; + --font-mono: "JetBrains Mono", ui-monospace, monospace; } body { background: var(--background); color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; + font-family: var(--font-sans); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +/* Scrollbar styling */ +::-webkit-scrollbar { + width: 6px; +} +::-webkit-scrollbar-track { + background: var(--cm-bg-canvas); +} +::-webkit-scrollbar-thumb { + background: var(--cm-surface-muted); + border-radius: 3px; +} + +/* Focus visible */ +:focus-visible { + outline: 2px solid var(--cm-accent); + outline-offset: 2px; } diff --git a/web/src/app/layout.tsx b/web/src/app/layout.tsx index f7fa87e..d67009b 100644 --- a/web/src/app/layout.tsx +++ b/web/src/app/layout.tsx @@ -1,20 +1,20 @@ import type { Metadata } from "next"; -import { Geist, Geist_Mono } from "next/font/google"; +import { Inter, JetBrains_Mono } from "next/font/google"; import "./globals.css"; -const geistSans = Geist({ - variable: "--font-geist-sans", +const inter = Inter({ + variable: "--font-inter", subsets: ["latin"], }); -const geistMono = Geist_Mono({ - variable: "--font-geist-mono", +const jetbrainsMono = JetBrains_Mono({ + variable: "--font-jetbrains-mono", subsets: ["latin"], }); export const metadata: Metadata = { - title: "Create Next App", - description: "Generated by create next app", + title: "ChronoMind — Smart Pre-Warning Timer", + description: "AI-powered time awareness layer with pre-warning cascades, visual timeline, and Pomodoro sessions.", }; export default function RootLayout({ @@ -25,7 +25,7 @@ export default function RootLayout({ return (
{children} diff --git a/web/src/app/page.tsx b/web/src/app/page.tsx index 295f8fd..2bc91b8 100644 --- a/web/src/app/page.tsx +++ b/web/src/app/page.tsx @@ -1,65 +1,5 @@ -import Image from "next/image"; +import { Dashboard } from '@/components/Dashboard'; export default function Home() { - return ( -- Looking for a starting point or more instructions? Head over to{" "} - - Templates - {" "} - or the{" "} - - Learning - {" "} - center. -
-+ {timer.type === 'pomodoro' + ? timer.pomodoroState?.isBreak + ? 'Break is over!' + : `Round ${timer.pomodoroState?.currentRound} complete!` + : 'Timer fired!'} +
+ ++ {formatTime(timer.firedAt ?? Date.now())} + {timer.snoozeCount > 0 && ` · Snoozed ${timer.snoozeCount}x`} +
+ + {/* Actions */} ++ +{firingTimers.length - 1} more timer{firingTimers.length > 2 ? 's' : ''} firing +
+ )} ++ Create your first timer and never be caught off-guard again. +
+ +
+
+