@santi020k/lumen 0.3.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/styles.css CHANGED
@@ -26,6 +26,22 @@
26
26
  --success: 142 71% 36%;
27
27
  --warning: 38 92% 50%;
28
28
  --danger: 0 84% 60%;
29
+ --chart-axis: var(--ink-muted);
30
+ --chart-diverging-mid: 220 13% 91%;
31
+ --chart-diverging-negative: 0 84% 60%;
32
+ --chart-diverging-positive: 221 83% 53%;
33
+ --chart-grid: var(--line);
34
+ --chart-sequential-high: 221 83% 40%;
35
+ --chart-sequential-low: 218 100% 97%;
36
+ --chart-sequential-mid: 221 83% 67%;
37
+ --chart-series-1: 221 83% 53%;
38
+ --chart-series-2: 168 76% 36%;
39
+ --chart-series-3: 280 72% 56%;
40
+ --chart-series-4: 25 95% 53%;
41
+ --chart-series-5: 340 82% 55%;
42
+ --chart-series-6: 190 82% 42%;
43
+ --chart-series-7: 52 92% 45%;
44
+ --chart-series-8: 215 16% 47%;
29
45
  --ui-on-danger: 0 0% 0%;
30
46
  --ui-radius: 0.625rem;
31
47
  --ui-radius-sm: 0.375rem;
@@ -49,7 +65,7 @@
49
65
  0 1px 2px hsl(222 47% 11% / 0.08),
50
66
  0 12px 32px hsl(222 47% 11% / 0.12),
51
67
  0 32px 80px hsl(222 47% 11% / 0.14);
52
- --ui-font: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
68
+ --ui-font: "Montserrat", "Avenir Next", "Segoe UI", sans-serif;
53
69
  --ui-duration-fast: 120ms;
54
70
  --ui-duration: 160ms;
55
71
  --ui-duration-slow: 300ms;
@@ -75,6 +91,22 @@
75
91
  --success: 142 69% 45%;
76
92
  --warning: 38 92% 55%;
77
93
  --danger: 0 84% 65%;
94
+ --chart-axis: var(--ink-muted);
95
+ --chart-diverging-mid: 222 14% 22%;
96
+ --chart-diverging-negative: 0 84% 65%;
97
+ --chart-diverging-positive: 199 91% 56%;
98
+ --chart-grid: var(--line);
99
+ --chart-sequential-high: 199 91% 66%;
100
+ --chart-sequential-low: 199 84% 16%;
101
+ --chart-sequential-mid: 199 72% 42%;
102
+ --chart-series-1: 199 91% 56%;
103
+ --chart-series-2: 166 76% 43%;
104
+ --chart-series-3: 285 82% 72%;
105
+ --chart-series-4: 31 96% 62%;
106
+ --chart-series-5: 342 88% 68%;
107
+ --chart-series-6: 188 86% 54%;
108
+ --chart-series-7: 52 94% 58%;
109
+ --chart-series-8: 215 18% 68%;
78
110
  --ui-on-danger: var(--canvas);
79
111
  --ui-shadow-sm: 0 1px 2px hsl(0 0% 0% / 0.18);
80
112
  --ui-shadow-md: 0 12px 32px hsl(0 0% 0% / 0.24);
@@ -243,6 +275,7 @@
243
275
  .ui-skeleton,
244
276
  .ui-slider,
245
277
  .ui-sonner,
278
+ .ui-sparkline,
246
279
  .ui-spinner,
247
280
  .ui-switch,
248
281
  .ui-table-wrap,
@@ -616,7 +649,47 @@
616
649
  }
617
650
 
618
651
  .ui-card {
619
- padding: 1.25rem;
652
+ --ui-card-gap: 1rem;
653
+ --ui-card-padding: 1.25rem;
654
+ --ui-card-section-gap: 0.375rem;
655
+
656
+ padding: var(--ui-card-padding);
657
+ }
658
+
659
+ .ui-card__header {
660
+ display: grid;
661
+ gap: var(--ui-card-section-gap);
662
+ }
663
+
664
+ .ui-card__title {
665
+ color: hsl(var(--ink));
666
+ font-size: 1.125rem;
667
+ font-weight: 700;
668
+ letter-spacing: -0.015em;
669
+ line-height: 1.3;
670
+ }
671
+
672
+ .ui-card__description {
673
+ color: hsl(var(--ink-muted));
674
+ font-size: 0.875rem;
675
+ line-height: 1.55;
676
+ }
677
+
678
+ .ui-card__content {
679
+ color: hsl(var(--ink-soft));
680
+ }
681
+
682
+ .ui-card__footer {
683
+ align-items: center;
684
+ display: flex;
685
+ gap: 0.75rem;
686
+ }
687
+
688
+ .ui-card > :where(
689
+ .ui-card__content,
690
+ .ui-card__footer
691
+ ) {
692
+ margin-block-start: var(--ui-card-gap);
620
693
  }
621
694
 
622
695
  .ui-card--muted {
@@ -639,17 +712,24 @@
639
712
  }
640
713
 
641
714
  .ui-button {
715
+ --ui-button-font-size: 0.875rem;
716
+ --ui-button-font-weight: 600;
717
+ --ui-button-gap: 0.5rem;
718
+ --ui-button-min-height: 2.5rem;
719
+ --ui-button-padding: 0.5rem 1rem;
720
+ --ui-button-radius: var(--ui-radius-sm);
721
+
642
722
  display: inline-flex;
643
- min-height: 2.5rem;
723
+ min-height: var(--ui-button-min-height);
644
724
  align-items: center;
645
725
  justify-content: center;
646
- gap: 0.5rem;
726
+ gap: var(--ui-button-gap);
647
727
  border: 1px solid transparent;
648
- border-radius: var(--ui-radius-sm);
649
- padding: 0.5rem 1rem;
728
+ border-radius: var(--ui-button-radius);
729
+ padding: var(--ui-button-padding);
650
730
  cursor: pointer;
651
- font-size: 0.875rem;
652
- font-weight: 600;
731
+ font-size: var(--ui-button-font-size);
732
+ font-weight: var(--ui-button-font-weight);
653
733
  line-height: 1.2;
654
734
  text-align: center;
655
735
  text-decoration: none;
@@ -876,10 +956,13 @@
876
956
  }
877
957
 
878
958
  .ui-link {
959
+ --ui-link-font-weight: 600;
960
+ --ui-link-underline-offset: 0.2em;
961
+
879
962
  color: hsl(var(--brand));
880
- font-weight: 600;
963
+ font-weight: var(--ui-link-font-weight);
881
964
  text-decoration-thickness: 0.08em;
882
- text-underline-offset: 0.2em;
965
+ text-underline-offset: var(--ui-link-underline-offset);
883
966
  }
884
967
 
885
968
  .ui-link:hover {
@@ -957,21 +1040,20 @@
957
1040
  min-height: 12rem;
958
1041
  overflow: hidden;
959
1042
  border-radius: var(--ui-radius-lg);
960
- background-color: hsl(var(--surface-muted));
961
- background-image:
962
- radial-gradient(circle, hsl(var(--brand) / 0.34) 0 2px, transparent 2.5px),
963
- radial-gradient(circle, hsl(var(--accent) / 0.28) 0 1.5px, transparent 2px),
964
- radial-gradient(circle, hsl(var(--ink) / 0.14) 0 1px, transparent 1.5px);
965
- background-position: 1rem 1rem, 3.5rem 2.5rem, 6rem 4rem;
966
- background-size: 7rem 7rem, 9rem 9rem, 5rem 5rem;
967
- }
968
-
969
- .ui-particles[data-ui-particles="low"] {
970
- background-size: 11rem 11rem, 14rem 14rem, 9rem 9rem;
1043
+ background: transparent;
971
1044
  }
972
1045
 
973
- .ui-particles[data-ui-particles="high"] {
974
- background-size: 4.5rem 4.5rem, 6rem 6rem, 3.5rem 3.5rem;
1046
+ .ui-particles__particle {
1047
+ position: absolute;
1048
+ top: var(--ui-particle-top);
1049
+ left: var(--ui-particle-left);
1050
+ width: var(--ui-particle-size);
1051
+ height: var(--ui-particle-size);
1052
+ border-radius: 50%;
1053
+ background: hsl(var(--ui-particle-tone) / 0.25);
1054
+ box-shadow: 0 0 var(--ui-particle-size) hsl(var(--ui-particle-tone) / 0.15);
1055
+ opacity: 0;
1056
+ animation: ui-particle-drift var(--ui-particle-duration) ease-in-out var(--ui-particle-delay) infinite;
975
1057
  }
976
1058
 
977
1059
  .ui-motion-duration-fast {
@@ -1628,6 +1710,16 @@
1628
1710
  transition: width 260ms ease;
1629
1711
  }
1630
1712
 
1713
+ .ui-copy-button[data-state="copied"] {
1714
+ border-color: hsl(var(--success));
1715
+ color: hsl(var(--success));
1716
+ }
1717
+
1718
+ .ui-copy-button[data-state="error"] {
1719
+ border-color: hsl(var(--danger));
1720
+ color: hsl(var(--danger));
1721
+ }
1722
+
1631
1723
  .ui-skeleton {
1632
1724
  min-height: 1rem;
1633
1725
  border-radius: var(--ui-radius-sm);
@@ -2102,6 +2194,13 @@
2102
2194
  padding: 0.25rem;
2103
2195
  }
2104
2196
 
2197
+ .ui-navigation-menu {
2198
+ --ui-navigation-menu-gap: 0.25rem;
2199
+ --ui-navigation-menu-item-padding: 0.5rem 0.7rem;
2200
+
2201
+ gap: var(--ui-navigation-menu-gap);
2202
+ }
2203
+
2105
2204
  .ui-menubar :where(a, button),
2106
2205
  .ui-navigation-menu :where(a, button) {
2107
2206
  border: 0;
@@ -2112,7 +2211,7 @@
2112
2211
  font: inherit;
2113
2212
  font-size: 0.875rem;
2114
2213
  font-weight: 600;
2115
- padding: 0.5rem 0.7rem;
2214
+ padding: var(--ui-navigation-menu-item-padding);
2116
2215
  text-decoration: none;
2117
2216
  }
2118
2217
 
@@ -2294,6 +2393,9 @@
2294
2393
  }
2295
2394
 
2296
2395
  .ui-code-tabs {
2396
+ --ui-code-tabs-list-padding: 0.375rem;
2397
+ --ui-code-tabs-tab-padding: 0.5rem 0.875rem;
2398
+
2297
2399
  display: block;
2298
2400
  overflow: hidden;
2299
2401
  border: 1px solid hsl(var(--line));
@@ -2309,7 +2411,7 @@
2309
2411
  border-bottom: 1px solid hsl(var(--line));
2310
2412
  border-radius: 0;
2311
2413
  background: hsl(var(--surface));
2312
- padding: 0.375rem;
2414
+ padding: var(--ui-code-tabs-list-padding);
2313
2415
  }
2314
2416
 
2315
2417
  .ui-code-tabs .ui-code-tabs__tab {
@@ -2321,7 +2423,7 @@
2321
2423
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
2322
2424
  font-size: 0.8125rem;
2323
2425
  font-weight: 500;
2324
- padding: 0.5rem 0.875rem;
2426
+ padding: var(--ui-code-tabs-tab-padding);
2325
2427
  transition:
2326
2428
  background-color 150ms ease,
2327
2429
  color 150ms ease;
@@ -2385,6 +2487,8 @@
2385
2487
 
2386
2488
  .ui-table-wrap,
2387
2489
  .ui-data-table {
2490
+ --ui-table-cell-padding: 0.75rem 1rem;
2491
+
2388
2492
  width: 100%;
2389
2493
  overflow-x: auto;
2390
2494
  border: 1px solid hsl(var(--line));
@@ -2404,7 +2508,7 @@
2404
2508
  border-bottom: 1px solid hsl(var(--line));
2405
2509
  color: hsl(var(--ink));
2406
2510
  font-weight: 650;
2407
- padding: 0.75rem 1rem;
2511
+ padding: var(--ui-table-cell-padding);
2408
2512
  text-align: start;
2409
2513
  }
2410
2514
 
@@ -2425,7 +2529,7 @@
2425
2529
  cursor: pointer;
2426
2530
  font: inherit;
2427
2531
  font-weight: inherit;
2428
- padding: 0.75rem 1rem;
2532
+ padding: var(--ui-table-cell-padding);
2429
2533
  text-align: inherit;
2430
2534
  }
2431
2535
 
@@ -2467,7 +2571,7 @@
2467
2571
  .ui-data-table td {
2468
2572
  border-bottom: 1px solid hsl(var(--line) / 0.72);
2469
2573
  color: hsl(var(--ink-soft));
2470
- padding: 0.75rem 1rem;
2574
+ padding: var(--ui-table-cell-padding);
2471
2575
  }
2472
2576
 
2473
2577
  .ui-data-table__selection {
@@ -2572,16 +2676,20 @@
2572
2676
  }
2573
2677
 
2574
2678
  .ui-sidebar {
2679
+ --ui-sidebar-gap: 0.35rem;
2680
+ --ui-sidebar-padding: 0.75rem;
2681
+ --ui-sidebar-width: 18rem;
2682
+
2575
2683
  display: flex;
2576
2684
  min-height: 100%;
2577
- width: min(18rem, 100%);
2685
+ width: min(var(--ui-sidebar-width), 100%);
2578
2686
  flex-direction: column;
2579
- gap: 0.35rem;
2687
+ gap: var(--ui-sidebar-gap);
2580
2688
  border: 1px solid hsl(var(--line));
2581
2689
  border-radius: var(--ui-radius-lg);
2582
2690
  background: hsl(var(--surface));
2583
2691
  box-shadow: var(--ui-shadow-sm);
2584
- padding: 0.75rem;
2692
+ padding: var(--ui-sidebar-padding);
2585
2693
  }
2586
2694
 
2587
2695
  .ui-sidebar a {
@@ -3385,6 +3493,15 @@
3385
3493
  padding: 1rem;
3386
3494
  }
3387
3495
 
3496
+ .ui-chart--bare {
3497
+ overflow: visible;
3498
+ border: 0;
3499
+ border-radius: 0;
3500
+ background: transparent;
3501
+ box-shadow: none;
3502
+ padding: 0;
3503
+ }
3504
+
3388
3505
  .ui-chart > header {
3389
3506
  display: flex;
3390
3507
  flex-wrap: wrap;
@@ -3393,6 +3510,11 @@
3393
3510
  gap: 0.75rem;
3394
3511
  }
3395
3512
 
3513
+ .ui-chart__heading {
3514
+ display: grid;
3515
+ gap: 0.25rem;
3516
+ }
3517
+
3396
3518
  .ui-chart h2,
3397
3519
  .ui-chart h3,
3398
3520
  .ui-chart p {
@@ -3413,6 +3535,24 @@
3413
3535
  color: hsl(var(--brand));
3414
3536
  }
3415
3537
 
3538
+ .ui-chart__plot {
3539
+ min-width: 0;
3540
+ overflow-x: auto;
3541
+ }
3542
+
3543
+ .ui-chart__empty {
3544
+ min-height: 10rem;
3545
+ display: grid;
3546
+ margin: 0;
3547
+ color: hsl(var(--ink-muted));
3548
+ place-items: center;
3549
+ text-align: center;
3550
+ }
3551
+
3552
+ .ui-chart__plot > svg {
3553
+ min-width: 32rem;
3554
+ }
3555
+
3416
3556
  .ui-chart svg :where(path, polyline, line) {
3417
3557
  vector-effect: non-scaling-stroke;
3418
3558
  stroke-linecap: round;
@@ -3425,6 +3565,273 @@
3425
3565
  line-height: 1.5;
3426
3566
  }
3427
3567
 
3568
+ .ui-chart__legend {
3569
+ display: flex;
3570
+ flex-wrap: wrap;
3571
+ gap: 0.5rem 1rem;
3572
+ margin: 0;
3573
+ padding: 0;
3574
+ color: hsl(var(--ink-soft));
3575
+ font-size: 0.75rem;
3576
+ list-style: none;
3577
+ }
3578
+
3579
+ .ui-chart__legend li {
3580
+ display: inline-flex;
3581
+ align-items: center;
3582
+ gap: 0.4rem;
3583
+ }
3584
+
3585
+ .ui-chart__legend li > span {
3586
+ width: 0.65rem;
3587
+ height: 0.65rem;
3588
+ border: 2px solid var(--ui-chart-color);
3589
+ border-radius: 999px;
3590
+ background: color-mix(in srgb, var(--ui-chart-color) 30%, transparent);
3591
+ }
3592
+
3593
+ .ui-chart__grid line {
3594
+ stroke: hsl(var(--chart-grid) / 0.72);
3595
+ stroke-width: 1;
3596
+ }
3597
+
3598
+ .ui-chart__grid text,
3599
+ .ui-chart__axis-labels text {
3600
+ fill: hsl(var(--chart-axis));
3601
+ font-size: 0.6875rem;
3602
+ }
3603
+
3604
+ .ui-chart__grid text {
3605
+ dominant-baseline: middle;
3606
+ text-anchor: end;
3607
+ }
3608
+
3609
+ .ui-chart__reference {
3610
+ stroke: hsl(var(--ink-muted));
3611
+ stroke-dasharray: 5 5;
3612
+ stroke-width: 1.5;
3613
+ }
3614
+
3615
+ .ui-chart__data {
3616
+ border-top: 1px solid hsl(var(--line));
3617
+ color: hsl(var(--ink-soft));
3618
+ font-size: 0.8125rem;
3619
+ padding-block-start: 0.75rem;
3620
+ }
3621
+
3622
+ .ui-chart__data summary {
3623
+ width: fit-content;
3624
+ border-radius: var(--ui-radius-sm);
3625
+ color: hsl(var(--brand));
3626
+ cursor: pointer;
3627
+ font-weight: 700;
3628
+ }
3629
+
3630
+ .ui-chart__data summary:focus-visible {
3631
+ outline: 2px solid hsl(var(--brand) / 0.72);
3632
+ outline-offset: 0.2rem;
3633
+ }
3634
+
3635
+ .ui-chart__data > div {
3636
+ overflow-x: auto;
3637
+ margin-block-start: 0.75rem;
3638
+ }
3639
+
3640
+ .ui-chart__data table {
3641
+ width: 100%;
3642
+ border-collapse: collapse;
3643
+ }
3644
+
3645
+ .ui-chart__data :where(th, td) {
3646
+ border-bottom: 1px solid hsl(var(--line));
3647
+ padding: 0.5rem;
3648
+ text-align: end;
3649
+ white-space: nowrap;
3650
+ }
3651
+
3652
+ .ui-chart__data :where(th, td):first-child {
3653
+ text-align: start;
3654
+ }
3655
+
3656
+ .ui-chart__data th {
3657
+ color: hsl(var(--ink));
3658
+ font-weight: 700;
3659
+ }
3660
+
3661
+ .ui-chart-tone--series-1 {
3662
+ --ui-chart-color: hsl(var(--chart-series-1));
3663
+ }
3664
+
3665
+ .ui-chart-tone--series-2 {
3666
+ --ui-chart-color: hsl(var(--chart-series-2));
3667
+ }
3668
+
3669
+ .ui-chart-tone--series-3 {
3670
+ --ui-chart-color: hsl(var(--chart-series-3));
3671
+ }
3672
+
3673
+ .ui-chart-tone--series-4 {
3674
+ --ui-chart-color: hsl(var(--chart-series-4));
3675
+ }
3676
+
3677
+ .ui-chart-tone--series-5 {
3678
+ --ui-chart-color: hsl(var(--chart-series-5));
3679
+ }
3680
+
3681
+ .ui-chart-tone--series-6 {
3682
+ --ui-chart-color: hsl(var(--chart-series-6));
3683
+ }
3684
+
3685
+ .ui-chart-tone--series-7 {
3686
+ --ui-chart-color: hsl(var(--chart-series-7));
3687
+ }
3688
+
3689
+ .ui-chart-tone--series-8 {
3690
+ --ui-chart-color: hsl(var(--chart-series-8));
3691
+ }
3692
+
3693
+ .ui-chart-tone--brand {
3694
+ --ui-chart-color: hsl(var(--brand));
3695
+ }
3696
+
3697
+ .ui-chart-tone--accent {
3698
+ --ui-chart-color: hsl(var(--accent));
3699
+ }
3700
+
3701
+ .ui-chart-tone--success {
3702
+ --ui-chart-color: hsl(var(--success));
3703
+ }
3704
+
3705
+ .ui-chart-tone--warning {
3706
+ --ui-chart-color: hsl(var(--warning));
3707
+ }
3708
+
3709
+ .ui-chart-tone--danger {
3710
+ --ui-chart-color: hsl(var(--danger));
3711
+ }
3712
+
3713
+ .ui-chart-tone--neutral {
3714
+ --ui-chart-color: hsl(var(--ink-muted));
3715
+ }
3716
+
3717
+ .ui-bar-chart__marks rect {
3718
+ fill: var(--ui-chart-color);
3719
+ }
3720
+
3721
+ .ui-pie-chart__plot {
3722
+ position: relative;
3723
+ display: grid;
3724
+ overflow: visible;
3725
+ place-items: center;
3726
+ }
3727
+
3728
+ .ui-pie-chart__plot > svg {
3729
+ z-index: 0;
3730
+ grid-area: 1 / 1;
3731
+ width: min(100%, 20rem);
3732
+ min-width: 0;
3733
+ min-height: 0;
3734
+ aspect-ratio: 1;
3735
+ }
3736
+
3737
+ .ui-pie-chart__slices path {
3738
+ fill: var(--ui-chart-color);
3739
+ stroke: hsl(var(--surface));
3740
+ stroke-width: 2;
3741
+ }
3742
+
3743
+ .ui-pie-chart__center {
3744
+ z-index: 1;
3745
+ display: grid;
3746
+ grid-area: 1 / 1;
3747
+ max-width: 7rem;
3748
+ gap: 0.2rem;
3749
+ place-items: center;
3750
+ text-align: center;
3751
+ pointer-events: none;
3752
+ }
3753
+
3754
+ .ui-pie-chart__center strong {
3755
+ color: hsl(var(--ink));
3756
+ font-size: clamp(1.35rem, 5vw, 2rem);
3757
+ line-height: 1;
3758
+ }
3759
+
3760
+ .ui-pie-chart__center span {
3761
+ color: hsl(var(--ink-muted));
3762
+ font-size: 0.75rem;
3763
+ line-height: 1.25;
3764
+ }
3765
+
3766
+ .ui-line-chart__line,
3767
+ .ui-sparkline__line {
3768
+ fill: none;
3769
+ stroke: var(--ui-chart-color);
3770
+ stroke-width: 2.5;
3771
+ }
3772
+
3773
+ .ui-line-chart__area,
3774
+ .ui-sparkline__area {
3775
+ fill: color-mix(in srgb, var(--ui-chart-color) 18%, transparent);
3776
+ stroke: none;
3777
+ }
3778
+
3779
+ .ui-line-chart__point,
3780
+ .ui-sparkline__endpoint {
3781
+ fill: hsl(var(--surface));
3782
+ stroke: var(--ui-chart-color);
3783
+ stroke-width: 2;
3784
+ }
3785
+
3786
+ .ui-line-chart__series.ui-chart-tone--series-2 .ui-line-chart__line {
3787
+ stroke-dasharray: 8 5;
3788
+ }
3789
+
3790
+ .ui-line-chart__series.ui-chart-tone--series-3 .ui-line-chart__line {
3791
+ stroke-dasharray: 3 4;
3792
+ }
3793
+
3794
+ .ui-line-chart__series.ui-chart-tone--series-4 .ui-line-chart__line {
3795
+ stroke-dasharray: 10 4 2 4;
3796
+ }
3797
+
3798
+ .ui-line-chart__series:is(
3799
+ .ui-chart-tone--series-5,
3800
+ .ui-chart-tone--series-6,
3801
+ .ui-chart-tone--series-7,
3802
+ .ui-chart-tone--series-8
3803
+ ) .ui-line-chart__line {
3804
+ stroke-dasharray: 2 5;
3805
+ }
3806
+
3807
+ .ui-sparkline {
3808
+ display: inline-flex;
3809
+ width: 8rem;
3810
+ height: 2.5rem;
3811
+ color: hsl(var(--ink));
3812
+ }
3813
+
3814
+ .ui-sparkline svg {
3815
+ display: block;
3816
+ width: 100%;
3817
+ height: 100%;
3818
+ overflow: visible;
3819
+ }
3820
+
3821
+ @media (prefers-reduced-motion: no-preference) {
3822
+ .ui-pie-chart__slices path {
3823
+ transition:
3824
+ opacity var(--ui-duration-fast) var(--ui-ease),
3825
+ transform var(--ui-duration-fast) var(--ui-ease);
3826
+ transform-box: fill-box;
3827
+ transform-origin: center;
3828
+ }
3829
+
3830
+ .ui-pie-chart__slices path:hover {
3831
+ transform: scale(1.025);
3832
+ }
3833
+ }
3834
+
3428
3835
  .ui-sonner {
3429
3836
  position: fixed;
3430
3837
  z-index: 50;
@@ -3499,10 +3906,12 @@
3499
3906
  }
3500
3907
 
3501
3908
  .ui-theme-toggle {
3909
+ --ui-theme-toggle-size: 2.75rem;
3910
+
3502
3911
  position: relative;
3503
3912
  display: flex;
3504
- height: 2.75rem;
3505
- width: 2.75rem;
3913
+ height: var(--ui-theme-toggle-size);
3914
+ width: var(--ui-theme-toggle-size);
3506
3915
  cursor: pointer;
3507
3916
  align-items: center;
3508
3917
  justify-content: center;
@@ -4053,6 +4462,7 @@
4053
4462
  .ui-date-picker-field--glass .ui-date-picker__popover,
4054
4463
  .ui-select-field--glass .ui-select__list,
4055
4464
  .ui-sidebar--glass,
4465
+ .ui-stat--glass,
4056
4466
  .ui-table-wrap--glass,
4057
4467
  .ui-tabs--glass,
4058
4468
  .ui-theme-builder--glass,
@@ -4250,6 +4660,7 @@
4250
4660
  .ui-date-picker-field--glass .ui-date-picker__popover,
4251
4661
  .ui-select-field--glass .ui-select__list,
4252
4662
  .ui-sidebar--glass,
4663
+ .ui-stat--glass,
4253
4664
  .ui-table-wrap--glass,
4254
4665
  .ui-tabs--glass,
4255
4666
  .ui-theme-builder--glass,
@@ -4706,10 +5117,10 @@
4706
5117
  opacity: 0;
4707
5118
  }
4708
5119
  10% {
4709
- opacity: 0.15;
5120
+ opacity: 0.9;
4710
5121
  }
4711
5122
  90% {
4712
- opacity: 0.1;
5123
+ opacity: 0.7;
4713
5124
  }
4714
5125
  100% {
4715
5126
  transform: translateY(-100vh) translateX(20px);
@@ -4717,17 +5128,62 @@
4717
5128
  }
4718
5129
  }
4719
5130
 
5131
+ @media (prefers-reduced-motion: reduce) {
5132
+ .ui-particles__particle {
5133
+ display: none;
5134
+ animation: none;
5135
+ }
5136
+ }
5137
+
4720
5138
  .ui-stat {
5139
+ --ui-stat-gap: 0.25rem;
5140
+ --ui-stat-padding: 1rem;
5141
+
4721
5142
  display: flex;
4722
5143
  flex-direction: column;
4723
- gap: 0.25rem;
4724
- padding: 1rem;
5144
+ gap: var(--ui-stat-gap);
5145
+ padding: var(--ui-stat-padding);
4725
5146
  background: hsl(var(--surface));
4726
5147
  border: 1px solid hsl(var(--line));
4727
5148
  border-radius: 0.5rem;
4728
5149
  }
4729
- .ui-stat-label {
4730
- font-size: 0.875rem;
5150
+
5151
+ .ui-stat--accent,
5152
+ .ui-stat--glass {
5153
+ --ui-stat-gap: 0.5rem;
5154
+ --ui-stat-padding: 1.25rem;
5155
+
5156
+ border-radius: var(--ui-radius-lg);
5157
+ }
5158
+
5159
+ .ui-stat--bare {
5160
+ --ui-stat-padding: 0;
5161
+
5162
+ background: transparent;
5163
+ border: 0;
5164
+ border-radius: 0;
5165
+ }
5166
+
5167
+ .ui-stat--accent {
5168
+ border-color: hsl(var(--brand) / 0.2);
5169
+ background: linear-gradient(145deg, hsl(var(--surface)), hsl(var(--brand-soft) / 0.28));
5170
+ box-shadow: var(--ui-shadow-sm);
5171
+ }
5172
+
5173
+ .ui-stat--accent .ui-stat-value,
5174
+ .ui-stat--glass .ui-stat-value {
5175
+ font-size: 2rem;
5176
+ font-weight: 700;
5177
+ line-height: 1.1;
5178
+ letter-spacing: -0.025em;
5179
+ }
5180
+
5181
+ .ui-stat--accent .ui-stat-value {
5182
+ color: hsl(var(--brand));
5183
+ }
5184
+
5185
+ .ui-stat-label {
5186
+ font-size: 0.875rem;
4731
5187
  color: hsl(var(--ink-muted));
4732
5188
  }
4733
5189
  .ui-stat-value {
@@ -4736,6 +5192,43 @@
4736
5192
  color: hsl(var(--ink));
4737
5193
  }
4738
5194
 
5195
+ .ui-stat-description {
5196
+ color: hsl(var(--ink-soft));
5197
+ font-size: 0.875rem;
5198
+ line-height: 1.5;
5199
+ }
5200
+
5201
+ .ui-stat-icon {
5202
+ align-items: center;
5203
+ color: hsl(var(--brand));
5204
+ display: inline-flex;
5205
+ justify-content: center;
5206
+ }
5207
+
5208
+ .ui-stat-trend {
5209
+ align-items: center;
5210
+ display: inline-flex;
5211
+ font-size: 0.8125rem;
5212
+ font-weight: 650;
5213
+ gap: 0.25rem;
5214
+ }
5215
+
5216
+ .ui-stat-trend--neutral {
5217
+ color: hsl(var(--ink-muted));
5218
+ }
5219
+
5220
+ .ui-stat-trend--success {
5221
+ color: hsl(var(--success));
5222
+ }
5223
+
5224
+ .ui-stat-trend--warning {
5225
+ color: hsl(var(--warning));
5226
+ }
5227
+
5228
+ .ui-stat-trend--danger {
5229
+ color: hsl(var(--danger));
5230
+ }
5231
+
4739
5232
  .ui-rating {
4740
5233
  display: flex;
4741
5234
  gap: 0.25rem;
@@ -4890,6 +5383,17 @@
4890
5383
  white-space: nowrap;
4891
5384
  }
4892
5385
 
5386
+ .ui-pill--brand {
5387
+ border-color: hsl(var(--brand) / 0.34);
5388
+ background: hsl(var(--brand-soft) / 0.72);
5389
+ color: hsl(var(--brand));
5390
+ }
5391
+
5392
+ .ui-pill--outline {
5393
+ background: transparent;
5394
+ color: hsl(var(--ink-soft));
5395
+ }
5396
+
4893
5397
  .ui-pill__count {
4894
5398
  margin-left: 0.5rem;
4895
5399
  padding-left: 0.5rem;
@@ -4902,6 +5406,7 @@
4902
5406
 
4903
5407
  a.ui-pill {
4904
5408
  cursor: pointer;
5409
+ min-height: 2.75rem;
4905
5410
  text-decoration: none;
4906
5411
  }
4907
5412
 
@@ -4910,6 +5415,47 @@ a.ui-pill:hover {
4910
5415
  color: hsl(var(--brand-solid));
4911
5416
  }
4912
5417
 
5418
+ a.ui-pill--brand:hover {
5419
+ border-color: hsl(var(--brand) / 0.6);
5420
+ background: hsl(var(--brand-solid));
5421
+ color: hsl(var(--canvas));
5422
+ }
5423
+
5424
+ a.ui-pill:focus-visible {
5425
+ outline: 2px solid hsl(var(--brand));
5426
+ outline-offset: 2px;
5427
+ }
5428
+
5429
+ .ui-scroll-progress {
5430
+ position: fixed;
5431
+ inset: 0 0 auto;
5432
+ z-index: 9999;
5433
+ height: 0.1875rem;
5434
+ overflow: hidden;
5435
+ pointer-events: none;
5436
+ background: hsl(var(--surface-strong) / 0.48);
5437
+ }
5438
+
5439
+ .ui-scroll-progress--bottom {
5440
+ inset: auto 0 0;
5441
+ }
5442
+
5443
+ .ui-scroll-progress__bar {
5444
+ display: block;
5445
+ width: 100%;
5446
+ height: 100%;
5447
+ transform: scaleX(0);
5448
+ transform-origin: left;
5449
+ background: hsl(var(--brand-solid));
5450
+ will-change: transform;
5451
+ }
5452
+
5453
+ @media (prefers-reduced-motion: reduce) {
5454
+ .ui-scroll-progress__bar {
5455
+ transition: none;
5456
+ }
5457
+ }
5458
+
4913
5459
  /* CoverImage hover lift + bottom gradient overlay */
4914
5460
  .ui-cover-image--hover {
4915
5461
  transition: transform 300ms ease;
@@ -5241,7 +5787,9 @@ a.ui-pill:hover {
5241
5787
  padding: 0;
5242
5788
  }
5243
5789
  .ui-anchor a {
5244
- display: block;
5790
+ display: flex;
5791
+ align-items: start;
5792
+ gap: 0.5rem;
5245
5793
  padding: 0.25rem 0.75rem;
5246
5794
  margin-left: -2px;
5247
5795
  border-left: 2px solid transparent;
@@ -5249,10 +5797,34 @@ a.ui-pill:hover {
5249
5797
  text-decoration: none;
5250
5798
  font-size: 0.875rem;
5251
5799
  }
5800
+ .ui-anchor__content {
5801
+ display: grid;
5802
+ gap: 0.125rem;
5803
+ }
5804
+ .ui-anchor__index,
5805
+ .ui-anchor__description {
5806
+ color: hsl(var(--ink-muted));
5807
+ font-size: var(--ui-text-xs);
5808
+ }
5809
+ .ui-anchor__index {
5810
+ min-width: 2ch;
5811
+ font-variant-numeric: tabular-nums;
5812
+ }
5813
+ .ui-anchor a[data-depth="3"] {
5814
+ padding-inline-start: 1.5rem;
5815
+ font-size: 0.8125rem;
5816
+ }
5817
+ .ui-anchor a[data-depth="4"],
5818
+ .ui-anchor a[data-depth="5"],
5819
+ .ui-anchor a[data-depth="6"] {
5820
+ padding-inline-start: 2.25rem;
5821
+ font-size: 0.8125rem;
5822
+ }
5252
5823
  .ui-anchor a:hover {
5253
5824
  color: hsl(var(--ink));
5254
5825
  }
5255
- .ui-anchor a[data-active="true"] {
5826
+ .ui-anchor a[data-active="true"],
5827
+ .ui-anchor a[aria-current="location"] {
5256
5828
  color: hsl(var(--brand));
5257
5829
  border-left-color: hsl(var(--brand));
5258
5830
  font-weight: 600;
@@ -5894,3 +6466,347 @@ a.ui-pill:hover {
5894
6466
  .ui-tree-select__option[data-active="true"] {
5895
6467
  background: hsl(var(--surface-muted));
5896
6468
  }
6469
+
6470
+ /* ---------------------------------------------------------------------------
6471
+ * Form foundations and layout primitives
6472
+ * ------------------------------------------------------------------------- */
6473
+
6474
+ @layer lumen.components {
6475
+ .ui-form {
6476
+ display: grid;
6477
+ gap: 1rem;
6478
+ }
6479
+
6480
+ .ui-form[aria-busy="true"] {
6481
+ cursor: progress;
6482
+ }
6483
+
6484
+ .ui-field-error {
6485
+ margin: 0;
6486
+ color: hsl(var(--danger));
6487
+ font-size: 0.8125rem;
6488
+ line-height: 1.5;
6489
+ }
6490
+
6491
+ .ui-error-summary {
6492
+ display: grid;
6493
+ gap: 0.625rem;
6494
+ padding: 1rem;
6495
+ border: 1px solid hsl(var(--danger) / 0.45);
6496
+ border-inline-start-width: 0.25rem;
6497
+ border-radius: var(--ui-radius);
6498
+ background: hsl(var(--danger) / 0.06);
6499
+ color: hsl(var(--ink));
6500
+ }
6501
+
6502
+ .ui-error-summary:focus-visible {
6503
+ outline: 2px solid hsl(var(--danger));
6504
+ outline-offset: 2px;
6505
+ }
6506
+
6507
+ .ui-error-summary > :where(h2, h3) {
6508
+ margin: 0;
6509
+ font-size: 1rem;
6510
+ }
6511
+
6512
+ .ui-error-summary ul {
6513
+ display: grid;
6514
+ gap: 0.25rem;
6515
+ margin: 0;
6516
+ padding-inline-start: 1.25rem;
6517
+ }
6518
+
6519
+ .ui-error-summary a {
6520
+ color: hsl(var(--danger));
6521
+ font-weight: 650;
6522
+ text-underline-offset: 0.18em;
6523
+ }
6524
+
6525
+ .ui-checkbox-group {
6526
+ display: flex;
6527
+ min-width: 0;
6528
+ gap: 0.75rem;
6529
+ padding: 0;
6530
+ border: 0;
6531
+ margin: 0;
6532
+ }
6533
+
6534
+ .ui-checkbox-group--vertical {
6535
+ flex-direction: column;
6536
+ }
6537
+
6538
+ .ui-checkbox-group--horizontal {
6539
+ flex-flow: row wrap;
6540
+ align-items: center;
6541
+ }
6542
+
6543
+ .ui-checkbox-group > legend {
6544
+ padding: 0;
6545
+ margin-block-end: 0.25rem;
6546
+ color: hsl(var(--ink));
6547
+ font-size: 0.875rem;
6548
+ font-weight: 650;
6549
+ }
6550
+
6551
+ .ui-checkbox-group[aria-invalid="true"],
6552
+ .ui-checkbox-group[data-invalid="true"] {
6553
+ color: hsl(var(--danger));
6554
+ }
6555
+
6556
+ .ui-password-field__control {
6557
+ position: relative;
6558
+ display: grid;
6559
+ align-items: center;
6560
+ }
6561
+
6562
+ .ui-password-field__control > .ui-input {
6563
+ grid-area: 1 / 1;
6564
+ padding-inline-end: 3.25rem;
6565
+ }
6566
+
6567
+ .ui-password-field__control > .ui-button {
6568
+ z-index: 1;
6569
+ grid-area: 1 / 1;
6570
+ justify-self: end;
6571
+ margin-inline-end: 0.25rem;
6572
+ }
6573
+
6574
+ .ui-password-field__control > .ui-button span {
6575
+ font-size: 0.6875rem;
6576
+ }
6577
+
6578
+ .ui-list-box {
6579
+ display: grid;
6580
+ gap: 0.375rem;
6581
+ }
6582
+
6583
+ .ui-list-box__native[data-ui-enhanced],
6584
+ .ui-list-box__native[data-ui-list-box-enhanced="true"] {
6585
+ position: absolute;
6586
+ width: 1px;
6587
+ height: 1px;
6588
+ overflow: hidden;
6589
+ clip: rect(0, 0, 0, 0);
6590
+ clip-path: inset(50%);
6591
+ white-space: nowrap;
6592
+ }
6593
+
6594
+ .ui-list-box__list {
6595
+ display: grid;
6596
+ max-height: 18rem;
6597
+ overflow: auto;
6598
+ padding: 0.25rem;
6599
+ border: 1px solid hsl(var(--line));
6600
+ border-radius: var(--ui-radius);
6601
+ background: hsl(var(--surface));
6602
+ box-shadow: var(--ui-shadow-sm);
6603
+ }
6604
+
6605
+ .ui-list-box__list:focus-visible {
6606
+ outline: 2px solid hsl(var(--brand));
6607
+ outline-offset: 2px;
6608
+ }
6609
+
6610
+ .ui-list-box__section {
6611
+ padding: 0.5rem 0.625rem 0.25rem;
6612
+ color: hsl(var(--ink-muted));
6613
+ font-size: 0.75rem;
6614
+ font-weight: 700;
6615
+ letter-spacing: 0.04em;
6616
+ text-transform: uppercase;
6617
+ }
6618
+
6619
+ .ui-list-box__empty,
6620
+ .ui-list-box__status {
6621
+ padding: 0.75rem 0.625rem;
6622
+ color: hsl(var(--ink-muted));
6623
+ font-size: 0.875rem;
6624
+ }
6625
+
6626
+ .ui-list-box__option,
6627
+ [data-ui-list-box-option] {
6628
+ padding: 0.5rem 0.625rem;
6629
+ border-radius: var(--ui-radius-sm);
6630
+ color: hsl(var(--ink));
6631
+ cursor: default;
6632
+ font-size: 0.875rem;
6633
+ }
6634
+
6635
+ .ui-list-box__option--active,
6636
+ [data-ui-list-box-option][data-active="true"] {
6637
+ background: hsl(var(--surface-muted));
6638
+ }
6639
+
6640
+ .ui-list-box__option[aria-selected="true"],
6641
+ [data-ui-list-box-option][aria-selected="true"] {
6642
+ background: hsl(var(--brand-soft));
6643
+ color: hsl(var(--brand-solid));
6644
+ font-weight: 650;
6645
+ }
6646
+
6647
+ .ui-list-box__option[aria-disabled="true"],
6648
+ [data-ui-list-box-option][aria-disabled="true"] {
6649
+ opacity: 0.5;
6650
+ }
6651
+
6652
+ .ui-container {
6653
+ width: min(100% - 2rem, var(--ui-container-max, 72rem));
6654
+ margin-inline: auto;
6655
+ }
6656
+
6657
+ .ui-container--sm {
6658
+ --ui-container-max: 40rem;
6659
+ }
6660
+
6661
+ .ui-container--md {
6662
+ --ui-container-max: 56rem;
6663
+ }
6664
+
6665
+ .ui-container--lg {
6666
+ --ui-container-max: 72rem;
6667
+ }
6668
+
6669
+ .ui-container--full {
6670
+ width: 100%;
6671
+ max-width: none;
6672
+ }
6673
+
6674
+ .ui-stack {
6675
+ display: flex;
6676
+ min-width: 0;
6677
+ gap: var(--ui-stack-gap, 1rem);
6678
+ }
6679
+
6680
+ .ui-stack--vertical {
6681
+ flex-direction: column;
6682
+ }
6683
+
6684
+ .ui-stack--horizontal {
6685
+ flex-direction: row;
6686
+ }
6687
+
6688
+ .ui-stack--wrap {
6689
+ flex-wrap: wrap;
6690
+ }
6691
+
6692
+ .ui-stack--gap-none,
6693
+ .ui-grid--gap-none {
6694
+ --ui-stack-gap: 0;
6695
+ --ui-grid-gap: 0;
6696
+ }
6697
+
6698
+ .ui-stack--gap-sm,
6699
+ .ui-grid--gap-sm {
6700
+ --ui-stack-gap: 0.5rem;
6701
+ --ui-grid-gap: 0.5rem;
6702
+ }
6703
+
6704
+ .ui-stack--gap-md,
6705
+ .ui-grid--gap-md {
6706
+ --ui-stack-gap: 1rem;
6707
+ --ui-grid-gap: 1rem;
6708
+ }
6709
+
6710
+ .ui-stack--gap-lg,
6711
+ .ui-grid--gap-lg {
6712
+ --ui-stack-gap: 1.5rem;
6713
+ --ui-grid-gap: 1.5rem;
6714
+ }
6715
+
6716
+ .ui-stack--gap-xl,
6717
+ .ui-grid--gap-xl {
6718
+ --ui-stack-gap: 2rem;
6719
+ --ui-grid-gap: 2rem;
6720
+ }
6721
+
6722
+ .ui-stack--align-start {
6723
+ align-items: flex-start;
6724
+ }
6725
+
6726
+ .ui-stack--align-center {
6727
+ align-items: center;
6728
+ }
6729
+
6730
+ .ui-stack--align-end {
6731
+ align-items: flex-end;
6732
+ }
6733
+
6734
+ .ui-stack--align-stretch {
6735
+ align-items: stretch;
6736
+ }
6737
+
6738
+ .ui-stack--justify-start {
6739
+ justify-content: flex-start;
6740
+ }
6741
+
6742
+ .ui-stack--justify-center {
6743
+ justify-content: center;
6744
+ }
6745
+
6746
+ .ui-stack--justify-end {
6747
+ justify-content: flex-end;
6748
+ }
6749
+
6750
+ .ui-stack--justify-between {
6751
+ justify-content: space-between;
6752
+ }
6753
+
6754
+ .ui-grid {
6755
+ display: grid;
6756
+ min-width: 0;
6757
+ grid-template-columns: repeat(
6758
+ auto-fit,
6759
+ minmax(min(100%, var(--ui-grid-min, 16rem)), 1fr)
6760
+ );
6761
+ gap: var(--ui-grid-gap, 1rem);
6762
+ }
6763
+
6764
+ .ui-grid--columns-1 {
6765
+ grid-template-columns: repeat(1, minmax(0, 1fr));
6766
+ }
6767
+
6768
+ .ui-grid--columns-2 {
6769
+ grid-template-columns: repeat(2, minmax(0, 1fr));
6770
+ }
6771
+
6772
+ .ui-grid--columns-3 {
6773
+ grid-template-columns: repeat(3, minmax(0, 1fr));
6774
+ }
6775
+
6776
+ .ui-grid--columns-4 {
6777
+ grid-template-columns: repeat(4, minmax(0, 1fr));
6778
+ }
6779
+
6780
+ .ui-grid--columns-6 {
6781
+ grid-template-columns: repeat(6, minmax(0, 1fr));
6782
+ }
6783
+
6784
+ .ui-grid--columns-12 {
6785
+ grid-template-columns: repeat(12, minmax(0, 1fr));
6786
+ }
6787
+
6788
+ .ui-visually-hidden {
6789
+ position: absolute;
6790
+ width: 1px;
6791
+ height: 1px;
6792
+ padding: 0;
6793
+ border: 0;
6794
+ margin: -1px;
6795
+ overflow: hidden;
6796
+ clip: rect(0, 0, 0, 0);
6797
+ clip-path: inset(50%);
6798
+ white-space: nowrap;
6799
+ }
6800
+
6801
+ .ui-visually-hidden--focusable:focus,
6802
+ .ui-visually-hidden--focusable:focus-within {
6803
+ position: static;
6804
+ width: auto;
6805
+ height: auto;
6806
+ margin: 0;
6807
+ overflow: visible;
6808
+ clip: auto;
6809
+ clip-path: none;
6810
+ white-space: normal;
6811
+ }
6812
+ }