@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
@@ -2887,6 +2887,196 @@ body {
2887
2887
  }
2888
2888
 
2889
2889
 
2890
+ /* Toast */
2891
+ /* Toast Component Styles - Using Muka Design Tokens */
2892
+
2893
+ .muka-toast {
2894
+ display: flex;
2895
+ align-items: flex-start;
2896
+ gap: var(--toast-gap);
2897
+ padding: var(--toast-padding-y) var(--toast-padding-x);
2898
+ border-radius: var(--toast-radius);
2899
+ box-shadow: var(--toast-shadow);
2900
+ min-width: var(--toast-width-min);
2901
+ max-width: var(--toast-width-max);
2902
+ pointer-events: auto;
2903
+ animation: muka-toast-slide-in 0.2s ease-out;
2904
+ }
2905
+
2906
+ /* Entry animation */
2907
+ @keyframes muka-toast-slide-in {
2908
+ from {
2909
+ opacity: 0;
2910
+ transform: translateY(8px);
2911
+ }
2912
+ to {
2913
+ opacity: 1;
2914
+ transform: translateY(0);
2915
+ }
2916
+ }
2917
+
2918
+ /* Position variants (for standalone use - typically managed by ToastProvider) */
2919
+ .muka-toast--top-right,
2920
+ .muka-toast--top-left,
2921
+ .muka-toast--top-center,
2922
+ .muka-toast--bottom-right,
2923
+ .muka-toast--bottom-left,
2924
+ .muka-toast--bottom-center {
2925
+ position: fixed;
2926
+ z-index: 9999;
2927
+ }
2928
+
2929
+ .muka-toast--top-right {
2930
+ top: var(--spacing-4);
2931
+ right: var(--spacing-4);
2932
+ }
2933
+
2934
+ .muka-toast--top-left {
2935
+ top: var(--spacing-4);
2936
+ left: var(--spacing-4);
2937
+ }
2938
+
2939
+ .muka-toast--top-center {
2940
+ top: var(--spacing-4);
2941
+ left: 50%;
2942
+ transform: translateX(-50%);
2943
+ }
2944
+
2945
+ .muka-toast--bottom-right {
2946
+ bottom: var(--spacing-4);
2947
+ right: var(--spacing-4);
2948
+ }
2949
+
2950
+ .muka-toast--bottom-left {
2951
+ bottom: var(--spacing-4);
2952
+ left: var(--spacing-4);
2953
+ }
2954
+
2955
+ .muka-toast--bottom-center {
2956
+ bottom: var(--spacing-4);
2957
+ left: 50%;
2958
+ transform: translateX(-50%);
2959
+ }
2960
+
2961
+ /* Variant: Info */
2962
+ .muka-toast--info {
2963
+ background-color: var(--toast-color-info-background);
2964
+ color: var(--toast-color-info-foreground);
2965
+ }
2966
+
2967
+ .muka-toast--info .muka-toast__icon {
2968
+ color: var(--toast-color-info-accent);
2969
+ }
2970
+
2971
+ /* Variant: Success */
2972
+ .muka-toast--success {
2973
+ background-color: var(--toast-color-success-background);
2974
+ color: var(--toast-color-success-foreground);
2975
+ }
2976
+
2977
+ .muka-toast--success .muka-toast__icon {
2978
+ color: var(--toast-color-success-accent);
2979
+ }
2980
+
2981
+ /* Variant: Warning */
2982
+ .muka-toast--warning {
2983
+ background-color: var(--toast-color-warning-background);
2984
+ color: var(--toast-color-warning-foreground);
2985
+ }
2986
+
2987
+ .muka-toast--warning .muka-toast__icon {
2988
+ color: var(--toast-color-warning-accent);
2989
+ }
2990
+
2991
+ /* Variant: Error */
2992
+ .muka-toast--error {
2993
+ background-color: var(--toast-color-error-background);
2994
+ color: var(--toast-color-error-foreground);
2995
+ }
2996
+
2997
+ .muka-toast--error .muka-toast__icon {
2998
+ color: var(--toast-color-error-accent);
2999
+ }
3000
+
3001
+ /* Icon */
3002
+ .muka-toast__icon {
3003
+ display: flex;
3004
+ align-items: center;
3005
+ justify-content: center;
3006
+ flex-shrink: 0;
3007
+ width: var(--toast-icon-size);
3008
+ height: var(--toast-icon-size);
3009
+ }
3010
+
3011
+ .muka-toast__icon svg {
3012
+ width: 100%;
3013
+ height: 100%;
3014
+ }
3015
+
3016
+ /* Content */
3017
+ .muka-toast__content {
3018
+ flex: 1;
3019
+ min-width: 0;
3020
+ }
3021
+
3022
+ .muka-toast__title {
3023
+ font-family: var(--text-label-md-semibold-fontFamily);
3024
+ font-weight: var(--text-label-md-semibold-fontWeight);
3025
+ font-size: var(--text-label-md-semibold-fontSize);
3026
+ line-height: var(--text-label-md-semibold-lineHeight);
3027
+ margin-bottom: var(--spacing-1);
3028
+ }
3029
+
3030
+ .muka-toast__message {
3031
+ font-family: var(--text-body-sm-regular-fontFamily);
3032
+ font-weight: var(--text-body-sm-regular-fontWeight);
3033
+ font-size: var(--text-body-sm-regular-fontSize);
3034
+ line-height: var(--text-body-sm-regular-lineHeight);
3035
+ }
3036
+
3037
+ /* Action slot */
3038
+ .muka-toast__action {
3039
+ display: flex;
3040
+ align-items: center;
3041
+ flex-shrink: 0;
3042
+ }
3043
+
3044
+ /* Dismiss button */
3045
+ .muka-toast__dismiss {
3046
+ display: flex;
3047
+ align-items: center;
3048
+ justify-content: center;
3049
+ flex-shrink: 0;
3050
+ width: 24px;
3051
+ height: 24px;
3052
+ padding: 0;
3053
+ margin: -2px -4px -2px 0;
3054
+ border: none;
3055
+ background: transparent;
3056
+ color: inherit;
3057
+ opacity: 0.7;
3058
+ cursor: pointer;
3059
+ border-radius: var(--border-radius-sm);
3060
+ transition: opacity 0.15s ease, background-color 0.15s ease;
3061
+ }
3062
+
3063
+ .muka-toast__dismiss:hover {
3064
+ opacity: 1;
3065
+ background-color: rgba(0, 0, 0, 0.05);
3066
+ }
3067
+
3068
+ .muka-toast__dismiss:focus-visible {
3069
+ outline: 2px solid var(--color-border-focus);
3070
+ outline-offset: 2px;
3071
+ opacity: 1;
3072
+ }
3073
+
3074
+ .muka-toast__dismiss svg {
3075
+ width: 16px;
3076
+ height: 16px;
3077
+ }
3078
+
3079
+
2890
3080
  /* Tile */
2891
3081
  /* Tile Component Styles - Using Muka Design Tokens */
2892
3082
 
@@ -3248,230 +3438,40 @@ body {
3248
3438
  }
3249
3439
 
3250
3440
 
3251
- /* Toast */
3252
- /* Toast Component Styles - Using Muka Design Tokens */
3441
+ /* Thumbnail */
3442
+ /* Thumbnail Component Styles - Using Muka Design Tokens */
3253
3443
 
3254
- .muka-toast {
3255
- display: flex;
3256
- align-items: flex-start;
3257
- gap: var(--toast-gap);
3258
- padding: var(--toast-padding-y) var(--toast-padding-x);
3259
- border-radius: var(--toast-radius);
3260
- box-shadow: var(--toast-shadow);
3261
- min-width: var(--toast-width-min);
3262
- max-width: var(--toast-width-max);
3263
- pointer-events: auto;
3264
- animation: muka-toast-slide-in 0.2s ease-out;
3444
+ .muka-thumbnail {
3445
+ position: relative;
3446
+ flex-shrink: 0;
3265
3447
  }
3266
3448
 
3267
- /* Entry animation */
3268
- @keyframes muka-toast-slide-in {
3269
- from {
3270
- opacity: 0;
3271
- transform: translateY(8px);
3272
- }
3273
- to {
3274
- opacity: 1;
3275
- transform: translateY(0);
3276
- }
3449
+ /* The frame carries the border, background and shape clip. Keeping it separate
3450
+ from the root lets the remove (×) button sit outside the clip (needed for the
3451
+ circular/ellipse shape, whose corners would otherwise clip the button). */
3452
+ .muka-thumbnail__frame {
3453
+ position: absolute;
3454
+ inset: 0;
3455
+ overflow: hidden;
3456
+ border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3457
+ border-radius: var(--border-radius-lg);
3458
+ background-color: var(--color-surface-level1);
3277
3459
  }
3278
3460
 
3279
- /* Position variants (for standalone use - typically managed by ToastProvider) */
3280
- .muka-toast--top-right,
3281
- .muka-toast--top-left,
3282
- .muka-toast--top-center,
3283
- .muka-toast--bottom-right,
3284
- .muka-toast--bottom-left,
3285
- .muka-toast--bottom-center {
3286
- position: fixed;
3287
- z-index: 9999;
3461
+ /* ─── Shapes ──────────────────────────────────────────── */
3462
+ .muka-thumbnail--4-3 {
3463
+ width: 160px;
3464
+ height: 120px;
3288
3465
  }
3289
3466
 
3290
- .muka-toast--top-right {
3291
- top: var(--spacing-4);
3292
- right: var(--spacing-4);
3467
+ .muka-thumbnail--1-1 {
3468
+ width: 120px;
3469
+ height: 120px;
3293
3470
  }
3294
3471
 
3295
- .muka-toast--top-left {
3296
- top: var(--spacing-4);
3297
- left: var(--spacing-4);
3298
- }
3299
-
3300
- .muka-toast--top-center {
3301
- top: var(--spacing-4);
3302
- left: 50%;
3303
- transform: translateX(-50%);
3304
- }
3305
-
3306
- .muka-toast--bottom-right {
3307
- bottom: var(--spacing-4);
3308
- right: var(--spacing-4);
3309
- }
3310
-
3311
- .muka-toast--bottom-left {
3312
- bottom: var(--spacing-4);
3313
- left: var(--spacing-4);
3314
- }
3315
-
3316
- .muka-toast--bottom-center {
3317
- bottom: var(--spacing-4);
3318
- left: 50%;
3319
- transform: translateX(-50%);
3320
- }
3321
-
3322
- /* Variant: Info */
3323
- .muka-toast--info {
3324
- background-color: var(--toast-color-info-background);
3325
- color: var(--toast-color-info-foreground);
3326
- }
3327
-
3328
- .muka-toast--info .muka-toast__icon {
3329
- color: var(--toast-color-info-accent);
3330
- }
3331
-
3332
- /* Variant: Success */
3333
- .muka-toast--success {
3334
- background-color: var(--toast-color-success-background);
3335
- color: var(--toast-color-success-foreground);
3336
- }
3337
-
3338
- .muka-toast--success .muka-toast__icon {
3339
- color: var(--toast-color-success-accent);
3340
- }
3341
-
3342
- /* Variant: Warning */
3343
- .muka-toast--warning {
3344
- background-color: var(--toast-color-warning-background);
3345
- color: var(--toast-color-warning-foreground);
3346
- }
3347
-
3348
- .muka-toast--warning .muka-toast__icon {
3349
- color: var(--toast-color-warning-accent);
3350
- }
3351
-
3352
- /* Variant: Error */
3353
- .muka-toast--error {
3354
- background-color: var(--toast-color-error-background);
3355
- color: var(--toast-color-error-foreground);
3356
- }
3357
-
3358
- .muka-toast--error .muka-toast__icon {
3359
- color: var(--toast-color-error-accent);
3360
- }
3361
-
3362
- /* Icon */
3363
- .muka-toast__icon {
3364
- display: flex;
3365
- align-items: center;
3366
- justify-content: center;
3367
- flex-shrink: 0;
3368
- width: var(--toast-icon-size);
3369
- height: var(--toast-icon-size);
3370
- }
3371
-
3372
- .muka-toast__icon svg {
3373
- width: 100%;
3374
- height: 100%;
3375
- }
3376
-
3377
- /* Content */
3378
- .muka-toast__content {
3379
- flex: 1;
3380
- min-width: 0;
3381
- }
3382
-
3383
- .muka-toast__title {
3384
- font-family: var(--text-label-md-semibold-fontFamily);
3385
- font-weight: var(--text-label-md-semibold-fontWeight);
3386
- font-size: var(--text-label-md-semibold-fontSize);
3387
- line-height: var(--text-label-md-semibold-lineHeight);
3388
- margin-bottom: var(--spacing-1);
3389
- }
3390
-
3391
- .muka-toast__message {
3392
- font-family: var(--text-body-sm-regular-fontFamily);
3393
- font-weight: var(--text-body-sm-regular-fontWeight);
3394
- font-size: var(--text-body-sm-regular-fontSize);
3395
- line-height: var(--text-body-sm-regular-lineHeight);
3396
- }
3397
-
3398
- /* Action slot */
3399
- .muka-toast__action {
3400
- display: flex;
3401
- align-items: center;
3402
- flex-shrink: 0;
3403
- }
3404
-
3405
- /* Dismiss button */
3406
- .muka-toast__dismiss {
3407
- display: flex;
3408
- align-items: center;
3409
- justify-content: center;
3410
- flex-shrink: 0;
3411
- width: 24px;
3412
- height: 24px;
3413
- padding: 0;
3414
- margin: -2px -4px -2px 0;
3415
- border: none;
3416
- background: transparent;
3417
- color: inherit;
3418
- opacity: 0.7;
3419
- cursor: pointer;
3420
- border-radius: var(--border-radius-sm);
3421
- transition: opacity 0.15s ease, background-color 0.15s ease;
3422
- }
3423
-
3424
- .muka-toast__dismiss:hover {
3425
- opacity: 1;
3426
- background-color: rgba(0, 0, 0, 0.05);
3427
- }
3428
-
3429
- .muka-toast__dismiss:focus-visible {
3430
- outline: 2px solid var(--color-border-focus);
3431
- outline-offset: 2px;
3432
- opacity: 1;
3433
- }
3434
-
3435
- .muka-toast__dismiss svg {
3436
- width: 16px;
3437
- height: 16px;
3438
- }
3439
-
3440
-
3441
- /* Thumbnail */
3442
- /* Thumbnail Component Styles - Using Muka Design Tokens */
3443
-
3444
- .muka-thumbnail {
3445
- position: relative;
3446
- flex-shrink: 0;
3447
- }
3448
-
3449
- /* The frame carries the border, background and shape clip. Keeping it separate
3450
- from the root lets the remove (×) button sit outside the clip (needed for the
3451
- circular/ellipse shape, whose corners would otherwise clip the button). */
3452
- .muka-thumbnail__frame {
3453
- position: absolute;
3454
- inset: 0;
3455
- overflow: hidden;
3456
- border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3457
- border-radius: var(--border-radius-lg);
3458
- background-color: var(--color-surface-level1);
3459
- }
3460
-
3461
- /* ─── Shapes ──────────────────────────────────────────── */
3462
- .muka-thumbnail--4-3 {
3463
- width: 160px;
3464
- height: 120px;
3465
- }
3466
-
3467
- .muka-thumbnail--1-1 {
3468
- width: 120px;
3469
- height: 120px;
3470
- }
3471
-
3472
- .muka-thumbnail--ellipse {
3473
- width: 120px;
3474
- height: 120px;
3472
+ .muka-thumbnail--ellipse {
3473
+ width: 120px;
3474
+ height: 120px;
3475
3475
  }
3476
3476
 
3477
3477
  .muka-thumbnail--ellipse .muka-thumbnail__frame {
@@ -7039,6 +7039,36 @@ body {
7039
7039
  }
7040
7040
 
7041
7041
 
7042
+ /* NumberInput */
7043
+ /* NumberInput — reuses Input field styles (../Input/Input.css). */
7044
+ /* Only the prefix/suffix affixes are NumberInput-specific. */
7045
+
7046
+ .muka-numberinput__addon {
7047
+ display: inline-flex;
7048
+ align-items: center;
7049
+ flex: none;
7050
+ color: var(--color-text-subtle-default);
7051
+ font-family: var(--text-input-md-fontFamily);
7052
+ font-size: var(--text-input-md-fontSize);
7053
+ line-height: var(--text-input-md-lineHeight);
7054
+ user-select: none;
7055
+ pointer-events: none;
7056
+ white-space: nowrap;
7057
+ }
7058
+
7059
+ /* Hide the native number spinners — affixes/step API replace them. */
7060
+ .muka-numberinput__field .muka-input__native::-webkit-outer-spin-button,
7061
+ .muka-numberinput__field .muka-input__native::-webkit-inner-spin-button {
7062
+ -webkit-appearance: none;
7063
+ margin: 0;
7064
+ }
7065
+
7066
+ .muka-numberinput__field .muka-input__native {
7067
+ -moz-appearance: textfield;
7068
+ appearance: textfield;
7069
+ }
7070
+
7071
+
7042
7072
  /* Pagination */
7043
7073
  /* Pagination Component Styles */
7044
7074
 
@@ -7141,36 +7171,6 @@ body {
7141
7171
  }
7142
7172
 
7143
7173
 
7144
- /* NumberInput */
7145
- /* NumberInput — reuses Input field styles (../Input/Input.css). */
7146
- /* Only the prefix/suffix affixes are NumberInput-specific. */
7147
-
7148
- .muka-numberinput__addon {
7149
- display: inline-flex;
7150
- align-items: center;
7151
- flex: none;
7152
- color: var(--color-text-subtle-default);
7153
- font-family: var(--text-input-md-fontFamily);
7154
- font-size: var(--text-input-md-fontSize);
7155
- line-height: var(--text-input-md-lineHeight);
7156
- user-select: none;
7157
- pointer-events: none;
7158
- white-space: nowrap;
7159
- }
7160
-
7161
- /* Hide the native number spinners — affixes/step API replace them. */
7162
- .muka-numberinput__field .muka-input__native::-webkit-outer-spin-button,
7163
- .muka-numberinput__field .muka-input__native::-webkit-inner-spin-button {
7164
- -webkit-appearance: none;
7165
- margin: 0;
7166
- }
7167
-
7168
- .muka-numberinput__field .muka-input__native {
7169
- -moz-appearance: textfield;
7170
- appearance: textfield;
7171
- }
7172
-
7173
-
7174
7174
  /* NavigationTransition */
7175
7175
  /* NavigationTransition Component Styles */
7176
7176
 
@@ -8126,6 +8126,26 @@ li.muka-listitem {
8126
8126
  }
8127
8127
 
8128
8128
 
8129
+ /* Form */
8130
+ .muka-form {
8131
+ display: flex;
8132
+ flex-direction: column;
8133
+ width: 100%;
8134
+ }
8135
+
8136
+ .muka-form--gap-sm {
8137
+ gap: var(--size-sm);
8138
+ }
8139
+
8140
+ .muka-form--gap-md {
8141
+ gap: var(--size-md);
8142
+ }
8143
+
8144
+ .muka-form--gap-lg {
8145
+ gap: var(--size-lg);
8146
+ }
8147
+
8148
+
8129
8149
  /* Icon */
8130
8150
  /* Icon Component Styles - Using Muka Design Tokens */
8131
8151
 
@@ -8180,26 +8200,6 @@ li.muka-listitem {
8180
8200
  }
8181
8201
 
8182
8202
 
8183
- /* Form */
8184
- .muka-form {
8185
- display: flex;
8186
- flex-direction: column;
8187
- width: 100%;
8188
- }
8189
-
8190
- .muka-form--gap-sm {
8191
- gap: var(--size-sm);
8192
- }
8193
-
8194
- .muka-form--gap-md {
8195
- gap: var(--size-md);
8196
- }
8197
-
8198
- .muka-form--gap-lg {
8199
- gap: var(--size-lg);
8200
- }
8201
-
8202
-
8203
8203
  /* FileUpload */
8204
8204
  /* FileUpload Component Styles */
8205
8205
 
@@ -11066,11 +11066,6 @@ button.muka-chat-photo-grid__tile:focus-visible {
11066
11066
  grid-template-areas: 'rail bubble';
11067
11067
  }
11068
11068
 
11069
- .muka-chat-message--own.muka-chat-message--has-avatar .muka-chat-message__row {
11070
- grid-template-columns: minmax(0, 1fr) auto;
11071
- grid-template-areas: 'bubble rail';
11072
- }
11073
-
11074
11069
  .muka-chat-message__rail {
11075
11070
  grid-area: rail;
11076
11071
  /* Sits on the bubble's baseline (Figma 5355:44091) */
@@ -11105,6 +11100,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
11105
11100
 
11106
11101
  .muka-chat-message__bubble {
11107
11102
  grid-area: bubble;
11103
+ /*
11104
+ * Width follows the content: a single line hugs, and once the text wraps the
11105
+ * bubble fills to the shared max width. Robust to string or rich children —
11106
+ * no length measuring needed (Figma `Text length` on 5355:44091).
11107
+ */
11108
+ width: fit-content;
11108
11109
  max-width: var(--chatbubble-max-width);
11109
11110
  position: relative;
11110
11111
  display: flex;
@@ -11117,18 +11118,11 @@ button.muka-chat-photo-grid__tile:focus-visible {
11117
11118
  word-break: break-word;
11118
11119
  }
11119
11120
 
11120
- /*
11121
- * Length axis (Figma `Text length` on 5355:44091): short messages hug their
11122
- * content, long ones fill the row up to the shared max width.
11123
- */
11124
- .muka-chat-message--long .muka-chat-message__bubble {
11121
+ /* Media, an embed or an action stack always run the full bubble width. */
11122
+ .muka-chat-message--has-blocks .muka-chat-message__bubble {
11125
11123
  width: 100%;
11126
11124
  }
11127
11125
 
11128
- .muka-chat-message--short .muka-chat-message__bubble {
11129
- width: fit-content;
11130
- }
11131
-
11132
11126
  .muka-chat-message--own .muka-chat-message__bubble {
11133
11127
  justify-self: end;
11134
11128
  }
@@ -11306,10 +11300,12 @@ button.muka-chat-photo-grid__tile:focus-visible {
11306
11300
  }
11307
11301
 
11308
11302
  /*
11309
- * Media, an embed or an action stack run the full width of the bubble, so the
11310
- * corner the timestamp sits in has to be cleared for it.
11303
+ * When the last block in the body is media, an embed or an action stack (not
11304
+ * trailing text), it runs the full width, so reserve a line below for the inset
11305
+ * timestamp. A message that ends in text clears the corner inline instead (see
11306
+ * `__message` padding-right above), so it needs no extra bottom space.
11311
11307
  */
11312
- .muka-chat-message--has-timestamp.muka-chat-message--has-blocks .muka-chat-message__body {
11308
+ .muka-chat-message--has-timestamp.muka-chat-message--trailing-block .muka-chat-message__body {
11313
11309
  padding-bottom: var(--text-body-xs-regular-lineHeight);
11314
11310
  }
11315
11311
 
@@ -11372,6 +11368,134 @@ button.muka-chat-photo-grid__tile:focus-visible {
11372
11368
  }
11373
11369
 
11374
11370
 
11371
+ /* ChatComposer */
11372
+ /* ChatComposer Component Styles */
11373
+
11374
+ /*
11375
+ * The composer is a bare, fill-width row: no padding, background, border or
11376
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
11377
+ * container — see BottomBar's `chat` variant.
11378
+ */
11379
+ .muka-chat-composer {
11380
+ display: flex;
11381
+ flex-direction: column;
11382
+ gap: var(--spacing-3);
11383
+ width: 100%;
11384
+ }
11385
+
11386
+ .muka-chat-composer--disabled {
11387
+ opacity: 0.6;
11388
+ pointer-events: none;
11389
+ }
11390
+
11391
+ /* ─── Input row ────────────────────────────────────────── */
11392
+
11393
+ .muka-chat-composer__row {
11394
+ display: flex;
11395
+ width: 100%;
11396
+ align-items: flex-end;
11397
+ gap: var(--spacing-3);
11398
+ }
11399
+
11400
+ /* ─── Text field ───────────────────────────────────────── */
11401
+
11402
+ .muka-chat-composer__field {
11403
+ display: flex;
11404
+ flex: 1 1 auto;
11405
+ min-width: 0;
11406
+ box-sizing: border-box;
11407
+ align-items: center;
11408
+ gap: var(--spacing-1);
11409
+ min-height: var(--input-field-height-lg, 48px);
11410
+ padding: 0 var(--spacing-2);
11411
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
11412
+ border-radius: var(--input-field-radius-lg);
11413
+ background-color: var(--input-field-color-default-background);
11414
+ transition: border-color 0.12s ease;
11415
+ }
11416
+
11417
+ .muka-chat-composer__field:focus-within {
11418
+ border-color: var(--input-field-color-focus-border, var(--color-action-default));
11419
+ }
11420
+
11421
+ .muka-chat-composer__input {
11422
+ flex: 1 1 auto;
11423
+ min-width: 0;
11424
+ width: 100%;
11425
+ box-sizing: border-box;
11426
+ resize: none;
11427
+ border: none;
11428
+ background: transparent;
11429
+ outline: none;
11430
+ padding: 0 var(--spacing-1);
11431
+ color: var(--color-text-default-default);
11432
+ font-family: var(--text-body-base-regular-fontFamily);
11433
+ font-weight: var(--text-body-base-regular-fontWeight);
11434
+ font-size: var(--text-body-base-regular-fontSize);
11435
+ line-height: var(--text-body-base-regular-lineHeight);
11436
+ appearance: none;
11437
+ -webkit-appearance: none;
11438
+ }
11439
+
11440
+ .muka-chat-composer__input::placeholder {
11441
+ color: var(--color-text-subtle-default);
11442
+ }
11443
+
11444
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
11445
+ .muka-chat-composer__emoji {
11446
+ flex-shrink: 0;
11447
+ }
11448
+
11449
+ /* ─── Recording bar ────────────────────────────────────── */
11450
+
11451
+ .muka-chat-composer__recording {
11452
+ display: flex;
11453
+ flex: 1 1 auto;
11454
+ min-width: 0;
11455
+ box-sizing: border-box;
11456
+ align-items: center;
11457
+ min-height: var(--input-field-height-lg, 48px);
11458
+ padding: var(--card-padding-sm);
11459
+ border: var(--border-width-regular) solid var(--card-color-default-border);
11460
+ border-radius: var(--radius-lg);
11461
+ background-color: var(--card-color-default-background);
11462
+ }
11463
+
11464
+ /* ─── Staged attachments strip ─────────────────────────── */
11465
+
11466
+ .muka-chat-composer__attachments-strip {
11467
+ position: relative;
11468
+ width: 100%;
11469
+ }
11470
+
11471
+ .muka-chat-composer__attachments {
11472
+ display: flex;
11473
+ gap: var(--spacing-3);
11474
+ overflow-x: auto;
11475
+ scroll-behavior: smooth;
11476
+ scrollbar-width: none;
11477
+ }
11478
+
11479
+ .muka-chat-composer__attachments::-webkit-scrollbar {
11480
+ display: none;
11481
+ }
11482
+
11483
+ .muka-chat-composer__overflow {
11484
+ position: absolute;
11485
+ top: 50%;
11486
+ right: var(--spacing-2);
11487
+ transform: translateY(-50%);
11488
+ }
11489
+
11490
+ /* ─── Print ────────────────────────────────────────────── */
11491
+
11492
+ @media print {
11493
+ .muka-chat-composer {
11494
+ display: none;
11495
+ }
11496
+ }
11497
+
11498
+
11375
11499
  /* ChatAttachmentChip */
11376
11500
  /* ChatAttachmentChip Component Styles */
11377
11501
 
@@ -11639,232 +11763,419 @@ button.muka-chat-photo-grid__tile:focus-visible {
11639
11763
  }
11640
11764
 
11641
11765
 
11642
- /* ChatComposer */
11643
- /* ChatComposer Component Styles */
11766
+ /* Button */
11767
+ /* Button Component Styles - Using Muka Design Tokens */
11644
11768
 
11645
- /*
11646
- * The composer is a bare, fill-width row: no padding, background, border or
11647
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
11648
- * container — see BottomBar's `chat` variant.
11649
- */
11650
- .muka-chat-composer {
11651
- display: flex;
11652
- flex-direction: column;
11653
- gap: var(--spacing-3);
11654
- width: 100%;
11769
+ /* Base button styles */
11770
+ .muka-button {
11771
+ /* Layout */
11772
+ display: inline-flex;
11773
+ align-items: center;
11774
+ justify-content: center;
11775
+
11776
+ /* Typography - using semantic tokens */
11777
+ font-family: var(--alias-font-brand-family);
11778
+ font-weight: var(--alias-font-brand-weight-semibold);
11779
+ text-decoration: none;
11780
+
11781
+ /* Interaction */
11782
+ border: none;
11783
+ cursor: pointer;
11784
+ user-select: none;
11785
+ transition: all 0.2s ease;
11786
+
11787
+ /* Accessibility */
11788
+ outline: none;
11789
+ position: relative;
11655
11790
  }
11656
11791
 
11657
- .muka-chat-composer--disabled {
11658
- opacity: 0.6;
11659
- pointer-events: none;
11792
+ /* Focus styles for accessibility */
11793
+ .muka-button:focus-visible {
11794
+ outline: 2px solid var(--color-border-focus);
11795
+ outline-offset: 2px;
11660
11796
  }
11661
11797
 
11662
- /* ─── Input row ────────────────────────────────────────── */
11798
+ /* Size variants
11799
+ Height is driven by min-height; vertical padding is 0 and the label carries
11800
+ tight (Figma) line-height. Horizontal spacing matches Figma's nested model:
11801
+ the button's padding is the outer container inset, and the label's own
11802
+ padding is the icon-to-text gap (so text-only buttons keep both insets). */
11803
+ .muka-button--sm {
11804
+ padding: 0 var(--button-padding-sm-x);
11805
+ border-radius: var(--button-radius-sm);
11806
+ font-size: var(--text-label-sm-semibold-fontSize);
11807
+ line-height: var(--text-label-sm-semibold-lineHeight);
11808
+ min-height: 32px;
11809
+ }
11663
11810
 
11664
- .muka-chat-composer__row {
11665
- display: flex;
11666
- width: 100%;
11667
- align-items: flex-end;
11668
- gap: var(--spacing-3);
11811
+ .muka-button--sm .muka-button__label {
11812
+ padding: 0 var(--button-gap-sm);
11669
11813
  }
11670
11814
 
11671
- /* ─── Text field ───────────────────────────────────────── */
11815
+ .muka-button--md {
11816
+ padding: 0 var(--button-padding-md-x);
11817
+ border-radius: var(--button-radius-md);
11818
+ font-size: var(--text-label-sm-semibold-fontSize);
11819
+ line-height: var(--text-label-sm-semibold-lineHeight);
11820
+ min-height: 40px;
11821
+ }
11672
11822
 
11673
- .muka-chat-composer__field {
11674
- display: flex;
11675
- flex: 1 1 auto;
11676
- min-width: 0;
11677
- box-sizing: border-box;
11678
- align-items: center;
11679
- gap: var(--spacing-1);
11680
- min-height: var(--input-field-height-lg, 48px);
11681
- padding: 0 var(--spacing-2);
11682
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
11683
- border-radius: var(--input-field-radius-lg);
11684
- background-color: var(--input-field-color-default-background);
11685
- transition: border-color 0.12s ease;
11823
+ .muka-button--md .muka-button__label {
11824
+ padding: 0 var(--button-gap-md);
11686
11825
  }
11687
11826
 
11688
- .muka-chat-composer__field:focus-within {
11689
- border-color: var(--input-field-color-focus-border, var(--color-action-default));
11827
+ .muka-button--lg {
11828
+ padding: 0 var(--button-padding-lg-x);
11829
+ border-radius: var(--button-radius-lg);
11830
+ font-size: var(--text-label-lg-semibold-fontSize);
11831
+ line-height: var(--text-label-lg-semibold-lineHeight);
11832
+ min-height: 48px;
11690
11833
  }
11691
11834
 
11692
- .muka-chat-composer__input {
11693
- flex: 1 1 auto;
11694
- min-width: 0;
11695
- width: 100%;
11696
- box-sizing: border-box;
11697
- resize: none;
11698
- border: none;
11699
- background: transparent;
11700
- outline: none;
11701
- padding: 0 var(--spacing-1);
11702
- color: var(--color-text-default-default);
11703
- font-family: var(--text-body-base-regular-fontFamily);
11704
- font-weight: var(--text-body-base-regular-fontWeight);
11705
- font-size: var(--text-body-base-regular-fontSize);
11706
- line-height: var(--text-body-base-regular-lineHeight);
11707
- appearance: none;
11708
- -webkit-appearance: none;
11835
+ .muka-button--lg .muka-button__label {
11836
+ padding: 0 var(--button-gap-lg);
11709
11837
  }
11710
11838
 
11711
- .muka-chat-composer__input::placeholder {
11712
- color: var(--color-text-subtle-default);
11839
+ .muka-button--xl {
11840
+ padding: 0 var(--button-padding-xl-x);
11841
+ border-radius: var(--button-radius-xl);
11842
+ font-size: var(--text-label-2xl-semibold-fontSize);
11843
+ line-height: var(--text-label-2xl-semibold-lineHeight);
11844
+ min-height: 64px;
11713
11845
  }
11714
11846
 
11715
- /* Keep the in-field emoji button flush to the bottom-right as the field grows */
11716
- .muka-chat-composer__emoji {
11717
- flex-shrink: 0;
11847
+ .muka-button--xl .muka-button__label {
11848
+ padding: 0 var(--button-gap-xl);
11718
11849
  }
11719
11850
 
11720
- /* ─── Recording bar ────────────────────────────────────── */
11721
-
11722
- .muka-chat-composer__recording {
11723
- display: flex;
11724
- flex: 1 1 auto;
11725
- min-width: 0;
11726
- box-sizing: border-box;
11727
- align-items: center;
11728
- min-height: var(--input-field-height-lg, 48px);
11729
- padding: var(--card-padding-sm);
11730
- border: var(--border-width-regular) solid var(--card-color-default-border);
11731
- border-radius: var(--radius-lg);
11732
- background-color: var(--card-color-default-background);
11851
+ /* Primary variant - your main CTA button */
11852
+ .muka-button--primary {
11853
+ background-color: var(--button-color-primary-background-default);
11854
+ color: var(--button-color-primary-foreground-default);
11855
+ box-shadow: var(--button-color-primary-shadow-default);
11733
11856
  }
11734
11857
 
11735
- /* ─── Staged attachments strip ─────────────────────────── */
11736
-
11737
- .muka-chat-composer__attachments-strip {
11738
- position: relative;
11739
- width: 100%;
11858
+ .muka-button--primary:hover:not(:disabled) {
11859
+ background-color: var(--button-color-primary-background-hover);
11860
+ color: var(--button-color-primary-foreground-hover);
11861
+ box-shadow: var(--button-color-primary-shadow-hover);
11740
11862
  }
11741
11863
 
11742
- .muka-chat-composer__attachments {
11743
- display: flex;
11744
- gap: var(--spacing-3);
11745
- overflow-x: auto;
11746
- scroll-behavior: smooth;
11747
- scrollbar-width: none;
11864
+ /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
11865
+ trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
11866
+ gives toggle buttons a visible selected state, so the toggle is not conveyed
11867
+ to sighted users by the accessibility tree alone. */
11868
+ .muka-button--primary:active:not(:disabled),
11869
+ .muka-button--primary.muka-button--pressed:not(:disabled),
11870
+ .muka-button--primary[data-state="open"]:not(:disabled),
11871
+ .muka-button--primary[aria-pressed="true"]:not(:disabled) {
11872
+ background-color: var(--button-color-primary-background-pressed);
11873
+ color: var(--button-color-primary-foreground-pressed);
11874
+ box-shadow: var(--button-color-primary-shadow-pressed);
11748
11875
  }
11749
11876
 
11750
- .muka-chat-composer__attachments::-webkit-scrollbar {
11751
- display: none;
11877
+ .muka-button--primary:disabled {
11878
+ background-color: var(--button-color-primary-background-disabled);
11879
+ color: var(--button-color-primary-foreground-disabled);
11880
+ box-shadow: var(--button-color-primary-shadow-disabled);
11881
+ cursor: not-allowed;
11882
+ opacity: 1; /* Remove opacity since we have proper disabled tokens */
11752
11883
  }
11753
11884
 
11754
- .muka-chat-composer__overflow {
11755
- position: absolute;
11756
- top: 50%;
11757
- right: var(--spacing-2);
11758
- transform: translateY(-50%);
11885
+ /* Secondary variant - supporting actions, no border, only bottom inner shadow */
11886
+ .muka-button--secondary {
11887
+ background-color: var(--button-color-secondary-background-default);
11888
+ color: var(--button-color-secondary-foreground-default);
11889
+ box-shadow: var(--button-color-secondary-shadow-default);
11759
11890
  }
11760
11891
 
11761
- /* ─── Print ────────────────────────────────────────────── */
11762
-
11763
- @media print {
11764
- .muka-chat-composer {
11765
- display: none;
11766
- }
11892
+ .muka-button--secondary:hover:not(:disabled) {
11893
+ background-color: var(--button-color-secondary-background-hover);
11894
+ color: var(--button-color-secondary-foreground-hover);
11895
+ box-shadow: var(--button-color-secondary-shadow-hover);
11767
11896
  }
11768
11897
 
11769
-
11770
- /* Breadcrumb */
11771
- /* Breadcrumb Component Styles */
11772
-
11773
- .muka-breadcrumb__list {
11774
- display: flex;
11775
- align-items: center;
11776
- flex-wrap: wrap;
11777
- list-style: none;
11778
- margin: 0;
11779
- padding: 0;
11780
- gap: var(--spacing-1);
11898
+ .muka-button--secondary:active:not(:disabled),
11899
+ .muka-button--secondary.muka-button--pressed:not(:disabled),
11900
+ .muka-button--secondary[data-state="open"]:not(:disabled),
11901
+ .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
11902
+ background-color: var(--button-color-secondary-background-pressed);
11903
+ color: var(--button-color-secondary-foreground-pressed);
11904
+ box-shadow: var(--button-color-secondary-shadow-pressed);
11781
11905
  }
11782
11906
 
11783
- .muka-breadcrumb__item {
11784
- display: inline-flex;
11785
- align-items: center;
11786
- gap: var(--spacing-1);
11907
+ .muka-button--secondary:disabled {
11908
+ background-color: var(--button-color-secondary-background-disabled);
11909
+ color: var(--button-color-secondary-foreground-disabled);
11910
+ box-shadow: var(--button-color-secondary-shadow-disabled);
11911
+ cursor: not-allowed;
11912
+ opacity: 1;
11787
11913
  }
11788
11914
 
11789
- .muka-breadcrumb__icon {
11790
- display: inline-flex;
11791
- align-items: center;
11792
- color: var(--color-text-subtle-default);
11915
+ /* Tertiary variant - tinted background with accent text and border */
11916
+ .muka-button--tertiary {
11917
+ background-color: var(--button-color-tertiary-background-default);
11918
+ color: var(--button-color-tertiary-foreground-default);
11919
+ border: 1px solid var(--button-color-tertiary-border-default);
11793
11920
  }
11794
11921
 
11795
- /* Link styles */
11796
- .muka-breadcrumb__link {
11797
- color: var(--color-text-subtle-default);
11798
- text-decoration: none;
11799
- border: none;
11800
- background: none;
11801
- padding: 0;
11802
- cursor: pointer;
11803
- font: inherit;
11804
- transition: color 0.15s ease;
11922
+ .muka-button--tertiary:hover:not(:disabled) {
11923
+ background-color: var(--button-color-tertiary-background-hover);
11924
+ color: var(--button-color-tertiary-foreground-hover);
11925
+ border-color: var(--button-color-tertiary-border-hover);
11805
11926
  }
11806
11927
 
11807
- .muka-breadcrumb__link:hover {
11808
- color: var(--color-text-action-default);
11809
- text-decoration: underline;
11928
+ .muka-button--tertiary:active:not(:disabled),
11929
+ .muka-button--tertiary.muka-button--pressed:not(:disabled),
11930
+ .muka-button--tertiary[data-state="open"]:not(:disabled),
11931
+ .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
11932
+ background-color: var(--button-color-tertiary-background-pressed);
11933
+ color: var(--button-color-tertiary-foreground-pressed);
11934
+ border-color: var(--button-color-tertiary-border-pressed);
11810
11935
  }
11811
11936
 
11812
- /* Current page (last item) */
11813
- .muka-breadcrumb__current {
11814
- color: var(--color-text-default-default);
11815
- font-weight: 600;
11937
+ .muka-button--tertiary:disabled {
11938
+ background-color: var(--button-color-tertiary-background-disabled);
11939
+ color: var(--button-color-tertiary-foreground-disabled);
11940
+ border-color: var(--button-color-tertiary-border-disabled);
11941
+ cursor: not-allowed;
11942
+ opacity: 1;
11816
11943
  }
11817
11944
 
11818
- /* Separator */
11819
- .muka-breadcrumb__separator {
11820
- color: var(--color-text-subtle-default);
11821
- user-select: none;
11945
+ /* Ghost variant - minimal styling, border appears on hover */
11946
+ .muka-button--ghost {
11947
+ background-color: var(--button-color-ghost-background-default);
11948
+ color: var(--button-color-ghost-foreground-default);
11949
+ border: 1px solid var(--button-color-ghost-border-default);
11822
11950
  }
11823
11951
 
11824
- /* Ellipsis */
11825
- .muka-breadcrumb__ellipsis {
11826
- color: var(--color-text-subtle-default);
11952
+ .muka-button--ghost:hover:not(:disabled) {
11953
+ background-color: var(--button-color-ghost-background-hover);
11954
+ color: var(--button-color-ghost-foreground-hover);
11955
+ border-color: var(--button-color-ghost-border-hover);
11827
11956
  }
11828
11957
 
11829
- /* Size variants */
11830
- .muka-breadcrumb--sm {
11831
- font-family: var(--text-label-sm-regular-fontFamily);
11832
- font-weight: var(--text-label-sm-regular-fontWeight);
11833
- font-size: var(--text-label-sm-regular-fontSize);
11834
- line-height: var(--text-label-sm-regular-lineHeight);
11958
+ .muka-button--ghost:active:not(:disabled),
11959
+ .muka-button--ghost.muka-button--pressed:not(:disabled),
11960
+ .muka-button--ghost[data-state="open"]:not(:disabled),
11961
+ .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
11962
+ background-color: var(--button-color-ghost-background-pressed);
11963
+ color: var(--button-color-ghost-foreground-pressed);
11964
+ border-color: var(--button-color-ghost-border-pressed);
11835
11965
  }
11836
11966
 
11837
- .muka-breadcrumb--md {
11838
- font-family: var(--text-label-md-regular-fontFamily);
11839
- font-weight: var(--text-label-md-regular-fontWeight);
11840
- font-size: var(--text-label-md-regular-fontSize);
11841
- line-height: var(--text-label-md-regular-lineHeight);
11967
+ .muka-button--ghost:disabled {
11968
+ background-color: var(--button-color-ghost-background-disabled);
11969
+ color: var(--button-color-ghost-foreground-disabled);
11970
+ border-color: var(--button-color-ghost-border-disabled);
11971
+ cursor: not-allowed;
11972
+ opacity: 1;
11842
11973
  }
11843
11974
 
11844
- .muka-breadcrumb--lg {
11845
- font-family: var(--text-label-lg-regular-fontFamily);
11846
- font-weight: var(--text-label-lg-regular-fontWeight);
11847
- font-size: var(--text-label-lg-regular-fontSize);
11848
- line-height: var(--text-label-lg-regular-lineHeight);
11975
+ /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
11976
+ .muka-button--muted {
11977
+ background-color: var(--button-color-muted-background-default);
11978
+ color: var(--button-color-muted-foreground-default);
11979
+ border: 1px solid var(--button-color-muted-border-default);
11849
11980
  }
11850
11981
 
11982
+ .muka-button--muted:hover:not(:disabled) {
11983
+ background-color: var(--button-color-muted-background-hover);
11984
+ color: var(--button-color-muted-foreground-hover);
11985
+ border-color: var(--button-color-muted-border-hover);
11986
+ }
11851
11987
 
11852
- /* BottomBar */
11853
- /* BottomBar Component Styles */
11988
+ .muka-button--muted:active:not(:disabled),
11989
+ .muka-button--muted.muka-button--pressed:not(:disabled),
11990
+ .muka-button--muted[data-state="open"]:not(:disabled),
11991
+ .muka-button--muted[aria-pressed="true"]:not(:disabled) {
11992
+ background-color: var(--button-color-muted-background-pressed);
11993
+ color: var(--button-color-muted-foreground-pressed);
11994
+ border-color: var(--button-color-muted-border-pressed);
11995
+ }
11854
11996
 
11855
- .muka-bottombar {
11856
- width: 100%;
11857
- background-color: var(--bottombar-color-background);
11997
+ .muka-button--muted:disabled {
11998
+ background-color: var(--button-color-muted-background-disabled);
11999
+ color: var(--button-color-muted-foreground-disabled);
12000
+ border-color: var(--button-color-muted-border-disabled);
12001
+ cursor: not-allowed;
12002
+ opacity: 1;
11858
12003
  }
11859
12004
 
11860
- /* Push content above the iPhone home indicator. Opt out via disableSafeArea. */
11861
- .muka-bottombar:not(.muka-bottombar--floating):not(.muka-bottombar--no-safe-area) {
11862
- padding-bottom: env(safe-area-inset-bottom);
12005
+ /* General disabled state - fallback */
12006
+ .muka-button:disabled {
12007
+ cursor: not-allowed;
12008
+ pointer-events: none;
11863
12009
  }
11864
12010
 
11865
- /* Floating variant: ensure margin-bottom is at least the safe-area inset. */
11866
- .muka-bottombar--floating:not(.muka-bottombar--no-safe-area) {
11867
- padding-bottom: max(var(--bottombar-floating-margin-bottom), env(safe-area-inset-bottom));
12011
+ /* Full width modifier */
12012
+ .muka-button--full-width {
12013
+ width: 100%;
12014
+ }
12015
+
12016
+ /* Icons - forced to the Figma per-size dimension regardless of the icon passed */
12017
+ .muka-button__icon {
12018
+ display: inline-flex;
12019
+ align-items: center;
12020
+ justify-content: center;
12021
+ flex-shrink: 0;
12022
+ }
12023
+
12024
+ /* Make the icon content (raw <svg> or a nested Icon span) fill the wrapper.
12025
+ Scoped under .muka-button to outrank Icon.css's own `.muka-icon--{size}`
12026
+ rule, so the button's size wins even when the icon hardcodes its own size. */
12027
+ .muka-button .muka-button__icon > *,
12028
+ .muka-button .muka-button__icon svg {
12029
+ width: 100%;
12030
+ height: 100%;
12031
+ display: block;
12032
+ }
12033
+
12034
+ .muka-button--sm .muka-button__icon {
12035
+ width: var(--button-icon-sm);
12036
+ height: var(--button-icon-sm);
12037
+ }
12038
+
12039
+ .muka-button--md .muka-button__icon {
12040
+ width: var(--button-icon-md);
12041
+ height: var(--button-icon-md);
12042
+ }
12043
+
12044
+ .muka-button--lg .muka-button__icon {
12045
+ width: var(--button-icon-lg);
12046
+ height: var(--button-icon-lg);
12047
+ }
12048
+
12049
+ .muka-button--xl .muka-button__icon {
12050
+ width: var(--button-icon-xl);
12051
+ height: var(--button-icon-xl);
12052
+ }
12053
+
12054
+ .muka-button__label {
12055
+ display: inline-flex;
12056
+ align-items: center;
12057
+ }
12058
+
12059
+ /* Icon-only buttons - square, sized to the button height per size */
12060
+ .muka-button--icon-only {
12061
+ padding: 0;
12062
+ }
12063
+
12064
+ .muka-button--icon-only.muka-button--sm {
12065
+ width: 32px;
12066
+ }
12067
+
12068
+ .muka-button--icon-only.muka-button--md {
12069
+ width: 40px;
12070
+ }
12071
+
12072
+ .muka-button--icon-only.muka-button--lg {
12073
+ width: 48px;
12074
+ }
12075
+
12076
+ .muka-button--icon-only.muka-button--xl {
12077
+ width: 64px;
12078
+ }
12079
+
12080
+
12081
+ /* Breadcrumb */
12082
+ /* Breadcrumb Component Styles */
12083
+
12084
+ .muka-breadcrumb__list {
12085
+ display: flex;
12086
+ align-items: center;
12087
+ flex-wrap: wrap;
12088
+ list-style: none;
12089
+ margin: 0;
12090
+ padding: 0;
12091
+ gap: var(--spacing-1);
12092
+ }
12093
+
12094
+ .muka-breadcrumb__item {
12095
+ display: inline-flex;
12096
+ align-items: center;
12097
+ gap: var(--spacing-1);
12098
+ }
12099
+
12100
+ .muka-breadcrumb__icon {
12101
+ display: inline-flex;
12102
+ align-items: center;
12103
+ color: var(--color-text-subtle-default);
12104
+ }
12105
+
12106
+ /* Link styles */
12107
+ .muka-breadcrumb__link {
12108
+ color: var(--color-text-subtle-default);
12109
+ text-decoration: none;
12110
+ border: none;
12111
+ background: none;
12112
+ padding: 0;
12113
+ cursor: pointer;
12114
+ font: inherit;
12115
+ transition: color 0.15s ease;
12116
+ }
12117
+
12118
+ .muka-breadcrumb__link:hover {
12119
+ color: var(--color-text-action-default);
12120
+ text-decoration: underline;
12121
+ }
12122
+
12123
+ /* Current page (last item) */
12124
+ .muka-breadcrumb__current {
12125
+ color: var(--color-text-default-default);
12126
+ font-weight: 600;
12127
+ }
12128
+
12129
+ /* Separator */
12130
+ .muka-breadcrumb__separator {
12131
+ color: var(--color-text-subtle-default);
12132
+ user-select: none;
12133
+ }
12134
+
12135
+ /* Ellipsis */
12136
+ .muka-breadcrumb__ellipsis {
12137
+ color: var(--color-text-subtle-default);
12138
+ }
12139
+
12140
+ /* Size variants */
12141
+ .muka-breadcrumb--sm {
12142
+ font-family: var(--text-label-sm-regular-fontFamily);
12143
+ font-weight: var(--text-label-sm-regular-fontWeight);
12144
+ font-size: var(--text-label-sm-regular-fontSize);
12145
+ line-height: var(--text-label-sm-regular-lineHeight);
12146
+ }
12147
+
12148
+ .muka-breadcrumb--md {
12149
+ font-family: var(--text-label-md-regular-fontFamily);
12150
+ font-weight: var(--text-label-md-regular-fontWeight);
12151
+ font-size: var(--text-label-md-regular-fontSize);
12152
+ line-height: var(--text-label-md-regular-lineHeight);
12153
+ }
12154
+
12155
+ .muka-breadcrumb--lg {
12156
+ font-family: var(--text-label-lg-regular-fontFamily);
12157
+ font-weight: var(--text-label-lg-regular-fontWeight);
12158
+ font-size: var(--text-label-lg-regular-fontSize);
12159
+ line-height: var(--text-label-lg-regular-lineHeight);
12160
+ }
12161
+
12162
+
12163
+ /* BottomBar */
12164
+ /* BottomBar Component Styles */
12165
+
12166
+ .muka-bottombar {
12167
+ width: 100%;
12168
+ background-color: var(--bottombar-color-background);
12169
+ }
12170
+
12171
+ /* Push content above the iPhone home indicator. Opt out via disableSafeArea. */
12172
+ .muka-bottombar:not(.muka-bottombar--floating):not(.muka-bottombar--no-safe-area) {
12173
+ padding-bottom: env(safe-area-inset-bottom);
12174
+ }
12175
+
12176
+ /* Floating variant: ensure margin-bottom is at least the safe-area inset. */
12177
+ .muka-bottombar--floating:not(.muka-bottombar--no-safe-area) {
12178
+ padding-bottom: max(var(--bottombar-floating-margin-bottom), env(safe-area-inset-bottom));
11868
12179
  }
11869
12180
 
11870
12181
  /* ─── Divider (non-floating) ──────────────────────────── */
@@ -12261,318 +12572,187 @@ button.muka-chat-photo-grid__tile:focus-visible {
12261
12572
  }
12262
12573
 
12263
12574
 
12264
- /* Button */
12265
- /* Button Component Styles - Using Muka Design Tokens */
12575
+ /* Badge */
12576
+ /* Badge Component Styles - Using Muka Design Tokens */
12266
12577
 
12267
- /* Base button styles */
12268
- .muka-button {
12269
- /* Layout */
12578
+ .muka-badge {
12270
12579
  display: inline-flex;
12271
12580
  align-items: center;
12272
- justify-content: center;
12273
-
12274
- /* Typography - using semantic tokens */
12275
- font-family: var(--alias-font-brand-family);
12276
- font-weight: var(--alias-font-brand-weight-semibold);
12277
- text-decoration: none;
12278
-
12279
- /* Interaction */
12280
- border: none;
12281
- cursor: pointer;
12581
+ border-radius: var(--border-radius-full);
12582
+ white-space: nowrap;
12282
12583
  user-select: none;
12283
- transition: all 0.2s ease;
12284
-
12285
- /* Accessibility */
12286
- outline: none;
12287
- position: relative;
12288
- }
12289
-
12290
- /* Focus styles for accessibility */
12291
- .muka-button:focus-visible {
12292
- outline: 2px solid var(--color-border-focus);
12293
- outline-offset: 2px;
12294
- }
12295
-
12296
- /* Size variants
12297
- Height is driven by min-height; vertical padding is 0 and the label carries
12298
- tight (Figma) line-height. Horizontal spacing matches Figma's nested model:
12299
- the button's padding is the outer container inset, and the label's own
12300
- padding is the icon-to-text gap (so text-only buttons keep both insets). */
12301
- .muka-button--sm {
12302
- padding: 0 var(--button-padding-sm-x);
12303
- border-radius: var(--button-radius-sm);
12304
- font-size: var(--text-label-sm-semibold-fontSize);
12305
- line-height: var(--text-label-sm-semibold-lineHeight);
12306
- min-height: 32px;
12307
- }
12308
-
12309
- .muka-button--sm .muka-button__label {
12310
- padding: 0 var(--button-gap-sm);
12311
- }
12312
-
12313
- .muka-button--md {
12314
- padding: 0 var(--button-padding-md-x);
12315
- border-radius: var(--button-radius-md);
12316
- font-size: var(--text-label-sm-semibold-fontSize);
12317
- line-height: var(--text-label-sm-semibold-lineHeight);
12318
- min-height: 40px;
12319
- }
12320
-
12321
- .muka-button--md .muka-button__label {
12322
- padding: 0 var(--button-gap-md);
12323
- }
12324
-
12325
- .muka-button--lg {
12326
- padding: 0 var(--button-padding-lg-x);
12327
- border-radius: var(--button-radius-lg);
12328
- font-size: var(--text-label-lg-semibold-fontSize);
12329
- line-height: var(--text-label-lg-semibold-lineHeight);
12330
- min-height: 48px;
12331
- }
12332
-
12333
- .muka-button--lg .muka-button__label {
12334
- padding: 0 var(--button-gap-lg);
12335
- }
12336
-
12337
- .muka-button--xl {
12338
- padding: 0 var(--button-padding-xl-x);
12339
- border-radius: var(--button-radius-xl);
12340
- font-size: var(--text-label-2xl-semibold-fontSize);
12341
- line-height: var(--text-label-2xl-semibold-lineHeight);
12342
- min-height: 64px;
12343
- }
12344
-
12345
- .muka-button--xl .muka-button__label {
12346
- padding: 0 var(--button-gap-xl);
12347
- }
12348
-
12349
- /* Primary variant - your main CTA button */
12350
- .muka-button--primary {
12351
- background-color: var(--button-color-primary-background-default);
12352
- color: var(--button-color-primary-foreground-default);
12353
- box-shadow: var(--button-color-primary-shadow-default);
12354
- }
12355
-
12356
- .muka-button--primary:hover:not(:disabled) {
12357
- background-color: var(--button-color-primary-background-hover);
12358
- color: var(--button-color-primary-foreground-hover);
12359
- box-shadow: var(--button-color-primary-shadow-hover);
12360
- }
12361
-
12362
- /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
12363
- trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
12364
- gives toggle buttons a visible selected state, so the toggle is not conveyed
12365
- to sighted users by the accessibility tree alone. */
12366
- .muka-button--primary:active:not(:disabled),
12367
- .muka-button--primary.muka-button--pressed:not(:disabled),
12368
- .muka-button--primary[data-state="open"]:not(:disabled),
12369
- .muka-button--primary[aria-pressed="true"]:not(:disabled) {
12370
- background-color: var(--button-color-primary-background-pressed);
12371
- color: var(--button-color-primary-foreground-pressed);
12372
- box-shadow: var(--button-color-primary-shadow-pressed);
12373
- }
12374
-
12375
- .muka-button--primary:disabled {
12376
- background-color: var(--button-color-primary-background-disabled);
12377
- color: var(--button-color-primary-foreground-disabled);
12378
- box-shadow: var(--button-color-primary-shadow-disabled);
12379
- cursor: not-allowed;
12380
- opacity: 1; /* Remove opacity since we have proper disabled tokens */
12381
- }
12382
-
12383
- /* Secondary variant - supporting actions, no border, only bottom inner shadow */
12384
- .muka-button--secondary {
12385
- background-color: var(--button-color-secondary-background-default);
12386
- color: var(--button-color-secondary-foreground-default);
12387
- box-shadow: var(--button-color-secondary-shadow-default);
12388
- }
12389
-
12390
- .muka-button--secondary:hover:not(:disabled) {
12391
- background-color: var(--button-color-secondary-background-hover);
12392
- color: var(--button-color-secondary-foreground-hover);
12393
- box-shadow: var(--button-color-secondary-shadow-hover);
12394
- }
12395
-
12396
- .muka-button--secondary:active:not(:disabled),
12397
- .muka-button--secondary.muka-button--pressed:not(:disabled),
12398
- .muka-button--secondary[data-state="open"]:not(:disabled),
12399
- .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
12400
- background-color: var(--button-color-secondary-background-pressed);
12401
- color: var(--button-color-secondary-foreground-pressed);
12402
- box-shadow: var(--button-color-secondary-shadow-pressed);
12403
- }
12404
-
12405
- .muka-button--secondary:disabled {
12406
- background-color: var(--button-color-secondary-background-disabled);
12407
- color: var(--button-color-secondary-foreground-disabled);
12408
- box-shadow: var(--button-color-secondary-shadow-disabled);
12409
- cursor: not-allowed;
12410
- opacity: 1;
12584
+ box-sizing: border-box;
12411
12585
  }
12412
12586
 
12413
- /* Tertiary variant - tinted background with accent text and border */
12414
- .muka-button--tertiary {
12415
- background-color: var(--button-color-tertiary-background-default);
12416
- color: var(--button-color-tertiary-foreground-default);
12417
- border: 1px solid var(--button-color-tertiary-border-default);
12587
+ /*
12588
+ * Sizes — height, gap, type, and default (label-edge) horizontal padding.
12589
+ * Mirrors Chip so the two components share sizing, fonts, and spacing.
12590
+ * Vertical centering is handled by the fixed height + align-items: center.
12591
+ * The leading side gets a tighter padding when an icon/dot is present, via the
12592
+ * --has-icon / --has-dot modifiers below.
12593
+ */
12594
+ .muka-badge--sm {
12595
+ height: var(--badge-size-height-sm);
12596
+ gap: var(--badge-gap-sm);
12597
+ padding: 0 var(--badge-padding-label-sm);
12598
+ font-family: var(--text-label-sm-regular-fontFamily);
12599
+ font-weight: var(--text-label-sm-regular-fontWeight);
12600
+ font-size: var(--text-label-sm-regular-fontSize);
12601
+ line-height: var(--text-label-sm-regular-lineHeight);
12418
12602
  }
12419
12603
 
12420
- .muka-button--tertiary:hover:not(:disabled) {
12421
- background-color: var(--button-color-tertiary-background-hover);
12422
- color: var(--button-color-tertiary-foreground-hover);
12423
- border-color: var(--button-color-tertiary-border-hover);
12604
+ .muka-badge--md {
12605
+ height: var(--badge-size-height-md);
12606
+ gap: var(--badge-gap-md);
12607
+ padding: 0 var(--badge-padding-label-md);
12608
+ font-family: var(--text-label-md-regular-fontFamily);
12609
+ font-weight: var(--text-label-md-regular-fontWeight);
12610
+ font-size: var(--text-label-md-regular-fontSize);
12611
+ line-height: var(--text-label-md-regular-lineHeight);
12424
12612
  }
12425
12613
 
12426
- .muka-button--tertiary:active:not(:disabled),
12427
- .muka-button--tertiary.muka-button--pressed:not(:disabled),
12428
- .muka-button--tertiary[data-state="open"]:not(:disabled),
12429
- .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
12430
- background-color: var(--button-color-tertiary-background-pressed);
12431
- color: var(--button-color-tertiary-foreground-pressed);
12432
- border-color: var(--button-color-tertiary-border-pressed);
12614
+ .muka-badge--lg {
12615
+ height: var(--badge-size-height-lg);
12616
+ gap: var(--badge-gap-lg);
12617
+ padding: 0 var(--badge-padding-label-lg);
12618
+ font-family: var(--text-label-lg-regular-fontFamily);
12619
+ font-weight: var(--text-label-lg-regular-fontWeight);
12620
+ font-size: var(--text-label-lg-regular-fontSize);
12621
+ line-height: var(--text-label-lg-regular-lineHeight);
12433
12622
  }
12434
12623
 
12435
- .muka-button--tertiary:disabled {
12436
- background-color: var(--button-color-tertiary-background-disabled);
12437
- color: var(--button-color-tertiary-foreground-disabled);
12438
- border-color: var(--button-color-tertiary-border-disabled);
12439
- cursor: not-allowed;
12440
- opacity: 1;
12624
+ /* Tighter leading padding when a leading icon or dot is present */
12625
+ .muka-badge--sm.muka-badge--has-icon,
12626
+ .muka-badge--sm.muka-badge--has-dot {
12627
+ padding-left: var(--badge-padding-leading-sm);
12441
12628
  }
12442
-
12443
- /* Ghost variant - minimal styling, border appears on hover */
12444
- .muka-button--ghost {
12445
- background-color: var(--button-color-ghost-background-default);
12446
- color: var(--button-color-ghost-foreground-default);
12447
- border: 1px solid var(--button-color-ghost-border-default);
12629
+ .muka-badge--md.muka-badge--has-icon,
12630
+ .muka-badge--md.muka-badge--has-dot {
12631
+ padding-left: var(--badge-padding-leading-md);
12448
12632
  }
12449
-
12450
- .muka-button--ghost:hover:not(:disabled) {
12451
- background-color: var(--button-color-ghost-background-hover);
12452
- color: var(--button-color-ghost-foreground-hover);
12453
- border-color: var(--button-color-ghost-border-hover);
12633
+ .muka-badge--lg.muka-badge--has-icon,
12634
+ .muka-badge--lg.muka-badge--has-dot {
12635
+ padding-left: var(--badge-padding-leading-lg);
12454
12636
  }
12455
12637
 
12456
- .muka-button--ghost:active:not(:disabled),
12457
- .muka-button--ghost.muka-button--pressed:not(:disabled),
12458
- .muka-button--ghost[data-state="open"]:not(:disabled),
12459
- .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
12460
- background-color: var(--button-color-ghost-background-pressed);
12461
- color: var(--button-color-ghost-foreground-pressed);
12462
- border-color: var(--button-color-ghost-border-pressed);
12638
+ /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
12639
+ .muka-badge__icon {
12640
+ display: inline-flex;
12641
+ align-items: center;
12642
+ justify-content: center;
12643
+ flex-shrink: 0;
12463
12644
  }
12464
12645
 
12465
- .muka-button--ghost:disabled {
12466
- background-color: var(--button-color-ghost-background-disabled);
12467
- color: var(--button-color-ghost-foreground-disabled);
12468
- border-color: var(--button-color-ghost-border-disabled);
12469
- cursor: not-allowed;
12470
- opacity: 1;
12646
+ .muka-badge--sm .muka-badge__icon {
12647
+ width: var(--icon-size-xs);
12648
+ height: var(--icon-size-xs);
12471
12649
  }
12472
-
12473
- /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
12474
- .muka-button--muted {
12475
- background-color: var(--button-color-muted-background-default);
12476
- color: var(--button-color-muted-foreground-default);
12477
- border: 1px solid var(--button-color-muted-border-default);
12650
+ .muka-badge--md .muka-badge__icon {
12651
+ width: var(--icon-size-sm);
12652
+ height: var(--icon-size-sm);
12478
12653
  }
12479
-
12480
- .muka-button--muted:hover:not(:disabled) {
12481
- background-color: var(--button-color-muted-background-hover);
12482
- color: var(--button-color-muted-foreground-hover);
12483
- border-color: var(--button-color-muted-border-hover);
12654
+ .muka-badge--lg .muka-badge__icon {
12655
+ width: var(--icon-size-default);
12656
+ height: var(--icon-size-default);
12484
12657
  }
12485
12658
 
12486
- .muka-button--muted:active:not(:disabled),
12487
- .muka-button--muted.muka-button--pressed:not(:disabled),
12488
- .muka-button--muted[data-state="open"]:not(:disabled),
12489
- .muka-button--muted[aria-pressed="true"]:not(:disabled) {
12490
- background-color: var(--button-color-muted-background-pressed);
12491
- color: var(--button-color-muted-foreground-pressed);
12492
- border-color: var(--button-color-muted-border-pressed);
12659
+ /* Force the passed content (raw <svg> or an <Icon> wrapper) to the slot size,
12660
+ so callers don't have to size the icon to match each badge size. The
12661
+ .muka-icon selector is intentionally 2 classes deep to override .muka-icon--md. */
12662
+ .muka-badge__icon .muka-icon,
12663
+ .muka-badge__icon svg {
12664
+ width: 100%;
12665
+ height: 100%;
12493
12666
  }
12494
12667
 
12495
- .muka-button--muted:disabled {
12496
- background-color: var(--button-color-muted-background-disabled);
12497
- color: var(--button-color-muted-foreground-disabled);
12498
- border-color: var(--button-color-muted-border-disabled);
12499
- cursor: not-allowed;
12500
- opacity: 1;
12668
+ /* Icons inherit the badge's per-variant foreground color */
12669
+ .muka-badge .muka-icon {
12670
+ color: inherit;
12501
12671
  }
12502
12672
 
12503
- /* General disabled state - fallback */
12504
- .muka-button:disabled {
12505
- cursor: not-allowed;
12506
- pointer-events: none;
12673
+ /* Dot indicator */
12674
+ .muka-badge__dot {
12675
+ flex-shrink: 0;
12676
+ border-radius: var(--border-radius-full);
12507
12677
  }
12508
12678
 
12509
- /* Full width modifier */
12510
- .muka-button--full-width {
12511
- width: 100%;
12679
+ .muka-badge--sm .muka-badge__dot {
12680
+ width: var(--badge-size-dot-sm);
12681
+ height: var(--badge-size-dot-sm);
12512
12682
  }
12513
12683
 
12514
- /* Icons - forced to the Figma per-size dimension regardless of the icon passed */
12515
- .muka-button__icon {
12516
- display: inline-flex;
12517
- align-items: center;
12518
- justify-content: center;
12519
- flex-shrink: 0;
12684
+ .muka-badge--md .muka-badge__dot {
12685
+ width: var(--badge-size-dot-md);
12686
+ height: var(--badge-size-dot-md);
12520
12687
  }
12521
12688
 
12522
- /* Make the icon content (raw <svg> or a nested Icon span) fill the wrapper.
12523
- Scoped under .muka-button to outrank Icon.css's own `.muka-icon--{size}`
12524
- rule, so the button's size wins even when the icon hardcodes its own size. */
12525
- .muka-button .muka-button__icon > *,
12526
- .muka-button .muka-button__icon svg {
12527
- width: 100%;
12528
- height: 100%;
12529
- display: block;
12689
+ .muka-badge--lg .muka-badge__dot {
12690
+ width: var(--badge-size-dot-lg);
12691
+ height: var(--badge-size-dot-lg);
12530
12692
  }
12531
12693
 
12532
- .muka-button--sm .muka-button__icon {
12533
- width: var(--button-icon-sm);
12534
- height: var(--button-icon-sm);
12694
+ .muka-badge__label {
12695
+ flex: 0 1 auto;
12696
+ min-width: 0;
12697
+ overflow: hidden;
12698
+ text-overflow: ellipsis;
12699
+ /*
12700
+ * The badge sets a tight line-height for compact sizing, but the label's
12701
+ * `overflow: hidden` (needed for ellipsis) then clips glyph descenders (g, y, p). Give the
12702
+ * label its own roomier line-height so descenders render; vertical centering is unaffected
12703
+ * because the badge height is fixed and content is centered via align-items: center.
12704
+ */
12705
+ line-height: normal;
12535
12706
  }
12536
12707
 
12537
- .muka-button--md .muka-button__icon {
12538
- width: var(--button-icon-md);
12539
- height: var(--button-icon-md);
12708
+ /* Neutral variant */
12709
+ .muka-badge--neutral {
12710
+ background-color: var(--color-surface-level1);
12711
+ color: var(--color-text-default-default);
12540
12712
  }
12541
12713
 
12542
- .muka-button--lg .muka-button__icon {
12543
- width: var(--button-icon-lg);
12544
- height: var(--button-icon-lg);
12714
+ .muka-badge--neutral .muka-badge__dot {
12715
+ background-color: var(--color-text-subtle-default);
12545
12716
  }
12546
12717
 
12547
- .muka-button--xl .muka-button__icon {
12548
- width: var(--button-icon-xl);
12549
- height: var(--button-icon-xl);
12718
+ /* Info variant */
12719
+ .muka-badge--info {
12720
+ background-color: var(--color-state-info-background);
12721
+ color: var(--color-state-info-contrast);
12550
12722
  }
12551
12723
 
12552
- .muka-button__label {
12553
- display: inline-flex;
12554
- align-items: center;
12724
+ .muka-badge--info .muka-badge__dot {
12725
+ background-color: var(--color-state-info-default);
12555
12726
  }
12556
12727
 
12557
- /* Icon-only buttons - square, sized to the button height per size */
12558
- .muka-button--icon-only {
12559
- padding: 0;
12728
+ /* Success variant */
12729
+ .muka-badge--success {
12730
+ background-color: var(--color-state-success-background);
12731
+ color: var(--color-state-success-contrast);
12560
12732
  }
12561
12733
 
12562
- .muka-button--icon-only.muka-button--sm {
12563
- width: 32px;
12734
+ .muka-badge--success .muka-badge__dot {
12735
+ background-color: var(--color-state-success-default);
12564
12736
  }
12565
12737
 
12566
- .muka-button--icon-only.muka-button--md {
12567
- width: 40px;
12738
+ /* Warning variant */
12739
+ .muka-badge--warning {
12740
+ background-color: var(--color-state-warning-background);
12741
+ color: var(--color-state-warning-contrast);
12568
12742
  }
12569
12743
 
12570
- .muka-button--icon-only.muka-button--lg {
12571
- width: 48px;
12744
+ .muka-badge--warning .muka-badge__dot {
12745
+ background-color: var(--color-state-warning-default);
12572
12746
  }
12573
12747
 
12574
- .muka-button--icon-only.muka-button--xl {
12575
- width: 64px;
12748
+ /* Error variant */
12749
+ .muka-badge--error {
12750
+ background-color: var(--color-state-error-background);
12751
+ color: var(--color-state-error-contrast);
12752
+ }
12753
+
12754
+ .muka-badge--error .muka-badge__dot {
12755
+ background-color: var(--color-state-error-default);
12576
12756
  }
12577
12757
 
12578
12758
 
@@ -13047,283 +13227,99 @@ button.muka-chat-photo-grid__tile:focus-visible {
13047
13227
  width: var(--alert-icon-size);
13048
13228
  height: var(--alert-icon-size);
13049
13229
  }
13050
-
13051
- .muka-alert__icon svg {
13052
- width: 100%;
13053
- height: 100%;
13054
- }
13055
-
13056
- /* The leading icon and the dismiss (×) icon inherit the variant accent set on
13057
- their container, overriding the Icon component's default color. */
13058
- .muka-alert__icon .muka-icon,
13059
- .muka-alert__dismiss .muka-icon {
13060
- color: inherit;
13061
- }
13062
-
13063
- /* Content */
13064
- .muka-alert__content {
13065
- flex: 1;
13066
- min-width: 0;
13067
- }
13068
-
13069
- .muka-alert__title {
13070
- font-family: var(--text-label-md-semibold-fontFamily);
13071
- font-weight: var(--text-label-md-semibold-fontWeight);
13072
- font-size: var(--text-label-md-semibold-fontSize);
13073
- line-height: var(--text-label-md-semibold-lineHeight);
13074
- margin-bottom: var(--spacing-1);
13075
- }
13076
-
13077
- .muka-alert--sm .muka-alert__title {
13078
- font-family: var(--text-label-sm-semibold-fontFamily);
13079
- font-weight: var(--text-label-sm-semibold-fontWeight);
13080
- font-size: var(--text-label-sm-semibold-fontSize);
13081
- line-height: var(--text-label-sm-semibold-lineHeight);
13082
- }
13083
-
13084
- .muka-alert--lg .muka-alert__title {
13085
- font-family: var(--text-label-lg-semibold-fontFamily);
13086
- font-weight: var(--text-label-lg-semibold-fontWeight);
13087
- font-size: var(--text-label-lg-semibold-fontSize);
13088
- line-height: var(--text-label-lg-semibold-lineHeight);
13089
- }
13090
-
13091
- .muka-alert__message {
13092
- font-family: var(--text-body-sm-regular-fontFamily);
13093
- font-weight: var(--text-body-sm-regular-fontWeight);
13094
- font-size: var(--text-body-sm-regular-fontSize);
13095
- line-height: var(--text-body-sm-regular-lineHeight);
13096
- }
13097
-
13098
- .muka-alert--lg .muka-alert__message {
13099
- font-family: var(--text-body-base-regular-fontFamily);
13100
- font-weight: var(--text-body-base-regular-fontWeight);
13101
- font-size: var(--text-body-base-regular-fontSize);
13102
- line-height: var(--text-body-base-regular-lineHeight);
13103
- }
13104
-
13105
- /* Action slot */
13106
- .muka-alert__action {
13107
- display: flex;
13108
- align-items: center;
13109
- flex-shrink: 0;
13110
- }
13111
-
13112
- /* Dismiss button - uses accent color per variant, aligned with icon row */
13113
- .muka-alert__dismiss {
13114
- display: flex;
13115
- align-items: center;
13116
- justify-content: center;
13117
- flex-shrink: 0;
13118
- align-self: flex-start;
13119
- width: 24px;
13120
- height: 24px;
13121
- padding: 0;
13122
- margin: 0 0 0 auto;
13123
- border: none;
13124
- background: transparent;
13125
- cursor: pointer;
13126
- border-radius: var(--border-radius-sm);
13127
- transition: opacity 0.15s ease, background-color 0.15s ease;
13128
- }
13129
-
13130
- .muka-alert__dismiss:hover {
13131
- opacity: 0.85;
13132
- background-color: rgba(0, 0, 0, 0.05);
13133
- }
13134
-
13135
- .muka-alert__dismiss:focus-visible {
13136
- outline: 2px solid var(--color-border-focus);
13137
- outline-offset: 2px;
13138
- }
13139
-
13140
- .muka-alert__dismiss svg {
13141
- width: 16px;
13142
- height: 16px;
13143
- }
13144
-
13145
-
13146
- /* Badge */
13147
- /* Badge Component Styles - Using Muka Design Tokens */
13148
-
13149
- .muka-badge {
13150
- display: inline-flex;
13151
- align-items: center;
13152
- border-radius: var(--border-radius-full);
13153
- white-space: nowrap;
13154
- user-select: none;
13155
- box-sizing: border-box;
13156
- }
13157
-
13158
- /*
13159
- * Sizes — height, gap, type, and default (label-edge) horizontal padding.
13160
- * Mirrors Chip so the two components share sizing, fonts, and spacing.
13161
- * Vertical centering is handled by the fixed height + align-items: center.
13162
- * The leading side gets a tighter padding when an icon/dot is present, via the
13163
- * --has-icon / --has-dot modifiers below.
13164
- */
13165
- .muka-badge--sm {
13166
- height: var(--badge-size-height-sm);
13167
- gap: var(--badge-gap-sm);
13168
- padding: 0 var(--badge-padding-label-sm);
13169
- font-family: var(--text-label-sm-regular-fontFamily);
13170
- font-weight: var(--text-label-sm-regular-fontWeight);
13171
- font-size: var(--text-label-sm-regular-fontSize);
13172
- line-height: var(--text-label-sm-regular-lineHeight);
13173
- }
13174
-
13175
- .muka-badge--md {
13176
- height: var(--badge-size-height-md);
13177
- gap: var(--badge-gap-md);
13178
- padding: 0 var(--badge-padding-label-md);
13179
- font-family: var(--text-label-md-regular-fontFamily);
13180
- font-weight: var(--text-label-md-regular-fontWeight);
13181
- font-size: var(--text-label-md-regular-fontSize);
13182
- line-height: var(--text-label-md-regular-lineHeight);
13183
- }
13184
-
13185
- .muka-badge--lg {
13186
- height: var(--badge-size-height-lg);
13187
- gap: var(--badge-gap-lg);
13188
- padding: 0 var(--badge-padding-label-lg);
13189
- font-family: var(--text-label-lg-regular-fontFamily);
13190
- font-weight: var(--text-label-lg-regular-fontWeight);
13191
- font-size: var(--text-label-lg-regular-fontSize);
13192
- line-height: var(--text-label-lg-regular-lineHeight);
13193
- }
13194
-
13195
- /* Tighter leading padding when a leading icon or dot is present */
13196
- .muka-badge--sm.muka-badge--has-icon,
13197
- .muka-badge--sm.muka-badge--has-dot {
13198
- padding-left: var(--badge-padding-leading-sm);
13199
- }
13200
- .muka-badge--md.muka-badge--has-icon,
13201
- .muka-badge--md.muka-badge--has-dot {
13202
- padding-left: var(--badge-padding-leading-md);
13203
- }
13204
- .muka-badge--lg.muka-badge--has-icon,
13205
- .muka-badge--lg.muka-badge--has-dot {
13206
- padding-left: var(--badge-padding-leading-lg);
13207
- }
13208
-
13209
- /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
13210
- .muka-badge__icon {
13211
- display: inline-flex;
13212
- align-items: center;
13213
- justify-content: center;
13214
- flex-shrink: 0;
13215
- }
13216
-
13217
- .muka-badge--sm .muka-badge__icon {
13218
- width: var(--icon-size-xs);
13219
- height: var(--icon-size-xs);
13220
- }
13221
- .muka-badge--md .muka-badge__icon {
13222
- width: var(--icon-size-sm);
13223
- height: var(--icon-size-sm);
13224
- }
13225
- .muka-badge--lg .muka-badge__icon {
13226
- width: var(--icon-size-default);
13227
- height: var(--icon-size-default);
13228
- }
13229
-
13230
- /* Force the passed content (raw <svg> or an <Icon> wrapper) to the slot size,
13231
- so callers don't have to size the icon to match each badge size. The
13232
- .muka-icon selector is intentionally 2 classes deep to override .muka-icon--md. */
13233
- .muka-badge__icon .muka-icon,
13234
- .muka-badge__icon svg {
13235
- width: 100%;
13236
- height: 100%;
13237
- }
13238
-
13239
- /* Icons inherit the badge's per-variant foreground color */
13240
- .muka-badge .muka-icon {
13241
- color: inherit;
13242
- }
13243
-
13244
- /* Dot indicator */
13245
- .muka-badge__dot {
13246
- flex-shrink: 0;
13247
- border-radius: var(--border-radius-full);
13248
- }
13249
-
13250
- .muka-badge--sm .muka-badge__dot {
13251
- width: var(--badge-size-dot-sm);
13252
- height: var(--badge-size-dot-sm);
13253
- }
13254
-
13255
- .muka-badge--md .muka-badge__dot {
13256
- width: var(--badge-size-dot-md);
13257
- height: var(--badge-size-dot-md);
13230
+
13231
+ .muka-alert__icon svg {
13232
+ width: 100%;
13233
+ height: 100%;
13258
13234
  }
13259
13235
 
13260
- .muka-badge--lg .muka-badge__dot {
13261
- width: var(--badge-size-dot-lg);
13262
- height: var(--badge-size-dot-lg);
13236
+ /* The leading icon and the dismiss (×) icon inherit the variant accent set on
13237
+ their container, overriding the Icon component's default color. */
13238
+ .muka-alert__icon .muka-icon,
13239
+ .muka-alert__dismiss .muka-icon {
13240
+ color: inherit;
13263
13241
  }
13264
13242
 
13265
- .muka-badge__label {
13266
- flex: 0 1 auto;
13243
+ /* Content */
13244
+ .muka-alert__content {
13245
+ flex: 1;
13267
13246
  min-width: 0;
13268
- overflow: hidden;
13269
- text-overflow: ellipsis;
13270
- /*
13271
- * The badge sets a tight line-height for compact sizing, but the label's
13272
- * `overflow: hidden` (needed for ellipsis) then clips glyph descenders (g, y, p). Give the
13273
- * label its own roomier line-height so descenders render; vertical centering is unaffected
13274
- * because the badge height is fixed and content is centered via align-items: center.
13275
- */
13276
- line-height: normal;
13277
13247
  }
13278
13248
 
13279
- /* Neutral variant */
13280
- .muka-badge--neutral {
13281
- background-color: var(--color-surface-level1);
13282
- color: var(--color-text-default-default);
13249
+ .muka-alert__title {
13250
+ font-family: var(--text-label-md-semibold-fontFamily);
13251
+ font-weight: var(--text-label-md-semibold-fontWeight);
13252
+ font-size: var(--text-label-md-semibold-fontSize);
13253
+ line-height: var(--text-label-md-semibold-lineHeight);
13254
+ margin-bottom: var(--spacing-1);
13283
13255
  }
13284
13256
 
13285
- .muka-badge--neutral .muka-badge__dot {
13286
- background-color: var(--color-text-subtle-default);
13257
+ .muka-alert--sm .muka-alert__title {
13258
+ font-family: var(--text-label-sm-semibold-fontFamily);
13259
+ font-weight: var(--text-label-sm-semibold-fontWeight);
13260
+ font-size: var(--text-label-sm-semibold-fontSize);
13261
+ line-height: var(--text-label-sm-semibold-lineHeight);
13287
13262
  }
13288
13263
 
13289
- /* Info variant */
13290
- .muka-badge--info {
13291
- background-color: var(--color-state-info-background);
13292
- color: var(--color-state-info-contrast);
13264
+ .muka-alert--lg .muka-alert__title {
13265
+ font-family: var(--text-label-lg-semibold-fontFamily);
13266
+ font-weight: var(--text-label-lg-semibold-fontWeight);
13267
+ font-size: var(--text-label-lg-semibold-fontSize);
13268
+ line-height: var(--text-label-lg-semibold-lineHeight);
13293
13269
  }
13294
13270
 
13295
- .muka-badge--info .muka-badge__dot {
13296
- background-color: var(--color-state-info-default);
13271
+ .muka-alert__message {
13272
+ font-family: var(--text-body-sm-regular-fontFamily);
13273
+ font-weight: var(--text-body-sm-regular-fontWeight);
13274
+ font-size: var(--text-body-sm-regular-fontSize);
13275
+ line-height: var(--text-body-sm-regular-lineHeight);
13297
13276
  }
13298
13277
 
13299
- /* Success variant */
13300
- .muka-badge--success {
13301
- background-color: var(--color-state-success-background);
13302
- color: var(--color-state-success-contrast);
13278
+ .muka-alert--lg .muka-alert__message {
13279
+ font-family: var(--text-body-base-regular-fontFamily);
13280
+ font-weight: var(--text-body-base-regular-fontWeight);
13281
+ font-size: var(--text-body-base-regular-fontSize);
13282
+ line-height: var(--text-body-base-regular-lineHeight);
13303
13283
  }
13304
13284
 
13305
- .muka-badge--success .muka-badge__dot {
13306
- background-color: var(--color-state-success-default);
13285
+ /* Action slot */
13286
+ .muka-alert__action {
13287
+ display: flex;
13288
+ align-items: center;
13289
+ flex-shrink: 0;
13307
13290
  }
13308
13291
 
13309
- /* Warning variant */
13310
- .muka-badge--warning {
13311
- background-color: var(--color-state-warning-background);
13312
- color: var(--color-state-warning-contrast);
13292
+ /* Dismiss button - uses accent color per variant, aligned with icon row */
13293
+ .muka-alert__dismiss {
13294
+ display: flex;
13295
+ align-items: center;
13296
+ justify-content: center;
13297
+ flex-shrink: 0;
13298
+ align-self: flex-start;
13299
+ width: 24px;
13300
+ height: 24px;
13301
+ padding: 0;
13302
+ margin: 0 0 0 auto;
13303
+ border: none;
13304
+ background: transparent;
13305
+ cursor: pointer;
13306
+ border-radius: var(--border-radius-sm);
13307
+ transition: opacity 0.15s ease, background-color 0.15s ease;
13313
13308
  }
13314
13309
 
13315
- .muka-badge--warning .muka-badge__dot {
13316
- background-color: var(--color-state-warning-default);
13310
+ .muka-alert__dismiss:hover {
13311
+ opacity: 0.85;
13312
+ background-color: rgba(0, 0, 0, 0.05);
13317
13313
  }
13318
13314
 
13319
- /* Error variant */
13320
- .muka-badge--error {
13321
- background-color: var(--color-state-error-background);
13322
- color: var(--color-state-error-contrast);
13315
+ .muka-alert__dismiss:focus-visible {
13316
+ outline: 2px solid var(--color-border-focus);
13317
+ outline-offset: 2px;
13323
13318
  }
13324
13319
 
13325
- .muka-badge--error .muka-badge__dot {
13326
- background-color: var(--color-state-error-default);
13320
+ .muka-alert__dismiss svg {
13321
+ width: 16px;
13322
+ height: 16px;
13327
13323
  }
13328
13324
 
13329
13325
 
@@ -13397,233 +13393,102 @@ button.muka-chat-photo-grid__tile:focus-visible {
13397
13393
  flex-direction: column;
13398
13394
  }
13399
13395
 
13400
- /* ─── Single task row ──────────────────────────────────── */
13401
-
13402
- .muka-agent-task-list__task {
13403
- display: flex;
13404
- align-items: stretch;
13405
- gap: var(--spacing-4);
13406
- min-height: 32px;
13407
- padding: 0;
13408
- }
13409
-
13410
- /* ─── Bullet column (icon + timeline connector) ────────── */
13411
-
13412
- .muka-agent-task-list__bullet {
13413
- position: relative;
13414
- flex-shrink: 0;
13415
- width: 16px;
13416
- align-self: stretch;
13417
- }
13418
-
13419
- .muka-agent-task-list__line {
13420
- position: absolute;
13421
- left: 7px;
13422
- width: 1px;
13423
- background-color: var(--color-border-default);
13424
- }
13425
-
13426
- .muka-agent-task-list__line--top {
13427
- top: 0;
13428
- height: 6px;
13429
- }
13430
-
13431
- .muka-agent-task-list__line--bottom {
13432
- top: 32px;
13433
- bottom: 0;
13434
- }
13435
-
13436
- .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13437
- display: none;
13438
- }
13439
-
13440
- .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13441
- display: none;
13442
- }
13443
-
13444
- .muka-agent-task-list__icon {
13445
- position: absolute;
13446
- top: 8px;
13447
- left: 0;
13448
- width: 16px;
13449
- height: 16px;
13450
- display: inline-flex;
13451
- align-items: center;
13452
- justify-content: center;
13453
- color: var(--color-text-subtle-default);
13454
- z-index: 1;
13455
- }
13456
-
13457
- /* ─── State color treatments ───────────────────────────── */
13458
-
13459
- .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13460
- color: var(--color-action-default);
13461
- }
13462
-
13463
- .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13464
- color: var(--color-text-subtle-default);
13465
- }
13466
-
13467
- .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13468
- color: var(--color-text-muted-default, var(--color-text-subtle-default));
13469
- opacity: 0.6;
13470
- }
13471
-
13472
- /* ─── Label ────────────────────────────────────────────── */
13473
-
13474
- .muka-agent-task-list__label {
13475
- flex: 1 1 0;
13476
- min-width: 0;
13477
- padding: var(--spacing-2) 0;
13478
- color: var(--color-text-subtle-default);
13479
- font-family: var(--text-body-sm-regular-fontFamily);
13480
- font-weight: var(--text-body-sm-regular-fontWeight);
13481
- font-size: var(--text-body-sm-regular-fontSize);
13482
- line-height: var(--text-body-sm-regular-lineHeight);
13483
- word-break: break-word;
13484
- }
13485
-
13486
- /* ─── Print ────────────────────────────────────────────── */
13487
-
13488
- @media print {
13489
- .muka-agent-task-list {
13490
- break-inside: avoid;
13491
- }
13492
-
13493
- .muka-agent-task-list__chevron {
13494
- display: none;
13495
- }
13496
- }
13497
-
13498
-
13499
- /* Accordion */
13500
- /* Accordion Component Styles */
13501
-
13502
- .muka-accordion {
13503
- width: 100%;
13504
- }
13505
-
13506
- /* Item */
13507
- .muka-accordion__item {
13508
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
13509
- }
13510
-
13511
- .muka-accordion__item:last-child {
13512
- border-bottom: none;
13513
- }
13514
-
13515
- /* Header reset */
13516
- .muka-accordion__header {
13517
- margin: 0;
13518
- }
13519
-
13520
- /* Trigger */
13521
- .muka-accordion__trigger {
13522
- display: flex;
13523
- align-items: center;
13524
- justify-content: space-between;
13525
- width: 100%;
13526
- padding: var(--spacing-4);
13527
- background: none;
13528
- border: none;
13529
- cursor: pointer;
13530
- font-family: var(--text-label-md-semibold-fontFamily);
13531
- font-weight: var(--text-label-md-semibold-fontWeight);
13532
- font-size: var(--text-label-md-semibold-fontSize);
13533
- line-height: var(--text-label-md-semibold-lineHeight);
13534
- color: var(--color-text-default-default);
13535
- text-align: left;
13536
- gap: var(--spacing-3);
13537
- transition: background-color 0.15s ease;
13538
- }
13539
-
13540
- .muka-accordion__trigger:hover {
13541
- background-color: var(--color-surface-level1);
13542
- }
13543
-
13544
- .muka-accordion__trigger[data-disabled] {
13545
- cursor: not-allowed;
13546
- opacity: 0.4;
13547
- }
13396
+ /* ─── Single task row ──────────────────────────────────── */
13548
13397
 
13549
- .muka-accordion__trigger-text {
13550
- flex: 1;
13398
+ .muka-agent-task-list__task {
13399
+ display: flex;
13400
+ align-items: stretch;
13401
+ gap: var(--spacing-4);
13402
+ min-height: 32px;
13403
+ padding: 0;
13551
13404
  }
13552
13405
 
13553
- /* Chevron rotation */
13554
- .muka-accordion__chevron {
13555
- display: inline-flex;
13556
- align-items: center;
13557
- color: var(--color-text-subtle-default);
13558
- transition: transform 200ms ease;
13559
- }
13406
+ /* ─── Bullet column (icon + timeline connector) ────────── */
13560
13407
 
13561
- .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13562
- transform: rotate(180deg);
13408
+ .muka-agent-task-list__bullet {
13409
+ position: relative;
13410
+ flex-shrink: 0;
13411
+ width: 16px;
13412
+ align-self: stretch;
13563
13413
  }
13564
13414
 
13565
- /* Content */
13566
- .muka-accordion__content {
13567
- overflow: hidden;
13415
+ .muka-agent-task-list__line {
13416
+ position: absolute;
13417
+ left: 7px;
13418
+ width: 1px;
13419
+ background-color: var(--color-border-default);
13568
13420
  }
13569
13421
 
13570
- .muka-accordion__content[data-state='open'] {
13571
- animation: muka-accordion-slideDown 200ms ease;
13422
+ .muka-agent-task-list__line--top {
13423
+ top: 0;
13424
+ height: 6px;
13572
13425
  }
13573
13426
 
13574
- .muka-accordion__content[data-state='closed'] {
13575
- animation: muka-accordion-slideUp 200ms ease;
13427
+ .muka-agent-task-list__line--bottom {
13428
+ top: 32px;
13429
+ bottom: 0;
13576
13430
  }
13577
13431
 
13578
- @keyframes muka-accordion-slideDown {
13579
- from {
13580
- height: 0;
13581
- }
13582
- to {
13583
- height: var(--radix-accordion-content-height);
13584
- }
13432
+ .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13433
+ display: none;
13585
13434
  }
13586
13435
 
13587
- @keyframes muka-accordion-slideUp {
13588
- from {
13589
- height: var(--radix-accordion-content-height);
13590
- }
13591
- to {
13592
- height: 0;
13593
- }
13436
+ .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13437
+ display: none;
13594
13438
  }
13595
13439
 
13596
- .muka-accordion__content-inner {
13597
- padding: 0 var(--spacing-4) var(--spacing-5);
13598
- color: var(--color-text-default-default);
13440
+ .muka-agent-task-list__icon {
13441
+ position: absolute;
13442
+ top: 8px;
13443
+ left: 0;
13444
+ width: 16px;
13445
+ height: 16px;
13446
+ display: inline-flex;
13447
+ align-items: center;
13448
+ justify-content: center;
13449
+ color: var(--color-text-subtle-default);
13450
+ z-index: 1;
13599
13451
  }
13600
13452
 
13601
- /* ─── Variant: flush ────────────────────────────────────────────────────── */
13453
+ /* ─── State color treatments ───────────────────────────── */
13602
13454
 
13603
- .muka-accordion--flush .muka-accordion__trigger {
13604
- padding-left: 0;
13605
- padding-right: 0;
13455
+ .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13456
+ color: var(--color-action-default);
13606
13457
  }
13607
13458
 
13608
- .muka-accordion--flush .muka-accordion__content-inner {
13609
- padding-left: 0;
13610
- padding-right: 0;
13459
+ .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13460
+ color: var(--color-text-subtle-default);
13611
13461
  }
13612
13462
 
13613
- /* ─── Variant: contained ────────────────────────────────────────────────── */
13614
-
13615
- .muka-accordion--contained {
13616
- border: var(--border-width-regular) solid var(--color-border-default);
13617
- border-radius: var(--radius-md);
13618
- overflow: hidden;
13463
+ .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13464
+ color: var(--color-text-muted-default, var(--color-text-subtle-default));
13465
+ opacity: 0.6;
13619
13466
  }
13620
13467
 
13621
- .muka-accordion--contained .muka-accordion__item {
13622
- background-color: var(--color-surface-level3);
13468
+ /* ─── Label ────────────────────────────────────────────── */
13469
+
13470
+ .muka-agent-task-list__label {
13471
+ flex: 1 1 0;
13472
+ min-width: 0;
13473
+ padding: var(--spacing-2) 0;
13474
+ color: var(--color-text-subtle-default);
13475
+ font-family: var(--text-body-sm-regular-fontFamily);
13476
+ font-weight: var(--text-body-sm-regular-fontWeight);
13477
+ font-size: var(--text-body-sm-regular-fontSize);
13478
+ line-height: var(--text-body-sm-regular-lineHeight);
13479
+ word-break: break-word;
13623
13480
  }
13624
13481
 
13625
- .muka-accordion--contained .muka-accordion__item:last-child {
13626
- border-bottom: none;
13482
+ /* ─── Print ────────────────────────────────────────────── */
13483
+
13484
+ @media print {
13485
+ .muka-agent-task-list {
13486
+ break-inside: avoid;
13487
+ }
13488
+
13489
+ .muka-agent-task-list__chevron {
13490
+ display: none;
13491
+ }
13627
13492
  }
13628
13493
 
13629
13494
 
@@ -13768,3 +13633,134 @@ button.muka-chat-photo-grid__tile:focus-visible {
13768
13633
  outline-offset: 2px;
13769
13634
  }
13770
13635
 
13636
+
13637
+ /* Accordion */
13638
+ /* Accordion Component Styles */
13639
+
13640
+ .muka-accordion {
13641
+ width: 100%;
13642
+ }
13643
+
13644
+ /* Item */
13645
+ .muka-accordion__item {
13646
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
13647
+ }
13648
+
13649
+ .muka-accordion__item:last-child {
13650
+ border-bottom: none;
13651
+ }
13652
+
13653
+ /* Header reset */
13654
+ .muka-accordion__header {
13655
+ margin: 0;
13656
+ }
13657
+
13658
+ /* Trigger */
13659
+ .muka-accordion__trigger {
13660
+ display: flex;
13661
+ align-items: center;
13662
+ justify-content: space-between;
13663
+ width: 100%;
13664
+ padding: var(--spacing-4);
13665
+ background: none;
13666
+ border: none;
13667
+ cursor: pointer;
13668
+ font-family: var(--text-label-md-semibold-fontFamily);
13669
+ font-weight: var(--text-label-md-semibold-fontWeight);
13670
+ font-size: var(--text-label-md-semibold-fontSize);
13671
+ line-height: var(--text-label-md-semibold-lineHeight);
13672
+ color: var(--color-text-default-default);
13673
+ text-align: left;
13674
+ gap: var(--spacing-3);
13675
+ transition: background-color 0.15s ease;
13676
+ }
13677
+
13678
+ .muka-accordion__trigger:hover {
13679
+ background-color: var(--color-surface-level1);
13680
+ }
13681
+
13682
+ .muka-accordion__trigger[data-disabled] {
13683
+ cursor: not-allowed;
13684
+ opacity: 0.4;
13685
+ }
13686
+
13687
+ .muka-accordion__trigger-text {
13688
+ flex: 1;
13689
+ }
13690
+
13691
+ /* Chevron rotation */
13692
+ .muka-accordion__chevron {
13693
+ display: inline-flex;
13694
+ align-items: center;
13695
+ color: var(--color-text-subtle-default);
13696
+ transition: transform 200ms ease;
13697
+ }
13698
+
13699
+ .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13700
+ transform: rotate(180deg);
13701
+ }
13702
+
13703
+ /* Content */
13704
+ .muka-accordion__content {
13705
+ overflow: hidden;
13706
+ }
13707
+
13708
+ .muka-accordion__content[data-state='open'] {
13709
+ animation: muka-accordion-slideDown 200ms ease;
13710
+ }
13711
+
13712
+ .muka-accordion__content[data-state='closed'] {
13713
+ animation: muka-accordion-slideUp 200ms ease;
13714
+ }
13715
+
13716
+ @keyframes muka-accordion-slideDown {
13717
+ from {
13718
+ height: 0;
13719
+ }
13720
+ to {
13721
+ height: var(--radix-accordion-content-height);
13722
+ }
13723
+ }
13724
+
13725
+ @keyframes muka-accordion-slideUp {
13726
+ from {
13727
+ height: var(--radix-accordion-content-height);
13728
+ }
13729
+ to {
13730
+ height: 0;
13731
+ }
13732
+ }
13733
+
13734
+ .muka-accordion__content-inner {
13735
+ padding: 0 var(--spacing-4) var(--spacing-5);
13736
+ color: var(--color-text-default-default);
13737
+ }
13738
+
13739
+ /* ─── Variant: flush ────────────────────────────────────────────────────── */
13740
+
13741
+ .muka-accordion--flush .muka-accordion__trigger {
13742
+ padding-left: 0;
13743
+ padding-right: 0;
13744
+ }
13745
+
13746
+ .muka-accordion--flush .muka-accordion__content-inner {
13747
+ padding-left: 0;
13748
+ padding-right: 0;
13749
+ }
13750
+
13751
+ /* ─── Variant: contained ────────────────────────────────────────────────── */
13752
+
13753
+ .muka-accordion--contained {
13754
+ border: var(--border-width-regular) solid var(--color-border-default);
13755
+ border-radius: var(--radius-md);
13756
+ overflow: hidden;
13757
+ }
13758
+
13759
+ .muka-accordion--contained .muka-accordion__item {
13760
+ background-color: var(--color-surface-level3);
13761
+ }
13762
+
13763
+ .muka-accordion--contained .muka-accordion__item:last-child {
13764
+ border-bottom: none;
13765
+ }
13766
+