@duskmoon-dev/core 1.12.4 → 1.14.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 (66) 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/divider.css +196 -121
  13. package/dist/components/file-upload.css +68 -8
  14. package/dist/components/form.css +2 -1
  15. package/dist/components/index.css +1835 -586
  16. package/dist/components/input.css +21 -67
  17. package/dist/components/multi-select.css +59 -9
  18. package/dist/components/navigation.css +1 -1
  19. package/dist/components/otp-input.css +48 -16
  20. package/dist/components/pin-input.css +50 -13
  21. package/dist/components/radio.css +12 -2
  22. package/dist/components/rating.css +35 -3
  23. package/dist/components/segment-control.css +23 -2
  24. package/dist/components/select.css +21 -37
  25. package/dist/components/slider.css +130 -6
  26. package/dist/components/switch.css +27 -4
  27. package/dist/components/textarea.css +21 -96
  28. package/dist/components/time-input.css +61 -12
  29. package/dist/components/toast.css +72 -3
  30. package/dist/components/toggle.css +63 -6
  31. package/dist/components/tooltip.css +84 -0
  32. package/dist/components/tree-select.css +60 -11
  33. package/dist/esm/components/alert.js +64 -2
  34. package/dist/esm/components/appbar.js +119 -21
  35. package/dist/esm/components/autocomplete.js +63 -3
  36. package/dist/esm/components/avatar.js +22 -2
  37. package/dist/esm/components/button.js +101 -49
  38. package/dist/esm/components/card.js +38 -2
  39. package/dist/esm/components/cascader.js +59 -9
  40. package/dist/esm/components/checkbox.js +15 -5
  41. package/dist/esm/components/chip.js +122 -2
  42. package/dist/esm/components/collapse.js +32 -0
  43. package/dist/esm/components/datepicker.js +79 -6
  44. package/dist/esm/components/divider.js +196 -121
  45. package/dist/esm/components/file-upload.js +68 -8
  46. package/dist/esm/components/form.js +2 -1
  47. package/dist/esm/components/input.js +21 -67
  48. package/dist/esm/components/multi-select.js +59 -9
  49. package/dist/esm/components/navigation.js +1 -1
  50. package/dist/esm/components/otp-input.js +48 -16
  51. package/dist/esm/components/pin-input.js +50 -13
  52. package/dist/esm/components/radio.js +12 -2
  53. package/dist/esm/components/rating.js +35 -3
  54. package/dist/esm/components/segment-control.js +23 -2
  55. package/dist/esm/components/select.js +21 -37
  56. package/dist/esm/components/slider.js +130 -6
  57. package/dist/esm/components/switch.js +27 -4
  58. package/dist/esm/components/textarea.js +21 -96
  59. package/dist/esm/components/time-input.js +61 -12
  60. package/dist/esm/components/toast.js +72 -3
  61. package/dist/esm/components/toggle.js +63 -6
  62. package/dist/esm/components/tooltip.js +84 -0
  63. package/dist/esm/components/tree-select.js +60 -11
  64. package/dist/index.css +1835 -586
  65. package/dist/index.min.css +1 -1
  66. package/package.json +1 -1
@@ -103,8 +103,8 @@ export const css = `/**
103
103
  }
104
104
 
105
105
  .appbar-nav:focus-visible {
106
- outline: 2px solid var(--color-primary);
107
- outline-offset: 2px;
106
+ outline: none;
107
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
108
108
  }
109
109
 
110
110
  /* App Bar Title */
@@ -166,8 +166,8 @@ export const css = `/**
166
166
  }
167
167
 
168
168
  .appbar-action:focus-visible {
169
- outline: 2px solid var(--color-primary);
170
- outline-offset: 2px;
169
+ outline: none;
170
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
171
171
  }
172
172
 
173
173
  /* App Bar Logo/Brand */
@@ -282,8 +282,8 @@ export const css = `/**
282
282
  }
283
283
 
284
284
  .appbar-back:focus-visible {
285
- outline: 2px solid var(--color-primary);
286
- outline-offset: 2px;
285
+ outline: none;
286
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
287
287
  }
288
288
 
289
289
  /* Search Input (direct on element) */
@@ -314,64 +314,162 @@ export const css = `/**
314
314
  /* Color Variants */
315
315
  .appbar-primary {
316
316
  background-color: var(--color-primary);
317
- color: var(--color-on-primary);
317
+ color: var(--color-primary-content);
318
318
  }
319
319
 
320
320
  .appbar-primary .appbar-nav,
321
- .appbar-primary .appbar-action {
322
- color: var(--color-on-primary);
321
+ .appbar-primary .appbar-action,
322
+ .appbar-primary .appbar-back {
323
+ color: var(--color-primary-content);
323
324
  }
324
325
 
325
326
  .appbar-primary .appbar-nav:hover,
326
- .appbar-primary .appbar-action:hover {
327
+ .appbar-primary .appbar-action:hover,
328
+ .appbar-primary .appbar-back:hover {
327
329
  background-color: var(--color-primary-container);
328
330
  color: var(--color-on-primary-container);
329
331
  }
330
332
 
331
333
  .appbar-primary .appbar-subtitle {
332
- color: var(--color-on-primary);
334
+ color: var(--color-primary-content);
333
335
  opacity: 0.8;
334
336
  }
335
337
 
336
338
  .appbar-secondary {
337
339
  background-color: var(--color-secondary);
338
- color: var(--color-on-secondary);
340
+ color: var(--color-secondary-content);
339
341
  }
340
342
 
341
343
  .appbar-secondary .appbar-nav,
342
- .appbar-secondary .appbar-action {
343
- color: var(--color-on-secondary);
344
+ .appbar-secondary .appbar-action,
345
+ .appbar-secondary .appbar-back {
346
+ color: var(--color-secondary-content);
344
347
  }
345
348
 
346
349
  .appbar-secondary .appbar-nav:hover,
347
- .appbar-secondary .appbar-action:hover {
350
+ .appbar-secondary .appbar-action:hover,
351
+ .appbar-secondary .appbar-back:hover {
348
352
  background-color: var(--color-secondary-container);
349
353
  color: var(--color-on-secondary-container);
350
354
  }
351
355
 
352
356
  .appbar-secondary .appbar-subtitle {
353
- color: var(--color-on-secondary);
357
+ color: var(--color-secondary-content);
354
358
  opacity: 0.8;
355
359
  }
356
360
 
357
361
  .appbar-tertiary {
358
362
  background-color: var(--color-tertiary);
359
- color: var(--color-on-tertiary);
363
+ color: var(--color-tertiary-content);
360
364
  }
361
365
 
362
366
  .appbar-tertiary .appbar-nav,
363
- .appbar-tertiary .appbar-action {
364
- color: var(--color-on-tertiary);
367
+ .appbar-tertiary .appbar-action,
368
+ .appbar-tertiary .appbar-back {
369
+ color: var(--color-tertiary-content);
365
370
  }
366
371
 
367
372
  .appbar-tertiary .appbar-nav:hover,
368
- .appbar-tertiary .appbar-action:hover {
373
+ .appbar-tertiary .appbar-action:hover,
374
+ .appbar-tertiary .appbar-back:hover {
369
375
  background-color: var(--color-tertiary-container);
370
376
  color: var(--color-on-tertiary-container);
371
377
  }
372
378
 
373
379
  .appbar-tertiary .appbar-subtitle {
374
- color: var(--color-on-tertiary);
380
+ color: var(--color-tertiary-content);
381
+ opacity: 0.8;
382
+ }
383
+
384
+ .appbar-info {
385
+ background-color: var(--color-info);
386
+ color: var(--color-info-content);
387
+ }
388
+
389
+ .appbar-info .appbar-nav,
390
+ .appbar-info .appbar-action,
391
+ .appbar-info .appbar-back {
392
+ color: var(--color-info-content);
393
+ }
394
+
395
+ .appbar-info .appbar-nav:hover,
396
+ .appbar-info .appbar-action:hover,
397
+ .appbar-info .appbar-back:hover {
398
+ background-color: var(--color-info-container);
399
+ color: var(--color-on-info-container);
400
+ }
401
+
402
+ .appbar-info .appbar-subtitle {
403
+ color: var(--color-info-content);
404
+ opacity: 0.8;
405
+ }
406
+
407
+ .appbar-success {
408
+ background-color: var(--color-success);
409
+ color: var(--color-success-content);
410
+ }
411
+
412
+ .appbar-success .appbar-nav,
413
+ .appbar-success .appbar-action,
414
+ .appbar-success .appbar-back {
415
+ color: var(--color-success-content);
416
+ }
417
+
418
+ .appbar-success .appbar-nav:hover,
419
+ .appbar-success .appbar-action:hover,
420
+ .appbar-success .appbar-back:hover {
421
+ background-color: var(--color-success-container);
422
+ color: var(--color-on-success-container);
423
+ }
424
+
425
+ .appbar-success .appbar-subtitle {
426
+ color: var(--color-success-content);
427
+ opacity: 0.8;
428
+ }
429
+
430
+ .appbar-warning {
431
+ background-color: var(--color-warning);
432
+ color: var(--color-warning-content);
433
+ }
434
+
435
+ .appbar-warning .appbar-nav,
436
+ .appbar-warning .appbar-action,
437
+ .appbar-warning .appbar-back {
438
+ color: var(--color-warning-content);
439
+ }
440
+
441
+ .appbar-warning .appbar-nav:hover,
442
+ .appbar-warning .appbar-action:hover,
443
+ .appbar-warning .appbar-back:hover {
444
+ background-color: var(--color-warning-container);
445
+ color: var(--color-on-warning-container);
446
+ }
447
+
448
+ .appbar-warning .appbar-subtitle {
449
+ color: var(--color-warning-content);
450
+ opacity: 0.8;
451
+ }
452
+
453
+ .appbar-error {
454
+ background-color: var(--color-error);
455
+ color: var(--color-error-content);
456
+ }
457
+
458
+ .appbar-error .appbar-nav,
459
+ .appbar-error .appbar-action,
460
+ .appbar-error .appbar-back {
461
+ color: var(--color-error-content);
462
+ }
463
+
464
+ .appbar-error .appbar-nav:hover,
465
+ .appbar-error .appbar-action:hover,
466
+ .appbar-error .appbar-back:hover {
467
+ background-color: var(--color-error-container);
468
+ color: var(--color-on-error-container);
469
+ }
470
+
471
+ .appbar-error .appbar-subtitle {
472
+ color: var(--color-error-content);
375
473
  opacity: 0.8;
376
474
  }
377
475
 
@@ -20,15 +20,14 @@ export const css = `/**
20
20
  line-height: 1.5;
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
  transition: border-color 150ms ease-in-out, box-shadow 150ms ease-in-out;
26
26
  }
27
27
 
28
28
  .autocomplete-input:focus {
29
29
  outline: none;
30
- border-color: var(--color-primary);
31
- box-shadow: 0 0 0 3px var(--color-primary-container);
30
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
32
31
  }
33
32
 
34
33
  .autocomplete-input:disabled {
@@ -250,6 +249,67 @@ export const css = `/**
250
249
  outline: none;
251
250
  }
252
251
 
252
+ /* Color Variants */
253
+ .autocomplete-primary .autocomplete-input {
254
+ color: var(--color-primary);
255
+ }
256
+ .autocomplete-primary .autocomplete-input:focus {
257
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-primary) 10%, transparent);
258
+ }
259
+
260
+ .autocomplete-secondary .autocomplete-input {
261
+ color: var(--color-secondary);
262
+ }
263
+ .autocomplete-secondary .autocomplete-input:focus {
264
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-secondary) 10%, transparent);
265
+ }
266
+
267
+ .autocomplete-tertiary .autocomplete-input {
268
+ color: var(--color-tertiary);
269
+ }
270
+ .autocomplete-tertiary .autocomplete-input:focus {
271
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-tertiary) 10%, transparent);
272
+ }
273
+
274
+ .autocomplete-info .autocomplete-input {
275
+ color: var(--color-info);
276
+ }
277
+ .autocomplete-info .autocomplete-input:focus {
278
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-info) 10%, transparent);
279
+ }
280
+
281
+ .autocomplete-success .autocomplete-input {
282
+ color: var(--color-success);
283
+ }
284
+ .autocomplete-success .autocomplete-input:focus {
285
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 10%, transparent);
286
+ }
287
+
288
+ .autocomplete-warning .autocomplete-input {
289
+ color: var(--color-warning);
290
+ }
291
+ .autocomplete-warning .autocomplete-input:focus {
292
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
293
+ }
294
+
295
+ .autocomplete-error .autocomplete-input {
296
+ color: var(--color-error);
297
+ }
298
+ .autocomplete-error .autocomplete-input:focus {
299
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
300
+ }
301
+
302
+ /* Ghost Variant */
303
+ .autocomplete-ghost .autocomplete-input {
304
+ background-color: transparent;
305
+ border-color: transparent;
306
+ }
307
+ .autocomplete-ghost .autocomplete-input:focus {
308
+ background-color: var(--color-surface-container);
309
+ border-color: transparent;
310
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
311
+ }
312
+
253
313
  /* Size Variants */
254
314
  .autocomplete-sm .autocomplete-input {
255
315
  padding: 0.5rem 0.75rem;
@@ -94,6 +94,26 @@ export const css = `/**
94
94
  color: var(--color-tertiary-content);
95
95
  }
96
96
 
97
+ .avatar-info {
98
+ background-color: var(--color-info);
99
+ color: var(--color-info-content);
100
+ }
101
+
102
+ .avatar-success {
103
+ background-color: var(--color-success);
104
+ color: var(--color-success-content);
105
+ }
106
+
107
+ .avatar-warning {
108
+ background-color: var(--color-warning);
109
+ color: var(--color-warning-content);
110
+ }
111
+
112
+ .avatar-error {
113
+ background-color: var(--color-error);
114
+ color: var(--color-error-content);
115
+ }
116
+
97
117
  /* Ring */
98
118
  .avatar-ring {
99
119
  outline: 2px solid var(--color-primary);
@@ -162,8 +182,8 @@ export const css = `/**
162
182
 
163
183
  /* Focus State for Interactive Avatars */
164
184
  .avatar:focus-visible {
165
- outline: 2px solid var(--color-primary);
166
- outline-offset: 2px;
185
+ outline: none;
186
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
167
187
  }
168
188
  }
169
189
  `;
@@ -45,8 +45,8 @@ export const css = `/**
45
45
  }
46
46
 
47
47
  .btn:focus-visible {
48
- outline: 2px solid var(--color-primary);
49
- outline-offset: 2px;
48
+ outline: none;
49
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
50
50
  }
51
51
 
52
52
  .btn:disabled {
@@ -68,10 +68,6 @@ export const css = `/**
68
68
  filter: none;
69
69
  }
70
70
 
71
- .btn-primary:focus-visible {
72
- outline-color: color-mix(in oklch, var(--color-primary), black 10%);
73
- }
74
-
75
71
  /* Secondary Button */
76
72
  .btn-secondary {
77
73
  --btn-text-color: var(--color-secondary-content);
@@ -85,10 +81,6 @@ export const css = `/**
85
81
  filter: none;
86
82
  }
87
83
 
88
- .btn-secondary:focus-visible {
89
- outline-color: color-mix(in oklch, var(--color-secondary), black 10%);
90
- }
91
-
92
84
  /* Tertiary Button */
93
85
  .btn-tertiary {
94
86
  --btn-text-color: var(--color-tertiary-content);
@@ -102,92 +94,102 @@ export const css = `/**
102
94
  filter: none;
103
95
  }
104
96
 
105
- .btn-tertiary:focus-visible {
106
- outline-color: color-mix(in oklch, var(--color-tertiary), black 10%);
107
- }
108
-
109
- /* Outline Variant */
110
- .btn-outline {
97
+ /* Outline / Outlined Variant (.btn-outlined is an alias) */
98
+ .btn-outline,
99
+ .btn-outlined {
111
100
  --btn-text-color: var(--color-on-surface);
112
101
  background-color: transparent;
113
102
  border: 1px solid var(--color-outline);
114
103
  }
115
104
 
116
- .btn-outline:hover {
105
+ .btn-outline:hover,
106
+ .btn-outlined:hover {
117
107
  background-color: var(--color-surface-container);
118
108
  filter: none;
119
109
  }
120
110
 
121
- .btn-outline.btn-primary {
111
+ .btn-outline.btn-primary,
112
+ .btn-outlined.btn-primary {
122
113
  --btn-text-color: var(--color-primary);
123
114
  border-color: var(--color-primary);
124
115
  }
125
116
 
126
- .btn-outline.btn-primary:hover {
117
+ .btn-outline.btn-primary:hover,
118
+ .btn-outlined.btn-primary:hover {
127
119
  --btn-text-color: var(--color-primary-content);
128
120
  background-color: var(--color-primary);
129
121
  }
130
122
 
131
- .btn-outline.btn-secondary {
123
+ .btn-outline.btn-secondary,
124
+ .btn-outlined.btn-secondary {
132
125
  --btn-text-color: var(--color-secondary);
133
126
  border-color: var(--color-secondary);
134
127
  }
135
128
 
136
- .btn-outline.btn-secondary:hover {
129
+ .btn-outline.btn-secondary:hover,
130
+ .btn-outlined.btn-secondary:hover {
137
131
  --btn-text-color: var(--color-secondary-content);
138
132
  background-color: var(--color-secondary);
139
133
  }
140
134
 
141
- .btn-outline.btn-tertiary {
135
+ .btn-outline.btn-tertiary,
136
+ .btn-outlined.btn-tertiary {
142
137
  --btn-text-color: var(--color-tertiary);
143
138
  border-color: var(--color-tertiary);
144
139
  }
145
140
 
146
- .btn-outline.btn-tertiary:hover {
141
+ .btn-outline.btn-tertiary:hover,
142
+ .btn-outlined.btn-tertiary:hover {
147
143
  --btn-text-color: var(--color-tertiary-content);
148
144
  background-color: var(--color-tertiary);
149
145
  }
150
146
 
151
- /* Outlined Variant (alias for .btn-outline - documentation aligned) */
152
- .btn-outlined {
153
- --btn-text-color: var(--color-on-surface);
154
- background-color: transparent;
155
- border: 1px solid var(--color-outline);
147
+ .btn-outline.btn-info,
148
+ .btn-outlined.btn-info {
149
+ --btn-text-color: var(--color-info);
150
+ border-color: var(--color-info);
156
151
  }
157
152
 
158
- .btn-outlined:hover {
159
- background-color: var(--color-surface-container);
160
- filter: none;
153
+ .btn-outline.btn-info:hover,
154
+ .btn-outlined.btn-info:hover {
155
+ --btn-text-color: var(--color-info-content);
156
+ background-color: var(--color-info);
161
157
  }
162
158
 
163
- .btn-outlined.btn-primary {
164
- --btn-text-color: var(--color-primary);
165
- border-color: var(--color-primary);
159
+ .btn-outline.btn-success,
160
+ .btn-outlined.btn-success {
161
+ --btn-text-color: var(--color-success);
162
+ border-color: var(--color-success);
166
163
  }
167
164
 
168
- .btn-outlined.btn-primary:hover {
169
- --btn-text-color: var(--color-primary-content);
170
- background-color: var(--color-primary);
165
+ .btn-outline.btn-success:hover,
166
+ .btn-outlined.btn-success:hover {
167
+ --btn-text-color: var(--color-success-content);
168
+ background-color: var(--color-success);
171
169
  }
172
170
 
173
- .btn-outlined.btn-secondary {
174
- --btn-text-color: var(--color-secondary);
175
- border-color: var(--color-secondary);
171
+ .btn-outline.btn-warning,
172
+ .btn-outlined.btn-warning {
173
+ --btn-text-color: var(--color-warning);
174
+ border-color: var(--color-warning);
176
175
  }
177
176
 
178
- .btn-outlined.btn-secondary:hover {
179
- --btn-text-color: var(--color-secondary-content);
180
- background-color: var(--color-secondary);
177
+ .btn-outline.btn-warning:hover,
178
+ .btn-outlined.btn-warning:hover {
179
+ --btn-text-color: var(--color-warning-content);
180
+ background-color: var(--color-warning);
181
181
  }
182
182
 
183
- .btn-outlined.btn-tertiary {
184
- --btn-text-color: var(--color-tertiary);
185
- border-color: var(--color-tertiary);
183
+ .btn-outline.btn-error,
184
+ .btn-outlined.btn-error {
185
+ --btn-text-color: var(--color-error);
186
+ border-color: var(--color-error);
186
187
  }
187
188
 
188
- .btn-outlined.btn-tertiary:hover {
189
- --btn-text-color: var(--color-tertiary-content);
190
- background-color: var(--color-tertiary);
189
+ .btn-outline.btn-error:hover,
190
+ .btn-outlined.btn-error:hover {
191
+ --btn-text-color: var(--color-error-content);
192
+ background-color: var(--color-error);
191
193
  }
192
194
 
193
195
  /* Ghost Variant */
@@ -229,6 +231,31 @@ export const css = `/**
229
231
  background-color: var(--color-tertiary-container);
230
232
  }
231
233
 
234
+ .btn-ghost.btn-info { --btn-text-color: var(--color-info); }
235
+ .btn-ghost.btn-success { --btn-text-color: var(--color-success); }
236
+ .btn-ghost.btn-warning { --btn-text-color: var(--color-warning); }
237
+ .btn-ghost.btn-error { --btn-text-color: var(--color-error); }
238
+
239
+ .btn-ghost.btn-info:hover {
240
+ --btn-text-color: var(--color-on-info-container);
241
+ background-color: var(--color-info-container);
242
+ }
243
+
244
+ .btn-ghost.btn-success:hover {
245
+ --btn-text-color: var(--color-on-success-container);
246
+ background-color: var(--color-success-container);
247
+ }
248
+
249
+ .btn-ghost.btn-warning:hover {
250
+ --btn-text-color: var(--color-on-warning-container);
251
+ background-color: var(--color-warning-container);
252
+ }
253
+
254
+ .btn-ghost.btn-error:hover {
255
+ --btn-text-color: var(--color-on-error-container);
256
+ background-color: var(--color-error-container);
257
+ }
258
+
232
259
  /* Text Variant (alias for .btn-ghost - documentation aligned) */
233
260
  .btn-text {
234
261
  --btn-text-color: var(--color-on-surface);
@@ -268,6 +295,31 @@ export const css = `/**
268
295
  background-color: var(--color-tertiary-container);
269
296
  }
270
297
 
298
+ .btn-text.btn-info { --btn-text-color: var(--color-info); }
299
+ .btn-text.btn-success { --btn-text-color: var(--color-success); }
300
+ .btn-text.btn-warning { --btn-text-color: var(--color-warning); }
301
+ .btn-text.btn-error { --btn-text-color: var(--color-error); }
302
+
303
+ .btn-text.btn-info:hover {
304
+ --btn-text-color: var(--color-on-info-container);
305
+ background-color: var(--color-info-container);
306
+ }
307
+
308
+ .btn-text.btn-success:hover {
309
+ --btn-text-color: var(--color-on-success-container);
310
+ background-color: var(--color-success-container);
311
+ }
312
+
313
+ .btn-text.btn-warning:hover {
314
+ --btn-text-color: var(--color-on-warning-container);
315
+ background-color: var(--color-warning-container);
316
+ }
317
+
318
+ .btn-text.btn-error:hover {
319
+ --btn-text-color: var(--color-on-error-container);
320
+ background-color: var(--color-error-container);
321
+ }
322
+
271
323
  /* Tonal Variant - uses container colors for subtle appearance */
272
324
  .btn-tonal {
273
325
  --btn-text-color: var(--color-on-primary-container);
@@ -163,6 +163,42 @@ export const css = `/**
163
163
  color: var(--color-on-tertiary-container);
164
164
  }
165
165
 
166
+ .card-info {
167
+ background-color: var(--color-info-container);
168
+ color: var(--color-on-info-container);
169
+ }
170
+
171
+ .card-info .card-title {
172
+ color: var(--color-on-info-container);
173
+ }
174
+
175
+ .card-success {
176
+ background-color: var(--color-success-container);
177
+ color: var(--color-on-success-container);
178
+ }
179
+
180
+ .card-success .card-title {
181
+ color: var(--color-on-success-container);
182
+ }
183
+
184
+ .card-warning {
185
+ background-color: var(--color-warning-container);
186
+ color: var(--color-on-warning-container);
187
+ }
188
+
189
+ .card-warning .card-title {
190
+ color: var(--color-on-warning-container);
191
+ }
192
+
193
+ .card-error {
194
+ background-color: var(--color-error-container);
195
+ color: var(--color-on-error-container);
196
+ }
197
+
198
+ .card-error .card-title {
199
+ color: var(--color-on-error-container);
200
+ }
201
+
166
202
  /* Glass Effect */
167
203
  .card-glass {
168
204
  background-color: rgb(255 255 255 / 0.1);
@@ -190,8 +226,8 @@ export const css = `/**
190
226
  }
191
227
 
192
228
  .card-interactive:focus-visible {
193
- outline: 2px solid var(--color-primary);
194
- outline-offset: 2px;
229
+ outline: none;
230
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
195
231
  }
196
232
 
197
233
  /* Full Image Card */