foundations: design tokens (light + dark) and CSS reset
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -1,5 +1,3 @@
|
|||||||
function App() {
|
export default function App() {
|
||||||
return <div>Cameleer3</div>
|
return <div>Cameleer3 Design System</div>
|
||||||
}
|
}
|
||||||
|
|
||||||
export default App
|
|
||||||
|
|||||||
39
src/design-system/reset.css
Normal file
39
src/design-system/reset.css
Normal file
@@ -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); }
|
||||||
|
}
|
||||||
125
src/design-system/tokens.css
Normal file
125
src/design-system/tokens.css
Normal file
@@ -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;
|
||||||
|
}
|
||||||
2
src/index.css
Normal file
2
src/index.css
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
@import './design-system/tokens.css';
|
||||||
|
@import './design-system/reset.css';
|
||||||
@@ -1,9 +1,13 @@
|
|||||||
import { StrictMode } from 'react'
|
import { StrictMode } from 'react'
|
||||||
import { createRoot } from 'react-dom/client'
|
import { createRoot } from 'react-dom/client'
|
||||||
|
import { BrowserRouter } from 'react-router-dom'
|
||||||
import App from './App'
|
import App from './App'
|
||||||
|
import './index.css'
|
||||||
|
|
||||||
createRoot(document.getElementById('root')!).render(
|
createRoot(document.getElementById('root')!).render(
|
||||||
<StrictMode>
|
<StrictMode>
|
||||||
|
<BrowserRouter>
|
||||||
<App />
|
<App />
|
||||||
|
</BrowserRouter>
|
||||||
</StrictMode>,
|
</StrictMode>,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user