juxscript 1.0.114 → 1.0.116

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.
package/create/style.css CHANGED
@@ -1,1952 +1,57 @@
1
- /**
2
- * Default Preset - Grid Layout System
3
- * Comprehensive component styling
4
- */
5
-
6
- /* ============================================
7
- CSS VARIABLES
8
- ============================================ */
1
+ /** Base */
9
2
  :root {
10
3
  /* Typography */
11
- --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
12
- --font-family-mono: 'SF Mono', Monaco, Menlo, 'Courier New', monospace;
13
-
14
- /* Spacing */
4
+ --font-family-base: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Inter', sans-serif;
5
+ --font-size-sm: 0.875rem;
6
+ --font-size-base: 1rem;
7
+ --font-size-lg: 1.125rem;
8
+ --line-height-normal: 1.6;
9
+
10
+ /* Spacing Scale */
15
11
  --space-xs: 0.25rem;
16
12
  --space-sm: 0.5rem;
17
- --space-md: 0.75rem;
18
- --space-lg: 1rem;
19
- --space-xl: 1.5rem;
20
- --space-2xl: 2rem;
21
- --space-3xl: 3rem;
22
-
23
- /* Colors - Light Theme */
24
- --color-text-primary: #111111;
25
- --color-text-secondary: #65676b;
26
- --color-text-tertiary: #8b8d94;
27
-
28
- --color-background: #ffffff;
29
- --color-surface-base: #f7f7f7;
30
- --color-surface-elevated: #ffffff;
31
- --color-surface-hover: #f1f1f1;
32
- --color-surface-active: #e8e8e8;
33
-
34
- --color-border: #e8e8e8;
35
- --color-border-hover: #d1d1d1;
36
-
37
- --color-brand: #0ea5e9;
38
- --color-brand-hover: #0284c7;
39
-
40
- /* Borders & Radius */
41
- --border-width: 1px;
42
- --radius-sm: 3px;
43
- --radius-md: 6px;
44
- --radius-lg: 8px;
45
- --radius-full: 9999px;
46
-
47
- /* Transitions */
48
- --transition-base: 150ms ease;
49
- --transition-fast: 100ms ease;
50
- }
51
-
52
- /* ============================================
53
- GLOBAL RESET
54
- ============================================ */
55
- * {
56
- margin: 0;
57
- padding: 0;
58
- box-sizing: border-box;
59
- }
60
-
61
- body {
62
- font-family: var(--font-family-base);
63
- color: var(--color-text-primary);
64
- background: var(--color-background);
65
- -webkit-font-smoothing: antialiased;
66
- font-size: 14px;
67
- line-height: 1.5;
68
- }
69
-
70
- /* ============================================
71
- GRID LAYOUT
72
- ============================================ */
73
- #app {
74
- display: grid;
75
- grid-template-columns: auto 1fr;
76
- grid-template-rows: auto 1fr auto;
77
- grid-template-areas:
78
- "header header"
79
- "sidebar main"
80
- "footer footer";
81
- width: 100vw;
82
- height: 100vh;
83
- overflow: hidden;
84
- }
85
-
86
- /* ============================================
87
- HEADER
88
- ============================================ */
89
- #appheader {
90
- grid-area: header;
91
- background: var(--color-surface-elevated);
92
- border-bottom: var(--border-width) solid var(--color-border);
93
- display: flex;
94
- align-items: center;
95
- padding: 0 var(--space-2xl);
96
- height: 48px;
97
- z-index: 100;
98
- }
99
-
100
- #appheader-content {
101
- display: flex;
102
- align-items: center;
103
- justify-content: space-between;
104
- width: 100%;
105
- gap: var(--space-xl);
106
- }
107
-
108
- #appheader-logo {
109
- display: flex;
110
- align-items: center;
111
- gap: var(--space-md);
112
- font-weight: 600;
113
- cursor: pointer;
114
- }
115
-
116
- #appheader-logo h1 {
117
- font-size: 1.125rem;
118
- font-weight: 700;
119
- margin: 0;
120
- line-height: 1;
121
- letter-spacing: -0.02em;
122
- }
123
-
124
- #appheader-nav {
125
- flex: 1;
126
- display: flex;
127
- align-items: center;
128
- gap: var(--space-sm);
129
- }
130
-
131
- #appheader-actions {
132
- display: flex;
133
- align-items: center;
134
- gap: var(--space-sm);
135
- }
136
-
137
- /* ============================================
138
- SIDEBAR
139
- ============================================ */
140
- #appaside {
141
- grid-area: sidebar;
142
- width: 240px;
143
- background: var(--color-surface-base);
144
- border-right: var(--border-width) solid var(--color-border);
145
- overflow-y: auto;
146
- padding: var(--space-lg);
147
- }
148
-
149
- /* ============================================
150
- MAIN CONTENT
151
- ============================================ */
152
- #appmain {
153
- grid-area: main;
154
- background: var(--color-background);
155
- overflow-y: auto;
156
- overflow-x: hidden;
157
- }
158
-
159
- #appmain-content {
160
- max-width: 900px;
161
- margin: 0 auto;
162
- padding: var(--space-3xl) var(--space-2xl);
163
- }
164
-
165
- /* ============================================
166
- FOOTER
167
- ============================================ */
168
- #appfooter {
169
- grid-area: footer;
170
- background: var(--color-surface-elevated);
171
- border-top: var(--border-width) solid var(--color-border);
172
- padding: var(--space-md) var(--space-2xl);
173
- font-size: 0.8125rem;
174
- color: var(--color-text-tertiary);
175
- min-height: 40px;
176
- display: flex;
177
- align-items: center;
178
- }
179
-
180
- #appfooter-content {
181
- display: flex;
182
- align-items: center;
183
- gap: var(--space-lg);
184
- }
185
-
186
- /* ============================================
187
- TYPOGRAPHY
188
- ============================================ */
189
- h1, h2, h3, h4, h5, h6 {
190
- font-weight: 600;
191
- line-height: 1.3;
192
- color: var(--color-text-primary);
193
- margin: 0;
194
- }
195
-
196
- h1 { font-size: 2rem; }
197
- h2 { font-size: 1.5rem; }
198
- h3 { font-size: 1.125rem; margin-bottom: var(--space-md); }
199
- h4 { font-size: 1rem; }
200
- h5 { font-size: 0.875rem; }
201
- h6 { font-size: 0.75rem; }
202
-
203
- p {
204
- line-height: 1.6;
205
- color: var(--color-text-secondary);
206
- margin: 0;
207
- }
208
-
209
- /* ============================================
210
- HEADINGS
211
- ============================================ */
212
- .jux-heading {
213
- font-weight: 600;
214
- line-height: 1.3;
215
- color: var(--color-text-primary);
216
- margin: 0 0 var(--space-md) 0;
217
- }
218
-
219
- .jux-heading-1 { font-size: 2rem; }
220
- .jux-heading-2 { font-size: 1.5rem; }
221
- .jux-heading-3 { font-size: 1.125rem; font-weight: 700; }
222
- .jux-heading-4 { font-size: 1rem; }
223
- .jux-heading-5 { font-size: 0.875rem; }
224
- .jux-heading-6 { font-size: 0.75rem; }
225
-
226
- /* ============================================
227
- HERO COMPONENT
228
- ============================================ */
229
- .jux-hero {
230
- padding: var(--space-3xl) 0;
231
- margin-bottom: var(--space-2xl);
232
- }
233
-
234
- .jux-hero-centered {
235
- text-align: center;
236
- }
237
-
238
- .jux-hero-content {
239
- display: flex;
240
- flex-direction: column;
241
- gap: var(--space-lg);
242
- }
243
-
244
- .jux-hero-centered .jux-hero-content {
245
- align-items: center;
246
- }
247
-
248
- .jux-hero-title {
249
- font-size: 2.5rem;
250
- font-weight: 700;
251
- line-height: 1.2;
252
- margin: 0;
253
- letter-spacing: -0.02em;
254
- color: var(--color-text-primary);
255
- }
256
-
257
- .jux-hero-subtitle {
258
- font-size: 1.25rem;
259
- line-height: 1.6;
260
- color: var(--color-text-secondary);
261
- margin: 0;
262
- }
263
-
264
- .jux-hero-body {
265
- font-size: 1rem;
266
- line-height: 1.6;
267
- color: var(--color-text-secondary);
268
- max-width: 600px;
269
- }
270
-
271
- .jux-hero-cta {
272
- display: inline-flex;
273
- align-items: center;
274
- justify-content: center;
275
- padding: var(--space-md) var(--space-2xl);
276
- font-size: 1rem;
277
- font-weight: 600;
278
- color: white;
279
- background: var(--color-brand);
280
- border-radius: var(--radius-md);
281
- text-decoration: none;
282
- transition: background-color var(--transition-base);
283
- }
284
-
285
- .jux-hero-cta:hover {
286
- background: var(--color-brand-hover);
287
- }
288
-
289
- /* ============================================
290
- ALERT COMPONENT
291
- ============================================ */
292
- .jux-alert {
293
- display: flex;
294
- align-items: flex-start;
295
- gap: var(--space-md);
296
- padding: var(--space-lg);
297
- border-radius: var(--radius-lg);
298
- margin-bottom: var(--space-lg);
299
- position: relative;
300
- animation: slideIn 0.3s ease-out;
301
- }
302
-
303
- @keyframes slideIn {
304
- from {
305
- opacity: 0;
306
- transform: translateY(-10px);
307
- }
308
- to {
309
- opacity: 1;
310
- transform: translateY(0);
311
- }
312
- }
313
-
314
- .jux-alert-info {
315
- background: #dbeafe;
316
- border-left: 4px solid #3b82f6;
317
- color: #1e40af;
318
- }
319
-
320
- .jux-alert-success {
321
- background: #d1fae5;
322
- border-left: 4px solid #10b981;
323
- color: #065f46;
324
- }
325
-
326
- .jux-alert-warning {
327
- background: #fef3c7;
328
- border-left: 4px solid #f59e0b;
329
- color: #92400e;
330
- }
331
-
332
- .jux-alert-error {
333
- background: #fee2e2;
334
- border-left: 4px solid #ef4444;
335
- color: #991b1b;
336
- }
337
-
338
- .jux-alert-content {
339
- flex: 1;
340
- font-size: 0.875rem;
341
- line-height: 1.5;
342
- }
343
-
344
- .jux-alert-close {
345
- flex-shrink: 0;
346
- background: transparent;
347
- border: none;
348
- font-size: 1.25rem;
349
- cursor: pointer;
350
- opacity: 0.5;
351
- transition: opacity var(--transition-base);
352
- padding: 0;
353
- width: 20px;
354
- height: 20px;
355
- display: flex;
356
- align-items: center;
357
- justify-content: center;
358
- color: inherit;
359
- }
360
-
361
- .jux-alert-close:hover {
362
- opacity: 1;
363
- }
364
-
365
- /* ============================================
366
- BADGE COMPONENT
367
- ============================================ */
368
- .jux-badge {
369
- display: inline-flex;
370
- align-items: center;
371
- padding: var(--space-xs) var(--space-md);
372
- font-size: 0.75rem;
373
- font-weight: 600;
374
- line-height: 1;
375
- text-align: center;
376
- white-space: nowrap;
377
- border-radius: var(--radius-sm);
378
- transition: all var(--transition-base);
379
- }
380
-
381
- .jux-badge-default {
382
- color: #374151;
383
- background-color: #e5e7eb;
384
- }
385
-
386
- .jux-badge-success {
387
- color: #065f46;
388
- background-color: #d1fae5;
389
- }
390
-
391
- .jux-badge-warning {
392
- color: #92400e;
393
- background-color: #fef3c7;
394
- }
395
-
396
- .jux-badge-error {
397
- color: #991b1b;
398
- background-color: #fee2e2;
399
- }
400
-
401
- .jux-badge-info {
402
- color: #1e40af;
403
- background-color: #dbeafe;
404
- }
405
-
406
- /* ============================================
407
- BUTTON COMPONENT
408
- ============================================ */
409
- .jux-button {
410
- display: inline-flex;
411
- align-items: center;
412
- justify-content: center;
413
- padding: 0 var(--space-xl);
414
- height: 36px;
415
- font-size: 0.875rem;
416
- font-weight: 500;
417
- font-family: var(--font-family-base);
418
- color: white;
419
- background: var(--color-brand);
420
- border: none;
421
- border-radius: var(--radius-md);
422
- cursor: pointer;
423
- transition: background-color var(--transition-base), transform var(--transition-fast);
424
- user-select: none;
425
- white-space: nowrap;
426
- }
427
-
428
- .jux-button:hover {
429
- background: var(--color-brand-hover);
430
- }
431
-
432
- .jux-button:active {
433
- transform: scale(0.98);
434
- }
435
-
436
- .jux-button:disabled {
437
- opacity: 0.5;
438
- cursor: not-allowed;
439
- }
440
-
441
- .jux-button-primary {
442
- background: var(--color-brand);
443
- }
444
-
445
- .jux-button-primary:hover {
446
- background: var(--color-brand-hover);
447
- }
448
-
449
- .jux-button-secondary {
450
- background: var(--color-surface-hover);
451
- color: var(--color-text-primary);
452
- border: var(--border-width) solid var(--color-border);
453
- }
454
-
455
- .jux-button-secondary:hover {
456
- background: var(--color-surface-active);
457
- }
458
-
459
- .jux-button-small {
460
- height: 28px;
461
- padding: 0 var(--space-md);
462
- font-size: 0.8125rem;
463
- }
464
-
465
- .jux-button-medium {
466
- height: 36px;
467
- }
468
-
469
- .jux-button-large {
470
- height: 44px;
471
- padding: 0 var(--space-2xl);
472
- font-size: 1rem;
473
- }
474
-
475
- /* ============================================
476
- CARD COMPONENT
477
- ============================================ */
478
- .jux-card {
479
- background: var(--color-surface-elevated);
480
- border: var(--border-width) solid var(--color-border);
481
- border-radius: var(--radius-lg);
482
- overflow: hidden;
483
- margin-bottom: var(--space-lg);
484
- }
485
-
486
- .jux-card-default {
487
- /* Base card styles */
488
- }
489
-
490
- .jux-card-header {
491
- padding: var(--space-lg) var(--space-xl);
492
- border-bottom: var(--border-width) solid var(--color-border);
493
- background: var(--color-surface-base);
494
- }
495
-
496
- .jux-card-title {
497
- font-size: 1.125rem;
498
- font-weight: 600;
499
- color: var(--color-text-primary);
500
- margin: 0;
501
- }
502
-
503
- .jux-card-body {
504
- padding: var(--space-xl);
505
- color: var(--color-text-secondary);
506
- line-height: 1.6;
507
- }
508
-
509
- .jux-card-footer {
510
- padding: var(--space-lg) var(--space-xl);
511
- border-top: var(--border-width) solid var(--color-border);
512
- background: var(--color-surface-base);
513
- font-size: 0.875rem;
514
- color: var(--color-text-tertiary);
515
- }
516
-
517
- /* ============================================
518
- CHECKBOX COMPONENT
519
- ============================================ */
520
- .jux-checkbox {
521
- margin-bottom: var(--space-md);
522
- }
523
-
524
- .jux-checkbox-container {
525
- display: inline-flex;
526
- align-items: center;
527
- gap: var(--space-md);
528
- cursor: pointer;
529
- user-select: none;
530
- }
531
-
532
- .jux-checkbox-input {
533
- position: absolute;
534
- opacity: 0;
535
- width: 0;
536
- height: 0;
537
- }
538
-
539
- .jux-checkbox-checkmark {
540
- width: 20px;
541
- height: 20px;
542
- border: 2px solid var(--color-border);
543
- border-radius: var(--radius-sm);
544
- display: flex;
545
- align-items: center;
546
- justify-content: center;
547
- transition: all var(--transition-base);
548
- background: var(--color-surface-elevated);
549
- }
550
-
551
- .jux-checkbox-input:checked + .jux-checkbox-checkmark {
552
- background: var(--color-brand);
553
- border-color: var(--color-brand);
554
- }
555
-
556
- .jux-checkbox-checkmark svg {
557
- width: 14px;
558
- height: 14px;
559
- fill: none;
560
- stroke: white;
561
- stroke-width: 2;
562
- opacity: 0;
563
- transition: opacity var(--transition-base);
564
- }
565
-
566
- .jux-checkbox-input:checked + .jux-checkbox-checkmark svg {
567
- opacity: 1;
568
- }
569
-
570
- .jux-checkbox-label-text {
571
- font-size: 0.875rem;
572
- color: var(--color-text-primary);
573
- }
574
-
575
- .jux-input-error {
576
- color: #ef4444;
577
- font-size: 0.75rem;
578
- margin-top: var(--space-xs);
579
- }
580
-
581
- /* ============================================
582
- CODE COMPONENT
583
- ============================================ */
584
- .jux-code {
585
- background: #1e1e1e;
586
- border: var(--border-width) solid #2d2d2d;
587
- border-radius: var(--radius-lg);
588
- padding: var(--space-lg);
589
- margin: var(--space-xl) 0;
590
- overflow-x: auto;
591
- }
592
-
593
- .jux-code pre {
594
- margin: 0;
595
- font-family: var(--font-family-mono);
596
- font-size: 0.8125rem;
597
- line-height: 1.6;
598
- }
599
-
600
- .jux-code code {
601
- color: #d4d4d4;
602
- font-family: inherit;
603
- }
604
-
605
- /* ============================================
606
- CONTAINER COMPONENT
607
- ============================================ */
608
- .jux-container {
609
- display: block;
610
- }
611
-
612
- /* ============================================
613
- DATEPICKER COMPONENT
614
- ============================================ */
615
- .jux-datepicker {
616
- position: relative;
617
- }
618
-
619
- .jux-datepicker-container {
620
- position: relative;
621
- }
622
-
623
- .jux-datepicker-input {
624
- padding-left: var(--space-3xl);
625
- }
626
-
627
- /* ============================================
628
- DIVIDER COMPONENT
629
- ============================================ */
630
- .jux-divider {
631
- border: none;
632
- margin: var(--space-2xl) 0;
633
- }
634
-
635
- .jux-divider-default {
636
- border-top: var(--border-width) solid var(--color-border);
637
- }
638
-
639
- /* ============================================
640
- DROPDOWN COMPONENT
641
- ============================================ */
642
- .jux-dropdown {
643
- position: relative;
644
- display: inline-block;
645
- }
646
-
647
- .jux-dropdown-trigger {
648
- display: inline-flex;
649
- align-items: center;
650
- gap: var(--space-sm);
651
- padding: var(--space-sm) var(--space-lg);
652
- background: var(--color-surface-elevated);
653
- border: var(--border-width) solid var(--color-border);
654
- border-radius: var(--radius-md);
655
- cursor: pointer;
656
- font-size: 0.875rem;
657
- color: var(--color-text-primary);
658
- transition: background-color var(--transition-base);
659
- }
660
-
661
- .jux-dropdown-trigger:hover {
662
- background: var(--color-surface-hover);
663
- }
664
-
665
- .jux-dropdown-menu {
666
- position: absolute;
667
- top: 100%;
668
- margin-top: var(--space-xs);
669
- background: var(--color-surface-elevated);
670
- border: var(--border-width) solid var(--color-border);
671
- border-radius: var(--radius-md);
672
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1);
673
- min-width: 200px;
674
- z-index: 1000;
675
- display: none;
676
- }
677
-
678
- .jux-dropdown-menu.show {
679
- display: block;
680
- }
681
-
682
- .jux-dropdown-bottom-left {
683
- left: 0;
684
- }
685
-
686
- .jux-dropdown-item {
687
- width: 100%;
688
- padding: var(--space-md) var(--space-lg);
689
- background: transparent;
690
- border: none;
691
- text-align: left;
692
- cursor: pointer;
693
- font-size: 0.875rem;
694
- color: var(--color-text-primary);
695
- transition: background-color var(--transition-base);
696
- display: flex;
697
- align-items: center;
698
- gap: var(--space-md);
699
- }
700
-
701
- .jux-dropdown-item:hover {
702
- background: var(--color-surface-hover);
703
- }
704
-
705
- /* ============================================
706
- INPUT COMPONENT
707
- ============================================ */
708
- .jux-input {
709
- margin-bottom: var(--space-lg);
710
- }
711
-
712
- .jux-input-label {
713
- display: block;
714
- font-size: 0.875rem;
715
- font-weight: 500;
716
- color: var(--color-text-primary);
717
- margin-bottom: var(--space-sm);
718
- }
719
-
720
- .jux-input-container {
721
- position: relative;
722
- display: flex;
723
- align-items: center;
724
- }
725
-
726
- .jux-input-icon {
727
- position: absolute;
728
- left: var(--space-md);
729
- color: var(--color-text-tertiary);
730
- display: flex;
731
- align-items: center;
732
- pointer-events: none;
733
- }
734
-
735
- .jux-input-icon svg {
736
- width: 18px;
737
- height: 18px;
738
- }
739
-
740
- .jux-input-element {
741
- width: 100%;
742
- padding: var(--space-md);
743
- font-size: 0.875rem;
744
- color: var(--color-text-primary);
745
- background: var(--color-surface-elevated);
746
- border: var(--border-width) solid var(--color-border);
747
- border-radius: var(--radius-md);
748
- transition: border-color var(--transition-base), box-shadow var(--transition-base);
749
- font-family: var(--font-family-base);
750
- }
751
-
752
- .jux-input-element:focus {
753
- outline: none;
754
- border-color: var(--color-brand);
755
- box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.1);
756
- }
757
-
758
- /* ============================================
759
- FILE UPLOAD COMPONENT
760
- ============================================ */
761
- .jux-fileupload {
762
- margin-bottom: var(--space-lg);
763
- }
764
-
765
- .jux-fileupload-input {
766
- display: none;
767
- }
768
-
769
- .jux-fileupload-button-container {
770
- display: flex;
771
- flex-direction: column;
772
- align-items: center;
773
- gap: var(--space-md);
774
- padding: var(--space-3xl);
775
- border: 2px dashed var(--color-border);
776
- border-radius: var(--radius-lg);
777
- cursor: pointer;
778
- transition: border-color var(--transition-base), background-color var(--transition-base);
779
- }
780
-
781
- .jux-fileupload-button-container:hover {
782
- border-color: var(--color-brand);
783
- background: var(--color-surface-base);
784
- }
785
-
786
- .jux-fileupload-icon svg {
787
- width: 48px;
788
- height: 48px;
789
- color: var(--color-text-tertiary);
790
- }
791
-
792
- .jux-fileupload-button {
793
- padding: var(--space-sm) var(--space-xl);
794
- background: var(--color-brand);
795
- color: white;
796
- border: none;
797
- border-radius: var(--radius-md);
798
- cursor: pointer;
799
- font-size: 0.875rem;
800
- font-weight: 500;
801
- transition: background-color var(--transition-base);
802
- }
803
-
804
- .jux-fileupload-button:hover {
805
- background: var(--color-brand-hover);
806
- }
807
-
808
- .jux-fileupload-list {
809
- margin-top: var(--space-lg);
810
- }
811
-
812
- /* ============================================
813
- KPI CARD COMPONENT
814
- ============================================ */
815
- .jux-kpicard {
816
- background: var(--color-surface-elevated);
817
- border: var(--border-width) solid var(--color-border);
818
- border-radius: var(--radius-lg);
819
- padding: var(--space-xl);
820
- margin-bottom: var(--space-lg);
821
- }
822
-
823
- .jux-kpicard-content {
824
- display: flex;
825
- flex-direction: column;
826
- gap: var(--space-sm);
827
- }
828
-
829
- .jux-kpicard-title {
830
- font-size: 0.875rem;
831
- color: var(--color-text-secondary);
832
- font-weight: 500;
833
- }
834
-
835
- .jux-kpicard-value {
836
- font-size: 2rem;
837
- font-weight: 700;
838
- color: var(--color-text-primary);
839
- line-height: 1;
840
- }
841
-
842
- .jux-kpicard-delta {
843
- display: flex;
844
- align-items: center;
845
- gap: var(--space-xs);
846
- font-size: 0.875rem;
847
- font-weight: 500;
848
- color: #10b981;
849
- }
850
-
851
- .jux-kpicard-delta svg {
852
- width: 16px;
853
- height: 16px;
854
- }
855
-
856
- /* ============================================
857
- LIST COMPONENT
858
- ============================================ */
859
- .jux-list-wrapper {
860
- border: var(--border-width) solid var(--color-border);
861
- border-radius: var(--radius-lg);
862
- overflow: hidden;
863
- margin-bottom: var(--space-lg);
864
- }
865
-
866
- .jux-list {
867
- list-style: none;
868
- margin: 0;
869
- padding: 0;
870
- }
871
-
872
- .jux-list-unordered {
873
- /* Base list styles */
874
- }
875
-
876
- .jux-list-item {
877
- padding: var(--space-lg);
878
- border-bottom: var(--border-width) solid var(--color-border);
879
- display: flex;
880
- align-items: center;
881
- gap: var(--space-md);
882
- }
883
-
884
- .jux-list-item:last-child {
885
- border-bottom: none;
886
- }
887
-
888
- .jux-list-item-hoverable {
889
- transition: background-color var(--transition-base);
890
- cursor: pointer;
891
- }
892
-
893
- .jux-list-item-hoverable:hover {
894
- background: var(--color-surface-hover);
895
- }
896
-
897
- .jux-list-item-content {
898
- flex: 1;
899
- }
900
-
901
- .jux-list-item-text {
902
- color: var(--color-text-secondary);
903
- font-size: 0.875rem;
904
- line-height: 1.5;
905
- }
906
-
907
- .jux-list-item-title {
908
- font-weight: 600;
909
- color: var(--color-text-primary);
910
- margin-bottom: var(--space-xs);
911
- }
912
-
913
- /* ============================================
914
- LOADING COMPONENT
915
- ============================================ */
916
- .jux-loading {
917
- display: flex;
918
- align-items: center;
919
- justify-content: center;
920
- padding: var(--space-xl);
921
- }
922
-
923
- .jux-loading-spinner {
924
- width: 40px;
925
- height: 40px;
926
- border: 3px solid var(--color-border);
927
- border-top-color: var(--color-brand);
928
- border-radius: 50%;
929
- animation: spin 0.8s linear infinite;
930
- }
931
-
932
- .jux-loading-lg .jux-loading-spinner {
933
- width: 48px;
934
- height: 48px;
935
- border-width: 4px;
936
- }
937
-
938
- @keyframes spin {
939
- to { transform: rotate(360deg); }
940
- }
941
-
942
- /* ============================================
943
- MENU COMPONENT
944
- ============================================ */
945
- .jux-menu {
946
- display: flex;
947
- gap: var(--space-xs);
948
- }
949
-
950
- .jux-menu-vertical {
951
- flex-direction: column;
952
- }
13
+ --space-md: 1rem;
14
+ --space-lg: 1.5rem;
15
+ --space-xl: 2rem;
953
16
 
954
- .jux-menu-item {
955
- /* Menu item wrapper */
956
- }
957
-
958
- .jux-menu-button {
959
- width: 100%;
960
- display: flex;
961
- align-items: center;
962
- gap: var(--space-md);
963
- padding: var(--space-md) var(--space-lg);
964
- background: transparent;
965
- border: none;
966
- text-align: left;
967
- cursor: pointer;
968
- font-size: 0.875rem;
969
- color: var(--color-text-primary);
970
- border-radius: var(--radius-md);
971
- transition: background-color var(--transition-base);
972
- }
973
-
974
- .jux-menu-button:hover {
975
- background: var(--color-surface-hover);
976
- }
977
-
978
- .jux-menu-label {
979
- flex: 1;
980
- }
981
-
982
- /* ============================================
983
- NAV COMPONENT
984
- ============================================ */
985
- .jux-nav {
986
- display: flex;
987
- gap: var(--space-sm);
988
- }
989
-
990
- .jux-nav-default {
991
- /* Base nav styles */
992
- }
993
-
994
- .jux-nav-items {
995
- display: flex;
996
- gap: var(--space-sm);
997
- align-items: center;
998
- }
999
-
1000
- .jux-nav-item-wrapper {
1001
- /* Nav item wrapper */
1002
- }
1003
-
1004
- .jux-nav-link {
1005
- padding: var(--space-sm) var(--space-lg);
1006
- color: var(--color-text-primary);
1007
- text-decoration: none;
1008
- font-size: 0.875rem;
1009
- border-radius: var(--radius-md);
1010
- transition: background-color var(--transition-base), color var(--transition-base);
1011
- }
1012
-
1013
- .jux-nav-link:hover {
1014
- background: var(--color-surface-hover);
1015
- color: var(--color-brand);
1016
- }
1017
-
1018
- /* ============================================
1019
- PARAGRAPH COMPONENT
1020
- ============================================ */
1021
- .jux-paragraph {
1022
- line-height: 1.6;
1023
- color: var(--color-text-secondary);
1024
- margin-bottom: var(--space-lg);
1025
- font-size: 0.875rem;
1026
- }
1027
-
1028
- /* ============================================
1029
- PROGRESS COMPONENT
1030
- ============================================ */
1031
- .jux-progress {
1032
- margin-bottom: var(--space-lg);
1033
- }
1034
-
1035
- .jux-progress-track {
1036
- width: 100%;
1037
- height: 8px;
1038
- background: var(--color-surface-base);
1039
- border-radius: var(--radius-full);
1040
- overflow: hidden;
1041
- }
1042
-
1043
- .jux-progress-bar {
1044
- height: 100%;
1045
- background: var(--color-brand);
1046
- transition: width 0.3s ease;
1047
- border-radius: var(--radius-full);
1048
- }
1049
-
1050
- .jux-progress-bar-success {
1051
- background: #10b981;
1052
- }
1053
-
1054
- .jux-progress-bar-warning {
1055
- background: #f59e0b;
1056
- }
1057
-
1058
- .jux-progress-bar-error {
1059
- background: #ef4444;
1060
- }
1061
-
1062
- /* ============================================
1063
- RADIO COMPONENT
1064
- ============================================ */
1065
- .jux-radio {
1066
- margin-bottom: var(--space-lg);
1067
- }
1068
-
1069
- .jux-radio-options {
1070
- display: flex;
1071
- gap: var(--space-lg);
1072
- }
1073
-
1074
- .jux-radio-vertical {
1075
- flex-direction: column;
1076
- gap: var(--space-md);
1077
- }
1078
-
1079
- .jux-radio-option {
1080
- display: flex;
1081
- align-items: center;
1082
- gap: var(--space-md);
1083
- cursor: pointer;
1084
- user-select: none;
1085
- }
1086
-
1087
- .jux-radio-input {
1088
- position: absolute;
1089
- opacity: 0;
1090
- width: 0;
1091
- height: 0;
1092
- }
1093
-
1094
- .jux-radio-mark {
1095
- width: 20px;
1096
- height: 20px;
1097
- border: 2px solid var(--color-border);
1098
- border-radius: 50%;
1099
- display: flex;
1100
- align-items: center;
1101
- justify-content: center;
1102
- transition: all var(--transition-base);
1103
- background: var(--color-surface-elevated);
1104
- }
1105
-
1106
- .jux-radio-input:checked + .jux-radio-mark {
1107
- border-color: var(--color-brand);
1108
- }
1109
-
1110
- .jux-radio-mark::after {
1111
- content: '';
1112
- width: 10px;
1113
- height: 10px;
1114
- border-radius: 50%;
1115
- background: var(--color-brand);
1116
- opacity: 0;
1117
- transform: scale(0);
1118
- transition: all var(--transition-base);
1119
- }
1120
-
1121
- .jux-radio-input:checked + .jux-radio-mark::after {
1122
- opacity: 1;
1123
- transform: scale(1);
1124
- }
1125
-
1126
- .jux-radio-label-text {
1127
- font-size: 0.875rem;
1128
- color: var(--color-text-primary);
1129
- }
1130
-
1131
- /* ============================================
1132
- SELECT COMPONENT
1133
- ============================================ */
1134
- .jux-select {
1135
- margin-bottom: var(--space-lg);
1136
- }
1137
-
1138
- .jux-select-container {
1139
- position: relative;
1140
- }
1141
-
1142
- .jux-select-element {
1143
- width: 100%;
1144
- padding: var(--space-md);
1145
- font-size: 0.875rem;
1146
- color: var(--color-text-primary);
1147
- background: var(--color-surface-elevated);
1148
- border: var(--border-width) solid var(--color-border);
1149
- border-radius: var(--radius-md);
1150
- cursor: pointer;
1151
- appearance: none;
1152
- background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke='%23666'%3E%3Cpath stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M19 9l-7 7-7-7'%3E%3C/path%3E%3C/svg%3E");
1153
- background-repeat: no-repeat;
1154
- background-position: right var(--space-md) center;
1155
- background-size: 20px;
1156
- padding-right: var(--space-3xl);
1157
- }
1158
-
1159
- .jux-select-element:focus {
1160
- outline: none;
1161
- border-color: var(--color-brand);
1162
- box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.1);
1163
- }
1164
-
1165
- /* ============================================
1166
- SIDEBAR COMPONENT
1167
- ============================================ */
1168
- .jux-sidebar {
1169
- position: relative;
1170
- background: var(--color-surface-base);
1171
- border: var(--border-width) solid var(--color-border);
1172
- border-radius: var(--radius-lg);
1173
- padding: var(--space-lg);
1174
- margin-bottom: var(--space-lg);
1175
- }
1176
-
1177
- .jux-sidebar-left {
1178
- /* Left-aligned sidebar */
1179
- }
1180
-
1181
- .jux-sidebar-toggle {
1182
- position: absolute;
1183
- top: var(--space-md);
1184
- right: var(--space-md);
1185
- background: transparent;
1186
- border: none;
1187
- cursor: pointer;
1188
- padding: var(--space-xs);
1189
- color: var(--color-text-secondary);
1190
- display: flex;
1191
- align-items: center;
1192
- justify-content: center;
1193
- }
1194
-
1195
- /* ============================================
1196
- SWITCH COMPONENT
1197
- ============================================ */
1198
- .jux-switch {
1199
- margin-bottom: var(--space-lg);
1200
- }
1201
-
1202
- .jux-switch-container {
1203
- display: inline-flex;
1204
- align-items: center;
1205
- gap: var(--space-md);
1206
- cursor: pointer;
1207
- user-select: none;
1208
- }
1209
-
1210
- .jux-switch-input {
1211
- position: absolute;
1212
- opacity: 0;
1213
- width: 0;
1214
- height: 0;
1215
- }
1216
-
1217
- .jux-switch-slider {
1218
- width: 44px;
1219
- height: 24px;
1220
- background: var(--color-border);
1221
- border-radius: var(--radius-full);
1222
- position: relative;
1223
- transition: background-color var(--transition-base);
1224
- }
1225
-
1226
- .jux-switch-slider::before {
1227
- content: '';
1228
- position: absolute;
1229
- width: 18px;
1230
- height: 18px;
1231
- left: 3px;
1232
- top: 3px;
1233
- background: white;
1234
- border-radius: 50%;
1235
- transition: transform var(--transition-base);
1236
- }
1237
-
1238
- .jux-switch-input:checked + .jux-switch-slider {
1239
- background: var(--color-brand);
1240
- }
1241
-
1242
- .jux-switch-input:checked + .jux-switch-slider::before {
1243
- transform: translateX(20px);
1244
- }
1245
-
1246
- .jux-switch-label-text {
1247
- font-size: 0.875rem;
1248
- color: var(--color-text-primary);
1249
- }
1250
-
1251
- /* ============================================
1252
- TABLE COMPONENT
1253
- ============================================ */
1254
- .jux-table-wrapper {
1255
- border: var(--border-width) solid var(--color-border);
1256
- border-radius: var(--radius-lg);
1257
- overflow: hidden;
1258
- margin-bottom: var(--space-lg);
1259
- }
1260
-
1261
- .jux-table-filter {
1262
- width: 100%;
1263
- padding: var(--space-md) var(--space-lg);
1264
- font-size: 0.875rem;
1265
- border: none;
1266
- border-bottom: var(--border-width) solid var(--color-border);
1267
- background: var(--color-surface-base);
1268
- color: var(--color-text-primary);
1269
- }
1270
-
1271
- .jux-table-filter:focus {
1272
- outline: none;
1273
- background: var(--color-surface-elevated);
1274
- }
1275
-
1276
- .jux-table {
1277
- width: 100%;
1278
- border-collapse: collapse;
1279
- }
1280
-
1281
- .jux-table-bordered {
1282
- /* Bordered table variant */
1283
- }
1284
-
1285
- .jux-table thead {
1286
- background: var(--color-surface-base);
1287
- border-bottom: var(--border-width) solid var(--color-border);
1288
- }
1289
-
1290
- .jux-table th {
1291
- padding: var(--space-md) var(--space-lg);
1292
- text-align: left;
1293
- font-size: 0.75rem;
1294
- font-weight: 600;
1295
- color: var(--color-text-secondary);
1296
- text-transform: uppercase;
1297
- letter-spacing: 0.05em;
1298
- }
1299
-
1300
- .jux-table td {
1301
- padding: var(--space-md) var(--space-lg);
1302
- font-size: 0.875rem;
1303
- color: var(--color-text-primary);
1304
- border-top: var(--border-width) solid var(--color-border);
1305
- }
1306
-
1307
- .jux-table tbody tr:hover {
1308
- background: var(--color-surface-hover);
1309
- }
1310
-
1311
- .jux-table-pagination {
1312
- display: flex;
1313
- align-items: center;
1314
- justify-content: center;
1315
- gap: var(--space-md);
1316
- padding: var(--space-md) var(--space-lg);
1317
- border-top: var(--border-width) solid var(--color-border);
1318
- background: var(--color-surface-base);
1319
- }
1320
-
1321
- .jux-table-pagination button {
1322
- padding: var(--space-xs) var(--space-md);
1323
- background: var(--color-surface-elevated);
1324
- border: var(--border-width) solid var(--color-border);
1325
- border-radius: var(--radius-md);
1326
- cursor: pointer;
1327
- font-size: 0.875rem;
1328
- color: var(--color-text-primary);
1329
- transition: background-color var(--transition-base);
1330
- }
1331
-
1332
- .jux-table-pagination button:hover:not(:disabled) {
1333
- background: var(--color-surface-hover);
1334
- }
1335
-
1336
- .jux-table-pagination button:disabled {
1337
- opacity: 0.5;
1338
- cursor: not-allowed;
1339
- }
1340
-
1341
- .jux-table-pagination span {
1342
- font-size: 0.875rem;
1343
- color: var(--color-text-secondary);
1344
- }
1345
-
1346
- /* ============================================
1347
- TABS COMPONENT
1348
- ============================================ */
1349
- .jux-tabs {
1350
- margin-bottom: var(--space-lg);
1351
- }
1352
-
1353
- .jux-tabs-default {
1354
- /* Base tabs styles */
1355
- }
1356
-
1357
- .jux-tabs-list {
1358
- display: flex;
1359
- gap: var(--space-xs);
1360
- border-bottom: var(--border-width) solid var(--color-border);
1361
- margin-bottom: var(--space-lg);
1362
- }
1363
-
1364
- .jux-tabs-button {
1365
- padding: var(--space-md) var(--space-xl);
1366
- background: transparent;
1367
- border: none;
1368
- border-bottom: 2px solid transparent;
1369
- cursor: pointer;
1370
- font-size: 0.875rem;
1371
- font-weight: 500;
1372
- color: var(--color-text-secondary);
1373
- transition: color var(--transition-base), border-color var(--transition-base);
1374
- position: relative;
1375
- bottom: -1px;
1376
- }
1377
-
1378
- .jux-tabs-button:hover {
1379
- color: var(--color-text-primary);
1380
- }
1381
-
1382
- .jux-tabs-button-active {
1383
- color: var(--color-brand);
1384
- border-bottom-color: var(--color-brand);
1385
- }
1386
-
1387
- .jux-tabs-panels {
1388
- /* Tabs panels container */
1389
- }
1390
-
1391
- .jux-tabs-panel {
1392
- display: none;
1393
- animation: fadeIn 0.2s ease-in;
1394
- }
1395
-
1396
- .jux-tabs-panel-active {
1397
- display: block;
1398
- }
1399
-
1400
- @keyframes fadeIn {
1401
- from { opacity: 0; }
1402
- to { opacity: 1; }
1403
- }
1404
-
1405
- /* ============================================
1406
- VIEW COMPONENT
1407
- ============================================ */
1408
- .jux-view {
1409
- background: var(--color-surface-elevated);
1410
- border: var(--border-width) solid var(--color-border);
1411
- border-radius: var(--radius-lg);
1412
- overflow: hidden;
1413
- margin-bottom: var(--space-lg);
1414
- }
1415
-
1416
- .jux-view-header {
1417
- padding: var(--space-xl);
1418
- border-bottom: var(--border-width) solid var(--color-border);
1419
- background: var(--color-surface-base);
1420
- }
1421
-
1422
- .jux-view-title {
1423
- font-size: 1.5rem;
1424
- font-weight: 600;
1425
- color: var(--color-text-primary);
1426
- margin: 0;
1427
- }
1428
-
1429
- .jux-view-content {
1430
- padding: var(--space-xl);
1431
- }
1432
-
1433
- /* ============================================
1434
- SCROLLBARS
1435
- ============================================ */
1436
- #appmain::-webkit-scrollbar,
1437
- #appaside::-webkit-scrollbar {
1438
- width: 6px;
1439
- }
1440
-
1441
- #appmain::-webkit-scrollbar-track,
1442
- #appaside::-webkit-scrollbar-track {
1443
- background: transparent;
1444
- }
1445
-
1446
- #appmain::-webkit-scrollbar-thumb,
1447
- #appaside::-webkit-scrollbar-thumb {
1448
- background: var(--color-border);
1449
- border-radius: 3px;
1450
- }
1451
-
1452
- #appmain::-webkit-scrollbar-thumb:hover,
1453
- #appaside::-webkit-scrollbar-thumb:hover {
1454
- background: var(--color-border-hover);
1455
- }
1456
-
1457
- /* ============================================
1458
- RESPONSIVE
1459
- ============================================ */
1460
- @media (max-width: 768px) {
1461
- #app {
1462
- grid-template-columns: 1fr;
1463
- grid-template-areas:
1464
- "header"
1465
- "main"
1466
- "footer";
1467
- }
1468
-
1469
- #appaside {
1470
- display: none;
1471
- }
1472
-
1473
- #appheader {
1474
- padding: 0 var(--space-lg);
1475
- }
1476
-
1477
- #appmain-content {
1478
- padding: var(--space-2xl) var(--space-lg);
1479
- }
1480
-
1481
- #appfooter {
1482
- padding: var(--space-md) var(--space-lg);
1483
- }
1484
-
1485
- .jux-hero-title {
1486
- font-size: 2rem;
1487
- }
1488
-
1489
- .jux-radio-options {
1490
- flex-direction: column;
1491
- }
1492
- }
1493
-
1494
- /* ============================================
1495
- GRID COMPONENT
1496
- ============================================ */
1497
- .jux-grid {
1498
- display: grid;
1499
- position: relative;
1500
- }
1501
-
1502
- .jux-grid-cell {
1503
- position: relative;
1504
- overflow: auto;
1505
- min-width: 0; /* Prevent grid blowout */
1506
- min-height: 0;
1507
- }
1508
-
1509
- /* ============================================
1510
- GRID GRIDDER MODE (Blueprint Visualization)
1511
- ============================================ */
1512
- .jux-grid-gridder {
1513
- /* Blueprint-style background */
1514
- background-color: #0a1929;
1515
- background-image:
1516
- linear-gradient(rgba(59, 130, 246, 0.1) 1px, transparent 1px),
1517
- linear-gradient(90deg, rgba(59, 130, 246, 0.1) 1px, transparent 1px);
1518
- background-size: 20px 20px;
1519
- padding: 2px;
1520
- border: 2px solid #3b82f6;
1521
- box-shadow:
1522
- 0 0 0 1px rgba(59, 130, 246, 0.2),
1523
- inset 0 0 20px rgba(59, 130, 246, 0.1);
1524
- }
1525
-
1526
- .jux-grid-gridder .jux-grid-cell {
1527
- /* Cell styling in gridder mode */
1528
- background: rgba(15, 23, 42, 0.8);
1529
- border: 1px solid rgba(59, 130, 246, 0.4);
1530
- box-shadow: inset 0 0 10px rgba(59, 130, 246, 0.05);
1531
- min-height: 80px; /* Ensure cells are visible */
1532
- display: flex;
1533
- align-items: center;
1534
- justify-content: center;
1535
- position: relative;
1536
- transition: all 0.2s ease;
1537
- }
1538
-
1539
- .jux-grid-gridder .jux-grid-cell:hover {
1540
- background: rgba(30, 41, 59, 0.9);
1541
- border-color: rgba(59, 130, 246, 0.8);
1542
- box-shadow:
1543
- inset 0 0 15px rgba(59, 130, 246, 0.15),
1544
- 0 0 10px rgba(59, 130, 246, 0.3);
1545
- }
1546
-
1547
- /* Coordinate label (top-left corner) */
1548
- .jux-grid-gridder .jux-grid-cell::before {
1549
- content: attr(data-row) ',' attr(data-col);
1550
- position: absolute;
1551
- top: 4px;
1552
- left: 4px;
1553
- font-size: 10px;
1554
- font-family: 'SF Mono', Monaco, 'Courier New', monospace;
1555
- font-weight: 600;
1556
- color: rgba(59, 130, 246, 0.8);
1557
- background: rgba(15, 23, 42, 0.95);
1558
- padding: 2px 6px;
1559
- border-radius: 3px;
1560
- border: 1px solid rgba(59, 130, 246, 0.3);
1561
- letter-spacing: 0.5px;
1562
- z-index: 10;
1563
- }
1564
-
1565
- /* ID label (bottom-right corner) */
1566
- .jux-grid-gridder .jux-grid-cell::after {
1567
- content: '#' attr(id);
1568
- position: absolute;
1569
- bottom: 4px;
1570
- right: 4px;
1571
- font-size: 9px;
1572
- font-family: 'SF Mono', Monaco, 'Courier New', monospace;
1573
- color: rgba(148, 163, 184, 0.6);
1574
- background: rgba(15, 23, 42, 0.8);
1575
- padding: 2px 5px;
1576
- border-radius: 2px;
1577
- border: 1px solid rgba(71, 85, 105, 0.3);
1578
- max-width: calc(100% - 12px);
1579
- overflow: hidden;
1580
- text-overflow: ellipsis;
1581
- white-space: nowrap;
1582
- }
1583
-
1584
- /* Grid lines (column separators) */
1585
- .jux-grid-gridder .jux-grid-cell:not(:nth-child(1))::before {
1586
- box-shadow: 0 0 5px rgba(59, 130, 246, 0.4);
1587
- }
1588
-
1589
- /* Remove default debug styles when gridder is active */
1590
- .jux-grid-gridder.jux-grid-debug .jux-grid-cell {
1591
- /* Gridder overrides debug mode */
1592
- border-color: rgba(59, 130, 246, 0.4);
1593
- background: rgba(15, 23, 42, 0.8);
1594
- }
1595
-
1596
- /* ============================================
1597
- GRID DEBUG MODE (Legacy - simpler version)
1598
- ============================================ */
1599
- .jux-grid-debug .jux-grid-cell {
1600
- border: 1px dashed var(--color-border);
1601
- background: var(--color-surface-base);
1602
- }
1603
-
1604
- .jux-grid-debug .jux-grid-cell::before {
1605
- content: attr(data-row) '-' attr(data-col);
1606
- position: absolute;
1607
- top: 2px;
1608
- left: 2px;
1609
- font-size: 10px;
1610
- color: var(--color-text-tertiary);
1611
- opacity: 0.5;
1612
- }
1613
-
1614
- /* ============================================
1615
- CALENDAR COMPONENT
1616
- ============================================ */
1617
- .jux-calendar {
1618
- background: var(--color-surface-elevated);
1619
- border: var(--border-width) solid var(--color-border);
1620
- border-radius: var(--radius-lg);
1621
- overflow: hidden;
1622
- margin-bottom: var(--space-lg);
1623
- }
1624
-
1625
- .jux-calendar-header {
1626
- padding: var(--space-lg);
1627
- border-bottom: var(--border-width) solid var(--color-border);
1628
- background: var(--color-surface-base);
1629
- }
1630
-
1631
- .jux-calendar-nav {
1632
- display: flex;
1633
- align-items: center;
1634
- justify-content: space-between;
1635
- gap: var(--space-md);
1636
- }
1637
-
1638
- .jux-calendar-nav-btn {
1639
- width: 32px;
1640
- height: 32px;
1641
- display: flex;
1642
- align-items: center;
1643
- justify-content: center;
1644
- background: transparent;
1645
- border: var(--border-width) solid var(--color-border);
1646
- border-radius: var(--radius-md);
1647
- cursor: pointer;
1648
- font-size: 1.25rem;
1649
- color: var(--color-text-primary);
1650
- transition: all var(--transition-base);
1651
- }
1652
-
1653
- .jux-calendar-nav-btn:hover {
1654
- background: var(--color-surface-hover);
1655
- border-color: var(--color-brand);
1656
- }
1657
-
1658
- .jux-calendar-today-btn {
1659
- padding: var(--space-xs) var(--space-lg);
1660
- background: var(--color-brand);
1661
- color: white;
1662
- border: none;
1663
- border-radius: var(--radius-md);
1664
- cursor: pointer;
1665
- font-size: 0.875rem;
1666
- font-weight: 500;
1667
- transition: background-color var(--transition-base);
1668
- }
1669
-
1670
- .jux-calendar-today-btn:hover {
1671
- background: var(--color-brand-hover);
1672
- }
1673
-
1674
- .jux-calendar-title {
1675
- flex: 1;
1676
- text-align: center;
1677
- font-size: 1.125rem;
1678
- font-weight: 600;
1679
- color: var(--color-text-primary);
1680
- }
1681
-
1682
- .jux-calendar-grid {
1683
- padding: var(--space-md);
1684
- }
1685
-
1686
- .jux-calendar-days-header {
1687
- display: grid;
1688
- grid-template-columns: repeat(7, 1fr);
1689
- gap: var(--space-xs);
1690
- margin-bottom: var(--space-md);
1691
- }
1692
-
1693
- .jux-calendar-day-name {
1694
- text-align: center;
1695
- font-size: 0.75rem;
1696
- font-weight: 600;
1697
- color: var(--color-text-secondary);
1698
- text-transform: uppercase;
1699
- letter-spacing: 0.05em;
1700
- padding: var(--space-sm);
1701
- }
1702
-
1703
- .jux-calendar-days-grid {
1704
- display: grid;
1705
- grid-template-columns: repeat(7, 1fr);
1706
- gap: var(--space-xs);
1707
- }
1708
-
1709
- .jux-calendar-day-cell {
1710
- min-height: 100px;
1711
- padding: var(--space-sm);
1712
- background: var(--color-surface-base);
1713
- border: var(--border-width) solid var(--color-border);
1714
- border-radius: var(--radius-md);
1715
- cursor: pointer;
1716
- transition: all var(--transition-base);
1717
- display: flex;
1718
- flex-direction: column;
1719
- }
1720
-
1721
- .jux-calendar-day-cell:hover {
1722
- background: var(--color-surface-hover);
1723
- border-color: var(--color-brand);
1724
- }
1725
-
1726
- .jux-calendar-day-cell.other-month {
1727
- opacity: 0.4;
1728
- }
1729
-
1730
- .jux-calendar-day-cell.today {
1731
- border-color: var(--color-brand);
1732
- background: rgba(14, 165, 233, 0.05);
1733
- }
1734
-
1735
- .jux-calendar-day-number {
1736
- font-size: 0.875rem;
1737
- font-weight: 600;
1738
- color: var(--color-text-primary);
1739
- margin-bottom: var(--space-xs);
1740
- }
1741
-
1742
- .jux-calendar-day-cell.today .jux-calendar-day-number {
1743
- color: var(--color-brand);
1744
- }
1745
-
1746
- .jux-calendar-day-events {
1747
- display: flex;
1748
- flex-direction: column;
1749
- gap: var(--space-xs);
1750
- flex: 1;
1751
- overflow: hidden;
1752
- }
1753
-
1754
- .jux-calendar-event {
1755
- padding: var(--space-xs) var(--space-sm);
1756
- background: var(--color-brand);
1757
- color: white;
1758
- font-size: 0.75rem;
1759
- border-radius: var(--radius-sm);
1760
- cursor: pointer;
1761
- transition: opacity var(--transition-base);
1762
- white-space: nowrap;
1763
- overflow: hidden;
1764
- text-overflow: ellipsis;
1765
- }
1766
-
1767
- .jux-calendar-event:hover {
1768
- opacity: 0.8;
1769
- }
1770
-
1771
- /* Popover */
1772
- .jux-calendar-popover {
1773
- background: var(--color-surface-elevated);
1774
- border: var(--border-width) solid var(--color-border);
1775
- border-radius: var(--radius-lg);
1776
- box-shadow: 0 10px 25px rgba(0, 0, 0, 0.1);
1777
- padding: var(--space-lg);
1778
- min-width: 320px;
1779
- max-width: 400px;
1780
- z-index: 1000;
1781
- }
1782
-
1783
- .jux-calendar-event-form h4 {
1784
- margin: 0 0 var(--space-lg) 0;
1785
- font-size: 1.125rem;
1786
- font-weight: 600;
1787
- color: var(--color-text-primary);
1788
- }
1789
-
1790
- .jux-calendar-event-form label {
1791
- display: block;
1792
- margin-bottom: var(--space-md);
1793
- }
1794
-
1795
- .jux-calendar-event-form label span {
1796
- display: block;
1797
- font-size: 0.875rem;
1798
- font-weight: 500;
1799
- color: var(--color-text-primary);
1800
- margin-bottom: var(--space-xs);
1801
- }
1802
-
1803
- .jux-calendar-event-form input,
1804
- .jux-calendar-event-form textarea {
1805
- width: 100%;
1806
- padding: var(--space-sm);
1807
- font-size: 0.875rem;
1808
- color: var(--color-text-primary);
1809
- background: var(--color-surface-base);
1810
- border: var(--border-width) solid var(--color-border);
1811
- border-radius: var(--radius-md);
1812
- font-family: var(--font-family-base);
1813
- }
1814
-
1815
- .jux-calendar-event-form input:focus,
1816
- .jux-calendar-event-form textarea:focus {
1817
- outline: none;
1818
- border-color: var(--color-brand);
1819
- box-shadow: 0 0 0 3px rgba(14, 165, 233, 0.1);
1820
- }
1821
-
1822
- .jux-calendar-form-actions {
1823
- display: flex;
1824
- gap: var(--space-sm);
1825
- margin-top: var(--space-lg);
1826
- }
1827
-
1828
- .jux-calendar-btn-primary,
1829
- .jux-calendar-btn-secondary,
1830
- .jux-calendar-btn-danger {
1831
- padding: var(--space-sm) var(--space-lg);
1832
- border: none;
1833
- border-radius: var(--radius-md);
1834
- cursor: pointer;
1835
- font-size: 0.875rem;
1836
- font-weight: 500;
1837
- transition: all var(--transition-base);
1838
- }
1839
-
1840
- .jux-calendar-btn-primary {
1841
- background: var(--color-brand);
1842
- color: white;
1843
- }
1844
-
1845
- .jux-calendar-btn-primary:hover {
1846
- background: var(--color-brand-hover);
1847
- }
1848
-
1849
- .jux-calendar-btn-secondary {
1850
- background: var(--color-surface-base);
1851
- color: var(--color-text-primary);
1852
- border: var(--border-width) solid var(--color-border);
1853
- }
1854
-
1855
- .jux-calendar-btn-secondary:hover {
1856
- background: var(--color-surface-hover);
1857
- }
1858
-
1859
- .jux-calendar-btn-danger {
1860
- background: #ef4444;
1861
- color: white;
1862
- }
1863
-
1864
- .jux-calendar-btn-danger:hover {
1865
- background: #dc2626;
1866
- }
1867
-
1868
- /* ✅ ADD: Week view styles */
1869
- .jux-calendar-week-view {
1870
- display: grid;
1871
- grid-template-columns: repeat(7, 1fr);
1872
- gap: var(--space-xs);
1873
- padding: var(--space-md);
1874
- }
1875
-
1876
- .jux-calendar-week-day-col {
1877
- min-height: 400px;
1878
- border: var(--border-width) solid var(--color-border);
1879
- border-radius: var(--radius-md);
1880
- }
1881
-
1882
- /* ✅ ADD: Day view styles */
1883
- .jux-calendar-day-view {
1884
- padding: var(--space-md);
1885
- max-height: 600px;
1886
- overflow-y: auto;
1887
- }
1888
-
1889
- .jux-calendar-hour-slot {
1890
- height: 60px;
1891
- border-bottom: var(--border-width) solid var(--color-border);
1892
- padding: var(--space-sm);
1893
- position: relative;
1894
- }
1895
-
1896
- /* ✅ ADD: Year view styles */
1897
- .jux-calendar-year-view {
1898
- display: grid;
1899
- grid-template-columns: repeat(3, 1fr);
1900
- gap: var(--space-lg);
1901
- padding: var(--space-lg);
1902
- }
1903
-
1904
- .jux-calendar-mini-month {
1905
- border: var(--border-width) solid var(--color-border);
1906
- border-radius: var(--radius-md);
1907
- padding: var(--space-md);
1908
- min-height: 150px;
1909
- }
1910
-
1911
-
1912
- /* componentsv2/list*/
1913
- .jux-list {
1914
- font-family: system-ui, -apple-system, sans-serif;
1915
- padding: 1rem;
1916
- border: 1px solid #eee;
1917
- border-radius: 4px;
1918
- transition: opacity 0.2s;
1919
- }
1920
-
1921
- .jux-list[aria-disabled="true"] {
1922
- opacity: 0.5;
1923
- pointer-events: none;
1924
- background-color: #f9f9f9;
1925
- }
1926
-
1927
- .jux-list[aria-busy="true"] {
1928
- cursor: wait;
1929
- opacity: 0.7;
1930
- }
1931
-
1932
- /* Internal List Element */
1933
- .jux-list-element {
1934
- margin: 0;
1935
- padding-left: 1.5rem;
1936
- }
1937
-
1938
- .jux-list li {
1939
- padding: 0.25rem 0.5rem;
1940
- cursor: default;
1941
- border-radius: 2px;
1942
- }
1943
-
1944
- .jux-list li:hover {
1945
- background-color: #f0f0f0;
1946
- }
17
+ /* Layout */
18
+ --radius-sm: 6px;
19
+ --radius-md: 10px;
20
+ --border-width: 1px;
1947
21
 
1948
- .jux-list li.jux-selected {
1949
- background-color: #e3f2fd;
1950
- color: #1565c0;
1951
- font-weight: 500;
22
+ /* Animation */
23
+ --transition-fast: 150ms ease;
24
+ --transition-normal: 300ms ease;
25
+
26
+ /* Color Palette - RxTrail Brand Colors */
27
+ --color-brand: #e57373;
28
+ --color-brand-hover: #ef5350;
29
+ --color-brand-subtle: rgba(229, 115, 115, 0.08);
30
+
31
+ --color-text-primary: #2c2f3e;
32
+ --color-text-secondary: #6b7280;
33
+ --color-text-inverse: #ffffff;
34
+
35
+ --color-background: #fafbfc;
36
+ --color-surface-base: #ffffff;
37
+ --color-surface-hover: #fef5f5;
38
+ --color-surface-active: #fce8e8;
39
+
40
+ --color-border: #e5e7eb;
41
+ --color-border-hover: #d1d5db;
42
+
43
+ /* Accent colors for clinical data */
44
+ --color-success: #00a878;
45
+ --color-warning: #f39c12;
46
+ --color-danger: #e74c3c;
47
+ }
48
+
49
+ /* Dark Mode Overrides */
50
+ [data-theme="dark"] {
51
+ --color-text-primary: #e8edf3;
52
+ --color-text-secondary: #9aa6b5;
53
+ --color-background: #0f1419;
54
+ --color-surface-base: #1a2332;
55
+ --color-surface-hover: #243447;
56
+ --color-border: #384456;
1952
57
  }