diff --git a/app/globals.css b/app/globals.css index a2dc41e..9c93bd9 100644 --- a/app/globals.css +++ b/app/globals.css @@ -1,26 +1,107 @@ @import "tailwindcss"; -:root { - --background: #ffffff; - --foreground: #171717; -} +/* ============================================================================ + EquipChain Design System + Brand Colors, Typography, Spacing, Shadows, Radii, Transitions + ============================================================================ */ @theme inline { - --color-background: var(--background); - --color-foreground: var(--foreground); - --font-sans: var(--font-geist-sans); - --font-mono: var(--font-geist-mono); + /* Brand Colors — Blue Primary Palette */ + --color-brand-50: #eff6ff; + --color-brand-100: #dbeafe; + --color-brand-200: #bfdbfe; + --color-brand-300: #93c5fd; + --color-brand-400: #60a5fa; + --color-brand-500: #3b82f6; + --color-brand-600: #2563eb; + --color-brand-700: #1d4ed8; + --color-brand-800: #1e40af; + --color-brand-900: #1e3a8a; + --color-brand-950: #172554; + + /* Status Colors */ + --color-success: #22c55e; + --color-success-light: #bbf7d0; + --color-success-dark: #166534; + --color-warning: #f59e0b; + --color-warning-light: #fde68a; + --color-warning-dark: #92400e; + --color-error: #ef4444; + --color-error-light: #fecaca; + --color-error-dark: #991b1b; + --color-info: #3b82f6; + --color-info-light: #bfdbfe; + --color-info-dark: #1e40af; + + /* Surface Colors */ + --color-surface: #ffffff; + --color-surface-secondary: #f8fafc; + --color-surface-tertiary: #f1f5f9; + --color-border: #e2e8f0; + --color-border-light: #f1f5f9; + + /* Text Colors */ + --color-text-primary: #0f172a; + --color-text-secondary: #475569; + --color-text-muted: #94a3b8; + --color-text-inverse: #ffffff; + + /* Background */ + --color-background: #ffffff; + --color-foreground: #0f172a; + + /* Typography */ + --font-sans: var(--font-geist-sans), ui-sans-serif, system-ui, -apple-system, sans-serif; + --font-mono: var(--font-geist-mono), ui-monospace, SFMono-Regular, monospace; + + /* Shadows */ + --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05); + --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1); + --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1); + --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1); + + /* Border Radius */ + --radius-sm: 0.25rem; + --radius-md: 0.375rem; + --radius-lg: 0.5rem; + --radius-xl: 0.75rem; + --radius-2xl: 1rem; + --radius-full: 9999px; } +/* Dark Theme */ @media (prefers-color-scheme: dark) { :root { - --background: #0a0a0a; - --foreground: #ededed; + --color-surface: #0f172a; + --color-surface-secondary: #1e293b; + --color-surface-tertiary: #334155; + --color-border: #334155; + --color-border-light: #1e293b; + --color-text-primary: #f1f5f9; + --color-text-secondary: #94a3b8; + --color-text-muted: #64748b; + --color-text-inverse: #0f172a; + --color-background: #0a0a0a; + --color-foreground: #ededed; } } +/* Base Styles */ body { - background: var(--background); - color: var(--foreground); - font-family: Arial, Helvetica, sans-serif; + background: var(--color-background); + color: var(--color-foreground); + font-family: var(--font-sans); + line-height: 1.5; +} + +/* Focus ring for accessibility */ +*:focus-visible { + outline: 2px solid var(--color-brand-500); + outline-offset: 2px; +} + +/* Text selection */ +::selection { + background: var(--color-brand-200); + color: var(--color-brand-900); } diff --git a/public/icon.svg b/public/icon.svg new file mode 100644 index 0000000..9d27020 --- /dev/null +++ b/public/icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/logo-mark.svg b/public/logo-mark.svg new file mode 100644 index 0000000..412868a --- /dev/null +++ b/public/logo-mark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..6e554f3 --- /dev/null +++ b/public/logo.svg @@ -0,0 +1,5 @@ + + + + EquipChain + diff --git a/src/lib/design/DESIGN_TOKENS.md b/src/lib/design/DESIGN_TOKENS.md new file mode 100644 index 0000000..b37ed4b --- /dev/null +++ b/src/lib/design/DESIGN_TOKENS.md @@ -0,0 +1,54 @@ +# EquipChain Design Tokens + +## Brand Colors + +| Token | Value | Usage | +|-------|-------|-------| +| `brand-50` | `#eff6ff` | Lightest background | +| `brand-100` | `#dbeafe` | Hover/selected states | +| `brand-200` | `#bfdbfe` | Selection color | +| `brand-300` | `#93c5fd` | Borders, dividers | +| `brand-400` | `#60a5fa` | Interactive hover | +| `brand-500` | `#3b82f6` | **Primary** buttons, links | +| `brand-600` | `#2563eb` | Active/pressed states | +| `brand-700` | `#1d4ed8` | Text on brand bg | +| `brand-800` | `#1e40af` | Dark hover | +| `brand-900` | `#1e3a8a` | Darkest brand | + +## Status Colors + +- `success` — `#22c55e` — Positive actions, confirmations +- `warning` — `#f59e0b` — Caution, pending actions +- `error` — `#ef4444` — Errors, destructive actions +- `info` — `#3b82f6` — Information, guidance + +## Typography + +| Token | Value | +|-------|-------| +| `font-sans` | Geist Sans / system-ui | +| `font-mono` | Geist Mono / monospace | + +## Shadows + +| Token | Value | +|-------|-------| +| `shadow-sm` | `0 1px 2px rgba(0,0,0,0.05)` | +| `shadow-md` | `0 4px 6px rgba(0,0,0,0.1)` | +| `shadow-lg` | `0 10px 15px rgba(0,0,0,0.1)` | +| `shadow-xl` | `0 20px 25px rgba(0,0,0,0.1)` | + +## Border Radius + +| Token | Value | +|-------|-------| +| `radius-sm` | `0.25rem` | +| `radius-md` | `0.375rem` | +| `radius-lg` | `0.5rem` | +| `radius-xl` | `0.75rem` | +| `radius-2xl` | `1rem` | +| `radius-full` | `9999px` | + +## Dark Theme + +All tokens have dark variants under `@media (prefers-color-scheme: dark)` with inverted surface/text colors.