@justin_evo/evo-ui 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Alert/Alert.d.ts +11 -0
- package/dist/AutoComplete/AutoComplete.d.ts +95 -0
- package/dist/Badge/Badge.d.ts +23 -0
- package/dist/Breadcrumb/Breadcrumb.d.ts +16 -0
- package/dist/Button/Button.d.ts +54 -0
- package/dist/Card/Card.d.ts +60 -0
- package/dist/Checkbox/Checkbox.d.ts +16 -0
- package/dist/CommandPalette/CommandPalette.d.ts +17 -0
- package/dist/Container/Container.d.ts +10 -0
- package/dist/Divider/Divider.d.ts +7 -0
- package/dist/Form/Form.d.ts +61 -0
- package/dist/Grid/Grid.d.ts +23 -0
- package/dist/ImageCropper/ImageCropper.d.ts +111 -0
- package/dist/Input/Input.d.ts +12 -0
- package/dist/Modal/Modal.d.ts +26 -0
- package/dist/Nav/Nav.d.ts +63 -0
- package/dist/Notification/Notification.d.ts +186 -0
- package/dist/Pagination/Pagination.d.ts +10 -0
- package/dist/Radio/Radio.d.ts +20 -0
- package/dist/RichTextArea/RichTextArea.d.ts +70 -0
- package/dist/Select/Select.d.ts +44 -0
- package/dist/Skeleton/Skeleton.d.ts +23 -0
- package/dist/Stack/Stack.d.ts +16 -0
- package/dist/Table/Table.d.ts +77 -0
- package/dist/Tabs/Tabs.d.ts +28 -0
- package/dist/Theme/ThemeProvider.d.ts +96 -0
- package/dist/Theme/ThemeToggle.d.ts +22 -0
- package/dist/Toggle/Toggle.d.ts +11 -0
- package/dist/Tooltip/Tooltip.d.ts +10 -0
- package/dist/TopNav/TopNav.d.ts +76 -0
- package/dist/TreeSelect/TreeSelect.d.ts +50 -0
- package/dist/declarations.d.ts +6 -0
- package/dist/evo-ui.css +1 -0
- package/dist/index.cjs.js +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.es.js +5688 -0
- package/package.json +52 -0
- package/src/Alert/Alert.tsx +49 -0
- package/src/AutoComplete/AutoComplete.tsx +810 -0
- package/src/Badge/Badge.tsx +53 -0
- package/src/Breadcrumb/Breadcrumb.tsx +53 -0
- package/src/Button/Button.tsx +125 -0
- package/src/Card/Card.tsx +257 -0
- package/src/Checkbox/Checkbox.tsx +59 -0
- package/src/CommandPalette/CommandPalette.tsx +185 -0
- package/src/Container/Container.tsx +31 -0
- package/src/Divider/Divider.tsx +31 -0
- package/src/Form/Form.tsx +185 -0
- package/src/Grid/Grid.tsx +66 -0
- package/src/ImageCropper/ImageCropper.tsx +911 -0
- package/src/Input/Input.tsx +74 -0
- package/src/Modal/Modal.tsx +77 -0
- package/src/Nav/Nav.tsx +626 -0
- package/src/Notification/Notification.tsx +1503 -0
- package/src/Pagination/Pagination.tsx +76 -0
- package/src/Radio/Radio.tsx +69 -0
- package/src/RichTextArea/RichTextArea.tsx +869 -0
- package/src/Select/Select.tsx +515 -0
- package/src/Skeleton/Skeleton.tsx +70 -0
- package/src/Stack/Stack.tsx +52 -0
- package/src/Table/Table.tsx +335 -0
- package/src/Tabs/Tabs.tsx +90 -0
- package/src/Theme/ThemeProvider.tsx +253 -0
- package/src/Theme/ThemeToggle.tsx +79 -0
- package/src/Toggle/Toggle.tsx +48 -0
- package/src/Tooltip/Tooltip.tsx +38 -0
- package/src/TopNav/TopNav.tsx +994 -0
- package/src/TreeSelect/TreeSelect.tsx +825 -0
- package/src/css/alert.module.scss +93 -0
- package/src/css/autocomplete.module.scss +416 -0
- package/src/css/badge.module.scss +82 -0
- package/src/css/base/_color.scss +159 -0
- package/src/css/base/_theme.scss +237 -0
- package/src/css/base/_variables.scss +161 -0
- package/src/css/breadcrumb.module.scss +50 -0
- package/src/css/button.module.scss +385 -0
- package/src/css/card.module.scss +217 -0
- package/src/css/checkbox.module.scss +120 -0
- package/src/css/commandpalette.module.scss +211 -0
- package/src/css/container.module.scss +18 -0
- package/src/css/divider.module.scss +41 -0
- package/src/css/form.module.scss +245 -0
- package/src/css/imagecropper.module.scss +397 -0
- package/src/css/input.module.scss +89 -0
- package/src/css/modal.module.scss +105 -0
- package/src/css/nav.module.scss +339 -0
- package/src/css/notification.module.scss +691 -0
- package/src/css/pagination.module.scss +63 -0
- package/src/css/radio.module.scss +89 -0
- package/src/css/richtextarea.module.scss +307 -0
- package/src/css/select.module.scss +525 -0
- package/src/css/skeleton.module.scss +30 -0
- package/src/css/table.module.scss +386 -0
- package/src/css/tabs.module.scss +63 -0
- package/src/css/theme-toggle.module.scss +83 -0
- package/src/css/toggle.module.scss +54 -0
- package/src/css/tooltip.module.scss +97 -0
- package/src/css/topnav.module.scss +396 -0
- package/src/css/treeselect.module.scss +558 -0
- package/src/css/utilities/_borders.scss +111 -0
- package/src/css/utilities/_colors.scss +66 -0
- package/src/css/utilities/_effects.scss +216 -0
- package/src/css/utilities/_layout.scss +181 -0
- package/src/css/utilities/_position.scss +75 -0
- package/src/css/utilities/_sizing.scss +138 -0
- package/src/css/utilities/_spacing.scss +99 -0
- package/src/css/utilities/_typography.scss +121 -0
- package/src/css/utilities/index.scss +24 -0
- package/src/declarations.d.ts +6 -0
- package/src/index.ts +60 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
// ===========================================
|
|
2
|
+
// REFINED COLOR PALETTE - Gaming Card System
|
|
3
|
+
// ===========================================
|
|
4
|
+
|
|
5
|
+
// Blue (primary) — bright vibrant blue
|
|
6
|
+
$evo-blue-100: #dbeafe;
|
|
7
|
+
$evo-blue-200: #bfdbfe;
|
|
8
|
+
$evo-blue-300: #93c5fd;
|
|
9
|
+
$evo-blue-400: #60a5fa;
|
|
10
|
+
$evo-blue-500: #3b82f6;
|
|
11
|
+
$evo-blue-600: #2563eb;
|
|
12
|
+
$evo-blue-700: #1d4ed8;
|
|
13
|
+
$evo-blue-800: #1e40af;
|
|
14
|
+
$evo-blue-900: #1e3a8a;
|
|
15
|
+
|
|
16
|
+
// Gray (secondary) — refined neutral gray
|
|
17
|
+
$evo-gray-100: #f3f4f6;
|
|
18
|
+
$evo-gray-200: #e5e7eb;
|
|
19
|
+
$evo-gray-300: #d1d5db;
|
|
20
|
+
$evo-gray-400: #9ca3af;
|
|
21
|
+
$evo-gray-500: #6b7280;
|
|
22
|
+
$evo-gray-600: #4b5563;
|
|
23
|
+
$evo-gray-700: #374151;
|
|
24
|
+
$evo-gray-800: #1f2937;
|
|
25
|
+
$evo-gray-900: #111827;
|
|
26
|
+
|
|
27
|
+
// Red (danger) — vivid red for alerts
|
|
28
|
+
$evo-red-100: #fee2e2;
|
|
29
|
+
$evo-red-200: #fecaca;
|
|
30
|
+
$evo-red-300: #fca5a5;
|
|
31
|
+
$evo-red-400: #f87171;
|
|
32
|
+
$evo-red-500: #ef4444;
|
|
33
|
+
$evo-red-600: #dc2626;
|
|
34
|
+
$evo-red-700: #b91c1c;
|
|
35
|
+
$evo-red-800: #991b1b;
|
|
36
|
+
$evo-red-900: #7f1d1d;
|
|
37
|
+
|
|
38
|
+
// Yellow (warning) — warm golden yellow
|
|
39
|
+
$evo-yellow-100: #fef9c3;
|
|
40
|
+
$evo-yellow-200: #fef08a;
|
|
41
|
+
$evo-yellow-300: #fde047;
|
|
42
|
+
$evo-yellow-400: #facc15;
|
|
43
|
+
$evo-yellow-500: #eab308;
|
|
44
|
+
$evo-yellow-600: #ca8a04;
|
|
45
|
+
$evo-yellow-700: #a16207;
|
|
46
|
+
$evo-yellow-800: #854d0e;
|
|
47
|
+
$evo-yellow-900: #713f12;
|
|
48
|
+
|
|
49
|
+
// Green (success) — fresh vibrant green
|
|
50
|
+
$evo-green-100: #dcfce7;
|
|
51
|
+
$evo-green-200: #bbf7d0;
|
|
52
|
+
$evo-green-300: #86efac;
|
|
53
|
+
$evo-green-400: #4ade80;
|
|
54
|
+
$evo-green-500: #22c55e;
|
|
55
|
+
$evo-green-600: #16a34a;
|
|
56
|
+
$evo-green-700: #15803d;
|
|
57
|
+
$evo-green-800: #166534;
|
|
58
|
+
$evo-green-900: #14532d;
|
|
59
|
+
|
|
60
|
+
// Purple (info/accent) — rich purple for special elements
|
|
61
|
+
$evo-purple-100: #f3e8ff;
|
|
62
|
+
$evo-purple-200: #e9d5ff;
|
|
63
|
+
$evo-purple-300: #d8b4fe;
|
|
64
|
+
$evo-purple-400: #c084fc;
|
|
65
|
+
$evo-purple-500: #a855f7;
|
|
66
|
+
$evo-purple-600: #9333ea;
|
|
67
|
+
$evo-purple-700: #7e22ce;
|
|
68
|
+
$evo-purple-800: #6b21a8;
|
|
69
|
+
$evo-purple-900: #581c87;
|
|
70
|
+
|
|
71
|
+
// Mono White (Smoke) — refined neutral foundations
|
|
72
|
+
$evo-white-100: #ffffff; // Pure White
|
|
73
|
+
$evo-white-200: #fafafa; // Off White
|
|
74
|
+
$evo-white-300: #f5f5f5; // Snow
|
|
75
|
+
$evo-white-400: #ebebeb; // Pearl
|
|
76
|
+
$evo-white-500: #e0e0e0; // Silver Mist
|
|
77
|
+
$evo-white-600: #c7c7c7; // Platinum
|
|
78
|
+
$evo-white-700: #a1a1a1; // Cool Gray
|
|
79
|
+
$evo-white-800: #7a7a7a; // Stone
|
|
80
|
+
$evo-white-900: #5c5c5c; // Graphite
|
|
81
|
+
|
|
82
|
+
// Mono Black (Midnight) — deep contrast blacks
|
|
83
|
+
$evo-black-100: #52525b; // Zinc
|
|
84
|
+
$evo-black-200: #3f3f46; // Charcoal
|
|
85
|
+
$evo-black-300: #27272a; // Onyx
|
|
86
|
+
$evo-black-400: #1c1c1e; // Jet
|
|
87
|
+
$evo-black-500: #18181b; // Rich Black
|
|
88
|
+
$evo-black-600: #121214; // Dark Matter
|
|
89
|
+
$evo-black-700: #0c0c0e; // Void
|
|
90
|
+
$evo-black-800: #060608; // Abyss
|
|
91
|
+
$evo-black-900: #000000; // True Black
|
|
92
|
+
|
|
93
|
+
// Cyan (Primary) — Electric, futuristic blue-cyan
|
|
94
|
+
$evo-cyan-100: #ecfeff;
|
|
95
|
+
$evo-cyan-200: #cffafe;
|
|
96
|
+
$evo-cyan-300: #a5f3fc;
|
|
97
|
+
$evo-cyan-400: #22d3ee;
|
|
98
|
+
$evo-cyan-500: #06b6d4;
|
|
99
|
+
$evo-cyan-600: #0891b2;
|
|
100
|
+
$evo-cyan-700: #0e7490;
|
|
101
|
+
$evo-cyan-800: #155e75;
|
|
102
|
+
$evo-cyan-900: #164e63;
|
|
103
|
+
|
|
104
|
+
// Rose (Legendary) — Warm, powerful pink-red
|
|
105
|
+
$evo-rose-100: #fff1f2;
|
|
106
|
+
$evo-rose-200: #fecdd3;
|
|
107
|
+
$evo-rose-300: #fda4af;
|
|
108
|
+
$evo-rose-400: #fb7185;
|
|
109
|
+
$evo-rose-500: #f43f5e;
|
|
110
|
+
$evo-rose-600: #e11d48;
|
|
111
|
+
$evo-rose-700: #be123c;
|
|
112
|
+
$evo-rose-800: #9f1239;
|
|
113
|
+
$evo-rose-900: #881337;
|
|
114
|
+
|
|
115
|
+
// Emerald (Rare) — Rich, deep green
|
|
116
|
+
$evo-emerald-100: #d1fae5;
|
|
117
|
+
$evo-emerald-200: #a7f3d0;
|
|
118
|
+
$evo-emerald-300: #6ee7b7;
|
|
119
|
+
$evo-emerald-400: #34d399;
|
|
120
|
+
$evo-emerald-500: #10b981;
|
|
121
|
+
$evo-emerald-600: #059669;
|
|
122
|
+
$evo-emerald-700: #047857;
|
|
123
|
+
$evo-emerald-800: #065f46;
|
|
124
|
+
$evo-emerald-900: #064e3b;
|
|
125
|
+
|
|
126
|
+
// Amber (Epic) — Warm gold-orange
|
|
127
|
+
$evo-amber-100: #fef3c7;
|
|
128
|
+
$evo-amber-200: #fde68a;
|
|
129
|
+
$evo-amber-300: #fcd34d;
|
|
130
|
+
$evo-amber-400: #fbbf24;
|
|
131
|
+
$evo-amber-500: #f59e0b;
|
|
132
|
+
$evo-amber-600: #d97706;
|
|
133
|
+
$evo-amber-700: #b45309;
|
|
134
|
+
$evo-amber-800: #92400e;
|
|
135
|
+
$evo-amber-900: #78350f;
|
|
136
|
+
|
|
137
|
+
// Violet (Mythic) — Deep, mystical purple
|
|
138
|
+
$evo-violet-100: #ede9fe;
|
|
139
|
+
$evo-violet-200: #ddd6fe;
|
|
140
|
+
$evo-violet-300: #c4b5fd;
|
|
141
|
+
$evo-violet-400: #a78bfa;
|
|
142
|
+
$evo-violet-500: #8b5cf6;
|
|
143
|
+
$evo-violet-600: #7c3aed;
|
|
144
|
+
$evo-violet-700: #6d28d9;
|
|
145
|
+
$evo-violet-800: #5b21b6;
|
|
146
|
+
$evo-violet-900: #4c1d95;
|
|
147
|
+
|
|
148
|
+
// Slate (Neutral) — Modern cool grays
|
|
149
|
+
$evo-slate-50: #f8fafc;
|
|
150
|
+
$evo-slate-100: #f1f5f9;
|
|
151
|
+
$evo-slate-200: #e2e8f0;
|
|
152
|
+
$evo-slate-300: #cbd5e1;
|
|
153
|
+
$evo-slate-400: #94a3b8;
|
|
154
|
+
$evo-slate-500: #64748b;
|
|
155
|
+
$evo-slate-600: #475569;
|
|
156
|
+
$evo-slate-700: #334155;
|
|
157
|
+
$evo-slate-800: #1e293b;
|
|
158
|
+
$evo-slate-900: #0f172a;
|
|
159
|
+
$evo-slate-950: #020617;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
// ==========================================================
|
|
2
|
+
// EVO-UI THEME TOKENS
|
|
3
|
+
// ----------------------------------------------------------
|
|
4
|
+
// Semantic CSS custom properties for light & dark themes.
|
|
5
|
+
//
|
|
6
|
+
// Theme is controlled by a `data-theme` attribute on <html>:
|
|
7
|
+
// <html data-theme="light"> → light tokens
|
|
8
|
+
// <html data-theme="dark"> → dark tokens
|
|
9
|
+
// (no attribute) → follows OS via prefers-color-scheme
|
|
10
|
+
//
|
|
11
|
+
// Developers can override any token at any scope:
|
|
12
|
+
// :root { --evo-color-primary: #ff6b6b; }
|
|
13
|
+
//
|
|
14
|
+
// All themed component styles read these tokens, never raw
|
|
15
|
+
// palette colors, so a single attribute flip re-themes the
|
|
16
|
+
// entire UI without re-rendering React or reloading CSS.
|
|
17
|
+
// ==========================================================
|
|
18
|
+
|
|
19
|
+
@use './color' as *;
|
|
20
|
+
|
|
21
|
+
// ---------- Light theme tokens ----------
|
|
22
|
+
@mixin evo-theme-light {
|
|
23
|
+
// Surfaces
|
|
24
|
+
--evo-color-bg: #{$evo-white-100};
|
|
25
|
+
--evo-color-bg-rgb: 255, 255, 255;
|
|
26
|
+
--evo-color-surface: #{$evo-slate-50};
|
|
27
|
+
--evo-color-surface-elevated: #{$evo-white-100};
|
|
28
|
+
--evo-color-surface-sunken: #{$evo-slate-100};
|
|
29
|
+
--evo-color-surface-hover: #{$evo-slate-100};
|
|
30
|
+
--evo-color-surface-active: #{$evo-slate-200};
|
|
31
|
+
|
|
32
|
+
// Borders
|
|
33
|
+
--evo-color-border: #{$evo-slate-200};
|
|
34
|
+
--evo-color-border-strong: #{$evo-slate-300};
|
|
35
|
+
--evo-color-border-subtle: #{$evo-slate-100};
|
|
36
|
+
|
|
37
|
+
// Text
|
|
38
|
+
--evo-color-text: #{$evo-slate-900};
|
|
39
|
+
--evo-color-text-secondary: #{$evo-slate-600};
|
|
40
|
+
--evo-color-text-muted: #{$evo-slate-500};
|
|
41
|
+
--evo-color-text-inverted: #{$evo-white-100};
|
|
42
|
+
|
|
43
|
+
// Brand (primary)
|
|
44
|
+
--evo-color-primary: #{$evo-cyan-600};
|
|
45
|
+
--evo-color-primary-rgb: 8, 145, 178;
|
|
46
|
+
--evo-color-primary-hover: #{$evo-cyan-700};
|
|
47
|
+
--evo-color-primary-active: #{$evo-cyan-800};
|
|
48
|
+
--evo-color-primary-focus: #{$evo-cyan-400};
|
|
49
|
+
--evo-color-primary-fg: #{$evo-white-100};
|
|
50
|
+
--evo-color-primary-soft: #{$evo-cyan-100};
|
|
51
|
+
--evo-color-primary-soft-hover: #{$evo-cyan-200};
|
|
52
|
+
|
|
53
|
+
// Secondary (neutral chrome)
|
|
54
|
+
--evo-color-secondary: #{$evo-slate-100};
|
|
55
|
+
--evo-color-secondary-hover: #{$evo-slate-200};
|
|
56
|
+
--evo-color-secondary-active: #{$evo-slate-300};
|
|
57
|
+
--evo-color-secondary-fg: #{$evo-slate-800};
|
|
58
|
+
--evo-color-secondary-border: #{$evo-slate-300};
|
|
59
|
+
|
|
60
|
+
// Status — Danger
|
|
61
|
+
--evo-color-danger: #{$evo-rose-600};
|
|
62
|
+
--evo-color-danger-rgb: 225, 29, 72;
|
|
63
|
+
--evo-color-danger-hover: #{$evo-rose-700};
|
|
64
|
+
--evo-color-danger-active: #{$evo-rose-800};
|
|
65
|
+
--evo-color-danger-focus: #{$evo-rose-400};
|
|
66
|
+
--evo-color-danger-fg: #{$evo-white-100};
|
|
67
|
+
--evo-color-danger-soft: #{$evo-rose-100};
|
|
68
|
+
|
|
69
|
+
// Status — Warning
|
|
70
|
+
--evo-color-warning: #{$evo-amber-500};
|
|
71
|
+
--evo-color-warning-rgb: 245, 158, 11;
|
|
72
|
+
--evo-color-warning-hover: #{$evo-amber-600};
|
|
73
|
+
--evo-color-warning-active: #{$evo-amber-700};
|
|
74
|
+
--evo-color-warning-focus: #{$evo-amber-300};
|
|
75
|
+
--evo-color-warning-fg: #{$evo-amber-900};
|
|
76
|
+
--evo-color-warning-soft: #{$evo-amber-100};
|
|
77
|
+
|
|
78
|
+
// Status — Success
|
|
79
|
+
--evo-color-success: #{$evo-emerald-600};
|
|
80
|
+
--evo-color-success-rgb: 5, 150, 105;
|
|
81
|
+
--evo-color-success-hover: #{$evo-emerald-700};
|
|
82
|
+
--evo-color-success-active: #{$evo-emerald-800};
|
|
83
|
+
--evo-color-success-focus: #{$evo-emerald-400};
|
|
84
|
+
--evo-color-success-fg: #{$evo-white-100};
|
|
85
|
+
--evo-color-success-soft: #{$evo-emerald-100};
|
|
86
|
+
|
|
87
|
+
// Status — Info
|
|
88
|
+
--evo-color-info: #{$evo-violet-600};
|
|
89
|
+
--evo-color-info-rgb: 124, 58, 237;
|
|
90
|
+
--evo-color-info-hover: #{$evo-violet-700};
|
|
91
|
+
--evo-color-info-active: #{$evo-violet-800};
|
|
92
|
+
--evo-color-info-focus: #{$evo-violet-400};
|
|
93
|
+
--evo-color-info-fg: #{$evo-white-100};
|
|
94
|
+
--evo-color-info-soft: #{$evo-violet-100};
|
|
95
|
+
|
|
96
|
+
// Overlays & effects
|
|
97
|
+
--evo-color-overlay: rgba(15, 23, 42, 0.45);
|
|
98
|
+
--evo-color-backdrop: rgba(15, 23, 42, 0.6);
|
|
99
|
+
--evo-shadow-color: 0 0 0;
|
|
100
|
+
--evo-shadow-strength: 0.08;
|
|
101
|
+
|
|
102
|
+
// Skeleton / shimmer
|
|
103
|
+
--evo-color-skeleton-base: #{$evo-slate-200};
|
|
104
|
+
--evo-color-skeleton-highlight: #{$evo-slate-100};
|
|
105
|
+
|
|
106
|
+
// Color scheme hint for native UI (scrollbars, form controls)
|
|
107
|
+
color-scheme: light;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
// ---------- Dark theme tokens ----------
|
|
111
|
+
@mixin evo-theme-dark {
|
|
112
|
+
// Surfaces — soft dark grays (not pure black) per 2026 best practice
|
|
113
|
+
--evo-color-bg: #{$evo-slate-950};
|
|
114
|
+
--evo-color-bg-rgb: 2, 6, 23;
|
|
115
|
+
--evo-color-surface: #{$evo-slate-900};
|
|
116
|
+
--evo-color-surface-elevated: #{$evo-slate-800};
|
|
117
|
+
--evo-color-surface-sunken: #{$evo-slate-950};
|
|
118
|
+
--evo-color-surface-hover: #{$evo-slate-800};
|
|
119
|
+
--evo-color-surface-active: #{$evo-slate-700};
|
|
120
|
+
|
|
121
|
+
// Borders
|
|
122
|
+
--evo-color-border: #{$evo-slate-700};
|
|
123
|
+
--evo-color-border-strong: #{$evo-slate-600};
|
|
124
|
+
--evo-color-border-subtle: #{$evo-slate-800};
|
|
125
|
+
|
|
126
|
+
// Text — off-white for less eye strain
|
|
127
|
+
--evo-color-text: #{$evo-slate-50};
|
|
128
|
+
--evo-color-text-secondary: #{$evo-slate-300};
|
|
129
|
+
--evo-color-text-muted: #{$evo-slate-400};
|
|
130
|
+
--evo-color-text-inverted: #{$evo-slate-900};
|
|
131
|
+
|
|
132
|
+
// Brand (primary) — lighter, more luminous in dark mode
|
|
133
|
+
--evo-color-primary: #{$evo-cyan-400};
|
|
134
|
+
--evo-color-primary-rgb: 34, 211, 238;
|
|
135
|
+
--evo-color-primary-hover: #{$evo-cyan-300};
|
|
136
|
+
--evo-color-primary-active: #{$evo-cyan-500};
|
|
137
|
+
--evo-color-primary-focus: #{$evo-cyan-300};
|
|
138
|
+
--evo-color-primary-fg: #{$evo-slate-950};
|
|
139
|
+
--evo-color-primary-soft: rgba(34, 211, 238, 0.12);
|
|
140
|
+
--evo-color-primary-soft-hover: rgba(34, 211, 238, 0.18);
|
|
141
|
+
|
|
142
|
+
// Secondary
|
|
143
|
+
--evo-color-secondary: rgba(255, 255, 255, 0.06);
|
|
144
|
+
--evo-color-secondary-hover: rgba(255, 255, 255, 0.10);
|
|
145
|
+
--evo-color-secondary-active: rgba(255, 255, 255, 0.15);
|
|
146
|
+
--evo-color-secondary-fg: #{$evo-slate-200};
|
|
147
|
+
--evo-color-secondary-border: #{$evo-slate-600};
|
|
148
|
+
|
|
149
|
+
// Status — Danger
|
|
150
|
+
--evo-color-danger: #{$evo-rose-500};
|
|
151
|
+
--evo-color-danger-rgb: 244, 63, 94;
|
|
152
|
+
--evo-color-danger-hover: #{$evo-rose-400};
|
|
153
|
+
--evo-color-danger-active: #{$evo-rose-600};
|
|
154
|
+
--evo-color-danger-focus: #{$evo-rose-300};
|
|
155
|
+
--evo-color-danger-fg: #{$evo-white-100};
|
|
156
|
+
--evo-color-danger-soft: rgba(244, 63, 94, 0.12);
|
|
157
|
+
|
|
158
|
+
// Status — Warning
|
|
159
|
+
--evo-color-warning: #{$evo-amber-400};
|
|
160
|
+
--evo-color-warning-rgb: 251, 191, 36;
|
|
161
|
+
--evo-color-warning-hover: #{$evo-amber-300};
|
|
162
|
+
--evo-color-warning-active: #{$evo-amber-500};
|
|
163
|
+
--evo-color-warning-focus: #{$evo-amber-300};
|
|
164
|
+
--evo-color-warning-fg: #{$evo-slate-950};
|
|
165
|
+
--evo-color-warning-soft: rgba(251, 191, 36, 0.12);
|
|
166
|
+
|
|
167
|
+
// Status — Success
|
|
168
|
+
--evo-color-success: #{$evo-emerald-500};
|
|
169
|
+
--evo-color-success-rgb: 16, 185, 129;
|
|
170
|
+
--evo-color-success-hover: #{$evo-emerald-400};
|
|
171
|
+
--evo-color-success-active: #{$evo-emerald-600};
|
|
172
|
+
--evo-color-success-focus: #{$evo-emerald-300};
|
|
173
|
+
--evo-color-success-fg: #{$evo-white-100};
|
|
174
|
+
--evo-color-success-soft: rgba(16, 185, 129, 0.12);
|
|
175
|
+
|
|
176
|
+
// Status — Info
|
|
177
|
+
--evo-color-info: #{$evo-violet-500};
|
|
178
|
+
--evo-color-info-rgb: 139, 92, 246;
|
|
179
|
+
--evo-color-info-hover: #{$evo-violet-400};
|
|
180
|
+
--evo-color-info-active: #{$evo-violet-600};
|
|
181
|
+
--evo-color-info-focus: #{$evo-violet-300};
|
|
182
|
+
--evo-color-info-fg: #{$evo-white-100};
|
|
183
|
+
--evo-color-info-soft: rgba(139, 92, 246, 0.12);
|
|
184
|
+
|
|
185
|
+
// Overlays & effects
|
|
186
|
+
--evo-color-overlay: rgba(0, 0, 0, 0.65);
|
|
187
|
+
--evo-color-backdrop: rgba(0, 0, 0, 0.75);
|
|
188
|
+
--evo-shadow-color: 0 0 0;
|
|
189
|
+
--evo-shadow-strength: 0.35;
|
|
190
|
+
|
|
191
|
+
// Skeleton / shimmer
|
|
192
|
+
--evo-color-skeleton-base: #{$evo-slate-800};
|
|
193
|
+
--evo-color-skeleton-highlight: #{$evo-slate-700};
|
|
194
|
+
|
|
195
|
+
color-scheme: dark;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// ---------- Apply themes ----------
|
|
199
|
+
// 1. Explicit data-theme attribute wins (developer/user choice)
|
|
200
|
+
:root,
|
|
201
|
+
[data-theme='light'] {
|
|
202
|
+
@include evo-theme-light;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
[data-theme='dark'] {
|
|
206
|
+
@include evo-theme-dark;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// 2. No data-theme attribute → follow OS preference automatically.
|
|
210
|
+
// Only applies when the user/site hasn't set data-theme at all.
|
|
211
|
+
@media (prefers-color-scheme: dark) {
|
|
212
|
+
:root:not([data-theme]) {
|
|
213
|
+
@include evo-theme-dark;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
// ---------- Smooth theme transitions ----------
|
|
218
|
+
// Animate color changes on theme flip — but skip during the
|
|
219
|
+
// initial paint and respect users who request reduced motion.
|
|
220
|
+
:root[data-theme-transition='true'] *,
|
|
221
|
+
:root[data-theme-transition='true'] *::before,
|
|
222
|
+
:root[data-theme-transition='true'] *::after {
|
|
223
|
+
transition: background-color 200ms ease,
|
|
224
|
+
border-color 200ms ease,
|
|
225
|
+
color 200ms ease,
|
|
226
|
+
fill 200ms ease,
|
|
227
|
+
stroke 200ms ease,
|
|
228
|
+
box-shadow 200ms ease !important;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
@media (prefers-reduced-motion: reduce) {
|
|
232
|
+
:root[data-theme-transition='true'] *,
|
|
233
|
+
:root[data-theme-transition='true'] *::before,
|
|
234
|
+
:root[data-theme-transition='true'] *::after {
|
|
235
|
+
transition: none !important;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
@use './color' as *;
|
|
2
|
+
|
|
3
|
+
// ==========================================================
|
|
4
|
+
// EVO-UI SCSS VARIABLES
|
|
5
|
+
// ----------------------------------------------------------
|
|
6
|
+
// Two kinds of variables live in this file:
|
|
7
|
+
//
|
|
8
|
+
// 1. SEMANTIC (theme-aware) — emit `var(--evo-*)` so the
|
|
9
|
+
// same component code resolves to light or dark values
|
|
10
|
+
// based on the current `data-theme`.
|
|
11
|
+
//
|
|
12
|
+
// 2. STATIC (sizes, radii, transitions, typography) — plain
|
|
13
|
+
// SCSS literals. These don't change between themes.
|
|
14
|
+
//
|
|
15
|
+
// To override a theme color, set the CSS variable in your
|
|
16
|
+
// app — never reassign these SCSS variables directly.
|
|
17
|
+
// ==========================================================
|
|
18
|
+
|
|
19
|
+
// ---------- Semantic colors (theme-aware) ----------
|
|
20
|
+
|
|
21
|
+
// Primary
|
|
22
|
+
$evo-primary-color: var(--evo-color-primary);
|
|
23
|
+
$evo-primary-hover: var(--evo-color-primary-hover);
|
|
24
|
+
$evo-primary-active: var(--evo-color-primary-active);
|
|
25
|
+
$evo-primary-focus: var(--evo-color-primary-focus);
|
|
26
|
+
$evo-primary-fg: var(--evo-color-primary-fg);
|
|
27
|
+
$evo-primary-soft: var(--evo-color-primary-soft);
|
|
28
|
+
$evo-primary-rgb: var(--evo-color-primary-rgb);
|
|
29
|
+
|
|
30
|
+
// Secondary
|
|
31
|
+
$evo-secondary-bg: var(--evo-color-secondary);
|
|
32
|
+
$evo-secondary-color: var(--evo-color-secondary);
|
|
33
|
+
$evo-secondary-border: var(--evo-color-secondary-border);
|
|
34
|
+
$evo-secondary-hover: var(--evo-color-secondary-hover);
|
|
35
|
+
$evo-secondary-active: var(--evo-color-secondary-active);
|
|
36
|
+
$evo-secondary-text: var(--evo-color-secondary-fg);
|
|
37
|
+
$evo-secondary-focus: var(--evo-color-secondary-border);
|
|
38
|
+
|
|
39
|
+
// Danger
|
|
40
|
+
$evo-danger-color: var(--evo-color-danger);
|
|
41
|
+
$evo-danger-hover: var(--evo-color-danger-hover);
|
|
42
|
+
$evo-danger-active: var(--evo-color-danger-active);
|
|
43
|
+
$evo-danger-focus: var(--evo-color-danger-focus);
|
|
44
|
+
$evo-danger-fg: var(--evo-color-danger-fg);
|
|
45
|
+
$evo-danger-soft: var(--evo-color-danger-soft);
|
|
46
|
+
$evo-danger-rgb: var(--evo-color-danger-rgb);
|
|
47
|
+
|
|
48
|
+
// Warning
|
|
49
|
+
$evo-warning-color: var(--evo-color-warning);
|
|
50
|
+
$evo-warning-hover: var(--evo-color-warning-hover);
|
|
51
|
+
$evo-warning-active: var(--evo-color-warning-active);
|
|
52
|
+
$evo-warning-focus: var(--evo-color-warning-focus);
|
|
53
|
+
$evo-warning-text: var(--evo-color-warning-fg);
|
|
54
|
+
$evo-warning-soft: var(--evo-color-warning-soft);
|
|
55
|
+
|
|
56
|
+
// Success
|
|
57
|
+
$evo-success-color: var(--evo-color-success);
|
|
58
|
+
$evo-success-hover: var(--evo-color-success-hover);
|
|
59
|
+
$evo-success-active: var(--evo-color-success-active);
|
|
60
|
+
$evo-success-focus: var(--evo-color-success-focus);
|
|
61
|
+
$evo-success-fg: var(--evo-color-success-fg);
|
|
62
|
+
$evo-success-soft: var(--evo-color-success-soft);
|
|
63
|
+
|
|
64
|
+
// Info
|
|
65
|
+
$evo-info-color: var(--evo-color-info);
|
|
66
|
+
$evo-info-hover: var(--evo-color-info-hover);
|
|
67
|
+
$evo-info-active: var(--evo-color-info-active);
|
|
68
|
+
$evo-info-focus: var(--evo-color-info-focus);
|
|
69
|
+
$evo-info-fg: var(--evo-color-info-fg);
|
|
70
|
+
$evo-info-soft: var(--evo-color-info-soft);
|
|
71
|
+
|
|
72
|
+
// Surfaces, borders, text — the semantic foundation
|
|
73
|
+
$color-background: var(--evo-color-bg);
|
|
74
|
+
$color-surface: var(--evo-color-surface);
|
|
75
|
+
$color-surface-elevated: var(--evo-color-surface-elevated);
|
|
76
|
+
$color-surface-sunken: var(--evo-color-surface-sunken);
|
|
77
|
+
$color-surface-hover: var(--evo-color-surface-hover);
|
|
78
|
+
$color-surface-active: var(--evo-color-surface-active);
|
|
79
|
+
$color-border: var(--evo-color-border);
|
|
80
|
+
$color-border-strong: var(--evo-color-border-strong);
|
|
81
|
+
$color-border-subtle: var(--evo-color-border-subtle);
|
|
82
|
+
$color-text-primary: var(--evo-color-text);
|
|
83
|
+
$color-text-secondary: var(--evo-color-text-secondary);
|
|
84
|
+
$color-text-muted: var(--evo-color-text-muted);
|
|
85
|
+
$color-text-inverted: var(--evo-color-text-inverted);
|
|
86
|
+
$color-overlay: var(--evo-color-overlay);
|
|
87
|
+
$color-backdrop: var(--evo-color-backdrop);
|
|
88
|
+
|
|
89
|
+
// Skeleton
|
|
90
|
+
$color-skeleton-base: var(--evo-color-skeleton-base);
|
|
91
|
+
$color-skeleton-highlight: var(--evo-color-skeleton-highlight);
|
|
92
|
+
|
|
93
|
+
// ---------- Card defaults (theme-aware) ----------
|
|
94
|
+
$evo-card-bg: $color-surface-elevated;
|
|
95
|
+
$evo-card-border: $color-border;
|
|
96
|
+
$evo-card-padding: 1rem 0.5rem;
|
|
97
|
+
|
|
98
|
+
// ---------- Static design tokens (theme-independent) ----------
|
|
99
|
+
|
|
100
|
+
// Button sizing
|
|
101
|
+
$evo-btn-padding-y: 0.25rem;
|
|
102
|
+
$evo-btn-padding-x: 0.63rem;
|
|
103
|
+
$evo-btn-padding-y-sm: 0.13rem;
|
|
104
|
+
$evo-btn-padding-x-sm: 0.38rem;
|
|
105
|
+
$evo-btn-padding-y-lg: 0.37rem;
|
|
106
|
+
$evo-btn-padding-x-lg: 0.88rem;
|
|
107
|
+
|
|
108
|
+
$evo-btn-font-size: 0.875rem;
|
|
109
|
+
$evo-btn-font-size-sm: 0.75rem;
|
|
110
|
+
$evo-btn-font-size-lg: 1rem;
|
|
111
|
+
$evo-btn-font-weight: 600;
|
|
112
|
+
$evo-btn-line-height: 1.5;
|
|
113
|
+
|
|
114
|
+
// Card sizing
|
|
115
|
+
$card-width: 280px;
|
|
116
|
+
$card-height: 380px;
|
|
117
|
+
$card-padding: 1.25rem;
|
|
118
|
+
|
|
119
|
+
// Border radius
|
|
120
|
+
$radius-sm: 6px;
|
|
121
|
+
$radius-md: 12px;
|
|
122
|
+
$radius-lg: 16px;
|
|
123
|
+
$radius-xl: 20px;
|
|
124
|
+
$radius-full: 9999px;
|
|
125
|
+
|
|
126
|
+
// Shadows — read `--evo-shadow-color` and `--evo-shadow-strength`
|
|
127
|
+
// so they automatically deepen in dark mode.
|
|
128
|
+
$shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05);
|
|
129
|
+
$shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.10), 0 2px 4px -2px rgba(0, 0, 0, 0.10);
|
|
130
|
+
$shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.10), 0 4px 6px -4px rgba(0, 0, 0, 0.10);
|
|
131
|
+
$shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.10), 0 8px 10px -6px rgba(0, 0, 0, 0.10);
|
|
132
|
+
$shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
|
|
133
|
+
|
|
134
|
+
// Transitions
|
|
135
|
+
$transition-fast: 150ms ease;
|
|
136
|
+
$transition-normal: 250ms ease;
|
|
137
|
+
$transition-slow: 400ms ease;
|
|
138
|
+
$transition-spring: 600ms cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
139
|
+
|
|
140
|
+
// Typography
|
|
141
|
+
$font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
142
|
+
$font-display: 'Cal Sans', 'Inter', sans-serif;
|
|
143
|
+
|
|
144
|
+
$text-xs: 0.75rem;
|
|
145
|
+
$text-sm: 0.875rem;
|
|
146
|
+
$text-base: 1rem;
|
|
147
|
+
$text-lg: 1.125rem;
|
|
148
|
+
$text-xl: 1.25rem;
|
|
149
|
+
$text-2xl: 1.5rem;
|
|
150
|
+
$text-3xl: 1.875rem;
|
|
151
|
+
|
|
152
|
+
// Shape & motion
|
|
153
|
+
$evo-border-radius: 8px;
|
|
154
|
+
$evo-border-radius-sm: 4px;
|
|
155
|
+
$evo-border-radius-lg: 12px;
|
|
156
|
+
$evo-border-radius-pill: 9999px;
|
|
157
|
+
|
|
158
|
+
$evo-btn-transition: 150ms ease;
|
|
159
|
+
$evo-btn-disabled-opacity: 0.5;
|
|
160
|
+
$evo-btn-outline-offset: 2px;
|
|
161
|
+
$evo-btn-outline-width: 2px;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
@use 'base/variables' as *;
|
|
2
|
+
@use 'base/color' as *;
|
|
3
|
+
|
|
4
|
+
.breadcrumb {
|
|
5
|
+
display: flex;
|
|
6
|
+
align-items: center;
|
|
7
|
+
flex-wrap: wrap;
|
|
8
|
+
list-style: none;
|
|
9
|
+
margin: 0;
|
|
10
|
+
padding: 0;
|
|
11
|
+
gap: 0;
|
|
12
|
+
font-family: $font-sans;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.item {
|
|
16
|
+
display: flex;
|
|
17
|
+
align-items: center;
|
|
18
|
+
list-style: none;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.separator {
|
|
22
|
+
display: flex;
|
|
23
|
+
align-items: center;
|
|
24
|
+
color: $color-text-muted;
|
|
25
|
+
font-size: $text-sm;
|
|
26
|
+
padding: 0 0.375rem;
|
|
27
|
+
list-style: none;
|
|
28
|
+
user-select: none;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.link {
|
|
32
|
+
font-size: $text-sm;
|
|
33
|
+
color: $evo-primary-color;
|
|
34
|
+
text-decoration: none;
|
|
35
|
+
transition: color $transition-fast;
|
|
36
|
+
border-radius: $radius-sm;
|
|
37
|
+
|
|
38
|
+
&:hover { color: $evo-primary-hover; text-decoration: underline; }
|
|
39
|
+
&:focus-visible { outline: 2px solid $evo-primary-focus; outline-offset: 2px; }
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.text {
|
|
43
|
+
font-size: $text-sm;
|
|
44
|
+
color: $color-text-secondary;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.current {
|
|
48
|
+
color: $color-text-primary;
|
|
49
|
+
font-weight: 500;
|
|
50
|
+
}
|