@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
@@ -0,0 +1,261 @@
1
+ /**
2
+ * Nested Menu Component Styles
3
+ * DuskMoonUI - Sidebar navigation with collapsible cascading levels via <details>/<summary>
4
+ */
5
+
6
+ @layer components {
7
+ /* ============================================
8
+ * ROOT CONTAINER
9
+ * ============================================ */
10
+
11
+ .nested-menu {
12
+ display: flex;
13
+ flex-direction: column;
14
+ list-style: none;
15
+ margin: 0;
16
+ padding: 0.5rem;
17
+ gap: 0.125rem;
18
+ font-size: 0.875rem;
19
+ color: var(--color-on-surface);
20
+ }
21
+
22
+ /* ============================================
23
+ * SECTION TITLES
24
+ * ============================================ */
25
+
26
+ .nested-menu-title {
27
+ padding: 0.75rem 0.75rem 0.25rem;
28
+ font-size: 0.6875rem;
29
+ font-weight: 600;
30
+ text-transform: uppercase;
31
+ letter-spacing: 0.05em;
32
+ color: var(--color-on-surface-variant);
33
+ user-select: none;
34
+ }
35
+
36
+ /* ============================================
37
+ * MENU ITEMS (links and buttons)
38
+ * ============================================ */
39
+
40
+ .nested-menu li > a,
41
+ .nested-menu li > button {
42
+ display: flex;
43
+ align-items: center;
44
+ gap: 0.5rem;
45
+ width: 100%;
46
+ padding: 0.5rem 0.75rem;
47
+ font-size: inherit;
48
+ color: var(--color-on-surface);
49
+ text-decoration: none;
50
+ background-color: transparent;
51
+ border: none;
52
+ border-radius: var(--radius-field, 0.375rem);
53
+ cursor: pointer;
54
+ transition: background-color 150ms ease-in-out, color 150ms ease-in-out;
55
+ }
56
+
57
+ .nested-menu li > a:hover,
58
+ .nested-menu li > button:hover {
59
+ background-color: var(--color-surface-container);
60
+ }
61
+
62
+ .nested-menu li > a:focus-visible,
63
+ .nested-menu li > button:focus-visible {
64
+ outline: 2px solid var(--color-primary);
65
+ outline-offset: -2px;
66
+ }
67
+
68
+ /* Active state */
69
+ .nested-menu li > a.active,
70
+ .nested-menu li > button.active,
71
+ .nested-menu li > a[aria-current="page"],
72
+ .nested-menu li > button[aria-current="page"] {
73
+ background-color: var(--color-primary-container);
74
+ color: var(--color-on-primary-container);
75
+ }
76
+
77
+ .nested-menu li > a.active:hover,
78
+ .nested-menu li > button.active:hover,
79
+ .nested-menu li > a[aria-current="page"]:hover,
80
+ .nested-menu li > button[aria-current="page"]:hover {
81
+ background-color: color-mix(in oklch, var(--color-primary-container), var(--color-on-primary-container) 8%);
82
+ }
83
+
84
+ /* Disabled state */
85
+ .nested-menu li.disabled {
86
+ opacity: 0.5;
87
+ pointer-events: none;
88
+ }
89
+
90
+ /* ============================================
91
+ * COLLAPSIBLE SUBMENUS (<details>/<summary>)
92
+ * ============================================ */
93
+
94
+ .nested-menu details {
95
+ width: 100%;
96
+ }
97
+
98
+ /* Remove native marker */
99
+ .nested-menu summary {
100
+ display: flex;
101
+ align-items: center;
102
+ gap: 0.5rem;
103
+ width: 100%;
104
+ padding: 0.5rem 0.75rem;
105
+ font-size: inherit;
106
+ color: var(--color-on-surface);
107
+ background-color: transparent;
108
+ border: none;
109
+ border-radius: var(--radius-field, 0.375rem);
110
+ cursor: pointer;
111
+ list-style: none;
112
+ transition: background-color 150ms ease-in-out;
113
+ }
114
+
115
+ .nested-menu summary::-webkit-details-marker {
116
+ display: none;
117
+ }
118
+
119
+ .nested-menu summary::marker {
120
+ display: none;
121
+ content: "";
122
+ }
123
+
124
+ .nested-menu summary:hover {
125
+ background-color: var(--color-surface-container);
126
+ }
127
+
128
+ .nested-menu summary:focus-visible {
129
+ outline: 2px solid var(--color-primary);
130
+ outline-offset: -2px;
131
+ }
132
+
133
+ /* Chevron indicator */
134
+ .nested-menu summary::after {
135
+ content: "";
136
+ display: inline-block;
137
+ margin-left: auto;
138
+ width: 0.375rem;
139
+ height: 0.375rem;
140
+ border-right: 1.5px solid currentColor;
141
+ border-bottom: 1.5px solid currentColor;
142
+ transform: rotate(-45deg);
143
+ transition: transform 200ms ease-in-out;
144
+ flex-shrink: 0;
145
+ opacity: 0.6;
146
+ }
147
+
148
+ .nested-menu details[open] > summary::after {
149
+ transform: rotate(45deg);
150
+ }
151
+
152
+ /* Nested <ul> inside details — auto-indentation */
153
+ .nested-menu details > ul {
154
+ list-style: none;
155
+ margin: 0;
156
+ padding: 0.125rem 0 0.125rem 1rem;
157
+ display: flex;
158
+ flex-direction: column;
159
+ gap: 0.125rem;
160
+ }
161
+
162
+ /* ============================================
163
+ * SIZE VARIANTS
164
+ * ============================================ */
165
+
166
+ .nested-menu-xs {
167
+ font-size: 0.75rem;
168
+ padding: 0.25rem;
169
+ }
170
+
171
+ .nested-menu-xs li > a,
172
+ .nested-menu-xs li > button,
173
+ .nested-menu-xs summary {
174
+ padding: 0.25rem 0.5rem;
175
+ gap: 0.375rem;
176
+ }
177
+
178
+ .nested-menu-xs .nested-menu-title {
179
+ padding: 0.5rem 0.5rem 0.125rem;
180
+ font-size: 0.625rem;
181
+ }
182
+
183
+ .nested-menu-sm {
184
+ font-size: 0.8125rem;
185
+ padding: 0.375rem;
186
+ }
187
+
188
+ .nested-menu-sm li > a,
189
+ .nested-menu-sm li > button,
190
+ .nested-menu-sm summary {
191
+ padding: 0.375rem 0.625rem;
192
+ gap: 0.375rem;
193
+ }
194
+
195
+ .nested-menu-sm .nested-menu-title {
196
+ padding: 0.625rem 0.625rem 0.1875rem;
197
+ font-size: 0.625rem;
198
+ }
199
+
200
+ .nested-menu-lg {
201
+ font-size: 1rem;
202
+ padding: 0.625rem;
203
+ }
204
+
205
+ .nested-menu-lg li > a,
206
+ .nested-menu-lg li > button,
207
+ .nested-menu-lg summary {
208
+ padding: 0.625rem 1rem;
209
+ gap: 0.625rem;
210
+ }
211
+
212
+ .nested-menu-lg .nested-menu-title {
213
+ padding: 0.875rem 1rem 0.375rem;
214
+ font-size: 0.75rem;
215
+ }
216
+
217
+ /* ============================================
218
+ * MODIFIER VARIANTS
219
+ * ============================================ */
220
+
221
+ /* Bordered — sidebar panel look */
222
+ .nested-menu-bordered {
223
+ background-color: var(--color-surface);
224
+ border: 1px solid var(--color-outline-variant);
225
+ border-radius: var(--radius-card, 0.75rem);
226
+ box-shadow: var(--shadow-sm, 0 1px 2px 0 rgb(0 0 0 / 0.05));
227
+ }
228
+
229
+ /* Compact — tighter padding throughout */
230
+ .nested-menu-compact {
231
+ padding: 0.25rem;
232
+ gap: 0;
233
+ }
234
+
235
+ .nested-menu-compact li > a,
236
+ .nested-menu-compact li > button,
237
+ .nested-menu-compact summary {
238
+ padding: 0.3125rem 0.625rem;
239
+ }
240
+
241
+ .nested-menu-compact .nested-menu-title {
242
+ padding: 0.5rem 0.625rem 0.125rem;
243
+ }
244
+
245
+ .nested-menu-compact details > ul {
246
+ padding: 0 0 0 0.75rem;
247
+ }
248
+
249
+ /* ============================================
250
+ * REDUCED MOTION
251
+ * ============================================ */
252
+
253
+ @media (prefers-reduced-motion: reduce) {
254
+ .nested-menu li > a,
255
+ .nested-menu li > button,
256
+ .nested-menu summary,
257
+ .nested-menu summary::after {
258
+ transition: none;
259
+ }
260
+ }
261
+ }
@@ -4,8 +4,8 @@
4
4
  */
5
5
 
6
6
  @layer components {
7
- /* Popover Container */
8
- .popover {
7
+ /* Popover Container (class-based approach only, not native [popover]) */
8
+ .popover:not([popover]) {
9
9
  position: relative;
10
10
  display: inline-block;
11
11
  }
@@ -20,7 +20,7 @@
20
20
  background-color: var(--color-surface);
21
21
  border: 1px solid var(--color-outline-variant);
22
22
  border-radius: 0.75rem;
23
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
23
+ box-shadow: var(--shadow-lg);
24
24
  opacity: 0;
25
25
  visibility: hidden;
26
26
  transform: scale(0.95);
@@ -55,7 +55,7 @@
55
55
  background-color: var(--color-surface);
56
56
  border: 1px solid var(--color-outline-variant);
57
57
  border-radius: 0.75rem;
58
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
58
+ box-shadow: var(--shadow-lg);
59
59
  opacity: 0;
60
60
  visibility: hidden;
61
61
  transition: opacity 150ms ease-out, visibility 150ms ease-out;
@@ -509,7 +509,7 @@
509
509
  background-color: var(--color-surface);
510
510
  border: 1px solid var(--color-outline-variant);
511
511
  border-radius: 0.75rem;
512
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
512
+ box-shadow: var(--shadow-lg);
513
513
  opacity: 0;
514
514
  transform: scale(0.95);
515
515
  transition: opacity 150ms ease-out, transform 150ms ease-out, overlay 150ms ease-out allow-discrete, display 150ms ease-out allow-discrete;
@@ -651,53 +651,65 @@
651
651
  style="anchor-name: --my-popover" */
652
652
  }
653
653
 
654
- /* Anchored popover positioning */
654
+ /* Anchored popover positioning
655
+ * Uses anchor() functions instead of position-area to avoid
656
+ * a Chrome rendering bug at HiDPI (DPR>=2) where position-area
657
+ * computes correct CSS-pixel offsets but renders at physical-pixel
658
+ * coordinates, doubling the distance from the anchor. */
655
659
  .popover[popover][style*="position-anchor"] {
656
- position: absolute;
657
- position-area: bottom;
660
+ inset: unset;
661
+ top: anchor(bottom);
662
+ justify-self: anchor-center;
658
663
  margin-top: 0.5rem;
659
664
  }
660
665
 
661
666
  /* Position variants for anchored popovers */
662
667
  .popover-top[popover][style*="position-anchor"] {
663
- position-area: top;
668
+ top: unset;
669
+ bottom: anchor(top);
664
670
  margin-top: 0;
665
671
  margin-bottom: 0.5rem;
666
672
  }
667
673
 
668
674
  .popover-bottom[popover][style*="position-anchor"] {
669
- position-area: bottom;
675
+ top: anchor(bottom);
670
676
  margin-top: 0.5rem;
671
677
  margin-bottom: 0;
672
678
  }
673
679
 
674
680
  .popover-left[popover][style*="position-anchor"] {
675
- position-area: left;
681
+ top: anchor(center);
682
+ right: anchor(left);
683
+ justify-self: unset;
684
+ translate: 0 -50%;
676
685
  margin-top: 0;
677
686
  margin-right: 0.5rem;
678
687
  }
679
688
 
680
689
  .popover-right[popover][style*="position-anchor"] {
681
- position-area: right;
690
+ top: anchor(center);
691
+ left: anchor(right);
692
+ justify-self: unset;
693
+ translate: 0 -50%;
682
694
  margin-top: 0;
683
695
  margin-left: 0.5rem;
684
696
  }
685
697
 
686
698
  /* Anchored popover alignment variants */
687
699
  .popover-start[popover][style*="position-anchor"] {
688
- position-area: bottom start;
700
+ justify-self: start;
689
701
  }
690
702
 
691
703
  .popover-end[popover][style*="position-anchor"] {
692
- position-area: bottom end;
704
+ justify-self: end;
693
705
  }
694
706
 
695
707
  .popover-top.popover-start[popover][style*="position-anchor"] {
696
- position-area: top start;
708
+ justify-self: start;
697
709
  }
698
710
 
699
711
  .popover-top.popover-end[popover][style*="position-anchor"] {
700
- position-area: top end;
712
+ justify-self: end;
701
713
  }
702
714
 
703
715
  /* Reduce Motion */
@@ -65,7 +65,7 @@
65
65
  background-color: var(--color-surface-container-highest);
66
66
  color: var(--color-on-surface);
67
67
  border-radius: 0.5rem;
68
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
68
+ box-shadow: var(--shadow-md);
69
69
  pointer-events: auto;
70
70
  opacity: 0;
71
71
  transform: translateY(100%);
@@ -198,7 +198,7 @@
198
198
  background-color: var(--color-surface);
199
199
  border: 1px solid var(--color-outline-variant);
200
200
  border-radius: 0.5rem;
201
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
201
+ box-shadow: var(--shadow-md);
202
202
  }
203
203
 
204
204
  .time-picker-dropdown-open {
@@ -66,7 +66,7 @@
66
66
  color: var(--color-on-surface);
67
67
  border: 1px solid var(--color-outline);
68
68
  border-radius: 0.75rem;
69
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
69
+ box-shadow: var(--shadow-lg);
70
70
  pointer-events: auto;
71
71
  opacity: 0;
72
72
  transform: translateX(100%);
@@ -22,7 +22,7 @@
22
22
  background-color: var(--color-on-surface);
23
23
  color: var(--color-surface);
24
24
  border-radius: 0.25rem;
25
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
25
+ box-shadow: var(--shadow-md);
26
26
  opacity: 0;
27
27
  visibility: hidden;
28
28
  transition: opacity 150ms ease-out, visibility 150ms ease-out;
@@ -151,7 +151,7 @@
151
151
  background-color: var(--color-surface);
152
152
  color: var(--color-on-surface);
153
153
  border: 1px solid var(--color-outline);
154
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
154
+ box-shadow: var(--shadow-md);
155
155
  }
156
156
 
157
157
  .tooltip.tooltip-light .tooltip-content::before {
@@ -136,7 +136,7 @@
136
136
  background-color: var(--color-surface);
137
137
  border: 1px solid var(--color-outline-variant);
138
138
  border-radius: 0.5rem;
139
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
139
+ box-shadow: var(--shadow-md);
140
140
  overflow-y: auto;
141
141
  }
142
142
 
@@ -15,7 +15,7 @@ export const css = `/**
15
15
  padding: 0 1rem;
16
16
  background-color: var(--color-surface);
17
17
  color: var(--color-on-surface);
18
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
18
+ box-shadow: var(--shadow-sm);
19
19
  }
20
20
 
21
21
  /* Static App Bar (default) */
@@ -56,7 +56,7 @@ export const css = `/**
56
56
 
57
57
  /* App Bar with Shadow (elevated) */
58
58
  .appbar-elevated {
59
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
59
+ box-shadow: var(--shadow-sm);
60
60
  }
61
61
 
62
62
  /* Flat App Bar (no shadow) */
@@ -50,7 +50,7 @@ export const css = `/**
50
50
  background-color: var(--color-surface);
51
51
  border: 1px solid var(--color-outline);
52
52
  border-radius: 0.5rem;
53
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
53
+ box-shadow: var(--shadow-lg);
54
54
  overflow-y: auto;
55
55
  opacity: 0;
56
56
  visibility: hidden;
@@ -14,12 +14,12 @@ export const css = `/**
14
14
  border-radius: 1rem;
15
15
  background-color: var(--color-surface);
16
16
  color: var(--color-on-surface);
17
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
17
+ box-shadow: var(--shadow-sm);
18
18
  transition: box-shadow 150ms ease-in-out, transform 150ms ease-in-out;
19
19
  }
20
20
 
21
21
  .card:hover {
22
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1);
22
+ box-shadow: var(--shadow-md);
23
23
  }
24
24
 
25
25
  /* Card Image */
@@ -172,11 +172,11 @@ export const css = `/**
172
172
 
173
173
  /* Elevated Variants */
174
174
  .card-elevated {
175
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
175
+ box-shadow: var(--shadow-lg);
176
176
  }
177
177
 
178
178
  .card-elevated:hover {
179
- box-shadow: 0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1);
179
+ box-shadow: var(--shadow-xl);
180
180
  transform: translateY(-2px);
181
181
  }
182
182
 
@@ -126,7 +126,7 @@ export const css = `/**
126
126
  background-color: var(--color-surface);
127
127
  border: 1px solid var(--color-outline-variant);
128
128
  border-radius: 0.5rem;
129
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
129
+ box-shadow: var(--shadow-md);
130
130
  overflow: hidden;
131
131
  }
132
132
 
@@ -157,7 +157,7 @@ export const css = `/**
157
157
  border: 1px solid var(--color-outline-variant);
158
158
  border-radius: 0.75rem;
159
159
  overflow: hidden;
160
- box-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1);
160
+ box-shadow: var(--shadow-sm);
161
161
  }
162
162
 
163
163
  .collapse-card .collapse-toggle,
@@ -117,7 +117,7 @@ export const css = `/**
117
117
  background-color: var(--color-surface);
118
118
  border: 1px solid var(--color-outline);
119
119
  border-radius: 0.75rem;
120
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
120
+ box-shadow: var(--shadow-lg);
121
121
  opacity: 0;
122
122
  visibility: hidden;
123
123
  transform: translateY(-0.5rem);
@@ -143,7 +143,7 @@ export const css = `/**
143
143
  background-color: var(--color-surface);
144
144
  border: 1px solid var(--color-outline);
145
145
  border-radius: 0.75rem;
146
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
146
+ box-shadow: var(--shadow-lg);
147
147
  }
148
148
 
149
149
  /* Calendar Header */
@@ -18,7 +18,7 @@ export const css = `/**
18
18
  background-color: var(--color-surface);
19
19
  color: var(--color-on-surface);
20
20
  border-radius: 1.5rem;
21
- box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
21
+ box-shadow: var(--shadow-2xl);
22
22
  overflow: hidden;
23
23
  }
24
24
 
@@ -28,7 +28,7 @@ export const css = `/**
28
28
  display: flex;
29
29
  flex-direction: column;
30
30
  background-color: var(--color-surface-container-low);
31
- box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
31
+ box-shadow: var(--shadow-2xl);
32
32
  transition: transform 300ms ease-out;
33
33
  }
34
34
 
@@ -287,7 +287,7 @@ export const css = `/**
287
287
  }
288
288
 
289
289
  .file-upload-button:hover {
290
- box-shadow: 0 4px 6px -1px rgb(0 0 0 / 0.1);
290
+ box-shadow: var(--shadow-md);
291
291
  }
292
292
 
293
293
  .file-upload-button:focus-visible {
@@ -148,7 +148,7 @@ export const css = `/**
148
148
  .fieldset-card {
149
149
  background-color: var(--color-surface);
150
150
  border-color: transparent;
151
- box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
151
+ box-shadow: var(--shadow-xs);
152
152
  padding: 1.5rem;
153
153
  }
154
154
 
@@ -290,6 +290,13 @@ export const css = `/**
290
290
  border-color: var(--color-error);
291
291
  }
292
292
 
293
+ .form-group-error .input:focus-visible,
294
+ .form-group-error .select:focus-visible,
295
+ .form-group-error .textarea:focus-visible {
296
+ border-color: var(--color-error);
297
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
298
+ }
299
+
293
300
  /* Success State on Form Group */
294
301
  .form-group-success .form-label {
295
302
  color: var(--color-success);
@@ -301,6 +308,31 @@ export const css = `/**
301
308
  border-color: var(--color-success);
302
309
  }
303
310
 
311
+ .form-group-success .input:focus-visible,
312
+ .form-group-success .select:focus-visible,
313
+ .form-group-success .textarea:focus-visible {
314
+ border-color: var(--color-success);
315
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
316
+ }
317
+
318
+ /* Warning State on Form Group */
319
+ .form-group-warning .form-label {
320
+ color: var(--color-warning);
321
+ }
322
+
323
+ .form-group-warning .input,
324
+ .form-group-warning .select,
325
+ .form-group-warning .textarea {
326
+ border-color: var(--color-warning);
327
+ }
328
+
329
+ .form-group-warning .input:focus-visible,
330
+ .form-group-warning .select:focus-visible,
331
+ .form-group-warning .textarea:focus-visible {
332
+ border-color: var(--color-warning);
333
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
334
+ }
335
+
304
336
  /* Disabled Form Group */
305
337
  .form-group-disabled {
306
338
  opacity: 0.5;
@@ -36,7 +36,7 @@ export const css = `/**
36
36
  background-color: var(--color-surface);
37
37
  color: var(--color-on-surface);
38
38
  border-radius: 1rem;
39
- box-shadow: 0 25px 50px -12px rgb(0 0 0 / 0.25);
39
+ box-shadow: var(--shadow-2xl);
40
40
  overflow-y: auto;
41
41
  transform: scale(0.95);
42
42
  transition: transform 200ms ease-out;
@@ -192,7 +192,7 @@ export const css = `/**
192
192
  background-color: var(--color-surface);
193
193
  border: 1px solid var(--color-outline-variant);
194
194
  border-radius: 0.5rem;
195
- box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
195
+ box-shadow: var(--shadow-md);
196
196
  overflow: hidden;
197
197
  }
198
198
 
@@ -439,7 +439,7 @@ export const css = `/**
439
439
  .tabs-boxed .tab[aria-selected="true"] {
440
440
  background-color: var(--color-surface);
441
441
  color: var(--color-on-surface);
442
- box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
442
+ box-shadow: var(--shadow-xs);
443
443
  }
444
444
 
445
445
  /* Tabs Lifted */
@@ -491,7 +491,7 @@ export const css = `/**
491
491
  background-color: var(--color-surface);
492
492
  border: 1px solid var(--color-outline);
493
493
  border-radius: 0.5rem;
494
- box-shadow: 0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1);
494
+ box-shadow: var(--shadow-lg);
495
495
  opacity: 0;
496
496
  visibility: hidden;
497
497
  transform: translateY(-0.5rem);