juxscript 1.0.15 → 1.0.17

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.
@@ -1,6 +1,7 @@
1
1
  /**
2
- * Notion Preset - Combined Layout + Theming
2
+ * Notion Preset - Theming Only
3
3
  * Light/Dark mode via [data-theme] attribute
4
+ * Layout should be handled by separate layout presets
4
5
  */
5
6
 
6
7
  /* ============================================
@@ -129,211 +130,6 @@ body {
129
130
  transition: background-color var(--transition-base), color var(--transition-base);
130
131
  }
131
132
 
132
- /* ============================================
133
- NOTION LAYOUT GRID
134
- ============================================ */
135
- #app {
136
- display: grid;
137
- grid-template-areas:
138
- "header header"
139
- "sidebar main"
140
- "footer footer";
141
- grid-template-columns: 350px 1fr;
142
- grid-template-rows: auto 1fr auto;
143
- min-height: 100vh;
144
- }
145
-
146
- /* ============================================
147
- HEADER
148
- ============================================ */
149
- #appheader {
150
- grid-area: header;
151
- position: sticky;
152
- top: 0;
153
- z-index: 100;
154
- background: var(--color-surface-elevated);
155
- border-bottom: var(--border-width) solid var(--color-border);
156
- display: flex;
157
- align-items: center;
158
- padding: var(--space-md) var(--space-lg);
159
- gap: var(--space-lg);
160
- transition: background-color var(--transition-base), border-color var(--transition-base);
161
- }
162
-
163
- #appheader-content {
164
- display: flex;
165
- align-items: center;
166
- width: 100%;
167
- gap: var(--space-lg);
168
- }
169
-
170
- #appheader-logo {
171
- flex-shrink: 0;
172
- }
173
-
174
- #appheader-nav {
175
- flex: 1;
176
- display: flex;
177
- gap: var(--space-md);
178
- }
179
-
180
- #appheader-actions {
181
- flex-shrink: 0;
182
- display: flex;
183
- gap: var(--space-sm);
184
- align-items: center;
185
- }
186
-
187
- /* Subheader - Hidden in notion layout */
188
- #appsubheader,
189
- #appsubheader-breadcrumbs,
190
- #appsubheader-tabs,
191
- #appsubheader-actions {
192
- display: none;
193
- }
194
-
195
- /* ============================================
196
- SIDEBAR
197
- ============================================ */
198
- #appsidebar {
199
- grid-area: sidebar;
200
- overflow-y: auto;
201
- background: var(--color-surface-base);
202
- border-right: var(--border-width) solid var(--color-border);
203
- transition: transform var(--transition-base),
204
- background-color var(--transition-base),
205
- border-color var(--transition-base);
206
- display: flex;
207
- flex-direction: column;
208
- }
209
-
210
- #appsidebar-header {
211
- padding: var(--space-md);
212
- border-bottom: var(--border-width) solid var(--color-border);
213
- flex-shrink: 0;
214
- }
215
-
216
- #appsidebar-content {
217
- flex: 1;
218
- overflow-y: auto;
219
- padding: var(--space-sm);
220
- }
221
-
222
- #appsidebar-footer {
223
- padding: var(--space-md);
224
- border-top: var(--border-width) solid var(--color-border);
225
- flex-shrink: 0;
226
- }
227
-
228
- /* ============================================
229
- MAIN
230
- ============================================ */
231
- #appmain {
232
- grid-area: main;
233
- overflow-y: auto;
234
- padding: var(--space-xl);
235
- background: var(--color-background);
236
- transition: background-color var(--transition-base);
237
- }
238
-
239
- #appmain-content {
240
- max-width: 100%;
241
- }
242
-
243
- /* ============================================
244
- ASIDE (Hidden in Notion layout)
245
- ============================================ */
246
- #appaside,
247
- #appaside-header,
248
- #appaside-content,
249
- #appaside-footer {
250
- display: none;
251
- }
252
-
253
- /* ============================================
254
- FOOTER
255
- ============================================ */
256
- #appfooter {
257
- grid-area: footer;
258
- background: var(--color-surface-elevated);
259
- border-top: var(--border-width) solid var(--color-border);
260
- padding: var(--space-lg) var(--space-xl);
261
- display: flex;
262
- justify-content: space-between;
263
- align-items: center;
264
- transition: background-color var(--transition-base), border-color var(--transition-base);
265
- }
266
-
267
- #appfooter-content {
268
- flex: 1;
269
- }
270
-
271
- #appfooter-legal {
272
- flex-shrink: 0;
273
- font-size: var(--font-size-sm);
274
- color: var(--color-text-secondary);
275
- }
276
-
277
- /* ============================================
278
- MODAL
279
- ============================================ */
280
- #appmodal {
281
- position: fixed;
282
- top: 0;
283
- left: 0;
284
- right: 0;
285
- bottom: 0;
286
- z-index: 2000;
287
- display: none;
288
- }
289
-
290
- #appmodal[aria-hidden="false"] {
291
- display: flex;
292
- align-items: center;
293
- justify-content: center;
294
- }
295
-
296
- #appmodal-backdrop {
297
- position: absolute;
298
- inset: 0;
299
- background: rgba(0, 0, 0, 0.6);
300
- backdrop-filter: blur(4px);
301
- }
302
-
303
- #appmodal-container {
304
- position: relative;
305
- background: var(--color-surface-elevated);
306
- border-radius: var(--radius-lg);
307
- box-shadow: var(--shadow-xl);
308
- max-width: 90vw;
309
- max-height: 90vh;
310
- display: flex;
311
- flex-direction: column;
312
- overflow: hidden;
313
- transition: background-color var(--transition-base);
314
- }
315
-
316
- #appmodal-header {
317
- padding: var(--space-lg);
318
- border-bottom: var(--border-width) solid var(--color-border);
319
- flex-shrink: 0;
320
- }
321
-
322
- #appmodal-content {
323
- flex: 1;
324
- overflow-y: auto;
325
- padding: var(--space-lg);
326
- }
327
-
328
- #appmodal-footer {
329
- padding: var(--space-lg);
330
- border-top: var(--border-width) solid var(--color-border);
331
- flex-shrink: 0;
332
- display: flex;
333
- gap: var(--space-sm);
334
- justify-content: flex-end;
335
- }
336
-
337
133
  /* ============================================
338
134
  THEME TOGGLE - CLEAN & MINIMAL
339
135
  ============================================ */
@@ -415,64 +211,19 @@ body {
415
211
  }
416
212
 
417
213
  /* ============================================
418
- RESPONSIVE BREAKPOINTS
214
+ RESPONSIVE FONT SIZING
419
215
  ============================================ */
420
216
 
421
- /* Tablet (portrait) */
422
- @media (max-width: 1024px) {
423
- #app {
424
- grid-template-columns: 200px 1fr;
425
- }
426
-
427
- #appmain {
428
- padding: var(--space-lg);
429
- }
430
-
431
- #appheader {
432
- padding: var(--space-sm) var(--space-md);
433
- gap: var(--space-md);
434
- }
435
- }
436
-
437
217
  /* Mobile */
438
218
  @media (max-width: 768px) {
439
- #app {
440
- grid-template-areas:
441
- "header"
442
- "main"
443
- "footer";
444
- grid-template-columns: 1fr;
445
- }
446
-
447
- #appsidebar {
448
- position: fixed;
449
- top: 60px;
450
- left: 0;
451
- bottom: 0;
452
- width: 280px;
453
- max-width: 80vw;
454
- z-index: 99;
455
- transform: translateX(-100%);
456
- box-shadow: var(--shadow-xl);
457
- }
458
-
459
- #appsidebar.visible {
460
- transform: translateX(0);
461
- }
462
-
463
- #appmain {
464
- padding: var(--space-md);
465
- }
466
-
467
- #appheader {
468
- padding: var(--space-xs) var(--space-md);
469
- }
470
-
471
- #appfooter {
472
- padding: var(--space-md) var(--space-lg);
473
- flex-direction: column;
474
- gap: var(--space-sm);
475
- text-align: center;
219
+ :root {
220
+ --font-size-xs: 0.7rem;
221
+ --font-size-sm: 0.8rem;
222
+ --font-size-base: 0.9rem;
223
+ --font-size-lg: 1rem;
224
+ --font-size-xl: 1.1rem;
225
+ --font-size-2xl: 1.3rem;
226
+ --font-size-3xl: 1.75rem;
476
227
  }
477
228
 
478
229
  .jux-theme-toggle-button {
@@ -482,40 +233,1144 @@ body {
482
233
  }
483
234
  }
484
235
 
485
- /* Small mobile */
486
- @media (max-width: 480px) {
487
- #appsidebar {
488
- width: 100%;
489
- max-width: 100vw;
490
- }
491
-
492
- #appmain {
493
- padding: var(--space-sm);
494
- }
495
-
496
- #appfooter {
497
- padding: var(--space-sm) var(--space-md);
498
- font-size: var(--font-size-sm);
499
- }
500
-
501
- #appmodal-container {
502
- max-width: 95vw;
503
- max-height: 95vh;
504
- }
505
- }
506
-
507
236
  /* ============================================
508
237
  SMOOTH TRANSITIONS
509
238
  ============================================ */
510
239
  body,
511
- #app,
512
- #appheader,
513
- #appsidebar,
514
- #appmain,
515
- #appfooter,
516
- #appmodal-container,
517
240
  .jux-theme-toggle-button {
518
241
  transition: background-color var(--transition-base),
519
242
  border-color var(--transition-base),
520
243
  color var(--transition-base);
244
+ }
245
+
246
+
247
+ /**
248
+ * Global Styles
249
+ * Base + Components ONLY (NO layout styles)
250
+ * Layout grid structures are in lib/layouts/{layout}.jux
251
+ * Uses design tokens from tokens/{theme}.css
252
+ */
253
+
254
+ /* ===== BASE STYLES ===== */
255
+
256
+
257
+ * {
258
+ box-sizing: border-box;
259
+ margin: 0;
260
+ padding: 0;
261
+ }
262
+
263
+ body {
264
+ font-family: var(--font-family-base);
265
+ font-size: var(--font-size-base);
266
+ line-height: var(--line-height-normal);
267
+ color: var(--color-text-primary);
268
+ background: var(--color-background);
269
+ -webkit-font-smoothing: antialiased;
270
+ -moz-osx-font-smoothing: grayscale;
271
+ }
272
+
273
+ a {
274
+ color: var(--color-brand);
275
+ text-decoration: none;
276
+ transition: color var(--transition-fast);
277
+ }
278
+
279
+ a:hover {
280
+ color: var(--color-brand-hover);
281
+ text-decoration: underline;
282
+ }
283
+
284
+ button {
285
+ font-family: inherit;
286
+ font-size: inherit;
287
+ cursor: pointer;
288
+ border: none;
289
+ background: none;
290
+ }
291
+
292
+ input, textarea, select {
293
+ font-family: inherit;
294
+ font-size: inherit;
295
+ background: var(--color-surface-elevated);
296
+ color: var(--color-text-primary);
297
+ border: var(--border-width) solid var(--color-border);
298
+ border-radius: var(--border-radius-md);
299
+ padding: var(--space-sm) var(--space-md);
300
+ }
301
+
302
+ input:focus, textarea:focus, select:focus {
303
+ outline: none;
304
+ border-color: var(--color-border-focus);
305
+ box-shadow: 0 0 0 3px rgba(124, 58, 237, 0.1);
306
+ }
307
+
308
+ h1, h2, h3, h4, h5, h6 {
309
+ font-weight: var(--font-weight-semibold);
310
+ line-height: var(--line-height-tight);
311
+ color: var(--color-text-primary);
312
+ }
313
+
314
+ h1 { font-size: var(--font-size-3xl); }
315
+ h2 { font-size: var(--font-size-2xl); }
316
+ h3 { font-size: var(--font-size-xl); }
317
+ h4 { font-size: var(--font-size-lg); }
318
+ h5 { font-size: var(--font-size-base); }
319
+ h6 { font-size: var(--font-size-sm); }
320
+
321
+ p {
322
+ margin-bottom: var(--space-md);
323
+ }
324
+
325
+
326
+ /* ===== COMPONENT STYLES ===== */
327
+
328
+ /* Header Component */
329
+ .jux-header {
330
+ display: flex;
331
+ align-items: center;
332
+ gap: var(--space-xl);
333
+ padding: var(--space-md) var(--space-xl);
334
+ height: 60px;
335
+ }
336
+
337
+ .jux-header-logo {
338
+ display: flex;
339
+ align-items: center;
340
+ gap: var(--space-sm);
341
+ color: var(--color-brand);
342
+ font-weight: var(--font-weight-bold);
343
+ font-size: var(--font-size-xl);
344
+ }
345
+
346
+ .jux-header-title {
347
+ font-size: var(--font-size-2xl);
348
+ font-weight: var(--font-weight-semibold);
349
+ color: var(--color-text-primary);
350
+ margin: 0;
351
+ }
352
+
353
+ .jux-header-nav {
354
+ display: flex;
355
+ gap: var(--space-lg);
356
+ margin-left: auto;
357
+ align-items: center;
358
+ }
359
+
360
+ .jux-header-nav-link {
361
+ color: var(--color-text-secondary);
362
+ text-decoration: none;
363
+ transition: all var(--transition-fast);
364
+ padding: var(--space-sm) var(--space-md);
365
+ border-radius: var(--border-radius-md);
366
+ font-weight: var(--font-weight-medium);
367
+ }
368
+
369
+ .jux-header-nav-link:hover {
370
+ color: var(--color-brand);
371
+ background: var(--color-surface-hover);
372
+ text-decoration: none;
373
+ }
374
+
375
+ .jux-header-nav-link.active {
376
+ color: var(--color-brand);
377
+ background: rgba(10, 156, 165, 0.1);
378
+ }
379
+
380
+ /* Sidebar Component */
381
+ .jux-sidebar {
382
+ height: 100%;
383
+ overflow-y: auto;
384
+ }
385
+
386
+ .jux-sidebar-toggle {
387
+ background: var(--color-surface-elevated);
388
+ border: var(--border-width) solid var(--color-border);
389
+ font-size: var(--font-size-xl);
390
+ cursor: pointer;
391
+ padding: var(--space-sm);
392
+ margin-bottom: var(--space-md);
393
+ color: var(--color-text-primary);
394
+ border-radius: var(--border-radius-md);
395
+ transition: all var(--transition-base);
396
+ width: 100%;
397
+ display: block;
398
+ font-weight: var(--font-weight-semibold);
399
+ }
400
+
401
+ .jux-sidebar-toggle:hover {
402
+ background: var(--color-brand);
403
+ color: var(--color-text-inverse);
404
+ border-color: var(--color-brand);
405
+ }
406
+
407
+ .jux-sidebar-heading {
408
+ font-size: var(--font-size-xs);
409
+ text-transform: uppercase;
410
+ color: var(--color-text-tertiary);
411
+ margin: var(--space-lg) 0 var(--space-sm);
412
+ font-weight: var(--font-weight-bold);
413
+ letter-spacing: 0.05em;
414
+ }
415
+
416
+ .jux-sidebar-link {
417
+ display: flex;
418
+ align-items: center;
419
+ gap: var(--space-md);
420
+ padding: var(--space-md);
421
+ color: var(--color-text-secondary);
422
+ text-decoration: none;
423
+ border-radius: var(--border-radius-md);
424
+ transition: all var(--transition-base);
425
+ margin-bottom: var(--space-xs);
426
+ font-weight: var(--font-weight-medium);
427
+ }
428
+
429
+ .jux-sidebar-link:hover {
430
+ background: var(--color-surface-elevated);
431
+ color: var(--color-text-primary);
432
+ transform: translateX(4px);
433
+ text-decoration: none;
434
+ }
435
+
436
+ .jux-sidebar-link.active {
437
+ background: var(--color-brand);
438
+ color: var(--color-text-inverse);
439
+ font-weight: var(--font-weight-semibold);
440
+ }
441
+
442
+ .jux-sidebar-icon {
443
+ font-size: var(--font-size-xl);
444
+ width: 1.5rem;
445
+ text-align: center;
446
+ flex-shrink: 0;
447
+ }
448
+
449
+ .jux-sidebar-divider {
450
+ border: none;
451
+ border-top: var(--border-width) solid var(--color-border);
452
+ margin: var(--space-md) 0;
453
+ }
454
+
455
+ /* Footer Component */
456
+ .jux-footer {
457
+ display: flex;
458
+ align-items: center;
459
+ justify-content: center;
460
+ padding: var(--space-lg) var(--space-xl);
461
+ min-height: 60px;
462
+ color: var(--color-text-secondary);
463
+ font-size: var(--font-size-sm);
464
+ }
465
+
466
+ .jux-footer-content {
467
+ text-align: center;
468
+ }
469
+
470
+ .jux-footer-left,
471
+ .jux-footer-center,
472
+ .jux-footer-right {
473
+ display: flex;
474
+ align-items: center;
475
+ gap: var(--space-md);
476
+ }
477
+
478
+ .jux-footer-link {
479
+ color: var(--color-text-secondary);
480
+ text-decoration: none;
481
+ transition: color var(--transition-fast);
482
+ padding: var(--space-xs) var(--space-sm);
483
+ border-radius: var(--border-radius-sm);
484
+ }
485
+
486
+ .jux-footer-link:hover {
487
+ color: var(--color-brand);
488
+ background: var(--color-surface-hover);
489
+ }
490
+
491
+ /* Hero Component */
492
+ .jux-hero {
493
+ text-align: left;
494
+ padding: var(--space-2xl) var(--space-xl);
495
+ background: var(--color-surface-elevated);
496
+ border: var(--border-width) solid var(--color-border);
497
+ border-radius: var(--border-radius-lg);
498
+ margin-bottom: var(--space-2xl);
499
+ transition: all var(--transition-base);
500
+ }
501
+
502
+ .jux-hero:hover {
503
+ box-shadow: var(--shadow-sm);
504
+ }
505
+
506
+ .jux-hero-title {
507
+ font-size: var(--font-size-2xl);
508
+ font-weight: var(--font-weight-bold);
509
+ margin-bottom: var(--space-sm);
510
+ color: var(--color-text-primary);
511
+ letter-spacing: -0.02em;
512
+ }
513
+
514
+ .jux-hero-subtitle {
515
+ font-size: var(--font-size-sm);
516
+ margin-bottom: var(--space-md);
517
+ color: var(--color-text-tertiary);
518
+ font-weight: var(--font-weight-medium);
519
+ font-family: var(--font-family-mono);
520
+ background: var(--color-surface-base);
521
+ padding: var(--space-xs) var(--space-sm);
522
+ border-radius: var(--border-radius-sm);
523
+ display: inline-block;
524
+ }
525
+
526
+ .jux-hero-description {
527
+ font-size: var(--font-size-base);
528
+ color: var(--color-text-secondary);
529
+ line-height: var(--line-height-relaxed);
530
+ white-space: pre-line;
531
+ font-family: var(--font-family-mono);
532
+ background: var(--color-surface-base);
533
+ padding: var(--space-md);
534
+ border-radius: var(--border-radius-sm);
535
+ border-left: 3px solid var(--color-brand);
536
+ }
537
+
538
+ /* Card Component */
539
+ .jux-card {
540
+ background: var(--color-surface-elevated);
541
+ border: var(--border-width) solid var(--color-border);
542
+ border-radius: var(--border-radius-xl);
543
+ padding: var(--space-lg);
544
+ box-shadow: var(--shadow-sm);
545
+ transition: all var(--transition-base);
546
+ }
547
+
548
+ .jux-card:hover {
549
+ box-shadow: var(--shadow-md);
550
+ transform: translateY(-2px);
551
+ }
552
+
553
+ .jux-card-title {
554
+ font-size: var(--font-size-xl);
555
+ font-weight: var(--font-weight-semibold);
556
+ margin: 0 0 var(--space-md) 0;
557
+ color: var(--color-text-primary);
558
+ }
559
+
560
+ .jux-card-body {
561
+ font-size: var(--font-size-base);
562
+ color: var(--color-text-secondary);
563
+ margin: 0 0 var(--space-md) 0;
564
+ line-height: var(--line-height-relaxed);
565
+ }
566
+
567
+ .jux-card-actions {
568
+ display: flex;
569
+ gap: var(--space-md);
570
+ align-items: center;
571
+ flex-wrap: wrap;
572
+ margin: var(--space-md) 0;
573
+ }
574
+
575
+ .jux-card-footer {
576
+ font-size: var(--font-size-sm);
577
+ color: var(--color-text-secondary);
578
+ margin: 0;
579
+ padding-top: var(--space-md);
580
+ border-top: var(--border-width) solid var(--color-border);
581
+ }
582
+
583
+ /* Button Component */
584
+ .jux-button {
585
+ padding: var(--space-sm) var(--space-lg);
586
+ border: var(--border-width) solid var(--color-border);
587
+ border-radius: var(--border-radius-md);
588
+ cursor: pointer;
589
+ font-size: var(--font-size-base);
590
+ background: var(--color-surface-elevated);
591
+ color: var(--color-text-primary);
592
+ font-weight: var(--font-weight-medium);
593
+ transition: all var(--transition-fast);
594
+ }
595
+
596
+ .jux-button-primary {
597
+ background: var(--color-brand);
598
+ color: var(--color-text-inverse);
599
+ border-color: var(--color-brand);
600
+ }
601
+
602
+ .jux-button:hover {
603
+ transform: translateY(-2px);
604
+ box-shadow: var(--shadow-md);
605
+ }
606
+
607
+ .jux-button-primary:hover {
608
+ background: var(--color-brand-hover);
609
+ }
610
+
611
+ .jux-button:disabled {
612
+ opacity: 0.5;
613
+ cursor: not-allowed;
614
+ transform: none;
615
+ }
616
+
617
+ /* Table Component */
618
+ .jux-table {
619
+ width: 100%;
620
+ border-collapse: collapse;
621
+ background: var(--color-surface-elevated);
622
+ border-radius: var(--border-radius-lg);
623
+ overflow: hidden;
624
+ }
625
+
626
+ .jux-table th {
627
+ background: var(--color-surface-base);
628
+ padding: var(--space-md);
629
+ text-align: left;
630
+ font-weight: var(--font-weight-semibold);
631
+ border-bottom: var(--border-width-thick) solid var(--color-border);
632
+ color: var(--color-text-primary);
633
+ }
634
+
635
+ .jux-table td {
636
+ padding: var(--space-md);
637
+ border-bottom: var(--border-width) solid var(--color-border);
638
+ color: var(--color-text-secondary);
639
+ }
640
+
641
+ .jux-table tr:hover {
642
+ background: var(--color-surface-hover);
643
+ }
644
+
645
+ .jux-table tr:last-child td {
646
+ border-bottom: none;
647
+ }
648
+
649
+ /* Grid Utility */
650
+ .jux-grid {
651
+ display: grid;
652
+ gap: var(--space-lg);
653
+ grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
654
+ }
655
+
656
+ /* Stack Utility */
657
+ .jux-stack {
658
+ display: flex;
659
+ flex-direction: column;
660
+ gap: var(--space-md);
661
+ }
662
+
663
+ .jux-stack-horizontal {
664
+ flex-direction: row;
665
+ }
666
+
667
+ /* Tabs Component */
668
+ .jux-tabs-nav {
669
+ display: flex;
670
+ gap: var(--space-sm);
671
+ border-bottom: var(--border-width-thick) solid var(--color-border);
672
+ margin-bottom: var(--space-xl);
673
+ }
674
+
675
+ .jux-tabs-btn {
676
+ padding: var(--space-md) var(--space-lg);
677
+ background: none;
678
+ border: none;
679
+ color: var(--color-text-secondary);
680
+ cursor: pointer;
681
+ font-size: var(--font-size-base);
682
+ border-bottom: var(--border-width-thick) solid transparent;
683
+ margin-bottom: calc(var(--border-width-thick) * -1);
684
+ transition: all var(--transition-fast);
685
+ font-weight: var(--font-weight-medium);
686
+ }
687
+
688
+ .jux-tabs-btn:hover {
689
+ color: var(--color-text-primary);
690
+ }
691
+
692
+ .jux-tabs-btn.active {
693
+ color: var(--color-brand);
694
+ border-bottom-color: var(--color-brand);
695
+ }
696
+
697
+ .jux-tabs-panel {
698
+ display: none;
699
+ }
700
+
701
+ .jux-tabs-panel.active {
702
+ display: block;
703
+ }
704
+
705
+ /* Modal Component */
706
+ .jux-modal {
707
+ position: fixed;
708
+ top: 0;
709
+ left: 0;
710
+ right: 0;
711
+ bottom: 0;
712
+ z-index: 2000;
713
+ display: flex;
714
+ align-items: center;
715
+ justify-content: center;
716
+ }
717
+
718
+ .jux-modal-hidden {
719
+ display: none;
720
+ }
721
+
722
+ .jux-modal-overlay {
723
+ position: absolute;
724
+ top: 0;
725
+ left: 0;
726
+ right: 0;
727
+ bottom: 0;
728
+ background: rgba(0, 0, 0, 0.5);
729
+ backdrop-filter: blur(4px);
730
+ }
731
+
732
+ .jux-modal-dialog {
733
+ position: relative;
734
+ background: var(--color-surface-elevated);
735
+ border-radius: var(--border-radius-xl);
736
+ box-shadow: var(--shadow-xl);
737
+ max-width: 90vw;
738
+ max-height: 90vh;
739
+ overflow: auto;
740
+ }
741
+
742
+ .jux-modal-header {
743
+ display: flex;
744
+ align-items: center;
745
+ justify-content: space-between;
746
+ padding: var(--space-lg);
747
+ border-bottom: var(--border-width) solid var(--color-border);
748
+ }
749
+
750
+ .jux-modal-title {
751
+ font-size: var(--font-size-xl);
752
+ font-weight: var(--font-weight-semibold);
753
+ }
754
+
755
+ .jux-modal-close {
756
+ background: none;
757
+ border: none;
758
+ font-size: var(--font-size-2xl);
759
+ cursor: pointer;
760
+ color: var(--color-text-secondary);
761
+ line-height: 1;
762
+ }
763
+
764
+ .jux-modal-body {
765
+ padding: var(--space-lg);
766
+ }
767
+
768
+ .jux-modal-footer {
769
+ display: flex;
770
+ gap: var(--space-md);
771
+ justify-content: flex-end;
772
+ padding: var(--space-lg);
773
+ border-top: var(--border-width) solid var(--color-border);
774
+ }
775
+
776
+ /* Utility States */
777
+ .jux-loading {
778
+ display: flex;
779
+ align-items: center;
780
+ justify-content: center;
781
+ padding: var(--space-xl);
782
+ color: var(--color-text-secondary);
783
+ font-style: italic;
784
+ }
785
+
786
+ .jux-error {
787
+ background: rgba(239, 68, 68, 0.1);
788
+ border: var(--border-width) solid var(--color-danger);
789
+ border-radius: var(--border-radius-md);
790
+ padding: var(--space-md);
791
+ color: var(--color-danger);
792
+ margin: var(--space-md) 0;
793
+ }
794
+
795
+ /* List Component */
796
+ .jux-list-header {
797
+ font-size: var(--font-size-xl);
798
+ font-weight: var(--font-weight-semibold);
799
+ color: var(--color-text-primary);
800
+ margin-bottom: var(--space-lg);
801
+ padding-bottom: var(--space-sm);
802
+ border-bottom: var(--border-width-thick) solid var(--color-border);
803
+ }
804
+
805
+ .jux-list {
806
+ list-style: none;
807
+ padding: 0;
808
+ margin: 0;
809
+ display: flex;
810
+ flex-direction: column;
811
+ gap: var(--space-sm);
812
+ }
813
+
814
+ .jux-list-item {
815
+ display: flex;
816
+ align-items: flex-start;
817
+ gap: var(--space-md);
818
+ padding: var(--space-md);
819
+ background: var(--color-surface-elevated);
820
+ border: var(--border-width) solid var(--color-border);
821
+ border-radius: var(--border-radius-md);
822
+ transition: all var(--transition-base);
823
+ }
824
+
825
+ .jux-list-item:hover {
826
+ background: var(--color-surface-hover);
827
+ transform: translateX(4px);
828
+ box-shadow: var(--shadow-sm);
829
+ }
830
+
831
+ .jux-list-item-icon {
832
+ font-size: var(--font-size-2xl);
833
+ line-height: 1;
834
+ flex-shrink: 0;
835
+ width: 2rem;
836
+ text-align: center;
837
+ }
838
+
839
+ .jux-list-item-content {
840
+ flex: 1;
841
+ min-width: 0;
842
+ }
843
+
844
+ .jux-list-item-title {
845
+ font-size: var(--font-size-base);
846
+ font-weight: var(--font-weight-semibold);
847
+ color: var(--color-text-primary);
848
+ margin-bottom: var(--space-xs);
849
+ }
850
+
851
+ .jux-list-item-body {
852
+ font-size: var(--font-size-sm);
853
+ color: var(--color-text-secondary);
854
+ line-height: var(--line-height-normal);
855
+ }
856
+
857
+ .jux-list-item-metadata {
858
+ font-size: var(--font-size-sm);
859
+ color: var(--color-text-tertiary);
860
+ font-weight: var(--font-weight-medium);
861
+ white-space: nowrap;
862
+ align-self: center;
863
+ }
864
+
865
+ /* List Item Type Variants */
866
+ .jux-list-item-default {
867
+ border-left: 4px solid var(--color-border);
868
+ }
869
+
870
+ .jux-list-item-success {
871
+ border-left: 4px solid var(--color-success);
872
+ background: rgba(34, 197, 94, 0.05);
873
+ }
874
+
875
+ .jux-list-item-success .jux-list-item-icon {
876
+ color: var(--color-success);
877
+ }
878
+
879
+ .jux-list-item-warning {
880
+ border-left: 4px solid var(--color-warning);
881
+ background: rgba(251, 191, 36, 0.05);
882
+ }
883
+
884
+ .jux-list-item-warning .jux-list-item-icon {
885
+ color: var(--color-warning);
886
+ }
887
+
888
+ .jux-list-item-error {
889
+ border-left: 4px solid var(--color-danger);
890
+ background: rgba(239, 68, 68, 0.05);
891
+ }
892
+
893
+ .jux-list-item-error .jux-list-item-icon {
894
+ color: var(--color-danger);
895
+ }
896
+
897
+ .jux-list-item-info {
898
+ border-left: 4px solid var(--color-info);
899
+ background: rgba(59, 130, 246, 0.05);
900
+ }
901
+
902
+ .jux-list-item-info .jux-list-item-icon {
903
+ color: var(--color-info);
904
+ }
905
+
906
+ .jux-list-item-selectable {
907
+ cursor: pointer;
908
+ }
909
+
910
+ .jux-list-item-selectable:active {
911
+ transform: scale(0.98);
912
+ }
913
+
914
+ .jux-list-item-selected {
915
+ background: rgba(10, 156, 165, 0.15) !important;
916
+ border-color: var(--color-brand) !important;
917
+ box-shadow: 0 0 0 2px rgba(10, 156, 165, 0.2);
918
+ }
919
+
920
+ .jux-list-item-selected .jux-list-item-title {
921
+ color: var(--color-brand);
922
+ font-weight: var(--font-weight-bold);
923
+ }
924
+
925
+ /* Input Component */
926
+ .jux-input-wrapper {
927
+ display: flex;
928
+ flex-direction: column;
929
+ gap: var(--space-xs);
930
+ margin-bottom: var(--space-lg);
931
+ }
932
+
933
+ .jux-input-label {
934
+ font-size: var(--font-size-sm);
935
+ font-weight: var(--font-weight-semibold);
936
+ color: var(--color-text-primary);
937
+ display: block;
938
+ }
939
+
940
+ .jux-input-required {
941
+ color: var(--color-danger);
942
+ }
943
+
944
+ .jux-input {
945
+ width: 100%;
946
+ padding: var(--space-sm) var(--space-md);
947
+ font-size: var(--font-size-base);
948
+ background: var(--color-surface-elevated);
949
+ border: var(--border-width) solid var(--color-border);
950
+ border-radius: var(--border-radius-md);
951
+ color: var(--color-text-primary);
952
+ transition: all var(--transition-fast);
953
+ }
954
+
955
+ .jux-input:hover {
956
+ border-color: var(--color-border-focus);
957
+ }
958
+
959
+ .jux-input:focus {
960
+ outline: none;
961
+ border-color: var(--color-brand);
962
+ box-shadow: 0 0 0 3px rgba(10, 156, 165, 0.1);
963
+ }
964
+
965
+ .jux-input-focused .jux-input {
966
+ border-color: var(--color-brand);
967
+ box-shadow: 0 0 0 3px rgba(10, 156, 165, 0.1);
968
+ }
969
+
970
+ .jux-input-error .jux-input {
971
+ border-color: var(--color-danger);
972
+ }
973
+
974
+ .jux-input-error .jux-input:focus {
975
+ box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.1);
976
+ }
977
+
978
+ .jux-input-disabled .jux-input {
979
+ opacity: 0.6;
980
+ cursor: not-allowed;
981
+ background: var(--color-surface-base);
982
+ }
983
+
984
+ .jux-input-message {
985
+ font-size: var(--font-size-sm);
986
+ line-height: var(--line-height-tight);
987
+ }
988
+
989
+ .jux-input-message-helper {
990
+ color: var(--color-text-tertiary);
991
+ }
992
+
993
+ .jux-input-message-error {
994
+ color: var(--color-danger);
995
+ font-weight: var(--font-weight-medium);
996
+ }
997
+
998
+ /* Menu Component */
999
+ .jux-menu-dropdown {
1000
+ position: relative;
1001
+ background: var(--color-surface-elevated);
1002
+ border: var(--border-width) solid var(--color-border);
1003
+ border-radius: var(--border-radius-lg);
1004
+ box-shadow: var(--shadow-lg);
1005
+ min-width: 200px;
1006
+ z-index: 1000;
1007
+ }
1008
+
1009
+ .jux-menu-hidden {
1010
+ display: none;
1011
+ }
1012
+
1013
+ .jux-menu-list {
1014
+ list-style: none;
1015
+ padding: var(--space-xs);
1016
+ margin: 0;
1017
+ }
1018
+
1019
+ .jux-menu-item {
1020
+ display: flex;
1021
+ align-items: center;
1022
+ gap: var(--space-md);
1023
+ padding: var(--space-sm) var(--space-md);
1024
+ cursor: pointer;
1025
+ border-radius: var(--border-radius-sm);
1026
+ transition: all var(--transition-fast);
1027
+ color: var(--color-text-primary);
1028
+ font-size: var(--font-size-base);
1029
+ position: relative;
1030
+ }
1031
+
1032
+ .jux-menu-item:hover {
1033
+ background: var(--color-surface-hover);
1034
+ }
1035
+
1036
+ .jux-menu-item-focused {
1037
+ background: var(--color-surface-hover);
1038
+ }
1039
+
1040
+ .jux-menu-item-disabled {
1041
+ opacity: 0.5;
1042
+ cursor: not-allowed;
1043
+ }
1044
+
1045
+ .jux-menu-item-disabled:hover {
1046
+ background: transparent;
1047
+ }
1048
+
1049
+ .jux-menu-item-icon {
1050
+ font-size: var(--font-size-lg);
1051
+ width: 1.25rem;
1052
+ text-align: center;
1053
+ flex-shrink: 0;
1054
+ }
1055
+
1056
+ .jux-menu-item-label {
1057
+ flex: 1;
1058
+ }
1059
+
1060
+ .jux-menu-item-shortcut {
1061
+ font-size: var(--font-size-sm);
1062
+ color: var(--color-text-tertiary);
1063
+ font-family: var(--font-family-mono);
1064
+ margin-left: auto;
1065
+ }
1066
+
1067
+ .jux-menu-item-arrow {
1068
+ font-size: var(--font-size-xs);
1069
+ color: var(--color-text-tertiary);
1070
+ margin-left: auto;
1071
+ }
1072
+
1073
+ .jux-menu-divider {
1074
+ height: 1px;
1075
+ background: var(--color-border);
1076
+ margin: var(--space-xs) 0;
1077
+ }
1078
+
1079
+ .jux-menu-submenu {
1080
+ position: absolute;
1081
+ left: 100%;
1082
+ top: 0;
1083
+ margin-left: var(--space-xs);
1084
+ background: var(--color-surface-elevated);
1085
+ border: var(--border-width) solid var(--color-border);
1086
+ border-radius: var(--border-radius-lg);
1087
+ box-shadow: var(--shadow-lg);
1088
+ min-width: 180px;
1089
+ }
1090
+
1091
+ .jux-menu-submenu .jux-menu-list {
1092
+ padding: var(--space-xs);
1093
+ }
1094
+
1095
+ /* Menu positioning variants */
1096
+ .jux-menu-bottom-left {
1097
+ top: 100%;
1098
+ left: 0;
1099
+ margin-top: var(--space-xs);
1100
+ }
1101
+
1102
+ .jux-menu-bottom-right {
1103
+ top: 100%;
1104
+ right: 0;
1105
+ margin-top: var(--space-xs);
1106
+ }
1107
+
1108
+ .jux-menu-top-left {
1109
+ bottom: 100%;
1110
+ left: 0;
1111
+ margin-bottom: var(--space-xs);
1112
+ }
1113
+
1114
+ .jux-menu-top-right {
1115
+ bottom: 100%;
1116
+ right: 0;
1117
+ margin-bottom: var(--space-xs);
1118
+ }
1119
+
1120
+ /* Nav Component */
1121
+ .jux-nav {
1122
+ display: flex;
1123
+ }
1124
+
1125
+ .jux-nav-horizontal {
1126
+ flex-direction: row;
1127
+ }
1128
+
1129
+ .jux-nav-vertical {
1130
+ flex-direction: column;
1131
+ }
1132
+
1133
+ .jux-nav-list {
1134
+ list-style: none;
1135
+ padding: 0;
1136
+ margin: 0;
1137
+ display: flex;
1138
+ gap: var(--space-xs);
1139
+ }
1140
+
1141
+ .jux-nav-horizontal .jux-nav-list {
1142
+ flex-direction: row;
1143
+ }
1144
+
1145
+ .jux-nav-vertical .jux-nav-list {
1146
+ flex-direction: column;
1147
+ }
1148
+
1149
+ .jux-nav-item {
1150
+ position: relative;
1151
+ }
1152
+
1153
+ .jux-nav-link {
1154
+ display: flex;
1155
+ align-items: center;
1156
+ gap: var(--space-sm);
1157
+ padding: var(--space-sm) var(--space-md);
1158
+ color: var(--color-text-secondary);
1159
+ text-decoration: none;
1160
+ border-radius: var(--border-radius-md);
1161
+ transition: all var(--transition-fast);
1162
+ font-weight: var(--font-weight-medium);
1163
+ font-size: var(--font-size-base);
1164
+ cursor: pointer;
1165
+ background: none;
1166
+ border: none;
1167
+ width: 100%;
1168
+ text-align: left;
1169
+ }
1170
+
1171
+ .jux-nav-link:hover {
1172
+ color: var(--color-text-primary);
1173
+ background: var(--color-surface-hover);
1174
+ text-decoration: none;
1175
+ }
1176
+
1177
+ .jux-nav-item-active .jux-nav-link {
1178
+ color: var(--color-brand);
1179
+ background: rgba(10, 156, 165, 0.1);
1180
+ font-weight: var(--font-weight-semibold);
1181
+ }
1182
+
1183
+ .jux-nav-icon {
1184
+ font-size: var(--font-size-lg);
1185
+ width: 1.25rem;
1186
+ text-align: center;
1187
+ flex-shrink: 0;
1188
+ }
1189
+
1190
+ .jux-nav-label {
1191
+ flex: 1;
1192
+ }
1193
+
1194
+ .jux-nav-badge {
1195
+ font-size: var(--font-size-xs);
1196
+ padding: var(--space-xs) var(--space-sm);
1197
+ background: var(--color-danger);
1198
+ color: var(--color-text-inverse);
1199
+ border-radius: var(--border-radius-full);
1200
+ font-weight: var(--font-weight-bold);
1201
+ line-height: 1;
1202
+ }
1203
+
1204
+ .jux-nav-arrow {
1205
+ font-size: var(--font-size-xs);
1206
+ color: var(--color-text-tertiary);
1207
+ margin-left: auto;
1208
+ transition: transform var(--transition-fast);
1209
+ }
1210
+
1211
+ .jux-nav-item-expanded .jux-nav-arrow {
1212
+ transform: rotate(90deg);
1213
+ }
1214
+
1215
+ .jux-nav-divider {
1216
+ height: 1px;
1217
+ background: var(--color-border);
1218
+ margin: var(--space-sm) 0;
1219
+ }
1220
+
1221
+ .jux-nav-horizontal .jux-nav-divider {
1222
+ width: 1px;
1223
+ height: auto;
1224
+ margin: 0 var(--space-sm);
1225
+ }
1226
+
1227
+ .jux-nav-children {
1228
+ list-style: none;
1229
+ padding: var(--space-xs) 0 var(--space-xs) var(--space-lg);
1230
+ margin: 0;
1231
+ display: flex;
1232
+ flex-direction: column;
1233
+ gap: var(--space-xs);
1234
+ }
1235
+
1236
+ .jux-nav-horizontal .jux-nav-children {
1237
+ position: absolute;
1238
+ top: 100%;
1239
+ left: 0;
1240
+ margin-top: var(--space-xs);
1241
+ padding: var(--space-xs);
1242
+ background: var(--color-surface-elevated);
1243
+ border: var(--border-width) solid var(--color-border);
1244
+ border-radius: var(--border-radius-lg);
1245
+ box-shadow: var(--shadow-lg);
1246
+ min-width: 200px;
1247
+ }
1248
+
1249
+
1250
+ /* Code Component */
1251
+ .jux-code-container {
1252
+ position: relative;
1253
+ background: #1e1e1e;
1254
+ border: var(--border-width) solid #333;
1255
+ border-radius: var(--border-radius-md);
1256
+ overflow: visible;
1257
+ margin: var(--space-md) 0;
1258
+ font-family: var(--font-family-mono);
1259
+ }
1260
+
1261
+ .jux-code-title-bar {
1262
+ display: flex;
1263
+ justify-content: space-between;
1264
+ align-items: center;
1265
+ padding: var(--space-xs) var(--space-md);
1266
+ background: #2d2d2d;
1267
+ border-bottom: var(--border-width) solid #333;
1268
+ }
1269
+
1270
+ .jux-code-title {
1271
+ font-size: var(--font-size-xs);
1272
+ font-weight: var(--font-weight-medium);
1273
+ color: #d4d4d4;
1274
+ font-family: var(--font-family-mono);
1275
+ }
1276
+
1277
+ .jux-code-language-badge {
1278
+ font-size: var(--font-size-xs);
1279
+ padding: 2px var(--space-sm);
1280
+ background: #007acc;
1281
+ color: #ffffff;
1282
+ border-radius: var(--border-radius-sm);
1283
+ text-transform: lowercase;
1284
+ font-weight: var(--font-weight-medium);
1285
+ font-family: var(--font-family-mono);
1286
+ }
1287
+
1288
+ .jux-code-wrapper {
1289
+ overflow-x: auto;
1290
+ overflow-y: visible;
1291
+ background: #1e1e1e;
1292
+ }
1293
+
1294
+ .jux-code-pre {
1295
+ margin: 0;
1296
+ padding: var(--space-lg);
1297
+ font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;
1298
+ font-size: 13px;
1299
+ line-height: 1.6;
1300
+ color: #d4d4d4;
1301
+ background: transparent;
1302
+ overflow-x: auto;
1303
+ tab-size: 2;
1304
+ -moz-tab-size: 2;
1305
+ }
1306
+
1307
+ .jux-code-wrap {
1308
+ white-space: pre-wrap;
1309
+ word-break: break-all;
1310
+ overflow-wrap: break-word;
1311
+ }
1312
+
1313
+ .jux-code-block {
1314
+ display: block;
1315
+ color: #d4d4d4;
1316
+ }
1317
+
1318
+ .jux-code-numbered {
1319
+ display: flex;
1320
+ flex-direction: column;
1321
+ }
1322
+
1323
+ .jux-code-line {
1324
+ display: flex;
1325
+ min-height: 1.6em;
1326
+ }
1327
+
1328
+ .jux-code-line-highlighted {
1329
+ background: rgba(255, 255, 255, 0.1);
1330
+ border-left: 2px solid #007acc;
1331
+ margin-left: -2px;
1332
+ }
1333
+
1334
+ .jux-code-line-number {
1335
+ flex-shrink: 0;
1336
+ width: 2.5em;
1337
+ padding-right: var(--space-md);
1338
+ text-align: right;
1339
+ color: #858585;
1340
+ user-select: none;
1341
+ border-right: var(--border-width) solid #333;
1342
+ margin-right: var(--space-md);
1343
+ font-size: 12px;
1344
+ }
1345
+
1346
+ .jux-code-line-content {
1347
+ flex: 1;
1348
+ color: #d4d4d4;
1349
+ }
1350
+
1351
+ .jux-code-copy-btn {
1352
+ position: absolute;
1353
+ top: var(--space-xs);
1354
+ right: var(--space-xs);
1355
+ padding: 4px var(--space-sm);
1356
+ font-size: var(--font-size-xs);
1357
+ background: #2d2d2d;
1358
+ color: #d4d4d4;
1359
+ border: var(--border-width) solid #333;
1360
+ border-radius: var(--border-radius-sm);
1361
+ cursor: pointer;
1362
+ transition: all var(--transition-fast);
1363
+ font-family: var(--font-family-mono);
1364
+ opacity: 0.7;
1365
+ }
1366
+
1367
+ .jux-code-copy-btn:hover {
1368
+ background: #007acc;
1369
+ color: #ffffff;
1370
+ border-color: #007acc;
1371
+ opacity: 1;
1372
+ }
1373
+
1374
+ .jux-code-container:hover .jux-code-copy-btn {
1375
+ opacity: 1;
521
1376
  }