luxaura 1.0.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,779 @@
1
+ /*! Luxaura UI Kit v1.0.0 | MIT License */
2
+ /* =========================================================
3
+ LUXAURA.MIN.CSS — Design System & Utility Classes
4
+ ========================================================= */
5
+
6
+ /* ─── CSS Custom Properties (Tokens) ────────────────────── */
7
+ :root {
8
+ /* Color palette */
9
+ --lux-primary: #6c63ff;
10
+ --lux-primary-dark: #574fd6;
11
+ --lux-primary-light: #9d96ff;
12
+ --lux-secondary: #ff6584;
13
+ --lux-accent: #43e97b;
14
+ --lux-neutral-50: #f9fafb;
15
+ --lux-neutral-100: #f3f4f6;
16
+ --lux-neutral-200: #e5e7eb;
17
+ --lux-neutral-300: #d1d5db;
18
+ --lux-neutral-400: #9ca3af;
19
+ --lux-neutral-500: #6b7280;
20
+ --lux-neutral-600: #4b5563;
21
+ --lux-neutral-700: #374151;
22
+ --lux-neutral-800: #1f2937;
23
+ --lux-neutral-900: #111827;
24
+
25
+ /* Semantic colors */
26
+ --lux-bg: #ffffff;
27
+ --lux-surface: #f9fafb;
28
+ --lux-border: #e5e7eb;
29
+ --lux-text: #1f2937;
30
+ --lux-muted: #6b7280;
31
+ --lux-success: #10b981;
32
+ --lux-warning: #f59e0b;
33
+ --lux-error: #ef4444;
34
+ --lux-info: #3b82f6;
35
+
36
+ /* Typography */
37
+ --lux-font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
38
+ --lux-font-mono: 'JetBrains Mono', 'Fira Code', 'Cascadia Code', monospace;
39
+ --lux-font-display: 'Plus Jakarta Sans', 'Inter', sans-serif;
40
+
41
+ /* Spacing scale (4px base) */
42
+ --lux-space-1: 4px;
43
+ --lux-space-2: 8px;
44
+ --lux-space-3: 12px;
45
+ --lux-space-4: 16px;
46
+ --lux-space-5: 20px;
47
+ --lux-space-6: 24px;
48
+ --lux-space-8: 32px;
49
+ --lux-space-10: 40px;
50
+ --lux-space-12: 48px;
51
+ --lux-space-16: 64px;
52
+
53
+ /* Border radius */
54
+ --lux-radius-sm: 4px;
55
+ --lux-radius-md: 8px;
56
+ --lux-radius-lg: 16px;
57
+ --lux-radius-xl: 24px;
58
+ --lux-radius-full: 9999px;
59
+
60
+ /* Shadows */
61
+ --lux-shadow-sm: 0 1px 3px rgba(0,0,0,0.08), 0 1px 2px rgba(0,0,0,0.06);
62
+ --lux-shadow-md: 0 4px 12px rgba(0,0,0,0.10), 0 2px 6px rgba(0,0,0,0.06);
63
+ --lux-shadow-lg: 0 10px 30px rgba(0,0,0,0.12), 0 4px 12px rgba(0,0,0,0.08);
64
+ --lux-shadow-xl: 0 24px 48px rgba(0,0,0,0.16);
65
+
66
+ /* Transitions */
67
+ --lux-transition: 0.2s cubic-bezier(0.4, 0, 0.2, 1);
68
+ --lux-transition-slow: 0.4s cubic-bezier(0.4, 0, 0.2, 1);
69
+
70
+ /* Z-index scale */
71
+ --lux-z-base: 0;
72
+ --lux-z-raised: 10;
73
+ --lux-z-overlay: 100;
74
+ --lux-z-modal: 200;
75
+ --lux-z-toast: 300;
76
+ }
77
+
78
+ /* Dark theme */
79
+ [data-theme="dark"] {
80
+ --lux-bg: #0f172a;
81
+ --lux-surface: #1e293b;
82
+ --lux-border: #334155;
83
+ --lux-text: #f1f5f9;
84
+ --lux-muted: #94a3b8;
85
+ }
86
+
87
+ /* ─── Reset & Base ───────────────────────────────────────── */
88
+ *, *::before, *::after {
89
+ box-sizing: border-box;
90
+ margin: 0;
91
+ padding: 0;
92
+ }
93
+
94
+ html {
95
+ font-size: 16px;
96
+ scroll-behavior: smooth;
97
+ -webkit-text-size-adjust: 100%;
98
+ }
99
+
100
+ body {
101
+ font-family: var(--lux-font-sans);
102
+ color: var(--lux-text);
103
+ background: var(--lux-bg);
104
+ line-height: 1.6;
105
+ -webkit-font-smoothing: antialiased;
106
+ -moz-osx-font-smoothing: grayscale;
107
+ }
108
+
109
+ img, video { max-width: 100%; height: auto; display: block; }
110
+ button { cursor: pointer; font-family: inherit; }
111
+ a { color: var(--lux-primary); text-decoration: none; }
112
+ a:hover { text-decoration: underline; }
113
+ ul, ol { list-style: none; }
114
+ input, textarea, select { font-family: inherit; }
115
+
116
+ /* ─── Semantic Component Base Styles ─────────────────────── */
117
+
118
+ /* Container */
119
+ .lux-container {
120
+ width: 100%;
121
+ max-width: 1200px;
122
+ margin: 0 auto;
123
+ padding: 0 var(--lux-space-4);
124
+ }
125
+
126
+ /* Box */
127
+ .lux-box {
128
+ display: block;
129
+ }
130
+
131
+ /* Row */
132
+ .lux-row {
133
+ display: flex;
134
+ flex-direction: row;
135
+ align-items: center;
136
+ gap: var(--lux-space-4);
137
+ }
138
+
139
+ /* Column */
140
+ .lux-column {
141
+ display: flex;
142
+ flex-direction: column;
143
+ gap: var(--lux-space-4);
144
+ }
145
+
146
+ /* Grid */
147
+ .lux-grid {
148
+ display: grid;
149
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
150
+ gap: var(--lux-space-4);
151
+ }
152
+
153
+ /* Nav */
154
+ .lux-nav {
155
+ display: flex;
156
+ align-items: center;
157
+ justify-content: space-between;
158
+ padding: var(--lux-space-4) var(--lux-space-6);
159
+ background: var(--lux-bg);
160
+ border-bottom: 1px solid var(--lux-border);
161
+ position: sticky;
162
+ top: 0;
163
+ z-index: var(--lux-z-raised);
164
+ backdrop-filter: blur(8px);
165
+ -webkit-backdrop-filter: blur(8px);
166
+ }
167
+
168
+ /* Sidebar */
169
+ .lux-sidebar {
170
+ width: 260px;
171
+ min-height: 100vh;
172
+ background: var(--lux-surface);
173
+ border-right: 1px solid var(--lux-border);
174
+ padding: var(--lux-space-6);
175
+ flex-shrink: 0;
176
+ }
177
+
178
+ /* Footer */
179
+ .lux-footer {
180
+ padding: var(--lux-space-8) var(--lux-space-6);
181
+ background: var(--lux-surface);
182
+ border-top: 1px solid var(--lux-border);
183
+ text-align: center;
184
+ color: var(--lux-muted);
185
+ font-size: 0.875rem;
186
+ }
187
+
188
+ /* Header */
189
+ .lux-header {
190
+ padding: var(--lux-space-8) 0;
191
+ }
192
+
193
+ /* Section */
194
+ .lux-section {
195
+ padding: var(--lux-space-12) 0;
196
+ }
197
+
198
+ /* Title */
199
+ .lux-title {
200
+ font-family: var(--lux-font-display);
201
+ font-weight: 700;
202
+ line-height: 1.2;
203
+ letter-spacing: -0.025em;
204
+ color: var(--lux-text);
205
+ }
206
+
207
+ h1.lux-title { font-size: 3rem; }
208
+ h2.lux-title { font-size: 2.25rem; }
209
+ h3.lux-title { font-size: 1.875rem; }
210
+ h4.lux-title { font-size: 1.5rem; }
211
+ h5.lux-title { font-size: 1.25rem; }
212
+ h6.lux-title { font-size: 1.125rem; }
213
+
214
+ /* Text */
215
+ .lux-text {
216
+ color: var(--lux-text);
217
+ line-height: 1.7;
218
+ }
219
+
220
+ .lux-text.muted { color: var(--lux-muted); }
221
+
222
+ /* Image */
223
+ .lux-image {
224
+ border-radius: var(--lux-radius-md);
225
+ object-fit: cover;
226
+ }
227
+
228
+ /* Icon */
229
+ .lux-icon {
230
+ display: inline-flex;
231
+ align-items: center;
232
+ justify-content: center;
233
+ line-height: 1;
234
+ }
235
+
236
+ /* Action (Button) */
237
+ .lux-action {
238
+ display: inline-flex;
239
+ align-items: center;
240
+ justify-content: center;
241
+ gap: var(--lux-space-2);
242
+ padding: var(--lux-space-2) var(--lux-space-4);
243
+ border: none;
244
+ border-radius: var(--lux-radius-md);
245
+ background: var(--lux-primary);
246
+ color: white;
247
+ font-size: 0.9rem;
248
+ font-weight: 500;
249
+ cursor: pointer;
250
+ transition: all var(--lux-transition);
251
+ text-decoration: none;
252
+ white-space: nowrap;
253
+ user-select: none;
254
+ }
255
+
256
+ .lux-action:hover {
257
+ background: var(--lux-primary-dark);
258
+ transform: translateY(-1px);
259
+ box-shadow: var(--lux-shadow-md);
260
+ text-decoration: none;
261
+ }
262
+
263
+ .lux-action:active {
264
+ transform: translateY(0);
265
+ box-shadow: none;
266
+ }
267
+
268
+ .lux-action:disabled {
269
+ opacity: 0.5;
270
+ cursor: not-allowed;
271
+ transform: none;
272
+ }
273
+
274
+ .lux-action.secondary {
275
+ background: transparent;
276
+ border: 1.5px solid var(--lux-border);
277
+ color: var(--lux-text);
278
+ }
279
+
280
+ .lux-action.secondary:hover {
281
+ border-color: var(--lux-primary);
282
+ color: var(--lux-primary);
283
+ }
284
+
285
+ .lux-action.ghost {
286
+ background: transparent;
287
+ color: var(--lux-primary);
288
+ }
289
+
290
+ .lux-action.ghost:hover {
291
+ background: rgba(108, 99, 255, 0.08);
292
+ }
293
+
294
+ .lux-action.danger {
295
+ background: var(--lux-error);
296
+ }
297
+
298
+ .lux-action.danger:hover {
299
+ background: #dc2626;
300
+ }
301
+
302
+ /* Input */
303
+ .lux-input {
304
+ display: block;
305
+ width: 100%;
306
+ padding: var(--lux-space-2) var(--lux-space-3);
307
+ border: 1.5px solid var(--lux-border);
308
+ border-radius: var(--lux-radius-md);
309
+ background: var(--lux-bg);
310
+ color: var(--lux-text);
311
+ font-size: 0.95rem;
312
+ transition: border-color var(--lux-transition), box-shadow var(--lux-transition);
313
+ outline: none;
314
+ }
315
+
316
+ .lux-input:focus {
317
+ border-color: var(--lux-primary);
318
+ box-shadow: 0 0 0 3px rgba(108, 99, 255, 0.15);
319
+ }
320
+
321
+ .lux-input::placeholder {
322
+ color: var(--lux-neutral-400);
323
+ }
324
+
325
+ .lux-input:disabled {
326
+ background: var(--lux-neutral-100);
327
+ color: var(--lux-muted);
328
+ cursor: not-allowed;
329
+ }
330
+
331
+ /* Form */
332
+ .lux-form {
333
+ display: flex;
334
+ flex-direction: column;
335
+ gap: var(--lux-space-4);
336
+ }
337
+
338
+ /* Switch (Checkbox Toggle) */
339
+ .lux-switch {
340
+ appearance: none;
341
+ -webkit-appearance: none;
342
+ width: 44px;
343
+ height: 24px;
344
+ background: var(--lux-neutral-300);
345
+ border-radius: var(--lux-radius-full);
346
+ cursor: pointer;
347
+ position: relative;
348
+ transition: background var(--lux-transition);
349
+ flex-shrink: 0;
350
+ }
351
+
352
+ .lux-switch::after {
353
+ content: '';
354
+ position: absolute;
355
+ width: 18px;
356
+ height: 18px;
357
+ background: white;
358
+ border-radius: 50%;
359
+ top: 3px;
360
+ left: 3px;
361
+ transition: transform var(--lux-transition);
362
+ box-shadow: 0 1px 4px rgba(0,0,0,0.2);
363
+ }
364
+
365
+ .lux-switch:checked {
366
+ background: var(--lux-primary);
367
+ }
368
+
369
+ .lux-switch:checked::after {
370
+ transform: translateX(20px);
371
+ }
372
+
373
+ /* Table */
374
+ .lux-table {
375
+ width: 100%;
376
+ border-collapse: collapse;
377
+ font-size: 0.9rem;
378
+ }
379
+
380
+ .lux-table th, .lux-table td {
381
+ padding: var(--lux-space-3) var(--lux-space-4);
382
+ text-align: left;
383
+ border-bottom: 1px solid var(--lux-border);
384
+ }
385
+
386
+ .lux-table th {
387
+ font-weight: 600;
388
+ color: var(--lux-muted);
389
+ font-size: 0.8rem;
390
+ text-transform: uppercase;
391
+ letter-spacing: 0.05em;
392
+ background: var(--lux-surface);
393
+ }
394
+
395
+ .lux-table tr:hover {
396
+ background: var(--lux-neutral-50);
397
+ }
398
+
399
+ /* List */
400
+ .lux-list {
401
+ display: flex;
402
+ flex-direction: column;
403
+ gap: var(--lux-space-2);
404
+ }
405
+
406
+ .lux-list-item {
407
+ padding: var(--lux-space-2) var(--lux-space-3);
408
+ border-radius: var(--lux-radius-sm);
409
+ transition: background var(--lux-transition);
410
+ }
411
+
412
+ .lux-list-item:hover {
413
+ background: var(--lux-neutral-50);
414
+ }
415
+
416
+ /* Link */
417
+ .lux-link {
418
+ color: var(--lux-primary);
419
+ text-decoration: none;
420
+ font-weight: 500;
421
+ transition: color var(--lux-transition);
422
+ }
423
+
424
+ .lux-link:hover {
425
+ color: var(--lux-primary-dark);
426
+ text-decoration: underline;
427
+ }
428
+
429
+ /* Badge */
430
+ .lux-badge {
431
+ display: inline-flex;
432
+ align-items: center;
433
+ padding: 2px var(--lux-space-2);
434
+ border-radius: var(--lux-radius-full);
435
+ font-size: 0.75rem;
436
+ font-weight: 600;
437
+ background: var(--lux-primary-light);
438
+ color: white;
439
+ }
440
+
441
+ /* Card */
442
+ .lux-card {
443
+ background: var(--lux-bg);
444
+ border: 1px solid var(--lux-border);
445
+ border-radius: var(--lux-radius-lg);
446
+ padding: var(--lux-space-6);
447
+ box-shadow: var(--lux-shadow-sm);
448
+ transition: box-shadow var(--lux-transition), transform var(--lux-transition);
449
+ }
450
+
451
+ .lux-card:hover {
452
+ box-shadow: var(--lux-shadow-lg);
453
+ transform: translateY(-2px);
454
+ }
455
+
456
+ /* Modal */
457
+ .lux-modal {
458
+ position: fixed;
459
+ inset: 0;
460
+ z-index: var(--lux-z-modal);
461
+ display: flex;
462
+ align-items: center;
463
+ justify-content: center;
464
+ padding: var(--lux-space-4);
465
+ }
466
+
467
+ .lux-overlay {
468
+ position: fixed;
469
+ inset: 0;
470
+ background: rgba(0,0,0,0.5);
471
+ backdrop-filter: blur(4px);
472
+ -webkit-backdrop-filter: blur(4px);
473
+ z-index: var(--lux-z-overlay);
474
+ }
475
+
476
+ /* Divider */
477
+ .lux-divider {
478
+ border: none;
479
+ border-top: 1px solid var(--lux-border);
480
+ margin: var(--lux-space-4) 0;
481
+ }
482
+
483
+ /* Code */
484
+ code, .lux-code {
485
+ font-family: var(--lux-font-mono);
486
+ font-size: 0.875em;
487
+ background: var(--lux-surface);
488
+ border: 1px solid var(--lux-border);
489
+ border-radius: var(--lux-radius-sm);
490
+ padding: 2px 6px;
491
+ }
492
+
493
+ pre, .lux-pre {
494
+ font-family: var(--lux-font-mono);
495
+ font-size: 0.875rem;
496
+ background: var(--lux-neutral-900);
497
+ color: #e2e8f0;
498
+ border-radius: var(--lux-radius-md);
499
+ padding: var(--lux-space-4);
500
+ overflow-x: auto;
501
+ line-height: 1.7;
502
+ }
503
+
504
+ /* ─── Utility Classes (lux- prefix) ──────────────────────── */
505
+
506
+ /* Display */
507
+ .lux-flex { display: flex; }
508
+ .lux-inline-flex { display: inline-flex; }
509
+ .lux-block { display: block; }
510
+ .lux-inline { display: inline; }
511
+ .lux-grid-auto { display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
512
+ .lux-hidden { display: none; }
513
+
514
+ /* Flex helpers */
515
+ .lux-center { align-items: center; justify-content: center; }
516
+ .lux-between { justify-content: space-between; }
517
+ .lux-around { justify-content: space-around; }
518
+ .lux-start { justify-content: flex-start; }
519
+ .lux-end { justify-content: flex-end; }
520
+ .lux-items-start { align-items: flex-start; }
521
+ .lux-items-end { align-items: flex-end; }
522
+ .lux-wrap { flex-wrap: wrap; }
523
+ .lux-col { flex-direction: column; }
524
+ .lux-grow { flex: 1; }
525
+
526
+ /* Spacing */
527
+ .lux-p-1 { padding: var(--lux-space-1); }
528
+ .lux-p-2 { padding: var(--lux-space-2); }
529
+ .lux-p-3 { padding: var(--lux-space-3); }
530
+ .lux-p-4 { padding: var(--lux-space-4); }
531
+ .lux-p-6 { padding: var(--lux-space-6); }
532
+ .lux-p-8 { padding: var(--lux-space-8); }
533
+ .lux-px-4 { padding-left: var(--lux-space-4); padding-right: var(--lux-space-4); }
534
+ .lux-py-4 { padding-top: var(--lux-space-4); padding-bottom: var(--lux-space-4); }
535
+ .lux-m-auto { margin: auto; }
536
+ .lux-mt-4 { margin-top: var(--lux-space-4); }
537
+ .lux-mb-4 { margin-bottom: var(--lux-space-4); }
538
+ .lux-gap-2 { gap: var(--lux-space-2); }
539
+ .lux-gap-4 { gap: var(--lux-space-4); }
540
+ .lux-gap-6 { gap: var(--lux-space-6); }
541
+ .lux-gap-8 { gap: var(--lux-space-8); }
542
+
543
+ /* Width / Height */
544
+ .lux-w-full { width: 100%; }
545
+ .lux-h-full { height: 100%; }
546
+ .lux-w-auto { width: auto; }
547
+ .lux-min-h-screen { min-height: 100vh; }
548
+
549
+ /* Typography */
550
+ .lux-text-xs { font-size: 0.75rem; }
551
+ .lux-text-sm { font-size: 0.875rem; }
552
+ .lux-text-base { font-size: 1rem; }
553
+ .lux-text-lg { font-size: 1.125rem; }
554
+ .lux-text-xl { font-size: 1.25rem; }
555
+ .lux-text-2xl { font-size: 1.5rem; }
556
+ .lux-text-3xl { font-size: 1.875rem; }
557
+ .lux-text-4xl { font-size: 2.25rem; }
558
+ .lux-text-5xl { font-size: 3rem; }
559
+
560
+ .lux-font-normal { font-weight: 400; }
561
+ .lux-font-medium { font-weight: 500; }
562
+ .lux-font-semi { font-weight: 600; }
563
+ .lux-font-bold { font-weight: 700; }
564
+ .lux-font-black { font-weight: 900; }
565
+
566
+ .lux-text-left { text-align: left; }
567
+ .lux-text-center { text-align: center; }
568
+ .lux-text-right { text-align: right; }
569
+
570
+ .lux-leading-tight { line-height: 1.2; }
571
+ .lux-leading-normal { line-height: 1.6; }
572
+ .lux-leading-loose { line-height: 2; }
573
+
574
+ .lux-tracking-tight { letter-spacing: -0.025em; }
575
+ .lux-tracking-wide { letter-spacing: 0.05em; }
576
+ .lux-tracking-wider { letter-spacing: 0.1em; }
577
+
578
+ .lux-uppercase { text-transform: uppercase; }
579
+ .lux-capitalize { text-transform: capitalize; }
580
+ .lux-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
581
+
582
+ /* Colors */
583
+ .lux-text-primary { color: var(--lux-primary); }
584
+ .lux-text-secondary { color: var(--lux-secondary); }
585
+ .lux-text-muted { color: var(--lux-muted); }
586
+ .lux-text-success { color: var(--lux-success); }
587
+ .lux-text-warning { color: var(--lux-warning); }
588
+ .lux-text-error { color: var(--lux-error); }
589
+ .lux-text-white { color: white; }
590
+
591
+ .lux-bg-primary { background: var(--lux-primary); }
592
+ .lux-bg-surface { background: var(--lux-surface); }
593
+ .lux-bg-success { background: var(--lux-success); }
594
+ .lux-bg-warning { background: var(--lux-warning); }
595
+ .lux-bg-error { background: var(--lux-error); }
596
+
597
+ /* Borders */
598
+ .lux-border { border: 1px solid var(--lux-border); }
599
+ .lux-border-top { border-top: 1px solid var(--lux-border); }
600
+ .lux-border-bottom { border-bottom: 1px solid var(--lux-border); }
601
+ .lux-rounded-sm { border-radius: var(--lux-radius-sm); }
602
+ .lux-rounded-md { border-radius: var(--lux-radius-md); }
603
+ .lux-rounded-lg { border-radius: var(--lux-radius-lg); }
604
+ .lux-rounded-full { border-radius: var(--lux-radius-full); }
605
+
606
+ /* Shadows */
607
+ .lux-shadow-sm { box-shadow: var(--lux-shadow-sm); }
608
+ .lux-shadow-md { box-shadow: var(--lux-shadow-md); }
609
+ .lux-shadow-lg { box-shadow: var(--lux-shadow-lg); }
610
+ .lux-shadow-xl { box-shadow: var(--lux-shadow-xl); }
611
+
612
+ /* Position */
613
+ .lux-relative { position: relative; }
614
+ .lux-absolute { position: absolute; }
615
+ .lux-fixed { position: fixed; }
616
+ .lux-sticky { position: sticky; }
617
+ .lux-top-0 { top: 0; }
618
+ .lux-inset-0 { inset: 0; }
619
+ .lux-z-raised { z-index: var(--lux-z-raised); }
620
+ .lux-z-overlay { z-index: var(--lux-z-overlay); }
621
+ .lux-z-modal { z-index: var(--lux-z-modal); }
622
+
623
+ /* Overflow */
624
+ .lux-overflow-hidden { overflow: hidden; }
625
+ .lux-overflow-auto { overflow: auto; }
626
+ .lux-overflow-x-auto { overflow-x: auto; }
627
+
628
+ /* Opacity & Visibility */
629
+ .lux-opacity-0 { opacity: 0; }
630
+ .lux-opacity-50 { opacity: 0.5; }
631
+ .lux-opacity-100 { opacity: 1; }
632
+ .lux-invisible { visibility: hidden; }
633
+
634
+ /* Cursor */
635
+ .lux-cursor-pointer { cursor: pointer; }
636
+ .lux-cursor-default { cursor: default; }
637
+ .lux-select-none { user-select: none; }
638
+
639
+ /* Transitions */
640
+ .lux-transition { transition: all var(--lux-transition); }
641
+ .lux-transition-slow { transition: all var(--lux-transition-slow); }
642
+
643
+ /* ─── Animations ──────────────────────────────────────────── */
644
+
645
+ @keyframes lux-fade-in {
646
+ from { opacity: 0; transform: translateY(8px); }
647
+ to { opacity: 1; transform: translateY(0); }
648
+ }
649
+
650
+ @keyframes lux-slide-in-right {
651
+ from { opacity: 0; transform: translateX(20px); }
652
+ to { opacity: 1; transform: translateX(0); }
653
+ }
654
+
655
+ @keyframes lux-scale-in {
656
+ from { opacity: 0; transform: scale(0.95); }
657
+ to { opacity: 1; transform: scale(1); }
658
+ }
659
+
660
+ @keyframes lux-spin {
661
+ to { transform: rotate(360deg); }
662
+ }
663
+
664
+ @keyframes lux-pulse {
665
+ 0%, 100% { opacity: 1; }
666
+ 50% { opacity: 0.5; }
667
+ }
668
+
669
+ .lux-animate-fade-in { animation: lux-fade-in 0.3s var(--lux-transition) both; }
670
+ .lux-animate-slide-in { animation: lux-slide-in-right 0.3s var(--lux-transition) both; }
671
+ .lux-animate-scale-in { animation: lux-scale-in 0.25s var(--lux-transition) both; }
672
+ .lux-animate-spin { animation: lux-spin 1s linear infinite; }
673
+ .lux-animate-pulse { animation: lux-pulse 2s ease-in-out infinite; }
674
+
675
+ /* Staggered children */
676
+ .lux-stagger > *:nth-child(1) { animation-delay: 0ms; }
677
+ .lux-stagger > *:nth-child(2) { animation-delay: 60ms; }
678
+ .lux-stagger > *:nth-child(3) { animation-delay: 120ms; }
679
+ .lux-stagger > *:nth-child(4) { animation-delay: 180ms; }
680
+ .lux-stagger > *:nth-child(5) { animation-delay: 240ms; }
681
+ .lux-stagger > *:nth-child(6) { animation-delay: 300ms; }
682
+
683
+ /* ─── Loading / Skeleton ──────────────────────────────────── */
684
+
685
+ @keyframes lux-shimmer {
686
+ from { background-position: -1000px 0; }
687
+ to { background-position: 1000px 0; }
688
+ }
689
+
690
+ .lux-skeleton {
691
+ background: linear-gradient(90deg,
692
+ var(--lux-neutral-200) 25%,
693
+ var(--lux-neutral-100) 50%,
694
+ var(--lux-neutral-200) 75%
695
+ );
696
+ background-size: 1000px 100%;
697
+ animation: lux-shimmer 1.5s infinite linear;
698
+ border-radius: var(--lux-radius-sm);
699
+ }
700
+
701
+ /* ─── Toast / Notification ────────────────────────────────── */
702
+
703
+ .lux-toast-container {
704
+ position: fixed;
705
+ bottom: var(--lux-space-6);
706
+ right: var(--lux-space-6);
707
+ z-index: var(--lux-z-toast);
708
+ display: flex;
709
+ flex-direction: column;
710
+ gap: var(--lux-space-2);
711
+ }
712
+
713
+ .lux-toast {
714
+ padding: var(--lux-space-3) var(--lux-space-4);
715
+ border-radius: var(--lux-radius-md);
716
+ background: var(--lux-neutral-900);
717
+ color: white;
718
+ font-size: 0.9rem;
719
+ box-shadow: var(--lux-shadow-lg);
720
+ animation: lux-slide-in-right 0.25s both;
721
+ max-width: 360px;
722
+ }
723
+
724
+ .lux-toast.success { background: var(--lux-success); }
725
+ .lux-toast.warning { background: var(--lux-warning); color: var(--lux-neutral-900); }
726
+ .lux-toast.error { background: var(--lux-error); }
727
+ .lux-toast.info { background: var(--lux-info); }
728
+
729
+ /* ─── Responsive Breakpoints ──────────────────────────────── */
730
+
731
+ /* Mobile first — additions for larger screens */
732
+ @media (min-width: 640px) {
733
+ .lux-container { padding: 0 var(--lux-space-6); }
734
+ .sm\:lux-flex { display: flex; }
735
+ .sm\:lux-grid { display: grid; }
736
+ }
737
+
738
+ @media (min-width: 768px) {
739
+ .lux-container { padding: 0 var(--lux-space-8); }
740
+ .md\:lux-flex { display: flex; }
741
+ .md\:lux-col { flex-direction: column; }
742
+ .md\:lux-row { flex-direction: row; }
743
+ .md\:lux-grid-2 { grid-template-columns: repeat(2, 1fr); }
744
+ .md\:lux-grid-3 { grid-template-columns: repeat(3, 1fr); }
745
+ }
746
+
747
+ @media (min-width: 1024px) {
748
+ .lux-container { max-width: 1200px; }
749
+ .lg\:lux-grid-4 { grid-template-columns: repeat(4, 1fr); }
750
+ }
751
+
752
+ /* ─── Physics Engine: Auto-Stack ──────────────────────────── */
753
+ @media (max-width: 767px) {
754
+ .lux-row { flex-direction: column; }
755
+ .lux-nav { flex-wrap: wrap; gap: var(--lux-space-3); }
756
+ .lux-sidebar { width: 100%; min-height: auto; border-right: none; border-bottom: 1px solid var(--lux-border); }
757
+ h1.lux-title { font-size: 2rem; }
758
+ h2.lux-title { font-size: 1.75rem; }
759
+ }
760
+
761
+ /* ─── Scrollbar Styling ───────────────────────────────────── */
762
+ ::-webkit-scrollbar { width: 6px; height: 6px; }
763
+ ::-webkit-scrollbar-track { background: transparent; }
764
+ ::-webkit-scrollbar-thumb { background: var(--lux-neutral-300); border-radius: 3px; }
765
+ ::-webkit-scrollbar-thumb:hover { background: var(--lux-neutral-400); }
766
+
767
+ /* ─── Selection ───────────────────────────────────────────── */
768
+ ::selection { background: rgba(108, 99, 255, 0.2); color: var(--lux-text); }
769
+
770
+ /* ─── Focus Ring ──────────────────────────────────────────── */
771
+ :focus-visible {
772
+ outline: 2px solid var(--lux-primary);
773
+ outline-offset: 2px;
774
+ }
775
+
776
+ /* ─── Print ───────────────────────────────────────────────── */
777
+ @media print {
778
+ .lux-nav, .lux-sidebar, .lux-toast-container { display: none; }
779
+ }