solid-ui 3.0.0 → 3.0.1-11be53b

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.
@@ -0,0 +1,254 @@
1
+ # Solid-UI Theme System
2
+
3
+ **Phase 1: Foundation** - CSS Variables & Runtime Theme Switching
4
+
5
+ ## 🎨 Live Demo
6
+
7
+ **[Open Theme Demo](../../docs/theme-demo.html)** - Interactive preview of all 5 themes (no setup required, works offline)
8
+
9
+ This standalone demo file can be:
10
+ - Shared with team members via email or Slack
11
+ - Attached to GitHub issues/PRs for visual review
12
+ - Opened directly in any browser for quick testing
13
+
14
+ ## Overview
15
+
16
+ The Solid-UI theme system provides modern, customizable styling using CSS custom properties (variables). It supports multiple built-in themes and allows runtime theme switching with localStorage persistence.
17
+
18
+ ## Architecture
19
+
20
+ ```
21
+ src/themes/
22
+ ├── foundation/
23
+ │ ├── variables.css # Base CSS custom properties
24
+ │ └── accessibility.css # WCAG 2.1 AA compliance features
25
+ └── presets/
26
+ ├── classic.css # Original solid-ui appearance (default)
27
+ ├── default.css # Modern purple gradient (Solid style)
28
+ ├── wave.css # WhatsApp-style green
29
+ ├── telegram.css # Messenger-style blue
30
+ └── signal.css # Signal-style blue
31
+ ```
32
+
33
+ ## Usage
34
+
35
+ ### Automatic Initialization
36
+
37
+ The theme system auto-initializes on page load and applies the saved theme preference (or "classic" by default):
38
+
39
+ ```javascript
40
+ import { themeLoader } from 'solid-ui'
41
+
42
+ // Theme system initializes automatically
43
+ // Loads foundation CSS + saved theme from localStorage
44
+ ```
45
+
46
+ ### Switching Themes Programmatically
47
+
48
+ ```javascript
49
+ import { themeLoader } from 'solid-ui'
50
+
51
+ // Switch to a theme
52
+ await themeLoader.loadTheme('wave')
53
+
54
+ // Get current theme
55
+ const currentTheme = themeLoader.getCurrentTheme() // 'wave'
56
+
57
+ // Get available themes
58
+ const themes = themeLoader.getAvailableThemes()
59
+ // Returns: [{ name: 'classic', label: 'Classic' }, ...]
60
+ ```
61
+
62
+ ### Listen for Theme Changes
63
+
64
+ ```javascript
65
+ window.addEventListener('solid-ui-theme-change', (event) => {
66
+ console.log('Theme changed to:', event.detail.theme)
67
+ })
68
+ ```
69
+
70
+ ### Using in Components
71
+
72
+ The `style` object now uses CSS variables with fallbacks:
73
+
74
+ ```javascript
75
+ import { style } from 'solid-ui'
76
+
77
+ // Styles automatically adapt to active theme
78
+ const input = document.createElement('input')
79
+ input.style = style.textInputStyle
80
+ // Uses var(--sui-bg-input) from active theme, falls back to #eef
81
+ ```
82
+
83
+ ## Available Themes
84
+
85
+ ### Classic (Default)
86
+ - **Colors**: Original solid-ui palette (#3B5998, #eef, #888)
87
+ - **Style**: Preserves exact original appearance
88
+ - **Use case**: Backward compatibility, no visual changes
89
+
90
+ ### Default (Solid)
91
+ - **Colors**: Modern purple gradient (#667eea, #9f7aea)
92
+ - **Style**: Clean, modern with improved spacing
93
+ - **Use case**: New projects, modern look
94
+
95
+ ### Wave
96
+ - **Colors**: WhatsApp green (#128c7e, #075e54)
97
+ - **Style**: Clean messenger style
98
+ - **Use case**: Familiar, friendly interface
99
+
100
+ ### Telegram
101
+ - **Colors**: Telegram blue (#0088cc, #0078b8)
102
+ - **Style**: Professional messenger
103
+ - **Use case**: Business, clean interface
104
+
105
+ ### Signal
106
+ - **Colors**: Signal blue (#2c6bed, #1851c4)
107
+ - **Style**: Privacy-focused, professional
108
+ - **Use case**: Security-focused apps
109
+
110
+ ## CSS Variables Reference
111
+
112
+ ### Colors
113
+ ```css
114
+ --sui-primary: #805ad5;
115
+ --sui-accent: #9f7aea;
116
+ --sui-bg: #f7f8fc;
117
+ --sui-bg-panel: #ffffff;
118
+ --sui-text: #2d3748;
119
+ --sui-text-secondary: #4a5568;
120
+ --sui-border-color: #e2e8f0;
121
+ ```
122
+
123
+ ### Spacing
124
+ ```css
125
+ --sui-space-xs: 0.25em;
126
+ --sui-space-sm: 0.5em;
127
+ --sui-space-md: 1em;
128
+ --sui-space-lg: 1.5em;
129
+ --sui-space-xl: 2em;
130
+ ```
131
+
132
+ ### Border Radius
133
+ ```css
134
+ --sui-border-radius: 0.5em;
135
+ --sui-border-radius-sm: 0.3em;
136
+ --sui-border-radius-lg: 1em;
137
+ --sui-border-radius-full: 50%;
138
+ ```
139
+
140
+ ### Shadows
141
+ ```css
142
+ --sui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.08);
143
+ --sui-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
144
+ --sui-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.2);
145
+ ```
146
+
147
+ See `foundation/variables.css` for the complete list.
148
+
149
+ ## Creating Custom Themes
150
+
151
+ Create a new CSS file in `presets/`:
152
+
153
+ ```css
154
+ /* src/themes/presets/mytheme.css */
155
+ :root {
156
+ --sui-primary: #your-color;
157
+ --sui-accent: #your-accent;
158
+ /* Override other variables as needed */
159
+ }
160
+ ```
161
+
162
+ Register the theme:
163
+
164
+ ```javascript
165
+ import { themeLoader } from 'solid-ui'
166
+
167
+ themeLoader.themes.mytheme = 'themes/presets/mytheme.css'
168
+ await themeLoader.loadTheme('mytheme')
169
+ ```
170
+
171
+ ## Accessibility Features
172
+
173
+ All themes include WCAG 2.1 Level AA compliance features:
174
+
175
+ - **Focus Indicators**: Visible 2px outlines
176
+ - **High Contrast Mode**: Automatic adaptation
177
+ - **Reduced Motion**: Respects user preference
178
+ - **Touch Targets**: Minimum 44x44px
179
+ - **Screen Reader Support**: `.sr-only` utility class
180
+
181
+ See `foundation/accessibility.css` for details.
182
+
183
+ ## Browser Support
184
+
185
+ CSS custom properties are supported in:
186
+ - ✅ Chrome/Edge 49+
187
+ - ✅ Firefox 31+
188
+ - ✅ Safari 9.1+
189
+ - ✅ iOS Safari 9.3+
190
+ - ✅ Android Browser 76+
191
+
192
+ For older browsers, fallback values ensure basic functionality.
193
+
194
+ ## Migration from Inline Styles
195
+
196
+ The style.js file now uses a hybrid approach:
197
+
198
+ **Before (hard-coded)**:
199
+ ```javascript
200
+ background-color: #eef;
201
+ ```
202
+
203
+ **After (with CSS variable + fallback)**:
204
+ ```javascript
205
+ background-color: var(--sui-bg-input, #eef);
206
+ ```
207
+
208
+ This maintains backward compatibility while enabling theming.
209
+
210
+ ## Performance
211
+
212
+ - CSS variables have negligible performance impact
213
+ - Theme files are ~2-4KB each (gzipped)
214
+ - Theme switching is near-instant (<100ms)
215
+ - Foundation CSS loads once and caches
216
+
217
+ ## Troubleshooting
218
+
219
+ ### Theme not loading?
220
+ Check browser console for errors. Verify CSS file paths are correct relative to your build output.
221
+
222
+ ### Styles not updating?
223
+ Hard refresh (Ctrl+Shift+R) to clear cached CSS. Check that CSS variables are defined in your theme file.
224
+
225
+ ### Want to disable auto-init?
226
+ ```javascript
227
+ // In your app's entry point, before solid-ui loads:
228
+ window.SOLID_UI_SKIP_THEME_INIT = true
229
+
230
+ // Then manually init later:
231
+ import { themeLoader } from 'solid-ui'
232
+ await themeLoader.init()
233
+ ```
234
+
235
+ ## Future Enhancements
236
+
237
+ Phase 1 establishes the foundation. Future phases will add:
238
+ - Theme picker widget
239
+ - Component-specific theme overrides
240
+ - Dark mode variants
241
+ - Community theme marketplace
242
+
243
+ ## Contributing
244
+
245
+ When adding new styles:
246
+ 1. Use CSS variables with fallbacks
247
+ 2. Test with all 5 themes
248
+ 3. Verify accessibility (contrast, focus, etc.)
249
+ 4. Update this documentation
250
+
251
+ ---
252
+
253
+ **Status**: Phase 1 Complete ✅
254
+ **Next**: Phase 2 - Component Modernization
@@ -0,0 +1,147 @@
1
+ /**
2
+ * Accessibility Features for Solid-UI
3
+ * WCAG 2.1 Level AA compliance
4
+ */
5
+
6
+ /* ========== Screen Reader Only ========== */
7
+ .sr-only {
8
+ position: absolute;
9
+ width: 1px;
10
+ height: 1px;
11
+ padding: 0;
12
+ margin: -1px;
13
+ overflow: hidden;
14
+ clip: rect(0, 0, 0, 0);
15
+ white-space: nowrap;
16
+ border-width: 0;
17
+ }
18
+
19
+ .sr-only-focusable:focus {
20
+ position: static;
21
+ width: auto;
22
+ height: auto;
23
+ padding: inherit;
24
+ margin: inherit;
25
+ overflow: visible;
26
+ clip: auto;
27
+ white-space: normal;
28
+ }
29
+
30
+ /* ========== Focus Indicators ========== */
31
+ :focus-visible {
32
+ outline: var(--sui-focus-width, 2px) solid var(--sui-focus-color, #667eea);
33
+ outline-offset: var(--sui-focus-offset, 2px);
34
+ }
35
+
36
+ /* Don't hide focus for mouse users who might need it */
37
+ :focus:not(:focus-visible) {
38
+ outline: none;
39
+ }
40
+
41
+ /* ========== Skip Links ========== */
42
+ .skip-link {
43
+ position: absolute;
44
+ top: -40px;
45
+ left: 0;
46
+ background: var(--sui-primary);
47
+ color: white;
48
+ padding: 0.5em 1em;
49
+ text-decoration: none;
50
+ z-index: var(--sui-z-tooltip, 200);
51
+ }
52
+
53
+ .skip-link:focus {
54
+ top: 0;
55
+ }
56
+
57
+ /* ========== High Contrast Mode ========== */
58
+ @media (prefers-contrast: high) {
59
+ :root {
60
+ --sui-border-color: #000;
61
+ --sui-border-color-dark: #000;
62
+ --sui-text: #000;
63
+ --sui-bg-panel: #fff;
64
+ --sui-bg: #fff;
65
+ --sui-focus-color: #000;
66
+ }
67
+
68
+ button,
69
+ input,
70
+ select,
71
+ textarea {
72
+ border: 2px solid currentColor !important;
73
+ }
74
+
75
+ a {
76
+ text-decoration: underline;
77
+ }
78
+ }
79
+
80
+ /* ========== Reduced Motion ========== */
81
+ @media (prefers-reduced-motion: reduce) {
82
+ *,
83
+ *::before,
84
+ *::after {
85
+ animation-duration: 0.01ms !important;
86
+ animation-iteration-count: 1 !important;
87
+ transition-duration: 0.01ms !important;
88
+ scroll-behavior: auto !important;
89
+ }
90
+ }
91
+
92
+ /* ========== Touch Targets ========== */
93
+ /* Mobile/tablet: 44px minimum for touch targets */
94
+ @media (max-width: 1024px) {
95
+ button,
96
+ a,
97
+ input[type="checkbox"],
98
+ input[type="radio"],
99
+ select {
100
+ min-height: var(--sui-touch-target-min, 44px);
101
+ min-width: var(--sui-touch-target-min, 44px);
102
+ }
103
+ }
104
+
105
+ /* Desktop: smaller targets are acceptable with precise mouse control */
106
+ @media (min-width: 1025px) {
107
+ button,
108
+ a,
109
+ select {
110
+ min-height: var(--sui-touch-target-min-desktop, 32px);
111
+ min-width: var(--sui-touch-target-min-desktop, 32px);
112
+ }
113
+
114
+ input[type="checkbox"],
115
+ input[type="radio"] {
116
+ min-height: auto;
117
+ min-width: auto;
118
+ }
119
+ }
120
+
121
+ /* Allow smaller targets when explicitly sized */
122
+ .small-touch-target {
123
+ min-height: auto;
124
+ min-width: auto;
125
+ }
126
+
127
+ /* ========== Heading Styles ========== */
128
+ /* Apply theme colors to headings */
129
+ h1, h2, h3, h4, h5, h6 {
130
+ color: var(--sui-primary, #7C4DFF);
131
+ }
132
+
133
+ /* Override for specific contexts where headings should use text color */
134
+ .use-text-color h1,
135
+ .use-text-color h2,
136
+ .use-text-color h3,
137
+ .use-text-color h4,
138
+ .use-text-color h5,
139
+ .use-text-color h6 {
140
+ color: var(--sui-text, #333);
141
+ }
142
+
143
+ /* ========== Dark Mode Support ========== */
144
+ @media (prefers-color-scheme: dark) {
145
+ /* Dark mode variables can be defined here or in a dark theme preset */
146
+ /* For now, themes will handle dark mode explicitly */
147
+ }
@@ -0,0 +1,163 @@
1
+ /**
2
+ * Base CSS Variables for Solid-UI Theme System
3
+ * Phase 1: Foundation
4
+ *
5
+ * These variables form the foundation of all themes.
6
+ * They provide fallback values and can be overridden by theme presets.
7
+ */
8
+
9
+ :root {
10
+ /* ========== Colors - Primary ========== */
11
+ --sui-primary: #805ad5;
12
+ --sui-primary-dark: #667eea;
13
+ --sui-primary-light: #9f7aea;
14
+ --sui-accent: #9f7aea;
15
+
16
+ /* ========== Colors - Gradients ========== */
17
+ --sui-gradient-start: #667eea;
18
+ --sui-gradient-end: #9f7aea;
19
+ --sui-gradient: linear-gradient(135deg, var(--sui-gradient-start), var(--sui-gradient-end));
20
+
21
+ /* ========== Backgrounds ========== */
22
+ --sui-bg: #f7f8fc;
23
+ --sui-bg-panel: #ffffff;
24
+ --sui-bg-header: #ffffff;
25
+ --sui-bg-input: #eef;
26
+ --sui-bg-hover: #f7f8fc;
27
+ --sui-bg-active: #ede9fe;
28
+ --sui-bg-button: #fff;
29
+ --sui-bg-button-hover: #f7f8fc;
30
+
31
+ /* ========== Text Colors ========== */
32
+ --sui-text: #2d3748;
33
+ --sui-text-secondary: #4a5568;
34
+ --sui-text-muted: #a0aec0;
35
+ --sui-text-link: #3B5998;
36
+ --sui-text-on-primary: #ffffff;
37
+
38
+ /* ========== Borders ========== */
39
+ --sui-border-color: #e2e8f0;
40
+ --sui-border-color-dark: #88c;
41
+ --sui-border-width: 0.05em;
42
+ --sui-border: var(--sui-border-width) solid var(--sui-border-color);
43
+
44
+ /* ========== Border Radius ========== */
45
+ --sui-border-radius: 0.5em;
46
+ --sui-border-radius-sm: 0.2em;
47
+ --sui-border-radius-lg: 1em;
48
+ --sui-border-radius-full: 50%;
49
+
50
+ /* ========== Shadows ========== */
51
+ --sui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.08);
52
+ --sui-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
53
+ --sui-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.2);
54
+ --sui-shadow-colored: 0 4px 20px rgba(102, 126, 234, 0.3);
55
+
56
+ /* ========== Spacing Scale ========== */
57
+ --sui-space-xs: 0.25em;
58
+ --sui-space-sm: 0.5em;
59
+ --sui-space-md: 1em;
60
+ --sui-space-lg: 1.5em;
61
+ --sui-space-xl: 2em;
62
+ --sui-space-2xl: 3em;
63
+
64
+ /* ========== Typography ========== */
65
+ --sui-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
66
+ "Helvetica Neue", Arial, sans-serif;
67
+ --sui-font-family-mono: 'Monaco', 'Courier New', monospace;
68
+
69
+ --sui-font-size-xs: 0.75em;
70
+ --sui-font-size-sm: 0.875em;
71
+ --sui-font-size-base: 1em;
72
+ --sui-font-size-lg: 1.125em;
73
+ --sui-font-size-xl: 1.25em;
74
+ --sui-font-size-2xl: 1.5em;
75
+ --sui-font-size-3xl: 1.875em;
76
+
77
+ --sui-line-height: 1.5;
78
+ --sui-line-height-tight: 1.25;
79
+ --sui-line-height-relaxed: 1.75;
80
+
81
+ /* ========== Forms ========== */
82
+ --sui-form-border-color: #88c;
83
+ --sui-form-group-border: var(--sui-border-width) solid var(--sui-form-border-color);
84
+ --sui-input-padding: var(--sui-space-sm);
85
+ --sui-input-margin: 0.4em;
86
+
87
+ /* ========== Buttons ========== */
88
+ --sui-button-padding: 0.7em;
89
+ --sui-button-padding-sm: 0.5em 1em;
90
+ --sui-button-padding-lg: 1em 4em;
91
+ --sui-button-margin: 0.3em;
92
+
93
+ /* ========== Icon Sizes ========== */
94
+ --sui-icon-size: 1.5em; /* Standard icons and buttons */
95
+ --sui-avatar-size: 2.5em; /* Person/contact avatars */
96
+ --sui-icon-class-size: 3em; /* Class/type icons */
97
+
98
+ /* ========== ACL Groups (preserve current colors) ========== */
99
+ --sui-group-default: #888;
100
+ --sui-group-1: green;
101
+ --sui-group-2: #cc0;
102
+ --sui-group-3: orange;
103
+ --sui-group-5: red;
104
+ --sui-group-9: blue;
105
+ --sui-group-13: purple;
106
+
107
+ /* ========== Status Colors ========== */
108
+ --sui-success: #48bb78;
109
+ --sui-warning: orange;
110
+ --sui-error: red;
111
+ --sui-info: #01c9ea;
112
+
113
+ /* ========== Header ========== */
114
+ --sui-header-gradient: linear-gradient(to right, #7C4DFF 0%, #18A9E6 50%, #01C9EA 100%);
115
+ --sui-header-height: 60px;
116
+ --sui-header-shadow: 0px 1px 4px #000000;
117
+
118
+ /* ========== Transitions ========== */
119
+ --sui-transition-fast: 0.15s ease;
120
+ --sui-transition: 0.2s ease;
121
+ --sui-transition-slow: 0.3s ease;
122
+
123
+ /* ========== Z-Index Scale ========== */
124
+ --sui-z-dropdown: 1;
125
+ --sui-z-modal: 100;
126
+ --sui-z-tooltip: 200;
127
+
128
+ /* ========== Accessibility ========== */
129
+ --sui-focus-color: #667eea;
130
+ --sui-focus-width: 2px;
131
+ --sui-focus-offset: 2px;
132
+ --sui-touch-target-min: 44px;
133
+ }
134
+
135
+ /* ========== Responsive Adjustments ========== */
136
+ /* Mobile: Smaller base font and tighter spacing */
137
+ @media (max-width: 768px) {
138
+ :root {
139
+ --sui-font-size-base: 0.9em;
140
+ --sui-font-size-sm: 0.8em;
141
+ --sui-font-size-xs: 0.7em;
142
+ --sui-space-md: 0.8em;
143
+ --sui-space-lg: 1.2em;
144
+ --sui-space-xl: 1.6em;
145
+ --sui-space-2xl: 2.4em;
146
+ }
147
+ }
148
+
149
+ /* Tablet: Slightly smaller than desktop */
150
+ @media (min-width: 769px) and (max-width: 1024px) {
151
+ :root {
152
+ --sui-font-size-base: 0.95em;
153
+ --sui-space-md: 0.9em;
154
+ --sui-space-lg: 1.35em;
155
+ }
156
+ }
157
+
158
+ /* Desktop: Use default values (already defined above) */
159
+ @media (min-width: 1025px) {
160
+ :root {
161
+ /* Desktop uses the base values defined above */
162
+ }
163
+ }
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Classic Theme - Preserves Original solid-ui Appearance
3
+ *
4
+ * This theme maintains backward compatibility by using the exact
5
+ * colors and styling from the original solid-ui implementation.
6
+ * Use this as the default to ensure no visual changes during migration.
7
+ */
8
+
9
+ :root {
10
+ /* ========== Primary Colors (Original) ========== */
11
+ --sui-primary: #3B5998;
12
+ --sui-primary-dark: #2d4373;
13
+ --sui-primary-light: #7C4DFF;
14
+ --sui-accent: #01c9ea;
15
+
16
+ /* ========== Gradients (Original) ========== */
17
+ --sui-gradient-start: #7C4DFF;
18
+ --sui-gradient-end: #01c9ea;
19
+ --sui-gradient: linear-gradient(to right, #7C4DFF 0%, #18A9E6 50%, #01C9EA 100%);
20
+
21
+ /* ========== Backgrounds (Original) ========== */
22
+ --sui-bg: #ffffff;
23
+ --sui-bg-panel: #ffffff;
24
+ --sui-bg-header: #eef;
25
+ --sui-bg-input: #eef;
26
+ --sui-bg-hover: #eef;
27
+ --sui-bg-active: #dde;
28
+ --sui-bg-button: #fff;
29
+ --sui-bg-button-hover: #eef;
30
+
31
+ /* ========== Text Colors (Original) ========== */
32
+ --sui-text: #000000;
33
+ --sui-text-secondary: #333333;
34
+ --sui-text-muted: #888888;
35
+ --sui-text-link: #3B5998;
36
+ --sui-text-on-primary: #ffffff;
37
+
38
+ /* ========== Borders (Original) ========== */
39
+ --sui-border-color: #88c;
40
+ --sui-border-color-dark: #888;
41
+ --sui-border-width: 0.05em;
42
+ --sui-border: var(--sui-border-width) solid var(--sui-border-color);
43
+
44
+ /* ========== Border Radius (Original) ========== */
45
+ --sui-border-radius: 0.2em;
46
+ --sui-border-radius-sm: 0.2em;
47
+ --sui-border-radius-lg: 1em;
48
+ --sui-border-radius-full: 50%;
49
+
50
+ /* ========== Shadows (Original - minimal) ========== */
51
+ --sui-shadow-sm: 0 1px 2px #888;
52
+ --sui-shadow: 0.5em 0.9em #888;
53
+ --sui-shadow-lg: 0.7em 1.1em #888;
54
+ --sui-shadow-colored: 0.5em 0.9em #888;
55
+
56
+ /* ========== Forms (Original) ========== */
57
+ --sui-form-border-color: #88c;
58
+ --sui-form-group-border: var(--sui-border-width) solid var(--sui-form-border-color);
59
+
60
+ /* ========== Status Colors (Original) ========== */
61
+ --sui-success: green;
62
+ --sui-warning: orange;
63
+ --sui-error: red;
64
+ --sui-info: #01c9ea;
65
+
66
+ /* ========== Header (Original) ========== */
67
+ --sui-header-gradient: linear-gradient(to right, #7C4DFF 0%, #18A9E6 50%, #01C9EA 100%);
68
+
69
+ /* Keep all other variables from foundation/variables.css */
70
+ }
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Default (Solid) Theme - Modern Purple Gradient
3
+ *
4
+ * Inspired by solid-chat's "Solid" theme.
5
+ * Modern, clean design with purple gradient and improved spacing.
6
+ */
7
+
8
+ :root {
9
+ /* ========== Primary Colors ========== */
10
+ --sui-primary: #805ad5;
11
+ --sui-primary-dark: #667eea;
12
+ --sui-primary-light: #9f7aea;
13
+ --sui-accent: #9f7aea;
14
+
15
+ /* ========== Gradients ========== */
16
+ --sui-gradient-start: #667eea;
17
+ --sui-gradient-end: #9f7aea;
18
+ --sui-gradient: linear-gradient(135deg, var(--sui-gradient-start), var(--sui-gradient-end));
19
+
20
+ /* ========== Backgrounds ========== */
21
+ --sui-bg: #f7f8fc;
22
+ --sui-bg-panel: #ffffff;
23
+ --sui-bg-header: #e9d8fd;
24
+ --sui-bg-input: #ffffff;
25
+ --sui-bg-hover: #f7f8fc;
26
+ --sui-bg-active: #ede9fe;
27
+ --sui-bg-button: #ffffff;
28
+ --sui-bg-button-hover: #f7f8fc;
29
+
30
+ /* ========== Text Colors ========== */
31
+ --sui-text: #2d3748;
32
+ --sui-text-secondary: #4a5568;
33
+ --sui-text-muted: #a0aec0;
34
+ --sui-text-link: #805ad5;
35
+ --sui-text-on-primary: #ffffff;
36
+
37
+ /* ========== Borders ========== */
38
+ --sui-border-color: #e2e8f0;
39
+ --sui-border-color-dark: #cbd5e0;
40
+ --sui-border-width: 0.05em;
41
+ --sui-border: var(--sui-border-width) solid var(--sui-border-color);
42
+
43
+ /* ========== Border Radius ========== */
44
+ --sui-border-radius: 0.5em;
45
+ --sui-border-radius-sm: 0.3em;
46
+ --sui-border-radius-lg: 1em;
47
+ --sui-border-radius-full: 50%;
48
+
49
+ /* ========== Shadows ========== */
50
+ --sui-shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.08);
51
+ --sui-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
52
+ --sui-shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.2);
53
+ --sui-shadow-colored: 0 4px 20px rgba(102, 126, 234, 0.3);
54
+
55
+ /* ========== Status Colors ========== */
56
+ --sui-success: #48bb78;
57
+ --sui-warning: #ed8936;
58
+ --sui-error: #f56565;
59
+ --sui-info: #4299e1;
60
+
61
+ /* ========== Header ========== */
62
+ --sui-header-gradient: linear-gradient(135deg, var(--sui-gradient-start), var(--sui-gradient-end));
63
+
64
+ /* All other variables inherit from foundation/variables.css */
65
+ }