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