@revikornmann/muka-ui 0.13.0 → 0.15.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 (51) hide show
  1. package/dist/cjs/components/ChatMessage/ChatMessage.css +13 -17
  2. package/dist/cjs/components/ChatMessage/ChatMessage.js +12 -15
  3. package/dist/cjs/components/ChatMessage/ChatMessage.js.map +1 -1
  4. package/dist/cjs/components/Input/Input.js +8 -6
  5. package/dist/cjs/components/Input/Input.js.map +1 -1
  6. package/dist/cjs/components/LicensePlateInput/LicensePlateInput.js +10 -5
  7. package/dist/cjs/components/LicensePlateInput/LicensePlateInput.js.map +1 -1
  8. package/dist/cjs/components/NumberInput/NumberInput.js +6 -4
  9. package/dist/cjs/components/NumberInput/NumberInput.js.map +1 -1
  10. package/dist/cjs/components/SearchInput/SearchInput.js +15 -5
  11. package/dist/cjs/components/SearchInput/SearchInput.js.map +1 -1
  12. package/dist/cjs/components/Textarea/Textarea.js +5 -4
  13. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  14. package/dist/cjs/utils/accessibility.js +14 -0
  15. package/dist/cjs/utils/accessibility.js.map +1 -1
  16. package/dist/esm/components/ChatMessage/ChatMessage.css +13 -17
  17. package/dist/esm/components/ChatMessage/ChatMessage.js +12 -15
  18. package/dist/esm/components/ChatMessage/ChatMessage.js.map +1 -1
  19. package/dist/esm/components/Input/Input.js +8 -6
  20. package/dist/esm/components/Input/Input.js.map +1 -1
  21. package/dist/esm/components/LicensePlateInput/LicensePlateInput.js +10 -5
  22. package/dist/esm/components/LicensePlateInput/LicensePlateInput.js.map +1 -1
  23. package/dist/esm/components/NumberInput/NumberInput.js +6 -4
  24. package/dist/esm/components/NumberInput/NumberInput.js.map +1 -1
  25. package/dist/esm/components/SearchInput/SearchInput.js +15 -5
  26. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  27. package/dist/esm/components/Textarea/Textarea.js +5 -4
  28. package/dist/esm/components/Textarea/Textarea.js.map +1 -1
  29. package/dist/esm/utils/accessibility.js +13 -0
  30. package/dist/esm/utils/accessibility.js.map +1 -1
  31. package/dist/styles/components/ChatMessage.css +13 -17
  32. package/dist/styles/index.css +1157 -1161
  33. package/dist/styles/muka-dark.css +1157 -1161
  34. package/dist/styles/muka-light.css +1157 -1161
  35. package/dist/styles/wireframe-dark.css +1157 -1161
  36. package/dist/styles/wireframe-light.css +1157 -1161
  37. package/dist/types/components/ChatMessage/ChatMessage.d.ts +7 -10
  38. package/dist/types/components/ChatMessage/ChatMessage.d.ts.map +1 -1
  39. package/dist/types/components/Input/Input.d.ts +4 -2
  40. package/dist/types/components/Input/Input.d.ts.map +1 -1
  41. package/dist/types/components/LicensePlateInput/LicensePlateInput.d.ts +2 -2
  42. package/dist/types/components/LicensePlateInput/LicensePlateInput.d.ts.map +1 -1
  43. package/dist/types/components/NumberInput/NumberInput.d.ts +2 -2
  44. package/dist/types/components/NumberInput/NumberInput.d.ts.map +1 -1
  45. package/dist/types/components/SearchInput/SearchInput.d.ts +2 -2
  46. package/dist/types/components/SearchInput/SearchInput.d.ts.map +1 -1
  47. package/dist/types/components/Textarea/Textarea.d.ts +2 -2
  48. package/dist/types/components/Textarea/Textarea.d.ts.map +1 -1
  49. package/dist/types/utils/accessibility.d.ts +10 -0
  50. package/dist/types/utils/accessibility.d.ts.map +1 -1
  51. package/package.json +2 -1
@@ -2920,6 +2920,196 @@ body {
2920
2920
  }
2921
2921
 
2922
2922
 
2923
+ /* Toast */
2924
+ /* Toast Component Styles - Using Muka Design Tokens */
2925
+
2926
+ .muka-toast {
2927
+ display: flex;
2928
+ align-items: flex-start;
2929
+ gap: var(--toast-gap);
2930
+ padding: var(--toast-padding-y) var(--toast-padding-x);
2931
+ border-radius: var(--toast-radius);
2932
+ box-shadow: var(--toast-shadow);
2933
+ min-width: var(--toast-width-min);
2934
+ max-width: var(--toast-width-max);
2935
+ pointer-events: auto;
2936
+ animation: muka-toast-slide-in 0.2s ease-out;
2937
+ }
2938
+
2939
+ /* Entry animation */
2940
+ @keyframes muka-toast-slide-in {
2941
+ from {
2942
+ opacity: 0;
2943
+ transform: translateY(8px);
2944
+ }
2945
+ to {
2946
+ opacity: 1;
2947
+ transform: translateY(0);
2948
+ }
2949
+ }
2950
+
2951
+ /* Position variants (for standalone use - typically managed by ToastProvider) */
2952
+ .muka-toast--top-right,
2953
+ .muka-toast--top-left,
2954
+ .muka-toast--top-center,
2955
+ .muka-toast--bottom-right,
2956
+ .muka-toast--bottom-left,
2957
+ .muka-toast--bottom-center {
2958
+ position: fixed;
2959
+ z-index: 9999;
2960
+ }
2961
+
2962
+ .muka-toast--top-right {
2963
+ top: var(--spacing-4);
2964
+ right: var(--spacing-4);
2965
+ }
2966
+
2967
+ .muka-toast--top-left {
2968
+ top: var(--spacing-4);
2969
+ left: var(--spacing-4);
2970
+ }
2971
+
2972
+ .muka-toast--top-center {
2973
+ top: var(--spacing-4);
2974
+ left: 50%;
2975
+ transform: translateX(-50%);
2976
+ }
2977
+
2978
+ .muka-toast--bottom-right {
2979
+ bottom: var(--spacing-4);
2980
+ right: var(--spacing-4);
2981
+ }
2982
+
2983
+ .muka-toast--bottom-left {
2984
+ bottom: var(--spacing-4);
2985
+ left: var(--spacing-4);
2986
+ }
2987
+
2988
+ .muka-toast--bottom-center {
2989
+ bottom: var(--spacing-4);
2990
+ left: 50%;
2991
+ transform: translateX(-50%);
2992
+ }
2993
+
2994
+ /* Variant: Info */
2995
+ .muka-toast--info {
2996
+ background-color: var(--toast-color-info-background);
2997
+ color: var(--toast-color-info-foreground);
2998
+ }
2999
+
3000
+ .muka-toast--info .muka-toast__icon {
3001
+ color: var(--toast-color-info-accent);
3002
+ }
3003
+
3004
+ /* Variant: Success */
3005
+ .muka-toast--success {
3006
+ background-color: var(--toast-color-success-background);
3007
+ color: var(--toast-color-success-foreground);
3008
+ }
3009
+
3010
+ .muka-toast--success .muka-toast__icon {
3011
+ color: var(--toast-color-success-accent);
3012
+ }
3013
+
3014
+ /* Variant: Warning */
3015
+ .muka-toast--warning {
3016
+ background-color: var(--toast-color-warning-background);
3017
+ color: var(--toast-color-warning-foreground);
3018
+ }
3019
+
3020
+ .muka-toast--warning .muka-toast__icon {
3021
+ color: var(--toast-color-warning-accent);
3022
+ }
3023
+
3024
+ /* Variant: Error */
3025
+ .muka-toast--error {
3026
+ background-color: var(--toast-color-error-background);
3027
+ color: var(--toast-color-error-foreground);
3028
+ }
3029
+
3030
+ .muka-toast--error .muka-toast__icon {
3031
+ color: var(--toast-color-error-accent);
3032
+ }
3033
+
3034
+ /* Icon */
3035
+ .muka-toast__icon {
3036
+ display: flex;
3037
+ align-items: center;
3038
+ justify-content: center;
3039
+ flex-shrink: 0;
3040
+ width: var(--toast-icon-size);
3041
+ height: var(--toast-icon-size);
3042
+ }
3043
+
3044
+ .muka-toast__icon svg {
3045
+ width: 100%;
3046
+ height: 100%;
3047
+ }
3048
+
3049
+ /* Content */
3050
+ .muka-toast__content {
3051
+ flex: 1;
3052
+ min-width: 0;
3053
+ }
3054
+
3055
+ .muka-toast__title {
3056
+ font-family: var(--text-label-md-semibold-fontFamily);
3057
+ font-weight: var(--text-label-md-semibold-fontWeight);
3058
+ font-size: var(--text-label-md-semibold-fontSize);
3059
+ line-height: var(--text-label-md-semibold-lineHeight);
3060
+ margin-bottom: var(--spacing-1);
3061
+ }
3062
+
3063
+ .muka-toast__message {
3064
+ font-family: var(--text-body-sm-regular-fontFamily);
3065
+ font-weight: var(--text-body-sm-regular-fontWeight);
3066
+ font-size: var(--text-body-sm-regular-fontSize);
3067
+ line-height: var(--text-body-sm-regular-lineHeight);
3068
+ }
3069
+
3070
+ /* Action slot */
3071
+ .muka-toast__action {
3072
+ display: flex;
3073
+ align-items: center;
3074
+ flex-shrink: 0;
3075
+ }
3076
+
3077
+ /* Dismiss button */
3078
+ .muka-toast__dismiss {
3079
+ display: flex;
3080
+ align-items: center;
3081
+ justify-content: center;
3082
+ flex-shrink: 0;
3083
+ width: 24px;
3084
+ height: 24px;
3085
+ padding: 0;
3086
+ margin: -2px -4px -2px 0;
3087
+ border: none;
3088
+ background: transparent;
3089
+ color: inherit;
3090
+ opacity: 0.7;
3091
+ cursor: pointer;
3092
+ border-radius: var(--border-radius-sm);
3093
+ transition: opacity 0.15s ease, background-color 0.15s ease;
3094
+ }
3095
+
3096
+ .muka-toast__dismiss:hover {
3097
+ opacity: 1;
3098
+ background-color: rgba(0, 0, 0, 0.05);
3099
+ }
3100
+
3101
+ .muka-toast__dismiss:focus-visible {
3102
+ outline: 2px solid var(--color-border-focus);
3103
+ outline-offset: 2px;
3104
+ opacity: 1;
3105
+ }
3106
+
3107
+ .muka-toast__dismiss svg {
3108
+ width: 16px;
3109
+ height: 16px;
3110
+ }
3111
+
3112
+
2923
3113
  /* Tile */
2924
3114
  /* Tile Component Styles - Using Muka Design Tokens */
2925
3115
 
@@ -3281,230 +3471,40 @@ body {
3281
3471
  }
3282
3472
 
3283
3473
 
3284
- /* Toast */
3285
- /* Toast Component Styles - Using Muka Design Tokens */
3474
+ /* Thumbnail */
3475
+ /* Thumbnail Component Styles - Using Muka Design Tokens */
3286
3476
 
3287
- .muka-toast {
3288
- display: flex;
3289
- align-items: flex-start;
3290
- gap: var(--toast-gap);
3291
- padding: var(--toast-padding-y) var(--toast-padding-x);
3292
- border-radius: var(--toast-radius);
3293
- box-shadow: var(--toast-shadow);
3294
- min-width: var(--toast-width-min);
3295
- max-width: var(--toast-width-max);
3296
- pointer-events: auto;
3297
- animation: muka-toast-slide-in 0.2s ease-out;
3477
+ .muka-thumbnail {
3478
+ position: relative;
3479
+ flex-shrink: 0;
3298
3480
  }
3299
3481
 
3300
- /* Entry animation */
3301
- @keyframes muka-toast-slide-in {
3302
- from {
3303
- opacity: 0;
3304
- transform: translateY(8px);
3305
- }
3306
- to {
3307
- opacity: 1;
3308
- transform: translateY(0);
3309
- }
3482
+ /* The frame carries the border, background and shape clip. Keeping it separate
3483
+ from the root lets the remove (×) button sit outside the clip (needed for the
3484
+ circular/ellipse shape, whose corners would otherwise clip the button). */
3485
+ .muka-thumbnail__frame {
3486
+ position: absolute;
3487
+ inset: 0;
3488
+ overflow: hidden;
3489
+ border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3490
+ border-radius: var(--border-radius-lg);
3491
+ background-color: var(--color-surface-level1);
3310
3492
  }
3311
3493
 
3312
- /* Position variants (for standalone use - typically managed by ToastProvider) */
3313
- .muka-toast--top-right,
3314
- .muka-toast--top-left,
3315
- .muka-toast--top-center,
3316
- .muka-toast--bottom-right,
3317
- .muka-toast--bottom-left,
3318
- .muka-toast--bottom-center {
3319
- position: fixed;
3320
- z-index: 9999;
3494
+ /* ─── Shapes ──────────────────────────────────────────── */
3495
+ .muka-thumbnail--4-3 {
3496
+ width: 160px;
3497
+ height: 120px;
3321
3498
  }
3322
3499
 
3323
- .muka-toast--top-right {
3324
- top: var(--spacing-4);
3325
- right: var(--spacing-4);
3500
+ .muka-thumbnail--1-1 {
3501
+ width: 120px;
3502
+ height: 120px;
3326
3503
  }
3327
3504
 
3328
- .muka-toast--top-left {
3329
- top: var(--spacing-4);
3330
- left: var(--spacing-4);
3331
- }
3332
-
3333
- .muka-toast--top-center {
3334
- top: var(--spacing-4);
3335
- left: 50%;
3336
- transform: translateX(-50%);
3337
- }
3338
-
3339
- .muka-toast--bottom-right {
3340
- bottom: var(--spacing-4);
3341
- right: var(--spacing-4);
3342
- }
3343
-
3344
- .muka-toast--bottom-left {
3345
- bottom: var(--spacing-4);
3346
- left: var(--spacing-4);
3347
- }
3348
-
3349
- .muka-toast--bottom-center {
3350
- bottom: var(--spacing-4);
3351
- left: 50%;
3352
- transform: translateX(-50%);
3353
- }
3354
-
3355
- /* Variant: Info */
3356
- .muka-toast--info {
3357
- background-color: var(--toast-color-info-background);
3358
- color: var(--toast-color-info-foreground);
3359
- }
3360
-
3361
- .muka-toast--info .muka-toast__icon {
3362
- color: var(--toast-color-info-accent);
3363
- }
3364
-
3365
- /* Variant: Success */
3366
- .muka-toast--success {
3367
- background-color: var(--toast-color-success-background);
3368
- color: var(--toast-color-success-foreground);
3369
- }
3370
-
3371
- .muka-toast--success .muka-toast__icon {
3372
- color: var(--toast-color-success-accent);
3373
- }
3374
-
3375
- /* Variant: Warning */
3376
- .muka-toast--warning {
3377
- background-color: var(--toast-color-warning-background);
3378
- color: var(--toast-color-warning-foreground);
3379
- }
3380
-
3381
- .muka-toast--warning .muka-toast__icon {
3382
- color: var(--toast-color-warning-accent);
3383
- }
3384
-
3385
- /* Variant: Error */
3386
- .muka-toast--error {
3387
- background-color: var(--toast-color-error-background);
3388
- color: var(--toast-color-error-foreground);
3389
- }
3390
-
3391
- .muka-toast--error .muka-toast__icon {
3392
- color: var(--toast-color-error-accent);
3393
- }
3394
-
3395
- /* Icon */
3396
- .muka-toast__icon {
3397
- display: flex;
3398
- align-items: center;
3399
- justify-content: center;
3400
- flex-shrink: 0;
3401
- width: var(--toast-icon-size);
3402
- height: var(--toast-icon-size);
3403
- }
3404
-
3405
- .muka-toast__icon svg {
3406
- width: 100%;
3407
- height: 100%;
3408
- }
3409
-
3410
- /* Content */
3411
- .muka-toast__content {
3412
- flex: 1;
3413
- min-width: 0;
3414
- }
3415
-
3416
- .muka-toast__title {
3417
- font-family: var(--text-label-md-semibold-fontFamily);
3418
- font-weight: var(--text-label-md-semibold-fontWeight);
3419
- font-size: var(--text-label-md-semibold-fontSize);
3420
- line-height: var(--text-label-md-semibold-lineHeight);
3421
- margin-bottom: var(--spacing-1);
3422
- }
3423
-
3424
- .muka-toast__message {
3425
- font-family: var(--text-body-sm-regular-fontFamily);
3426
- font-weight: var(--text-body-sm-regular-fontWeight);
3427
- font-size: var(--text-body-sm-regular-fontSize);
3428
- line-height: var(--text-body-sm-regular-lineHeight);
3429
- }
3430
-
3431
- /* Action slot */
3432
- .muka-toast__action {
3433
- display: flex;
3434
- align-items: center;
3435
- flex-shrink: 0;
3436
- }
3437
-
3438
- /* Dismiss button */
3439
- .muka-toast__dismiss {
3440
- display: flex;
3441
- align-items: center;
3442
- justify-content: center;
3443
- flex-shrink: 0;
3444
- width: 24px;
3445
- height: 24px;
3446
- padding: 0;
3447
- margin: -2px -4px -2px 0;
3448
- border: none;
3449
- background: transparent;
3450
- color: inherit;
3451
- opacity: 0.7;
3452
- cursor: pointer;
3453
- border-radius: var(--border-radius-sm);
3454
- transition: opacity 0.15s ease, background-color 0.15s ease;
3455
- }
3456
-
3457
- .muka-toast__dismiss:hover {
3458
- opacity: 1;
3459
- background-color: rgba(0, 0, 0, 0.05);
3460
- }
3461
-
3462
- .muka-toast__dismiss:focus-visible {
3463
- outline: 2px solid var(--color-border-focus);
3464
- outline-offset: 2px;
3465
- opacity: 1;
3466
- }
3467
-
3468
- .muka-toast__dismiss svg {
3469
- width: 16px;
3470
- height: 16px;
3471
- }
3472
-
3473
-
3474
- /* Thumbnail */
3475
- /* Thumbnail Component Styles - Using Muka Design Tokens */
3476
-
3477
- .muka-thumbnail {
3478
- position: relative;
3479
- flex-shrink: 0;
3480
- }
3481
-
3482
- /* The frame carries the border, background and shape clip. Keeping it separate
3483
- from the root lets the remove (×) button sit outside the clip (needed for the
3484
- circular/ellipse shape, whose corners would otherwise clip the button). */
3485
- .muka-thumbnail__frame {
3486
- position: absolute;
3487
- inset: 0;
3488
- overflow: hidden;
3489
- border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3490
- border-radius: var(--border-radius-lg);
3491
- background-color: var(--color-surface-level1);
3492
- }
3493
-
3494
- /* ─── Shapes ──────────────────────────────────────────── */
3495
- .muka-thumbnail--4-3 {
3496
- width: 160px;
3497
- height: 120px;
3498
- }
3499
-
3500
- .muka-thumbnail--1-1 {
3501
- width: 120px;
3502
- height: 120px;
3503
- }
3504
-
3505
- .muka-thumbnail--ellipse {
3506
- width: 120px;
3507
- height: 120px;
3505
+ .muka-thumbnail--ellipse {
3506
+ width: 120px;
3507
+ height: 120px;
3508
3508
  }
3509
3509
 
3510
3510
  .muka-thumbnail--ellipse .muka-thumbnail__frame {
@@ -7072,6 +7072,36 @@ body {
7072
7072
  }
7073
7073
 
7074
7074
 
7075
+ /* NumberInput */
7076
+ /* NumberInput — reuses Input field styles (../Input/Input.css). */
7077
+ /* Only the prefix/suffix affixes are NumberInput-specific. */
7078
+
7079
+ .muka-numberinput__addon {
7080
+ display: inline-flex;
7081
+ align-items: center;
7082
+ flex: none;
7083
+ color: var(--color-text-subtle-default);
7084
+ font-family: var(--text-input-md-fontFamily);
7085
+ font-size: var(--text-input-md-fontSize);
7086
+ line-height: var(--text-input-md-lineHeight);
7087
+ user-select: none;
7088
+ pointer-events: none;
7089
+ white-space: nowrap;
7090
+ }
7091
+
7092
+ /* Hide the native number spinners — affixes/step API replace them. */
7093
+ .muka-numberinput__field .muka-input__native::-webkit-outer-spin-button,
7094
+ .muka-numberinput__field .muka-input__native::-webkit-inner-spin-button {
7095
+ -webkit-appearance: none;
7096
+ margin: 0;
7097
+ }
7098
+
7099
+ .muka-numberinput__field .muka-input__native {
7100
+ -moz-appearance: textfield;
7101
+ appearance: textfield;
7102
+ }
7103
+
7104
+
7075
7105
  /* Pagination */
7076
7106
  /* Pagination Component Styles */
7077
7107
 
@@ -7174,36 +7204,6 @@ body {
7174
7204
  }
7175
7205
 
7176
7206
 
7177
- /* NumberInput */
7178
- /* NumberInput — reuses Input field styles (../Input/Input.css). */
7179
- /* Only the prefix/suffix affixes are NumberInput-specific. */
7180
-
7181
- .muka-numberinput__addon {
7182
- display: inline-flex;
7183
- align-items: center;
7184
- flex: none;
7185
- color: var(--color-text-subtle-default);
7186
- font-family: var(--text-input-md-fontFamily);
7187
- font-size: var(--text-input-md-fontSize);
7188
- line-height: var(--text-input-md-lineHeight);
7189
- user-select: none;
7190
- pointer-events: none;
7191
- white-space: nowrap;
7192
- }
7193
-
7194
- /* Hide the native number spinners — affixes/step API replace them. */
7195
- .muka-numberinput__field .muka-input__native::-webkit-outer-spin-button,
7196
- .muka-numberinput__field .muka-input__native::-webkit-inner-spin-button {
7197
- -webkit-appearance: none;
7198
- margin: 0;
7199
- }
7200
-
7201
- .muka-numberinput__field .muka-input__native {
7202
- -moz-appearance: textfield;
7203
- appearance: textfield;
7204
- }
7205
-
7206
-
7207
7207
  /* NavigationTransition */
7208
7208
  /* NavigationTransition Component Styles */
7209
7209
 
@@ -8159,6 +8159,26 @@ li.muka-listitem {
8159
8159
  }
8160
8160
 
8161
8161
 
8162
+ /* Form */
8163
+ .muka-form {
8164
+ display: flex;
8165
+ flex-direction: column;
8166
+ width: 100%;
8167
+ }
8168
+
8169
+ .muka-form--gap-sm {
8170
+ gap: var(--size-sm);
8171
+ }
8172
+
8173
+ .muka-form--gap-md {
8174
+ gap: var(--size-md);
8175
+ }
8176
+
8177
+ .muka-form--gap-lg {
8178
+ gap: var(--size-lg);
8179
+ }
8180
+
8181
+
8162
8182
  /* Icon */
8163
8183
  /* Icon Component Styles - Using Muka Design Tokens */
8164
8184
 
@@ -8213,26 +8233,6 @@ li.muka-listitem {
8213
8233
  }
8214
8234
 
8215
8235
 
8216
- /* Form */
8217
- .muka-form {
8218
- display: flex;
8219
- flex-direction: column;
8220
- width: 100%;
8221
- }
8222
-
8223
- .muka-form--gap-sm {
8224
- gap: var(--size-sm);
8225
- }
8226
-
8227
- .muka-form--gap-md {
8228
- gap: var(--size-md);
8229
- }
8230
-
8231
- .muka-form--gap-lg {
8232
- gap: var(--size-lg);
8233
- }
8234
-
8235
-
8236
8236
  /* FileUpload */
8237
8237
  /* FileUpload Component Styles */
8238
8238
 
@@ -11099,11 +11099,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
11099
11099
  grid-template-areas: 'rail bubble';
11100
11100
  }
11101
11101
 
11102
- .muka-chat-message--own.muka-chat-message--has-avatar .muka-chat-message__row {
11103
- grid-template-columns: minmax(0, 1fr) auto;
11104
- grid-template-areas: 'bubble rail';
11105
- }
11106
-
11107
11102
  .muka-chat-message__rail {
11108
11103
  grid-area: rail;
11109
11104
  /* Sits on the bubble's baseline (Figma 5355:44091) */
@@ -11138,6 +11133,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
11138
11133
 
11139
11134
  .muka-chat-message__bubble {
11140
11135
  grid-area: bubble;
11136
+ /*
11137
+ * Width follows the content: a single line hugs, and once the text wraps the
11138
+ * bubble fills to the shared max width. Robust to string or rich children —
11139
+ * no length measuring needed (Figma `Text length` on 5355:44091).
11140
+ */
11141
+ width: fit-content;
11141
11142
  max-width: var(--chatbubble-max-width);
11142
11143
  position: relative;
11143
11144
  display: flex;
@@ -11150,18 +11151,11 @@ button.muka-chat-photo-grid__tile:focus-visible {
11150
11151
  word-break: break-word;
11151
11152
  }
11152
11153
 
11153
- /*
11154
- * Length axis (Figma `Text length` on 5355:44091): short messages hug their
11155
- * content, long ones fill the row up to the shared max width.
11156
- */
11157
- .muka-chat-message--long .muka-chat-message__bubble {
11154
+ /* Media, an embed or an action stack always run the full bubble width. */
11155
+ .muka-chat-message--has-blocks .muka-chat-message__bubble {
11158
11156
  width: 100%;
11159
11157
  }
11160
11158
 
11161
- .muka-chat-message--short .muka-chat-message__bubble {
11162
- width: fit-content;
11163
- }
11164
-
11165
11159
  .muka-chat-message--own .muka-chat-message__bubble {
11166
11160
  justify-self: end;
11167
11161
  }
@@ -11339,10 +11333,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
11339
11333
  }
11340
11334
 
11341
11335
  /*
11342
- * Media, an embed or an action stack run the full width of the bubble, so the
11343
- * corner the timestamp sits in has to be cleared for it.
11336
+ * When the last block in the body is media, an embed or an action stack (not
11337
+ * trailing text), it runs the full width, so reserve a line below for the inset
11338
+ * timestamp. A message that ends in text clears the corner inline instead (see
11339
+ * `__message` padding-right above), so it needs no extra bottom space.
11344
11340
  */
11345
- .muka-chat-message--has-timestamp.muka-chat-message--has-blocks .muka-chat-message__body {
11341
+ .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
11346
11342
  padding-bottom: var(--text-body-xs-regular-lineHeight);
11347
11343
  }
11348
11344
 
@@ -11405,6 +11401,134 @@ button.muka-chat-photo-grid__tile:focus-visible {
11405
11401
  }
11406
11402
 
11407
11403
 
11404
+ /* ChatComposer */
11405
+ /* ChatComposer Component Styles */
11406
+
11407
+ /*
11408
+ * The composer is a bare, fill-width row: no padding, background, border or
11409
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
11410
+ * container — see BottomBar's `chat` variant.
11411
+ */
11412
+ .muka-chat-composer {
11413
+ display: flex;
11414
+ flex-direction: column;
11415
+ gap: var(--spacing-3);
11416
+ width: 100%;
11417
+ }
11418
+
11419
+ .muka-chat-composer--disabled {
11420
+ opacity: 0.6;
11421
+ pointer-events: none;
11422
+ }
11423
+
11424
+ /* ─── Input row ────────────────────────────────────────── */
11425
+
11426
+ .muka-chat-composer__row {
11427
+ display: flex;
11428
+ width: 100%;
11429
+ align-items: flex-end;
11430
+ gap: var(--spacing-3);
11431
+ }
11432
+
11433
+ /* ─── Text field ───────────────────────────────────────── */
11434
+
11435
+ .muka-chat-composer__field {
11436
+ display: flex;
11437
+ flex: 1 1 auto;
11438
+ min-width: 0;
11439
+ box-sizing: border-box;
11440
+ align-items: center;
11441
+ gap: var(--spacing-1);
11442
+ min-height: var(--input-field-height-lg, 48px);
11443
+ padding: 0 var(--spacing-2);
11444
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
11445
+ border-radius: var(--input-field-radius-lg);
11446
+ background-color: var(--input-field-color-default-background);
11447
+ transition: border-color 0.12s ease;
11448
+ }
11449
+
11450
+ .muka-chat-composer__field:focus-within {
11451
+ border-color: var(--input-field-color-focus-border, var(--color-action-default));
11452
+ }
11453
+
11454
+ .muka-chat-composer__input {
11455
+ flex: 1 1 auto;
11456
+ min-width: 0;
11457
+ width: 100%;
11458
+ box-sizing: border-box;
11459
+ resize: none;
11460
+ border: none;
11461
+ background: transparent;
11462
+ outline: none;
11463
+ padding: 0 var(--spacing-1);
11464
+ color: var(--color-text-default-default);
11465
+ font-family: var(--text-body-base-regular-fontFamily);
11466
+ font-weight: var(--text-body-base-regular-fontWeight);
11467
+ font-size: var(--text-body-base-regular-fontSize);
11468
+ line-height: var(--text-body-base-regular-lineHeight);
11469
+ appearance: none;
11470
+ -webkit-appearance: none;
11471
+ }
11472
+
11473
+ .muka-chat-composer__input::placeholder {
11474
+ color: var(--color-text-subtle-default);
11475
+ }
11476
+
11477
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
11478
+ .muka-chat-composer__emoji {
11479
+ flex-shrink: 0;
11480
+ }
11481
+
11482
+ /* ─── Recording bar ────────────────────────────────────── */
11483
+
11484
+ .muka-chat-composer__recording {
11485
+ display: flex;
11486
+ flex: 1 1 auto;
11487
+ min-width: 0;
11488
+ box-sizing: border-box;
11489
+ align-items: center;
11490
+ min-height: var(--input-field-height-lg, 48px);
11491
+ padding: var(--card-padding-sm);
11492
+ border: var(--border-width-regular) solid var(--card-color-default-border);
11493
+ border-radius: var(--radius-lg);
11494
+ background-color: var(--card-color-default-background);
11495
+ }
11496
+
11497
+ /* ─── Staged attachments strip ─────────────────────────── */
11498
+
11499
+ .muka-chat-composer__attachments-strip {
11500
+ position: relative;
11501
+ width: 100%;
11502
+ }
11503
+
11504
+ .muka-chat-composer__attachments {
11505
+ display: flex;
11506
+ gap: var(--spacing-3);
11507
+ overflow-x: auto;
11508
+ scroll-behavior: smooth;
11509
+ scrollbar-width: none;
11510
+ }
11511
+
11512
+ .muka-chat-composer__attachments::-webkit-scrollbar {
11513
+ display: none;
11514
+ }
11515
+
11516
+ .muka-chat-composer__overflow {
11517
+ position: absolute;
11518
+ top: 50%;
11519
+ right: var(--spacing-2);
11520
+ transform: translateY(-50%);
11521
+ }
11522
+
11523
+ /* ─── Print ────────────────────────────────────────────── */
11524
+
11525
+ @media print {
11526
+ .muka-chat-composer {
11527
+ display: none;
11528
+ }
11529
+ }
11530
+
11531
+
11408
11532
  /* ChatAttachmentChip */
11409
11533
  /* ChatAttachmentChip Component Styles */
11410
11534
 
@@ -11672,232 +11796,419 @@ button.muka-chat-photo-grid__tile:focus-visible {
11672
11796
  }
11673
11797
 
11674
11798
 
11675
- /* ChatComposer */
11676
- /* ChatComposer Component Styles */
11799
+ /* Button */
11800
+ /* Button Component Styles - Using Muka Design Tokens */
11677
11801
 
11678
- /*
11679
- * The composer is a bare, fill-width row: no padding, background, border or
11680
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
11681
- * container — see BottomBar's `chat` variant.
11682
- */
11683
- .muka-chat-composer {
11684
- display: flex;
11685
- flex-direction: column;
11686
- gap: var(--spacing-3);
11687
- width: 100%;
11802
+ /* Base button styles */
11803
+ .muka-button {
11804
+ /* Layout */
11805
+ display: inline-flex;
11806
+ align-items: center;
11807
+ justify-content: center;
11808
+
11809
+ /* Typography - using semantic tokens */
11810
+ font-family: var(--alias-font-brand-family);
11811
+ font-weight: var(--alias-font-brand-weight-semibold);
11812
+ text-decoration: none;
11813
+
11814
+ /* Interaction */
11815
+ border: none;
11816
+ cursor: pointer;
11817
+ user-select: none;
11818
+ transition: all 0.2s ease;
11819
+
11820
+ /* Accessibility */
11821
+ outline: none;
11822
+ position: relative;
11688
11823
  }
11689
11824
 
11690
- .muka-chat-composer--disabled {
11691
- opacity: 0.6;
11692
- pointer-events: none;
11825
+ /* Focus styles for accessibility */
11826
+ .muka-button:focus-visible {
11827
+ outline: 2px solid var(--color-border-focus);
11828
+ outline-offset: 2px;
11693
11829
  }
11694
11830
 
11695
- /* ─── Input row ────────────────────────────────────────── */
11831
+ /* Size variants
11832
+ Height is driven by min-height; vertical padding is 0 and the label carries
11833
+ tight (Figma) line-height. Horizontal spacing matches Figma's nested model:
11834
+ the button's padding is the outer container inset, and the label's own
11835
+ padding is the icon-to-text gap (so text-only buttons keep both insets). */
11836
+ .muka-button--sm {
11837
+ padding: 0 var(--button-padding-sm-x);
11838
+ border-radius: var(--button-radius-sm);
11839
+ font-size: var(--text-label-sm-semibold-fontSize);
11840
+ line-height: var(--text-label-sm-semibold-lineHeight);
11841
+ min-height: 32px;
11842
+ }
11696
11843
 
11697
- .muka-chat-composer__row {
11698
- display: flex;
11699
- width: 100%;
11700
- align-items: flex-end;
11701
- gap: var(--spacing-3);
11844
+ .muka-button--sm .muka-button__label {
11845
+ padding: 0 var(--button-gap-sm);
11702
11846
  }
11703
11847
 
11704
- /* ─── Text field ───────────────────────────────────────── */
11848
+ .muka-button--md {
11849
+ padding: 0 var(--button-padding-md-x);
11850
+ border-radius: var(--button-radius-md);
11851
+ font-size: var(--text-label-sm-semibold-fontSize);
11852
+ line-height: var(--text-label-sm-semibold-lineHeight);
11853
+ min-height: 40px;
11854
+ }
11705
11855
 
11706
- .muka-chat-composer__field {
11707
- display: flex;
11708
- flex: 1 1 auto;
11709
- min-width: 0;
11710
- box-sizing: border-box;
11711
- align-items: center;
11712
- gap: var(--spacing-1);
11713
- min-height: var(--input-field-height-lg, 48px);
11714
- padding: 0 var(--spacing-2);
11715
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
11716
- border-radius: var(--input-field-radius-lg);
11717
- background-color: var(--input-field-color-default-background);
11718
- transition: border-color 0.12s ease;
11856
+ .muka-button--md .muka-button__label {
11857
+ padding: 0 var(--button-gap-md);
11719
11858
  }
11720
11859
 
11721
- .muka-chat-composer__field:focus-within {
11722
- border-color: var(--input-field-color-focus-border, var(--color-action-default));
11860
+ .muka-button--lg {
11861
+ padding: 0 var(--button-padding-lg-x);
11862
+ border-radius: var(--button-radius-lg);
11863
+ font-size: var(--text-label-lg-semibold-fontSize);
11864
+ line-height: var(--text-label-lg-semibold-lineHeight);
11865
+ min-height: 48px;
11723
11866
  }
11724
11867
 
11725
- .muka-chat-composer__input {
11726
- flex: 1 1 auto;
11727
- min-width: 0;
11728
- width: 100%;
11729
- box-sizing: border-box;
11730
- resize: none;
11731
- border: none;
11732
- background: transparent;
11733
- outline: none;
11734
- padding: 0 var(--spacing-1);
11735
- color: var(--color-text-default-default);
11736
- font-family: var(--text-body-base-regular-fontFamily);
11737
- font-weight: var(--text-body-base-regular-fontWeight);
11738
- font-size: var(--text-body-base-regular-fontSize);
11739
- line-height: var(--text-body-base-regular-lineHeight);
11740
- appearance: none;
11741
- -webkit-appearance: none;
11868
+ .muka-button--lg .muka-button__label {
11869
+ padding: 0 var(--button-gap-lg);
11742
11870
  }
11743
11871
 
11744
- .muka-chat-composer__input::placeholder {
11745
- color: var(--color-text-subtle-default);
11872
+ .muka-button--xl {
11873
+ padding: 0 var(--button-padding-xl-x);
11874
+ border-radius: var(--button-radius-xl);
11875
+ font-size: var(--text-label-2xl-semibold-fontSize);
11876
+ line-height: var(--text-label-2xl-semibold-lineHeight);
11877
+ min-height: 64px;
11746
11878
  }
11747
11879
 
11748
- /* Keep the in-field emoji button flush to the bottom-right as the field grows */
11749
- .muka-chat-composer__emoji {
11750
- flex-shrink: 0;
11880
+ .muka-button--xl .muka-button__label {
11881
+ padding: 0 var(--button-gap-xl);
11751
11882
  }
11752
11883
 
11753
- /* ─── Recording bar ────────────────────────────────────── */
11754
-
11755
- .muka-chat-composer__recording {
11756
- display: flex;
11757
- flex: 1 1 auto;
11758
- min-width: 0;
11759
- box-sizing: border-box;
11760
- align-items: center;
11761
- min-height: var(--input-field-height-lg, 48px);
11762
- padding: var(--card-padding-sm);
11763
- border: var(--border-width-regular) solid var(--card-color-default-border);
11764
- border-radius: var(--radius-lg);
11765
- background-color: var(--card-color-default-background);
11884
+ /* Primary variant - your main CTA button */
11885
+ .muka-button--primary {
11886
+ background-color: var(--button-color-primary-background-default);
11887
+ color: var(--button-color-primary-foreground-default);
11888
+ box-shadow: var(--button-color-primary-shadow-default);
11766
11889
  }
11767
11890
 
11768
- /* ─── Staged attachments strip ─────────────────────────── */
11769
-
11770
- .muka-chat-composer__attachments-strip {
11771
- position: relative;
11772
- width: 100%;
11891
+ .muka-button--primary:hover:not(:disabled) {
11892
+ background-color: var(--button-color-primary-background-hover);
11893
+ color: var(--button-color-primary-foreground-hover);
11894
+ box-shadow: var(--button-color-primary-shadow-hover);
11773
11895
  }
11774
11896
 
11775
- .muka-chat-composer__attachments {
11776
- display: flex;
11777
- gap: var(--spacing-3);
11778
- overflow-x: auto;
11779
- scroll-behavior: smooth;
11780
- scrollbar-width: none;
11897
+ /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
11898
+ trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
11899
+ gives toggle buttons a visible selected state, so the toggle is not conveyed
11900
+ to sighted users by the accessibility tree alone. */
11901
+ .muka-button--primary:active:not(:disabled),
11902
+ .muka-button--primary.muka-button--pressed:not(:disabled),
11903
+ .muka-button--primary[data-state="open"]:not(:disabled),
11904
+ .muka-button--primary[aria-pressed="true"]:not(:disabled) {
11905
+ background-color: var(--button-color-primary-background-pressed);
11906
+ color: var(--button-color-primary-foreground-pressed);
11907
+ box-shadow: var(--button-color-primary-shadow-pressed);
11781
11908
  }
11782
11909
 
11783
- .muka-chat-composer__attachments::-webkit-scrollbar {
11784
- display: none;
11910
+ .muka-button--primary:disabled {
11911
+ background-color: var(--button-color-primary-background-disabled);
11912
+ color: var(--button-color-primary-foreground-disabled);
11913
+ box-shadow: var(--button-color-primary-shadow-disabled);
11914
+ cursor: not-allowed;
11915
+ opacity: 1; /* Remove opacity since we have proper disabled tokens */
11785
11916
  }
11786
11917
 
11787
- .muka-chat-composer__overflow {
11788
- position: absolute;
11789
- top: 50%;
11790
- right: var(--spacing-2);
11791
- transform: translateY(-50%);
11918
+ /* Secondary variant - supporting actions, no border, only bottom inner shadow */
11919
+ .muka-button--secondary {
11920
+ background-color: var(--button-color-secondary-background-default);
11921
+ color: var(--button-color-secondary-foreground-default);
11922
+ box-shadow: var(--button-color-secondary-shadow-default);
11792
11923
  }
11793
11924
 
11794
- /* ─── Print ────────────────────────────────────────────── */
11795
-
11796
- @media print {
11797
- .muka-chat-composer {
11798
- display: none;
11799
- }
11925
+ .muka-button--secondary:hover:not(:disabled) {
11926
+ background-color: var(--button-color-secondary-background-hover);
11927
+ color: var(--button-color-secondary-foreground-hover);
11928
+ box-shadow: var(--button-color-secondary-shadow-hover);
11800
11929
  }
11801
11930
 
11802
-
11803
- /* Breadcrumb */
11804
- /* Breadcrumb Component Styles */
11805
-
11806
- .muka-breadcrumb__list {
11807
- display: flex;
11808
- align-items: center;
11809
- flex-wrap: wrap;
11810
- list-style: none;
11811
- margin: 0;
11812
- padding: 0;
11813
- gap: var(--spacing-1);
11931
+ .muka-button--secondary:active:not(:disabled),
11932
+ .muka-button--secondary.muka-button--pressed:not(:disabled),
11933
+ .muka-button--secondary[data-state="open"]:not(:disabled),
11934
+ .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
11935
+ background-color: var(--button-color-secondary-background-pressed);
11936
+ color: var(--button-color-secondary-foreground-pressed);
11937
+ box-shadow: var(--button-color-secondary-shadow-pressed);
11814
11938
  }
11815
11939
 
11816
- .muka-breadcrumb__item {
11817
- display: inline-flex;
11818
- align-items: center;
11819
- gap: var(--spacing-1);
11940
+ .muka-button--secondary:disabled {
11941
+ background-color: var(--button-color-secondary-background-disabled);
11942
+ color: var(--button-color-secondary-foreground-disabled);
11943
+ box-shadow: var(--button-color-secondary-shadow-disabled);
11944
+ cursor: not-allowed;
11945
+ opacity: 1;
11820
11946
  }
11821
11947
 
11822
- .muka-breadcrumb__icon {
11823
- display: inline-flex;
11824
- align-items: center;
11825
- color: var(--color-text-subtle-default);
11948
+ /* Tertiary variant - tinted background with accent text and border */
11949
+ .muka-button--tertiary {
11950
+ background-color: var(--button-color-tertiary-background-default);
11951
+ color: var(--button-color-tertiary-foreground-default);
11952
+ border: 1px solid var(--button-color-tertiary-border-default);
11826
11953
  }
11827
11954
 
11828
- /* Link styles */
11829
- .muka-breadcrumb__link {
11830
- color: var(--color-text-subtle-default);
11831
- text-decoration: none;
11832
- border: none;
11833
- background: none;
11834
- padding: 0;
11835
- cursor: pointer;
11836
- font: inherit;
11837
- transition: color 0.15s ease;
11955
+ .muka-button--tertiary:hover:not(:disabled) {
11956
+ background-color: var(--button-color-tertiary-background-hover);
11957
+ color: var(--button-color-tertiary-foreground-hover);
11958
+ border-color: var(--button-color-tertiary-border-hover);
11838
11959
  }
11839
11960
 
11840
- .muka-breadcrumb__link:hover {
11841
- color: var(--color-text-action-default);
11842
- text-decoration: underline;
11961
+ .muka-button--tertiary:active:not(:disabled),
11962
+ .muka-button--tertiary.muka-button--pressed:not(:disabled),
11963
+ .muka-button--tertiary[data-state="open"]:not(:disabled),
11964
+ .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
11965
+ background-color: var(--button-color-tertiary-background-pressed);
11966
+ color: var(--button-color-tertiary-foreground-pressed);
11967
+ border-color: var(--button-color-tertiary-border-pressed);
11843
11968
  }
11844
11969
 
11845
- /* Current page (last item) */
11846
- .muka-breadcrumb__current {
11847
- color: var(--color-text-default-default);
11848
- font-weight: 600;
11970
+ .muka-button--tertiary:disabled {
11971
+ background-color: var(--button-color-tertiary-background-disabled);
11972
+ color: var(--button-color-tertiary-foreground-disabled);
11973
+ border-color: var(--button-color-tertiary-border-disabled);
11974
+ cursor: not-allowed;
11975
+ opacity: 1;
11849
11976
  }
11850
11977
 
11851
- /* Separator */
11852
- .muka-breadcrumb__separator {
11853
- color: var(--color-text-subtle-default);
11854
- user-select: none;
11978
+ /* Ghost variant - minimal styling, border appears on hover */
11979
+ .muka-button--ghost {
11980
+ background-color: var(--button-color-ghost-background-default);
11981
+ color: var(--button-color-ghost-foreground-default);
11982
+ border: 1px solid var(--button-color-ghost-border-default);
11855
11983
  }
11856
11984
 
11857
- /* Ellipsis */
11858
- .muka-breadcrumb__ellipsis {
11859
- color: var(--color-text-subtle-default);
11985
+ .muka-button--ghost:hover:not(:disabled) {
11986
+ background-color: var(--button-color-ghost-background-hover);
11987
+ color: var(--button-color-ghost-foreground-hover);
11988
+ border-color: var(--button-color-ghost-border-hover);
11860
11989
  }
11861
11990
 
11862
- /* Size variants */
11863
- .muka-breadcrumb--sm {
11864
- font-family: var(--text-label-sm-regular-fontFamily);
11865
- font-weight: var(--text-label-sm-regular-fontWeight);
11866
- font-size: var(--text-label-sm-regular-fontSize);
11867
- line-height: var(--text-label-sm-regular-lineHeight);
11991
+ .muka-button--ghost:active:not(:disabled),
11992
+ .muka-button--ghost.muka-button--pressed:not(:disabled),
11993
+ .muka-button--ghost[data-state="open"]:not(:disabled),
11994
+ .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
11995
+ background-color: var(--button-color-ghost-background-pressed);
11996
+ color: var(--button-color-ghost-foreground-pressed);
11997
+ border-color: var(--button-color-ghost-border-pressed);
11868
11998
  }
11869
11999
 
11870
- .muka-breadcrumb--md {
11871
- font-family: var(--text-label-md-regular-fontFamily);
11872
- font-weight: var(--text-label-md-regular-fontWeight);
11873
- font-size: var(--text-label-md-regular-fontSize);
11874
- line-height: var(--text-label-md-regular-lineHeight);
12000
+ .muka-button--ghost:disabled {
12001
+ background-color: var(--button-color-ghost-background-disabled);
12002
+ color: var(--button-color-ghost-foreground-disabled);
12003
+ border-color: var(--button-color-ghost-border-disabled);
12004
+ cursor: not-allowed;
12005
+ opacity: 1;
11875
12006
  }
11876
12007
 
11877
- .muka-breadcrumb--lg {
11878
- font-family: var(--text-label-lg-regular-fontFamily);
11879
- font-weight: var(--text-label-lg-regular-fontWeight);
11880
- font-size: var(--text-label-lg-regular-fontSize);
11881
- line-height: var(--text-label-lg-regular-lineHeight);
12008
+ /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
12009
+ .muka-button--muted {
12010
+ background-color: var(--button-color-muted-background-default);
12011
+ color: var(--button-color-muted-foreground-default);
12012
+ border: 1px solid var(--button-color-muted-border-default);
11882
12013
  }
11883
12014
 
12015
+ .muka-button--muted:hover:not(:disabled) {
12016
+ background-color: var(--button-color-muted-background-hover);
12017
+ color: var(--button-color-muted-foreground-hover);
12018
+ border-color: var(--button-color-muted-border-hover);
12019
+ }
11884
12020
 
11885
- /* BottomBar */
11886
- /* BottomBar Component Styles */
12021
+ .muka-button--muted:active:not(:disabled),
12022
+ .muka-button--muted.muka-button--pressed:not(:disabled),
12023
+ .muka-button--muted[data-state="open"]:not(:disabled),
12024
+ .muka-button--muted[aria-pressed="true"]:not(:disabled) {
12025
+ background-color: var(--button-color-muted-background-pressed);
12026
+ color: var(--button-color-muted-foreground-pressed);
12027
+ border-color: var(--button-color-muted-border-pressed);
12028
+ }
11887
12029
 
11888
- .muka-bottombar {
11889
- width: 100%;
11890
- background-color: var(--bottombar-color-background);
12030
+ .muka-button--muted:disabled {
12031
+ background-color: var(--button-color-muted-background-disabled);
12032
+ color: var(--button-color-muted-foreground-disabled);
12033
+ border-color: var(--button-color-muted-border-disabled);
12034
+ cursor: not-allowed;
12035
+ opacity: 1;
11891
12036
  }
11892
12037
 
11893
- /* Push content above the iPhone home indicator. Opt out via disableSafeArea. */
11894
- .muka-bottombar:not(.muka-bottombar--floating):not(.muka-bottombar--no-safe-area) {
11895
- padding-bottom: env(safe-area-inset-bottom);
12038
+ /* General disabled state - fallback */
12039
+ .muka-button:disabled {
12040
+ cursor: not-allowed;
12041
+ pointer-events: none;
11896
12042
  }
11897
12043
 
11898
- /* Floating variant: ensure margin-bottom is at least the safe-area inset. */
11899
- .muka-bottombar--floating:not(.muka-bottombar--no-safe-area) {
11900
- padding-bottom: max(var(--bottombar-floating-margin-bottom), env(safe-area-inset-bottom));
12044
+ /* Full width modifier */
12045
+ .muka-button--full-width {
12046
+ width: 100%;
12047
+ }
12048
+
12049
+ /* Icons - forced to the Figma per-size dimension regardless of the icon passed */
12050
+ .muka-button__icon {
12051
+ display: inline-flex;
12052
+ align-items: center;
12053
+ justify-content: center;
12054
+ flex-shrink: 0;
12055
+ }
12056
+
12057
+ /* Make the icon content (raw <svg> or a nested Icon span) fill the wrapper.
12058
+ Scoped under .muka-button to outrank Icon.css's own `.muka-icon--{size}`
12059
+ rule, so the button's size wins even when the icon hardcodes its own size. */
12060
+ .muka-button .muka-button__icon > *,
12061
+ .muka-button .muka-button__icon svg {
12062
+ width: 100%;
12063
+ height: 100%;
12064
+ display: block;
12065
+ }
12066
+
12067
+ .muka-button--sm .muka-button__icon {
12068
+ width: var(--button-icon-sm);
12069
+ height: var(--button-icon-sm);
12070
+ }
12071
+
12072
+ .muka-button--md .muka-button__icon {
12073
+ width: var(--button-icon-md);
12074
+ height: var(--button-icon-md);
12075
+ }
12076
+
12077
+ .muka-button--lg .muka-button__icon {
12078
+ width: var(--button-icon-lg);
12079
+ height: var(--button-icon-lg);
12080
+ }
12081
+
12082
+ .muka-button--xl .muka-button__icon {
12083
+ width: var(--button-icon-xl);
12084
+ height: var(--button-icon-xl);
12085
+ }
12086
+
12087
+ .muka-button__label {
12088
+ display: inline-flex;
12089
+ align-items: center;
12090
+ }
12091
+
12092
+ /* Icon-only buttons - square, sized to the button height per size */
12093
+ .muka-button--icon-only {
12094
+ padding: 0;
12095
+ }
12096
+
12097
+ .muka-button--icon-only.muka-button--sm {
12098
+ width: 32px;
12099
+ }
12100
+
12101
+ .muka-button--icon-only.muka-button--md {
12102
+ width: 40px;
12103
+ }
12104
+
12105
+ .muka-button--icon-only.muka-button--lg {
12106
+ width: 48px;
12107
+ }
12108
+
12109
+ .muka-button--icon-only.muka-button--xl {
12110
+ width: 64px;
12111
+ }
12112
+
12113
+
12114
+ /* Breadcrumb */
12115
+ /* Breadcrumb Component Styles */
12116
+
12117
+ .muka-breadcrumb__list {
12118
+ display: flex;
12119
+ align-items: center;
12120
+ flex-wrap: wrap;
12121
+ list-style: none;
12122
+ margin: 0;
12123
+ padding: 0;
12124
+ gap: var(--spacing-1);
12125
+ }
12126
+
12127
+ .muka-breadcrumb__item {
12128
+ display: inline-flex;
12129
+ align-items: center;
12130
+ gap: var(--spacing-1);
12131
+ }
12132
+
12133
+ .muka-breadcrumb__icon {
12134
+ display: inline-flex;
12135
+ align-items: center;
12136
+ color: var(--color-text-subtle-default);
12137
+ }
12138
+
12139
+ /* Link styles */
12140
+ .muka-breadcrumb__link {
12141
+ color: var(--color-text-subtle-default);
12142
+ text-decoration: none;
12143
+ border: none;
12144
+ background: none;
12145
+ padding: 0;
12146
+ cursor: pointer;
12147
+ font: inherit;
12148
+ transition: color 0.15s ease;
12149
+ }
12150
+
12151
+ .muka-breadcrumb__link:hover {
12152
+ color: var(--color-text-action-default);
12153
+ text-decoration: underline;
12154
+ }
12155
+
12156
+ /* Current page (last item) */
12157
+ .muka-breadcrumb__current {
12158
+ color: var(--color-text-default-default);
12159
+ font-weight: 600;
12160
+ }
12161
+
12162
+ /* Separator */
12163
+ .muka-breadcrumb__separator {
12164
+ color: var(--color-text-subtle-default);
12165
+ user-select: none;
12166
+ }
12167
+
12168
+ /* Ellipsis */
12169
+ .muka-breadcrumb__ellipsis {
12170
+ color: var(--color-text-subtle-default);
12171
+ }
12172
+
12173
+ /* Size variants */
12174
+ .muka-breadcrumb--sm {
12175
+ font-family: var(--text-label-sm-regular-fontFamily);
12176
+ font-weight: var(--text-label-sm-regular-fontWeight);
12177
+ font-size: var(--text-label-sm-regular-fontSize);
12178
+ line-height: var(--text-label-sm-regular-lineHeight);
12179
+ }
12180
+
12181
+ .muka-breadcrumb--md {
12182
+ font-family: var(--text-label-md-regular-fontFamily);
12183
+ font-weight: var(--text-label-md-regular-fontWeight);
12184
+ font-size: var(--text-label-md-regular-fontSize);
12185
+ line-height: var(--text-label-md-regular-lineHeight);
12186
+ }
12187
+
12188
+ .muka-breadcrumb--lg {
12189
+ font-family: var(--text-label-lg-regular-fontFamily);
12190
+ font-weight: var(--text-label-lg-regular-fontWeight);
12191
+ font-size: var(--text-label-lg-regular-fontSize);
12192
+ line-height: var(--text-label-lg-regular-lineHeight);
12193
+ }
12194
+
12195
+
12196
+ /* BottomBar */
12197
+ /* BottomBar Component Styles */
12198
+
12199
+ .muka-bottombar {
12200
+ width: 100%;
12201
+ background-color: var(--bottombar-color-background);
12202
+ }
12203
+
12204
+ /* Push content above the iPhone home indicator. Opt out via disableSafeArea. */
12205
+ .muka-bottombar:not(.muka-bottombar--floating):not(.muka-bottombar--no-safe-area) {
12206
+ padding-bottom: env(safe-area-inset-bottom);
12207
+ }
12208
+
12209
+ /* Floating variant: ensure margin-bottom is at least the safe-area inset. */
12210
+ .muka-bottombar--floating:not(.muka-bottombar--no-safe-area) {
12211
+ padding-bottom: max(var(--bottombar-floating-margin-bottom), env(safe-area-inset-bottom));
11901
12212
  }
11902
12213
 
11903
12214
  /* ─── Divider (non-floating) ──────────────────────────── */
@@ -12294,318 +12605,187 @@ button.muka-chat-photo-grid__tile:focus-visible {
12294
12605
  }
12295
12606
 
12296
12607
 
12297
- /* Button */
12298
- /* Button Component Styles - Using Muka Design Tokens */
12608
+ /* Badge */
12609
+ /* Badge Component Styles - Using Muka Design Tokens */
12299
12610
 
12300
- /* Base button styles */
12301
- .muka-button {
12302
- /* Layout */
12611
+ .muka-badge {
12303
12612
  display: inline-flex;
12304
12613
  align-items: center;
12305
- justify-content: center;
12306
-
12307
- /* Typography - using semantic tokens */
12308
- font-family: var(--alias-font-brand-family);
12309
- font-weight: var(--alias-font-brand-weight-semibold);
12310
- text-decoration: none;
12311
-
12312
- /* Interaction */
12313
- border: none;
12314
- cursor: pointer;
12614
+ border-radius: var(--border-radius-full);
12615
+ white-space: nowrap;
12315
12616
  user-select: none;
12316
- transition: all 0.2s ease;
12317
-
12318
- /* Accessibility */
12319
- outline: none;
12320
- position: relative;
12321
- }
12322
-
12323
- /* Focus styles for accessibility */
12324
- .muka-button:focus-visible {
12325
- outline: 2px solid var(--color-border-focus);
12326
- outline-offset: 2px;
12327
- }
12328
-
12329
- /* Size variants
12330
- Height is driven by min-height; vertical padding is 0 and the label carries
12331
- tight (Figma) line-height. Horizontal spacing matches Figma's nested model:
12332
- the button's padding is the outer container inset, and the label's own
12333
- padding is the icon-to-text gap (so text-only buttons keep both insets). */
12334
- .muka-button--sm {
12335
- padding: 0 var(--button-padding-sm-x);
12336
- border-radius: var(--button-radius-sm);
12337
- font-size: var(--text-label-sm-semibold-fontSize);
12338
- line-height: var(--text-label-sm-semibold-lineHeight);
12339
- min-height: 32px;
12340
- }
12341
-
12342
- .muka-button--sm .muka-button__label {
12343
- padding: 0 var(--button-gap-sm);
12344
- }
12345
-
12346
- .muka-button--md {
12347
- padding: 0 var(--button-padding-md-x);
12348
- border-radius: var(--button-radius-md);
12349
- font-size: var(--text-label-sm-semibold-fontSize);
12350
- line-height: var(--text-label-sm-semibold-lineHeight);
12351
- min-height: 40px;
12352
- }
12353
-
12354
- .muka-button--md .muka-button__label {
12355
- padding: 0 var(--button-gap-md);
12356
- }
12357
-
12358
- .muka-button--lg {
12359
- padding: 0 var(--button-padding-lg-x);
12360
- border-radius: var(--button-radius-lg);
12361
- font-size: var(--text-label-lg-semibold-fontSize);
12362
- line-height: var(--text-label-lg-semibold-lineHeight);
12363
- min-height: 48px;
12364
- }
12365
-
12366
- .muka-button--lg .muka-button__label {
12367
- padding: 0 var(--button-gap-lg);
12368
- }
12369
-
12370
- .muka-button--xl {
12371
- padding: 0 var(--button-padding-xl-x);
12372
- border-radius: var(--button-radius-xl);
12373
- font-size: var(--text-label-2xl-semibold-fontSize);
12374
- line-height: var(--text-label-2xl-semibold-lineHeight);
12375
- min-height: 64px;
12376
- }
12377
-
12378
- .muka-button--xl .muka-button__label {
12379
- padding: 0 var(--button-gap-xl);
12380
- }
12381
-
12382
- /* Primary variant - your main CTA button */
12383
- .muka-button--primary {
12384
- background-color: var(--button-color-primary-background-default);
12385
- color: var(--button-color-primary-foreground-default);
12386
- box-shadow: var(--button-color-primary-shadow-default);
12387
- }
12388
-
12389
- .muka-button--primary:hover:not(:disabled) {
12390
- background-color: var(--button-color-primary-background-hover);
12391
- color: var(--button-color-primary-foreground-hover);
12392
- box-shadow: var(--button-color-primary-shadow-hover);
12393
- }
12394
-
12395
- /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
12396
- trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
12397
- gives toggle buttons a visible selected state, so the toggle is not conveyed
12398
- to sighted users by the accessibility tree alone. */
12399
- .muka-button--primary:active:not(:disabled),
12400
- .muka-button--primary.muka-button--pressed:not(:disabled),
12401
- .muka-button--primary[data-state="open"]:not(:disabled),
12402
- .muka-button--primary[aria-pressed="true"]:not(:disabled) {
12403
- background-color: var(--button-color-primary-background-pressed);
12404
- color: var(--button-color-primary-foreground-pressed);
12405
- box-shadow: var(--button-color-primary-shadow-pressed);
12406
- }
12407
-
12408
- .muka-button--primary:disabled {
12409
- background-color: var(--button-color-primary-background-disabled);
12410
- color: var(--button-color-primary-foreground-disabled);
12411
- box-shadow: var(--button-color-primary-shadow-disabled);
12412
- cursor: not-allowed;
12413
- opacity: 1; /* Remove opacity since we have proper disabled tokens */
12414
- }
12415
-
12416
- /* Secondary variant - supporting actions, no border, only bottom inner shadow */
12417
- .muka-button--secondary {
12418
- background-color: var(--button-color-secondary-background-default);
12419
- color: var(--button-color-secondary-foreground-default);
12420
- box-shadow: var(--button-color-secondary-shadow-default);
12421
- }
12422
-
12423
- .muka-button--secondary:hover:not(:disabled) {
12424
- background-color: var(--button-color-secondary-background-hover);
12425
- color: var(--button-color-secondary-foreground-hover);
12426
- box-shadow: var(--button-color-secondary-shadow-hover);
12427
- }
12428
-
12429
- .muka-button--secondary:active:not(:disabled),
12430
- .muka-button--secondary.muka-button--pressed:not(:disabled),
12431
- .muka-button--secondary[data-state="open"]:not(:disabled),
12432
- .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
12433
- background-color: var(--button-color-secondary-background-pressed);
12434
- color: var(--button-color-secondary-foreground-pressed);
12435
- box-shadow: var(--button-color-secondary-shadow-pressed);
12436
- }
12437
-
12438
- .muka-button--secondary:disabled {
12439
- background-color: var(--button-color-secondary-background-disabled);
12440
- color: var(--button-color-secondary-foreground-disabled);
12441
- box-shadow: var(--button-color-secondary-shadow-disabled);
12442
- cursor: not-allowed;
12443
- opacity: 1;
12617
+ box-sizing: border-box;
12444
12618
  }
12445
12619
 
12446
- /* Tertiary variant - tinted background with accent text and border */
12447
- .muka-button--tertiary {
12448
- background-color: var(--button-color-tertiary-background-default);
12449
- color: var(--button-color-tertiary-foreground-default);
12450
- border: 1px solid var(--button-color-tertiary-border-default);
12620
+ /*
12621
+ * Sizes — height, gap, type, and default (label-edge) horizontal padding.
12622
+ * Mirrors Chip so the two components share sizing, fonts, and spacing.
12623
+ * Vertical centering is handled by the fixed height + align-items: center.
12624
+ * The leading side gets a tighter padding when an icon/dot is present, via the
12625
+ * --has-icon / --has-dot modifiers below.
12626
+ */
12627
+ .muka-badge--sm {
12628
+ height: var(--badge-size-height-sm);
12629
+ gap: var(--badge-gap-sm);
12630
+ padding: 0 var(--badge-padding-label-sm);
12631
+ font-family: var(--text-label-sm-regular-fontFamily);
12632
+ font-weight: var(--text-label-sm-regular-fontWeight);
12633
+ font-size: var(--text-label-sm-regular-fontSize);
12634
+ line-height: var(--text-label-sm-regular-lineHeight);
12451
12635
  }
12452
12636
 
12453
- .muka-button--tertiary:hover:not(:disabled) {
12454
- background-color: var(--button-color-tertiary-background-hover);
12455
- color: var(--button-color-tertiary-foreground-hover);
12456
- border-color: var(--button-color-tertiary-border-hover);
12637
+ .muka-badge--md {
12638
+ height: var(--badge-size-height-md);
12639
+ gap: var(--badge-gap-md);
12640
+ padding: 0 var(--badge-padding-label-md);
12641
+ font-family: var(--text-label-md-regular-fontFamily);
12642
+ font-weight: var(--text-label-md-regular-fontWeight);
12643
+ font-size: var(--text-label-md-regular-fontSize);
12644
+ line-height: var(--text-label-md-regular-lineHeight);
12457
12645
  }
12458
12646
 
12459
- .muka-button--tertiary:active:not(:disabled),
12460
- .muka-button--tertiary.muka-button--pressed:not(:disabled),
12461
- .muka-button--tertiary[data-state="open"]:not(:disabled),
12462
- .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
12463
- background-color: var(--button-color-tertiary-background-pressed);
12464
- color: var(--button-color-tertiary-foreground-pressed);
12465
- border-color: var(--button-color-tertiary-border-pressed);
12647
+ .muka-badge--lg {
12648
+ height: var(--badge-size-height-lg);
12649
+ gap: var(--badge-gap-lg);
12650
+ padding: 0 var(--badge-padding-label-lg);
12651
+ font-family: var(--text-label-lg-regular-fontFamily);
12652
+ font-weight: var(--text-label-lg-regular-fontWeight);
12653
+ font-size: var(--text-label-lg-regular-fontSize);
12654
+ line-height: var(--text-label-lg-regular-lineHeight);
12466
12655
  }
12467
12656
 
12468
- .muka-button--tertiary:disabled {
12469
- background-color: var(--button-color-tertiary-background-disabled);
12470
- color: var(--button-color-tertiary-foreground-disabled);
12471
- border-color: var(--button-color-tertiary-border-disabled);
12472
- cursor: not-allowed;
12473
- opacity: 1;
12657
+ /* Tighter leading padding when a leading icon or dot is present */
12658
+ .muka-badge--sm.muka-badge--has-icon,
12659
+ .muka-badge--sm.muka-badge--has-dot {
12660
+ padding-left: var(--badge-padding-leading-sm);
12474
12661
  }
12475
-
12476
- /* Ghost variant - minimal styling, border appears on hover */
12477
- .muka-button--ghost {
12478
- background-color: var(--button-color-ghost-background-default);
12479
- color: var(--button-color-ghost-foreground-default);
12480
- border: 1px solid var(--button-color-ghost-border-default);
12662
+ .muka-badge--md.muka-badge--has-icon,
12663
+ .muka-badge--md.muka-badge--has-dot {
12664
+ padding-left: var(--badge-padding-leading-md);
12481
12665
  }
12482
-
12483
- .muka-button--ghost:hover:not(:disabled) {
12484
- background-color: var(--button-color-ghost-background-hover);
12485
- color: var(--button-color-ghost-foreground-hover);
12486
- border-color: var(--button-color-ghost-border-hover);
12666
+ .muka-badge--lg.muka-badge--has-icon,
12667
+ .muka-badge--lg.muka-badge--has-dot {
12668
+ padding-left: var(--badge-padding-leading-lg);
12487
12669
  }
12488
12670
 
12489
- .muka-button--ghost:active:not(:disabled),
12490
- .muka-button--ghost.muka-button--pressed:not(:disabled),
12491
- .muka-button--ghost[data-state="open"]:not(:disabled),
12492
- .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
12493
- background-color: var(--button-color-ghost-background-pressed);
12494
- color: var(--button-color-ghost-foreground-pressed);
12495
- border-color: var(--button-color-ghost-border-pressed);
12671
+ /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
12672
+ .muka-badge__icon {
12673
+ display: inline-flex;
12674
+ align-items: center;
12675
+ justify-content: center;
12676
+ flex-shrink: 0;
12496
12677
  }
12497
12678
 
12498
- .muka-button--ghost:disabled {
12499
- background-color: var(--button-color-ghost-background-disabled);
12500
- color: var(--button-color-ghost-foreground-disabled);
12501
- border-color: var(--button-color-ghost-border-disabled);
12502
- cursor: not-allowed;
12503
- opacity: 1;
12679
+ .muka-badge--sm .muka-badge__icon {
12680
+ width: var(--icon-size-xs);
12681
+ height: var(--icon-size-xs);
12504
12682
  }
12505
-
12506
- /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
12507
- .muka-button--muted {
12508
- background-color: var(--button-color-muted-background-default);
12509
- color: var(--button-color-muted-foreground-default);
12510
- border: 1px solid var(--button-color-muted-border-default);
12683
+ .muka-badge--md .muka-badge__icon {
12684
+ width: var(--icon-size-sm);
12685
+ height: var(--icon-size-sm);
12511
12686
  }
12512
-
12513
- .muka-button--muted:hover:not(:disabled) {
12514
- background-color: var(--button-color-muted-background-hover);
12515
- color: var(--button-color-muted-foreground-hover);
12516
- border-color: var(--button-color-muted-border-hover);
12687
+ .muka-badge--lg .muka-badge__icon {
12688
+ width: var(--icon-size-default);
12689
+ height: var(--icon-size-default);
12517
12690
  }
12518
12691
 
12519
- .muka-button--muted:active:not(:disabled),
12520
- .muka-button--muted.muka-button--pressed:not(:disabled),
12521
- .muka-button--muted[data-state="open"]:not(:disabled),
12522
- .muka-button--muted[aria-pressed="true"]:not(:disabled) {
12523
- background-color: var(--button-color-muted-background-pressed);
12524
- color: var(--button-color-muted-foreground-pressed);
12525
- border-color: var(--button-color-muted-border-pressed);
12692
+ /* Force the passed content (raw <svg> or an <Icon> wrapper) to the slot size,
12693
+ so callers don't have to size the icon to match each badge size. The
12694
+ .muka-icon selector is intentionally 2 classes deep to override .muka-icon--md. */
12695
+ .muka-badge__icon .muka-icon,
12696
+ .muka-badge__icon svg {
12697
+ width: 100%;
12698
+ height: 100%;
12526
12699
  }
12527
12700
 
12528
- .muka-button--muted:disabled {
12529
- background-color: var(--button-color-muted-background-disabled);
12530
- color: var(--button-color-muted-foreground-disabled);
12531
- border-color: var(--button-color-muted-border-disabled);
12532
- cursor: not-allowed;
12533
- opacity: 1;
12701
+ /* Icons inherit the badge's per-variant foreground color */
12702
+ .muka-badge .muka-icon {
12703
+ color: inherit;
12534
12704
  }
12535
12705
 
12536
- /* General disabled state - fallback */
12537
- .muka-button:disabled {
12538
- cursor: not-allowed;
12539
- pointer-events: none;
12706
+ /* Dot indicator */
12707
+ .muka-badge__dot {
12708
+ flex-shrink: 0;
12709
+ border-radius: var(--border-radius-full);
12540
12710
  }
12541
12711
 
12542
- /* Full width modifier */
12543
- .muka-button--full-width {
12544
- width: 100%;
12712
+ .muka-badge--sm .muka-badge__dot {
12713
+ width: var(--badge-size-dot-sm);
12714
+ height: var(--badge-size-dot-sm);
12545
12715
  }
12546
12716
 
12547
- /* Icons - forced to the Figma per-size dimension regardless of the icon passed */
12548
- .muka-button__icon {
12549
- display: inline-flex;
12550
- align-items: center;
12551
- justify-content: center;
12552
- flex-shrink: 0;
12717
+ .muka-badge--md .muka-badge__dot {
12718
+ width: var(--badge-size-dot-md);
12719
+ height: var(--badge-size-dot-md);
12553
12720
  }
12554
12721
 
12555
- /* Make the icon content (raw <svg> or a nested Icon span) fill the wrapper.
12556
- Scoped under .muka-button to outrank Icon.css's own `.muka-icon--{size}`
12557
- rule, so the button's size wins even when the icon hardcodes its own size. */
12558
- .muka-button .muka-button__icon > *,
12559
- .muka-button .muka-button__icon svg {
12560
- width: 100%;
12561
- height: 100%;
12562
- display: block;
12722
+ .muka-badge--lg .muka-badge__dot {
12723
+ width: var(--badge-size-dot-lg);
12724
+ height: var(--badge-size-dot-lg);
12563
12725
  }
12564
12726
 
12565
- .muka-button--sm .muka-button__icon {
12566
- width: var(--button-icon-sm);
12567
- height: var(--button-icon-sm);
12727
+ .muka-badge__label {
12728
+ flex: 0 1 auto;
12729
+ min-width: 0;
12730
+ overflow: hidden;
12731
+ text-overflow: ellipsis;
12732
+ /*
12733
+ * The badge sets a tight line-height for compact sizing, but the label's
12734
+ * `overflow: hidden` (needed for ellipsis) then clips glyph descenders (g, y, p). Give the
12735
+ * label its own roomier line-height so descenders render; vertical centering is unaffected
12736
+ * because the badge height is fixed and content is centered via align-items: center.
12737
+ */
12738
+ line-height: normal;
12568
12739
  }
12569
12740
 
12570
- .muka-button--md .muka-button__icon {
12571
- width: var(--button-icon-md);
12572
- height: var(--button-icon-md);
12741
+ /* Neutral variant */
12742
+ .muka-badge--neutral {
12743
+ background-color: var(--color-surface-level1);
12744
+ color: var(--color-text-default-default);
12573
12745
  }
12574
12746
 
12575
- .muka-button--lg .muka-button__icon {
12576
- width: var(--button-icon-lg);
12577
- height: var(--button-icon-lg);
12747
+ .muka-badge--neutral .muka-badge__dot {
12748
+ background-color: var(--color-text-subtle-default);
12578
12749
  }
12579
12750
 
12580
- .muka-button--xl .muka-button__icon {
12581
- width: var(--button-icon-xl);
12582
- height: var(--button-icon-xl);
12751
+ /* Info variant */
12752
+ .muka-badge--info {
12753
+ background-color: var(--color-state-info-background);
12754
+ color: var(--color-state-info-contrast);
12583
12755
  }
12584
12756
 
12585
- .muka-button__label {
12586
- display: inline-flex;
12587
- align-items: center;
12757
+ .muka-badge--info .muka-badge__dot {
12758
+ background-color: var(--color-state-info-default);
12588
12759
  }
12589
12760
 
12590
- /* Icon-only buttons - square, sized to the button height per size */
12591
- .muka-button--icon-only {
12592
- padding: 0;
12761
+ /* Success variant */
12762
+ .muka-badge--success {
12763
+ background-color: var(--color-state-success-background);
12764
+ color: var(--color-state-success-contrast);
12593
12765
  }
12594
12766
 
12595
- .muka-button--icon-only.muka-button--sm {
12596
- width: 32px;
12767
+ .muka-badge--success .muka-badge__dot {
12768
+ background-color: var(--color-state-success-default);
12597
12769
  }
12598
12770
 
12599
- .muka-button--icon-only.muka-button--md {
12600
- width: 40px;
12771
+ /* Warning variant */
12772
+ .muka-badge--warning {
12773
+ background-color: var(--color-state-warning-background);
12774
+ color: var(--color-state-warning-contrast);
12601
12775
  }
12602
12776
 
12603
- .muka-button--icon-only.muka-button--lg {
12604
- width: 48px;
12777
+ .muka-badge--warning .muka-badge__dot {
12778
+ background-color: var(--color-state-warning-default);
12605
12779
  }
12606
12780
 
12607
- .muka-button--icon-only.muka-button--xl {
12608
- width: 64px;
12781
+ /* Error variant */
12782
+ .muka-badge--error {
12783
+ background-color: var(--color-state-error-background);
12784
+ color: var(--color-state-error-contrast);
12785
+ }
12786
+
12787
+ .muka-badge--error .muka-badge__dot {
12788
+ background-color: var(--color-state-error-default);
12609
12789
  }
12610
12790
 
12611
12791
 
@@ -13080,283 +13260,99 @@ button.muka-chat-photo-grid__tile:focus-visible {
13080
13260
  width: var(--alert-icon-size);
13081
13261
  height: var(--alert-icon-size);
13082
13262
  }
13083
-
13084
- .muka-alert__icon svg {
13085
- width: 100%;
13086
- height: 100%;
13087
- }
13088
-
13089
- /* The leading icon and the dismiss (×) icon inherit the variant accent set on
13090
- their container, overriding the Icon component's default color. */
13091
- .muka-alert__icon .muka-icon,
13092
- .muka-alert__dismiss .muka-icon {
13093
- color: inherit;
13094
- }
13095
-
13096
- /* Content */
13097
- .muka-alert__content {
13098
- flex: 1;
13099
- min-width: 0;
13100
- }
13101
-
13102
- .muka-alert__title {
13103
- font-family: var(--text-label-md-semibold-fontFamily);
13104
- font-weight: var(--text-label-md-semibold-fontWeight);
13105
- font-size: var(--text-label-md-semibold-fontSize);
13106
- line-height: var(--text-label-md-semibold-lineHeight);
13107
- margin-bottom: var(--spacing-1);
13108
- }
13109
-
13110
- .muka-alert--sm .muka-alert__title {
13111
- font-family: var(--text-label-sm-semibold-fontFamily);
13112
- font-weight: var(--text-label-sm-semibold-fontWeight);
13113
- font-size: var(--text-label-sm-semibold-fontSize);
13114
- line-height: var(--text-label-sm-semibold-lineHeight);
13115
- }
13116
-
13117
- .muka-alert--lg .muka-alert__title {
13118
- font-family: var(--text-label-lg-semibold-fontFamily);
13119
- font-weight: var(--text-label-lg-semibold-fontWeight);
13120
- font-size: var(--text-label-lg-semibold-fontSize);
13121
- line-height: var(--text-label-lg-semibold-lineHeight);
13122
- }
13123
-
13124
- .muka-alert__message {
13125
- font-family: var(--text-body-sm-regular-fontFamily);
13126
- font-weight: var(--text-body-sm-regular-fontWeight);
13127
- font-size: var(--text-body-sm-regular-fontSize);
13128
- line-height: var(--text-body-sm-regular-lineHeight);
13129
- }
13130
-
13131
- .muka-alert--lg .muka-alert__message {
13132
- font-family: var(--text-body-base-regular-fontFamily);
13133
- font-weight: var(--text-body-base-regular-fontWeight);
13134
- font-size: var(--text-body-base-regular-fontSize);
13135
- line-height: var(--text-body-base-regular-lineHeight);
13136
- }
13137
-
13138
- /* Action slot */
13139
- .muka-alert__action {
13140
- display: flex;
13141
- align-items: center;
13142
- flex-shrink: 0;
13143
- }
13144
-
13145
- /* Dismiss button - uses accent color per variant, aligned with icon row */
13146
- .muka-alert__dismiss {
13147
- display: flex;
13148
- align-items: center;
13149
- justify-content: center;
13150
- flex-shrink: 0;
13151
- align-self: flex-start;
13152
- width: 24px;
13153
- height: 24px;
13154
- padding: 0;
13155
- margin: 0 0 0 auto;
13156
- border: none;
13157
- background: transparent;
13158
- cursor: pointer;
13159
- border-radius: var(--border-radius-sm);
13160
- transition: opacity 0.15s ease, background-color 0.15s ease;
13161
- }
13162
-
13163
- .muka-alert__dismiss:hover {
13164
- opacity: 0.85;
13165
- background-color: rgba(0, 0, 0, 0.05);
13166
- }
13167
-
13168
- .muka-alert__dismiss:focus-visible {
13169
- outline: 2px solid var(--color-border-focus);
13170
- outline-offset: 2px;
13171
- }
13172
-
13173
- .muka-alert__dismiss svg {
13174
- width: 16px;
13175
- height: 16px;
13176
- }
13177
-
13178
-
13179
- /* Badge */
13180
- /* Badge Component Styles - Using Muka Design Tokens */
13181
-
13182
- .muka-badge {
13183
- display: inline-flex;
13184
- align-items: center;
13185
- border-radius: var(--border-radius-full);
13186
- white-space: nowrap;
13187
- user-select: none;
13188
- box-sizing: border-box;
13189
- }
13190
-
13191
- /*
13192
- * Sizes — height, gap, type, and default (label-edge) horizontal padding.
13193
- * Mirrors Chip so the two components share sizing, fonts, and spacing.
13194
- * Vertical centering is handled by the fixed height + align-items: center.
13195
- * The leading side gets a tighter padding when an icon/dot is present, via the
13196
- * --has-icon / --has-dot modifiers below.
13197
- */
13198
- .muka-badge--sm {
13199
- height: var(--badge-size-height-sm);
13200
- gap: var(--badge-gap-sm);
13201
- padding: 0 var(--badge-padding-label-sm);
13202
- font-family: var(--text-label-sm-regular-fontFamily);
13203
- font-weight: var(--text-label-sm-regular-fontWeight);
13204
- font-size: var(--text-label-sm-regular-fontSize);
13205
- line-height: var(--text-label-sm-regular-lineHeight);
13206
- }
13207
-
13208
- .muka-badge--md {
13209
- height: var(--badge-size-height-md);
13210
- gap: var(--badge-gap-md);
13211
- padding: 0 var(--badge-padding-label-md);
13212
- font-family: var(--text-label-md-regular-fontFamily);
13213
- font-weight: var(--text-label-md-regular-fontWeight);
13214
- font-size: var(--text-label-md-regular-fontSize);
13215
- line-height: var(--text-label-md-regular-lineHeight);
13216
- }
13217
-
13218
- .muka-badge--lg {
13219
- height: var(--badge-size-height-lg);
13220
- gap: var(--badge-gap-lg);
13221
- padding: 0 var(--badge-padding-label-lg);
13222
- font-family: var(--text-label-lg-regular-fontFamily);
13223
- font-weight: var(--text-label-lg-regular-fontWeight);
13224
- font-size: var(--text-label-lg-regular-fontSize);
13225
- line-height: var(--text-label-lg-regular-lineHeight);
13226
- }
13227
-
13228
- /* Tighter leading padding when a leading icon or dot is present */
13229
- .muka-badge--sm.muka-badge--has-icon,
13230
- .muka-badge--sm.muka-badge--has-dot {
13231
- padding-left: var(--badge-padding-leading-sm);
13232
- }
13233
- .muka-badge--md.muka-badge--has-icon,
13234
- .muka-badge--md.muka-badge--has-dot {
13235
- padding-left: var(--badge-padding-leading-md);
13236
- }
13237
- .muka-badge--lg.muka-badge--has-icon,
13238
- .muka-badge--lg.muka-badge--has-dot {
13239
- padding-left: var(--badge-padding-leading-lg);
13240
- }
13241
-
13242
- /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
13243
- .muka-badge__icon {
13244
- display: inline-flex;
13245
- align-items: center;
13246
- justify-content: center;
13247
- flex-shrink: 0;
13248
- }
13249
-
13250
- .muka-badge--sm .muka-badge__icon {
13251
- width: var(--icon-size-xs);
13252
- height: var(--icon-size-xs);
13253
- }
13254
- .muka-badge--md .muka-badge__icon {
13255
- width: var(--icon-size-sm);
13256
- height: var(--icon-size-sm);
13257
- }
13258
- .muka-badge--lg .muka-badge__icon {
13259
- width: var(--icon-size-default);
13260
- height: var(--icon-size-default);
13261
- }
13262
-
13263
- /* Force the passed content (raw <svg> or an <Icon> wrapper) to the slot size,
13264
- so callers don't have to size the icon to match each badge size. The
13265
- .muka-icon selector is intentionally 2 classes deep to override .muka-icon--md. */
13266
- .muka-badge__icon .muka-icon,
13267
- .muka-badge__icon svg {
13268
- width: 100%;
13269
- height: 100%;
13270
- }
13271
-
13272
- /* Icons inherit the badge's per-variant foreground color */
13273
- .muka-badge .muka-icon {
13274
- color: inherit;
13275
- }
13276
-
13277
- /* Dot indicator */
13278
- .muka-badge__dot {
13279
- flex-shrink: 0;
13280
- border-radius: var(--border-radius-full);
13281
- }
13282
-
13283
- .muka-badge--sm .muka-badge__dot {
13284
- width: var(--badge-size-dot-sm);
13285
- height: var(--badge-size-dot-sm);
13286
- }
13287
-
13288
- .muka-badge--md .muka-badge__dot {
13289
- width: var(--badge-size-dot-md);
13290
- height: var(--badge-size-dot-md);
13263
+
13264
+ .muka-alert__icon svg {
13265
+ width: 100%;
13266
+ height: 100%;
13291
13267
  }
13292
13268
 
13293
- .muka-badge--lg .muka-badge__dot {
13294
- width: var(--badge-size-dot-lg);
13295
- height: var(--badge-size-dot-lg);
13269
+ /* The leading icon and the dismiss (×) icon inherit the variant accent set on
13270
+ their container, overriding the Icon component's default color. */
13271
+ .muka-alert__icon .muka-icon,
13272
+ .muka-alert__dismiss .muka-icon {
13273
+ color: inherit;
13296
13274
  }
13297
13275
 
13298
- .muka-badge__label {
13299
- flex: 0 1 auto;
13276
+ /* Content */
13277
+ .muka-alert__content {
13278
+ flex: 1;
13300
13279
  min-width: 0;
13301
- overflow: hidden;
13302
- text-overflow: ellipsis;
13303
- /*
13304
- * The badge sets a tight line-height for compact sizing, but the label's
13305
- * `overflow: hidden` (needed for ellipsis) then clips glyph descenders (g, y, p). Give the
13306
- * label its own roomier line-height so descenders render; vertical centering is unaffected
13307
- * because the badge height is fixed and content is centered via align-items: center.
13308
- */
13309
- line-height: normal;
13310
13280
  }
13311
13281
 
13312
- /* Neutral variant */
13313
- .muka-badge--neutral {
13314
- background-color: var(--color-surface-level1);
13315
- color: var(--color-text-default-default);
13282
+ .muka-alert__title {
13283
+ font-family: var(--text-label-md-semibold-fontFamily);
13284
+ font-weight: var(--text-label-md-semibold-fontWeight);
13285
+ font-size: var(--text-label-md-semibold-fontSize);
13286
+ line-height: var(--text-label-md-semibold-lineHeight);
13287
+ margin-bottom: var(--spacing-1);
13316
13288
  }
13317
13289
 
13318
- .muka-badge--neutral .muka-badge__dot {
13319
- background-color: var(--color-text-subtle-default);
13290
+ .muka-alert--sm .muka-alert__title {
13291
+ font-family: var(--text-label-sm-semibold-fontFamily);
13292
+ font-weight: var(--text-label-sm-semibold-fontWeight);
13293
+ font-size: var(--text-label-sm-semibold-fontSize);
13294
+ line-height: var(--text-label-sm-semibold-lineHeight);
13320
13295
  }
13321
13296
 
13322
- /* Info variant */
13323
- .muka-badge--info {
13324
- background-color: var(--color-state-info-background);
13325
- color: var(--color-state-info-contrast);
13297
+ .muka-alert--lg .muka-alert__title {
13298
+ font-family: var(--text-label-lg-semibold-fontFamily);
13299
+ font-weight: var(--text-label-lg-semibold-fontWeight);
13300
+ font-size: var(--text-label-lg-semibold-fontSize);
13301
+ line-height: var(--text-label-lg-semibold-lineHeight);
13326
13302
  }
13327
13303
 
13328
- .muka-badge--info .muka-badge__dot {
13329
- background-color: var(--color-state-info-default);
13304
+ .muka-alert__message {
13305
+ font-family: var(--text-body-sm-regular-fontFamily);
13306
+ font-weight: var(--text-body-sm-regular-fontWeight);
13307
+ font-size: var(--text-body-sm-regular-fontSize);
13308
+ line-height: var(--text-body-sm-regular-lineHeight);
13330
13309
  }
13331
13310
 
13332
- /* Success variant */
13333
- .muka-badge--success {
13334
- background-color: var(--color-state-success-background);
13335
- color: var(--color-state-success-contrast);
13311
+ .muka-alert--lg .muka-alert__message {
13312
+ font-family: var(--text-body-base-regular-fontFamily);
13313
+ font-weight: var(--text-body-base-regular-fontWeight);
13314
+ font-size: var(--text-body-base-regular-fontSize);
13315
+ line-height: var(--text-body-base-regular-lineHeight);
13336
13316
  }
13337
13317
 
13338
- .muka-badge--success .muka-badge__dot {
13339
- background-color: var(--color-state-success-default);
13318
+ /* Action slot */
13319
+ .muka-alert__action {
13320
+ display: flex;
13321
+ align-items: center;
13322
+ flex-shrink: 0;
13340
13323
  }
13341
13324
 
13342
- /* Warning variant */
13343
- .muka-badge--warning {
13344
- background-color: var(--color-state-warning-background);
13345
- color: var(--color-state-warning-contrast);
13325
+ /* Dismiss button - uses accent color per variant, aligned with icon row */
13326
+ .muka-alert__dismiss {
13327
+ display: flex;
13328
+ align-items: center;
13329
+ justify-content: center;
13330
+ flex-shrink: 0;
13331
+ align-self: flex-start;
13332
+ width: 24px;
13333
+ height: 24px;
13334
+ padding: 0;
13335
+ margin: 0 0 0 auto;
13336
+ border: none;
13337
+ background: transparent;
13338
+ cursor: pointer;
13339
+ border-radius: var(--border-radius-sm);
13340
+ transition: opacity 0.15s ease, background-color 0.15s ease;
13346
13341
  }
13347
13342
 
13348
- .muka-badge--warning .muka-badge__dot {
13349
- background-color: var(--color-state-warning-default);
13343
+ .muka-alert__dismiss:hover {
13344
+ opacity: 0.85;
13345
+ background-color: rgba(0, 0, 0, 0.05);
13350
13346
  }
13351
13347
 
13352
- /* Error variant */
13353
- .muka-badge--error {
13354
- background-color: var(--color-state-error-background);
13355
- color: var(--color-state-error-contrast);
13348
+ .muka-alert__dismiss:focus-visible {
13349
+ outline: 2px solid var(--color-border-focus);
13350
+ outline-offset: 2px;
13356
13351
  }
13357
13352
 
13358
- .muka-badge--error .muka-badge__dot {
13359
- background-color: var(--color-state-error-default);
13353
+ .muka-alert__dismiss svg {
13354
+ width: 16px;
13355
+ height: 16px;
13360
13356
  }
13361
13357
 
13362
13358
 
@@ -13430,233 +13426,102 @@ button.muka-chat-photo-grid__tile:focus-visible {
13430
13426
  flex-direction: column;
13431
13427
  }
13432
13428
 
13433
- /* ─── Single task row ──────────────────────────────────── */
13434
-
13435
- .muka-agent-task-list__task {
13436
- display: flex;
13437
- align-items: stretch;
13438
- gap: var(--spacing-4);
13439
- min-height: 32px;
13440
- padding: 0;
13441
- }
13442
-
13443
- /* ─── Bullet column (icon + timeline connector) ────────── */
13444
-
13445
- .muka-agent-task-list__bullet {
13446
- position: relative;
13447
- flex-shrink: 0;
13448
- width: 16px;
13449
- align-self: stretch;
13450
- }
13451
-
13452
- .muka-agent-task-list__line {
13453
- position: absolute;
13454
- left: 7px;
13455
- width: 1px;
13456
- background-color: var(--color-border-default);
13457
- }
13458
-
13459
- .muka-agent-task-list__line--top {
13460
- top: 0;
13461
- height: 6px;
13462
- }
13463
-
13464
- .muka-agent-task-list__line--bottom {
13465
- top: 32px;
13466
- bottom: 0;
13467
- }
13468
-
13469
- .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13470
- display: none;
13471
- }
13472
-
13473
- .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13474
- display: none;
13475
- }
13476
-
13477
- .muka-agent-task-list__icon {
13478
- position: absolute;
13479
- top: 8px;
13480
- left: 0;
13481
- width: 16px;
13482
- height: 16px;
13483
- display: inline-flex;
13484
- align-items: center;
13485
- justify-content: center;
13486
- color: var(--color-text-subtle-default);
13487
- z-index: 1;
13488
- }
13489
-
13490
- /* ─── State color treatments ───────────────────────────── */
13491
-
13492
- .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13493
- color: var(--color-action-default);
13494
- }
13495
-
13496
- .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13497
- color: var(--color-text-subtle-default);
13498
- }
13499
-
13500
- .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13501
- color: var(--color-text-muted-default, var(--color-text-subtle-default));
13502
- opacity: 0.6;
13503
- }
13504
-
13505
- /* ─── Label ────────────────────────────────────────────── */
13506
-
13507
- .muka-agent-task-list__label {
13508
- flex: 1 1 0;
13509
- min-width: 0;
13510
- padding: var(--spacing-2) 0;
13511
- color: var(--color-text-subtle-default);
13512
- font-family: var(--text-body-sm-regular-fontFamily);
13513
- font-weight: var(--text-body-sm-regular-fontWeight);
13514
- font-size: var(--text-body-sm-regular-fontSize);
13515
- line-height: var(--text-body-sm-regular-lineHeight);
13516
- word-break: break-word;
13517
- }
13518
-
13519
- /* ─── Print ────────────────────────────────────────────── */
13520
-
13521
- @media print {
13522
- .muka-agent-task-list {
13523
- break-inside: avoid;
13524
- }
13525
-
13526
- .muka-agent-task-list__chevron {
13527
- display: none;
13528
- }
13529
- }
13530
-
13531
-
13532
- /* Accordion */
13533
- /* Accordion Component Styles */
13534
-
13535
- .muka-accordion {
13536
- width: 100%;
13537
- }
13538
-
13539
- /* Item */
13540
- .muka-accordion__item {
13541
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
13542
- }
13543
-
13544
- .muka-accordion__item:last-child {
13545
- border-bottom: none;
13546
- }
13547
-
13548
- /* Header reset */
13549
- .muka-accordion__header {
13550
- margin: 0;
13551
- }
13552
-
13553
- /* Trigger */
13554
- .muka-accordion__trigger {
13555
- display: flex;
13556
- align-items: center;
13557
- justify-content: space-between;
13558
- width: 100%;
13559
- padding: var(--spacing-4);
13560
- background: none;
13561
- border: none;
13562
- cursor: pointer;
13563
- font-family: var(--text-label-md-semibold-fontFamily);
13564
- font-weight: var(--text-label-md-semibold-fontWeight);
13565
- font-size: var(--text-label-md-semibold-fontSize);
13566
- line-height: var(--text-label-md-semibold-lineHeight);
13567
- color: var(--color-text-default-default);
13568
- text-align: left;
13569
- gap: var(--spacing-3);
13570
- transition: background-color 0.15s ease;
13571
- }
13572
-
13573
- .muka-accordion__trigger:hover {
13574
- background-color: var(--color-surface-level1);
13575
- }
13576
-
13577
- .muka-accordion__trigger[data-disabled] {
13578
- cursor: not-allowed;
13579
- opacity: 0.4;
13580
- }
13429
+ /* ─── Single task row ──────────────────────────────────── */
13581
13430
 
13582
- .muka-accordion__trigger-text {
13583
- flex: 1;
13431
+ .muka-agent-task-list__task {
13432
+ display: flex;
13433
+ align-items: stretch;
13434
+ gap: var(--spacing-4);
13435
+ min-height: 32px;
13436
+ padding: 0;
13584
13437
  }
13585
13438
 
13586
- /* Chevron rotation */
13587
- .muka-accordion__chevron {
13588
- display: inline-flex;
13589
- align-items: center;
13590
- color: var(--color-text-subtle-default);
13591
- transition: transform 200ms ease;
13592
- }
13439
+ /* ─── Bullet column (icon + timeline connector) ────────── */
13593
13440
 
13594
- .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13595
- transform: rotate(180deg);
13441
+ .muka-agent-task-list__bullet {
13442
+ position: relative;
13443
+ flex-shrink: 0;
13444
+ width: 16px;
13445
+ align-self: stretch;
13596
13446
  }
13597
13447
 
13598
- /* Content */
13599
- .muka-accordion__content {
13600
- overflow: hidden;
13448
+ .muka-agent-task-list__line {
13449
+ position: absolute;
13450
+ left: 7px;
13451
+ width: 1px;
13452
+ background-color: var(--color-border-default);
13601
13453
  }
13602
13454
 
13603
- .muka-accordion__content[data-state='open'] {
13604
- animation: muka-accordion-slideDown 200ms ease;
13455
+ .muka-agent-task-list__line--top {
13456
+ top: 0;
13457
+ height: 6px;
13605
13458
  }
13606
13459
 
13607
- .muka-accordion__content[data-state='closed'] {
13608
- animation: muka-accordion-slideUp 200ms ease;
13460
+ .muka-agent-task-list__line--bottom {
13461
+ top: 32px;
13462
+ bottom: 0;
13609
13463
  }
13610
13464
 
13611
- @keyframes muka-accordion-slideDown {
13612
- from {
13613
- height: 0;
13614
- }
13615
- to {
13616
- height: var(--radix-accordion-content-height);
13617
- }
13465
+ .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13466
+ display: none;
13618
13467
  }
13619
13468
 
13620
- @keyframes muka-accordion-slideUp {
13621
- from {
13622
- height: var(--radix-accordion-content-height);
13623
- }
13624
- to {
13625
- height: 0;
13626
- }
13469
+ .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13470
+ display: none;
13627
13471
  }
13628
13472
 
13629
- .muka-accordion__content-inner {
13630
- padding: 0 var(--spacing-4) var(--spacing-5);
13631
- color: var(--color-text-default-default);
13473
+ .muka-agent-task-list__icon {
13474
+ position: absolute;
13475
+ top: 8px;
13476
+ left: 0;
13477
+ width: 16px;
13478
+ height: 16px;
13479
+ display: inline-flex;
13480
+ align-items: center;
13481
+ justify-content: center;
13482
+ color: var(--color-text-subtle-default);
13483
+ z-index: 1;
13632
13484
  }
13633
13485
 
13634
- /* ─── Variant: flush ────────────────────────────────────────────────────── */
13486
+ /* ─── State color treatments ───────────────────────────── */
13635
13487
 
13636
- .muka-accordion--flush .muka-accordion__trigger {
13637
- padding-left: 0;
13638
- padding-right: 0;
13488
+ .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13489
+ color: var(--color-action-default);
13639
13490
  }
13640
13491
 
13641
- .muka-accordion--flush .muka-accordion__content-inner {
13642
- padding-left: 0;
13643
- padding-right: 0;
13492
+ .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13493
+ color: var(--color-text-subtle-default);
13644
13494
  }
13645
13495
 
13646
- /* ─── Variant: contained ────────────────────────────────────────────────── */
13647
-
13648
- .muka-accordion--contained {
13649
- border: var(--border-width-regular) solid var(--color-border-default);
13650
- border-radius: var(--radius-md);
13651
- overflow: hidden;
13496
+ .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13497
+ color: var(--color-text-muted-default, var(--color-text-subtle-default));
13498
+ opacity: 0.6;
13652
13499
  }
13653
13500
 
13654
- .muka-accordion--contained .muka-accordion__item {
13655
- background-color: var(--color-surface-level3);
13501
+ /* ─── Label ────────────────────────────────────────────── */
13502
+
13503
+ .muka-agent-task-list__label {
13504
+ flex: 1 1 0;
13505
+ min-width: 0;
13506
+ padding: var(--spacing-2) 0;
13507
+ color: var(--color-text-subtle-default);
13508
+ font-family: var(--text-body-sm-regular-fontFamily);
13509
+ font-weight: var(--text-body-sm-regular-fontWeight);
13510
+ font-size: var(--text-body-sm-regular-fontSize);
13511
+ line-height: var(--text-body-sm-regular-lineHeight);
13512
+ word-break: break-word;
13656
13513
  }
13657
13514
 
13658
- .muka-accordion--contained .muka-accordion__item:last-child {
13659
- border-bottom: none;
13515
+ /* ─── Print ────────────────────────────────────────────── */
13516
+
13517
+ @media print {
13518
+ .muka-agent-task-list {
13519
+ break-inside: avoid;
13520
+ }
13521
+
13522
+ .muka-agent-task-list__chevron {
13523
+ display: none;
13524
+ }
13660
13525
  }
13661
13526
 
13662
13527
 
@@ -13801,3 +13666,134 @@ button.muka-chat-photo-grid__tile:focus-visible {
13801
13666
  outline-offset: 2px;
13802
13667
  }
13803
13668
 
13669
+
13670
+ /* Accordion */
13671
+ /* Accordion Component Styles */
13672
+
13673
+ .muka-accordion {
13674
+ width: 100%;
13675
+ }
13676
+
13677
+ /* Item */
13678
+ .muka-accordion__item {
13679
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
13680
+ }
13681
+
13682
+ .muka-accordion__item:last-child {
13683
+ border-bottom: none;
13684
+ }
13685
+
13686
+ /* Header reset */
13687
+ .muka-accordion__header {
13688
+ margin: 0;
13689
+ }
13690
+
13691
+ /* Trigger */
13692
+ .muka-accordion__trigger {
13693
+ display: flex;
13694
+ align-items: center;
13695
+ justify-content: space-between;
13696
+ width: 100%;
13697
+ padding: var(--spacing-4);
13698
+ background: none;
13699
+ border: none;
13700
+ cursor: pointer;
13701
+ font-family: var(--text-label-md-semibold-fontFamily);
13702
+ font-weight: var(--text-label-md-semibold-fontWeight);
13703
+ font-size: var(--text-label-md-semibold-fontSize);
13704
+ line-height: var(--text-label-md-semibold-lineHeight);
13705
+ color: var(--color-text-default-default);
13706
+ text-align: left;
13707
+ gap: var(--spacing-3);
13708
+ transition: background-color 0.15s ease;
13709
+ }
13710
+
13711
+ .muka-accordion__trigger:hover {
13712
+ background-color: var(--color-surface-level1);
13713
+ }
13714
+
13715
+ .muka-accordion__trigger[data-disabled] {
13716
+ cursor: not-allowed;
13717
+ opacity: 0.4;
13718
+ }
13719
+
13720
+ .muka-accordion__trigger-text {
13721
+ flex: 1;
13722
+ }
13723
+
13724
+ /* Chevron rotation */
13725
+ .muka-accordion__chevron {
13726
+ display: inline-flex;
13727
+ align-items: center;
13728
+ color: var(--color-text-subtle-default);
13729
+ transition: transform 200ms ease;
13730
+ }
13731
+
13732
+ .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13733
+ transform: rotate(180deg);
13734
+ }
13735
+
13736
+ /* Content */
13737
+ .muka-accordion__content {
13738
+ overflow: hidden;
13739
+ }
13740
+
13741
+ .muka-accordion__content[data-state='open'] {
13742
+ animation: muka-accordion-slideDown 200ms ease;
13743
+ }
13744
+
13745
+ .muka-accordion__content[data-state='closed'] {
13746
+ animation: muka-accordion-slideUp 200ms ease;
13747
+ }
13748
+
13749
+ @keyframes muka-accordion-slideDown {
13750
+ from {
13751
+ height: 0;
13752
+ }
13753
+ to {
13754
+ height: var(--radix-accordion-content-height);
13755
+ }
13756
+ }
13757
+
13758
+ @keyframes muka-accordion-slideUp {
13759
+ from {
13760
+ height: var(--radix-accordion-content-height);
13761
+ }
13762
+ to {
13763
+ height: 0;
13764
+ }
13765
+ }
13766
+
13767
+ .muka-accordion__content-inner {
13768
+ padding: 0 var(--spacing-4) var(--spacing-5);
13769
+ color: var(--color-text-default-default);
13770
+ }
13771
+
13772
+ /* ─── Variant: flush ────────────────────────────────────────────────────── */
13773
+
13774
+ .muka-accordion--flush .muka-accordion__trigger {
13775
+ padding-left: 0;
13776
+ padding-right: 0;
13777
+ }
13778
+
13779
+ .muka-accordion--flush .muka-accordion__content-inner {
13780
+ padding-left: 0;
13781
+ padding-right: 0;
13782
+ }
13783
+
13784
+ /* ─── Variant: contained ────────────────────────────────────────────────── */
13785
+
13786
+ .muka-accordion--contained {
13787
+ border: var(--border-width-regular) solid var(--color-border-default);
13788
+ border-radius: var(--radius-md);
13789
+ overflow: hidden;
13790
+ }
13791
+
13792
+ .muka-accordion--contained .muka-accordion__item {
13793
+ background-color: var(--color-surface-level3);
13794
+ }
13795
+
13796
+ .muka-accordion--contained .muka-accordion__item:last-child {
13797
+ border-bottom: none;
13798
+ }
13799
+