appclean 2.0.0 → 2.0.3

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.
Files changed (57) hide show
  1. package/.github/workflows/npm-publish.yml +104 -0
  2. package/DEVELOPMENT.md +84 -0
  3. package/RELEASE_GUIDE.md +257 -0
  4. package/RELEASE_QUICK_START.md +176 -0
  5. package/assets/logo.svg +48 -32
  6. package/dist/index.js +1 -1
  7. package/dist/ui/client/api/client.d.ts.map +1 -1
  8. package/dist/ui/client/api/client.js +5 -1
  9. package/dist/ui/client/api/client.js.map +1 -1
  10. package/dist/ui/client/app.d.ts +1 -1
  11. package/dist/ui/client/app.d.ts.map +1 -1
  12. package/dist/ui/client/app.js +10 -6
  13. package/dist/ui/client/app.js.map +1 -1
  14. package/dist/ui/client/index.html +103 -46
  15. package/dist/ui/client/pages/appSearch.js +12 -1
  16. package/dist/ui/client/pages/appSearch.js.map +1 -1
  17. package/dist/ui/client/pages/dashboard.d.ts.map +1 -1
  18. package/dist/ui/client/pages/dashboard.js +26 -5
  19. package/dist/ui/client/pages/dashboard.js.map +1 -1
  20. package/dist/ui/client/state/appStore.d.ts.map +1 -1
  21. package/dist/ui/client/state/appStore.js +21 -12
  22. package/dist/ui/client/state/appStore.js.map +1 -1
  23. package/dist/ui/client/state/dashboardStore.d.ts.map +1 -1
  24. package/dist/ui/client/state/dashboardStore.js +9 -3
  25. package/dist/ui/client/state/dashboardStore.js.map +1 -1
  26. package/dist/ui/client/styles/animations.css +384 -2
  27. package/dist/ui/client/styles/base.css +347 -73
  28. package/dist/ui/client/styles/components.css +566 -189
  29. package/dist/ui/client/styles/layout.css +618 -1
  30. package/dist/ui/client/styles/responsive.css +388 -0
  31. package/dist/ui/client/styles/variables.css +163 -69
  32. package/dist/ui/guiServer.d.ts +3 -0
  33. package/dist/ui/guiServer.d.ts.map +1 -1
  34. package/dist/ui/guiServer.js +48 -1
  35. package/dist/ui/guiServer.js.map +1 -1
  36. package/dist/utils/upgrade.d.ts +2 -1
  37. package/dist/utils/upgrade.d.ts.map +1 -1
  38. package/dist/utils/upgrade.js +14 -1
  39. package/dist/utils/upgrade.js.map +1 -1
  40. package/package.json +1 -1
  41. package/scripts/publish-npm.sh +64 -0
  42. package/src/index.ts +1 -1
  43. package/src/ui/client/api/client.ts +6 -1
  44. package/src/ui/client/app.ts +15 -11
  45. package/src/ui/client/index.html +103 -46
  46. package/src/ui/client/pages/appSearch.ts +14 -1
  47. package/src/ui/client/pages/dashboard.ts +27 -5
  48. package/src/ui/client/state/appStore.ts +24 -12
  49. package/src/ui/client/state/dashboardStore.ts +13 -3
  50. package/src/ui/client/styles/animations.css +384 -2
  51. package/src/ui/client/styles/base.css +347 -73
  52. package/src/ui/client/styles/components.css +566 -189
  53. package/src/ui/client/styles/layout.css +618 -1
  54. package/src/ui/client/styles/responsive.css +388 -0
  55. package/src/ui/client/styles/variables.css +163 -69
  56. package/src/ui/guiServer.ts +67 -1
  57. package/src/utils/upgrade.ts +18 -1
@@ -0,0 +1,388 @@
1
+ /* ============================================================================
2
+ Responsive Design - Mobile, Tablet, Desktop
3
+ ============================================================================ */
4
+
5
+ /* ============================================================================
6
+ Mobile First (0px - 640px)
7
+ ============================================================================ */
8
+
9
+ @media (max-width: 640px) {
10
+ :root {
11
+ --sidebar-width: 16rem;
12
+ --header-height: 3.5rem;
13
+ }
14
+
15
+ /* Header Adjustments */
16
+ .header-container {
17
+ padding: 0 var(--space-3);
18
+ }
19
+
20
+ .sidebar-toggle {
21
+ display: flex;
22
+ }
23
+
24
+ .logo-text {
25
+ display: none;
26
+ }
27
+
28
+ .header-actions {
29
+ gap: var(--space-2);
30
+ }
31
+
32
+ /* Sidebar Adjustments */
33
+ .sidebar {
34
+ width: 100%;
35
+ max-width: 80%;
36
+ transform: translateX(-100%);
37
+ box-shadow: var(--shadow-lg);
38
+ }
39
+
40
+ .sidebar.open {
41
+ transform: translateX(0);
42
+ }
43
+
44
+ .sidebar-overlay {
45
+ display: block;
46
+ }
47
+
48
+ .sidebar-overlay.active {
49
+ opacity: 1;
50
+ }
51
+
52
+ /* Main Content Adjustments */
53
+ .main-content {
54
+ margin-left: 0;
55
+ width: 100%;
56
+ }
57
+
58
+ .content-wrapper {
59
+ padding: var(--space-4) var(--space-3);
60
+ }
61
+
62
+ /* Typography Adjustments */
63
+ h1 {
64
+ font-size: var(--font-2xl);
65
+ }
66
+
67
+ h2 {
68
+ font-size: var(--font-xl);
69
+ }
70
+
71
+ h3 {
72
+ font-size: var(--font-lg);
73
+ }
74
+
75
+ /* Grid Adjustments */
76
+ .grid-cols-2,
77
+ .grid-cols-3,
78
+ .grid-cols-4 {
79
+ grid-template-columns: repeat(1, minmax(0, 1fr));
80
+ }
81
+
82
+ /* Card Adjustments */
83
+ .card {
84
+ margin-bottom: var(--space-4);
85
+ }
86
+
87
+ /* Modal Adjustments */
88
+ .modal-dialog {
89
+ width: 95%;
90
+ border-radius: var(--radius-xl);
91
+ }
92
+
93
+ /* Notification Adjustments */
94
+ .notifications-container {
95
+ right: var(--space-2);
96
+ left: var(--space-2);
97
+ width: auto;
98
+ }
99
+
100
+ .notification {
101
+ width: 100%;
102
+ }
103
+
104
+ /* Button Adjustments */
105
+ .btn {
106
+ padding: var(--space-3) var(--space-4);
107
+ font-size: var(--font-sm);
108
+ }
109
+
110
+ /* Table Adjustments */
111
+ table {
112
+ font-size: var(--font-sm);
113
+ }
114
+
115
+ th,
116
+ td {
117
+ padding: var(--space-2) var(--space-3);
118
+ }
119
+
120
+ /* Form Adjustments */
121
+ input,
122
+ textarea,
123
+ select {
124
+ font-size: 16px; /* Prevents zoom on iOS */
125
+ }
126
+
127
+ /* Flexbox Adjustments */
128
+ .flex-reverse {
129
+ flex-direction: column-reverse;
130
+ }
131
+
132
+ /* Hide Elements on Mobile */
133
+ .hide-mobile {
134
+ display: none !important;
135
+ }
136
+ }
137
+
138
+ /* ============================================================================
139
+ Small Tablet (641px - 768px)
140
+ ============================================================================ */
141
+
142
+ @media (min-width: 641px) and (max-width: 768px) {
143
+ .grid-cols-3,
144
+ .grid-cols-4 {
145
+ grid-template-columns: repeat(2, minmax(0, 1fr));
146
+ }
147
+
148
+ .sidebar {
149
+ width: var(--sidebar-width);
150
+ transform: translateX(0);
151
+ }
152
+
153
+ .sidebar-toggle {
154
+ display: flex;
155
+ }
156
+
157
+ .logo-text {
158
+ display: none;
159
+ }
160
+
161
+ .main-content {
162
+ margin-left: var(--sidebar-width);
163
+ }
164
+
165
+ .sidebar-overlay {
166
+ display: none;
167
+ }
168
+
169
+ .content-wrapper {
170
+ padding: var(--space-6) var(--space-4);
171
+ }
172
+ }
173
+
174
+ /* ============================================================================
175
+ Tablet & Large Devices (769px - 1024px)
176
+ ============================================================================ */
177
+
178
+ @media (min-width: 769px) and (max-width: 1024px) {
179
+ .grid-cols-4 {
180
+ grid-template-columns: repeat(2, minmax(0, 1fr));
181
+ }
182
+
183
+ .hide-tablet {
184
+ display: none !important;
185
+ }
186
+
187
+ .show-tablet {
188
+ display: block !important;
189
+ }
190
+ }
191
+
192
+ /* ============================================================================
193
+ Desktop & Larger (1025px+)
194
+ ============================================================================ */
195
+
196
+ @media (min-width: 1025px) {
197
+ .hide-desktop {
198
+ display: none !important;
199
+ }
200
+
201
+ .show-desktop {
202
+ display: block !important;
203
+ }
204
+ }
205
+
206
+ /* ============================================================================
207
+ Large Desktop (1536px+)
208
+ ============================================================================ */
209
+
210
+ @media (min-width: 1536px) {
211
+ :root {
212
+ --sidebar-width: 18rem;
213
+ }
214
+
215
+ .max-content-xl {
216
+ max-width: var(--max-width-2xl);
217
+ }
218
+ }
219
+
220
+ /* ============================================================================
221
+ Landscape Orientation
222
+ ============================================================================ */
223
+
224
+ @media (orientation: landscape) {
225
+ body {
226
+ overflow-x: auto;
227
+ }
228
+
229
+ :root {
230
+ --header-height: 3rem;
231
+ }
232
+ }
233
+
234
+ /* ============================================================================
235
+ High DPI / Retina Displays
236
+ ============================================================================ */
237
+
238
+ @media (min-resolution: 2dppx) {
239
+ img {
240
+ image-rendering: -webkit-optimize-contrast;
241
+ }
242
+
243
+ .logo-image {
244
+ image-rendering: -webkit-optimize-contrast;
245
+ }
246
+ }
247
+
248
+ /* ============================================================================
249
+ Touch Devices
250
+ ============================================================================ */
251
+
252
+ @media (hover: none) and (pointer: coarse) {
253
+ button,
254
+ a {
255
+ padding: var(--space-3);
256
+ min-height: 44px;
257
+ }
258
+
259
+ .btn-icon {
260
+ min-height: 44px;
261
+ min-width: 44px;
262
+ }
263
+
264
+ /* Increase touch targets */
265
+ .nav-item {
266
+ padding: var(--space-4);
267
+ }
268
+ }
269
+
270
+ /* ============================================================================
271
+ Print Media
272
+ ============================================================================ */
273
+
274
+ @media print {
275
+ .app-header,
276
+ .sidebar,
277
+ .sidebar-overlay,
278
+ .header-actions,
279
+ .notifications-container,
280
+ .btn,
281
+ button {
282
+ display: none !important;
283
+ }
284
+
285
+ .main-content {
286
+ margin-left: 0;
287
+ }
288
+
289
+ .content-wrapper {
290
+ padding: 0;
291
+ }
292
+
293
+ body {
294
+ background: white;
295
+ }
296
+
297
+ .page-container {
298
+ max-width: 100%;
299
+ }
300
+ }
301
+
302
+ /* ============================================================================
303
+ Reduced Motion
304
+ ============================================================================ */
305
+
306
+ @media (prefers-reduced-motion: reduce) {
307
+ * {
308
+ animation-duration: 0.01ms !important;
309
+ animation-iteration-count: 1 !important;
310
+ transition-duration: 0.01ms !important;
311
+ }
312
+ }
313
+
314
+ /* ============================================================================
315
+ Dark Mode Media Query
316
+ ============================================================================ */
317
+
318
+ @media (prefers-color-scheme: dark) {
319
+ :root {
320
+ --bg-primary: var(--dark-bg-primary);
321
+ --bg-secondary: var(--dark-bg-secondary);
322
+ --text-primary: var(--dark-text-primary);
323
+ --text-secondary: var(--dark-text-secondary);
324
+ }
325
+ }
326
+
327
+ /* ============================================================================
328
+ Light Mode Media Query
329
+ ============================================================================ */
330
+
331
+ @media (prefers-color-scheme: light) {
332
+ :root {
333
+ --bg-primary: var(--color-neutral-0);
334
+ --bg-secondary: var(--color-neutral-50);
335
+ --text-primary: var(--color-neutral-900);
336
+ --text-secondary: var(--color-neutral-600);
337
+ }
338
+ }
339
+
340
+ /* ============================================================================
341
+ iPad & Safari Specific Fixes
342
+ ============================================================================ */
343
+
344
+ @supports (-webkit-touch-callout: none) {
345
+ /* iOS specific adjustments */
346
+ input[type="text"],
347
+ input[type="email"],
348
+ input[type="password"],
349
+ textarea {
350
+ font-size: 16px;
351
+ border-radius: 0;
352
+ }
353
+
354
+ select {
355
+ font-size: 16px;
356
+ }
357
+
358
+ body {
359
+ -webkit-user-select: none;
360
+ -webkit-touch-callout: none;
361
+ }
362
+
363
+ input,
364
+ textarea,
365
+ select {
366
+ -webkit-user-select: text;
367
+ }
368
+
369
+ .sidebar {
370
+ -webkit-overflow-scrolling: touch;
371
+ }
372
+ }
373
+
374
+ /* ============================================================================
375
+ Container Queries (When supported)
376
+ ============================================================================ */
377
+
378
+ @supports (container-type: inline-size) {
379
+ .card-grid {
380
+ container-type: inline-size;
381
+ }
382
+
383
+ @container (max-width: 300px) {
384
+ .card-grid > * {
385
+ grid-template-columns: 1fr;
386
+ }
387
+ }
388
+ }
@@ -1,13 +1,24 @@
1
- /* Design System - CSS Variables */
1
+ /* ============================================================================
2
+ Modern Design System - CSS Variables
3
+ ============================================================================ */
2
4
 
3
5
  :root {
4
- /* Colors - Primary */
5
- --color-primary: #3b82f6;
6
- --color-primary-hover: #2563eb;
7
- --color-primary-light: #dbeafe;
8
- --color-primary-dark: #1e40af;
6
+ /* ========== Color Palette ========== */
9
7
 
10
- /* Colors - Semantic */
8
+ /* Primary Colors - Blues (Modern, Professional) */
9
+ --color-primary: #3b82f6;
10
+ --color-primary-50: #eff6ff;
11
+ --color-primary-100: #dbeafe;
12
+ --color-primary-200: #bfdbfe;
13
+ --color-primary-300: #93c5fd;
14
+ --color-primary-400: #60a5fa;
15
+ --color-primary-500: #3b82f6;
16
+ --color-primary-600: #2563eb;
17
+ --color-primary-700: #1d4ed8;
18
+ --color-primary-800: #1e40af;
19
+ --color-primary-900: #1e3a8a;
20
+
21
+ /* Semantic Colors */
11
22
  --color-success: #10b981;
12
23
  --color-success-light: #d1fae5;
13
24
  --color-warning: #f59e0b;
@@ -17,10 +28,11 @@
17
28
  --color-info: #0ea5e9;
18
29
  --color-info-light: #cffafe;
19
30
 
20
- /* Colors - Neutral */
31
+ /* Neutral Colors - Gray Scale */
21
32
  --color-neutral-0: #ffffff;
22
33
  --color-neutral-50: #f9fafb;
23
34
  --color-neutral-100: #f3f4f6;
35
+ --color-neutral-150: #f0f1f3;
24
36
  --color-neutral-200: #e5e7eb;
25
37
  --color-neutral-300: #d1d5db;
26
38
  --color-neutral-400: #9ca3af;
@@ -30,44 +42,81 @@
30
42
  --color-neutral-800: #1f2937;
31
43
  --color-neutral-900: #111827;
32
44
 
33
- /* Background & Surface */
34
- --bg-primary: var(--color-neutral-0);
35
- --bg-secondary: var(--color-neutral-50);
36
- --bg-hover: var(--color-neutral-100);
37
- --text-primary: var(--color-neutral-900);
38
- --text-secondary: var(--color-neutral-600);
39
- --text-muted: var(--color-neutral-500);
40
- --border-color: var(--color-neutral-200);
41
- --border-color-hover: var(--color-neutral-300);
42
-
43
- /* Dark Mode */
44
- --dark-bg-primary: var(--color-neutral-900);
45
- --dark-bg-secondary: var(--color-neutral-800);
46
- --dark-bg-hover: var(--color-neutral-700);
47
- --dark-text-primary: var(--color-neutral-0);
48
- --dark-text-secondary: var(--color-neutral-300);
49
- --dark-text-muted: var(--color-neutral-400);
50
- --dark-border-color: var(--color-neutral-700);
51
- --dark-border-color-hover: var(--color-neutral-600);
52
-
53
- /* Typography */
54
- --font-family: system-ui, -apple-system, 'Segoe UI', Roboto, 'Helvetica Neue', sans-serif;
45
+ /* ========== Light Mode (Default) ========== */
46
+ --bg-primary: #ffffff;
47
+ --bg-secondary: #f9fafb;
48
+ --bg-tertiary: #f3f4f6;
49
+ --bg-hover: #f3f4f6;
50
+ --bg-active: #eff6ff;
51
+
52
+ --text-primary: #111827;
53
+ --text-secondary: #4b5563;
54
+ --text-tertiary: #6b7280;
55
+ --text-muted: #9ca3af;
56
+ --text-inverse: #ffffff;
57
+
58
+ --border-color: #e5e7eb;
59
+ --border-color-light: #f3f4f6;
60
+ --border-color-hover: #d1d5db;
61
+ --border-color-active: #3b82f6;
62
+
63
+ --shadow-xs: 0 1px 2px 0 rgba(0, 0, 0, 0.04);
64
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
65
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
66
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
67
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
68
+ --shadow-2xl: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
69
+
70
+ /* ========== Dark Mode ========== */
71
+ --dark-bg-primary: #0f172a;
72
+ --dark-bg-secondary: #1e293b;
73
+ --dark-bg-tertiary: #334155;
74
+ --dark-bg-hover: #1e293b;
75
+ --dark-bg-active: #1e40af;
76
+
77
+ --dark-text-primary: #f8fafc;
78
+ --dark-text-secondary: #cbd5e1;
79
+ --dark-text-tertiary: #94a3b8;
80
+ --dark-text-muted: #64748b;
81
+ --dark-text-inverse: #0f172a;
82
+
83
+ --dark-border-color: #334155;
84
+ --dark-border-color-light: #1e293b;
85
+ --dark-border-color-hover: #475569;
86
+ --dark-border-color-active: #3b82f6;
87
+
88
+ --dark-shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.3);
89
+ --dark-shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -1px rgba(0, 0, 0, 0.3);
90
+ --dark-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -2px rgba(0, 0, 0, 0.3);
91
+
92
+ /* ========== Gradients ========== */
93
+ --gradient-primary: linear-gradient(135deg, #3b82f6 0%, #1d4ed8 100%);
94
+ --gradient-success: linear-gradient(135deg, #10b981 0%, #059669 100%);
95
+ --gradient-warning: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);
96
+ --gradient-danger: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
97
+
98
+ /* ========== Typography ========== */
99
+ --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji';
55
100
  --font-family-mono: 'SF Mono', Monaco, 'Cascadia Code', 'Roboto Mono', Consolas, monospace;
56
101
 
57
- /* Font Sizes */
58
- --font-xs: 0.75rem; /* 12px */
59
- --font-sm: 0.875rem; /* 14px */
60
- --font-base: 1rem; /* 16px */
61
- --font-lg: 1.125rem; /* 18px */
62
- --font-xl: 1.25rem; /* 20px */
63
- --font-2xl: 1.5rem; /* 24px */
64
- --font-3xl: 1.875rem; /* 30px */
102
+ /* Font Sizes (Refined Scale) */
103
+ --font-xs: 0.75rem; /* 12px */
104
+ --font-sm: 0.875rem; /* 14px */
105
+ --font-base: 1rem; /* 16px */
106
+ --font-lg: 1.125rem; /* 18px */
107
+ --font-xl: 1.25rem; /* 20px */
108
+ --font-2xl: 1.5rem; /* 24px */
109
+ --font-3xl: 1.875rem; /* 30px */
110
+ --font-4xl: 2.25rem; /* 36px */
111
+ --font-5xl: 3rem; /* 48px */
65
112
 
66
113
  /* Font Weights */
114
+ --fw-light: 300;
67
115
  --fw-regular: 400;
68
116
  --fw-medium: 500;
69
117
  --fw-semibold: 600;
70
118
  --fw-bold: 700;
119
+ --fw-extrabold: 800;
71
120
 
72
121
  /* Line Heights */
73
122
  --lh-tight: 1.25;
@@ -75,66 +124,111 @@
75
124
  --lh-relaxed: 1.625;
76
125
  --lh-loose: 2;
77
126
 
78
- /* Spacing Scale (4px base unit) */
127
+ /* ========== Spacing (4px base unit) ========== */
79
128
  --space-0: 0;
80
- --space-1: 0.25rem; /* 4px */
81
- --space-2: 0.5rem; /* 8px */
82
- --space-3: 0.75rem; /* 12px */
83
- --space-4: 1rem; /* 16px */
84
- --space-6: 1.5rem; /* 24px */
85
- --space-8: 2rem; /* 32px */
86
- --space-12: 3rem; /* 48px */
87
- --space-16: 4rem; /* 64px */
88
-
89
- /* Border Radius */
129
+ --space-1: 0.25rem; /* 4px */
130
+ --space-2: 0.5rem; /* 8px */
131
+ --space-3: 0.75rem; /* 12px */
132
+ --space-4: 1rem; /* 16px */
133
+ --space-5: 1.25rem; /* 20px */
134
+ --space-6: 1.5rem; /* 24px */
135
+ --space-8: 2rem; /* 32px */
136
+ --space-10: 2.5rem; /* 40px */
137
+ --space-12: 3rem; /* 48px */
138
+ --space-16: 4rem; /* 64px */
139
+ --space-20: 5rem; /* 80px */
140
+ --space-24: 6rem; /* 96px */
141
+
142
+ /* ========== Border Radius ========== */
90
143
  --radius-none: 0;
91
- --radius-sm: 0.375rem; /* 6px */
92
- --radius-md: 0.5rem; /* 8px */
93
- --radius-lg: 0.75rem; /* 12px */
94
- --radius-xl: 1rem; /* 16px */
95
- --radius-2xl: 1.5rem; /* 24px */
96
- --radius-full: 9999px; /* Pill-shaped */
97
-
98
- /* Shadows */
99
- --shadow-none: 0 0 0 0 rgba(0, 0, 0, 0);
100
- --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
101
- --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
102
- --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
103
- --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);
104
-
105
- /* Transitions */
106
- --transition-fast: 150ms ease-out;
144
+ --radius-xs: 0.25rem; /* 4px */
145
+ --radius-sm: 0.375rem; /* 6px */
146
+ --radius-md: 0.5rem; /* 8px */
147
+ --radius-lg: 0.75rem; /* 12px */
148
+ --radius-xl: 1rem; /* 16px */
149
+ --radius-2xl: 1.5rem; /* 24px */
150
+ --radius-3xl: 2rem; /* 32px */
151
+ --radius-full: 9999px; /* Pill-shaped */
152
+
153
+ /* ========== Transitions ========== */
154
+ --transition-xs: 100ms ease-out;
155
+ --transition-sm: 150ms ease-out;
107
156
  --transition-normal: 250ms ease-out;
108
157
  --transition-slow: 350ms ease-out;
158
+ --transition-slower: 500ms ease-out;
109
159
 
110
- /* Layout */
160
+ /* ========== Layout Constraints ========== */
161
+ --max-width-xs: 320px;
111
162
  --max-width-sm: 640px;
112
163
  --max-width-md: 768px;
113
164
  --max-width-lg: 1024px;
114
165
  --max-width-xl: 1280px;
115
166
  --max-width-2xl: 1536px;
116
167
 
117
- /* Z-index */
168
+ /* ========== Z-index Scale ========== */
118
169
  --z-hide: -1;
119
170
  --z-auto: auto;
120
171
  --z-base: 0;
121
172
  --z-dropdown: 1000;
122
173
  --z-sticky: 1020;
123
174
  --z-fixed: 1030;
124
- --z-modal-backdrop: 1040;
175
+ --z-modal-overlay: 1040;
125
176
  --z-modal: 1050;
126
177
  --z-popover: 1060;
127
178
  --z-tooltip: 1070;
179
+ --z-notification: 1080;
180
+
181
+ /* ========== Layout Variables ========== */
182
+ --header-height: 3.5rem; /* 56px */
183
+ --sidebar-width: 16rem; /* 256px */
184
+ --sidebar-width-collapsed: 4rem; /* 64px */
185
+
186
+ /* ========== Responsive Breakpoints ========== */
187
+ --breakpoint-xs: 0;
188
+ --breakpoint-sm: 640px;
189
+ --breakpoint-md: 768px;
190
+ --breakpoint-lg: 1024px;
191
+ --breakpoint-xl: 1280px;
192
+ --breakpoint-2xl: 1536px;
128
193
  }
129
194
 
130
- /* Dark mode */
195
+ /* ============================================================================
196
+ Dark Mode Theme
197
+ ============================================================================ */
198
+
131
199
  body.dark-mode {
132
200
  --bg-primary: var(--dark-bg-primary);
133
201
  --bg-secondary: var(--dark-bg-secondary);
202
+ --bg-tertiary: var(--dark-bg-tertiary);
134
203
  --bg-hover: var(--dark-bg-hover);
204
+ --bg-active: var(--dark-bg-active);
205
+
135
206
  --text-primary: var(--dark-text-primary);
136
207
  --text-secondary: var(--dark-text-secondary);
208
+ --text-tertiary: var(--dark-text-tertiary);
137
209
  --text-muted: var(--dark-text-muted);
210
+ --text-inverse: var(--dark-text-inverse);
211
+
138
212
  --border-color: var(--dark-border-color);
213
+ --border-color-light: var(--dark-border-color-light);
139
214
  --border-color-hover: var(--dark-border-color-hover);
215
+ --border-color-active: var(--dark-border-color-active);
216
+
217
+ --shadow-sm: var(--dark-shadow-sm);
218
+ --shadow-md: var(--dark-shadow-md);
219
+ --shadow-lg: var(--dark-shadow-lg);
220
+
221
+ color-scheme: dark;
222
+ }
223
+
224
+ /* ============================================================================
225
+ Print Styles
226
+ ============================================================================ */
227
+
228
+ @media print {
229
+ :root {
230
+ --bg-primary: #ffffff;
231
+ --text-primary: #000000;
232
+ --border-color: #cccccc;
233
+ }
140
234
  }