juxscript 1.1.171 → 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 +374 -1256
  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
3
  /* ═══════════════════════════════════════════════════════════════════
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
- }
4
+ * DESIGN TOKENS (Shadcn Variables)
5
+ * ═══════════════════════════════════════════════════════════════════ */
928
6
 
929
- /* Individual Menu Item Container */
930
- .jux-menu-item-wrapper {
931
- display: flex;
932
- flex-direction: column;
933
- width: 100%;
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%;
934
54
  }
935
55
 
936
- /* Menu Link/Item */
937
- .jux-menu-link,
938
- .jux-menu-item {
56
+ /* ═══════════════════════════════════════════════════════════════════
57
+ * BASE INPUT STYLING (Shared across all inputs)
58
+ * ═══════════════════════════════════════════════════════════════════ */
59
+
60
+ .jux-input-element,
61
+ .jux-table-filter,
62
+ .jux-dataframe-filter-input {
939
63
  display: flex;
940
- align-items: center;
941
- gap: 0.75rem;
64
+ height: 2.5rem;
65
+ width: 100%;
66
+ border-radius: var(--radius);
67
+ border: 1px solid hsl(var(--input));
68
+ background: hsl(var(--background));
942
69
  padding: 0.5rem 0.75rem;
943
- border-radius: 0.375rem;
944
70
  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;
71
+ color: hsl(var(--foreground));
72
+ outline: none !important;
73
+ transition: all 0.15s ease;
74
+ box-sizing: border-box;
954
75
  }
955
76
 
956
- .jux-menu-link:hover,
957
- .jux-menu-item:hover {
958
- background-color: #f4f4f5;
77
+ .jux-input-element::placeholder,
78
+ .jux-table-filter::placeholder,
79
+ .jux-dataframe-filter-input::placeholder {
80
+ color: hsl(var(--muted-foreground));
959
81
  }
960
82
 
961
- .jux-menu-link-active,
962
- .jux-menu-item-active {
963
- background-color: #f4f4f5;
964
- font-weight: 600;
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;
965
88
  }
966
89
 
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;
90
+ .jux-input-element:disabled {
91
+ cursor: not-allowed;
92
+ opacity: 0.5;
973
93
  }
974
94
 
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
- }
95
+ /* ═══════════════════════════════════════════════════════════════════
96
+ * BUTTON BASE (Single source of truth)
97
+ * ═══════════════════════════════════════════════════════════════════ */
984
98
 
985
- /* Icon */
986
- .jux-menu-icon {
987
- width: 1.25rem;
988
- height: 1.25rem;
989
- flex-shrink: 0;
990
- 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;
991
106
  align-items: center;
992
107
  justify-content: center;
993
- }
994
-
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;
1003
- }
1004
-
1005
- .jux-menu-item-expanded .jux-menu-chevron {
1006
- transform: rotate(90deg);
1007
- }
1008
-
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;
1018
- }
1019
-
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
- }
1025
-
1026
- /* User Section at Bottom */
1027
- .jux-menu-user {
1028
- display: flex;
1029
- 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;
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,53 +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%;
256
+ margin-bottom: 0.75rem;
1166
257
  }
1167
258
 
1168
259
  .jux-dataframe-filter-icon {
@@ -1170,10 +261,11 @@ button.jux-button:active,
1170
261
  left: 0.75rem;
1171
262
  top: 50%;
1172
263
  transform: translateY(-50%);
1173
- color: #a1a1aa;
264
+ color: hsl(var(--muted-foreground));
1174
265
  pointer-events: none;
1175
266
  display: flex;
1176
267
  align-items: center;
268
+ z-index: 1;
1177
269
  }
1178
270
 
1179
271
  .jux-dataframe-filter-input {
@@ -1181,68 +273,21 @@ button.jux-button:active,
1181
273
  }
1182
274
 
1183
275
  /* ═══════════════════════════════════════════════════════════════════
1184
- * FILE UPLOAD (Shadcn styled)
276
+ * FILE UPLOAD
1185
277
  * ═══════════════════════════════════════════════════════════════════ */
1186
278
 
1187
- .jux-fileupload {
1188
- gap: 0.5rem;
1189
- }
1190
-
1191
- .jux-fileupload-button-container {
1192
- display: flex;
1193
- align-items: center;
1194
- gap: 0.5rem;
1195
- }
1196
-
1197
- .jux-fileupload-button {
1198
- display: inline-flex;
1199
- align-items: center;
1200
- justify-content: center;
1201
- white-space: nowrap;
1202
- border-radius: 0.375rem;
1203
- font-size: 0.875rem;
1204
- font-weight: 500;
1205
- height: 2.5rem;
1206
- padding: 0 1rem;
1207
- cursor: pointer;
1208
- transition: all 0.15s ease;
1209
- border: 1px solid #e4e4e7;
1210
- background: #ffffff;
1211
- color: #09090b;
1212
- }
1213
-
1214
- .jux-fileupload-button:hover {
1215
- background: #f4f4f5;
1216
- color: #18181b;
1217
- }
1218
-
1219
- .jux-fileupload-button:disabled {
1220
- pointer-events: none;
1221
- opacity: 0.5;
1222
- }
1223
-
1224
- .jux-fileupload-icon {
1225
- display: flex;
1226
- align-items: center;
1227
- color: #71717a;
1228
- }
1229
-
1230
- .jux-fileupload-list {
1231
- display: flex;
1232
- flex-direction: column;
1233
- gap: 0.25rem;
1234
- }
279
+ .jux-fileupload { gap: 0.5rem; }
1235
280
 
1236
281
  .jux-fileupload-item {
1237
282
  display: flex;
1238
283
  align-items: center;
1239
284
  gap: 0.5rem;
1240
285
  padding: 0.375rem 0.75rem;
1241
- background: #f4f4f5;
1242
- border: 1px solid #e4e4e7;
1243
- border-radius: 0.375rem;
286
+ background: hsl(var(--muted));
287
+ border: 1px solid hsl(var(--border));
288
+ border-radius: var(--radius);
1244
289
  font-size: 0.8125rem;
1245
- color: #09090b;
290
+ color: hsl(var(--foreground));
1246
291
  }
1247
292
 
1248
293
  .jux-fileupload-filename {
@@ -1254,60 +299,55 @@ button.jux-button:active,
1254
299
  }
1255
300
 
1256
301
  .jux-fileupload-filesize {
1257
- color: #a1a1aa;
302
+ color: hsl(var(--muted-foreground));
1258
303
  font-size: 0.75rem;
1259
- flex-shrink: 0;
1260
304
  }
1261
305
 
1262
306
  .jux-fileupload-remove {
1263
307
  background: transparent;
1264
308
  border: none;
1265
- color: #a1a1aa;
309
+ color: hsl(var(--muted-foreground));
1266
310
  cursor: pointer;
1267
- font-size: 1rem;
1268
311
  padding: 0 0.25rem;
1269
- line-height: 1;
1270
312
  border-radius: 0.25rem;
1271
313
  transition: all 0.15s;
1272
314
  }
1273
315
 
1274
316
  .jux-fileupload-remove:hover {
1275
- color: #ef4444;
1276
- background: #fef2f2;
317
+ color: hsl(var(--destructive));
318
+ background: hsl(var(--destructive) / 0.1);
1277
319
  }
1278
320
 
1279
321
  /* ═══════════════════════════════════════════════════════════════════
1280
- * TABLE ENHANCEMENTS
322
+ * TABLE
1281
323
  * ═══════════════════════════════════════════════════════════════════ */
1282
324
 
1283
- .jux-table-wrapper {
325
+ .jux-table-wrapper { width: 100%; overflow-x: auto; }
326
+
327
+ .jux-table {
1284
328
  width: 100%;
1285
- overflow-x: auto;
329
+ border-collapse: collapse;
1286
330
  }
1287
331
 
1288
- .jux-table-filter {
1289
- display: flex;
1290
- height: 2.5rem;
1291
- width: 100%;
1292
- border-radius: 0.375rem;
1293
- border: 1px solid #e4e4e7;
1294
- background: #ffffff;
1295
- padding: 0.5rem 0.75rem;
1296
- font-size: 0.875rem;
1297
- color: #09090b;
1298
- outline: none;
1299
- transition: all 0.15s ease;
1300
- box-sizing: border-box;
1301
- 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;
1302
341
  }
1303
342
 
1304
- .jux-table-filter::placeholder {
1305
- color: #a1a1aa;
343
+ .jux-table th { font-weight: 700; }
344
+
345
+ .jux-table-hoverable tbody tr {
346
+ transition: background-color 0.1s ease;
1306
347
  }
1307
348
 
1308
- .jux-table-filter:focus {
1309
- border-color: #18181b;
1310
- 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;
1311
351
  }
1312
352
 
1313
353
  .jux-table-pagination {
@@ -1319,142 +359,220 @@ button.jux-button:active,
1319
359
  padding: 0.5rem 0;
1320
360
  }
1321
361
 
1322
- .jux-table-pagination button {
1323
- 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;
1324
379
  align-items: center;
1325
380
  justify-content: center;
1326
- white-space: nowrap;
1327
- border-radius: 0.375rem;
1328
- font-size: 0.875rem;
1329
- font-weight: 500;
1330
- height: 2.25rem;
1331
- padding: 0 0.875rem;
1332
- cursor: pointer;
1333
- transition: all 0.15s ease;
1334
- border: 1px solid #e4e4e7;
1335
- background: #ffffff;
1336
- color: #09090b;
1337
381
  }
1338
382
 
1339
- .jux-table-pagination button:hover:not(:disabled) {
1340
- background: #f4f4f5;
1341
- 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;
1342
396
  }
1343
397
 
1344
- .jux-table-pagination button:disabled {
1345
- pointer-events: none;
1346
- opacity: 0.5;
398
+ .jux-modal-header {
399
+ display: flex;
400
+ align-items: flex-start;
401
+ gap: 0.75rem;
1347
402
  }
1348
403
 
1349
- .jux-table-pagination span {
1350
- font-size: 0.875rem;
1351
- color: #71717a;
1352
- 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));
1353
409
  }
1354
410
 
1355
- /* Table hoverable rows */
1356
- .jux-table-hoverable tbody tr {
1357
- 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;
1358
415
  }
1359
416
 
1360
- .jux-table-hoverable tbody tr:hover {
1361
- background-color: #f4f4f5 !important;
417
+ .jux-modal-footer {
418
+ display: flex;
419
+ justify-content: flex-end;
420
+ gap: 0.5rem;
1362
421
  }
1363
422
 
1364
- /* Selection highlight override for shadcn */
1365
- .jux-table-row-selected {
1366
- 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;
1367
432
  }
1368
433
 
1369
- .jux-table-row-selected:hover {
1370
- background-color: #dbeafe !important;
434
+ .jux-modal-close:hover {
435
+ color: hsl(var(--foreground));
1371
436
  }
1372
437
 
1373
438
  /* ═══════════════════════════════════════════════════════════════════
1374
- * DARK MODE - DATAFRAME / FILEUPLOAD / TABLE
439
+ * TABS
1375
440
  * ═══════════════════════════════════════════════════════════════════ */
1376
441
 
1377
- .dark .jux-dataframe-status {
1378
- background: #18181b;
1379
- border-color: #27272a;
1380
- 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;
1381
450
  }
1382
451
 
1383
- .dark .jux-dataframe-status-success {
1384
- background: #052e16;
1385
- border-color: #166534;
1386
- 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;
1387
466
  }
1388
467
 
1389
- .dark .jux-dataframe-status-loading {
1390
- background: #422006;
1391
- border-color: #a16207;
1392
- 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);
1393
472
  }
1394
473
 
1395
- .dark .jux-dataframe-status-error {
1396
- background: #450a0a;
1397
- border-color: #991b1b;
1398
- 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;
1399
479
  }
1400
480
 
1401
- .dark .jux-fileupload-button {
1402
- border-color: #27272a;
1403
- background: #09090b;
1404
- color: #fafafa;
1405
- }
481
+ /* ═══════════════════════════════════════════════════════════════════
482
+ * CARD
483
+ * ═══════════════════════════════════════════════════════════════════ */
1406
484
 
1407
- .dark .jux-fileupload-button:hover {
1408
- 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;
1409
491
  }
1410
492
 
1411
- .dark .jux-fileupload-item {
1412
- background: #18181b;
1413
- border-color: #27272a;
1414
- 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));
1415
500
  }
1416
501
 
1417
- .dark .jux-fileupload-filesize {
1418
- color: #71717a;
502
+ .jux-card-title {
503
+ flex: 1;
504
+ font-size: 1.125rem;
505
+ font-weight: 600;
506
+ color: hsl(var(--foreground));
1419
507
  }
1420
508
 
1421
- .dark .jux-table-filter {
1422
- border-color: #27272a;
1423
- background: #09090b;
1424
- color: #fafafa;
509
+ .jux-card-body {
510
+ padding: 1.5rem;
511
+ font-size: 0.875rem;
512
+ color: hsl(var(--muted-foreground));
1425
513
  }
1426
514
 
1427
- .dark .jux-table-filter::placeholder {
1428
- color: #52525b;
1429
- }
515
+ /* ═══════════════════════════════════════════════════════════════════
516
+ * DROPDOWN MENU
517
+ * ═══════════════════════════════════════════════════════════════════ */
1430
518
 
1431
- .dark .jux-table-filter:focus {
1432
- border-color: #fafafa;
1433
- box-shadow: 0 0 0 2px #fafafa, 0 0 0 4px rgba(250, 250, 250, 0.1);
1434
- }
519
+ .jux-dmenu-wrapper { position: relative; display: inline-block; }
1435
520
 
1436
- .dark .jux-table-pagination button {
1437
- border-color: #27272a;
1438
- background: #09090b;
1439
- 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;
1440
534
  }
1441
535
 
1442
- .dark .jux-table-pagination button:hover:not(:disabled) {
1443
- 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;
1444
549
  }
1445
550
 
1446
- .dark .jux-table-pagination span {
1447
- color: #71717a;
551
+ .jux-dmenu-item:hover {
552
+ background: hsl(var(--accent));
1448
553
  }
1449
554
 
1450
- .dark .jux-table-hoverable tbody tr:hover {
1451
- background-color: #27272a !important;
555
+ .jux-dmenu-sep {
556
+ height: 1px;
557
+ margin: 4px -4px;
558
+ background: hsl(var(--border));
1452
559
  }
1453
560
 
1454
- .dark .jux-table-row-selected {
1455
- 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));
1456
569
  }
1457
570
 
1458
- .dark .jux-table-row-selected:hover {
1459
- 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;
1460
578
  }