@duskmoon-dev/core 1.16.1 → 1.17.1

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 (77) hide show
  1. package/dist/components/alert.css +51 -0
  2. package/dist/components/appbar.css +69 -0
  3. package/dist/components/autocomplete.css +21 -0
  4. package/dist/components/avatar.css +15 -0
  5. package/dist/components/badge.css +45 -0
  6. package/dist/components/button.css +123 -0
  7. package/dist/components/card.css +27 -0
  8. package/dist/components/cascader.css +21 -0
  9. package/dist/components/chat.css +436 -0
  10. package/dist/components/checkbox.css +27 -0
  11. package/dist/components/chip.css +75 -0
  12. package/dist/components/circle-menu.css +24 -0
  13. package/dist/components/collapse.css +31 -1
  14. package/dist/components/datepicker.css +42 -0
  15. package/dist/components/divider.css +15 -0
  16. package/dist/components/file-upload.css +21 -0
  17. package/dist/components/form.css +83 -0
  18. package/dist/components/index.css +1677 -75
  19. package/dist/components/input.css +6 -0
  20. package/dist/components/multi-select.css +21 -0
  21. package/dist/components/navigation.css +50 -0
  22. package/dist/components/otp-input.css +24 -0
  23. package/dist/components/pin-input.css +24 -0
  24. package/dist/components/progress.css +12 -0
  25. package/dist/components/radio.css +12 -0
  26. package/dist/components/rating.css +18 -0
  27. package/dist/components/segment-control.css +15 -0
  28. package/dist/components/select.css +6 -0
  29. package/dist/components/slider.css +66 -0
  30. package/dist/components/snackbar.css +15 -0
  31. package/dist/components/switch.css +18 -0
  32. package/dist/components/textarea.css +6 -0
  33. package/dist/components/time-input.css +27 -0
  34. package/dist/components/toast.css +45 -0
  35. package/dist/components/toggle.css +27 -0
  36. package/dist/components/tooltip.css +63 -0
  37. package/dist/components/tree-select.css +21 -0
  38. package/dist/esm/components/alert.js +51 -0
  39. package/dist/esm/components/appbar.js +69 -0
  40. package/dist/esm/components/autocomplete.js +21 -0
  41. package/dist/esm/components/avatar.js +15 -0
  42. package/dist/esm/components/badge.js +45 -0
  43. package/dist/esm/components/button.js +123 -0
  44. package/dist/esm/components/card.js +27 -0
  45. package/dist/esm/components/cascader.js +21 -0
  46. package/dist/esm/components/chat.js +443 -0
  47. package/dist/esm/components/checkbox.js +27 -0
  48. package/dist/esm/components/chip.js +75 -0
  49. package/dist/esm/components/circle-menu.js +24 -0
  50. package/dist/esm/components/collapse.js +31 -1
  51. package/dist/esm/components/datepicker.js +42 -0
  52. package/dist/esm/components/divider.js +15 -0
  53. package/dist/esm/components/file-upload.js +21 -0
  54. package/dist/esm/components/form.js +83 -0
  55. package/dist/esm/components/input.js +6 -0
  56. package/dist/esm/components/multi-select.js +21 -0
  57. package/dist/esm/components/navigation.js +50 -0
  58. package/dist/esm/components/otp-input.js +24 -0
  59. package/dist/esm/components/pin-input.js +24 -0
  60. package/dist/esm/components/progress.js +12 -0
  61. package/dist/esm/components/radio.js +12 -0
  62. package/dist/esm/components/rating.js +18 -0
  63. package/dist/esm/components/segment-control.js +15 -0
  64. package/dist/esm/components/select.js +6 -0
  65. package/dist/esm/components/slider.js +66 -0
  66. package/dist/esm/components/snackbar.js +15 -0
  67. package/dist/esm/components/switch.js +18 -0
  68. package/dist/esm/components/textarea.js +6 -0
  69. package/dist/esm/components/time-input.js +27 -0
  70. package/dist/esm/components/toast.js +45 -0
  71. package/dist/esm/components/toggle.js +27 -0
  72. package/dist/esm/components/tooltip.js +63 -0
  73. package/dist/esm/components/tree-select.js +21 -0
  74. package/dist/index.css +1679 -77
  75. package/dist/index.min.css +1 -1
  76. package/dist/themes/generated/sunshine.css +1 -1
  77. package/package.json +6 -1
package/dist/index.css CHANGED
@@ -486,7 +486,7 @@ html {
486
486
  --theme-pair: "moonlight";
487
487
  --theme-description: "Warm amber/coral";
488
488
  --color-primary: oklch(72% 0.17 75);
489
- --color-primary-content: oklch(100% 0 0);
489
+ --color-primary-content: oklch(25% 0.03 95.91);
490
490
  --color-primary-container: oklch(95% 0.035 95.91);
491
491
  --color-on-primary-container: oklch(25% 0.03 95.91);
492
492
  --color-secondary: oklch(62% 0.19 20);
@@ -651,7 +651,7 @@ html {
651
651
  --theme-pair: "moonlight";
652
652
  --theme-description: "Warm amber/coral";
653
653
  --color-primary: oklch(72% 0.17 75);
654
- --color-primary-content: oklch(100% 0 0);
654
+ --color-primary-content: oklch(25% 0.03 95.91);
655
655
  --color-primary-container: oklch(95% 0.035 95.91);
656
656
  --color-on-primary-container: oklch(25% 0.03 95.91);
657
657
  --color-secondary: oklch(62% 0.19 20);
@@ -1119,6 +1119,42 @@ html {
1119
1119
  filter: none;
1120
1120
  }
1121
1121
 
1122
+ .btn-accent {
1123
+ --btn-text-color: var(--color-accent-content);
1124
+ background-color: var(--color-accent);
1125
+ border-color: var(--color-accent);
1126
+ }
1127
+
1128
+ .btn-accent:hover {
1129
+ background-color: color-mix(in oklch, var(--color-accent), black 10%);
1130
+ border-color: color-mix(in oklch, var(--color-accent), black 10%);
1131
+ filter: none;
1132
+ }
1133
+
1134
+ .btn-neutral {
1135
+ --btn-text-color: var(--color-neutral-content);
1136
+ background-color: var(--color-neutral);
1137
+ border-color: var(--color-neutral);
1138
+ }
1139
+
1140
+ .btn-neutral:hover {
1141
+ background-color: color-mix(in oklch, var(--color-neutral), black 10%);
1142
+ border-color: color-mix(in oklch, var(--color-neutral), black 10%);
1143
+ filter: none;
1144
+ }
1145
+
1146
+ .btn-base {
1147
+ --btn-text-color: var(--color-base-content);
1148
+ background-color: var(--color-base-100);
1149
+ border-color: var(--color-base-100);
1150
+ }
1151
+
1152
+ .btn-base:hover {
1153
+ background-color: var(--color-base-200);
1154
+ border-color: var(--color-base-200);
1155
+ filter: none;
1156
+ }
1157
+
1122
1158
  /* Outline / Outlined Variant (.btn-outlined is an alias) */
1123
1159
  .btn-outline,
1124
1160
  .btn-outlined {
@@ -1169,6 +1205,42 @@ html {
1169
1205
  background-color: var(--color-tertiary);
1170
1206
  }
1171
1207
 
1208
+ .btn-outline.btn-accent,
1209
+ .btn-outlined.btn-accent {
1210
+ --btn-text-color: var(--color-accent);
1211
+ border-color: currentColor;
1212
+ }
1213
+
1214
+ .btn-outline.btn-accent:hover,
1215
+ .btn-outlined.btn-accent:hover {
1216
+ --btn-text-color: var(--color-accent-content);
1217
+ background-color: var(--color-accent);
1218
+ }
1219
+
1220
+ .btn-outline.btn-neutral,
1221
+ .btn-outlined.btn-neutral {
1222
+ --btn-text-color: var(--color-neutral);
1223
+ border-color: currentColor;
1224
+ }
1225
+
1226
+ .btn-outline.btn-neutral:hover,
1227
+ .btn-outlined.btn-neutral:hover {
1228
+ --btn-text-color: var(--color-neutral-content);
1229
+ background-color: var(--color-neutral);
1230
+ }
1231
+
1232
+ .btn-outline.btn-base,
1233
+ .btn-outlined.btn-base {
1234
+ --btn-text-color: var(--color-base-content);
1235
+ border-color: currentColor;
1236
+ }
1237
+
1238
+ .btn-outline.btn-base:hover,
1239
+ .btn-outlined.btn-base:hover {
1240
+ --btn-text-color: var(--color-base-content);
1241
+ background-color: var(--color-base-100);
1242
+ }
1243
+
1172
1244
  .btn-outline.btn-info,
1173
1245
  .btn-outlined.btn-info {
1174
1246
  --btn-text-color: var(--color-info);
@@ -1260,6 +1332,24 @@ html {
1260
1332
  .btn-ghost.btn-success { --btn-text-color: var(--color-success); }
1261
1333
  .btn-ghost.btn-warning { --btn-text-color: var(--color-warning); }
1262
1334
  .btn-ghost.btn-error { --btn-text-color: var(--color-error); }
1335
+ .btn-ghost.btn-accent { --btn-text-color: var(--color-accent); }
1336
+ .btn-ghost.btn-neutral { --btn-text-color: var(--color-neutral); }
1337
+ .btn-ghost.btn-base { --btn-text-color: var(--color-base-content); }
1338
+
1339
+ .btn-ghost.btn-accent:hover {
1340
+ --btn-text-color: var(--color-accent);
1341
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
1342
+ }
1343
+
1344
+ .btn-ghost.btn-neutral:hover {
1345
+ --btn-text-color: var(--color-neutral);
1346
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
1347
+ }
1348
+
1349
+ .btn-ghost.btn-base:hover {
1350
+ --btn-text-color: var(--color-base-content);
1351
+ background-color: var(--color-base-200);
1352
+ }
1263
1353
 
1264
1354
  .btn-ghost.btn-info:hover {
1265
1355
  --btn-text-color: var(--color-on-info-container);
@@ -1324,6 +1414,24 @@ html {
1324
1414
  .btn-text.btn-success { --btn-text-color: var(--color-success); }
1325
1415
  .btn-text.btn-warning { --btn-text-color: var(--color-warning); }
1326
1416
  .btn-text.btn-error { --btn-text-color: var(--color-error); }
1417
+ .btn-text.btn-accent { --btn-text-color: var(--color-accent); }
1418
+ .btn-text.btn-neutral { --btn-text-color: var(--color-neutral); }
1419
+ .btn-text.btn-base { --btn-text-color: var(--color-base-content); }
1420
+
1421
+ .btn-text.btn-accent:hover {
1422
+ --btn-text-color: var(--color-accent);
1423
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
1424
+ }
1425
+
1426
+ .btn-text.btn-neutral:hover {
1427
+ --btn-text-color: var(--color-neutral);
1428
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
1429
+ }
1430
+
1431
+ .btn-text.btn-base:hover {
1432
+ --btn-text-color: var(--color-base-content);
1433
+ background-color: var(--color-base-200);
1434
+ }
1327
1435
 
1328
1436
  .btn-text.btn-info:hover {
1329
1437
  --btn-text-color: var(--color-on-info-container);
@@ -1371,6 +1479,21 @@ html {
1371
1479
  background-color: var(--color-tertiary-container);
1372
1480
  }
1373
1481
 
1482
+ .btn-tonal.btn-accent {
1483
+ --btn-text-color: var(--color-on-surface);
1484
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
1485
+ }
1486
+
1487
+ .btn-tonal.btn-neutral {
1488
+ --btn-text-color: var(--color-on-surface);
1489
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
1490
+ }
1491
+
1492
+ .btn-tonal.btn-base {
1493
+ --btn-text-color: var(--color-base-content);
1494
+ background-color: var(--color-base-200);
1495
+ }
1496
+
1374
1497
  .btn-tonal.btn-info {
1375
1498
  --btn-text-color: var(--color-on-info-container);
1376
1499
  background-color: var(--color-info-container);
@@ -1754,6 +1877,33 @@ html {
1754
1877
  color: var(--color-on-error-container);
1755
1878
  }
1756
1879
 
1880
+ .card-accent {
1881
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
1882
+ color: var(--color-on-surface);
1883
+ }
1884
+
1885
+ .card-accent .card-title {
1886
+ color: var(--color-on-surface);
1887
+ }
1888
+
1889
+ .card-neutral {
1890
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
1891
+ color: var(--color-on-surface);
1892
+ }
1893
+
1894
+ .card-neutral .card-title {
1895
+ color: var(--color-on-surface);
1896
+ }
1897
+
1898
+ .card-base {
1899
+ background-color: var(--color-base-200);
1900
+ color: var(--color-base-content);
1901
+ }
1902
+
1903
+ .card-base .card-title {
1904
+ color: var(--color-base-content);
1905
+ }
1906
+
1757
1907
  /* Glass Effect */
1758
1908
  .card-glass {
1759
1909
  background-color: rgb(255 255 255 / 0.1);
@@ -1881,6 +2031,9 @@ html {
1881
2031
  .input-success { color: var(--color-success); }
1882
2032
  .input-warning { color: var(--color-warning); }
1883
2033
  .input-error { color: var(--color-error); }
2034
+ .input-accent { color: var(--color-accent); }
2035
+ .input-neutral { color: var(--color-neutral); }
2036
+ .input-base { color: var(--color-base-content); }
1884
2037
 
1885
2038
  /* Size Variants */
1886
2039
  .input-xs {
@@ -1939,6 +2092,9 @@ html {
1939
2092
  .input-filled.input-success:focus-visible { border-bottom-color: var(--color-success); }
1940
2093
  .input-filled.input-warning:focus-visible { border-bottom-color: var(--color-warning); }
1941
2094
  .input-filled.input-error:focus-visible { border-bottom-color: var(--color-error); }
2095
+ .input-filled.input-accent:focus-visible { border-bottom-color: var(--color-accent); }
2096
+ .input-filled.input-neutral:focus-visible { border-bottom-color: var(--color-neutral); }
2097
+ .input-filled.input-base:focus-visible { border-bottom-color: var(--color-base-content); }
1942
2098
 
1943
2099
  /* Input with Icon */
1944
2100
  .input-group {
@@ -2142,6 +2298,33 @@ html {
2142
2298
  border-color: var(--color-error);
2143
2299
  }
2144
2300
 
2301
+ .checkbox-accent:checked {
2302
+ background-color: var(--color-accent);
2303
+ border-color: var(--color-accent);
2304
+ }
2305
+
2306
+ .checkbox-accent:checked::after {
2307
+ border-color: var(--color-accent-content);
2308
+ }
2309
+
2310
+ .checkbox-neutral:checked {
2311
+ background-color: var(--color-neutral);
2312
+ border-color: var(--color-neutral);
2313
+ }
2314
+
2315
+ .checkbox-neutral:checked::after {
2316
+ border-color: var(--color-neutral-content);
2317
+ }
2318
+
2319
+ .checkbox-base:checked {
2320
+ background-color: var(--color-base-100);
2321
+ border-color: var(--color-base-100);
2322
+ }
2323
+
2324
+ .checkbox-base:checked::after {
2325
+ border-color: var(--color-base-content);
2326
+ }
2327
+
2145
2328
  /* Checkbox Sizes */
2146
2329
  .checkbox-xs {
2147
2330
  width: 0.875rem;
@@ -2258,6 +2441,30 @@ html {
2258
2441
  background-color: var(--color-error);
2259
2442
  }
2260
2443
 
2444
+ .radio-accent:checked {
2445
+ border-color: var(--color-accent);
2446
+ }
2447
+
2448
+ .radio-accent:checked::after {
2449
+ background-color: var(--color-accent);
2450
+ }
2451
+
2452
+ .radio-neutral:checked {
2453
+ border-color: var(--color-neutral);
2454
+ }
2455
+
2456
+ .radio-neutral:checked::after {
2457
+ background-color: var(--color-neutral);
2458
+ }
2459
+
2460
+ .radio-base:checked {
2461
+ border-color: var(--color-base-content);
2462
+ }
2463
+
2464
+ .radio-base:checked::after {
2465
+ background-color: var(--color-base-content);
2466
+ }
2467
+
2261
2468
  /* Toggle/Switch */
2262
2469
  .toggle {
2263
2470
  appearance: none;
@@ -2385,6 +2592,38 @@ html {
2385
2592
  border-color: var(--color-secondary);
2386
2593
  }
2387
2594
 
2595
+ .select-tertiary:focus-visible {
2596
+ border-color: var(--color-tertiary);
2597
+ }
2598
+
2599
+ .select-info:focus-visible {
2600
+ border-color: var(--color-info);
2601
+ }
2602
+
2603
+ .select-success:focus-visible {
2604
+ border-color: var(--color-success);
2605
+ }
2606
+
2607
+ .select-warning:focus-visible {
2608
+ border-color: var(--color-warning);
2609
+ }
2610
+
2611
+ .select-error:focus-visible {
2612
+ border-color: var(--color-error);
2613
+ }
2614
+
2615
+ .select-accent:focus-visible {
2616
+ border-color: var(--color-accent);
2617
+ }
2618
+
2619
+ .select-neutral:focus-visible {
2620
+ border-color: var(--color-neutral);
2621
+ }
2622
+
2623
+ .select-base:focus-visible {
2624
+ border-color: var(--color-base-content);
2625
+ }
2626
+
2388
2627
  /* Select Sizes */
2389
2628
  .select-xs {
2390
2629
  padding: 0.375rem 2rem 0.375rem 0.625rem;
@@ -2625,6 +2864,56 @@ html {
2625
2864
  color: var(--color-on-surface);
2626
2865
  }
2627
2866
 
2867
+ .navbar-primary {
2868
+ background-color: var(--color-primary);
2869
+ color: var(--color-primary-content);
2870
+ }
2871
+
2872
+ .navbar-secondary {
2873
+ background-color: var(--color-secondary);
2874
+ color: var(--color-secondary-content);
2875
+ }
2876
+
2877
+ .navbar-tertiary {
2878
+ background-color: var(--color-tertiary);
2879
+ color: var(--color-tertiary-content);
2880
+ }
2881
+
2882
+ .navbar-accent {
2883
+ background-color: var(--color-accent);
2884
+ color: var(--color-accent-content);
2885
+ }
2886
+
2887
+ .navbar-neutral {
2888
+ background-color: var(--color-neutral);
2889
+ color: var(--color-neutral-content);
2890
+ }
2891
+
2892
+ .navbar-base {
2893
+ background-color: var(--color-base-100);
2894
+ color: var(--color-base-content);
2895
+ }
2896
+
2897
+ .navbar-info {
2898
+ background-color: var(--color-info);
2899
+ color: var(--color-info-content);
2900
+ }
2901
+
2902
+ .navbar-success {
2903
+ background-color: var(--color-success);
2904
+ color: var(--color-success-content);
2905
+ }
2906
+
2907
+ .navbar-warning {
2908
+ background-color: var(--color-warning);
2909
+ color: var(--color-warning-content);
2910
+ }
2911
+
2912
+ .navbar-error {
2913
+ background-color: var(--color-error);
2914
+ color: var(--color-error-content);
2915
+ }
2916
+
2628
2917
  .navbar-start {
2629
2918
  display: flex;
2630
2919
  align-items: center;
@@ -3759,6 +4048,21 @@ html {
3759
4048
  color: var(--color-error-content);
3760
4049
  }
3761
4050
 
4051
+ .avatar-accent {
4052
+ background-color: var(--color-accent);
4053
+ color: var(--color-accent-content);
4054
+ }
4055
+
4056
+ .avatar-neutral {
4057
+ background-color: var(--color-neutral);
4058
+ color: var(--color-neutral-content);
4059
+ }
4060
+
4061
+ .avatar-base {
4062
+ background-color: var(--color-base-100);
4063
+ color: var(--color-base-content);
4064
+ }
4065
+
3762
4066
  /* Ring */
3763
4067
  .avatar-ring {
3764
4068
  outline: none;
@@ -3869,6 +4173,21 @@ html {
3869
4173
  color: var(--color-tertiary-content);
3870
4174
  }
3871
4175
 
4176
+ .badge-accent {
4177
+ background-color: var(--color-accent);
4178
+ color: var(--color-accent-content);
4179
+ }
4180
+
4181
+ .badge-neutral {
4182
+ background-color: var(--color-neutral);
4183
+ color: var(--color-neutral-content);
4184
+ }
4185
+
4186
+ .badge-base {
4187
+ background-color: var(--color-base-100);
4188
+ color: var(--color-base-content);
4189
+ }
4190
+
3872
4191
  .badge-info {
3873
4192
  background-color: var(--color-info);
3874
4193
  color: var(--color-info-content);
@@ -3895,119 +4214,586 @@ html {
3895
4214
  border: 1px solid currentColor;
3896
4215
  }
3897
4216
 
3898
- .badge-outline.badge-primary {
3899
- color: var(--color-primary);
3900
- border-color: var(--color-primary);
4217
+ .badge-outline.badge-primary {
4218
+ color: var(--color-primary);
4219
+ border-color: var(--color-primary);
4220
+ }
4221
+
4222
+ .badge-outline.badge-secondary {
4223
+ color: var(--color-secondary);
4224
+ border-color: var(--color-secondary);
4225
+ }
4226
+
4227
+ .badge-outline.badge-tertiary {
4228
+ color: var(--color-tertiary);
4229
+ border-color: var(--color-tertiary);
4230
+ }
4231
+
4232
+ .badge-outline.badge-accent {
4233
+ color: var(--color-accent);
4234
+ border-color: var(--color-accent);
4235
+ }
4236
+
4237
+ .badge-outline.badge-neutral {
4238
+ color: var(--color-neutral);
4239
+ border-color: var(--color-neutral);
4240
+ }
4241
+
4242
+ .badge-outline.badge-base {
4243
+ color: var(--color-base-content);
4244
+ border-color: var(--color-base-content);
4245
+ }
4246
+
4247
+ .badge-outline.badge-info {
4248
+ color: var(--color-info);
4249
+ border-color: var(--color-info);
4250
+ }
4251
+
4252
+ .badge-outline.badge-success {
4253
+ color: var(--color-success);
4254
+ border-color: var(--color-success);
4255
+ }
4256
+
4257
+ .badge-outline.badge-warning {
4258
+ color: var(--color-warning);
4259
+ border-color: var(--color-warning);
4260
+ }
4261
+
4262
+ .badge-outline.badge-error {
4263
+ color: var(--color-error);
4264
+ border-color: var(--color-error);
4265
+ }
4266
+
4267
+ /* Soft/Tonal Variants */
4268
+ .badge-soft {
4269
+ background-color: var(--color-primary-container);
4270
+ color: var(--color-on-primary-container);
4271
+ }
4272
+
4273
+ .badge-soft.badge-primary {
4274
+ background-color: var(--color-primary-container);
4275
+ color: var(--color-on-primary-container);
4276
+ }
4277
+
4278
+ .badge-soft.badge-secondary {
4279
+ background-color: var(--color-secondary-container);
4280
+ color: var(--color-on-secondary-container);
4281
+ }
4282
+
4283
+ .badge-soft.badge-tertiary {
4284
+ background-color: var(--color-tertiary-container);
4285
+ color: var(--color-on-tertiary-container);
4286
+ }
4287
+
4288
+ .badge-soft.badge-accent {
4289
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
4290
+ color: var(--color-on-surface);
4291
+ }
4292
+
4293
+ .badge-soft.badge-neutral {
4294
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
4295
+ color: var(--color-on-surface);
4296
+ }
4297
+
4298
+ .badge-soft.badge-base {
4299
+ background-color: var(--color-base-200);
4300
+ color: var(--color-base-content);
4301
+ }
4302
+
4303
+ .badge-soft.badge-info {
4304
+ background-color: var(--color-info-container);
4305
+ color: var(--color-on-info-container);
4306
+ }
4307
+
4308
+ .badge-soft.badge-success {
4309
+ background-color: var(--color-success-container);
4310
+ color: var(--color-on-success-container);
4311
+ }
4312
+
4313
+ .badge-soft.badge-warning {
4314
+ background-color: var(--color-warning-container);
4315
+ color: var(--color-on-warning-container);
4316
+ }
4317
+
4318
+ .badge-soft.badge-error {
4319
+ background-color: var(--color-error-container);
4320
+ color: var(--color-on-error-container);
4321
+ }
4322
+
4323
+ /* Size Variants */
4324
+ .badge-sm {
4325
+ padding: 0 0.375rem;
4326
+ font-size: 0.625rem;
4327
+ line-height: 0.875rem;
4328
+ }
4329
+
4330
+ .badge-lg {
4331
+ padding: 0.25rem 0.75rem;
4332
+ font-size: 0.875rem;
4333
+ line-height: 1.25rem;
4334
+ }
4335
+
4336
+ /* Badge with Indicator Dot */
4337
+ .badge-indicator {
4338
+ position: relative;
4339
+ padding-left: 1rem;
4340
+ }
4341
+
4342
+ .badge-indicator::before {
4343
+ content: '';
4344
+ position: absolute;
4345
+ left: 0.375rem;
4346
+ top: 50%;
4347
+ transform: translateY(-50%);
4348
+ width: 0.375rem;
4349
+ height: 0.375rem;
4350
+ border-radius: var(--radius-full);
4351
+ background-color: currentColor;
4352
+ }
4353
+
4354
+ /* Empty Badge (just a dot) */
4355
+ .badge-dot {
4356
+ width: 0.5rem;
4357
+ height: 0.5rem;
4358
+ padding: 0;
4359
+ border-radius: var(--radius-full);
4360
+ }
4361
+ }
4362
+
4363
+ /**
4364
+ * Chat Component Styles
4365
+ * DuskMoonUI - LLM-oriented chat primitives
4366
+ */
4367
+
4368
+ @layer components {
4369
+ .chat {
4370
+ display: grid;
4371
+ grid-template-columns: auto minmax(0, 1fr);
4372
+ column-gap: 0.75rem;
4373
+ align-items: end;
4374
+ padding: 0.25rem 0;
4375
+ }
4376
+
4377
+ .chat-start {
4378
+ grid-template-columns: auto minmax(0, 1fr);
4379
+ }
4380
+
4381
+ .chat-end {
4382
+ grid-template-columns: minmax(0, 1fr) auto;
4383
+ }
4384
+
4385
+ .chat-avatar {
4386
+ grid-row: 1 / span 999;
4387
+ grid-column: 1;
4388
+ align-self: start;
4389
+ justify-self: start;
4390
+ }
4391
+
4392
+ .chat-end .chat-avatar {
4393
+ grid-column: 2;
4394
+ justify-self: end;
4395
+ }
4396
+
4397
+ .chat > :not(.chat-avatar) {
4398
+ grid-column: 2;
4399
+ justify-self: start;
4400
+ max-width: 100%;
4401
+ margin-bottom: 0.25rem;
4402
+ }
4403
+
4404
+ .chat-end > :not(.chat-avatar) {
4405
+ grid-column: 1;
4406
+ justify-self: end;
4407
+ }
4408
+
4409
+ .chat-header,
4410
+ .chat-footer {
4411
+ color: var(--color-on-surface-variant);
4412
+ font-size: 0.75rem;
4413
+ line-height: 1rem;
4414
+ }
4415
+
4416
+ .chat-header {
4417
+ margin-bottom: 0.125rem;
4418
+ }
4419
+
4420
+ .chat-footer {
4421
+ margin-top: 0.125rem;
4422
+ margin-bottom: 0;
4423
+ }
4424
+
4425
+ .chat-bubble {
4426
+ --chat-bubble-bg: var(--color-surface-container-highest);
4427
+ --chat-bubble-fg: var(--color-on-surface);
4428
+
4429
+ position: relative;
4430
+ max-width: min(80ch, 100%);
4431
+ padding: 0.625rem 0.875rem;
4432
+ border-radius: 1rem;
4433
+ background-color: var(--chat-bubble-bg);
4434
+ color: var(--chat-bubble-fg);
4435
+ box-shadow: inset 0 0 0 1px var(--color-outline-variant);
4436
+ font-size: 0.875rem;
4437
+ line-height: 1.45;
4438
+ overflow-wrap: anywhere;
4439
+ word-break: break-word;
4440
+ }
4441
+
4442
+ .chat-start .chat-bubble::before,
4443
+ .chat-end .chat-bubble::before,
4444
+ .chat-start .chat-bubble::after,
4445
+ .chat-end .chat-bubble::after {
4446
+ content: "";
4447
+ position: absolute;
4448
+ top: 0;
4449
+ clip-path: polygon(0 0, 100% 0, 100% 100%);
4450
+ }
4451
+
4452
+ .chat-start .chat-bubble::before {
4453
+ left: -0.625rem;
4454
+ width: 1rem;
4455
+ height: 1rem;
4456
+ background-color: var(--color-outline-variant);
4457
+ }
4458
+
4459
+ .chat-start .chat-bubble::after {
4460
+ left: -0.5rem;
4461
+ width: calc(1rem - 2px);
4462
+ height: calc(1rem - 2px);
4463
+ top: 1px;
4464
+ background-color: var(--chat-bubble-bg);
4465
+ }
4466
+
4467
+ .chat-start .chat-bubble {
4468
+ border-top-left-radius: 0;
4469
+ }
4470
+
4471
+ .chat-end .chat-bubble::before {
4472
+ right: -0.625rem;
4473
+ width: 1rem;
4474
+ height: 1rem;
4475
+ background-color: var(--color-outline-variant);
4476
+ transform: scaleX(-1);
4477
+ }
4478
+
4479
+ .chat-end .chat-bubble::after {
4480
+ right: -0.5rem;
4481
+ width: calc(1rem - 2px);
4482
+ height: calc(1rem - 2px);
4483
+ top: 1px;
4484
+ background-color: var(--chat-bubble-bg);
4485
+ transform: scaleX(-1);
4486
+ }
4487
+
4488
+ .chat-end .chat-bubble {
4489
+ border-top-right-radius: 0;
4490
+ }
4491
+
4492
+ .chat-bubble-primary {
4493
+ --chat-bubble-bg: var(--color-primary-container);
4494
+ --chat-bubble-fg: var(--color-on-primary-container);
4495
+ }
4496
+
4497
+ .chat-bubble-secondary {
4498
+ --chat-bubble-bg: var(--color-secondary-container);
4499
+ --chat-bubble-fg: var(--color-on-secondary-container);
4500
+ }
4501
+
4502
+ .chat-bubble-tertiary {
4503
+ --chat-bubble-bg: var(--color-tertiary-container);
4504
+ --chat-bubble-fg: var(--color-on-tertiary-container);
4505
+ }
4506
+
4507
+ .chat-bubble-info {
4508
+ --chat-bubble-bg: var(--color-info-container);
4509
+ --chat-bubble-fg: var(--color-on-info-container);
4510
+ }
4511
+
4512
+ .chat-bubble-success {
4513
+ --chat-bubble-bg: var(--color-success-container);
4514
+ --chat-bubble-fg: var(--color-on-success-container);
4515
+ }
4516
+
4517
+ .chat-bubble-warning {
4518
+ --chat-bubble-bg: var(--color-warning-container);
4519
+ --chat-bubble-fg: var(--color-on-warning-container);
4520
+ }
4521
+
4522
+ .chat-bubble-error {
4523
+ --chat-bubble-bg: var(--color-error-container);
4524
+ --chat-bubble-fg: var(--color-on-error-container);
4525
+ }
4526
+
4527
+ .chat-bubble-accent {
4528
+ --chat-bubble-bg: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
4529
+ --chat-bubble-fg: var(--color-on-surface);
4530
+ }
4531
+
4532
+ .chat-bubble-neutral {
4533
+ --chat-bubble-bg: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
4534
+ --chat-bubble-fg: var(--color-on-surface);
4535
+ }
4536
+
4537
+ .chat-bubble-base {
4538
+ --chat-bubble-bg: var(--color-base-200);
4539
+ --chat-bubble-fg: var(--color-base-content);
4540
+ }
4541
+
4542
+ .chat-bubble-filled.chat-bubble-primary {
4543
+ --chat-bubble-bg: var(--color-primary);
4544
+ --chat-bubble-fg: var(--color-primary-content);
4545
+ }
4546
+
4547
+ .chat-bubble-filled.chat-bubble-secondary {
4548
+ --chat-bubble-bg: var(--color-secondary);
4549
+ --chat-bubble-fg: var(--color-secondary-content);
4550
+ }
4551
+
4552
+ .chat-bubble-filled.chat-bubble-tertiary {
4553
+ --chat-bubble-bg: var(--color-tertiary);
4554
+ --chat-bubble-fg: var(--color-tertiary-content);
4555
+ }
4556
+
4557
+ .chat-bubble-filled.chat-bubble-info {
4558
+ --chat-bubble-bg: var(--color-info);
4559
+ --chat-bubble-fg: var(--color-info-content);
4560
+ }
4561
+
4562
+ .chat-bubble-filled.chat-bubble-success {
4563
+ --chat-bubble-bg: var(--color-success);
4564
+ --chat-bubble-fg: var(--color-success-content);
4565
+ }
4566
+
4567
+ .chat-bubble-filled.chat-bubble-warning {
4568
+ --chat-bubble-bg: var(--color-warning);
4569
+ --chat-bubble-fg: var(--color-warning-content);
4570
+ }
4571
+
4572
+ .chat-bubble-filled.chat-bubble-error {
4573
+ --chat-bubble-bg: var(--color-error);
4574
+ --chat-bubble-fg: var(--color-error-content);
4575
+ }
4576
+
4577
+ .chat-bubble-filled.chat-bubble-accent {
4578
+ --chat-bubble-bg: var(--color-accent);
4579
+ --chat-bubble-fg: var(--color-accent-content);
4580
+ }
4581
+
4582
+ .chat-bubble-filled.chat-bubble-neutral {
4583
+ --chat-bubble-bg: var(--color-neutral);
4584
+ --chat-bubble-fg: var(--color-neutral-content);
4585
+ }
4586
+
4587
+ .chat-bubble-filled.chat-bubble-base {
4588
+ --chat-bubble-bg: var(--color-base-100);
4589
+ --chat-bubble-fg: var(--color-base-content);
4590
+ }
4591
+
4592
+ .chat-bubble-xs {
4593
+ padding: 0.375rem 0.625rem;
4594
+ font-size: 0.75rem;
4595
+ }
4596
+
4597
+ .chat-bubble-sm {
4598
+ padding: 0.5rem 0.75rem;
4599
+ font-size: 0.8125rem;
4600
+ }
4601
+
4602
+ .chat-bubble-md {
4603
+ padding: 0.625rem 0.875rem;
4604
+ font-size: 0.875rem;
3901
4605
  }
3902
4606
 
3903
- .badge-outline.badge-secondary {
3904
- color: var(--color-secondary);
3905
- border-color: var(--color-secondary);
4607
+ .chat-bubble-lg {
4608
+ padding: 0.875rem 1.125rem;
4609
+ font-size: 1rem;
3906
4610
  }
3907
4611
 
3908
- .badge-outline.badge-tertiary {
3909
- color: var(--color-tertiary);
3910
- border-color: var(--color-tertiary);
4612
+ .chat-reasoning,
4613
+ .chat-tool {
4614
+ width: min(80ch, 100%);
4615
+ border: 1px solid var(--color-outline);
4616
+ border-radius: var(--radius-sm);
4617
+ background-color: var(--color-surface-container-low);
4618
+ color: var(--color-on-surface);
4619
+ font-size: 0.8125rem;
4620
+ line-height: 1.45;
4621
+ overflow: hidden;
3911
4622
  }
3912
4623
 
3913
- .badge-outline.badge-info {
3914
- color: var(--color-info);
3915
- border-color: var(--color-info);
4624
+ .chat-reasoning > summary,
4625
+ .chat-tool > summary {
4626
+ cursor: pointer;
4627
+ list-style-position: inside;
3916
4628
  }
3917
4629
 
3918
- .badge-outline.badge-success {
3919
- color: var(--color-success);
3920
- border-color: var(--color-success);
4630
+ .chat-reasoning > summary {
4631
+ padding: 0.5rem 0.75rem;
4632
+ color: var(--color-on-surface-variant);
4633
+ font-weight: 500;
3921
4634
  }
3922
4635
 
3923
- .badge-outline.badge-warning {
3924
- color: var(--color-warning);
3925
- border-color: var(--color-warning);
4636
+ .chat-reasoning > :not(summary) {
4637
+ padding: 0 0.75rem 0.75rem;
4638
+ color: var(--color-on-surface-variant);
4639
+ font-style: italic;
3926
4640
  }
3927
4641
 
3928
- .badge-outline.badge-error {
3929
- color: var(--color-error);
3930
- border-color: var(--color-error);
4642
+ .chat-tool-header {
4643
+ display: flex;
4644
+ align-items: center;
4645
+ gap: 0.5rem;
4646
+ padding: 0.5rem 0.75rem;
4647
+ color: var(--color-on-surface);
4648
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
4649
+ font-size: 0.75rem;
4650
+ font-weight: 600;
3931
4651
  }
3932
4652
 
3933
- /* Soft/Tonal Variants */
3934
- .badge-soft {
3935
- background-color: var(--color-primary-container);
3936
- color: var(--color-on-primary-container);
4653
+ .chat-tool-status {
4654
+ display: inline-flex;
4655
+ align-items: center;
4656
+ min-height: 1.25rem;
4657
+ padding: 0.125rem 0.5rem;
4658
+ border-radius: 999px;
4659
+ margin-left: auto;
4660
+ font-family: inherit;
4661
+ font-size: 0.6875rem;
4662
+ font-weight: 600;
4663
+ line-height: 1;
3937
4664
  }
3938
4665
 
3939
- .badge-soft.badge-primary {
3940
- background-color: var(--color-primary-container);
3941
- color: var(--color-on-primary-container);
4666
+ .chat-tool-call,
4667
+ .chat-tool-result {
4668
+ padding: 0.75rem;
4669
+ border-top: 1px solid var(--color-outline);
4670
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
4671
+ font-size: 0.75rem;
4672
+ overflow-x: auto;
3942
4673
  }
3943
4674
 
3944
- .badge-soft.badge-secondary {
3945
- background-color: var(--color-secondary-container);
3946
- color: var(--color-on-secondary-container);
4675
+ .chat-tool-result {
4676
+ background-color: color-mix(in oklch, var(--color-surface-container) 65%, transparent);
3947
4677
  }
3948
4678
 
3949
- .badge-soft.badge-tertiary {
3950
- background-color: var(--color-tertiary-container);
3951
- color: var(--color-on-tertiary-container);
4679
+ .chat-tool-pending .chat-tool-status {
4680
+ border: 1px solid var(--color-outline);
4681
+ color: var(--color-on-surface-variant);
3952
4682
  }
3953
4683
 
3954
- .badge-soft.badge-info {
4684
+ .chat-tool-running .chat-tool-status {
3955
4685
  background-color: var(--color-info-container);
3956
4686
  color: var(--color-on-info-container);
3957
4687
  }
3958
4688
 
3959
- .badge-soft.badge-success {
3960
- background-color: var(--color-success-container);
3961
- color: var(--color-on-success-container);
4689
+ .chat-tool-running .chat-tool-header::before {
4690
+ content: "";
4691
+ width: 0.875rem;
4692
+ height: 0.875rem;
4693
+ border: 2px solid currentColor;
4694
+ border-top-color: transparent;
4695
+ border-radius: 999px;
4696
+ animation: chat-tool-spin 800ms linear infinite;
3962
4697
  }
3963
4698
 
3964
- .badge-soft.badge-warning {
3965
- background-color: var(--color-warning-container);
3966
- color: var(--color-on-warning-container);
4699
+ .chat-tool-success .chat-tool-status {
4700
+ background-color: var(--color-success-container);
4701
+ color: var(--color-on-success-container);
3967
4702
  }
3968
4703
 
3969
- .badge-soft.badge-error {
4704
+ .chat-tool-error .chat-tool-status {
3970
4705
  background-color: var(--color-error-container);
3971
4706
  color: var(--color-on-error-container);
3972
4707
  }
3973
4708
 
3974
- /* Size Variants */
3975
- .badge-sm {
3976
- padding: 0 0.375rem;
3977
- font-size: 0.625rem;
3978
- line-height: 0.875rem;
4709
+ .chat-typing {
4710
+ display: inline-flex;
4711
+ align-items: center;
4712
+ gap: 0.25rem;
4713
+ min-width: 2.25rem;
3979
4714
  }
3980
4715
 
3981
- .badge-lg {
3982
- padding: 0.25rem 0.75rem;
3983
- font-size: 0.875rem;
3984
- line-height: 1.25rem;
4716
+ .chat-typing::before,
4717
+ .chat-typing::after,
4718
+ .chat-typing span {
4719
+ content: "";
4720
+ width: 0.375rem;
4721
+ height: 0.375rem;
4722
+ border-radius: 999px;
4723
+ background-color: currentColor;
4724
+ opacity: 0.55;
4725
+ animation: chat-typing-dot 1.4s ease-in-out infinite;
3985
4726
  }
3986
4727
 
3987
- /* Badge with Indicator Dot */
3988
- .badge-indicator {
3989
- position: relative;
3990
- padding-left: 1rem;
4728
+ .chat-typing span {
4729
+ animation-delay: 150ms;
3991
4730
  }
3992
4731
 
3993
- .badge-indicator::before {
3994
- content: '';
3995
- position: absolute;
3996
- left: 0.375rem;
3997
- top: 50%;
3998
- transform: translateY(-50%);
3999
- width: 0.375rem;
4000
- height: 0.375rem;
4001
- border-radius: var(--radius-full);
4732
+ .chat-typing::after {
4733
+ animation-delay: 300ms;
4734
+ }
4735
+
4736
+ .chat-bubble-streaming::after {
4737
+ content: "";
4738
+ display: inline-block;
4739
+ width: 1px;
4740
+ height: 1em;
4741
+ margin-left: 0.25rem;
4002
4742
  background-color: currentColor;
4743
+ vertical-align: -0.125em;
4744
+ animation: chat-stream-caret 1s step-end infinite;
4003
4745
  }
4004
4746
 
4005
- /* Empty Badge (just a dot) */
4006
- .badge-dot {
4007
- width: 0.5rem;
4008
- height: 0.5rem;
4009
- padding: 0;
4010
- border-radius: var(--radius-full);
4747
+ .chat-reasoning > summary:focus-visible,
4748
+ .chat-tool > summary:focus-visible {
4749
+ outline: none;
4750
+ box-shadow: 0 0 0 3px color-mix(in oklch, currentColor 20%, transparent);
4751
+ }
4752
+
4753
+ @keyframes chat-typing-dot {
4754
+ 0%,
4755
+ 80%,
4756
+ 100% {
4757
+ opacity: 0.45;
4758
+ transform: translateY(0);
4759
+ }
4760
+
4761
+ 40% {
4762
+ opacity: 1;
4763
+ transform: translateY(-0.1875rem);
4764
+ }
4765
+ }
4766
+
4767
+ @keyframes chat-stream-caret {
4768
+ 0%,
4769
+ 49% {
4770
+ opacity: 1;
4771
+ }
4772
+
4773
+ 50%,
4774
+ 100% {
4775
+ opacity: 0;
4776
+ }
4777
+ }
4778
+
4779
+ @keyframes chat-tool-spin {
4780
+ to {
4781
+ transform: rotate(360deg);
4782
+ }
4783
+ }
4784
+
4785
+ @media (prefers-reduced-motion: reduce) {
4786
+ .chat-typing::before,
4787
+ .chat-typing::after,
4788
+ .chat-typing span,
4789
+ .chat-bubble-streaming::after,
4790
+ .chat-tool-running .chat-tool-header::before {
4791
+ animation: none;
4792
+ }
4793
+
4794
+ .chat-bubble-streaming::after {
4795
+ opacity: 1;
4796
+ }
4011
4797
  }
4012
4798
  }
4013
4799
 
@@ -4083,6 +4869,36 @@ html {
4083
4869
  background-color: color-mix(in oklch, var(--color-tertiary), black 10%);
4084
4870
  }
4085
4871
 
4872
+ .chip-accent {
4873
+ background-color: var(--color-accent);
4874
+ color: var(--color-accent-content);
4875
+ border-color: var(--color-accent);
4876
+ }
4877
+
4878
+ .chip-accent:hover {
4879
+ background-color: color-mix(in oklch, var(--color-accent), black 10%);
4880
+ }
4881
+
4882
+ .chip-neutral {
4883
+ background-color: var(--color-neutral);
4884
+ color: var(--color-neutral-content);
4885
+ border-color: var(--color-neutral);
4886
+ }
4887
+
4888
+ .chip-neutral:hover {
4889
+ background-color: color-mix(in oklch, var(--color-neutral), black 10%);
4890
+ }
4891
+
4892
+ .chip-base {
4893
+ background-color: var(--color-base-100);
4894
+ color: var(--color-base-content);
4895
+ border-color: var(--color-base-100);
4896
+ }
4897
+
4898
+ .chip-base:hover {
4899
+ background-color: var(--color-base-200);
4900
+ }
4901
+
4086
4902
  .chip-info {
4087
4903
  background-color: var(--color-info);
4088
4904
  color: var(--color-info-content);
@@ -4157,6 +4973,30 @@ html {
4157
4973
  background-color: var(--color-tertiary-container);
4158
4974
  }
4159
4975
 
4976
+ .chip-outlined.chip-accent {
4977
+ color: var(--color-accent);
4978
+ }
4979
+
4980
+ .chip-outlined.chip-accent:hover {
4981
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
4982
+ }
4983
+
4984
+ .chip-outlined.chip-neutral {
4985
+ color: var(--color-neutral);
4986
+ }
4987
+
4988
+ .chip-outlined.chip-neutral:hover {
4989
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
4990
+ }
4991
+
4992
+ .chip-outlined.chip-base {
4993
+ color: var(--color-base-content);
4994
+ }
4995
+
4996
+ .chip-outlined.chip-base:hover {
4997
+ background-color: var(--color-base-200);
4998
+ }
4999
+
4160
5000
  .chip-outlined.chip-info {
4161
5001
  color: var(--color-info);
4162
5002
  }
@@ -4210,6 +5050,21 @@ html {
4210
5050
  color: var(--color-on-tertiary-container);
4211
5051
  }
4212
5052
 
5053
+ .chip-tonal.chip-accent {
5054
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
5055
+ color: var(--color-on-surface);
5056
+ }
5057
+
5058
+ .chip-tonal.chip-neutral {
5059
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
5060
+ color: var(--color-on-surface);
5061
+ }
5062
+
5063
+ .chip-tonal.chip-base {
5064
+ background-color: var(--color-base-200);
5065
+ color: var(--color-base-content);
5066
+ }
5067
+
4213
5068
  .chip-tonal.chip-info {
4214
5069
  background-color: var(--color-info-container);
4215
5070
  color: var(--color-on-info-container);
@@ -4249,6 +5104,9 @@ html {
4249
5104
  .chip-ghost.chip-success { background-color: transparent; color: var(--color-success); }
4250
5105
  .chip-ghost.chip-warning { background-color: transparent; color: var(--color-warning); }
4251
5106
  .chip-ghost.chip-error { background-color: transparent; color: var(--color-error); }
5107
+ .chip-ghost.chip-accent { background-color: transparent; color: var(--color-accent); }
5108
+ .chip-ghost.chip-neutral { background-color: transparent; color: var(--color-neutral); }
5109
+ .chip-ghost.chip-base { background-color: transparent; color: var(--color-base-content); }
4252
5110
 
4253
5111
  .chip-ghost.chip-primary:hover { background-color: var(--color-primary-container); }
4254
5112
  .chip-ghost.chip-secondary:hover { background-color: var(--color-secondary-container); }
@@ -4257,6 +5115,9 @@ html {
4257
5115
  .chip-ghost.chip-success:hover { background-color: var(--color-success-container); }
4258
5116
  .chip-ghost.chip-warning:hover { background-color: var(--color-warning-container); }
4259
5117
  .chip-ghost.chip-error:hover { background-color: var(--color-error-container); }
5118
+ .chip-ghost.chip-accent:hover { background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface)); }
5119
+ .chip-ghost.chip-neutral:hover { background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface)); }
5120
+ .chip-ghost.chip-base:hover { background-color: var(--color-base-200); }
4260
5121
 
4261
5122
  /* Size Variants */
4262
5123
  .chip-sm {
@@ -5039,6 +5900,27 @@ html {
5039
5900
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
5040
5901
  }
5041
5902
 
5903
+ .autocomplete-accent .autocomplete-input {
5904
+ color: var(--color-accent);
5905
+ }
5906
+ .autocomplete-accent .autocomplete-input:focus {
5907
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 10%, transparent);
5908
+ }
5909
+
5910
+ .autocomplete-neutral .autocomplete-input {
5911
+ color: var(--color-neutral);
5912
+ }
5913
+ .autocomplete-neutral .autocomplete-input:focus {
5914
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-neutral) 10%, transparent);
5915
+ }
5916
+
5917
+ .autocomplete-base .autocomplete-input {
5918
+ color: var(--color-base-content);
5919
+ }
5920
+ .autocomplete-base .autocomplete-input:focus {
5921
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-base-content) 10%, transparent);
5922
+ }
5923
+
5042
5924
  /* Ghost Variant */
5043
5925
  .autocomplete-ghost .autocomplete-input {
5044
5926
  background-color: transparent;
@@ -5487,6 +6369,27 @@ html {
5487
6369
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
5488
6370
  }
5489
6371
 
6372
+ .cascader-accent .cascader-trigger {
6373
+ color: var(--color-accent);
6374
+ }
6375
+ .cascader-accent .cascader-trigger:focus {
6376
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 10%, transparent);
6377
+ }
6378
+
6379
+ .cascader-neutral .cascader-trigger {
6380
+ color: var(--color-neutral);
6381
+ }
6382
+ .cascader-neutral .cascader-trigger:focus {
6383
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-neutral) 10%, transparent);
6384
+ }
6385
+
6386
+ .cascader-base .cascader-trigger {
6387
+ color: var(--color-base-content);
6388
+ }
6389
+ .cascader-base .cascader-trigger:focus {
6390
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-base-content) 10%, transparent);
6391
+ }
6392
+
5490
6393
  /* Ghost Variant */
5491
6394
  .cascader-ghost .cascader-trigger {
5492
6395
  background-color: transparent;
@@ -5718,6 +6621,33 @@ html {
5718
6621
  border-color: var(--color-info-content);
5719
6622
  }
5720
6623
 
6624
+ .checkbox-accent {
6625
+ --checkbox-color: var(--color-accent);
6626
+ }
6627
+
6628
+ .checkbox-accent:checked::before,
6629
+ .checkbox-accent:indeterminate::before {
6630
+ border-color: var(--color-accent-content);
6631
+ }
6632
+
6633
+ .checkbox-neutral {
6634
+ --checkbox-color: var(--color-neutral);
6635
+ }
6636
+
6637
+ .checkbox-neutral:checked::before,
6638
+ .checkbox-neutral:indeterminate::before {
6639
+ border-color: var(--color-neutral-content);
6640
+ }
6641
+
6642
+ .checkbox-base {
6643
+ --checkbox-color: var(--color-base-100);
6644
+ }
6645
+
6646
+ .checkbox-base:checked::before,
6647
+ .checkbox-base:indeterminate::before {
6648
+ border-color: var(--color-base-content);
6649
+ }
6650
+
5721
6651
  /* Ghost Variant — borderless unchecked state */
5722
6652
  .checkbox-ghost {
5723
6653
  --checkbox-border-color: transparent;
@@ -6538,6 +7468,48 @@ html {
6538
7468
  color: var(--color-warning-content);
6539
7469
  }
6540
7470
 
7471
+ .datepicker-accent .datepicker-input {
7472
+ color: var(--color-accent);
7473
+ }
7474
+ .datepicker-accent .datepicker-input:focus {
7475
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 10%, transparent);
7476
+ }
7477
+
7478
+ .datepicker-accent .datepicker-day-selected,
7479
+ .datepicker-accent .datepicker-day-range-start,
7480
+ .datepicker-accent .datepicker-day-range-end {
7481
+ background-color: var(--color-accent);
7482
+ color: var(--color-accent-content);
7483
+ }
7484
+
7485
+ .datepicker-neutral .datepicker-input {
7486
+ color: var(--color-neutral);
7487
+ }
7488
+ .datepicker-neutral .datepicker-input:focus {
7489
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-neutral) 10%, transparent);
7490
+ }
7491
+
7492
+ .datepicker-neutral .datepicker-day-selected,
7493
+ .datepicker-neutral .datepicker-day-range-start,
7494
+ .datepicker-neutral .datepicker-day-range-end {
7495
+ background-color: var(--color-neutral);
7496
+ color: var(--color-neutral-content);
7497
+ }
7498
+
7499
+ .datepicker-base .datepicker-input {
7500
+ color: var(--color-base-content);
7501
+ }
7502
+ .datepicker-base .datepicker-input:focus {
7503
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-base-content) 10%, transparent);
7504
+ }
7505
+
7506
+ .datepicker-base .datepicker-day-selected,
7507
+ .datepicker-base .datepicker-day-range-start,
7508
+ .datepicker-base .datepicker-day-range-end {
7509
+ background-color: var(--color-base-100);
7510
+ color: var(--color-base-content);
7511
+ }
7512
+
6541
7513
  /* Day Selected Color Variants */
6542
7514
  .datepicker-primary .datepicker-day-selected,
6543
7515
  .datepicker-primary .datepicker-day-range-start,
@@ -6946,6 +7918,27 @@ html {
6946
7918
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
6947
7919
  }
6948
7920
 
7921
+ .file-upload-accent .file-upload-dropzone {
7922
+ color: var(--color-accent);
7923
+ }
7924
+ .file-upload-accent .file-upload-dropzone:focus-within {
7925
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 10%, transparent);
7926
+ }
7927
+
7928
+ .file-upload-neutral .file-upload-dropzone {
7929
+ color: var(--color-neutral);
7930
+ }
7931
+ .file-upload-neutral .file-upload-dropzone:focus-within {
7932
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-neutral) 10%, transparent);
7933
+ }
7934
+
7935
+ .file-upload-base .file-upload-dropzone {
7936
+ color: var(--color-base-content);
7937
+ }
7938
+ .file-upload-base .file-upload-dropzone:focus-within {
7939
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-base-content) 10%, transparent);
7940
+ }
7941
+
6949
7942
  /* Ghost Variant */
6950
7943
  .file-upload-ghost .file-upload-dropzone {
6951
7944
  background-color: transparent;
@@ -7959,11 +8952,32 @@ html {
7959
8952
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 10%, transparent);
7960
8953
  }
7961
8954
 
7962
- .multi-select-error .multi-select-trigger {
7963
- color: var(--color-error);
8955
+ .multi-select-error .multi-select-trigger {
8956
+ color: var(--color-error);
8957
+ }
8958
+ .multi-select-error .multi-select-trigger:focus-within {
8959
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
8960
+ }
8961
+
8962
+ .multi-select-accent .multi-select-trigger {
8963
+ color: var(--color-accent);
8964
+ }
8965
+ .multi-select-accent .multi-select-trigger:focus-within {
8966
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 10%, transparent);
8967
+ }
8968
+
8969
+ .multi-select-neutral .multi-select-trigger {
8970
+ color: var(--color-neutral);
8971
+ }
8972
+ .multi-select-neutral .multi-select-trigger:focus-within {
8973
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-neutral) 10%, transparent);
8974
+ }
8975
+
8976
+ .multi-select-base .multi-select-trigger {
8977
+ color: var(--color-base-content);
7964
8978
  }
7965
- .multi-select-error .multi-select-trigger:focus-within {
7966
- box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
8979
+ .multi-select-base .multi-select-trigger:focus-within {
8980
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-base-content) 10%, transparent);
7967
8981
  }
7968
8982
 
7969
8983
  /* Ghost Variant */
@@ -8201,6 +9215,30 @@ html {
8201
9215
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
8202
9216
  }
8203
9217
 
9218
+ .otp-input-accent .otp-input-field {
9219
+ color: var(--color-accent);
9220
+ }
9221
+
9222
+ .otp-input-accent .otp-input-field:focus {
9223
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 10%, transparent);
9224
+ }
9225
+
9226
+ .otp-input-neutral .otp-input-field {
9227
+ color: var(--color-neutral);
9228
+ }
9229
+
9230
+ .otp-input-neutral .otp-input-field:focus {
9231
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-neutral) 10%, transparent);
9232
+ }
9233
+
9234
+ .otp-input-base .otp-input-field {
9235
+ color: var(--color-base-content);
9236
+ }
9237
+
9238
+ .otp-input-base .otp-input-field:focus {
9239
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-base-content) 10%, transparent);
9240
+ }
9241
+
8204
9242
  /* Ghost Variant */
8205
9243
  .otp-input-ghost .otp-input-field {
8206
9244
  background-color: transparent;
@@ -8419,6 +9457,30 @@ html {
8419
9457
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
8420
9458
  }
8421
9459
 
9460
+ .pin-input-accent .pin-input-field {
9461
+ color: var(--color-accent);
9462
+ }
9463
+
9464
+ .pin-input-accent .pin-input-field:focus {
9465
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 10%, transparent);
9466
+ }
9467
+
9468
+ .pin-input-neutral .pin-input-field {
9469
+ color: var(--color-neutral);
9470
+ }
9471
+
9472
+ .pin-input-neutral .pin-input-field:focus {
9473
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-neutral) 10%, transparent);
9474
+ }
9475
+
9476
+ .pin-input-base .pin-input-field {
9477
+ color: var(--color-base-content);
9478
+ }
9479
+
9480
+ .pin-input-base .pin-input-field:focus {
9481
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-base-content) 10%, transparent);
9482
+ }
9483
+
8422
9484
  @keyframes pin-shake {
8423
9485
  0%, 100% { transform: translateX(0); }
8424
9486
  20%, 60% { transform: translateX(-4px); }
@@ -8603,6 +9665,18 @@ html {
8603
9665
  --radio-color: var(--color-info);
8604
9666
  }
8605
9667
 
9668
+ .radio-accent {
9669
+ --radio-color: var(--color-accent);
9670
+ }
9671
+
9672
+ .radio-neutral {
9673
+ --radio-color: var(--color-neutral);
9674
+ }
9675
+
9676
+ .radio-base {
9677
+ --radio-color: var(--color-base-content);
9678
+ }
9679
+
8606
9680
  /* Ghost Variant — borderless unchecked state */
8607
9681
  .radio-ghost {
8608
9682
  --radio-border-color: transparent;
@@ -8796,6 +9870,18 @@ html {
8796
9870
  color: var(--color-warning);
8797
9871
  }
8798
9872
 
9873
+ .rating-accent .rating-item.filled {
9874
+ color: var(--color-accent);
9875
+ }
9876
+
9877
+ .rating-neutral .rating-item.filled {
9878
+ color: var(--color-neutral);
9879
+ }
9880
+
9881
+ .rating-base .rating-item.filled {
9882
+ color: var(--color-base-content);
9883
+ }
9884
+
8799
9885
  /* Read Only */
8800
9886
  .rating-readonly .rating-item {
8801
9887
  cursor: default;
@@ -8845,6 +9931,9 @@ html {
8845
9931
  .rating-info:not(.rating-readonly):hover .rating-item { color: var(--color-info); }
8846
9932
  .rating-success:not(.rating-readonly):hover .rating-item { color: var(--color-success); }
8847
9933
  .rating-error:not(.rating-readonly):hover .rating-item { color: var(--color-error); }
9934
+ .rating-accent:not(.rating-readonly):hover .rating-item { color: var(--color-accent); }
9935
+ .rating-neutral:not(.rating-readonly):hover .rating-item { color: var(--color-neutral); }
9936
+ .rating-base:not(.rating-readonly):hover .rating-item { color: var(--color-base-content); }
8848
9937
 
8849
9938
  /* Focus Visible — use warning (the default fill color) for the base ring;
8850
9939
  per-variant overrides below match the active fill color for each variant. */
@@ -8861,6 +9950,9 @@ html {
8861
9950
  .rating-success .rating-item:focus-visible { box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-success) 20%, transparent); }
8862
9951
  .rating-error .rating-item:focus-visible { box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 20%, transparent); }
8863
9952
  .rating-warning .rating-item:focus-visible { box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-warning) 20%, transparent); }
9953
+ .rating-accent .rating-item:focus-visible { box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 20%, transparent); }
9954
+ .rating-neutral .rating-item:focus-visible { box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-neutral) 20%, transparent); }
9955
+ .rating-base .rating-item:focus-visible { box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-base-content) 20%, transparent); }
8864
9956
 
8865
9957
  /* Rating Display (static) */
8866
9958
  .rating-display {
@@ -9064,6 +10156,21 @@ html {
9064
10156
  color: var(--color-on-error-container);
9065
10157
  }
9066
10158
 
10159
+ .segment-control-accent .segment-item-active {
10160
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
10161
+ color: var(--color-on-surface);
10162
+ }
10163
+
10164
+ .segment-control-neutral .segment-item-active {
10165
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
10166
+ color: var(--color-on-surface);
10167
+ }
10168
+
10169
+ .segment-control-base .segment-item-active {
10170
+ background-color: var(--color-base-200);
10171
+ color: var(--color-base-content);
10172
+ }
10173
+
9067
10174
  /* Full Width */
9068
10175
  .segment-control-full {
9069
10176
  display: flex;
@@ -9207,6 +10314,9 @@ html {
9207
10314
  .select-filled.select-success:focus-visible { border-bottom-color: var(--color-success); }
9208
10315
  .select-filled.select-warning:focus-visible { border-bottom-color: var(--color-warning); }
9209
10316
  .select-filled.select-error:focus-visible { border-bottom-color: var(--color-error); }
10317
+ .select-filled.select-accent:focus-visible { border-bottom-color: var(--color-accent); }
10318
+ .select-filled.select-neutral:focus-visible { border-bottom-color: var(--color-neutral); }
10319
+ .select-filled.select-base:focus-visible { border-bottom-color: var(--color-base-content); }
9210
10320
 
9211
10321
  /* Outlined Variant (default is outlined) */
9212
10322
  .select-outlined {
@@ -9226,6 +10336,9 @@ html {
9226
10336
  .select-success { color: var(--color-success); }
9227
10337
  .select-warning { color: var(--color-warning); }
9228
10338
  .select-error { color: var(--color-error); }
10339
+ .select-accent { color: var(--color-accent); }
10340
+ .select-neutral { color: var(--color-neutral); }
10341
+ .select-base { color: var(--color-base-content); }
9229
10342
 
9230
10343
  /* Size Variants */
9231
10344
  .select-xs {
@@ -9659,6 +10772,69 @@ html {
9659
10772
  border-top-color: var(--color-error);
9660
10773
  }
9661
10774
 
10775
+ .slider-accent .slider-track-filled,
10776
+ .slider-accent .slider-thumb {
10777
+ background-color: var(--color-accent);
10778
+ }
10779
+
10780
+ .slider-accent .slider-thumb:hover,
10781
+ .slider-accent .slider-thumb:focus-visible {
10782
+ box-shadow: 0 0 0 8px color-mix(in oklch, var(--color-accent) 15%, var(--color-surface)), 0 2px 4px color-mix(in srgb, var(--color-shadow) 20%, transparent);
10783
+ }
10784
+
10785
+ .slider-accent .slider-mark-active { background-color: var(--color-accent-content); }
10786
+
10787
+ .slider-accent .slider-thumb-label {
10788
+ background-color: var(--color-accent);
10789
+ color: var(--color-accent-content);
10790
+ }
10791
+
10792
+ .slider-accent .slider-thumb-label::after {
10793
+ border-top-color: var(--color-accent);
10794
+ }
10795
+
10796
+ .slider-neutral .slider-track-filled,
10797
+ .slider-neutral .slider-thumb {
10798
+ background-color: var(--color-neutral);
10799
+ }
10800
+
10801
+ .slider-neutral .slider-thumb:hover,
10802
+ .slider-neutral .slider-thumb:focus-visible {
10803
+ box-shadow: 0 0 0 8px color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface)), 0 2px 4px color-mix(in srgb, var(--color-shadow) 20%, transparent);
10804
+ }
10805
+
10806
+ .slider-neutral .slider-mark-active { background-color: var(--color-neutral-content); }
10807
+
10808
+ .slider-neutral .slider-thumb-label {
10809
+ background-color: var(--color-neutral);
10810
+ color: var(--color-neutral-content);
10811
+ }
10812
+
10813
+ .slider-neutral .slider-thumb-label::after {
10814
+ border-top-color: var(--color-neutral);
10815
+ }
10816
+
10817
+ .slider-base .slider-track-filled,
10818
+ .slider-base .slider-thumb {
10819
+ background-color: var(--color-base-100);
10820
+ }
10821
+
10822
+ .slider-base .slider-thumb:hover,
10823
+ .slider-base .slider-thumb:focus-visible {
10824
+ box-shadow: 0 0 0 8px var(--color-base-200), 0 2px 4px color-mix(in srgb, var(--color-shadow) 20%, transparent);
10825
+ }
10826
+
10827
+ .slider-base .slider-mark-active { background-color: var(--color-base-content); }
10828
+
10829
+ .slider-base .slider-thumb-label {
10830
+ background-color: var(--color-base-100);
10831
+ color: var(--color-base-content);
10832
+ }
10833
+
10834
+ .slider-base .slider-thumb-label::after {
10835
+ border-top-color: var(--color-base-100);
10836
+ }
10837
+
9662
10838
  /* Disabled State */
9663
10839
  .slider-disabled {
9664
10840
  opacity: 0.6;
@@ -9726,6 +10902,9 @@ html {
9726
10902
  .slider-success.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-success); }
9727
10903
  .slider-warning.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-warning); }
9728
10904
  .slider-error.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-error); }
10905
+ .slider-accent.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-accent); }
10906
+ .slider-neutral.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-neutral); }
10907
+ .slider-base.slider-vertical .slider-thumb-label::after { border-right-color: var(--color-base-100); }
9729
10908
 
9730
10909
  .slider-vertical .slider-marks {
9731
10910
  flex-direction: column;
@@ -9984,6 +11163,24 @@ html {
9984
11163
  --switch-container-color: var(--color-info-container);
9985
11164
  }
9986
11165
 
11166
+ .switch-accent {
11167
+ --switch-color: var(--color-accent);
11168
+ --switch-content-color: var(--color-accent-content);
11169
+ --switch-container-color: color-mix(in oklch, var(--color-accent) 20%, var(--color-surface));
11170
+ }
11171
+
11172
+ .switch-neutral {
11173
+ --switch-color: var(--color-neutral);
11174
+ --switch-content-color: var(--color-neutral-content);
11175
+ --switch-container-color: color-mix(in oklch, var(--color-neutral) 20%, var(--color-surface));
11176
+ }
11177
+
11178
+ .switch-base {
11179
+ --switch-color: var(--color-base-100);
11180
+ --switch-content-color: var(--color-base-content);
11181
+ --switch-container-color: color-mix(in oklch, var(--color-base-100) 20%, var(--color-surface));
11182
+ }
11183
+
9987
11184
  /* Ghost Variant — borderless track */
9988
11185
  .switch-ghost {
9989
11186
  --switch-border-color: transparent;
@@ -10201,6 +11398,9 @@ html {
10201
11398
  .textarea-filled.textarea-success:focus-visible { border-bottom-color: var(--color-success); }
10202
11399
  .textarea-filled.textarea-warning:focus-visible { border-bottom-color: var(--color-warning); }
10203
11400
  .textarea-filled.textarea-error:focus-visible { border-bottom-color: var(--color-error); }
11401
+ .textarea-filled.textarea-accent:focus-visible { border-bottom-color: var(--color-accent); }
11402
+ .textarea-filled.textarea-neutral:focus-visible { border-bottom-color: var(--color-neutral); }
11403
+ .textarea-filled.textarea-base:focus-visible { border-bottom-color: var(--color-base-content); }
10204
11404
 
10205
11405
  /* Outlined Variant (default) */
10206
11406
  .textarea-outlined {
@@ -10244,6 +11444,9 @@ html {
10244
11444
  .textarea-success { color: var(--color-success); }
10245
11445
  .textarea-warning { color: var(--color-warning); }
10246
11446
  .textarea-error { color: var(--color-error); }
11447
+ .textarea-accent { color: var(--color-accent); }
11448
+ .textarea-neutral { color: var(--color-neutral); }
11449
+ .textarea-base { color: var(--color-base-content); }
10247
11450
 
10248
11451
  /* ============================================
10249
11452
  * SIZE VARIANTS
@@ -10743,6 +11946,30 @@ html {
10743
11946
  border-color: var(--color-error);
10744
11947
  }
10745
11948
 
11949
+ /* Accent variant */
11950
+ .toggle-btn-accent.toggle-btn-active,
11951
+ .toggle-btn-accent.active {
11952
+ color: var(--color-on-surface);
11953
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
11954
+ border-color: var(--color-accent);
11955
+ }
11956
+
11957
+ /* Neutral variant */
11958
+ .toggle-btn-neutral.toggle-btn-active,
11959
+ .toggle-btn-neutral.active {
11960
+ color: var(--color-on-surface);
11961
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
11962
+ border-color: var(--color-neutral);
11963
+ }
11964
+
11965
+ /* Base variant */
11966
+ .toggle-btn-base.toggle-btn-active,
11967
+ .toggle-btn-base.active {
11968
+ color: var(--color-base-content);
11969
+ background-color: var(--color-base-200);
11970
+ border-color: var(--color-base-content);
11971
+ }
11972
+
10746
11973
  /* Ghost Variant */
10747
11974
  .toggle-btn-ghost {
10748
11975
  background-color: transparent;
@@ -10760,6 +11987,9 @@ html {
10760
11987
  .toggle-btn-ghost.toggle-btn-success { color: var(--color-success); }
10761
11988
  .toggle-btn-ghost.toggle-btn-warning { color: var(--color-warning); }
10762
11989
  .toggle-btn-ghost.toggle-btn-error { color: var(--color-error); }
11990
+ .toggle-btn-ghost.toggle-btn-accent { color: var(--color-accent); }
11991
+ .toggle-btn-ghost.toggle-btn-neutral { color: var(--color-neutral); }
11992
+ .toggle-btn-ghost.toggle-btn-base { color: var(--color-base-content); }
10763
11993
 
10764
11994
  /* Focus state */
10765
11995
  .toggle-btn:focus-visible {
@@ -11198,6 +12428,33 @@ html {
11198
12428
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
11199
12429
  }
11200
12430
 
12431
+ .time-input-accent .time-input-field,
12432
+ .time-input-accent .time-input-segments {
12433
+ color: var(--color-accent);
12434
+ }
12435
+
12436
+ .time-input-accent .time-input-field:focus {
12437
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 10%, transparent);
12438
+ }
12439
+
12440
+ .time-input-neutral .time-input-field,
12441
+ .time-input-neutral .time-input-segments {
12442
+ color: var(--color-neutral);
12443
+ }
12444
+
12445
+ .time-input-neutral .time-input-field:focus {
12446
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-neutral) 10%, transparent);
12447
+ }
12448
+
12449
+ .time-input-base .time-input-field,
12450
+ .time-input-base .time-input-segments {
12451
+ color: var(--color-base-content);
12452
+ }
12453
+
12454
+ .time-input-base .time-input-field:focus {
12455
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-base-content) 10%, transparent);
12456
+ }
12457
+
11201
12458
  /* Ghost Variant */
11202
12459
  .time-input-ghost .time-input-field,
11203
12460
  .time-input-ghost .time-input-segments {
@@ -11708,6 +12965,27 @@ html {
11708
12965
  box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-error) 10%, transparent);
11709
12966
  }
11710
12967
 
12968
+ .tree-select-accent .tree-select-trigger {
12969
+ color: var(--color-accent);
12970
+ }
12971
+ .tree-select-accent .tree-select-trigger:focus {
12972
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-accent) 10%, transparent);
12973
+ }
12974
+
12975
+ .tree-select-neutral .tree-select-trigger {
12976
+ color: var(--color-neutral);
12977
+ }
12978
+ .tree-select-neutral .tree-select-trigger:focus {
12979
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-neutral) 10%, transparent);
12980
+ }
12981
+
12982
+ .tree-select-base .tree-select-trigger {
12983
+ color: var(--color-base-content);
12984
+ }
12985
+ .tree-select-base .tree-select-trigger:focus {
12986
+ box-shadow: 0 0 0 3px color-mix(in oklch, var(--color-base-content) 10%, transparent);
12987
+ }
12988
+
11711
12989
  /* Ghost Variant */
11712
12990
  .tree-select-ghost .tree-select-trigger {
11713
12991
  background-color: transparent;
@@ -11925,6 +13203,24 @@ html {
11925
13203
  border-color: transparent;
11926
13204
  }
11927
13205
 
13206
+ .alert-accent {
13207
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
13208
+ color: var(--color-on-surface);
13209
+ border-color: transparent;
13210
+ }
13211
+
13212
+ .alert-neutral {
13213
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
13214
+ color: var(--color-on-surface);
13215
+ border-color: transparent;
13216
+ }
13217
+
13218
+ .alert-base {
13219
+ background-color: var(--color-base-200);
13220
+ color: var(--color-base-content);
13221
+ border-color: transparent;
13222
+ }
13223
+
11928
13224
  /* Filled Variants */
11929
13225
  .alert-filled.alert-info {
11930
13226
  background-color: var(--color-info);
@@ -11961,6 +13257,21 @@ html {
11961
13257
  color: var(--color-tertiary-content);
11962
13258
  }
11963
13259
 
13260
+ .alert-filled.alert-accent {
13261
+ background-color: var(--color-accent);
13262
+ color: var(--color-accent-content);
13263
+ }
13264
+
13265
+ .alert-filled.alert-neutral {
13266
+ background-color: var(--color-neutral);
13267
+ color: var(--color-neutral-content);
13268
+ }
13269
+
13270
+ .alert-filled.alert-base {
13271
+ background-color: var(--color-base-100);
13272
+ color: var(--color-base-content);
13273
+ }
13274
+
11964
13275
  /* Outlined Variants */
11965
13276
  .alert-outlined {
11966
13277
  background-color: transparent;
@@ -12001,6 +13312,21 @@ html {
12001
13312
  color: var(--color-tertiary);
12002
13313
  }
12003
13314
 
13315
+ .alert-outlined.alert-accent {
13316
+ border-color: var(--color-accent);
13317
+ color: var(--color-accent);
13318
+ }
13319
+
13320
+ .alert-outlined.alert-neutral {
13321
+ border-color: var(--color-neutral);
13322
+ color: var(--color-neutral);
13323
+ }
13324
+
13325
+ .alert-outlined.alert-base {
13326
+ border-color: var(--color-base-content);
13327
+ color: var(--color-base-content);
13328
+ }
13329
+
12004
13330
  /* Ghost Variant */
12005
13331
  .alert-ghost {
12006
13332
  background-color: transparent;
@@ -12014,6 +13340,9 @@ html {
12014
13340
  .alert-ghost.alert-success { color: var(--color-success); }
12015
13341
  .alert-ghost.alert-warning { color: var(--color-warning); }
12016
13342
  .alert-ghost.alert-error { color: var(--color-error); }
13343
+ .alert-ghost.alert-accent { color: var(--color-accent); }
13344
+ .alert-ghost.alert-neutral { color: var(--color-neutral); }
13345
+ .alert-ghost.alert-base { color: var(--color-base-content); }
12017
13346
 
12018
13347
  /* Dismissible */
12019
13348
  .alert-dismissible {
@@ -12296,6 +13625,18 @@ html {
12296
13625
  background-color: var(--color-error);
12297
13626
  }
12298
13627
 
13628
+ .progress-accent .progress-bar {
13629
+ background-color: var(--color-accent);
13630
+ }
13631
+
13632
+ .progress-neutral .progress-bar {
13633
+ background-color: var(--color-neutral);
13634
+ }
13635
+
13636
+ .progress-base .progress-bar {
13637
+ background-color: var(--color-base-content);
13638
+ }
13639
+
12299
13640
  /* Size Variants */
12300
13641
  .progress-xs {
12301
13642
  height: 0.25rem;
@@ -12943,6 +14284,21 @@ html {
12943
14284
  color: var(--color-on-tertiary-container);
12944
14285
  }
12945
14286
 
14287
+ .snackbar-accent {
14288
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
14289
+ color: var(--color-on-surface);
14290
+ }
14291
+
14292
+ .snackbar-neutral {
14293
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
14294
+ color: var(--color-on-surface);
14295
+ }
14296
+
14297
+ .snackbar-base {
14298
+ background-color: var(--color-base-200);
14299
+ color: var(--color-base-content);
14300
+ }
14301
+
12946
14302
  /* Dark Snackbar (default MD3 style) */
12947
14303
  .snackbar-dark {
12948
14304
  background-color: var(--color-on-surface);
@@ -13226,6 +14582,30 @@ html {
13226
14582
  color: var(--color-tertiary);
13227
14583
  }
13228
14584
 
14585
+ .toast-accent {
14586
+ border-color: var(--color-accent);
14587
+ }
14588
+
14589
+ .toast-accent .toast-icon {
14590
+ color: var(--color-accent);
14591
+ }
14592
+
14593
+ .toast-neutral {
14594
+ border-color: var(--color-neutral);
14595
+ }
14596
+
14597
+ .toast-neutral .toast-icon {
14598
+ color: var(--color-neutral);
14599
+ }
14600
+
14601
+ .toast-base {
14602
+ border-color: var(--color-base-content);
14603
+ }
14604
+
14605
+ .toast-base .toast-icon {
14606
+ color: var(--color-base-content);
14607
+ }
14608
+
13229
14609
  /* Filled Variants */
13230
14610
  .toast-filled.toast-info {
13231
14611
  background-color: var(--color-info-container);
@@ -13269,6 +14649,24 @@ html {
13269
14649
  color: var(--color-on-tertiary-container);
13270
14650
  }
13271
14651
 
14652
+ .toast-filled.toast-accent {
14653
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
14654
+ border-color: transparent;
14655
+ color: var(--color-on-surface);
14656
+ }
14657
+
14658
+ .toast-filled.toast-neutral {
14659
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
14660
+ border-color: transparent;
14661
+ color: var(--color-on-surface);
14662
+ }
14663
+
14664
+ .toast-filled.toast-base {
14665
+ background-color: var(--color-base-200);
14666
+ border-color: transparent;
14667
+ color: var(--color-base-content);
14668
+ }
14669
+
13272
14670
  /* Filled variant sub-element color inheritance fix.
13273
14671
  .toast-title and .toast-message have explicit color rules that would otherwise
13274
14672
  override the filled variant's inherited on-container color. */
@@ -13290,6 +14688,9 @@ html {
13290
14688
  .toast-ghost.toast-success { color: var(--color-success); }
13291
14689
  .toast-ghost.toast-warning { color: var(--color-warning); }
13292
14690
  .toast-ghost.toast-error { color: var(--color-error); }
14691
+ .toast-ghost.toast-accent { color: var(--color-accent); }
14692
+ .toast-ghost.toast-neutral { color: var(--color-neutral); }
14693
+ .toast-ghost.toast-base { color: var(--color-base-content); }
13293
14694
 
13294
14695
  .toast-ghost .toast-title,
13295
14696
  .toast-ghost .toast-message {
@@ -13649,6 +15050,69 @@ html {
13649
15050
  border-right-color: var(--color-warning);
13650
15051
  }
13651
15052
 
15053
+ .tooltip.tooltip-accent .tooltip-content {
15054
+ background-color: var(--color-accent);
15055
+ color: var(--color-accent-content);
15056
+ }
15057
+
15058
+ .tooltip.tooltip-accent .tooltip-content::before {
15059
+ border-top-color: var(--color-accent);
15060
+ }
15061
+
15062
+ .tooltip.tooltip-accent.tooltip-bottom .tooltip-content::before {
15063
+ border-bottom-color: var(--color-accent);
15064
+ }
15065
+
15066
+ .tooltip.tooltip-accent.tooltip-left .tooltip-content::before {
15067
+ border-left-color: var(--color-accent);
15068
+ }
15069
+
15070
+ .tooltip.tooltip-accent.tooltip-right .tooltip-content::before {
15071
+ border-right-color: var(--color-accent);
15072
+ }
15073
+
15074
+ .tooltip.tooltip-neutral .tooltip-content {
15075
+ background-color: var(--color-neutral);
15076
+ color: var(--color-neutral-content);
15077
+ }
15078
+
15079
+ .tooltip.tooltip-neutral .tooltip-content::before {
15080
+ border-top-color: var(--color-neutral);
15081
+ }
15082
+
15083
+ .tooltip.tooltip-neutral.tooltip-bottom .tooltip-content::before {
15084
+ border-bottom-color: var(--color-neutral);
15085
+ }
15086
+
15087
+ .tooltip.tooltip-neutral.tooltip-left .tooltip-content::before {
15088
+ border-left-color: var(--color-neutral);
15089
+ }
15090
+
15091
+ .tooltip.tooltip-neutral.tooltip-right .tooltip-content::before {
15092
+ border-right-color: var(--color-neutral);
15093
+ }
15094
+
15095
+ .tooltip.tooltip-base .tooltip-content {
15096
+ background-color: var(--color-base-100);
15097
+ color: var(--color-base-content);
15098
+ }
15099
+
15100
+ .tooltip.tooltip-base .tooltip-content::before {
15101
+ border-top-color: var(--color-base-100);
15102
+ }
15103
+
15104
+ .tooltip.tooltip-base.tooltip-bottom .tooltip-content::before {
15105
+ border-bottom-color: var(--color-base-100);
15106
+ }
15107
+
15108
+ .tooltip.tooltip-base.tooltip-left .tooltip-content::before {
15109
+ border-left-color: var(--color-base-100);
15110
+ }
15111
+
15112
+ .tooltip.tooltip-base.tooltip-right .tooltip-content::before {
15113
+ border-right-color: var(--color-base-100);
15114
+ }
15115
+
13652
15116
  /* Multi-line Tooltip */
13653
15117
  .tooltip-multiline .tooltip-content {
13654
15118
  white-space: normal;
@@ -14085,6 +15549,75 @@ html {
14085
15549
  opacity: 0.8;
14086
15550
  }
14087
15551
 
15552
+ .appbar-accent {
15553
+ background-color: var(--color-accent);
15554
+ color: var(--color-accent-content);
15555
+ }
15556
+
15557
+ .appbar-accent .appbar-nav,
15558
+ .appbar-accent .appbar-action,
15559
+ .appbar-accent .appbar-back {
15560
+ color: var(--color-accent-content);
15561
+ }
15562
+
15563
+ .appbar-accent .appbar-nav:hover,
15564
+ .appbar-accent .appbar-action:hover,
15565
+ .appbar-accent .appbar-back:hover {
15566
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
15567
+ color: var(--color-accent);
15568
+ }
15569
+
15570
+ .appbar-accent .appbar-subtitle {
15571
+ color: var(--color-accent-content);
15572
+ opacity: 0.8;
15573
+ }
15574
+
15575
+ .appbar-neutral {
15576
+ background-color: var(--color-neutral);
15577
+ color: var(--color-neutral-content);
15578
+ }
15579
+
15580
+ .appbar-neutral .appbar-nav,
15581
+ .appbar-neutral .appbar-action,
15582
+ .appbar-neutral .appbar-back {
15583
+ color: var(--color-neutral-content);
15584
+ }
15585
+
15586
+ .appbar-neutral .appbar-nav:hover,
15587
+ .appbar-neutral .appbar-action:hover,
15588
+ .appbar-neutral .appbar-back:hover {
15589
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
15590
+ color: var(--color-neutral);
15591
+ }
15592
+
15593
+ .appbar-neutral .appbar-subtitle {
15594
+ color: var(--color-neutral-content);
15595
+ opacity: 0.8;
15596
+ }
15597
+
15598
+ .appbar-base {
15599
+ background-color: var(--color-base-100);
15600
+ color: var(--color-base-content);
15601
+ }
15602
+
15603
+ .appbar-base .appbar-nav,
15604
+ .appbar-base .appbar-action,
15605
+ .appbar-base .appbar-back {
15606
+ color: var(--color-base-content);
15607
+ }
15608
+
15609
+ .appbar-base .appbar-nav:hover,
15610
+ .appbar-base .appbar-action:hover,
15611
+ .appbar-base .appbar-back:hover {
15612
+ background-color: var(--color-base-200);
15613
+ color: var(--color-base-content);
15614
+ }
15615
+
15616
+ .appbar-base .appbar-subtitle {
15617
+ color: var(--color-base-content);
15618
+ opacity: 0.8;
15619
+ }
15620
+
14088
15621
  .appbar-info {
14089
15622
  background-color: var(--color-info);
14090
15623
  color: var(--color-info-content);
@@ -14481,6 +16014,21 @@ html {
14481
16014
  background-color: var(--color-error);
14482
16015
  }
14483
16016
 
16017
+ .divider-accent::before,
16018
+ .divider-accent::after {
16019
+ background-color: var(--color-accent);
16020
+ }
16021
+
16022
+ .divider-neutral::before,
16023
+ .divider-neutral::after {
16024
+ background-color: var(--color-neutral);
16025
+ }
16026
+
16027
+ .divider-base::before,
16028
+ .divider-base::after {
16029
+ background-color: var(--color-base-content);
16030
+ }
16031
+
14484
16032
  /* ── Gradient Lines ─────────────────────────────────────────────── */
14485
16033
  .divider-gradient::before,
14486
16034
  .divider-gradient::after {
@@ -15228,6 +16776,30 @@ html {
15228
16776
  --circle-menu-item-ring: color-mix(in oklch, var(--color-error) 40%, transparent);
15229
16777
  }
15230
16778
 
16779
+ .circle-menu-accent {
16780
+ --circle-menu-btn-bg: var(--color-accent);
16781
+ --circle-menu-bar-color: var(--color-accent-content);
16782
+ --circle-menu-item-bg: var(--color-accent);
16783
+ --circle-menu-item-color: var(--color-accent-content);
16784
+ --circle-menu-item-ring: color-mix(in oklch, var(--color-accent) 40%, transparent);
16785
+ }
16786
+
16787
+ .circle-menu-neutral {
16788
+ --circle-menu-btn-bg: var(--color-neutral);
16789
+ --circle-menu-bar-color: var(--color-neutral-content);
16790
+ --circle-menu-item-bg: var(--color-neutral);
16791
+ --circle-menu-item-color: var(--color-neutral-content);
16792
+ --circle-menu-item-ring: color-mix(in oklch, var(--color-neutral) 40%, transparent);
16793
+ }
16794
+
16795
+ .circle-menu-base {
16796
+ --circle-menu-btn-bg: var(--color-base-100);
16797
+ --circle-menu-bar-color: var(--color-base-content);
16798
+ --circle-menu-item-bg: var(--color-base-100);
16799
+ --circle-menu-item-color: var(--color-base-content);
16800
+ --circle-menu-item-ring: color-mix(in oklch, var(--color-base-content) 40%, transparent);
16801
+ }
16802
+
15231
16803
  /* === Reduced motion === */
15232
16804
  @media (prefers-reduced-motion: reduce) {
15233
16805
  .circle-menu-label {
@@ -16960,10 +18532,16 @@ html {
16960
18532
 
16961
18533
  .collapse-card .collapse-inner,
16962
18534
  .collapse-card .collapse-content > * {
16963
- padding: 0 1rem 1rem;
16964
18535
  color: var(--color-on-surface-variant);
16965
18536
  }
16966
18537
 
18538
+ .collapse-card.collapse-open .collapse-inner,
18539
+ .collapse-card.collapse-open .collapse-content > *,
18540
+ .collapse-card.show .collapse-inner,
18541
+ .collapse-card.show .collapse-content > * {
18542
+ padding: 0 1rem 1rem;
18543
+ }
18544
+
16967
18545
  /* Bordered Variant */
16968
18546
  .collapse-bordered {
16969
18547
  border: 1px solid var(--color-outline-variant);
@@ -17036,6 +18614,30 @@ html {
17036
18614
  background-color: var(--color-error-container);
17037
18615
  }
17038
18616
 
18617
+ .collapse-accent .collapse-trigger {
18618
+ color: var(--color-accent);
18619
+ }
18620
+
18621
+ .collapse-accent .collapse-trigger:hover {
18622
+ background-color: color-mix(in oklch, var(--color-accent) 15%, var(--color-surface));
18623
+ }
18624
+
18625
+ .collapse-neutral .collapse-trigger {
18626
+ color: var(--color-neutral);
18627
+ }
18628
+
18629
+ .collapse-neutral .collapse-trigger:hover {
18630
+ background-color: color-mix(in oklch, var(--color-neutral) 15%, var(--color-surface));
18631
+ }
18632
+
18633
+ .collapse-base .collapse-trigger {
18634
+ color: var(--color-base-content);
18635
+ }
18636
+
18637
+ .collapse-base .collapse-trigger:hover {
18638
+ background-color: var(--color-base-200);
18639
+ }
18640
+
17039
18641
  /* Size Variants */
17040
18642
  .collapse-sm .collapse-trigger {
17041
18643
  padding: 0.5rem 0.75rem;