@duskmoon-dev/core 1.12.4 → 1.13.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 (62) hide show
  1. package/dist/components/alert.css +64 -2
  2. package/dist/components/appbar.css +119 -21
  3. package/dist/components/autocomplete.css +63 -3
  4. package/dist/components/avatar.css +22 -2
  5. package/dist/components/button.css +101 -49
  6. package/dist/components/card.css +38 -2
  7. package/dist/components/cascader.css +59 -9
  8. package/dist/components/checkbox.css +15 -5
  9. package/dist/components/chip.css +122 -2
  10. package/dist/components/collapse.css +32 -0
  11. package/dist/components/datepicker.css +79 -6
  12. package/dist/components/file-upload.css +68 -8
  13. package/dist/components/form.css +2 -1
  14. package/dist/components/index.css +1583 -409
  15. package/dist/components/input.css +21 -67
  16. package/dist/components/multi-select.css +59 -9
  17. package/dist/components/otp-input.css +48 -16
  18. package/dist/components/pin-input.css +50 -13
  19. package/dist/components/radio.css +12 -2
  20. package/dist/components/rating.css +35 -3
  21. package/dist/components/segment-control.css +23 -2
  22. package/dist/components/select.css +21 -37
  23. package/dist/components/slider.css +130 -6
  24. package/dist/components/switch.css +27 -4
  25. package/dist/components/textarea.css +21 -96
  26. package/dist/components/time-input.css +61 -12
  27. package/dist/components/toast.css +72 -3
  28. package/dist/components/toggle.css +63 -6
  29. package/dist/components/tooltip.css +84 -0
  30. package/dist/components/tree-select.css +60 -11
  31. package/dist/esm/components/alert.js +64 -2
  32. package/dist/esm/components/appbar.js +119 -21
  33. package/dist/esm/components/autocomplete.js +63 -3
  34. package/dist/esm/components/avatar.js +22 -2
  35. package/dist/esm/components/button.js +101 -49
  36. package/dist/esm/components/card.js +38 -2
  37. package/dist/esm/components/cascader.js +59 -9
  38. package/dist/esm/components/checkbox.js +15 -5
  39. package/dist/esm/components/chip.js +122 -2
  40. package/dist/esm/components/collapse.js +32 -0
  41. package/dist/esm/components/datepicker.js +79 -6
  42. package/dist/esm/components/file-upload.js +68 -8
  43. package/dist/esm/components/form.js +2 -1
  44. package/dist/esm/components/input.js +21 -67
  45. package/dist/esm/components/multi-select.js +59 -9
  46. package/dist/esm/components/otp-input.js +48 -16
  47. package/dist/esm/components/pin-input.js +50 -13
  48. package/dist/esm/components/radio.js +12 -2
  49. package/dist/esm/components/rating.js +35 -3
  50. package/dist/esm/components/segment-control.js +23 -2
  51. package/dist/esm/components/select.js +21 -37
  52. package/dist/esm/components/slider.js +130 -6
  53. package/dist/esm/components/switch.js +27 -4
  54. package/dist/esm/components/textarea.js +21 -96
  55. package/dist/esm/components/time-input.js +61 -12
  56. package/dist/esm/components/toast.js +72 -3
  57. package/dist/esm/components/toggle.js +63 -6
  58. package/dist/esm/components/tooltip.js +84 -0
  59. package/dist/esm/components/tree-select.js +60 -11
  60. package/dist/index.css +1583 -409
  61. package/dist/index.min.css +1 -1
  62. package/package.json +1 -1
@@ -13,6 +13,7 @@
13
13
  height: 2.5rem;
14
14
  touch-action: none;
15
15
  user-select: none;
16
+ color: var(--color-on-surface);
16
17
  }
17
18
 
18
19
  /* Slider Track */
@@ -73,7 +74,7 @@
73
74
  margin-bottom: 0.5rem;
74
75
  font-size: 0.75rem;
75
76
  font-weight: 500;
76
- color: var(--color-on-primary);
77
+ color: var(--color-primary-content);
77
78
  background-color: var(--color-primary);
78
79
  border-radius: 0.25rem;
79
80
  white-space: nowrap;
@@ -127,7 +128,7 @@
127
128
  }
128
129
 
129
130
  .slider-mark-active {
130
- background-color: var(--color-on-primary);
131
+ background-color: var(--color-primary-content);
131
132
  }
132
133
 
133
134
  /* Mark Label */
@@ -178,6 +179,27 @@
178
179
  }
179
180
 
180
181
  /* Color Variants */
182
+ .slider-primary .slider-track-filled,
183
+ .slider-primary .slider-thumb {
184
+ background-color: var(--color-primary);
185
+ }
186
+
187
+ .slider-primary .slider-mark-active { background-color: var(--color-primary-content); }
188
+
189
+ .slider-primary .slider-thumb:hover,
190
+ .slider-primary .slider-thumb:focus-visible {
191
+ box-shadow: 0 0 0 8px var(--color-primary-container), 0 2px 4px rgb(0 0 0 / 0.2);
192
+ }
193
+
194
+ .slider-primary .slider-thumb-label {
195
+ background-color: var(--color-primary);
196
+ color: var(--color-primary-content);
197
+ }
198
+
199
+ .slider-primary .slider-thumb-label::after {
200
+ border-top-color: var(--color-primary);
201
+ }
202
+
181
203
  .slider-secondary .slider-track-filled,
182
204
  .slider-secondary .slider-thumb {
183
205
  background-color: var(--color-secondary);
@@ -188,9 +210,11 @@
188
210
  box-shadow: 0 0 0 8px var(--color-secondary-container), 0 2px 4px rgb(0 0 0 / 0.2);
189
211
  }
190
212
 
213
+ .slider-secondary .slider-mark-active { background-color: var(--color-secondary-content); }
214
+
191
215
  .slider-secondary .slider-thumb-label {
192
216
  background-color: var(--color-secondary);
193
- color: var(--color-on-secondary);
217
+ color: var(--color-secondary-content);
194
218
  }
195
219
 
196
220
  .slider-secondary .slider-thumb-label::after {
@@ -207,15 +231,105 @@
207
231
  box-shadow: 0 0 0 8px var(--color-tertiary-container), 0 2px 4px rgb(0 0 0 / 0.2);
208
232
  }
209
233
 
234
+ .slider-tertiary .slider-mark-active { background-color: var(--color-tertiary-content); }
235
+
210
236
  .slider-tertiary .slider-thumb-label {
211
237
  background-color: var(--color-tertiary);
212
- color: var(--color-on-tertiary);
238
+ color: var(--color-tertiary-content);
213
239
  }
214
240
 
215
241
  .slider-tertiary .slider-thumb-label::after {
216
242
  border-top-color: var(--color-tertiary);
217
243
  }
218
244
 
245
+ /* Info */
246
+ .slider-info .slider-track-filled,
247
+ .slider-info .slider-thumb {
248
+ background-color: var(--color-info);
249
+ }
250
+
251
+ .slider-info .slider-thumb:hover,
252
+ .slider-info .slider-thumb:focus-visible {
253
+ box-shadow: 0 0 0 8px var(--color-info-container), 0 2px 4px rgb(0 0 0 / 0.2);
254
+ }
255
+
256
+ .slider-info .slider-mark-active { background-color: var(--color-info-content); }
257
+
258
+ .slider-info .slider-thumb-label {
259
+ background-color: var(--color-info);
260
+ color: var(--color-info-content);
261
+ }
262
+
263
+ .slider-info .slider-thumb-label::after {
264
+ border-top-color: var(--color-info);
265
+ }
266
+
267
+ /* Success */
268
+ .slider-success .slider-track-filled,
269
+ .slider-success .slider-thumb {
270
+ background-color: var(--color-success);
271
+ }
272
+
273
+ .slider-success .slider-thumb:hover,
274
+ .slider-success .slider-thumb:focus-visible {
275
+ box-shadow: 0 0 0 8px var(--color-success-container), 0 2px 4px rgb(0 0 0 / 0.2);
276
+ }
277
+
278
+ .slider-success .slider-mark-active { background-color: var(--color-success-content); }
279
+
280
+ .slider-success .slider-thumb-label {
281
+ background-color: var(--color-success);
282
+ color: var(--color-success-content);
283
+ }
284
+
285
+ .slider-success .slider-thumb-label::after {
286
+ border-top-color: var(--color-success);
287
+ }
288
+
289
+ /* Warning */
290
+ .slider-warning .slider-track-filled,
291
+ .slider-warning .slider-thumb {
292
+ background-color: var(--color-warning);
293
+ }
294
+
295
+ .slider-warning .slider-thumb:hover,
296
+ .slider-warning .slider-thumb:focus-visible {
297
+ box-shadow: 0 0 0 8px var(--color-warning-container), 0 2px 4px rgb(0 0 0 / 0.2);
298
+ }
299
+
300
+ .slider-warning .slider-mark-active { background-color: var(--color-warning-content); }
301
+
302
+ .slider-warning .slider-thumb-label {
303
+ background-color: var(--color-warning);
304
+ color: var(--color-warning-content);
305
+ }
306
+
307
+ .slider-warning .slider-thumb-label::after {
308
+ border-top-color: var(--color-warning);
309
+ }
310
+
311
+ /* Error */
312
+ .slider-error .slider-track-filled,
313
+ .slider-error .slider-thumb {
314
+ background-color: var(--color-error);
315
+ }
316
+
317
+ .slider-error .slider-thumb:hover,
318
+ .slider-error .slider-thumb:focus-visible {
319
+ box-shadow: 0 0 0 8px var(--color-error-container), 0 2px 4px rgb(0 0 0 / 0.2);
320
+ }
321
+
322
+ .slider-error .slider-mark-active { background-color: var(--color-error-content); }
323
+
324
+ .slider-error .slider-thumb-label {
325
+ background-color: var(--color-error);
326
+ color: var(--color-error-content);
327
+ }
328
+
329
+ .slider-error .slider-thumb-label::after {
330
+ border-top-color: var(--color-error);
331
+ }
332
+
219
333
  /* Disabled State */
220
334
  .slider-disabled {
221
335
  opacity: 0.6;
@@ -272,9 +386,18 @@
272
386
  right: 100%;
273
387
  transform: translateY(-50%);
274
388
  border-top-color: transparent;
275
- border-right-color: var(--color-primary);
389
+ border-right-color: var(--color-primary); /* overridden per-variant below */
276
390
  }
277
391
 
392
+ /* Variant-specific vertical arrow colors (border-right-color cannot use currentColor
393
+ since it must match the label background, not the text color) */
394
+ .slider-secondary.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-secondary); }
395
+ .slider-tertiary.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-tertiary); }
396
+ .slider-info.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-info); }
397
+ .slider-success.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-success); }
398
+ .slider-warning.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-warning); }
399
+ .slider-error.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-error); }
400
+
278
401
  .slider-vertical .slider-marks {
279
402
  flex-direction: column;
280
403
  top: 0;
@@ -314,7 +437,8 @@
314
437
 
315
438
  .slider-input:focus {
316
439
  outline: none;
317
- border-color: var(--color-primary);
440
+ border-color: currentColor;
441
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
318
442
  }
319
443
 
320
444
  /* Reduce Motion */
@@ -11,8 +11,11 @@
11
11
  .switch {
12
12
  --switch-width: 3.25rem;
13
13
  --switch-height: 2rem;
14
+ color: var(--color-on-surface);
14
15
  --switch-thumb-size: 1rem;
15
16
  --switch-color: var(--color-primary);
17
+ --switch-content-color: var(--color-primary-content);
18
+ --switch-container-color: var(--color-primary-container);
16
19
  --switch-track-color: var(--color-surface-container-highest);
17
20
  --switch-border-color: var(--color-outline);
18
21
  --switch-thumb-color: var(--color-outline);
@@ -58,7 +61,7 @@
58
61
  }
59
62
 
60
63
  .switch:checked::before {
61
- background-color: var(--color-primary-content);
64
+ background-color: var(--switch-content-color);
62
65
  }
63
66
 
64
67
  /* Hover State (unchecked) */
@@ -77,13 +80,13 @@
77
80
  }
78
81
 
79
82
  .switch:checked:hover:not(:disabled)::before {
80
- background-color: var(--color-primary-container);
83
+ background-color: var(--switch-container-color);
81
84
  }
82
85
 
83
86
  /* Focus State */
84
87
  .switch:focus-visible {
85
- outline: 2px solid var(--switch-color);
86
- outline-offset: 2px;
88
+ outline: none;
89
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--switch-color) 20%, transparent);
87
90
  }
88
91
 
89
92
  /* Pressed/Active State - expand thumb slightly */
@@ -160,30 +163,50 @@
160
163
 
161
164
  .switch-primary {
162
165
  --switch-color: var(--color-primary);
166
+ --switch-content-color: var(--color-primary-content);
167
+ --switch-container-color: var(--color-primary-container);
163
168
  }
164
169
 
165
170
  .switch-secondary {
166
171
  --switch-color: var(--color-secondary);
172
+ --switch-content-color: var(--color-secondary-content);
173
+ --switch-container-color: var(--color-secondary-container);
167
174
  }
168
175
 
169
176
  .switch-tertiary {
170
177
  --switch-color: var(--color-tertiary);
178
+ --switch-content-color: var(--color-tertiary-content);
179
+ --switch-container-color: var(--color-tertiary-container);
171
180
  }
172
181
 
173
182
  .switch-success {
174
183
  --switch-color: var(--color-success);
184
+ --switch-content-color: var(--color-success-content);
185
+ --switch-container-color: var(--color-success-container);
175
186
  }
176
187
 
177
188
  .switch-warning {
178
189
  --switch-color: var(--color-warning);
190
+ --switch-content-color: var(--color-warning-content);
191
+ --switch-container-color: var(--color-warning-container);
179
192
  }
180
193
 
181
194
  .switch-error {
182
195
  --switch-color: var(--color-error);
196
+ --switch-content-color: var(--color-error-content);
197
+ --switch-container-color: var(--color-error-container);
183
198
  }
184
199
 
185
200
  .switch-info {
186
201
  --switch-color: var(--color-info);
202
+ --switch-content-color: var(--color-info-content);
203
+ --switch-container-color: var(--color-info-container);
204
+ }
205
+
206
+ /* Ghost Variant — borderless track */
207
+ .switch-ghost {
208
+ --switch-border-color: transparent;
209
+ --switch-track-color: transparent;
187
210
  }
188
211
 
189
212
  /* ========================================
@@ -92,7 +92,7 @@
92
92
  font-family: inherit;
93
93
  color: var(--color-on-surface);
94
94
  background-color: var(--color-surface);
95
- border: 1px solid var(--color-outline);
95
+ border: 1px solid currentColor;
96
96
  border-radius: 0.5rem;
97
97
  outline: none;
98
98
  resize: vertical;
@@ -105,7 +105,7 @@
105
105
  }
106
106
 
107
107
  .textarea:hover:not(:disabled) {
108
- border-color: var(--color-on-surface-variant);
108
+ background-color: var(--color-surface-container);
109
109
  }
110
110
 
111
111
  .textarea:focus {
@@ -113,8 +113,7 @@
113
113
  }
114
114
 
115
115
  .textarea:focus-visible {
116
- border-color: var(--color-primary);
117
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
116
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
118
117
  }
119
118
 
120
119
  .textarea:disabled {
@@ -156,6 +155,14 @@
156
155
  box-shadow: none;
157
156
  }
158
157
 
158
+ .textarea-filled.textarea-primary:focus-visible { border-bottom-color: var(--color-primary); }
159
+ .textarea-filled.textarea-secondary:focus-visible { border-bottom-color: var(--color-secondary); }
160
+ .textarea-filled.textarea-tertiary:focus-visible { border-bottom-color: var(--color-tertiary); }
161
+ .textarea-filled.textarea-info:focus-visible { border-bottom-color: var(--color-info); }
162
+ .textarea-filled.textarea-success:focus-visible { border-bottom-color: var(--color-success); }
163
+ .textarea-filled.textarea-warning:focus-visible { border-bottom-color: var(--color-warning); }
164
+ .textarea-filled.textarea-error:focus-visible { border-bottom-color: var(--color-error); }
165
+
159
166
  /* Outlined Variant (default) */
160
167
  .textarea-outlined {
161
168
  background-color: transparent;
@@ -177,109 +184,27 @@
177
184
  .textarea-ghost:focus-visible {
178
185
  background-color: var(--color-surface-container);
179
186
  border-color: transparent;
180
- box-shadow: none;
187
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
181
188
  }
182
189
 
183
190
  /* ============================================
184
191
  * COLOR VARIANTS
185
192
  * ============================================ */
186
193
 
187
- /* Primary */
188
- .textarea-primary {
189
- border-color: var(--color-primary);
190
- }
191
-
192
- .textarea-primary:focus-visible {
193
- border-color: var(--color-primary);
194
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
195
- }
196
-
197
- .textarea-filled.textarea-primary {
198
- border-bottom-color: var(--color-primary);
199
- }
200
-
201
- .textarea-filled.textarea-primary:focus-visible {
202
- border-bottom-color: var(--color-primary);
203
- }
204
-
205
- /* Secondary */
206
- .textarea-secondary {
207
- border-color: var(--color-secondary);
208
- }
209
-
210
- .textarea-secondary:focus-visible {
211
- border-color: var(--color-secondary);
212
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
213
- }
214
-
215
- .textarea-filled.textarea-secondary {
216
- border-bottom-color: var(--color-secondary);
217
- }
218
-
219
- .textarea-filled.textarea-secondary:focus-visible {
220
- border-bottom-color: var(--color-secondary);
221
- }
222
-
223
- /* Tertiary */
224
- .textarea-tertiary {
225
- border-color: var(--color-tertiary);
226
- }
227
-
228
- .textarea-tertiary:focus-visible {
229
- border-color: var(--color-tertiary);
230
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
231
- }
232
-
233
- .textarea-filled.textarea-tertiary {
234
- border-bottom-color: var(--color-tertiary);
235
- }
236
-
237
- .textarea-filled.textarea-tertiary:focus-visible {
238
- border-bottom-color: var(--color-tertiary);
239
- }
194
+ /* Color Variants — base .textarea:focus-visible uses currentColor 20%, so no per-variant
195
+ focus-visible overrides needed; setting color: here is sufficient. */
196
+ .textarea-primary { color: var(--color-primary); }
197
+ .textarea-secondary { color: var(--color-secondary); }
198
+ .textarea-tertiary { color: var(--color-tertiary); }
240
199
 
241
200
  /* ============================================
242
201
  * SEMANTIC COLORS
243
202
  * ============================================ */
244
203
 
245
- .textarea-error {
246
- border-color: var(--color-error);
247
- }
248
-
249
- .textarea-error:focus-visible {
250
- border-color: var(--color-error);
251
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
252
- }
253
-
254
- .textarea-filled.textarea-error {
255
- border-bottom-color: var(--color-error);
256
- }
257
-
258
- .textarea-success {
259
- border-color: var(--color-success);
260
- }
261
-
262
- .textarea-success:focus-visible {
263
- border-color: var(--color-success);
264
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
265
- }
266
-
267
- .textarea-filled.textarea-success {
268
- border-bottom-color: var(--color-success);
269
- }
270
-
271
- .textarea-warning {
272
- border-color: var(--color-warning);
273
- }
274
-
275
- .textarea-warning:focus-visible {
276
- border-color: var(--color-warning);
277
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
278
- }
279
-
280
- .textarea-filled.textarea-warning {
281
- border-bottom-color: var(--color-warning);
282
- }
204
+ .textarea-info { color: var(--color-info); }
205
+ .textarea-success { color: var(--color-success); }
206
+ .textarea-warning { color: var(--color-warning); }
207
+ .textarea-error { color: var(--color-error); }
283
208
 
284
209
  /* ============================================
285
210
  * SIZE VARIANTS
@@ -20,19 +20,18 @@
20
20
  line-height: 1.5rem;
21
21
  color: var(--color-on-surface);
22
22
  background-color: var(--color-surface);
23
- border: 1px solid var(--color-outline);
23
+ border: 1px solid currentColor;
24
24
  border-radius: 0.5rem;
25
25
  outline: none;
26
26
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
27
27
  }
28
28
 
29
29
  .time-input-field:hover:not(:disabled) {
30
- border-color: var(--color-on-surface-variant);
30
+ background-color: var(--color-surface-container);
31
31
  }
32
32
 
33
33
  .time-input-field:focus {
34
- border-color: var(--color-primary);
35
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
34
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
36
35
  }
37
36
 
38
37
  .time-input-field:disabled {
@@ -61,7 +60,7 @@
61
60
  gap: 0.125rem;
62
61
  padding: 0.75rem 1rem;
63
62
  background-color: var(--color-surface);
64
- border: 1px solid var(--color-outline);
63
+ border: 1px solid currentColor;
65
64
  border-radius: 0.5rem;
66
65
  }
67
66
 
@@ -154,37 +153,87 @@
154
153
 
155
154
  .time-input-filled .time-input-field:focus,
156
155
  .time-input-filled .time-input-segments:focus-within {
157
- border-bottom-color: var(--color-primary);
156
+ border-bottom-color: currentColor;
158
157
  box-shadow: none;
159
158
  }
160
159
 
161
160
  /* Color Variants */
161
+ .time-input-primary .time-input-field,
162
+ .time-input-primary .time-input-segments {
163
+ color: var(--color-primary);
164
+ }
165
+
162
166
  .time-input-primary .time-input-field:focus {
163
- border-color: var(--color-primary);
164
167
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
165
168
  }
166
169
 
170
+ .time-input-secondary .time-input-field,
171
+ .time-input-secondary .time-input-segments {
172
+ color: var(--color-secondary);
173
+ }
174
+
167
175
  .time-input-secondary .time-input-field:focus {
168
- border-color: var(--color-secondary);
169
176
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
170
177
  }
171
178
 
179
+ .time-input-tertiary .time-input-field,
180
+ .time-input-tertiary .time-input-segments {
181
+ color: var(--color-tertiary);
182
+ }
183
+
172
184
  .time-input-tertiary .time-input-field:focus {
173
- border-color: var(--color-tertiary);
174
185
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
175
186
  }
176
187
 
177
- /* Error State */
188
+ .time-input-info .time-input-field,
189
+ .time-input-info .time-input-segments {
190
+ color: var(--color-info);
191
+ }
192
+
193
+ .time-input-info .time-input-field:focus {
194
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
195
+ }
196
+
197
+ .time-input-success .time-input-field,
198
+ .time-input-success .time-input-segments {
199
+ color: var(--color-success);
200
+ }
201
+
202
+ .time-input-success .time-input-field:focus {
203
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
204
+ }
205
+
206
+ .time-input-warning .time-input-field,
207
+ .time-input-warning .time-input-segments {
208
+ color: var(--color-warning);
209
+ }
210
+
211
+ .time-input-warning .time-input-field:focus {
212
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
213
+ }
214
+
178
215
  .time-input-error .time-input-field,
179
216
  .time-input-error .time-input-segments {
180
- border-color: var(--color-error);
217
+ color: var(--color-error);
181
218
  }
182
219
 
183
220
  .time-input-error .time-input-field:focus {
184
- border-color: var(--color-error);
185
221
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
186
222
  }
187
223
 
224
+ /* Ghost Variant */
225
+ .time-input-ghost .time-input-field,
226
+ .time-input-ghost .time-input-segments {
227
+ background-color: transparent;
228
+ border-color: transparent;
229
+ }
230
+
231
+ .time-input-ghost .time-input-field:focus {
232
+ background-color: var(--color-surface-container);
233
+ border-color: transparent;
234
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
235
+ }
236
+
188
237
  /* Time Picker Dropdown */
189
238
  .time-picker-dropdown {
190
239
  position: absolute;
@@ -148,8 +148,8 @@
148
148
  }
149
149
 
150
150
  .toast-close:focus-visible {
151
- outline: 2px solid var(--color-primary);
152
- outline-offset: 2px;
151
+ outline: none;
152
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
153
153
  }
154
154
 
155
155
  /* Toast Actions */
@@ -192,6 +192,30 @@
192
192
  color: var(--color-error);
193
193
  }
194
194
 
195
+ .toast-primary {
196
+ border-color: var(--color-primary);
197
+ }
198
+
199
+ .toast-primary .toast-icon {
200
+ color: var(--color-primary);
201
+ }
202
+
203
+ .toast-secondary {
204
+ border-color: var(--color-secondary);
205
+ }
206
+
207
+ .toast-secondary .toast-icon {
208
+ color: var(--color-secondary);
209
+ }
210
+
211
+ .toast-tertiary {
212
+ border-color: var(--color-tertiary);
213
+ }
214
+
215
+ .toast-tertiary .toast-icon {
216
+ color: var(--color-tertiary);
217
+ }
218
+
195
219
  /* Filled Variants */
196
220
  .toast-filled.toast-info {
197
221
  background-color: var(--color-info-container);
@@ -217,13 +241,58 @@
217
241
  color: var(--color-on-error-container);
218
242
  }
219
243
 
244
+ .toast-filled.toast-primary {
245
+ background-color: var(--color-primary-container);
246
+ border-color: transparent;
247
+ color: var(--color-on-primary-container);
248
+ }
249
+
250
+ .toast-filled.toast-secondary {
251
+ background-color: var(--color-secondary-container);
252
+ border-color: transparent;
253
+ color: var(--color-on-secondary-container);
254
+ }
255
+
256
+ .toast-filled.toast-tertiary {
257
+ background-color: var(--color-tertiary-container);
258
+ border-color: transparent;
259
+ color: var(--color-on-tertiary-container);
260
+ }
261
+
262
+ /* Filled variant sub-element color inheritance fix.
263
+ .toast-title and .toast-message have explicit color rules that would otherwise
264
+ override the filled variant's inherited on-container color. */
265
+ .toast-filled .toast-title,
266
+ .toast-filled .toast-message {
267
+ color: inherit;
268
+ }
269
+
270
+ /* Ghost Variant */
271
+ .toast-ghost {
272
+ background-color: transparent;
273
+ border-color: transparent;
274
+ }
275
+
276
+ .toast-ghost.toast-primary { color: var(--color-primary); }
277
+ .toast-ghost.toast-secondary { color: var(--color-secondary); }
278
+ .toast-ghost.toast-tertiary { color: var(--color-tertiary); }
279
+ .toast-ghost.toast-info { color: var(--color-info); }
280
+ .toast-ghost.toast-success { color: var(--color-success); }
281
+ .toast-ghost.toast-warning { color: var(--color-warning); }
282
+ .toast-ghost.toast-error { color: var(--color-error); }
283
+
284
+ .toast-ghost .toast-title,
285
+ .toast-ghost .toast-message {
286
+ color: inherit;
287
+ }
288
+
220
289
  /* Progress Bar (for auto-dismiss) */
221
290
  .toast-progress {
222
291
  position: absolute;
223
292
  bottom: 0;
224
293
  left: 0;
225
294
  height: 3px;
226
- background-color: var(--color-primary);
295
+ background-color: currentColor;
227
296
  border-radius: 0 0 0.75rem 0.75rem;
228
297
  animation: toast-progress linear forwards;
229
298
  }