@loworbitstudio/visor-core 0.3.0

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,769 @@
1
+ /* ============================================
2
+ Visor Design Tokens — Full Bundle
3
+ Generated by @loworbitstudio/visor-core
4
+ DO NOT EDIT — run `npm run build` to regenerate
5
+ ============================================ */
6
+
7
+ /* Import order: primitives → semantic → adaptive */
8
+
9
+ /* ============================================
10
+ Tier 1: Primitives
11
+ ============================================ */
12
+ /* --- Primitive: Colors --- */
13
+ :root {
14
+ --color-neutral-50: #f9fafb;
15
+ --color-neutral-100: #f3f4f6;
16
+ --color-neutral-200: #e5e7eb;
17
+ --color-neutral-300: #d1d5db;
18
+ --color-neutral-400: #9ca3af;
19
+ --color-neutral-500: #6b7280;
20
+ --color-neutral-600: #4b5563;
21
+ --color-neutral-700: #374151;
22
+ --color-neutral-800: #1f2937;
23
+ --color-neutral-900: #111827;
24
+ --color-neutral-950: #030712;
25
+ --color-white: #ffffff;
26
+ --color-black: #000000;
27
+ --color-primary-50: #eff6ff;
28
+ --color-primary-100: #dbeafe;
29
+ --color-primary-200: #bfdbfe;
30
+ --color-primary-300: #93c5fd;
31
+ --color-primary-400: #60a5fa;
32
+ --color-primary-500: #3b82f6;
33
+ --color-primary-600: #2563eb;
34
+ --color-primary-700: #1d4ed8;
35
+ --color-primary-800: #1e40af;
36
+ --color-primary-900: #1e3a8a;
37
+ --color-success-50: #f0fdf4;
38
+ --color-success-100: #dcfce7;
39
+ --color-success-500: #22c55e;
40
+ --color-success-600: #16a34a;
41
+ --color-success-700: #15803d;
42
+ --color-success-900: #14532d;
43
+ --color-warning-50: #fffbeb;
44
+ --color-warning-100: #fef3c7;
45
+ --color-warning-500: #f59e0b;
46
+ --color-warning-600: #d97706;
47
+ --color-warning-700: #b45309;
48
+ --color-warning-900: #78350f;
49
+ --color-error-50: #fef2f2;
50
+ --color-error-100: #fee2e2;
51
+ --color-error-500: #ef4444;
52
+ --color-error-600: #dc2626;
53
+ --color-error-700: #b91c1c;
54
+ --color-error-900: #7f1d1d;
55
+ --color-info-50: #f0f9ff;
56
+ --color-info-100: #e0f2fe;
57
+ --color-info-500: #0ea5e9;
58
+ --color-info-600: #0284c7;
59
+ --color-info-700: #0369a1;
60
+ --color-info-900: #0c4a6e;
61
+ }
62
+
63
+
64
+ /* --- Primitive: Spacing --- */
65
+ :root {
66
+ --spacing-0: 0; /* 0px */
67
+ --spacing-1: 0.25rem; /* 4px */
68
+ --spacing-2: 0.5rem; /* 8px */
69
+ --spacing-3: 0.75rem; /* 12px */
70
+ --spacing-4: 1rem; /* 16px */
71
+ --spacing-5: 1.25rem; /* 20px */
72
+ --spacing-6: 1.5rem; /* 24px */
73
+ --spacing-8: 2rem; /* 32px */
74
+ --spacing-10: 2.5rem; /* 40px */
75
+ --spacing-12: 3rem; /* 48px */
76
+ --spacing-16: 4rem; /* 64px */
77
+ --spacing-20: 5rem; /* 80px */
78
+ --spacing-24: 6rem; /* 96px */
79
+ --spacing-3_5: 0.875rem; /* 14px */
80
+ --spacing-4_5: 1.125rem; /* 18px */
81
+ }
82
+
83
+
84
+ /* --- Primitive: Border Radius --- */
85
+ :root {
86
+ --radius-none: 0;
87
+ --radius-sm: 0.125rem; /* 2px */
88
+ --radius-md: 0.25rem; /* 4px */
89
+ --radius-lg: 0.5rem; /* 8px */
90
+ --radius-xl: 0.75rem; /* 12px */
91
+ --radius-2xl: 1rem; /* 16px */
92
+ --radius-3xl: 1.5rem; /* 24px */
93
+ --radius-full: 9999px;
94
+ }
95
+
96
+
97
+ /* --- Primitive: Border Widths --- */
98
+ :root {
99
+ --border-width-1: 1px;
100
+ --border-width-2: 2px;
101
+ --border-width-3: 3px;
102
+ --border-width-4: 4px;
103
+ }
104
+
105
+
106
+ /* --- Primitive: Font Families --- */
107
+ :root {
108
+ --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
109
+ --font-mono: "SF Mono", "Fira Code", "Fira Mono", "Roboto Mono", monospace;
110
+ }
111
+
112
+
113
+ /* --- Primitive: Font Sizes --- */
114
+ :root {
115
+ --font-size-xs: 0.75rem; /* 12px */
116
+ --font-size-sm: 0.875rem; /* 14px */
117
+ --font-size-base: 1rem; /* 16px */
118
+ --font-size-lg: 1.125rem; /* 18px */
119
+ --font-size-xl: 1.25rem; /* 20px */
120
+ --font-size-2xl: 1.5rem; /* 24px */
121
+ --font-size-3xl: 1.875rem; /* 30px */
122
+ --font-size-4xl: 2.25rem; /* 36px */
123
+ }
124
+
125
+
126
+ /* --- Primitive: Font Weights --- */
127
+ :root {
128
+ --font-weight-normal: 400;
129
+ --font-weight-medium: 500;
130
+ --font-weight-semibold: 600;
131
+ --font-weight-bold: 700;
132
+ }
133
+
134
+
135
+ /* --- Primitive: Line Heights --- */
136
+ :root {
137
+ --line-height-none: 1;
138
+ --line-height-tight: 1.25;
139
+ --line-height-snug: 1.375;
140
+ --line-height-normal: 1.5;
141
+ --line-height-relaxed: 1.625;
142
+ --line-height-loose: 2;
143
+ }
144
+
145
+
146
+ /* --- Primitive: Shadows --- */
147
+ :root {
148
+ --shadow-xs: inset 0 1px 2px 0 rgba(0, 0, 0, 0.06);
149
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
150
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
151
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
152
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
153
+ }
154
+
155
+
156
+ /* --- Primitive: Z-Index --- */
157
+ :root {
158
+ --z-base: 0;
159
+ --z-raised: 1;
160
+ --z-dropdown: 1000;
161
+ --z-sticky: 1100;
162
+ --z-modal: 1300;
163
+ --z-popover: 1400;
164
+ --z-toast: 1500;
165
+ }
166
+
167
+
168
+ /* --- Primitive: Overlay --- */
169
+ :root {
170
+ --overlay-bg: rgba(0, 0, 0, 0.5);
171
+ }
172
+
173
+
174
+ /* --- Primitive: Focus Ring --- */
175
+ :root {
176
+ --focus-ring-width: 2px;
177
+ --focus-ring-offset: 2px;
178
+ }
179
+
180
+
181
+ /* --- Primitive: Motion Durations --- */
182
+ :root {
183
+ --motion-duration-100: 100ms;
184
+ --motion-duration-150: 150ms;
185
+ --motion-duration-200: 200ms;
186
+ --motion-duration-300: 300ms;
187
+ --motion-duration-500: 500ms;
188
+ --motion-duration-800: 800ms;
189
+ }
190
+
191
+
192
+ /* --- Primitive: Motion Easings --- */
193
+ :root {
194
+ --motion-easing-linear: linear;
195
+ --motion-easing-ease-in: cubic-bezier(0.4, 0, 1, 1);
196
+ --motion-easing-ease-out: cubic-bezier(0, 0, 0.2, 1);
197
+ --motion-easing-ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
198
+ --motion-easing-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
199
+ }
200
+
201
+ /* ============================================
202
+ Tier 2: Semantic
203
+ ============================================ */
204
+ /* --- Semantic: Text --- */
205
+ :root {
206
+ --text-primary: var(--color-neutral-900);
207
+ --text-secondary: var(--color-neutral-600);
208
+ --text-tertiary: var(--color-neutral-400);
209
+ --text-disabled: var(--color-neutral-300);
210
+ --text-inverse: var(--color-white);
211
+ --text-inverse-secondary: var(--color-neutral-200);
212
+ --text-link: var(--color-primary-600);
213
+ --text-link-hover: var(--color-primary-700);
214
+ --text-success: var(--color-success-700);
215
+ --text-warning: var(--color-warning-700);
216
+ --text-error: var(--color-error-700);
217
+ --text-info: var(--color-info-700);
218
+ }
219
+
220
+
221
+ /* --- Semantic: Surface --- */
222
+ :root {
223
+ --surface-page: var(--color-white);
224
+ --surface-card: var(--color-white);
225
+ --surface-subtle: var(--color-neutral-50);
226
+ --surface-muted: var(--color-neutral-100);
227
+ --surface-overlay: var(--color-neutral-900);
228
+ --surface-popover: var(--color-white);
229
+ --surface-interactive-default: var(--color-white);
230
+ --surface-interactive-hover: var(--color-neutral-50);
231
+ --surface-interactive-active: var(--color-neutral-100);
232
+ --surface-interactive-disabled: var(--color-neutral-50);
233
+ --surface-accent-subtle: var(--color-primary-50);
234
+ --surface-accent-default: var(--color-primary-500);
235
+ --surface-accent-strong: var(--color-primary-600);
236
+ --surface-success-subtle: var(--color-success-50);
237
+ --surface-success-default: var(--color-success-500);
238
+ --surface-warning-subtle: var(--color-warning-50);
239
+ --surface-warning-default: var(--color-warning-500);
240
+ --surface-error-subtle: var(--color-error-50);
241
+ --surface-error-default: var(--color-error-500);
242
+ --surface-info-subtle: var(--color-info-50);
243
+ --surface-info-default: var(--color-info-500);
244
+ }
245
+
246
+
247
+ /* --- Semantic: Border --- */
248
+ :root {
249
+ --border-default: var(--color-neutral-200);
250
+ --border-muted: var(--color-neutral-100);
251
+ --border-strong: var(--color-neutral-300);
252
+ --border-focus: var(--color-primary-500);
253
+ --border-disabled: var(--color-neutral-100);
254
+ --border-input: var(--color-neutral-200);
255
+ --border-success: var(--color-success-500);
256
+ --border-warning: var(--color-warning-500);
257
+ --border-error: var(--color-error-500);
258
+ --border-info: var(--color-info-500);
259
+ }
260
+
261
+
262
+ /* --- Semantic: Interactive --- */
263
+ :root {
264
+ --interactive-primary-bg: var(--color-primary-600);
265
+ --interactive-primary-bg-hover: var(--color-primary-700);
266
+ --interactive-primary-bg-active: var(--color-primary-800);
267
+ --interactive-primary-text: var(--color-white);
268
+ --interactive-secondary-bg: var(--color-white);
269
+ --interactive-secondary-bg-hover: var(--color-neutral-50);
270
+ --interactive-secondary-bg-active: var(--color-neutral-100);
271
+ --interactive-secondary-text: var(--color-neutral-900);
272
+ --interactive-secondary-border: var(--color-neutral-300);
273
+ --interactive-destructive-bg: var(--color-error-600);
274
+ --interactive-destructive-bg-hover: var(--color-error-700);
275
+ --interactive-destructive-text: var(--color-white);
276
+ --interactive-ghost-bg: var(--color-white);
277
+ --interactive-ghost-bg-hover: var(--color-neutral-100);
278
+ }
279
+
280
+
281
+ /* --- Semantic: Spacing --- */
282
+ :root {
283
+ --component-xs: var(--spacing-1);
284
+ --component-sm: var(--spacing-2);
285
+ --component-md: var(--spacing-4);
286
+ --component-lg: var(--spacing-6);
287
+ --component-xl: var(--spacing-8);
288
+ --layout-sm: var(--spacing-4);
289
+ --layout-md: var(--spacing-8);
290
+ --layout-lg: var(--spacing-12);
291
+ --layout-xl: var(--spacing-16);
292
+ --layout-2xl: var(--spacing-24);
293
+ }
294
+
295
+
296
+ /* --- Semantic: Typography --- */
297
+ :root {
298
+ --font-body: var(--font-sans);
299
+ --font-heading: var(--font-sans);
300
+ --font-mono: var(--font-mono);
301
+ --size-body: var(--font-size-base);
302
+ --size-body-sm: var(--font-size-sm);
303
+ --size-label: var(--font-size-sm);
304
+ --size-caption: var(--font-size-xs);
305
+ --size-heading-sm: var(--font-size-lg);
306
+ --size-heading-md: var(--font-size-xl);
307
+ --size-heading-lg: var(--font-size-2xl);
308
+ --size-heading-xl: var(--font-size-3xl);
309
+ --weight-body: var(--font-weight-normal);
310
+ --weight-label: var(--font-weight-medium);
311
+ --weight-heading: var(--font-weight-semibold);
312
+ --weight-strong: var(--font-weight-bold);
313
+ }
314
+
315
+
316
+ /* --- Semantic: Motion Duration --- */
317
+ :root {
318
+ --motion-duration-fast: var(--motion-duration-100);
319
+ --motion-duration-normal: var(--motion-duration-200);
320
+ --motion-duration-slow: var(--motion-duration-500);
321
+ }
322
+
323
+
324
+ /* --- Semantic: Motion Easing --- */
325
+ :root {
326
+ --motion-easing-default: var(--motion-easing-ease-in-out);
327
+ --motion-easing-enter: var(--motion-easing-ease-out);
328
+ --motion-easing-exit: var(--motion-easing-ease-in);
329
+ --motion-easing-spring: var(--motion-easing-spring);
330
+ }
331
+
332
+
333
+ /* --- Semantic: Overlay --- */
334
+
335
+
336
+ /* --- Semantic: Focus Ring --- */
337
+
338
+
339
+ /* --- Semantic: Skeleton --- */
340
+ :root {
341
+ --skeleton-from: var(--surface-muted);
342
+ --skeleton-to: var(--surface-subtle);
343
+ }
344
+
345
+
346
+ /* --- Semantic: Chart --- */
347
+ :root {
348
+ --chart-1: var(--color-primary-500);
349
+ --chart-2: var(--color-success-500);
350
+ --chart-3: var(--color-warning-500);
351
+ --chart-4: var(--color-info-500);
352
+ --chart-5: var(--color-error-500);
353
+ }
354
+
355
+
356
+ /* --- Semantic: Sidebar --- */
357
+ :root {
358
+ --sidebar-bg: var(--color-neutral-50);
359
+ --sidebar-text: var(--color-neutral-700);
360
+ --sidebar-primary-bg: var(--color-primary-600);
361
+ --sidebar-primary-text: var(--color-white);
362
+ --sidebar-accent-bg: var(--color-neutral-100);
363
+ --sidebar-accent-text: var(--color-neutral-900);
364
+ --sidebar-border: var(--color-neutral-200);
365
+ --sidebar-ring: var(--color-primary-500);
366
+ --sidebar-text-muted: var(--color-neutral-500);
367
+ }
368
+
369
+ /* ============================================
370
+ Tier 3: Adaptive — Light Theme (:root)
371
+ ============================================ */
372
+ /* --- Adaptive: Text (light) --- */
373
+ :root {
374
+ --text-primary: var(--color-neutral-900);
375
+ --text-secondary: var(--color-neutral-600);
376
+ --text-tertiary: var(--color-neutral-400);
377
+ --text-disabled: var(--color-neutral-300);
378
+ --text-inverse: var(--color-white);
379
+ --text-inverse-secondary: var(--color-neutral-200);
380
+ --text-link: var(--color-primary-600);
381
+ --text-link-hover: var(--color-primary-700);
382
+ --text-success: var(--color-success-700);
383
+ --text-warning: var(--color-warning-700);
384
+ --text-error: var(--color-error-700);
385
+ --text-info: var(--color-info-700);
386
+ }
387
+
388
+
389
+ /* --- Adaptive: Surface (light) --- */
390
+ :root {
391
+ --surface-page: var(--color-white);
392
+ --surface-card: var(--color-white);
393
+ --surface-subtle: var(--color-neutral-50);
394
+ --surface-muted: var(--color-neutral-100);
395
+ --surface-overlay: var(--color-neutral-900);
396
+ --surface-popover: var(--color-white);
397
+ --surface-interactive-default: var(--color-white);
398
+ --surface-interactive-hover: var(--color-neutral-50);
399
+ --surface-interactive-active: var(--color-neutral-100);
400
+ --surface-interactive-disabled: var(--color-neutral-50);
401
+ --surface-accent-subtle: var(--color-primary-50);
402
+ --surface-accent-default: var(--color-primary-500);
403
+ --surface-accent-strong: var(--color-primary-600);
404
+ --surface-success-subtle: var(--color-success-50);
405
+ --surface-success-default: var(--color-success-500);
406
+ --surface-warning-subtle: var(--color-warning-50);
407
+ --surface-warning-default: var(--color-warning-500);
408
+ --surface-error-subtle: var(--color-error-50);
409
+ --surface-error-default: var(--color-error-500);
410
+ --surface-info-subtle: var(--color-info-50);
411
+ --surface-info-default: var(--color-info-500);
412
+ }
413
+
414
+
415
+ /* --- Adaptive: Border (light) --- */
416
+ :root {
417
+ --border-default: var(--color-neutral-200);
418
+ --border-muted: var(--color-neutral-100);
419
+ --border-strong: var(--color-neutral-300);
420
+ --border-focus: var(--color-primary-500);
421
+ --border-disabled: var(--color-neutral-100);
422
+ --border-input: var(--color-neutral-200);
423
+ --border-success: var(--color-success-500);
424
+ --border-warning: var(--color-warning-500);
425
+ --border-error: var(--color-error-500);
426
+ --border-info: var(--color-info-500);
427
+ }
428
+
429
+
430
+ /* --- Adaptive: Interactive (light) --- */
431
+ :root {
432
+ --interactive-primary-bg: var(--color-primary-600);
433
+ --interactive-primary-bg-hover: var(--color-primary-700);
434
+ --interactive-primary-bg-active: var(--color-primary-800);
435
+ --interactive-primary-text: var(--color-white);
436
+ --interactive-secondary-bg: var(--color-white);
437
+ --interactive-secondary-bg-hover: var(--color-neutral-50);
438
+ --interactive-secondary-bg-active: var(--color-neutral-100);
439
+ --interactive-secondary-text: var(--color-neutral-900);
440
+ --interactive-secondary-border: var(--color-neutral-300);
441
+ --interactive-destructive-bg: var(--color-error-600);
442
+ --interactive-destructive-bg-hover: var(--color-error-700);
443
+ --interactive-destructive-text: var(--color-white);
444
+ --interactive-ghost-bg: var(--color-white);
445
+ --interactive-ghost-bg-hover: var(--color-neutral-100);
446
+ }
447
+
448
+
449
+ /* --- Adaptive: Skeleton (light) --- */
450
+ :root {
451
+ --skeleton-from: var(--color-neutral-100);
452
+ --skeleton-to: var(--color-neutral-200);
453
+ }
454
+
455
+
456
+ /* --- Adaptive: Shadows (light) --- */
457
+ :root {
458
+ --shadow-xs: inset 0 1px 2px 0 rgba(0, 0, 0, 0.06);
459
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
460
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -2px rgba(0, 0, 0, 0.1);
461
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -4px rgba(0, 0, 0, 0.1);
462
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 8px 10px -6px rgba(0, 0, 0, 0.1);
463
+ }
464
+
465
+
466
+ /* --- Adaptive: Chart (light) --- */
467
+ :root {
468
+ --chart-1: var(--color-primary-500);
469
+ --chart-2: var(--color-success-500);
470
+ --chart-3: var(--color-warning-500);
471
+ --chart-4: var(--color-info-500);
472
+ --chart-5: var(--color-error-500);
473
+ }
474
+
475
+
476
+ /* --- Adaptive: Sidebar (light) --- */
477
+ :root {
478
+ --sidebar-bg: var(--color-neutral-50);
479
+ --sidebar-text: var(--color-neutral-700);
480
+ --sidebar-primary-bg: var(--color-primary-600);
481
+ --sidebar-primary-text: var(--color-white);
482
+ --sidebar-accent-bg: var(--color-neutral-100);
483
+ --sidebar-accent-text: var(--color-neutral-900);
484
+ --sidebar-border: var(--color-neutral-200);
485
+ --sidebar-ring: var(--color-primary-500);
486
+ --sidebar-text-muted: var(--color-neutral-500);
487
+ }
488
+
489
+ /* ============================================
490
+ Tier 3: Adaptive — Dark Theme (.dark, .theme-dark, [data-theme="dark"])
491
+ and @media (prefers-color-scheme: dark)
492
+ ============================================ */
493
+ /* --- Adaptive: Text (dark) — manual toggle --- */
494
+ .dark,
495
+ .theme-dark,
496
+ [data-theme="dark"] {
497
+ --text-primary: var(--color-neutral-50);
498
+ --text-secondary: var(--color-neutral-400);
499
+ --text-tertiary: var(--color-neutral-500);
500
+ --text-disabled: var(--color-neutral-600);
501
+ --text-inverse: var(--color-neutral-900);
502
+ --text-inverse-secondary: var(--color-neutral-700);
503
+ --text-link: var(--color-primary-400);
504
+ --text-link-hover: var(--color-primary-300);
505
+ --text-success: var(--color-success-500);
506
+ --text-warning: var(--color-warning-500);
507
+ --text-error: var(--color-error-500);
508
+ --text-info: var(--color-info-500);
509
+ }
510
+
511
+
512
+ /* --- Adaptive: Surface (dark) — manual toggle --- */
513
+ .dark,
514
+ .theme-dark,
515
+ [data-theme="dark"] {
516
+ --surface-page: var(--color-neutral-950);
517
+ --surface-card: var(--color-neutral-900);
518
+ --surface-subtle: var(--color-neutral-800);
519
+ --surface-muted: var(--color-neutral-700);
520
+ --surface-overlay: var(--color-neutral-950);
521
+ --surface-popover: var(--color-neutral-900);
522
+ --surface-interactive-default: var(--color-neutral-800);
523
+ --surface-interactive-hover: var(--color-neutral-700);
524
+ --surface-interactive-active: var(--color-neutral-600);
525
+ --surface-interactive-disabled: var(--color-neutral-800);
526
+ --surface-accent-subtle: var(--color-primary-900);
527
+ --surface-accent-default: var(--color-primary-500);
528
+ --surface-accent-strong: var(--color-primary-400);
529
+ --surface-success-subtle: var(--color-success-900);
530
+ --surface-success-default: var(--color-success-500);
531
+ --surface-warning-subtle: var(--color-warning-900);
532
+ --surface-warning-default: var(--color-warning-500);
533
+ --surface-error-subtle: var(--color-error-900);
534
+ --surface-error-default: var(--color-error-500);
535
+ --surface-info-subtle: var(--color-info-900);
536
+ --surface-info-default: var(--color-info-500);
537
+ }
538
+
539
+
540
+ /* --- Adaptive: Border (dark) — manual toggle --- */
541
+ .dark,
542
+ .theme-dark,
543
+ [data-theme="dark"] {
544
+ --border-default: var(--color-neutral-700);
545
+ --border-muted: var(--color-neutral-800);
546
+ --border-strong: var(--color-neutral-600);
547
+ --border-focus: var(--color-primary-400);
548
+ --border-disabled: var(--color-neutral-800);
549
+ --border-input: var(--color-neutral-700);
550
+ --border-success: var(--color-success-500);
551
+ --border-warning: var(--color-warning-500);
552
+ --border-error: var(--color-error-500);
553
+ --border-info: var(--color-info-500);
554
+ }
555
+
556
+
557
+ /* --- Adaptive: Interactive (dark) — manual toggle --- */
558
+ .dark,
559
+ .theme-dark,
560
+ [data-theme="dark"] {
561
+ --interactive-primary-bg: var(--color-primary-500);
562
+ --interactive-primary-bg-hover: var(--color-primary-400);
563
+ --interactive-primary-bg-active: var(--color-primary-300);
564
+ --interactive-primary-text: var(--color-white);
565
+ --interactive-secondary-bg: var(--color-neutral-800);
566
+ --interactive-secondary-bg-hover: var(--color-neutral-700);
567
+ --interactive-secondary-bg-active: var(--color-neutral-600);
568
+ --interactive-secondary-text: var(--color-neutral-50);
569
+ --interactive-secondary-border: var(--color-neutral-600);
570
+ --interactive-destructive-bg: var(--color-error-500);
571
+ --interactive-destructive-bg-hover: var(--color-error-600);
572
+ --interactive-destructive-text: var(--color-white);
573
+ --interactive-ghost-bg: var(--color-neutral-800);
574
+ --interactive-ghost-bg-hover: var(--color-neutral-700);
575
+ }
576
+
577
+
578
+ /* --- Adaptive: Skeleton (dark) — manual toggle --- */
579
+ .dark,
580
+ .theme-dark,
581
+ [data-theme="dark"] {
582
+ --skeleton-from: var(--color-neutral-800);
583
+ --skeleton-to: var(--color-neutral-700);
584
+ }
585
+
586
+
587
+ /* --- Adaptive: Shadows (dark) — manual toggle --- */
588
+ .dark,
589
+ .theme-dark,
590
+ [data-theme="dark"] {
591
+ --shadow-xs: inset 0 1px 2px 0 rgba(0, 0, 0, 0.15);
592
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.25);
593
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.35), 0 2px 4px -2px rgba(0, 0, 0, 0.3);
594
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -4px rgba(0, 0, 0, 0.35);
595
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.45), 0 8px 10px -6px rgba(0, 0, 0, 0.4);
596
+ }
597
+
598
+
599
+ /* --- Adaptive: Chart (dark) — manual toggle --- */
600
+ .dark,
601
+ .theme-dark,
602
+ [data-theme="dark"] {
603
+ --chart-1: var(--color-primary-400);
604
+ --chart-2: var(--color-success-500);
605
+ --chart-3: var(--color-warning-500);
606
+ --chart-4: var(--color-info-500);
607
+ --chart-5: var(--color-error-500);
608
+ }
609
+
610
+
611
+ /* --- Adaptive: Sidebar (dark) — manual toggle --- */
612
+ .dark,
613
+ .theme-dark,
614
+ [data-theme="dark"] {
615
+ --sidebar-bg: var(--color-neutral-900);
616
+ --sidebar-text: var(--color-neutral-300);
617
+ --sidebar-primary-bg: var(--color-primary-500);
618
+ --sidebar-primary-text: var(--color-white);
619
+ --sidebar-accent-bg: var(--color-neutral-800);
620
+ --sidebar-accent-text: var(--color-neutral-50);
621
+ --sidebar-border: var(--color-neutral-700);
622
+ --sidebar-ring: var(--color-primary-400);
623
+ --sidebar-text-muted: var(--color-neutral-400);
624
+ }
625
+
626
+
627
+ /* --- Adaptive: Text (dark) — prefers-color-scheme --- */
628
+ @media (prefers-color-scheme: dark) {
629
+ :root:not(.light):not(.theme-light):not([data-theme="light"]) {
630
+ --text-primary: var(--color-neutral-50);
631
+ --text-secondary: var(--color-neutral-400);
632
+ --text-tertiary: var(--color-neutral-500);
633
+ --text-disabled: var(--color-neutral-600);
634
+ --text-inverse: var(--color-neutral-900);
635
+ --text-inverse-secondary: var(--color-neutral-700);
636
+ --text-link: var(--color-primary-400);
637
+ --text-link-hover: var(--color-primary-300);
638
+ --text-success: var(--color-success-500);
639
+ --text-warning: var(--color-warning-500);
640
+ --text-error: var(--color-error-500);
641
+ --text-info: var(--color-info-500);
642
+ }
643
+ }
644
+
645
+
646
+ /* --- Adaptive: Surface (dark) — prefers-color-scheme --- */
647
+ @media (prefers-color-scheme: dark) {
648
+ :root:not(.light):not(.theme-light):not([data-theme="light"]) {
649
+ --surface-page: var(--color-neutral-950);
650
+ --surface-card: var(--color-neutral-900);
651
+ --surface-subtle: var(--color-neutral-800);
652
+ --surface-muted: var(--color-neutral-700);
653
+ --surface-overlay: var(--color-neutral-950);
654
+ --surface-popover: var(--color-neutral-900);
655
+ --surface-interactive-default: var(--color-neutral-800);
656
+ --surface-interactive-hover: var(--color-neutral-700);
657
+ --surface-interactive-active: var(--color-neutral-600);
658
+ --surface-interactive-disabled: var(--color-neutral-800);
659
+ --surface-accent-subtle: var(--color-primary-900);
660
+ --surface-accent-default: var(--color-primary-500);
661
+ --surface-accent-strong: var(--color-primary-400);
662
+ --surface-success-subtle: var(--color-success-900);
663
+ --surface-success-default: var(--color-success-500);
664
+ --surface-warning-subtle: var(--color-warning-900);
665
+ --surface-warning-default: var(--color-warning-500);
666
+ --surface-error-subtle: var(--color-error-900);
667
+ --surface-error-default: var(--color-error-500);
668
+ --surface-info-subtle: var(--color-info-900);
669
+ --surface-info-default: var(--color-info-500);
670
+ }
671
+ }
672
+
673
+
674
+ /* --- Adaptive: Border (dark) — prefers-color-scheme --- */
675
+ @media (prefers-color-scheme: dark) {
676
+ :root:not(.light):not(.theme-light):not([data-theme="light"]) {
677
+ --border-default: var(--color-neutral-700);
678
+ --border-muted: var(--color-neutral-800);
679
+ --border-strong: var(--color-neutral-600);
680
+ --border-focus: var(--color-primary-400);
681
+ --border-disabled: var(--color-neutral-800);
682
+ --border-input: var(--color-neutral-700);
683
+ --border-success: var(--color-success-500);
684
+ --border-warning: var(--color-warning-500);
685
+ --border-error: var(--color-error-500);
686
+ --border-info: var(--color-info-500);
687
+ }
688
+ }
689
+
690
+
691
+ /* --- Adaptive: Interactive (dark) — prefers-color-scheme --- */
692
+ @media (prefers-color-scheme: dark) {
693
+ :root:not(.light):not(.theme-light):not([data-theme="light"]) {
694
+ --interactive-primary-bg: var(--color-primary-500);
695
+ --interactive-primary-bg-hover: var(--color-primary-400);
696
+ --interactive-primary-bg-active: var(--color-primary-300);
697
+ --interactive-primary-text: var(--color-white);
698
+ --interactive-secondary-bg: var(--color-neutral-800);
699
+ --interactive-secondary-bg-hover: var(--color-neutral-700);
700
+ --interactive-secondary-bg-active: var(--color-neutral-600);
701
+ --interactive-secondary-text: var(--color-neutral-50);
702
+ --interactive-secondary-border: var(--color-neutral-600);
703
+ --interactive-destructive-bg: var(--color-error-500);
704
+ --interactive-destructive-bg-hover: var(--color-error-600);
705
+ --interactive-destructive-text: var(--color-white);
706
+ --interactive-ghost-bg: var(--color-neutral-800);
707
+ --interactive-ghost-bg-hover: var(--color-neutral-700);
708
+ }
709
+ }
710
+
711
+
712
+ /* --- Adaptive: Skeleton (dark) — prefers-color-scheme --- */
713
+ @media (prefers-color-scheme: dark) {
714
+ :root:not(.light):not(.theme-light):not([data-theme="light"]) {
715
+ --skeleton-from: var(--color-neutral-800);
716
+ --skeleton-to: var(--color-neutral-700);
717
+ }
718
+ }
719
+
720
+
721
+ /* --- Adaptive: Shadows (dark) — prefers-color-scheme --- */
722
+ @media (prefers-color-scheme: dark) {
723
+ :root:not(.light):not(.theme-light):not([data-theme="light"]) {
724
+ --shadow-xs: inset 0 1px 2px 0 rgba(0, 0, 0, 0.15);
725
+ --shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, 0.25);
726
+ --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.35), 0 2px 4px -2px rgba(0, 0, 0, 0.3);
727
+ --shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.4), 0 4px 6px -4px rgba(0, 0, 0, 0.35);
728
+ --shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.45), 0 8px 10px -6px rgba(0, 0, 0, 0.4);
729
+ }
730
+ }
731
+
732
+
733
+ /* --- Adaptive: Chart (dark) — prefers-color-scheme --- */
734
+ @media (prefers-color-scheme: dark) {
735
+ :root:not(.light):not(.theme-light):not([data-theme="light"]) {
736
+ --chart-1: var(--color-primary-400);
737
+ --chart-2: var(--color-success-500);
738
+ --chart-3: var(--color-warning-500);
739
+ --chart-4: var(--color-info-500);
740
+ --chart-5: var(--color-error-500);
741
+ }
742
+ }
743
+
744
+
745
+ /* --- Adaptive: Sidebar (dark) — prefers-color-scheme --- */
746
+ @media (prefers-color-scheme: dark) {
747
+ :root:not(.light):not(.theme-light):not([data-theme="light"]) {
748
+ --sidebar-bg: var(--color-neutral-900);
749
+ --sidebar-text: var(--color-neutral-300);
750
+ --sidebar-primary-bg: var(--color-primary-500);
751
+ --sidebar-primary-text: var(--color-white);
752
+ --sidebar-accent-bg: var(--color-neutral-800);
753
+ --sidebar-accent-text: var(--color-neutral-50);
754
+ --sidebar-border: var(--color-neutral-700);
755
+ --sidebar-ring: var(--color-primary-400);
756
+ --sidebar-text-muted: var(--color-neutral-400);
757
+ }
758
+ }
759
+
760
+ /* ============================================
761
+ Global: Motion Safety
762
+ ============================================ */
763
+ @media (prefers-reduced-motion: reduce) {
764
+ *, *::before, *::after {
765
+ animation-duration: 0.01ms !important;
766
+ animation-iteration-count: 1 !important;
767
+ transition-duration: 0.01ms !important;
768
+ }
769
+ }