diff --git a/src/App.tsx b/src/App.tsx
index a87a304..c07964a 100644
--- a/src/App.tsx
+++ b/src/App.tsx
@@ -1,5 +1,3 @@
-function App() {
- return
Cameleer3
+export default function App() {
+ return Cameleer3 Design System
}
-
-export default App
diff --git a/src/design-system/reset.css b/src/design-system/reset.css
new file mode 100644
index 0000000..a2e11b0
--- /dev/null
+++ b/src/design-system/reset.css
@@ -0,0 +1,39 @@
+*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
+
+html { font-size: 14px; }
+
+body {
+ font-family: var(--font-body);
+ background: var(--bg-body);
+ color: var(--text-primary);
+ line-height: 1.5;
+ min-height: 100vh;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+}
+
+::-webkit-scrollbar { width: 6px; height: 6px; }
+::-webkit-scrollbar-track { background: transparent; }
+::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
+::-webkit-scrollbar-thumb:hover { background: var(--text-faint); }
+
+/* Shared animations */
+@keyframes fadeIn {
+ from { opacity: 0; transform: translateY(6px); }
+ to { opacity: 1; transform: translateY(0); }
+}
+
+@keyframes pulse {
+ 0%, 100% { box-shadow: 0 0 0 0 rgba(61, 124, 71, 0.35); }
+ 50% { box-shadow: 0 0 0 5px rgba(61, 124, 71, 0); }
+}
+
+@keyframes slideInRight {
+ from { opacity: 0; transform: translateX(20px); }
+ to { opacity: 1; transform: translateX(0); }
+}
+
+@keyframes spin {
+ from { transform: rotate(0deg); }
+ to { transform: rotate(360deg); }
+}
diff --git a/src/design-system/tokens.css b/src/design-system/tokens.css
new file mode 100644
index 0000000..7ec2f40
--- /dev/null
+++ b/src/design-system/tokens.css
@@ -0,0 +1,125 @@
+:root {
+ /* Surface palette (warm parchment) */
+ --bg-body: #F5F2ED;
+ --bg-surface: #FFFFFF;
+ --bg-raised: #FAF8F5;
+ --bg-inset: #F0EDE8;
+ --bg-hover: #F5F0EA;
+
+ /* Sidebar (warm charcoal) */
+ --sidebar-bg: #2C2520;
+ --sidebar-hover: #3A322C;
+ --sidebar-active: #4A3F38;
+ --sidebar-text: #BFB5A8;
+ --sidebar-muted: #7A6F63;
+
+ /* Text */
+ --text-primary: #1A1612;
+ --text-secondary: #5C5347;
+ --text-muted: #9C9184;
+ --text-faint: #C4BAB0;
+
+ /* Borders */
+ --border: #E4DFD8;
+ --border-subtle: #EDE9E3;
+
+ /* Brand accent (amber-gold) */
+ --amber: #C6820E;
+ --amber-light: #F0D9A8;
+ --amber-bg: #FDF6E9;
+ --amber-deep: #8B5A06;
+
+ /* Status colors (warm) */
+ --success: #3D7C47;
+ --success-bg: #EFF7F0;
+ --success-border: #C2DFC6;
+ --warning: #C27516;
+ --warning-bg: #FEF5E7;
+ --warning-border: #F0D9A8;
+ --error: #C0392B;
+ --error-bg: #FDF0EE;
+ --error-border: #F0C4BE;
+ --running: #1A7F8E;
+ --running-bg: #E8F5F7;
+ --running-border: #B0DDE4;
+
+ /* Typography */
+ --font-body: 'DM Sans', system-ui, -apple-system, sans-serif;
+ --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
+
+ /* Spacing & Radii */
+ --radius-sm: 5px;
+ --radius-md: 8px;
+ --radius-lg: 12px;
+
+ /* Shadows */
+ --shadow-sm: 0 1px 2px rgba(44, 37, 32, 0.06);
+ --shadow-md: 0 2px 8px rgba(44, 37, 32, 0.08);
+ --shadow-lg: 0 4px 16px rgba(44, 37, 32, 0.10);
+ --shadow-card: 0 1px 3px rgba(44, 37, 32, 0.04), 0 0 0 1px rgba(44, 37, 32, 0.04);
+
+ /* Chart palette */
+ --chart-1: #C6820E;
+ --chart-2: #3D7C47;
+ --chart-3: #1A7F8E;
+ --chart-4: #C27516;
+ --chart-5: #8B5A06;
+ --chart-6: #6B8E4E;
+ --chart-7: #C0392B;
+ --chart-8: #9C7A3C;
+}
+
+/* Dark theme — muted redesign, same token names */
+[data-theme="dark"] {
+ --bg-body: #1A1714;
+ --bg-surface: #242019;
+ --bg-raised: #2A2620;
+ --bg-inset: #151310;
+ --bg-hover: #302B24;
+
+ --sidebar-bg: #141210;
+ --sidebar-hover: #1E1B17;
+ --sidebar-active: #28241E;
+ --sidebar-text: #A89E92;
+ --sidebar-muted: #6A6058;
+
+ --text-primary: #E8E0D6;
+ --text-secondary: #B0A698;
+ --text-muted: #7A7068;
+ --text-faint: #4A4238;
+
+ --border: #3A3530;
+ --border-subtle: #2E2A25;
+
+ --amber: #D4941E;
+ --amber-light: #4A3A1E;
+ --amber-bg: #2A2418;
+ --amber-deep: #E8B04A;
+
+ --success: #5DB866;
+ --success-bg: #1A2A1C;
+ --success-border: #2A3E2C;
+ --warning: #D4901E;
+ --warning-bg: #2A2418;
+ --warning-border: #3E3420;
+ --error: #E05A4C;
+ --error-bg: #2A1A18;
+ --error-border: #4A2A24;
+ --running: #2AA0B0;
+ --running-bg: #1A2628;
+ --running-border: #243A3E;
+
+ --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.2);
+ --shadow-md: 0 2px 8px rgba(0, 0, 0, 0.3);
+ --shadow-lg: 0 4px 16px rgba(0, 0, 0, 0.4);
+ --shadow-card: 0 1px 3px rgba(0, 0, 0, 0.15), 0 0 0 1px rgba(255, 255, 255, 0.04);
+
+ --chart-1: #D4941E;
+ --chart-2: #5DB866;
+ --chart-3: #2AA0B0;
+ --chart-4: #D4901E;
+ --chart-5: #E8B04A;
+ --chart-6: #7AAE5E;
+ --chart-7: #E05A4C;
+ --chart-8: #B89A4C;
+}
diff --git a/src/index.css b/src/index.css
new file mode 100644
index 0000000..2a3f6e8
--- /dev/null
+++ b/src/index.css
@@ -0,0 +1,2 @@
+@import './design-system/tokens.css';
+@import './design-system/reset.css';
diff --git a/src/main.tsx b/src/main.tsx
index feac8ee..8e0deb1 100644
--- a/src/main.tsx
+++ b/src/main.tsx
@@ -1,9 +1,13 @@
import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
+import { BrowserRouter } from 'react-router-dom'
import App from './App'
+import './index.css'
createRoot(document.getElementById('root')!).render(
-
+
+
+
,
)