juxscript 1.1.172 → 1.1.173

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 (2) hide show
  1. package/lib/styles/shadcn.css +376 -1276
  2. package/package.json +1 -1
@@ -1,1109 +1,211 @@
1
1
  @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
2
2
 
3
- * {
4
- font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
5
- }
6
- /* Tabs */
7
-
8
- .jux-tabs-list {
9
- display: inline-flex;
10
- height: 40px; /* h-10 */
11
- align-items: center;
12
- justify-content: center;
13
- border-radius: 0.375rem; /* rounded-md */
14
- background-color: #f4f4f5; /* bg-muted */
15
- padding: 0.25rem; /* p-1 */
16
- color: #71717a; /* text-muted-foreground */
17
- border: none;
18
- }
19
-
20
- .jux-tabs-button {
21
- display: inline-flex;
22
- align-items: center;
23
- justify-content: center;
24
- white-space: nowrap;
25
- border-radius: 0.125rem; /* rounded-sm */
26
- padding: 0.375rem 0.75rem; /* px-3 py-1.5 */
27
- font-size: 0.875rem; /* text-sm */
28
- font-weight: 500; /* font-medium */
29
- color: #71717a;
30
- cursor: pointer;
31
- border: none;
32
- background: transparent;
33
- transition-property: all;
34
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
35
- transition-duration: 0.15s;
36
- user-select: none;
37
- }
38
-
39
- /* Focus visible state mimicking ring-offset-background focus-visible:ring-2 ... */
40
- .jux-tabs-button:focus-visible {
41
- outline: 2px solid #18181b; /* ring-ring */
42
- outline-offset: 2px;
43
- }
44
-
45
- .jux-tabs-button:disabled {
46
- pointer-events: none;
47
- opacity: 0.5;
48
- }
49
-
50
- .jux-tabs-button-active {
51
- background-color: #ffffff; /* bg-background */
52
- color: #09090b; /* text-foreground */
53
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); /* shadow-sm */
54
- }
55
-
56
- /* Content Panel */
57
- .jux-tabs-panel {
58
- margin-top: 0.5rem; /* mt-2 */
59
- border-radius: 0.375rem;
60
- border: 1px solid #e4e4e7;
61
- padding: 1.5rem;
62
- /* ring-offset-background equivalent if focused */
63
- }
64
- .jux-tabs-panel:focus-visible {
65
- outline: 2px solid #18181b;
66
- outline-offset: 2px;
67
- }
68
-
69
- /* Modal Overlay */
70
- .jux-modal-overlay {
71
- position: fixed;
72
- inset: 0;
73
- z-index: 50;
74
- background-color: rgba(0, 0, 0, 0.8); /* bg-black/80 */
75
- backdrop-filter: blur(2px);
76
- display: flex;
77
- align-items: center;
78
- justify-content: center;
79
- }
80
-
81
- /* Modal Container */
82
- .jux-modal {
83
- position: relative;
84
- background-color: #ffffff; /* bg-background */
85
- border: 1px solid #e4e4e7; /* border */
86
- border-radius: 0.5rem; /* rounded-lg */
87
- box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); /* lg:shadow-lg */
88
- width: 100%;
89
- max-width: 32rem; /* lg:max-w-lg default */
90
- z-index: 51;
91
- display: flex;
92
- flex-direction: column;
93
- gap: 1rem;
94
- padding: 1.5rem; /* p-6 */
95
- }
96
-
97
- .jux-modal-small { max-width: 24rem; }
98
- .jux-modal-medium { max-width: 32rem; }
99
- .jux-modal-large { max-width: 48rem; }
100
-
101
- /* Header */
102
- .jux-modal-header {
103
- display: flex;
104
- align-items: flex-start;
105
- gap: 0.75rem;
106
- padding: 0;
107
- text-align: left;
108
- }
109
-
110
- .jux-modal-header-icon {
111
- display: flex;
112
- align-items: center;
113
- justify-content: center;
114
- flex-shrink: 0;
115
- color: #09090b;
116
- margin-top: 0.125rem;
117
- }
118
-
119
- .jux-modal-header-title {
120
- flex: 1;
121
- font-size: 1.125rem; /* text-lg */
122
- font-weight: 600; /* font-semibold */
123
- line-height: 1.2;
124
- color: #09090b; /* text-foreground */
125
- }
126
-
127
- /* Body / Content */
128
- .jux-modal-content {
129
- padding: 0;
130
- font-size: 0.875rem; /* text-sm */
131
- color: #71717a; /* text-muted-foreground */
132
- line-height: 1.5;
133
- display: flex;
134
- flex-direction: column;
135
- gap: 1rem;
136
- }
137
-
138
- /* Input Fields */
139
- .jux-input {
140
- display: flex;
141
- flex-direction: column;
142
- gap: 0.5rem;
143
- width: 100%;
144
- }
145
-
146
- .jux-input-label {
147
- font-size: 0.875rem; /* text-sm */
148
- font-weight: 500; /* font-medium */
149
- color: #09090b;
150
- line-height: 1;
151
- }
152
-
153
- .jux-input-container {
154
- position: relative;
155
- width: 100%;
156
- }
157
-
158
- .jux-input-element {
159
- display: flex;
160
- height: 2.5rem; /* h-10 */
161
- width: 100%;
162
- border-radius: 0.375rem; /* rounded-md */
163
- border: 1px solid #e4e4e7; /* border-input */
164
- background-color: #ffffff; /* bg-background */
165
- padding: 0.5rem 0.75rem; /* px-3 py-2 */
166
- font-size: 0.875rem; /* text-sm */
167
- color: #09090b;
168
- outline: none;
169
- transition: all 0.15s ease;
170
- box-sizing: border-box;
171
- }
172
-
173
- .jux-input-element::placeholder {
174
- color: #71717a; /* text-muted-foreground */
175
- }
176
-
177
- .jux-input-element:focus {
178
- outline: 2px solid transparent;
179
- outline-offset: 2px;
180
- border-color: #18181b; /* focus-visible:ring-ring */
181
- box-shadow: 0 0 0 2px #18181b, 0 0 0 4px rgba(24, 24, 27, 0.1);
182
- }
183
-
184
- .jux-input-element:disabled {
185
- cursor: not-allowed;
186
- opacity: 0.5;
187
- }
188
-
189
- .jux-input-error {
190
- font-size: 0.875rem;
191
- font-weight: 500;
192
- color: #ef4444; /* text-destructive */
193
- }
194
-
195
- /* Footer with Actions */
196
- .jux-modal-footer {
197
- padding: 0;
198
- padding-top: 0.5rem;
199
- display: flex;
200
- flex-direction: row;
201
- justify-content: flex-end;
202
- gap: 0.5rem; /* space-x-2 */
203
- flex-wrap: wrap;
204
- }
205
-
206
- /* Modal Action Buttons */
207
- .jux-modal-action {
208
- display: inline-flex;
209
- align-items: center;
210
- justify-content: center;
211
- white-space: nowrap;
212
- border-radius: 0.375rem; /* rounded-md */
213
- font-size: 0.875rem; /* text-sm */
214
- font-weight: 500; /* font-medium */
215
- height: 2.5rem; /* h-10 */
216
- padding: 0 1rem; /* px-4 py-2 */
217
- cursor: pointer;
218
- transition: all 0.15s ease;
219
- border: 1px solid transparent;
220
- }
221
-
222
- /* Ghost variant */
223
- .jux-modal-action-ghost {
224
- background-color: transparent;
225
- color: #09090b;
226
- border: none;
227
- }
228
- .jux-modal-action-ghost:hover {
229
- background-color: #f4f4f5;
230
- color: #18181b;
231
- }
232
-
233
- /* Secondary/Outline variant */
234
- .jux-modal-action-secondary {
235
- border: 1px solid #e4e4e7; /* border-input */
236
- background-color: #ffffff; /* bg-background */
237
- color: #09090b;
238
- }
239
- .jux-modal-action-secondary:hover {
240
- background-color: #f4f4f5; /* hover:bg-accent */
241
- color: #18181b;
242
- }
243
-
244
- /* Primary variant */
245
- .jux-modal-action-primary {
246
- background-color: #18181b; /* bg-primary */
247
- color: #fafafa; /* text-primary-foreground */
248
- border: none;
249
- }
250
- .jux-modal-action-primary:hover {
251
- background-color: #27272a; /* hover:bg-primary/90 */
252
- }
253
-
254
- /* Destructive variant */
255
- .jux-modal-action-destructive {
256
- background-color: #ef4444; /* bg-destructive */
257
- color: #ffffff;
258
- border: none;
259
- }
260
- .jux-modal-action-destructive:hover {
261
- background-color: #dc2626; /* hover:bg-destructive/90 */
262
- }
263
-
264
- /* Close Button (X) */
265
- .jux-modal-close {
266
- position: absolute;
267
- top: 1rem; /* top-4 */
268
- right: 1rem; /* right-4 */
269
- border-radius: 0.125rem; /* rounded-sm */
270
- opacity: 0.7;
271
- transition: opacity 0.15s ease;
272
- background: transparent;
273
- border: none;
274
- cursor: pointer;
275
- color: #71717a;
276
- padding: 0.25rem;
277
- width: 1.5rem;
278
- height: 1.5rem;
279
- display: flex;
280
- align-items: center;
281
- justify-content: center;
282
- font-size: 1.25rem;
283
- line-height: 1;
284
- }
285
-
286
- .jux-modal-close:hover {
287
- opacity: 1;
288
- color: #09090b;
289
- }
290
-
291
- .jux-modal-close:focus-visible {
292
- outline: 2px solid #18181b; /* ring-ring */
293
- outline-offset: 2px;
294
- }
295
-
296
- /* Trigger Buttons (outside modal) */
297
- button.jux-button,
298
- .jux-button {
299
- display: inline-flex;
300
- align-items: center;
301
- justify-content: center;
302
- white-space: nowrap;
303
- border-radius: 0.375rem;
304
- font-size: 0.875rem;
305
- font-weight: 500;
306
- height: 2.5rem;
307
- padding: 0 1rem;
308
- cursor: pointer;
309
- transition: all 0.15s ease;
310
- border: 1px solid transparent;
311
- margin: 0.25rem;
312
- }
313
-
314
- /* Button variants for triggers */
315
- .jux-button-primary {
316
- background-color: #18181b;
317
- color: #fafafa;
318
- }
319
- .jux-button-primary:hover {
320
- background-color: #27272a;
321
- }
322
-
323
- .jux-button-outline {
324
- border: 1px solid #e4e4e7;
325
- background-color: #ffffff;
326
- color: #09090b;
327
- }
328
- .jux-button-outline:hover {
329
- background-color: #f4f4f5;
330
- color: #18181b;
331
- }
332
-
333
- button.jux-button:focus-visible,
334
- .jux-button:focus-visible {
335
- outline: 2px solid #18181b;
336
- outline-offset: 2px;
337
- }
338
-
339
- /* Typography Styles */
340
-
341
- /* Headings */
342
- h1, .jux-heading-1 {
343
- scroll-margin: 5rem; /* scroll-m-20 */
344
- font-size: 2.25rem; /* text-4xl */
345
- font-weight: 800; /* font-extrabold */
346
- letter-spacing: -0.025em; /* tracking-tight */
347
- text-wrap: balance;
348
- }
349
-
350
- h2, .jux-heading-2 {
351
- scroll-margin: 5rem; /* scroll-m-20 */
352
- border-bottom: 1px solid #e4e4e7;
353
- padding-bottom: 0.5rem; /* pb-2 */
354
- font-size: 1.875rem; /* text-3xl */
355
- font-weight: 600; /* font-semibold */
356
- letter-spacing: -0.025em; /* tracking-tight */
357
- transition-property: color;
358
- transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
359
- transition-duration: 0.15s;
360
- }
361
-
362
- h2:first-child, .jux-heading-2:first-child {
363
- margin-top: 0;
364
- }
365
-
366
- h3, .jux-heading-3 {
367
- scroll-margin: 5rem; /* scroll-m-20 */
368
- font-size: 1.5rem; /* text-2xl */
369
- font-weight: 600; /* font-semibold */
370
- letter-spacing: -0.025em; /* tracking-tight */
371
- }
372
-
373
- h4, .jux-heading-4 {
374
- scroll-margin: 5rem; /* scroll-m-20 */
375
- font-size: 1.25rem; /* text-xl */
376
- font-weight: 600; /* font-semibold */
377
- letter-spacing: -0.025em; /* tracking-tight */
378
- }
379
-
380
- h5, .jux-heading-5 {
381
- scroll-margin: 5rem;
382
- font-size: 1.125rem; /* text-lg */
383
- font-weight: 600; /* font-semibold */
384
- letter-spacing: -0.025em;
385
- }
386
-
387
- h6, .jux-heading-6 {
388
- scroll-margin: 5rem;
389
- font-size: 1rem; /* text-base */
390
- font-weight: 600; /* font-semibold */
391
- letter-spacing: -0.025em;
392
- }
393
-
394
- /* Paragraph */
395
- p, .jux-paragraph {
396
- line-height: 1.75; /* leading-7 */
397
- }
398
-
399
- p:not(:first-child), .jux-paragraph:not(:first-child) {
400
- margin-top: 1.5rem; /* mt-6 */
401
- }
402
-
403
- /* Lead Text */
404
- .jux-lead {
405
- font-size: 1.25rem; /* text-xl */
406
- color: #71717a; /* text-muted-foreground */
407
- }
408
-
409
- /* Large Text */
410
- .jux-large {
411
- font-size: 1.125rem; /* text-lg */
412
- font-weight: 600; /* font-semibold */
413
- }
414
-
415
- /* Small Text */
416
- small, .jux-small {
417
- font-size: 0.875rem; /* text-sm */
418
- font-weight: 500; /* font-medium */
419
- line-height: 1;
420
- }
421
-
422
- /* Muted Text */
423
- .jux-muted {
424
- font-size: 0.875rem; /* text-sm */
425
- color: #71717a; /* text-muted-foreground */
426
- }
427
-
428
- /* Blockquote */
429
- blockquote, .jux-blockquote {
430
- margin-top: 1.5rem; /* mt-6 */
431
- border-left: 2px solid #e4e4e7; /* border-l-2 */
432
- padding-left: 1.5rem; /* pl-6 */
433
- font-style: italic;
434
- }
435
-
436
- /* Inline Code */
437
- code, .jux-inline-code {
438
- position: relative;
439
- border-radius: 0.25rem; /* rounded */
440
- background-color: #f4f4f5; /* bg-muted */
441
- padding: 0.15rem 0.3rem; /* px-[0.3rem] py-[0.2rem] */
442
- font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, 'Liberation Mono', monospace;
443
- font-size: 0.875rem; /* text-sm */
444
- font-weight: 600; /* font-semibold */
445
- }
446
-
447
- /* Lists */
448
- ul, .jux-list {
449
- margin-top: 1.5rem; /* my-6 */
450
- margin-bottom: 1.5rem;
451
- margin-left: 1.5rem; /* ml-6 */
452
- list-style-type: disc; /* list-disc */
453
- }
454
-
455
- ol, .jux-list-ordered {
456
- margin-top: 1.5rem;
457
- margin-bottom: 1.5rem;
458
- margin-left: 1.5rem;
459
- list-style-type: decimal;
460
- }
461
-
462
- ul > li, ol > li,
463
- .jux-list > li, .jux-list-ordered > li {
464
- margin-top: 0.5rem; /* mt-2 */
465
- }
466
-
467
- /* Table */
468
- table, .jux-table {
469
- margin-top: 1.5rem; /* my-6 */
470
- margin-bottom: 1.5rem;
471
- width: 100%;
472
- overflow-y: auto;
473
- }
474
-
475
- table thead tr, .jux-table thead tr {
476
- margin: 0;
477
- border-top: 1px solid #e4e4e7; /* border-t */
478
- padding: 0;
479
- }
480
-
481
- table thead tr:nth-child(even),
482
- .jux-table thead tr:nth-child(even) {
483
- background-color: #f4f4f5; /* even:bg-muted */
484
- }
485
-
486
- table tbody tr, .jux-table tbody tr {
487
- margin: 0;
488
- border-top: 1px solid #e4e4e7;
489
- padding: 0;
490
- }
491
-
492
- table tbody tr:nth-child(even),
493
- .jux-table tbody tr:nth-child(even) {
494
- background-color: #f4f4f5; /* even:bg-muted */
495
- }
496
-
497
- table th, .jux-table th {
498
- border: 1px solid #e4e4e7;
499
- padding: 0.5rem 1rem; /* px-4 py-2 */
500
- text-align: left;
501
- font-weight: 700; /* font-bold */
502
- }
503
-
504
- table th[align="center"],
505
- .jux-table th[align="center"] {
506
- text-align: center;
507
- }
508
-
509
- table th[align="right"],
510
- .jux-table th[align="right"] {
511
- text-align: right;
512
- }
513
-
514
- table td, .jux-table td {
515
- border: 1px solid #e4e4e7;
516
- padding: 0.5rem 1rem; /* px-4 py-2 */
517
- text-align: left;
518
- }
519
-
520
- table td[align="center"],
521
- .jux-table td[align="center"] {
522
- text-align: center;
523
- }
524
-
525
- table td[align="right"],
526
- .jux-table td[align="right"] {
527
- text-align: right;
528
- }
529
-
530
- /* Horizontal Rule / Divider */
531
- hr, .jux-hr {
532
- margin-top: 1.5rem;
533
- margin-bottom: 1.5rem;
534
- border: none;
535
- border-top: 1px solid #e4e4e7;
536
- }
537
-
538
- /* Card Styles */
539
-
540
- .jux-card {
541
- border-radius: 0.5rem; /* rounded-lg */
542
- border: 1px solid #e4e4e7; /* border */
543
- background-color: #ffffff; /* bg-card */
544
- color: #09090b; /* text-card-foreground */
545
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05); /* shadow-sm */
546
- overflow: hidden;
547
- transition: all 0.15s ease;
548
- }
549
-
550
- .jux-card-hoverable {
551
- cursor: pointer;
552
- }
553
-
554
- .jux-card-hoverable:hover {
555
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); /* shadow-md */
556
- border-color: #d4d4d8; /* hover:border-muted */
557
- }
558
-
559
- .jux-card-header {
560
- display: flex;
561
- flex-direction: row;
562
- align-items: center;
563
- gap: 0.75rem; /* space-x-3 */
564
- padding: 1.5rem; /* p-6 */
565
- background-color: #fafafa; /* bg-muted/50 */
566
- border-bottom: 1px solid #e4e4e7;
567
- }
568
-
569
- .jux-card-icon {
570
- display: flex;
571
- align-items: center;
572
- justify-content: center;
573
- flex-shrink: 0;
574
- width: 2.5rem; /* w-10 */
575
- height: 2.5rem; /* h-10 */
576
- border-radius: 0.375rem; /* rounded-md */
577
- background-color: #f4f4f5; /* bg-muted */
578
- color: #18181b; /* text-foreground */
579
- font-size: 1.25rem; /* text-xl */
580
- }
581
-
582
- .jux-card-title {
583
- flex: 1;
584
- font-size: 1.125rem; /* text-lg */
585
- font-weight: 600; /* font-semibold */
586
- line-height: 1.2;
587
- color: #09090b; /* text-foreground */
588
- margin: 0;
589
- }
590
-
591
- .jux-card-body {
592
- padding: 1.5rem; /* p-6 */
593
- font-size: 0.875rem; /* text-sm */
594
- line-height: 1.5;
595
- color: #71717a; /* text-muted-foreground */
596
- }
597
-
598
- .jux-card-footer {
599
- display: flex;
600
- align-items: center;
601
- padding: 1.5rem; /* p-6 */
602
- padding-top: 1rem; /* pt-4 */
603
- border-top: 1px solid #e4e4e7;
604
- background-color: #fafafa; /* bg-muted/50 */
605
- gap: 0.5rem;
606
- }
607
-
608
- /* Card variants */
609
- .jux-card-compact .jux-card-header,
610
- .jux-card-compact .jux-card-body,
611
- .jux-card-compact .jux-card-footer {
612
- padding: 1rem; /* p-4 */
613
- }
614
-
615
- .jux-card-flush .jux-card-header {
616
- background-color: transparent;
617
- border-bottom: none;
618
- }
619
-
620
- .jux-card-flush .jux-card-footer {
621
- background-color: transparent;
622
- border-top: none;
623
- }
624
-
625
- /* ═══════════════════════════════════════════════════════════════════
626
- * BUTTON SIZE VARIANTS
627
- * ═══════════════════════════════════════════════════════════════════ */
628
-
629
- /* Extra Small */
630
- button.jux-button-xs,
631
- .jux-button-xs {
632
- height: 2rem; /* h-8 */
633
- padding: 0 0.75rem; /* px-3 */
634
- font-size: 0.75rem; /* text-xs */
635
- border-radius: 0.25rem; /* rounded-sm */
636
- }
637
-
638
- /* Small */
639
- button.jux-button-sm,
640
- .jux-button-sm {
641
- height: 2.25rem; /* h-9 */
642
- padding: 0 0.875rem; /* px-3.5 */
643
- font-size: 0.8125rem; /* text-xs/sm */
644
- border-radius: 0.3125rem;
645
- }
646
-
647
- /* Default/Medium (already defined above) */
648
- button.jux-button,
649
- .jux-button {
650
- height: 2.5rem; /* h-10 */
651
- padding: 0 1rem; /* px-4 */
652
- font-size: 0.875rem; /* text-sm */
653
- border-radius: 0.375rem; /* rounded-md */
654
- }
655
-
656
- /* Large */
657
- button.jux-button-lg,
658
- .jux-button-lg {
659
- height: 2.75rem; /* h-11 */
660
- padding: 0 1.25rem; /* px-5 */
661
- font-size: 0.9375rem; /* text-base */
662
- border-radius: 0.375rem; /* rounded-md */
663
- }
664
-
665
- /* Extra Large */
666
- button.jux-button-xl,
667
- .jux-button-xl {
668
- height: 3rem; /* h-12 */
669
- padding: 0 1.5rem; /* px-6 */
670
- font-size: 1rem; /* text-base */
671
- border-radius: 0.5rem; /* rounded-lg */
672
- font-weight: 600; /* font-semibold */
673
- }
674
-
675
- /* 2X Large */
676
- button.jux-button-2xl,
677
- .jux-button-2xl {
678
- height: 3.5rem; /* h-14 */
679
- padding: 0 2rem; /* px-8 */
680
- font-size: 1.125rem; /* text-lg */
681
- border-radius: 0.5rem; /* rounded-lg */
682
- font-weight: 600; /* font-semibold */
683
- }
684
-
685
- /* 3X Large */
686
- button.jux-button-3xl,
687
- .jux-button-3xl {
688
- height: 4rem; /* h-16 */
689
- padding: 0 2.5rem; /* px-10 */
690
- font-size: 1.25rem; /* text-xl */
691
- border-radius: 0.625rem; /* rounded-xl */
692
- font-weight: 600; /* font-semibold */
693
- }
694
-
695
- /* ═══════════════════════════════════════════════════════════════════
696
- * BUTTON VARIANTS (work with all sizes)
697
- * ═══════════════════════════════════════════════════════════════════ */
698
-
699
- /* Default/Primary */
700
- .jux-button-default,
701
- .jux-button-primary {
702
- background-color: #18181b; /* bg-primary */
703
- color: #fafafa; /* text-primary-foreground */
704
- border: none;
705
- }
706
- .jux-button-default:hover,
707
- .jux-button-primary:hover {
708
- background-color: #27272a; /* hover:bg-primary/90 */
709
- }
710
-
711
- /* Secondary */
712
- .jux-button-secondary {
713
- background-color: #f4f4f5; /* bg-secondary */
714
- color: #09090b; /* text-secondary-foreground */
715
- border: none;
716
- }
717
- .jux-button-secondary:hover {
718
- background-color: #e4e4e7; /* hover:bg-secondary/80 */
719
- }
720
-
721
- /* Destructive */
722
- .jux-button-destructive {
723
- background-color: #ef4444; /* bg-destructive */
724
- color: #ffffff; /* text-destructive-foreground */
725
- border: none;
726
- }
727
- .jux-button-destructive:hover {
728
- background-color: #dc2626; /* hover:bg-destructive/90 */
729
- }
730
-
731
- /* Outline */
732
- .jux-button-outline {
733
- border: 1px solid #e4e4e7; /* border-input */
734
- background-color: #ffffff; /* bg-background */
735
- color: #09090b; /* text-foreground */
736
- }
737
- .jux-button-outline:hover {
738
- background-color: #f4f4f5; /* hover:bg-accent */
739
- color: #18181b; /* hover:text-accent-foreground */
740
- }
741
-
742
- /* Ghost */
743
- .jux-button-ghost {
744
- background-color: transparent;
745
- color: #09090b;
746
- border: none;
747
- }
748
- .jux-button-ghost:hover {
749
- background-color: #f4f4f5; /* hover:bg-accent */
750
- color: #18181b; /* hover:text-accent-foreground */
751
- }
752
-
753
- /* Link */
754
- .jux-button-link {
755
- background-color: transparent;
756
- color: #18181b; /* text-primary */
757
- text-decoration: underline;
758
- text-underline-offset: 4px;
759
- border: none;
760
- padding: 0;
761
- height: auto;
762
- }
763
- .jux-button-link:hover {
764
- text-decoration: none;
765
- }
766
-
767
- /* ═══════════════════════════════════════════════════════════════════
768
- * ICON BUTTONS (Square variants)
769
- * ═══════════════════════════════════════════════════════════════════ */
770
-
771
- .jux-button-icon {
772
- padding: 0;
773
- aspect-ratio: 1 / 1;
774
- }
775
-
776
- .jux-button-icon.jux-button-xs {
777
- width: 2rem;
778
- height: 2rem;
779
- }
780
-
781
- .jux-button-icon.jux-button-sm {
782
- width: 2.25rem;
783
- height: 2.25rem;
784
- }
785
-
786
- .jux-button-icon {
787
- width: 2.5rem;
788
- height: 2.5rem;
789
- }
790
-
791
- .jux-button-icon.jux-button-lg {
792
- width: 2.75rem;
793
- height: 2.75rem;
794
- }
795
-
796
- .jux-button-icon.jux-button-xl {
797
- width: 3rem;
798
- height: 3rem;
799
- }
800
-
801
- .jux-button-icon.jux-button-2xl {
802
- width: 3.5rem;
803
- height: 3.5rem;
804
- }
805
-
806
- .jux-button-icon.jux-button-3xl {
807
- width: 4rem;
808
- height: 4rem;
809
- }
810
-
811
- /* ═══════════════════════════════════════════════════════════════════
812
- * BUTTON STATES
813
- * ═══════════════════════════════════════════════════════════════════ */
814
-
815
- button.jux-button:disabled,
816
- .jux-button:disabled {
817
- pointer-events: none;
818
- opacity: 0.5;
819
- }
820
-
821
- button.jux-button:focus-visible,
822
- .jux-button:focus-visible {
823
- outline: 2px solid #18181b; /* ring-ring */
824
- outline-offset: 2px;
825
- }
826
-
827
- button.jux-button:active,
828
- .jux-button:active {
829
- transform: scale(0.98);
830
- }
831
-
832
- /* Loading state */
833
- .jux-button-loading {
834
- position: relative;
835
- color: transparent;
836
- pointer-events: none;
837
- }
838
-
839
- .jux-button-loading::after {
840
- content: '';
841
- position: absolute;
842
- width: 1rem;
843
- height: 1rem;
844
- top: 50%;
845
- left: 50%;
846
- margin-left: -0.5rem;
847
- margin-top: -0.5rem;
848
- border: 2px solid currentColor;
849
- border-top-color: transparent;
850
- border-radius: 50%;
851
- animation: button-spin 0.6s linear infinite;
852
- color: inherit;
853
- }
854
-
855
- @keyframes button-spin {
856
- to { transform: rotate(360deg); }
857
- }
858
-
859
- /* ═══════════════════════════════════════════════════════════════════
860
- * DARK MODE
861
- * ═══════════════════════════════════════════════════════════════════ */
862
-
863
- .dark .jux-button-default,
864
- .dark .jux-button-primary {
865
- background-color: #fafafa;
866
- color: #18181b;
867
- }
868
- .dark .jux-button-default:hover,
869
- .dark .jux-button-primary:hover {
870
- background-color: #e4e4e7;
871
- }
872
-
873
- .dark .jux-button-secondary {
874
- background-color: #27272a;
875
- color: #fafafa;
876
- }
877
- .dark .jux-button-secondary:hover {
878
- background-color: #3f3f46;
879
- }
880
-
881
- .dark .jux-button-outline {
882
- border-color: #27272a;
883
- background-color: #09090b;
884
- color: #fafafa;
885
- }
886
- .dark .jux-button-outline:hover {
887
- background-color: #27272a;
888
- color: #fafafa;
889
- }
890
-
891
- .dark .jux-button-ghost {
892
- color: #fafafa;
893
- }
894
- .dark .jux-button-ghost:hover {
895
- background-color: #27272a;
896
- color: #fafafa;
897
- }
898
-
899
- .dark .jux-button-link {
900
- color: #fafafa;
901
- }
902
-
903
- .dark .jux-button:focus-visible {
904
- outline-color: #fafafa;
905
- }
906
-
907
- /* ═══════════════════════════════════════════════════════════════════
908
- * MENU STYLES (Shadcn Sidebar)
909
- * ═══════════════════════════════════════════════════════════════════ */
910
-
911
- /* Menu Container */
912
- .jux-menu,
913
- .jux-menu-vertical {
914
- display: flex;
915
- flex-direction: column;
916
- gap: 0.25rem;
917
- width: 100%;
918
- padding: 0.5rem;
919
- }
920
-
921
- /* Menu Items Wrapper */
922
- .jux-menu-items {
923
- display: flex;
924
- flex-direction: column;
925
- gap: 0.25rem;
926
- width: 100%;
927
- }
928
-
929
- /* Individual Menu Item Container */
930
- .jux-menu-item-wrapper {
931
- display: flex;
932
- flex-direction: column;
933
- width: 100%;
934
- }
935
-
936
- /* Menu Link/Item */
937
- .jux-menu-link,
938
- .jux-menu-item {
939
- display: flex;
940
- align-items: center;
941
- gap: 0.75rem;
942
- padding: 0.5rem 0.75rem;
943
- border-radius: 0.375rem;
944
- font-size: 0.875rem;
945
- font-weight: 500;
946
- color: #09090b;
947
- cursor: pointer;
948
- transition: background-color 0.15s;
949
- text-decoration: none;
950
- background: transparent;
951
- border: none;
952
- width: 100%;
953
- text-align: left;
954
- }
955
-
956
- .jux-menu-link:hover,
957
- .jux-menu-item:hover {
958
- background-color: #f4f4f5;
959
- }
960
-
961
- .jux-menu-link-active,
962
- .jux-menu-item-active {
963
- background-color: #f4f4f5;
964
- font-weight: 600;
965
- }
3
+ /* ═══════════════════════════════════════════════════════════════════
4
+ * DESIGN TOKENS (Shadcn Variables)
5
+ * ═══════════════════════════════════════════════════════════════════ */
966
6
 
967
- /* Menu Label (text inside link) */
968
- .jux-menu-label {
969
- flex: 1;
970
- font-size: 0.875rem;
971
- font-weight: inherit;
972
- color: inherit;
7
+ :root {
8
+ /* Base colors */
9
+ --background: 0 0% 100%;
10
+ --foreground: 0 0% 3.9%;
11
+ --muted: 0 0% 96.1%;
12
+ --muted-foreground: 0 0% 45.1%;
13
+ --border: 0 0% 89.8%;
14
+ --input: 0 0% 89.8%;
15
+ --ring: 0 0% 3.9%;
16
+
17
+ /* Accent colors */
18
+ --primary: 0 0% 9%;
19
+ --primary-foreground: 0 0% 98%;
20
+ --secondary: 0 0% 96.1%;
21
+ --secondary-foreground: 0 0% 9%;
22
+ --accent: 0 0% 96.1%;
23
+ --accent-foreground: 0 0% 9%;
24
+
25
+ /* Semantic colors */
26
+ --destructive: 0 84.2% 60.2%;
27
+ --destructive-foreground: 0 0% 98%;
28
+ --success: 142 71% 45%;
29
+ --success-foreground: 0 0% 98%;
30
+ --warning: 48 96% 53%;
31
+ --warning-foreground: 0 0% 9%;
32
+
33
+ /* Sizes */
34
+ --radius: 0.375rem;
35
+
36
+ /* Font */
37
+ font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
38
+ }
39
+
40
+ .dark {
41
+ --background: 0 0% 3.9%;
42
+ --foreground: 0 0% 98%;
43
+ --muted: 0 0% 14.9%;
44
+ --muted-foreground: 0 0% 63.9%;
45
+ --border: 0 0% 14.9%;
46
+ --input: 0 0% 14.9%;
47
+ --ring: 0 0% 83.1%;
48
+ --primary: 0 0% 98%;
49
+ --primary-foreground: 0 0% 9%;
50
+ --secondary: 0 0% 14.9%;
51
+ --secondary-foreground: 0 0% 98%;
52
+ --accent: 0 0% 14.9%;
53
+ --accent-foreground: 0 0% 98%;
973
54
  }
974
55
 
975
- /* Section Label (header text) */
976
- .jux-menu-section-label {
977
- padding: 0.5rem;
978
- font-size: 0.75rem;
979
- font-weight: 600;
980
- color: #71717a;
981
- text-transform: uppercase;
982
- letter-spacing: 0.05em;
983
- }
56
+ /* ═══════════════════════════════════════════════════════════════════
57
+ * BASE INPUT STYLING (Shared across all inputs)
58
+ * ═══════════════════════════════════════════════════════════════════ */
984
59
 
985
- /* Icon */
986
- .jux-menu-icon {
987
- width: 1.25rem;
988
- height: 1.25rem;
989
- flex-shrink: 0;
60
+ .jux-input-element,
61
+ .jux-table-filter,
62
+ .jux-dataframe-filter-input {
990
63
  display: flex;
991
- align-items: center;
992
- justify-content: center;
64
+ height: 2.5rem;
65
+ width: 100%;
66
+ border-radius: var(--radius);
67
+ border: 1px solid hsl(var(--input));
68
+ background: hsl(var(--background));
69
+ padding: 0.5rem 0.75rem;
70
+ font-size: 0.875rem;
71
+ color: hsl(var(--foreground));
72
+ outline: none !important;
73
+ transition: all 0.15s ease;
74
+ box-sizing: border-box;
993
75
  }
994
76
 
995
- /* Chevron for expandable items */
996
- .jux-menu-chevron {
997
- width: 1rem;
998
- height: 1rem;
999
- flex-shrink: 0;
1000
- margin-left: auto;
1001
- transition: transform 0.15s;
1002
- color: #71717a;
77
+ .jux-input-element::placeholder,
78
+ .jux-table-filter::placeholder,
79
+ .jux-dataframe-filter-input::placeholder {
80
+ color: hsl(var(--muted-foreground));
1003
81
  }
1004
82
 
1005
- .jux-menu-item-expanded .jux-menu-chevron {
1006
- transform: rotate(90deg);
83
+ .jux-input-element:focus,
84
+ .jux-table-filter:focus,
85
+ .jux-dataframe-filter-input:focus {
86
+ border-color: hsl(var(--ring));
87
+ box-shadow: 0 0 0 1px hsl(var(--ring)) !important;
1007
88
  }
1008
89
 
1009
- /* Submenu (indented) */
1010
- .jux-menu-submenu {
1011
- display: flex;
1012
- flex-direction: column;
1013
- gap: 0.125rem;
1014
- margin-left: 2rem;
1015
- padding-left: 0.75rem;
1016
- border-left: 1px solid #e4e4e7;
1017
- margin-top: 0.125rem;
90
+ .jux-input-element:disabled {
91
+ cursor: not-allowed;
92
+ opacity: 0.5;
1018
93
  }
1019
94
 
1020
- .jux-menu-submenu .jux-menu-link,
1021
- .jux-menu-submenu .jux-menu-item {
1022
- padding: 0.375rem 0.75rem;
1023
- font-size: 0.8125rem;
1024
- }
95
+ /* ═══════════════════════════════════════════════════════════════════
96
+ * BUTTON BASE (Single source of truth)
97
+ * ═══════════════════════════════════════════════════════════════════ */
1025
98
 
1026
- /* User Section at Bottom */
1027
- .jux-menu-user {
1028
- display: flex;
99
+ .jux-button,
100
+ .jux-modal-action,
101
+ .jux-table-pagination button,
102
+ .jux-fileupload-button,
103
+ .jux-dropdown-trigger,
104
+ .jux-dmenu-trigger {
105
+ display: inline-flex;
1029
106
  align-items: center;
1030
- gap: 0.75rem;
1031
- padding: 0.75rem;
1032
- margin-top: auto;
1033
- border-top: 1px solid #e4e4e7;
1034
- border-radius: 0.375rem;
107
+ justify-content: center;
108
+ white-space: nowrap;
109
+ border-radius: var(--radius);
110
+ font-size: 0.875rem;
111
+ font-weight: 500;
112
+ height: 2.5rem;
113
+ padding: 0 1rem;
1035
114
  cursor: pointer;
115
+ transition: all 0.15s ease;
116
+ border: 1px solid transparent;
117
+ background: hsl(var(--primary));
118
+ color: hsl(var(--primary-foreground));
1036
119
  }
1037
120
 
1038
- .jux-menu-user:hover {
1039
- background-color: #f4f4f5;
121
+ .jux-button:hover,
122
+ .jux-modal-action:hover,
123
+ .jux-table-pagination button:hover:not(:disabled),
124
+ .jux-fileupload-button:hover,
125
+ .jux-dropdown-trigger:hover,
126
+ .jux-dmenu-trigger:hover {
127
+ opacity: 0.9;
1040
128
  }
1041
129
 
1042
- .jux-menu-user-avatar {
1043
- width: 2rem;
1044
- height: 2rem;
1045
- border-radius: 50%;
1046
- flex-shrink: 0;
130
+ .jux-button:focus-visible,
131
+ .jux-modal-action:focus-visible,
132
+ .jux-fileupload-button:focus-visible {
133
+ outline: 2px solid hsl(var(--ring));
134
+ outline-offset: 2px;
1047
135
  }
1048
136
 
1049
- .jux-menu-user-info {
1050
- flex: 1;
1051
- display: flex;
1052
- flex-direction: column;
1053
- gap: 0.125rem;
137
+ .jux-button:disabled,
138
+ .jux-table-pagination button:disabled {
139
+ pointer-events: none;
140
+ opacity: 0.5;
1054
141
  }
1055
142
 
1056
- .jux-menu-user-name {
1057
- font-size: 0.875rem;
1058
- font-weight: 600;
1059
- color: #09090b;
143
+ /* Button variants */
144
+ .jux-button-outline,
145
+ .jux-modal-action-secondary,
146
+ .jux-fileupload-button {
147
+ border: 1px solid hsl(var(--input));
148
+ background: hsl(var(--background));
149
+ color: hsl(var(--foreground));
1060
150
  }
1061
151
 
1062
- .jux-menu-user-email {
1063
- font-size: 0.75rem;
1064
- color: #71717a;
152
+ .jux-button-outline:hover,
153
+ .jux-modal-action-secondary:hover,
154
+ .jux-fileupload-button:hover {
155
+ background: hsl(var(--accent));
1065
156
  }
1066
157
 
1067
- /* Dark Mode */
1068
- .dark .jux-menu-link,
1069
- .dark .jux-menu-item {
1070
- color: #fafafa;
158
+ .jux-button-ghost,
159
+ .jux-modal-action-ghost {
160
+ background: transparent;
161
+ color: hsl(var(--foreground));
162
+ border: none;
1071
163
  }
1072
164
 
1073
- .dark .jux-menu-link:hover,
1074
- .dark .jux-menu-item:hover,
1075
- .dark .jux-menu-link-active,
1076
- .dark .jux-menu-item-active {
1077
- background-color: #27272a;
165
+ .jux-button-ghost:hover,
166
+ .jux-modal-action-ghost:hover {
167
+ background: hsl(var(--accent));
1078
168
  }
1079
169
 
1080
- .dark .jux-menu-section-label {
1081
- color: #a1a1aa;
170
+ .jux-button-destructive,
171
+ .jux-modal-action-destructive {
172
+ background: hsl(var(--destructive));
173
+ color: hsl(var(--destructive-foreground));
1082
174
  }
1083
175
 
1084
- .dark .jux-menu-submenu {
1085
- border-left-color: #27272a;
176
+ .jux-button-destructive:hover,
177
+ .jux-modal-action-destructive:hover {
178
+ opacity: 0.9;
1086
179
  }
1087
180
 
1088
- .dark .jux-menu-user {
1089
- border-top-color: #27272a;
1090
- }
181
+ /* Button sizes */
182
+ .jux-button-sm { height: 2.25rem; padding: 0 0.875rem; font-size: 0.8125rem; }
183
+ .jux-button-lg { height: 2.75rem; padding: 0 1.25rem; font-size: 0.9375rem; }
184
+ .jux-button-xl { height: 3rem; padding: 0 1.5rem; font-size: 1rem; font-weight: 600; }
1091
185
 
1092
- .dark .jux-menu-user:hover {
1093
- background-color: #27272a;
1094
- }
186
+ /* ═══════════════════════════════════════════════════════════════════
187
+ * TYPOGRAPHY (DRY headings)
188
+ * ═══════════════════════════════════════════════════════════════════ */
1095
189
 
1096
- .dark .jux-menu-user-name {
1097
- color: #fafafa;
190
+ h1, h2, h3, h4, h5, h6,
191
+ .jux-heading-1, .jux-heading-2, .jux-heading-3, .jux-heading-4, .jux-heading-5, .jux-heading-6 {
192
+ scroll-margin: 5rem;
193
+ font-weight: 600;
194
+ letter-spacing: -0.025em;
195
+ color: hsl(var(--foreground));
1098
196
  }
1099
197
 
1100
- .dark .jux-menu-user-email {
1101
- color: #a1a1aa;
1102
- }
198
+ h1, .jux-heading-1 { font-size: 2.25rem; font-weight: 800; }
199
+ h2, .jux-heading-2 { font-size: 1.875rem; border-bottom: 1px solid hsl(var(--border)); padding-bottom: 0.5rem; }
200
+ h3, .jux-heading-3 { font-size: 1.5rem; }
201
+ h4, .jux-heading-4 { font-size: 1.25rem; }
202
+ h5, .jux-heading-5 { font-size: 1.125rem; }
203
+ h6, .jux-heading-6 { font-size: 1rem; }
1103
204
 
1104
- .dark .jux-menu-chevron {
1105
- color: #a1a1aa;
1106
- }
205
+ p, .jux-paragraph { line-height: 1.75; }
206
+ p:not(:first-child) { margin-top: 1.5rem; }
207
+
208
+ .jux-muted { font-size: 0.875rem; color: hsl(var(--muted-foreground)); }
1107
209
 
1108
210
  /* ═══════════════════════════════════════════════════════════════════
1109
211
  * DATAFRAME COMPONENT
@@ -1116,54 +218,42 @@ button.jux-button:active,
1116
218
  width: 100%;
1117
219
  }
1118
220
 
1119
- .jux-dataframe-upload {
1120
- margin-bottom: 0.25rem;
1121
- }
1122
-
1123
221
  .jux-dataframe-status {
1124
222
  display: flex;
1125
223
  align-items: center;
1126
224
  padding: 0.5rem 0.75rem;
1127
225
  font-size: 0.8125rem;
1128
226
  font-weight: 500;
1129
- border-radius: 0.375rem;
1130
- border: 1px solid #e4e4e7;
1131
- background: #fafafa;
1132
- color: #71717a;
1133
- transition: all 0.2s ease;
227
+ border-radius: var(--radius);
228
+ border: 1px solid hsl(var(--border));
229
+ background: hsl(var(--muted));
230
+ color: hsl(var(--muted-foreground));
1134
231
  }
1135
232
 
1136
233
  .jux-dataframe-status-success {
1137
- background: #f0fdf4;
1138
- border-color: #bbf7d0;
1139
- color: #15803d;
234
+ background: hsl(var(--success) / 0.1);
235
+ border-color: hsl(var(--success) / 0.3);
236
+ color: hsl(var(--success));
1140
237
  }
1141
238
 
1142
239
  .jux-dataframe-status-loading {
1143
- background: #fefce8;
1144
- border-color: #fde68a;
1145
- color: #a16207;
240
+ background: hsl(var(--warning) / 0.1);
241
+ border-color: hsl(var(--warning) / 0.3);
242
+ color: hsl(var(--warning));
1146
243
  }
1147
244
 
1148
245
  .jux-dataframe-status-error {
1149
- background: #fef2f2;
1150
- border-color: #fecaca;
1151
- color: #dc2626;
1152
- }
1153
-
1154
- .jux-dataframe-status-empty {
1155
- background: #fafafa;
1156
- border-color: #e4e4e7;
1157
- color: #a1a1aa;
246
+ background: hsl(var(--destructive) / 0.1);
247
+ border-color: hsl(var(--destructive) / 0.3);
248
+ color: hsl(var(--destructive));
1158
249
  }
1159
250
 
1160
- /* DataFrame Filter */
1161
251
  .jux-dataframe-filter {
1162
252
  position: relative;
1163
253
  display: flex;
1164
254
  align-items: center;
1165
255
  width: 100%;
1166
- margin-bottom: 0.75rem; /* Add spacing below filter */
256
+ margin-bottom: 0.75rem;
1167
257
  }
1168
258
 
1169
259
  .jux-dataframe-filter-icon {
@@ -1171,7 +261,7 @@ button.jux-button:active,
1171
261
  left: 0.75rem;
1172
262
  top: 50%;
1173
263
  transform: translateY(-50%);
1174
- color: #a1a1aa;
264
+ color: hsl(var(--muted-foreground));
1175
265
  pointer-events: none;
1176
266
  display: flex;
1177
267
  align-items: center;
@@ -1180,87 +270,24 @@ button.jux-button:active,
1180
270
 
1181
271
  .jux-dataframe-filter-input {
1182
272
  padding-left: 2.25rem !important;
1183
- /* ✅ Remove aggressive black outline, use subtle ring instead */
1184
- outline: none !important;
1185
- }
1186
-
1187
- /* ✅ Fix focus state to match shadcn aesthetic */
1188
- .jux-dataframe-filter-input:focus {
1189
- border-color: #18181b !important;
1190
- box-shadow: 0 0 0 1px #18181b !important;
1191
- outline: none !important;
1192
- }
1193
-
1194
- /* ✅ Update dark mode filter focus */
1195
- .dark .jux-dataframe-filter-input:focus {
1196
- border-color: #fafafa !important;
1197
- box-shadow: 0 0 0 1px #fafafa !important;
1198
- outline: none !important;
1199
273
  }
1200
274
 
1201
275
  /* ═══════════════════════════════════════════════════════════════════
1202
- * FILE UPLOAD (Shadcn styled)
276
+ * FILE UPLOAD
1203
277
  * ═══════════════════════════════════════════════════════════════════ */
1204
278
 
1205
- .jux-fileupload {
1206
- gap: 0.5rem;
1207
- }
1208
-
1209
- .jux-fileupload-button-container {
1210
- display: flex;
1211
- align-items: center;
1212
- gap: 0.5rem;
1213
- }
1214
-
1215
- .jux-fileupload-button {
1216
- display: inline-flex;
1217
- align-items: center;
1218
- justify-content: center;
1219
- white-space: nowrap;
1220
- border-radius: 0.375rem;
1221
- font-size: 0.875rem;
1222
- font-weight: 500;
1223
- height: 2.5rem;
1224
- padding: 0 1rem;
1225
- cursor: pointer;
1226
- transition: all 0.15s ease;
1227
- border: 1px solid #e4e4e7;
1228
- background: #ffffff;
1229
- color: #09090b;
1230
- }
1231
-
1232
- .jux-fileupload-button:hover {
1233
- background: #f4f4f5;
1234
- color: #18181b;
1235
- }
1236
-
1237
- .jux-fileupload-button:disabled {
1238
- pointer-events: none;
1239
- opacity: 0.5;
1240
- }
1241
-
1242
- .jux-fileupload-icon {
1243
- display: flex;
1244
- align-items: center;
1245
- color: #71717a;
1246
- }
1247
-
1248
- .jux-fileupload-list {
1249
- display: flex;
1250
- flex-direction: column;
1251
- gap: 0.25rem;
1252
- }
279
+ .jux-fileupload { gap: 0.5rem; }
1253
280
 
1254
281
  .jux-fileupload-item {
1255
282
  display: flex;
1256
283
  align-items: center;
1257
284
  gap: 0.5rem;
1258
285
  padding: 0.375rem 0.75rem;
1259
- background: #f4f4f5;
1260
- border: 1px solid #e4e4e7;
1261
- border-radius: 0.375rem;
286
+ background: hsl(var(--muted));
287
+ border: 1px solid hsl(var(--border));
288
+ border-radius: var(--radius);
1262
289
  font-size: 0.8125rem;
1263
- color: #09090b;
290
+ color: hsl(var(--foreground));
1264
291
  }
1265
292
 
1266
293
  .jux-fileupload-filename {
@@ -1272,60 +299,55 @@ button.jux-button:active,
1272
299
  }
1273
300
 
1274
301
  .jux-fileupload-filesize {
1275
- color: #a1a1aa;
302
+ color: hsl(var(--muted-foreground));
1276
303
  font-size: 0.75rem;
1277
- flex-shrink: 0;
1278
304
  }
1279
305
 
1280
306
  .jux-fileupload-remove {
1281
307
  background: transparent;
1282
308
  border: none;
1283
- color: #a1a1aa;
309
+ color: hsl(var(--muted-foreground));
1284
310
  cursor: pointer;
1285
- font-size: 1rem;
1286
311
  padding: 0 0.25rem;
1287
- line-height: 1;
1288
312
  border-radius: 0.25rem;
1289
313
  transition: all 0.15s;
1290
314
  }
1291
315
 
1292
316
  .jux-fileupload-remove:hover {
1293
- color: #ef4444;
1294
- background: #fef2f2;
317
+ color: hsl(var(--destructive));
318
+ background: hsl(var(--destructive) / 0.1);
1295
319
  }
1296
320
 
1297
321
  /* ═══════════════════════════════════════════════════════════════════
1298
- * TABLE ENHANCEMENTS
322
+ * TABLE
1299
323
  * ═══════════════════════════════════════════════════════════════════ */
1300
324
 
1301
- .jux-table-wrapper {
325
+ .jux-table-wrapper { width: 100%; overflow-x: auto; }
326
+
327
+ .jux-table {
1302
328
  width: 100%;
1303
- overflow-x: auto;
329
+ border-collapse: collapse;
1304
330
  }
1305
331
 
1306
- .jux-table-filter {
1307
- display: flex;
1308
- height: 2.5rem;
1309
- width: 100%;
1310
- border-radius: 0.375rem;
1311
- border: 1px solid #e4e4e7;
1312
- background: #ffffff;
1313
- padding: 0.5rem 0.75rem;
1314
- font-size: 0.875rem;
1315
- color: #09090b;
1316
- outline: none;
1317
- transition: all 0.15s ease;
1318
- box-sizing: border-box;
1319
- margin-bottom: 0.75rem;
332
+ .jux-table thead tr { border-top: 1px solid hsl(var(--border)); }
333
+ .jux-table tbody tr { border-top: 1px solid hsl(var(--border)); }
334
+ .jux-table-striped tbody tr:nth-child(even) { background: hsl(var(--muted)); }
335
+
336
+ .jux-table th,
337
+ .jux-table td {
338
+ border: 1px solid hsl(var(--border));
339
+ padding: 0.5rem 1rem;
340
+ text-align: left;
1320
341
  }
1321
342
 
1322
- .jux-table-filter::placeholder {
1323
- color: #a1a1aa;
343
+ .jux-table th { font-weight: 700; }
344
+
345
+ .jux-table-hoverable tbody tr {
346
+ transition: background-color 0.1s ease;
1324
347
  }
1325
348
 
1326
- .jux-table-filter:focus {
1327
- border-color: #18181b;
1328
- box-shadow: 0 0 0 2px #18181b, 0 0 0 4px rgba(24, 24, 27, 0.1);
349
+ .jux-table-hoverable tbody tr:hover {
350
+ background: hsl(var(--accent)) !important;
1329
351
  }
1330
352
 
1331
353
  .jux-table-pagination {
@@ -1337,142 +359,220 @@ button.jux-button:active,
1337
359
  padding: 0.5rem 0;
1338
360
  }
1339
361
 
1340
- .jux-table-pagination button {
1341
- display: inline-flex;
362
+ .jux-table-pagination span {
363
+ font-size: 0.875rem;
364
+ color: hsl(var(--muted-foreground));
365
+ padding: 0 0.75rem;
366
+ }
367
+
368
+ /* ═══════════════════════════════════════════════════════════════════
369
+ * MODAL
370
+ * ═══════════════════════════════════════════════════════════════════ */
371
+
372
+ .jux-modal-overlay {
373
+ position: fixed;
374
+ inset: 0;
375
+ z-index: 50;
376
+ background: rgba(0, 0, 0, 0.8);
377
+ backdrop-filter: blur(2px);
378
+ display: flex;
1342
379
  align-items: center;
1343
380
  justify-content: center;
1344
- white-space: nowrap;
1345
- border-radius: 0.375rem;
1346
- font-size: 0.875rem;
1347
- font-weight: 500;
1348
- height: 2.25rem;
1349
- padding: 0 0.875rem;
1350
- cursor: pointer;
1351
- transition: all 0.15s ease;
1352
- border: 1px solid #e4e4e7;
1353
- background: #ffffff;
1354
- color: #09090b;
1355
381
  }
1356
382
 
1357
- .jux-table-pagination button:hover:not(:disabled) {
1358
- background: #f4f4f5;
1359
- color: #18181b;
383
+ .jux-modal {
384
+ position: relative;
385
+ background: hsl(var(--background));
386
+ border: 1px solid hsl(var(--border));
387
+ border-radius: 0.5rem;
388
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
389
+ width: 100%;
390
+ max-width: 32rem;
391
+ z-index: 51;
392
+ display: flex;
393
+ flex-direction: column;
394
+ gap: 1rem;
395
+ padding: 1.5rem;
1360
396
  }
1361
397
 
1362
- .jux-table-pagination button:disabled {
1363
- pointer-events: none;
1364
- opacity: 0.5;
398
+ .jux-modal-header {
399
+ display: flex;
400
+ align-items: flex-start;
401
+ gap: 0.75rem;
1365
402
  }
1366
403
 
1367
- .jux-table-pagination span {
1368
- font-size: 0.875rem;
1369
- color: #71717a;
1370
- padding: 0 0.75rem;
404
+ .jux-modal-header-title {
405
+ flex: 1;
406
+ font-size: 1.125rem;
407
+ font-weight: 600;
408
+ color: hsl(var(--foreground));
1371
409
  }
1372
410
 
1373
- /* Table hoverable rows */
1374
- .jux-table-hoverable tbody tr {
1375
- transition: background-color 0.1s ease;
411
+ .jux-modal-content {
412
+ font-size: 0.875rem;
413
+ color: hsl(var(--muted-foreground));
414
+ line-height: 1.5;
1376
415
  }
1377
416
 
1378
- .jux-table-hoverable tbody tr:hover {
1379
- background-color: #f4f4f5 !important;
417
+ .jux-modal-footer {
418
+ display: flex;
419
+ justify-content: flex-end;
420
+ gap: 0.5rem;
1380
421
  }
1381
422
 
1382
- /* Selection highlight override for shadcn */
1383
- .jux-table-row-selected {
1384
- background-color: #eff6ff !important;
423
+ .jux-modal-close {
424
+ position: absolute;
425
+ top: 1rem;
426
+ right: 1rem;
427
+ background: transparent;
428
+ border: none;
429
+ cursor: pointer;
430
+ color: hsl(var(--muted-foreground));
431
+ padding: 0.25rem;
1385
432
  }
1386
433
 
1387
- .jux-table-row-selected:hover {
1388
- background-color: #dbeafe !important;
434
+ .jux-modal-close:hover {
435
+ color: hsl(var(--foreground));
1389
436
  }
1390
437
 
1391
438
  /* ═══════════════════════════════════════════════════════════════════
1392
- * DARK MODE - DATAFRAME / FILEUPLOAD / TABLE
439
+ * TABS
1393
440
  * ═══════════════════════════════════════════════════════════════════ */
1394
441
 
1395
- .dark .jux-dataframe-status {
1396
- background: #18181b;
1397
- border-color: #27272a;
1398
- color: #a1a1aa;
442
+ .jux-tabs-list {
443
+ display: inline-flex;
444
+ height: 40px;
445
+ align-items: center;
446
+ justify-content: center;
447
+ border-radius: var(--radius);
448
+ background: hsl(var(--muted));
449
+ padding: 0.25rem;
1399
450
  }
1400
451
 
1401
- .dark .jux-dataframe-status-success {
1402
- background: #052e16;
1403
- border-color: #166534;
1404
- color: #4ade80;
452
+ .jux-tabs-button {
453
+ display: inline-flex;
454
+ align-items: center;
455
+ justify-content: center;
456
+ white-space: nowrap;
457
+ border-radius: calc(var(--radius) - 2px);
458
+ padding: 0.375rem 0.75rem;
459
+ font-size: 0.875rem;
460
+ font-weight: 500;
461
+ color: hsl(var(--muted-foreground));
462
+ cursor: pointer;
463
+ border: none;
464
+ background: transparent;
465
+ transition: all 0.15s;
1405
466
  }
1406
467
 
1407
- .dark .jux-dataframe-status-loading {
1408
- background: #422006;
1409
- border-color: #a16207;
1410
- color: #facc15;
468
+ .jux-tabs-button-active {
469
+ background: hsl(var(--background));
470
+ color: hsl(var(--foreground));
471
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
1411
472
  }
1412
473
 
1413
- .dark .jux-dataframe-status-error {
1414
- background: #450a0a;
1415
- border-color: #991b1b;
1416
- color: #f87171;
474
+ .jux-tabs-panel {
475
+ margin-top: 0.5rem;
476
+ border-radius: var(--radius);
477
+ border: 1px solid hsl(var(--border));
478
+ padding: 1.5rem;
1417
479
  }
1418
480
 
1419
- .dark .jux-fileupload-button {
1420
- border-color: #27272a;
1421
- background: #09090b;
1422
- color: #fafafa;
1423
- }
481
+ /* ═══════════════════════════════════════════════════════════════════
482
+ * CARD
483
+ * ═══════════════════════════════════════════════════════════════════ */
1424
484
 
1425
- .dark .jux-fileupload-button:hover {
1426
- background: #27272a;
485
+ .jux-card {
486
+ border-radius: 0.5rem;
487
+ border: 1px solid hsl(var(--border));
488
+ background: hsl(var(--background));
489
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
490
+ overflow: hidden;
1427
491
  }
1428
492
 
1429
- .dark .jux-fileupload-item {
1430
- background: #18181b;
1431
- border-color: #27272a;
1432
- color: #fafafa;
493
+ .jux-card-header {
494
+ display: flex;
495
+ align-items: center;
496
+ gap: 0.75rem;
497
+ padding: 1.5rem;
498
+ background: hsl(var(--muted) / 0.5);
499
+ border-bottom: 1px solid hsl(var(--border));
1433
500
  }
1434
501
 
1435
- .dark .jux-fileupload-filesize {
1436
- color: #71717a;
502
+ .jux-card-title {
503
+ flex: 1;
504
+ font-size: 1.125rem;
505
+ font-weight: 600;
506
+ color: hsl(var(--foreground));
1437
507
  }
1438
508
 
1439
- .dark .jux-table-filter {
1440
- border-color: #27272a;
1441
- background: #09090b;
1442
- color: #fafafa;
509
+ .jux-card-body {
510
+ padding: 1.5rem;
511
+ font-size: 0.875rem;
512
+ color: hsl(var(--muted-foreground));
1443
513
  }
1444
514
 
1445
- .dark .jux-table-filter::placeholder {
1446
- color: #52525b;
1447
- }
515
+ /* ═══════════════════════════════════════════════════════════════════
516
+ * DROPDOWN MENU
517
+ * ═══════════════════════════════════════════════════════════════════ */
1448
518
 
1449
- .dark .jux-table-filter:focus {
1450
- border-color: #fafafa;
1451
- box-shadow: 0 0 0 2px #fafafa, 0 0 0 4px rgba(250, 250, 250, 0.1);
1452
- }
519
+ .jux-dmenu-wrapper { position: relative; display: inline-block; }
1453
520
 
1454
- .dark .jux-table-pagination button {
1455
- border-color: #27272a;
1456
- background: #09090b;
1457
- color: #fafafa;
521
+ .jux-dmenu-menu {
522
+ position: absolute;
523
+ top: calc(100% + 4px);
524
+ left: 0;
525
+ min-width: 220px;
526
+ padding: 4px;
527
+ border-radius: 0.5rem;
528
+ border: 1px solid hsl(var(--border));
529
+ background: hsl(var(--background));
530
+ box-shadow: 0 4px 12px rgba(0, 0, 0, 0.08);
531
+ z-index: 100;
532
+ display: none;
533
+ flex-direction: column;
1458
534
  }
1459
535
 
1460
- .dark .jux-table-pagination button:hover:not(:disabled) {
1461
- background: #27272a;
536
+ .jux-dmenu-item {
537
+ display: flex;
538
+ align-items: center;
539
+ justify-content: space-between;
540
+ width: 100%;
541
+ padding: 6px 8px;
542
+ font-size: 0.875rem;
543
+ border-radius: 4px;
544
+ border: none;
545
+ background: transparent;
546
+ color: hsl(var(--foreground));
547
+ cursor: pointer;
548
+ transition: background 0.1s;
1462
549
  }
1463
550
 
1464
- .dark .jux-table-pagination span {
1465
- color: #71717a;
551
+ .jux-dmenu-item:hover {
552
+ background: hsl(var(--accent));
1466
553
  }
1467
554
 
1468
- .dark .jux-table-hoverable tbody tr:hover {
1469
- background-color: #27272a !important;
555
+ .jux-dmenu-sep {
556
+ height: 1px;
557
+ margin: 4px -4px;
558
+ background: hsl(var(--border));
1470
559
  }
1471
560
 
1472
- .dark .jux-table-row-selected {
1473
- background-color: #172554 !important;
561
+ /* ═══════════════════════════════════════════════════════════════════
562
+ * UTILITIES
563
+ * ═══════════════════════════════════════════════════════════════════ */
564
+
565
+ hr, .jux-hr {
566
+ margin: 1.5rem 0;
567
+ border: none;
568
+ border-top: 1px solid hsl(var(--border));
1474
569
  }
1475
570
 
1476
- .dark .jux-table-row-selected:hover {
1477
- background-color: #1e3a5f !important;
571
+ code, .jux-inline-code {
572
+ border-radius: 0.25rem;
573
+ background: hsl(var(--muted));
574
+ padding: 0.15rem 0.3rem;
575
+ font-family: ui-monospace, monospace;
576
+ font-size: 0.875rem;
577
+ font-weight: 600;
1478
578
  }