@duskmoon-dev/core 1.8.0 → 1.10.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.
Files changed (48) hide show
  1. package/dist/components/appbar.css +2 -2
  2. package/dist/components/autocomplete.css +1 -1
  3. package/dist/components/card.css +4 -4
  4. package/dist/components/cascader.css +1 -1
  5. package/dist/components/collapse.css +1 -1
  6. package/dist/components/datepicker.css +2 -2
  7. package/dist/components/dialog.css +1 -1
  8. package/dist/components/drawer.css +1 -1
  9. package/dist/components/file-upload.css +1 -1
  10. package/dist/components/form-group.css +33 -1
  11. package/dist/components/index.css +349 -42
  12. package/dist/components/modal.css +1 -1
  13. package/dist/components/multi-select.css +1 -1
  14. package/dist/components/navigation.css +2 -2
  15. package/dist/components/nested-menu.css +261 -0
  16. package/dist/components/popover.css +28 -16
  17. package/dist/components/snackbar.css +1 -1
  18. package/dist/components/time-input.css +1 -1
  19. package/dist/components/toast.css +1 -1
  20. package/dist/components/tooltip.css +2 -2
  21. package/dist/components/tree-select.css +1 -1
  22. package/dist/esm/components/appbar.js +2 -2
  23. package/dist/esm/components/autocomplete.js +1 -1
  24. package/dist/esm/components/card.js +4 -4
  25. package/dist/esm/components/cascader.js +1 -1
  26. package/dist/esm/components/collapse.js +1 -1
  27. package/dist/esm/components/datepicker.js +2 -2
  28. package/dist/esm/components/dialog.js +1 -1
  29. package/dist/esm/components/drawer.js +1 -1
  30. package/dist/esm/components/file-upload.js +1 -1
  31. package/dist/esm/components/form-group.js +33 -1
  32. package/dist/esm/components/modal.js +1 -1
  33. package/dist/esm/components/multi-select.js +1 -1
  34. package/dist/esm/components/navigation.js +2 -2
  35. package/dist/esm/components/nested-menu.js +268 -0
  36. package/dist/esm/components/popover.js +28 -16
  37. package/dist/esm/components/snackbar.js +1 -1
  38. package/dist/esm/components/time-input.js +1 -1
  39. package/dist/esm/components/toast.js +1 -1
  40. package/dist/esm/components/tooltip.js +2 -2
  41. package/dist/esm/components/tree-select.js +1 -1
  42. package/dist/index.css +439 -91
  43. package/dist/index.min.css +1 -0
  44. package/dist/themes/moonlight.css +34 -16
  45. package/dist/themes/ocean.css +16 -7
  46. package/dist/themes/sunset.css +5 -4
  47. package/dist/themes/sunshine.css +24 -22
  48. package/package.json +1 -1
@@ -501,12 +501,12 @@
501
501
  border-radius: 1rem;
502
502
  background-color: var(--color-surface);
503
503
  color: var(--color-on-surface);
504
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
504
+ box-shadow: var(--shadow-sm);
505
505
  transition: box-shadow 150ms ease-in-out, transform 150ms ease-in-out;
506
506
  }
507
507
 
508
508
  .card:hover {
509
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
509
+ box-shadow: var(--shadow-md);
510
510
  }
511
511
 
512
512
  /* Card Image */
@@ -659,11 +659,11 @@
659
659
 
660
660
  /* Elevated Variants */
661
661
  .card-elevated {
662
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
662
+ box-shadow: var(--shadow-lg);
663
663
  }
664
664
 
665
665
  .card-elevated:hover {
666
- box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
666
+ box-shadow: var(--shadow-xl);
667
667
  transform: translateY(-2px);
668
668
  }
669
669
 
@@ -1836,7 +1836,7 @@
1836
1836
  .tabs-boxed .tab[aria-selected="true"] {
1837
1837
  background-color: var(--color-surface);
1838
1838
  color: var(--color-on-surface);
1839
- box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
1839
+ box-shadow: var(--shadow-xs);
1840
1840
  }
1841
1841
 
1842
1842
  /* Tabs Lifted */
@@ -1888,7 +1888,7 @@
1888
1888
  background-color: var(--color-surface);
1889
1889
  border: 1px solid var(--color-outline);
1890
1890
  border-radius: 0.5rem;
1891
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
1891
+ box-shadow: var(--shadow-lg);
1892
1892
  opacity: 0;
1893
1893
  visibility: hidden;
1894
1894
  transform: translateY(-0.5rem);
@@ -2172,7 +2172,7 @@
2172
2172
  background-color: var(--color-surface);
2173
2173
  color: var(--color-on-surface);
2174
2174
  border-radius: 1rem;
2175
- box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
2175
+ box-shadow: var(--shadow-2xl);
2176
2176
  overflow-y: auto;
2177
2177
  transform: scale(0.95);
2178
2178
  transition: transform 200ms ease-out;
@@ -3436,7 +3436,7 @@
3436
3436
  background-color: var(--color-surface);
3437
3437
  border: 1px solid var(--color-outline);
3438
3438
  border-radius: 0.5rem;
3439
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
3439
+ box-shadow: var(--shadow-lg);
3440
3440
  overflow-y: auto;
3441
3441
  opacity: 0;
3442
3442
  visibility: hidden;
@@ -3782,7 +3782,7 @@
3782
3782
  background-color: var(--color-surface);
3783
3783
  border: 1px solid var(--color-outline-variant);
3784
3784
  border-radius: 0.5rem;
3785
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
3785
+ box-shadow: var(--shadow-md);
3786
3786
  overflow: hidden;
3787
3787
  }
3788
3788
 
@@ -4425,7 +4425,7 @@
4425
4425
  background-color: var(--color-surface);
4426
4426
  border: 1px solid var(--color-outline);
4427
4427
  border-radius: 0.75rem;
4428
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
4428
+ box-shadow: var(--shadow-lg);
4429
4429
  opacity: 0;
4430
4430
  visibility: hidden;
4431
4431
  transform: translateY(-0.5rem);
@@ -4451,7 +4451,7 @@
4451
4451
  background-color: var(--color-surface);
4452
4452
  border: 1px solid var(--color-outline);
4453
4453
  border-radius: 0.75rem;
4454
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
4454
+ box-shadow: var(--shadow-lg);
4455
4455
  }
4456
4456
 
4457
4457
  /* Calendar Header */
@@ -5337,7 +5337,7 @@
5337
5337
  }
5338
5338
 
5339
5339
  .file-upload-button:hover {
5340
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
5340
+ box-shadow: var(--shadow-md);
5341
5341
  }
5342
5342
 
5343
5343
  .file-upload-button:focus-visible {
@@ -5520,7 +5520,7 @@
5520
5520
  .fieldset-card {
5521
5521
  background-color: var(--color-surface);
5522
5522
  border-color: transparent;
5523
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
5523
+ box-shadow: var(--shadow-xs);
5524
5524
  padding: 1.5rem;
5525
5525
  }
5526
5526
 
@@ -5662,6 +5662,13 @@
5662
5662
  border-color: var(--color-error);
5663
5663
  }
5664
5664
 
5665
+ .form-group-error .input:focus-visible,
5666
+ .form-group-error .select:focus-visible,
5667
+ .form-group-error .textarea:focus-visible {
5668
+ border-color: var(--color-error);
5669
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
5670
+ }
5671
+
5665
5672
  /* Success State on Form Group */
5666
5673
  .form-group-success .form-label {
5667
5674
  color: var(--color-success);
@@ -5673,6 +5680,31 @@
5673
5680
  border-color: var(--color-success);
5674
5681
  }
5675
5682
 
5683
+ .form-group-success .input:focus-visible,
5684
+ .form-group-success .select:focus-visible,
5685
+ .form-group-success .textarea:focus-visible {
5686
+ border-color: var(--color-success);
5687
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
5688
+ }
5689
+
5690
+ /* Warning State on Form Group */
5691
+ .form-group-warning .form-label {
5692
+ color: var(--color-warning);
5693
+ }
5694
+
5695
+ .form-group-warning .input,
5696
+ .form-group-warning .select,
5697
+ .form-group-warning .textarea {
5698
+ border-color: var(--color-warning);
5699
+ }
5700
+
5701
+ .form-group-warning .input:focus-visible,
5702
+ .form-group-warning .select:focus-visible,
5703
+ .form-group-warning .textarea:focus-visible {
5704
+ border-color: var(--color-warning);
5705
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
5706
+ }
5707
+
5676
5708
  /* Disabled Form Group */
5677
5709
  .form-group-disabled {
5678
5710
  opacity: 0.5;
@@ -5873,7 +5905,7 @@
5873
5905
  background-color: var(--color-surface);
5874
5906
  border: 1px solid var(--color-outline-variant);
5875
5907
  border-radius: 0.5rem;
5876
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
5908
+ box-shadow: var(--shadow-md);
5877
5909
  overflow: hidden;
5878
5910
  }
5879
5911
 
@@ -8323,6 +8355,7 @@
8323
8355
  }
8324
8356
  }
8325
8357
 
8358
+
8326
8359
  /**
8327
8360
  * Toggle Button Component Styles
8328
8361
  * DuskMoonUI - Material Design 3 inspired toggle button
@@ -8490,7 +8523,7 @@
8490
8523
  .toggle-segmented .toggle-btn.active {
8491
8524
  background-color: var(--color-surface-variant);
8492
8525
  border-color: transparent;
8493
- box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
8526
+ box-shadow: var(--shadow-sm);
8494
8527
  }
8495
8528
 
8496
8529
  /* Chip-like toggle */
@@ -8798,7 +8831,7 @@
8798
8831
  background-color: var(--color-surface);
8799
8832
  border: 1px solid var(--color-outline-variant);
8800
8833
  border-radius: 0.5rem;
8801
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
8834
+ box-shadow: var(--shadow-md);
8802
8835
  }
8803
8836
 
8804
8837
  .time-picker-dropdown-open {
@@ -8989,7 +9022,7 @@
8989
9022
  background-color: var(--color-surface);
8990
9023
  border: 1px solid var(--color-outline-variant);
8991
9024
  border-radius: 0.5rem;
8992
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
9025
+ box-shadow: var(--shadow-md);
8993
9026
  overflow-y: auto;
8994
9027
  }
8995
9028
 
@@ -9548,7 +9581,7 @@
9548
9581
  background-color: var(--color-surface);
9549
9582
  color: var(--color-on-surface);
9550
9583
  border-radius: 1.5rem;
9551
- box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
9584
+ box-shadow: var(--shadow-2xl);
9552
9585
  overflow: hidden;
9553
9586
  }
9554
9587
 
@@ -10226,7 +10259,7 @@
10226
10259
  background-color: var(--color-surface-container-highest);
10227
10260
  color: var(--color-on-surface);
10228
10261
  border-radius: 0.5rem;
10229
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
10262
+ box-shadow: var(--shadow-md);
10230
10263
  pointer-events: auto;
10231
10264
  opacity: 0;
10232
10265
  transform: translateY(100%);
@@ -10539,7 +10572,7 @@
10539
10572
  color: var(--color-on-surface);
10540
10573
  border: 1px solid var(--color-outline);
10541
10574
  border-radius: 0.75rem;
10542
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
10575
+ box-shadow: var(--shadow-lg);
10543
10576
  pointer-events: auto;
10544
10577
  opacity: 0;
10545
10578
  transform: translateX(100%);
@@ -10747,7 +10780,7 @@
10747
10780
  background-color: var(--color-on-surface);
10748
10781
  color: var(--color-surface);
10749
10782
  border-radius: 0.25rem;
10750
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
10783
+ box-shadow: var(--shadow-md);
10751
10784
  opacity: 0;
10752
10785
  visibility: hidden;
10753
10786
  transition: opacity 150ms ease-out, visibility 150ms ease-out;
@@ -10876,7 +10909,7 @@
10876
10909
  background-color: var(--color-surface);
10877
10910
  color: var(--color-on-surface);
10878
10911
  border: 1px solid var(--color-outline);
10879
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
10912
+ box-shadow: var(--shadow-md);
10880
10913
  }
10881
10914
 
10882
10915
  .tooltip.tooltip-light .tooltip-content::before {
@@ -11029,7 +11062,7 @@
11029
11062
  padding: 0 1rem;
11030
11063
  background-color: var(--color-surface);
11031
11064
  color: var(--color-on-surface);
11032
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
11065
+ box-shadow: var(--shadow-sm);
11033
11066
  }
11034
11067
 
11035
11068
  /* Static App Bar (default) */
@@ -11070,7 +11103,7 @@
11070
11103
 
11071
11104
  /* App Bar with Shadow (elevated) */
11072
11105
  .appbar-elevated {
11073
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
11106
+ box-shadow: var(--shadow-sm);
11074
11107
  }
11075
11108
 
11076
11109
  /* Flat App Bar (no shadow) */
@@ -12090,7 +12123,7 @@
12090
12123
  display: flex;
12091
12124
  flex-direction: column;
12092
12125
  background-color: var(--color-surface-container-low);
12093
- box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
12126
+ box-shadow: var(--shadow-2xl);
12094
12127
  transition: transform 300ms ease-out;
12095
12128
  }
12096
12129
 
@@ -12433,6 +12466,268 @@
12433
12466
  }
12434
12467
  }
12435
12468
 
12469
+ /**
12470
+ * Nested Menu Component Styles
12471
+ * DuskMoonUI - Sidebar navigation with collapsible cascading levels via <details>/<summary>
12472
+ */
12473
+
12474
+ @layer components {
12475
+ /* ============================================
12476
+ * ROOT CONTAINER
12477
+ * ============================================ */
12478
+
12479
+ .nested-menu {
12480
+ display: flex;
12481
+ flex-direction: column;
12482
+ list-style: none;
12483
+ margin: 0;
12484
+ padding: 0.5rem;
12485
+ gap: 0.125rem;
12486
+ font-size: 0.875rem;
12487
+ color: var(--color-on-surface);
12488
+ }
12489
+
12490
+ /* ============================================
12491
+ * SECTION TITLES
12492
+ * ============================================ */
12493
+
12494
+ .nested-menu-title {
12495
+ padding: 0.75rem 0.75rem 0.25rem;
12496
+ font-size: 0.6875rem;
12497
+ font-weight: 600;
12498
+ text-transform: uppercase;
12499
+ letter-spacing: 0.05em;
12500
+ color: var(--color-on-surface-variant);
12501
+ user-select: none;
12502
+ }
12503
+
12504
+ /* ============================================
12505
+ * MENU ITEMS (links and buttons)
12506
+ * ============================================ */
12507
+
12508
+ .nested-menu li > a,
12509
+ .nested-menu li > button {
12510
+ display: flex;
12511
+ align-items: center;
12512
+ gap: 0.5rem;
12513
+ width: 100%;
12514
+ padding: 0.5rem 0.75rem;
12515
+ font-size: inherit;
12516
+ color: var(--color-on-surface);
12517
+ text-decoration: none;
12518
+ background-color: transparent;
12519
+ border: none;
12520
+ border-radius: var(--radius-field, 0.375rem);
12521
+ cursor: pointer;
12522
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
12523
+ }
12524
+
12525
+ .nested-menu li > a:hover,
12526
+ .nested-menu li > button:hover {
12527
+ background-color: var(--color-surface-container);
12528
+ }
12529
+
12530
+ .nested-menu li > a:focus-visible,
12531
+ .nested-menu li > button:focus-visible {
12532
+ outline: 2px solid var(--color-primary);
12533
+ outline-offset: -2px;
12534
+ }
12535
+
12536
+ /* Active state */
12537
+ .nested-menu li > a.active,
12538
+ .nested-menu li > button.active,
12539
+ .nested-menu li > a[aria-current="page"],
12540
+ .nested-menu li > button[aria-current="page"] {
12541
+ background-color: var(--color-primary-container);
12542
+ color: var(--color-on-primary-container);
12543
+ }
12544
+
12545
+ .nested-menu li > a.active:hover,
12546
+ .nested-menu li > button.active:hover,
12547
+ .nested-menu li > a[aria-current="page"]:hover,
12548
+ .nested-menu li > button[aria-current="page"]:hover {
12549
+ background-color: color-mix(in oklch, var(--color-primary-container), var(--color-on-primary-container) 8%);
12550
+ }
12551
+
12552
+ /* Disabled state */
12553
+ .nested-menu li.disabled {
12554
+ opacity: 0.5;
12555
+ pointer-events: none;
12556
+ }
12557
+
12558
+ /* ============================================
12559
+ * COLLAPSIBLE SUBMENUS (<details>/<summary>)
12560
+ * ============================================ */
12561
+
12562
+ .nested-menu details {
12563
+ width: 100%;
12564
+ }
12565
+
12566
+ /* Remove native marker */
12567
+ .nested-menu summary {
12568
+ display: flex;
12569
+ align-items: center;
12570
+ gap: 0.5rem;
12571
+ width: 100%;
12572
+ padding: 0.5rem 0.75rem;
12573
+ font-size: inherit;
12574
+ color: var(--color-on-surface);
12575
+ background-color: transparent;
12576
+ border: none;
12577
+ border-radius: var(--radius-field, 0.375rem);
12578
+ cursor: pointer;
12579
+ list-style: none;
12580
+ transition: background-color 150ms ease-in-out;
12581
+ }
12582
+
12583
+ .nested-menu summary::-webkit-details-marker {
12584
+ display: none;
12585
+ }
12586
+
12587
+ .nested-menu summary::marker {
12588
+ display: none;
12589
+ content: "";
12590
+ }
12591
+
12592
+ .nested-menu summary:hover {
12593
+ background-color: var(--color-surface-container);
12594
+ }
12595
+
12596
+ .nested-menu summary:focus-visible {
12597
+ outline: 2px solid var(--color-primary);
12598
+ outline-offset: -2px;
12599
+ }
12600
+
12601
+ /* Chevron indicator */
12602
+ .nested-menu summary::after {
12603
+ content: "";
12604
+ display: inline-block;
12605
+ margin-left: auto;
12606
+ width: 0.375rem;
12607
+ height: 0.375rem;
12608
+ border-right: 1.5px solid currentColor;
12609
+ border-bottom: 1.5px solid currentColor;
12610
+ transform: rotate(-45deg);
12611
+ transition: transform 200ms ease-in-out;
12612
+ flex-shrink: 0;
12613
+ opacity: 0.6;
12614
+ }
12615
+
12616
+ .nested-menu details[open] > summary::after {
12617
+ transform: rotate(45deg);
12618
+ }
12619
+
12620
+ /* Nested <ul> inside details — auto-indentation */
12621
+ .nested-menu details > ul {
12622
+ list-style: none;
12623
+ margin: 0;
12624
+ padding: 0.125rem 0 0.125rem 1rem;
12625
+ display: flex;
12626
+ flex-direction: column;
12627
+ gap: 0.125rem;
12628
+ }
12629
+
12630
+ /* ============================================
12631
+ * SIZE VARIANTS
12632
+ * ============================================ */
12633
+
12634
+ .nested-menu-xs {
12635
+ font-size: 0.75rem;
12636
+ padding: 0.25rem;
12637
+ }
12638
+
12639
+ .nested-menu-xs li > a,
12640
+ .nested-menu-xs li > button,
12641
+ .nested-menu-xs summary {
12642
+ padding: 0.25rem 0.5rem;
12643
+ gap: 0.375rem;
12644
+ }
12645
+
12646
+ .nested-menu-xs .nested-menu-title {
12647
+ padding: 0.5rem 0.5rem 0.125rem;
12648
+ font-size: 0.625rem;
12649
+ }
12650
+
12651
+ .nested-menu-sm {
12652
+ font-size: 0.8125rem;
12653
+ padding: 0.375rem;
12654
+ }
12655
+
12656
+ .nested-menu-sm li > a,
12657
+ .nested-menu-sm li > button,
12658
+ .nested-menu-sm summary {
12659
+ padding: 0.375rem 0.625rem;
12660
+ gap: 0.375rem;
12661
+ }
12662
+
12663
+ .nested-menu-sm .nested-menu-title {
12664
+ padding: 0.625rem 0.625rem 0.1875rem;
12665
+ font-size: 0.625rem;
12666
+ }
12667
+
12668
+ .nested-menu-lg {
12669
+ font-size: 1rem;
12670
+ padding: 0.625rem;
12671
+ }
12672
+
12673
+ .nested-menu-lg li > a,
12674
+ .nested-menu-lg li > button,
12675
+ .nested-menu-lg summary {
12676
+ padding: 0.625rem 1rem;
12677
+ gap: 0.625rem;
12678
+ }
12679
+
12680
+ .nested-menu-lg .nested-menu-title {
12681
+ padding: 0.875rem 1rem 0.375rem;
12682
+ font-size: 0.75rem;
12683
+ }
12684
+
12685
+ /* ============================================
12686
+ * MODIFIER VARIANTS
12687
+ * ============================================ */
12688
+
12689
+ /* Bordered — sidebar panel look */
12690
+ .nested-menu-bordered {
12691
+ background-color: var(--color-surface);
12692
+ border: 1px solid var(--color-outline-variant);
12693
+ border-radius: var(--radius-card, 0.75rem);
12694
+ box-shadow: var(--shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));
12695
+ }
12696
+
12697
+ /* Compact — tighter padding throughout */
12698
+ .nested-menu-compact {
12699
+ padding: 0.25rem;
12700
+ gap: 0;
12701
+ }
12702
+
12703
+ .nested-menu-compact li > a,
12704
+ .nested-menu-compact li > button,
12705
+ .nested-menu-compact summary {
12706
+ padding: 0.3125rem 0.625rem;
12707
+ }
12708
+
12709
+ .nested-menu-compact .nested-menu-title {
12710
+ padding: 0.5rem 0.625rem 0.125rem;
12711
+ }
12712
+
12713
+ .nested-menu-compact details > ul {
12714
+ padding: 0 0 0 0.75rem;
12715
+ }
12716
+
12717
+ /* ============================================
12718
+ * REDUCED MOTION
12719
+ * ============================================ */
12720
+
12721
+ @media (prefers-reduced-motion: reduce) {
12722
+ .nested-menu li > a,
12723
+ .nested-menu li > button,
12724
+ .nested-menu summary,
12725
+ .nested-menu summary::after {
12726
+ transition: none;
12727
+ }
12728
+ }
12729
+ }
12730
+
12436
12731
  /**
12437
12732
  * Stepper Component Styles
12438
12733
  * DuskMoonUI - Material Design 3 inspired stepper/wizard system
@@ -13490,7 +13785,7 @@
13490
13785
  border: 1px solid var(--color-outline-variant);
13491
13786
  border-radius: 0.75rem;
13492
13787
  overflow: hidden;
13493
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
13788
+ box-shadow: var(--shadow-sm);
13494
13789
  }
13495
13790
 
13496
13791
  .collapse-card .collapse-toggle,
@@ -13793,8 +14088,8 @@
13793
14088
  */
13794
14089
 
13795
14090
  @layer components {
13796
- /* Popover Container */
13797
- .popover {
14091
+ /* Popover Container (class-based approach only, not native [popover]) */
14092
+ .popover:not([popover]) {
13798
14093
  position: relative;
13799
14094
  display: inline-block;
13800
14095
  }
@@ -13809,7 +14104,7 @@
13809
14104
  background-color: var(--color-surface);
13810
14105
  border: 1px solid var(--color-outline-variant);
13811
14106
  border-radius: 0.75rem;
13812
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
14107
+ box-shadow: var(--shadow-lg);
13813
14108
  opacity: 0;
13814
14109
  visibility: hidden;
13815
14110
  transform: scale(0.95);
@@ -13844,7 +14139,7 @@
13844
14139
  background-color: var(--color-surface);
13845
14140
  border: 1px solid var(--color-outline-variant);
13846
14141
  border-radius: 0.75rem;
13847
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
14142
+ box-shadow: var(--shadow-lg);
13848
14143
  opacity: 0;
13849
14144
  visibility: hidden;
13850
14145
  transition: opacity 150ms ease-out, visibility 150ms ease-out;
@@ -14298,7 +14593,7 @@
14298
14593
  background-color: var(--color-surface);
14299
14594
  border: 1px solid var(--color-outline-variant);
14300
14595
  border-radius: 0.75rem;
14301
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
14596
+ box-shadow: var(--shadow-lg);
14302
14597
  opacity: 0;
14303
14598
  transform: scale(0.95);
14304
14599
  transition: opacity 150ms ease-out, transform 150ms ease-out, overlay 150ms ease-out allow-discrete, display 150ms ease-out allow-discrete;
@@ -14440,53 +14735,65 @@
14440
14735
  style="anchor-name: --my-popover" */
14441
14736
  }
14442
14737
 
14443
- /* Anchored popover positioning */
14738
+ /* Anchored popover positioning
14739
+ * Uses anchor() functions instead of position-area to avoid
14740
+ * a Chrome rendering bug at HiDPI (DPR>=2) where position-area
14741
+ * computes correct CSS-pixel offsets but renders at physical-pixel
14742
+ * coordinates, doubling the distance from the anchor. */
14444
14743
  .popover[popover][style*="position-anchor"] {
14445
- position: absolute;
14446
- position-area: bottom;
14744
+ inset: unset;
14745
+ top: anchor(bottom);
14746
+ justify-self: anchor-center;
14447
14747
  margin-top: 0.5rem;
14448
14748
  }
14449
14749
 
14450
14750
  /* Position variants for anchored popovers */
14451
14751
  .popover-top[popover][style*="position-anchor"] {
14452
- position-area: top;
14752
+ top: unset;
14753
+ bottom: anchor(top);
14453
14754
  margin-top: 0;
14454
14755
  margin-bottom: 0.5rem;
14455
14756
  }
14456
14757
 
14457
14758
  .popover-bottom[popover][style*="position-anchor"] {
14458
- position-area: bottom;
14759
+ top: anchor(bottom);
14459
14760
  margin-top: 0.5rem;
14460
14761
  margin-bottom: 0;
14461
14762
  }
14462
14763
 
14463
14764
  .popover-left[popover][style*="position-anchor"] {
14464
- position-area: left;
14765
+ top: anchor(center);
14766
+ right: anchor(left);
14767
+ justify-self: unset;
14768
+ translate: 0 -50%;
14465
14769
  margin-top: 0;
14466
14770
  margin-right: 0.5rem;
14467
14771
  }
14468
14772
 
14469
14773
  .popover-right[popover][style*="position-anchor"] {
14470
- position-area: right;
14774
+ top: anchor(center);
14775
+ left: anchor(right);
14776
+ justify-self: unset;
14777
+ translate: 0 -50%;
14471
14778
  margin-top: 0;
14472
14779
  margin-left: 0.5rem;
14473
14780
  }
14474
14781
 
14475
14782
  /* Anchored popover alignment variants */
14476
14783
  .popover-start[popover][style*="position-anchor"] {
14477
- position-area: bottom start;
14784
+ justify-self: start;
14478
14785
  }
14479
14786
 
14480
14787
  .popover-end[popover][style*="position-anchor"] {
14481
- position-area: bottom end;
14788
+ justify-self: end;
14482
14789
  }
14483
14790
 
14484
14791
  .popover-top.popover-start[popover][style*="position-anchor"] {
14485
- position-area: top start;
14792
+ justify-self: start;
14486
14793
  }
14487
14794
 
14488
14795
  .popover-top.popover-end[popover][style*="position-anchor"] {
14489
- position-area: top end;
14796
+ justify-self: end;
14490
14797
  }
14491
14798
 
14492
14799
  /* Reduce Motion */
@@ -35,7 +35,7 @@
35
35
  background-color: var(--color-surface);
36
36
  color: var(--color-on-surface);
37
37
  border-radius: 1rem;
38
- box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
38
+ box-shadow: var(--shadow-2xl);
39
39
  overflow-y: auto;
40
40
  transform: scale(0.95);
41
41
  transition: transform 200ms ease-out;
@@ -191,7 +191,7 @@
191
191
  background-color: var(--color-surface);
192
192
  border: 1px solid var(--color-outline-variant);
193
193
  border-radius: 0.5rem;
194
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
194
+ box-shadow: var(--shadow-md);
195
195
  overflow: hidden;
196
196
  }
197
197
 
@@ -438,7 +438,7 @@
438
438
  .tabs-boxed .tab[aria-selected="true"] {
439
439
  background-color: var(--color-surface);
440
440
  color: var(--color-on-surface);
441
- box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
441
+ box-shadow: var(--shadow-xs);
442
442
  }
443
443
 
444
444
  /* Tabs Lifted */
@@ -490,7 +490,7 @@
490
490
  background-color: var(--color-surface);
491
491
  border: 1px solid var(--color-outline);
492
492
  border-radius: 0.5rem;
493
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
493
+ box-shadow: var(--shadow-lg);
494
494
  opacity: 0;
495
495
  visibility: hidden;
496
496
  transform: translateY(-0.5rem);