@revikornmann/muka-ui 0.14.0 → 0.16.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 (99) hide show
  1. package/build/manifest.json +10 -0
  2. package/dist/cjs/components/BottomBar/BottomBar.css +19 -4
  3. package/dist/cjs/components/ChatMessage/ChatMessage.css +7 -1
  4. package/dist/cjs/components/ChatMessage/ChatMessage.js.map +1 -1
  5. package/dist/cjs/components/ChatMessageList/ChatMessageList.css +1 -1
  6. package/dist/cjs/components/Combobox/Combobox.css +59 -1
  7. package/dist/cjs/components/Combobox/Combobox.js +22 -3
  8. package/dist/cjs/components/Combobox/Combobox.js.map +1 -1
  9. package/dist/cjs/components/Input/Input.js +8 -6
  10. package/dist/cjs/components/Input/Input.js.map +1 -1
  11. package/dist/cjs/components/LicensePlateInput/LicensePlateInput.js +10 -5
  12. package/dist/cjs/components/LicensePlateInput/LicensePlateInput.js.map +1 -1
  13. package/dist/cjs/components/NumberInput/NumberInput.js +6 -4
  14. package/dist/cjs/components/NumberInput/NumberInput.js.map +1 -1
  15. package/dist/cjs/components/SearchInput/SearchInput.js +20 -5
  16. package/dist/cjs/components/SearchInput/SearchInput.js.map +1 -1
  17. package/dist/cjs/components/TextLink/TextLink.css +79 -0
  18. package/dist/cjs/components/TextLink/TextLink.js +28 -0
  19. package/dist/cjs/components/TextLink/TextLink.js.map +1 -0
  20. package/dist/cjs/components/TextLink/index.js +11 -0
  21. package/dist/cjs/components/TextLink/index.js.map +1 -0
  22. package/dist/cjs/components/Textarea/Textarea.js +5 -4
  23. package/dist/cjs/components/Textarea/Textarea.js.map +1 -1
  24. package/dist/cjs/components/index.js +3 -1
  25. package/dist/cjs/components/index.js.map +1 -1
  26. package/dist/cjs/utils/accessibility.js +14 -0
  27. package/dist/cjs/utils/accessibility.js.map +1 -1
  28. package/dist/esm/components/BottomBar/BottomBar.css +19 -4
  29. package/dist/esm/components/ChatMessage/ChatMessage.css +7 -1
  30. package/dist/esm/components/ChatMessage/ChatMessage.js.map +1 -1
  31. package/dist/esm/components/ChatMessageList/ChatMessageList.css +1 -1
  32. package/dist/esm/components/Combobox/Combobox.css +59 -1
  33. package/dist/esm/components/Combobox/Combobox.js +23 -4
  34. package/dist/esm/components/Combobox/Combobox.js.map +1 -1
  35. package/dist/esm/components/Input/Input.js +8 -6
  36. package/dist/esm/components/Input/Input.js.map +1 -1
  37. package/dist/esm/components/LicensePlateInput/LicensePlateInput.js +10 -5
  38. package/dist/esm/components/LicensePlateInput/LicensePlateInput.js.map +1 -1
  39. package/dist/esm/components/NumberInput/NumberInput.js +6 -4
  40. package/dist/esm/components/NumberInput/NumberInput.js.map +1 -1
  41. package/dist/esm/components/SearchInput/SearchInput.js +20 -5
  42. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  43. package/dist/esm/components/TextLink/TextLink.css +79 -0
  44. package/dist/esm/components/TextLink/TextLink.js +24 -0
  45. package/dist/esm/components/TextLink/TextLink.js.map +1 -0
  46. package/dist/esm/components/TextLink/index.js +3 -0
  47. package/dist/esm/components/TextLink/index.js.map +1 -0
  48. package/dist/esm/components/Textarea/Textarea.js +5 -4
  49. package/dist/esm/components/Textarea/Textarea.js.map +1 -1
  50. package/dist/esm/components/index.js +1 -0
  51. package/dist/esm/components/index.js.map +1 -1
  52. package/dist/esm/utils/accessibility.js +13 -0
  53. package/dist/esm/utils/accessibility.js.map +1 -1
  54. package/dist/styles/components/BottomBar.css +19 -4
  55. package/dist/styles/components/ChatMessage.css +7 -1
  56. package/dist/styles/components/ChatMessageList.css +1 -1
  57. package/dist/styles/components/Combobox.css +59 -1
  58. package/dist/styles/components/TextLink.css +79 -0
  59. package/dist/styles/index.css +925 -762
  60. package/dist/styles/muka-dark.css +925 -762
  61. package/dist/styles/muka-light.css +925 -762
  62. package/dist/styles/tokens-bouwplan-dark.css +4 -2
  63. package/dist/styles/tokens-bouwplan-light.css +4 -2
  64. package/dist/styles/tokens-fscl-dark.css +4 -2
  65. package/dist/styles/tokens-fscl-light.css +4 -2
  66. package/dist/styles/tokens-grip-dark.css +4 -2
  67. package/dist/styles/tokens-grip-light.css +4 -2
  68. package/dist/styles/tokens-muka-dark.css +4 -2
  69. package/dist/styles/tokens-muka-light.css +4 -2
  70. package/dist/styles/tokens-wireframe-dark.css +4 -2
  71. package/dist/styles/tokens-wireframe-light.css +4 -2
  72. package/dist/styles/wireframe-dark.css +925 -762
  73. package/dist/styles/wireframe-light.css +925 -762
  74. package/dist/types/components/ChatMessage/ChatMessage.d.ts +4 -1
  75. package/dist/types/components/ChatMessage/ChatMessage.d.ts.map +1 -1
  76. package/dist/types/components/Combobox/Combobox.d.ts +7 -0
  77. package/dist/types/components/Combobox/Combobox.d.ts.map +1 -1
  78. package/dist/types/components/Input/Input.d.ts +4 -2
  79. package/dist/types/components/Input/Input.d.ts.map +1 -1
  80. package/dist/types/components/LicensePlateInput/LicensePlateInput.d.ts +2 -2
  81. package/dist/types/components/LicensePlateInput/LicensePlateInput.d.ts.map +1 -1
  82. package/dist/types/components/NumberInput/NumberInput.d.ts +2 -2
  83. package/dist/types/components/NumberInput/NumberInput.d.ts.map +1 -1
  84. package/dist/types/components/SearchInput/SearchInput.d.ts +2 -2
  85. package/dist/types/components/SearchInput/SearchInput.d.ts.map +1 -1
  86. package/dist/types/components/TextLink/TextLink.d.ts +30 -0
  87. package/dist/types/components/TextLink/TextLink.d.ts.map +1 -0
  88. package/dist/types/components/TextLink/index.d.ts +3 -0
  89. package/dist/types/components/TextLink/index.d.ts.map +1 -0
  90. package/dist/types/components/Textarea/Textarea.d.ts +2 -2
  91. package/dist/types/components/Textarea/Textarea.d.ts.map +1 -1
  92. package/dist/types/components/index.d.ts +1 -0
  93. package/dist/types/components/index.d.ts.map +1 -1
  94. package/dist/types/utils/accessibility.d.ts +10 -0
  95. package/dist/types/utils/accessibility.d.ts.map +1 -1
  96. package/package.json +3 -1
  97. package/tokens/t4-components/bottombar.json +2 -1
  98. package/tokens/t4-components/chat.json +15 -0
  99. package/tokens/t4-components/chatbubble.json +7 -1
@@ -1694,7 +1694,9 @@ body {
1694
1694
  --card-border-hover: 0.0625rem solid #d0cdd7;
1695
1695
  --card-border-pressed: 0.125rem solid #3e63dd;
1696
1696
  --card-border-selected: 0.125rem solid #3e63dd;
1697
- --chatbubble-max-width: 640px;
1697
+ --chat-column-max-width: 768px;
1698
+ --chatbubble-max-width: 37rem;
1699
+ --chatbubble-max-width-ratio: 77%;
1698
1700
  --chatbubble-radius: 0.75rem;
1699
1701
  --chatbubble-padding-block: 0.75rem;
1700
1702
  --chatbubble-padding-inline: 1rem;
@@ -2117,7 +2119,7 @@ body {
2117
2119
  --bottombar-floating-backdrop-start: transparent;
2118
2120
  --bottombar-floating-backdrop-end: rgba(0, 0, 0, 0.027);
2119
2121
  --bottombar-floating-padding-top: 2rem;
2120
- --bottombar-chat-max-width: 1024px;
2122
+ --bottombar-chat-max-width: 768px;
2121
2123
  --bottombar-chat-padding: 0.75rem;
2122
2124
  --bottombar-tab-icon-size: 24px;
2123
2125
  --bottombar-tab-gap: 0.25rem;
@@ -2920,196 +2922,6 @@ body {
2920
2922
  }
2921
2923
 
2922
2924
 
2923
- /* Toast */
2924
- /* Toast Component Styles - Using Muka Design Tokens */
2925
-
2926
- .muka-toast {
2927
- display: flex;
2928
- align-items: flex-start;
2929
- gap: var(--toast-gap);
2930
- padding: var(--toast-padding-y) var(--toast-padding-x);
2931
- border-radius: var(--toast-radius);
2932
- box-shadow: var(--toast-shadow);
2933
- min-width: var(--toast-width-min);
2934
- max-width: var(--toast-width-max);
2935
- pointer-events: auto;
2936
- animation: muka-toast-slide-in 0.2s ease-out;
2937
- }
2938
-
2939
- /* Entry animation */
2940
- @keyframes muka-toast-slide-in {
2941
- from {
2942
- opacity: 0;
2943
- transform: translateY(8px);
2944
- }
2945
- to {
2946
- opacity: 1;
2947
- transform: translateY(0);
2948
- }
2949
- }
2950
-
2951
- /* Position variants (for standalone use - typically managed by ToastProvider) */
2952
- .muka-toast--top-right,
2953
- .muka-toast--top-left,
2954
- .muka-toast--top-center,
2955
- .muka-toast--bottom-right,
2956
- .muka-toast--bottom-left,
2957
- .muka-toast--bottom-center {
2958
- position: fixed;
2959
- z-index: 9999;
2960
- }
2961
-
2962
- .muka-toast--top-right {
2963
- top: var(--spacing-4);
2964
- right: var(--spacing-4);
2965
- }
2966
-
2967
- .muka-toast--top-left {
2968
- top: var(--spacing-4);
2969
- left: var(--spacing-4);
2970
- }
2971
-
2972
- .muka-toast--top-center {
2973
- top: var(--spacing-4);
2974
- left: 50%;
2975
- transform: translateX(-50%);
2976
- }
2977
-
2978
- .muka-toast--bottom-right {
2979
- bottom: var(--spacing-4);
2980
- right: var(--spacing-4);
2981
- }
2982
-
2983
- .muka-toast--bottom-left {
2984
- bottom: var(--spacing-4);
2985
- left: var(--spacing-4);
2986
- }
2987
-
2988
- .muka-toast--bottom-center {
2989
- bottom: var(--spacing-4);
2990
- left: 50%;
2991
- transform: translateX(-50%);
2992
- }
2993
-
2994
- /* Variant: Info */
2995
- .muka-toast--info {
2996
- background-color: var(--toast-color-info-background);
2997
- color: var(--toast-color-info-foreground);
2998
- }
2999
-
3000
- .muka-toast--info .muka-toast__icon {
3001
- color: var(--toast-color-info-accent);
3002
- }
3003
-
3004
- /* Variant: Success */
3005
- .muka-toast--success {
3006
- background-color: var(--toast-color-success-background);
3007
- color: var(--toast-color-success-foreground);
3008
- }
3009
-
3010
- .muka-toast--success .muka-toast__icon {
3011
- color: var(--toast-color-success-accent);
3012
- }
3013
-
3014
- /* Variant: Warning */
3015
- .muka-toast--warning {
3016
- background-color: var(--toast-color-warning-background);
3017
- color: var(--toast-color-warning-foreground);
3018
- }
3019
-
3020
- .muka-toast--warning .muka-toast__icon {
3021
- color: var(--toast-color-warning-accent);
3022
- }
3023
-
3024
- /* Variant: Error */
3025
- .muka-toast--error {
3026
- background-color: var(--toast-color-error-background);
3027
- color: var(--toast-color-error-foreground);
3028
- }
3029
-
3030
- .muka-toast--error .muka-toast__icon {
3031
- color: var(--toast-color-error-accent);
3032
- }
3033
-
3034
- /* Icon */
3035
- .muka-toast__icon {
3036
- display: flex;
3037
- align-items: center;
3038
- justify-content: center;
3039
- flex-shrink: 0;
3040
- width: var(--toast-icon-size);
3041
- height: var(--toast-icon-size);
3042
- }
3043
-
3044
- .muka-toast__icon svg {
3045
- width: 100%;
3046
- height: 100%;
3047
- }
3048
-
3049
- /* Content */
3050
- .muka-toast__content {
3051
- flex: 1;
3052
- min-width: 0;
3053
- }
3054
-
3055
- .muka-toast__title {
3056
- font-family: var(--text-label-md-semibold-fontFamily);
3057
- font-weight: var(--text-label-md-semibold-fontWeight);
3058
- font-size: var(--text-label-md-semibold-fontSize);
3059
- line-height: var(--text-label-md-semibold-lineHeight);
3060
- margin-bottom: var(--spacing-1);
3061
- }
3062
-
3063
- .muka-toast__message {
3064
- font-family: var(--text-body-sm-regular-fontFamily);
3065
- font-weight: var(--text-body-sm-regular-fontWeight);
3066
- font-size: var(--text-body-sm-regular-fontSize);
3067
- line-height: var(--text-body-sm-regular-lineHeight);
3068
- }
3069
-
3070
- /* Action slot */
3071
- .muka-toast__action {
3072
- display: flex;
3073
- align-items: center;
3074
- flex-shrink: 0;
3075
- }
3076
-
3077
- /* Dismiss button */
3078
- .muka-toast__dismiss {
3079
- display: flex;
3080
- align-items: center;
3081
- justify-content: center;
3082
- flex-shrink: 0;
3083
- width: 24px;
3084
- height: 24px;
3085
- padding: 0;
3086
- margin: -2px -4px -2px 0;
3087
- border: none;
3088
- background: transparent;
3089
- color: inherit;
3090
- opacity: 0.7;
3091
- cursor: pointer;
3092
- border-radius: var(--border-radius-sm);
3093
- transition: opacity 0.15s ease, background-color 0.15s ease;
3094
- }
3095
-
3096
- .muka-toast__dismiss:hover {
3097
- opacity: 1;
3098
- background-color: rgba(0, 0, 0, 0.05);
3099
- }
3100
-
3101
- .muka-toast__dismiss:focus-visible {
3102
- outline: 2px solid var(--color-border-focus);
3103
- outline-offset: 2px;
3104
- opacity: 1;
3105
- }
3106
-
3107
- .muka-toast__dismiss svg {
3108
- width: 16px;
3109
- height: 16px;
3110
- }
3111
-
3112
-
3113
2925
  /* Tile */
3114
2926
  /* Tile Component Styles - Using Muka Design Tokens */
3115
2927
 
@@ -3471,45 +3283,235 @@ body {
3471
3283
  }
3472
3284
 
3473
3285
 
3474
- /* Thumbnail */
3475
- /* Thumbnail Component Styles - Using Muka Design Tokens */
3286
+ /* Toast */
3287
+ /* Toast Component Styles - Using Muka Design Tokens */
3476
3288
 
3477
- .muka-thumbnail {
3478
- position: relative;
3479
- flex-shrink: 0;
3289
+ .muka-toast {
3290
+ display: flex;
3291
+ align-items: flex-start;
3292
+ gap: var(--toast-gap);
3293
+ padding: var(--toast-padding-y) var(--toast-padding-x);
3294
+ border-radius: var(--toast-radius);
3295
+ box-shadow: var(--toast-shadow);
3296
+ min-width: var(--toast-width-min);
3297
+ max-width: var(--toast-width-max);
3298
+ pointer-events: auto;
3299
+ animation: muka-toast-slide-in 0.2s ease-out;
3480
3300
  }
3481
3301
 
3482
- /* The frame carries the border, background and shape clip. Keeping it separate
3483
- from the root lets the remove (×) button sit outside the clip (needed for the
3484
- circular/ellipse shape, whose corners would otherwise clip the button). */
3485
- .muka-thumbnail__frame {
3486
- position: absolute;
3487
- inset: 0;
3488
- overflow: hidden;
3489
- border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3490
- border-radius: var(--border-radius-lg);
3491
- background-color: var(--color-surface-level1);
3302
+ /* Entry animation */
3303
+ @keyframes muka-toast-slide-in {
3304
+ from {
3305
+ opacity: 0;
3306
+ transform: translateY(8px);
3307
+ }
3308
+ to {
3309
+ opacity: 1;
3310
+ transform: translateY(0);
3311
+ }
3492
3312
  }
3493
3313
 
3494
- /* ─── Shapes ──────────────────────────────────────────── */
3495
- .muka-thumbnail--4-3 {
3496
- width: 160px;
3497
- height: 120px;
3314
+ /* Position variants (for standalone use - typically managed by ToastProvider) */
3315
+ .muka-toast--top-right,
3316
+ .muka-toast--top-left,
3317
+ .muka-toast--top-center,
3318
+ .muka-toast--bottom-right,
3319
+ .muka-toast--bottom-left,
3320
+ .muka-toast--bottom-center {
3321
+ position: fixed;
3322
+ z-index: 9999;
3498
3323
  }
3499
3324
 
3500
- .muka-thumbnail--1-1 {
3501
- width: 120px;
3502
- height: 120px;
3325
+ .muka-toast--top-right {
3326
+ top: var(--spacing-4);
3327
+ right: var(--spacing-4);
3503
3328
  }
3504
3329
 
3505
- .muka-thumbnail--ellipse {
3506
- width: 120px;
3507
- height: 120px;
3330
+ .muka-toast--top-left {
3331
+ top: var(--spacing-4);
3332
+ left: var(--spacing-4);
3508
3333
  }
3509
3334
 
3510
- .muka-thumbnail--ellipse .muka-thumbnail__frame {
3511
- border-radius: var(--border-radius-full);
3512
- }
3335
+ .muka-toast--top-center {
3336
+ top: var(--spacing-4);
3337
+ left: 50%;
3338
+ transform: translateX(-50%);
3339
+ }
3340
+
3341
+ .muka-toast--bottom-right {
3342
+ bottom: var(--spacing-4);
3343
+ right: var(--spacing-4);
3344
+ }
3345
+
3346
+ .muka-toast--bottom-left {
3347
+ bottom: var(--spacing-4);
3348
+ left: var(--spacing-4);
3349
+ }
3350
+
3351
+ .muka-toast--bottom-center {
3352
+ bottom: var(--spacing-4);
3353
+ left: 50%;
3354
+ transform: translateX(-50%);
3355
+ }
3356
+
3357
+ /* Variant: Info */
3358
+ .muka-toast--info {
3359
+ background-color: var(--toast-color-info-background);
3360
+ color: var(--toast-color-info-foreground);
3361
+ }
3362
+
3363
+ .muka-toast--info .muka-toast__icon {
3364
+ color: var(--toast-color-info-accent);
3365
+ }
3366
+
3367
+ /* Variant: Success */
3368
+ .muka-toast--success {
3369
+ background-color: var(--toast-color-success-background);
3370
+ color: var(--toast-color-success-foreground);
3371
+ }
3372
+
3373
+ .muka-toast--success .muka-toast__icon {
3374
+ color: var(--toast-color-success-accent);
3375
+ }
3376
+
3377
+ /* Variant: Warning */
3378
+ .muka-toast--warning {
3379
+ background-color: var(--toast-color-warning-background);
3380
+ color: var(--toast-color-warning-foreground);
3381
+ }
3382
+
3383
+ .muka-toast--warning .muka-toast__icon {
3384
+ color: var(--toast-color-warning-accent);
3385
+ }
3386
+
3387
+ /* Variant: Error */
3388
+ .muka-toast--error {
3389
+ background-color: var(--toast-color-error-background);
3390
+ color: var(--toast-color-error-foreground);
3391
+ }
3392
+
3393
+ .muka-toast--error .muka-toast__icon {
3394
+ color: var(--toast-color-error-accent);
3395
+ }
3396
+
3397
+ /* Icon */
3398
+ .muka-toast__icon {
3399
+ display: flex;
3400
+ align-items: center;
3401
+ justify-content: center;
3402
+ flex-shrink: 0;
3403
+ width: var(--toast-icon-size);
3404
+ height: var(--toast-icon-size);
3405
+ }
3406
+
3407
+ .muka-toast__icon svg {
3408
+ width: 100%;
3409
+ height: 100%;
3410
+ }
3411
+
3412
+ /* Content */
3413
+ .muka-toast__content {
3414
+ flex: 1;
3415
+ min-width: 0;
3416
+ }
3417
+
3418
+ .muka-toast__title {
3419
+ font-family: var(--text-label-md-semibold-fontFamily);
3420
+ font-weight: var(--text-label-md-semibold-fontWeight);
3421
+ font-size: var(--text-label-md-semibold-fontSize);
3422
+ line-height: var(--text-label-md-semibold-lineHeight);
3423
+ margin-bottom: var(--spacing-1);
3424
+ }
3425
+
3426
+ .muka-toast__message {
3427
+ font-family: var(--text-body-sm-regular-fontFamily);
3428
+ font-weight: var(--text-body-sm-regular-fontWeight);
3429
+ font-size: var(--text-body-sm-regular-fontSize);
3430
+ line-height: var(--text-body-sm-regular-lineHeight);
3431
+ }
3432
+
3433
+ /* Action slot */
3434
+ .muka-toast__action {
3435
+ display: flex;
3436
+ align-items: center;
3437
+ flex-shrink: 0;
3438
+ }
3439
+
3440
+ /* Dismiss button */
3441
+ .muka-toast__dismiss {
3442
+ display: flex;
3443
+ align-items: center;
3444
+ justify-content: center;
3445
+ flex-shrink: 0;
3446
+ width: 24px;
3447
+ height: 24px;
3448
+ padding: 0;
3449
+ margin: -2px -4px -2px 0;
3450
+ border: none;
3451
+ background: transparent;
3452
+ color: inherit;
3453
+ opacity: 0.7;
3454
+ cursor: pointer;
3455
+ border-radius: var(--border-radius-sm);
3456
+ transition: opacity 0.15s ease, background-color 0.15s ease;
3457
+ }
3458
+
3459
+ .muka-toast__dismiss:hover {
3460
+ opacity: 1;
3461
+ background-color: rgba(0, 0, 0, 0.05);
3462
+ }
3463
+
3464
+ .muka-toast__dismiss:focus-visible {
3465
+ outline: 2px solid var(--color-border-focus);
3466
+ outline-offset: 2px;
3467
+ opacity: 1;
3468
+ }
3469
+
3470
+ .muka-toast__dismiss svg {
3471
+ width: 16px;
3472
+ height: 16px;
3473
+ }
3474
+
3475
+
3476
+ /* Thumbnail */
3477
+ /* Thumbnail Component Styles - Using Muka Design Tokens */
3478
+
3479
+ .muka-thumbnail {
3480
+ position: relative;
3481
+ flex-shrink: 0;
3482
+ }
3483
+
3484
+ /* The frame carries the border, background and shape clip. Keeping it separate
3485
+ from the root lets the remove (×) button sit outside the clip (needed for the
3486
+ circular/ellipse shape, whose corners would otherwise clip the button). */
3487
+ .muka-thumbnail__frame {
3488
+ position: absolute;
3489
+ inset: 0;
3490
+ overflow: hidden;
3491
+ border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3492
+ border-radius: var(--border-radius-lg);
3493
+ background-color: var(--color-surface-level1);
3494
+ }
3495
+
3496
+ /* ─── Shapes ──────────────────────────────────────────── */
3497
+ .muka-thumbnail--4-3 {
3498
+ width: 160px;
3499
+ height: 120px;
3500
+ }
3501
+
3502
+ .muka-thumbnail--1-1 {
3503
+ width: 120px;
3504
+ height: 120px;
3505
+ }
3506
+
3507
+ .muka-thumbnail--ellipse {
3508
+ width: 120px;
3509
+ height: 120px;
3510
+ }
3511
+
3512
+ .muka-thumbnail--ellipse .muka-thumbnail__frame {
3513
+ border-radius: var(--border-radius-full);
3514
+ }
3513
3515
 
3514
3516
  /* Image fills the frame, cropped to cover. Sits at scale(1) by default so the
3515
3517
  interactive hover zoom has a clean origin. */
@@ -3809,6 +3811,88 @@ body {
3809
3811
  }
3810
3812
 
3811
3813
 
3814
+ /* TextLink */
3815
+ /* TextLink Component Styles - Using Muka Design Tokens */
3816
+
3817
+ .muka-text-link {
3818
+ display: inline;
3819
+ cursor: pointer;
3820
+ text-decoration: underline;
3821
+ /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
3822
+ text-underline-offset: 0.2em;
3823
+ text-decoration-thickness: from-font;
3824
+ /* Rounds the focus ring's corners; the link itself has no visible box. */
3825
+ border-radius: var(--border-radius-sm);
3826
+ transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
3827
+ }
3828
+
3829
+ /* ─── Sizes ───────────────────────────────────────────────
3830
+ Mirrors the body text scale so a link matches the copy it sits in. */
3831
+ .muka-text-link--sm {
3832
+ font-family: var(--text-body-sm-regular-fontFamily);
3833
+ font-weight: var(--text-body-sm-regular-fontWeight);
3834
+ font-size: var(--text-body-sm-regular-fontSize);
3835
+ line-height: var(--text-body-sm-regular-lineHeight);
3836
+ }
3837
+
3838
+ .muka-text-link--base {
3839
+ font-family: var(--text-body-base-regular-fontFamily);
3840
+ font-weight: var(--text-body-base-regular-fontWeight);
3841
+ font-size: var(--text-body-base-regular-fontSize);
3842
+ line-height: var(--text-body-base-regular-lineHeight);
3843
+ }
3844
+
3845
+ .muka-text-link--lg {
3846
+ font-family: var(--text-body-lg-regular-fontFamily);
3847
+ font-weight: var(--text-body-lg-regular-fontWeight);
3848
+ font-size: var(--text-body-lg-regular-fontSize);
3849
+ line-height: var(--text-body-lg-regular-lineHeight);
3850
+ }
3851
+
3852
+ /* ─── Variant: default (accent) ───────────────────────────
3853
+ Visited repeats the default colour on purpose: the design treats visited and
3854
+ default the same, and pinning it stops the browser's purple from showing. */
3855
+ .muka-text-link--default,
3856
+ .muka-text-link--default:visited {
3857
+ color: var(--color-text-action-default);
3858
+ }
3859
+
3860
+ .muka-text-link--default:hover,
3861
+ .muka-text-link--default:focus-visible {
3862
+ color: var(--color-text-action-hover);
3863
+ }
3864
+
3865
+ .muka-text-link--default:active {
3866
+ color: var(--color-text-action-pressed);
3867
+ }
3868
+
3869
+ /* ─── Variant: subtle (neutral) ───────────────────────────
3870
+ Hover, focus and pressed all darken to the default text colour. */
3871
+ .muka-text-link--subtle,
3872
+ .muka-text-link--subtle:visited {
3873
+ color: var(--color-text-subtle-default);
3874
+ }
3875
+
3876
+ .muka-text-link--subtle:hover,
3877
+ .muka-text-link--subtle:focus-visible,
3878
+ .muka-text-link--subtle:active {
3879
+ color: var(--color-text-default-default);
3880
+ }
3881
+
3882
+ /* ─── Focus ───────────────────────────────────────────────
3883
+ Same ring as every other focusable Muka component. */
3884
+ .muka-text-link:focus-visible {
3885
+ outline: 2px solid var(--color-border-focus);
3886
+ outline-offset: 2px;
3887
+ }
3888
+
3889
+ @media (prefers-reduced-motion: reduce) {
3890
+ .muka-text-link {
3891
+ transition: none;
3892
+ }
3893
+ }
3894
+
3895
+
3812
3896
  /* Tabs */
3813
3897
  /* Tabs Component Styles - Clean underline style tabs matching Figma */
3814
3898
 
@@ -4866,33 +4950,307 @@ body {
4866
4950
  }
4867
4951
 
4868
4952
 
4869
- /* SegmentGroup */
4870
- /* SegmentGroup Component Styles - Using Muka Design Tokens */
4953
+ /* Sheet */
4954
+ /* Sheet Component Styles */
4871
4955
 
4872
- /* Container */
4873
- .muka-segmentgroup {
4874
- display: inline-flex;
4875
- align-items: center;
4876
- gap: 0;
4877
- padding: var(--segmentgroup-container-padding);
4878
- background-color: var(--segmentgroup-container-background);
4879
- border-radius: var(--segmentgroup-container-radius);
4880
- position: relative;
4881
- transition: background-color 0.2s ease, box-shadow 0.2s ease;
4882
- }
4956
+ /* ─── Backdrop ────────────────────────────────────────── */
4883
4957
 
4884
- /* Inset shadow on container */
4885
- .muka-segmentgroup::after {
4886
- content: '';
4887
- position: absolute;
4958
+ .muka-sheet__overlay {
4959
+ position: fixed;
4888
4960
  inset: 0;
4889
- border-radius: inherit;
4890
- box-shadow: var(--segmentgroup-container-shadow);
4891
- pointer-events: none;
4961
+ background-color: var(--color-surface-backdrop);
4962
+ z-index: 50;
4892
4963
  }
4893
4964
 
4894
- /* Full width variant */
4895
- .muka-segmentgroup--full-width {
4965
+ /* ─── Surface ─────────────────────────────────────────── */
4966
+
4967
+ .muka-sheet {
4968
+ position: fixed;
4969
+ left: 0;
4970
+ right: 0;
4971
+ bottom: 0;
4972
+ z-index: 51;
4973
+
4974
+ display: flex;
4975
+ flex-direction: column;
4976
+
4977
+ max-height: 96dvh;
4978
+
4979
+ background-color: var(--color-surface-level3);
4980
+ border-top-left-radius: var(--radius-lg);
4981
+ border-top-right-radius: var(--radius-lg);
4982
+ box-shadow: var(--shadow-level5);
4983
+
4984
+ outline: none;
4985
+ }
4986
+
4987
+ /* Safe-area bottom inset for the iPhone home indicator. */
4988
+ .muka-sheet:not(.muka-sheet--no-safe-area) {
4989
+ padding-bottom: env(safe-area-inset-bottom);
4990
+ }
4991
+
4992
+ /* ─── Drag handle ─────────────────────────────────────── */
4993
+
4994
+ .muka-sheet__handle-container {
4995
+ display: flex;
4996
+ justify-content: center;
4997
+ flex-shrink: 0;
4998
+ padding: var(--spacing-3) 0;
4999
+ }
5000
+
5001
+ .muka-sheet__handle {
5002
+ width: var(--dialog-drag-handle-width);
5003
+ height: var(--dialog-drag-handle-height);
5004
+ background-color: var(--dialog-drag-handle-color);
5005
+ border-radius: var(--dialog-drag-handle-radius);
5006
+ }
5007
+
5008
+ /* ─── Body (scrollable) ───────────────────────────────── */
5009
+
5010
+ .muka-sheet__body {
5011
+ flex: 1 1 0%;
5012
+ min-height: 0;
5013
+ overflow-y: auto;
5014
+ -webkit-overflow-scrolling: touch;
5015
+ overscroll-behavior: contain;
5016
+ }
5017
+
5018
+ /* ─── Visually-hidden title (a11y) ────────────────────── */
5019
+
5020
+ .muka-sheet__sr-title {
5021
+ position: absolute;
5022
+ width: 1px;
5023
+ height: 1px;
5024
+ padding: 0;
5025
+ margin: -1px;
5026
+ overflow: hidden;
5027
+ clip: rect(0, 0, 0, 0);
5028
+ white-space: nowrap;
5029
+ border: 0;
5030
+ }
5031
+
5032
+
5033
+ /* Select */
5034
+ /* Select Component Styles - Aligned with Input for consistency */
5035
+
5036
+ .muka-select {
5037
+ display: inline-flex;
5038
+ flex-direction: column;
5039
+ gap: var(--spacing-2);
5040
+ }
5041
+
5042
+ .muka-select--full-width {
5043
+ width: 100%;
5044
+ }
5045
+
5046
+ /* Label */
5047
+ .muka-select__label {
5048
+ color: var(--color-text-default-default);
5049
+ cursor: pointer;
5050
+ }
5051
+
5052
+ .muka-select__label--sm {
5053
+ font-family: var(--text-label-sm-semibold-fontFamily);
5054
+ font-weight: var(--text-label-sm-semibold-fontWeight);
5055
+ font-size: var(--text-label-sm-semibold-fontSize);
5056
+ line-height: var(--text-label-sm-semibold-lineHeight);
5057
+ }
5058
+
5059
+ .muka-select__label--md {
5060
+ font-family: var(--text-label-md-semibold-fontFamily);
5061
+ font-weight: var(--text-label-md-semibold-fontWeight);
5062
+ font-size: var(--text-label-md-semibold-fontSize);
5063
+ line-height: var(--text-label-md-semibold-lineHeight);
5064
+ }
5065
+
5066
+ .muka-select__label--lg {
5067
+ font-family: var(--text-label-lg-semibold-fontFamily);
5068
+ font-weight: var(--text-label-lg-semibold-fontWeight);
5069
+ font-size: var(--text-label-lg-semibold-fontSize);
5070
+ line-height: var(--text-label-lg-semibold-lineHeight);
5071
+ }
5072
+
5073
+ .muka-select__required {
5074
+ color: var(--color-state-error-foreground);
5075
+ }
5076
+
5077
+ .muka-select__label--sm + .muka-select__field--disabled,
5078
+ .muka-select__label--md + .muka-select__field--disabled,
5079
+ .muka-select__label--lg + .muka-select__field--disabled {
5080
+ cursor: not-allowed;
5081
+ }
5082
+
5083
+ /* Field container — same as Input: 1px border, radius, padding, inset shadow */
5084
+ .muka-select__field {
5085
+ display: flex;
5086
+ align-items: center;
5087
+ gap: var(--spacing-2);
5088
+ position: relative;
5089
+ background-color: var(--input-field-color-default-background);
5090
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
5091
+ border-radius: var(--input-field-radius-md);
5092
+ padding: var(--input-field-padding-y) var(--input-field-padding-x);
5093
+ transition: border-color 0.2s ease, background-color 0.2s ease;
5094
+ cursor: pointer;
5095
+ box-sizing: border-box;
5096
+ }
5097
+
5098
+ /* Inset shadow — same as Input (single subtle line) */
5099
+ .muka-select__field::after {
5100
+ content: '';
5101
+ position: absolute;
5102
+ inset: 0;
5103
+ border-radius: inherit;
5104
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.08);
5105
+ pointer-events: none;
5106
+ }
5107
+
5108
+ /* Size variants — same radius/height as Input */
5109
+ .muka-select__field--sm {
5110
+ min-height: var(--input-field-height-sm);
5111
+ border-radius: var(--input-field-radius-sm);
5112
+ }
5113
+
5114
+ .muka-select__field--md {
5115
+ min-height: var(--input-field-height-default);
5116
+ border-radius: var(--input-field-radius-md);
5117
+ }
5118
+
5119
+ .muka-select__field--lg {
5120
+ min-height: var(--input-field-height-lg);
5121
+ border-radius: var(--input-field-radius-lg);
5122
+ }
5123
+
5124
+ /* Hover — no visual change (same as Input) */
5125
+
5126
+ /* Focus (active) — same as Input: 2px border, padding compensation */
5127
+ .muka-select__field--focused:not(.muka-select__field--disabled) {
5128
+ border-width: var(--border-width-bold);
5129
+ border-color: var(--input-field-color-focus-border);
5130
+ background-color: var(--input-field-color-focus-background);
5131
+ padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
5132
+ }
5133
+
5134
+ /* Error — same as Input: 2px border, padding compensation */
5135
+ .muka-select__field--error:not(.muka-select__field--disabled) {
5136
+ border-width: var(--border-width-bold);
5137
+ border-color: var(--input-field-color-error-border);
5138
+ background-color: var(--input-field-color-error-background);
5139
+ padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
5140
+ }
5141
+
5142
+ /* Disabled — same as Input */
5143
+ .muka-select__field--disabled {
5144
+ background-color: var(--input-field-color-disabled-background);
5145
+ border-color: var(--input-field-color-disabled-border);
5146
+ cursor: not-allowed;
5147
+ }
5148
+
5149
+ .muka-select__field--disabled::after {
5150
+ display: none;
5151
+ }
5152
+
5153
+ /* Native select — padding on field so native has 0 + right space for chevron */
5154
+ .muka-select__native {
5155
+ appearance: none;
5156
+ -webkit-appearance: none;
5157
+ flex: 1;
5158
+ border: none;
5159
+ outline: none;
5160
+ background: transparent;
5161
+ color: var(--input-field-color-default-foreground);
5162
+ font-family: var(--text-input-md-fontFamily);
5163
+ font-weight: var(--text-input-md-fontWeight);
5164
+ font-size: var(--text-input-md-fontSize);
5165
+ line-height: var(--text-input-md-lineHeight);
5166
+ padding: 0;
5167
+ padding-right: calc(var(--input-field-padding-x) + 1.5rem);
5168
+ cursor: pointer;
5169
+ min-width: 0;
5170
+ width: 100%;
5171
+ }
5172
+
5173
+ .muka-select__field--sm .muka-select__native {
5174
+ font-family: var(--text-input-sm-fontFamily);
5175
+ font-weight: var(--text-input-sm-fontWeight);
5176
+ font-size: var(--text-input-sm-fontSize);
5177
+ line-height: var(--text-input-sm-lineHeight);
5178
+ }
5179
+
5180
+ .muka-select__field--lg .muka-select__native {
5181
+ font-family: var(--text-input-lg-fontFamily);
5182
+ font-weight: var(--text-input-lg-fontWeight);
5183
+ font-size: var(--text-input-lg-fontSize);
5184
+ line-height: var(--text-input-lg-lineHeight);
5185
+ }
5186
+
5187
+ .muka-select__field--disabled .muka-select__native {
5188
+ color: var(--input-field-color-disabled-foreground);
5189
+ cursor: not-allowed;
5190
+ }
5191
+
5192
+ /* Chevron — aligned with field padding */
5193
+ .muka-select__chevron {
5194
+ display: inline-flex;
5195
+ align-items: center;
5196
+ position: absolute;
5197
+ right: var(--input-field-padding-x);
5198
+ pointer-events: none;
5199
+ color: var(--color-text-subtle-default);
5200
+ }
5201
+
5202
+ .muka-select__field--disabled .muka-select__chevron {
5203
+ color: var(--input-field-color-disabled-foreground);
5204
+ }
5205
+
5206
+ /* Helper text — same as Input */
5207
+ .muka-select__helper {
5208
+ font-family: var(--text-label-sm-regular-fontFamily);
5209
+ font-weight: var(--text-label-sm-regular-fontWeight);
5210
+ font-size: var(--text-label-sm-regular-fontSize);
5211
+ line-height: var(--text-label-sm-regular-lineHeight);
5212
+ color: var(--color-text-subtle-default);
5213
+ margin: 0;
5214
+ }
5215
+
5216
+ /* Error message — same as Input */
5217
+ .muka-select__error {
5218
+ font-family: var(--text-label-sm-regular-fontFamily);
5219
+ font-weight: var(--text-label-sm-regular-fontWeight);
5220
+ font-size: var(--text-label-sm-regular-fontSize);
5221
+ line-height: var(--text-label-sm-regular-lineHeight);
5222
+ color: var(--color-state-error-foreground);
5223
+ margin: 0;
5224
+ }
5225
+
5226
+
5227
+ /* SegmentGroup */
5228
+ /* SegmentGroup Component Styles - Using Muka Design Tokens */
5229
+
5230
+ /* Container */
5231
+ .muka-segmentgroup {
5232
+ display: inline-flex;
5233
+ align-items: center;
5234
+ gap: 0;
5235
+ padding: var(--segmentgroup-container-padding);
5236
+ background-color: var(--segmentgroup-container-background);
5237
+ border-radius: var(--segmentgroup-container-radius);
5238
+ position: relative;
5239
+ transition: background-color 0.2s ease, box-shadow 0.2s ease;
5240
+ }
5241
+
5242
+ /* Inset shadow on container */
5243
+ .muka-segmentgroup::after {
5244
+ content: '';
5245
+ position: absolute;
5246
+ inset: 0;
5247
+ border-radius: inherit;
5248
+ box-shadow: var(--segmentgroup-container-shadow);
5249
+ pointer-events: none;
5250
+ }
5251
+
5252
+ /* Full width variant */
5253
+ .muka-segmentgroup--full-width {
4896
5254
  width: 100%;
4897
5255
  }
4898
5256
 
@@ -5037,43 +5395,20 @@ body {
5037
5395
  outline-offset: 2px;
5038
5396
  z-index: 2;
5039
5397
  }
5040
-
5041
- /* Disabled state */
5042
- .muka-segmentgroup__segment--disabled,
5043
- .muka-segmentgroup__segment:disabled {
5044
- cursor: not-allowed;
5045
- opacity: 0.5;
5046
- }
5047
-
5048
- /* Label */
5049
- .muka-segmentgroup__label {
5050
- display: inline-flex;
5051
- align-items: center;
5052
- white-space: nowrap;
5053
- user-select: none;
5054
- }
5055
-
5056
-
5057
- /* Section */
5058
- /* Section Component - Layout tokens (section.padding) */
5059
-
5060
- .muka-section {
5061
- box-sizing: border-box;
5062
- }
5063
-
5064
- .muka-section--padding-compact {
5065
- padding-block: var(--section-padding-vertical-compact);
5066
- padding-inline: var(--section-padding-horizontal-compact);
5067
- }
5068
-
5069
- .muka-section--padding-default {
5070
- padding-block: var(--section-padding-vertical-default);
5071
- padding-inline: var(--section-padding-horizontal-default);
5398
+
5399
+ /* Disabled state */
5400
+ .muka-segmentgroup__segment--disabled,
5401
+ .muka-segmentgroup__segment:disabled {
5402
+ cursor: not-allowed;
5403
+ opacity: 0.5;
5072
5404
  }
5073
5405
 
5074
- .muka-section--padding-spacious {
5075
- padding-block: var(--section-padding-vertical-spacious);
5076
- padding-inline: var(--section-padding-horizontal-spacious);
5406
+ /* Label */
5407
+ .muka-segmentgroup__label {
5408
+ display: inline-flex;
5409
+ align-items: center;
5410
+ white-space: nowrap;
5411
+ user-select: none;
5077
5412
  }
5078
5413
 
5079
5414
 
@@ -5246,6 +5581,29 @@ body {
5246
5581
  }
5247
5582
 
5248
5583
 
5584
+ /* Section */
5585
+ /* Section Component - Layout tokens (section.padding) */
5586
+
5587
+ .muka-section {
5588
+ box-sizing: border-box;
5589
+ }
5590
+
5591
+ .muka-section--padding-compact {
5592
+ padding-block: var(--section-padding-vertical-compact);
5593
+ padding-inline: var(--section-padding-horizontal-compact);
5594
+ }
5595
+
5596
+ .muka-section--padding-default {
5597
+ padding-block: var(--section-padding-vertical-default);
5598
+ padding-inline: var(--section-padding-horizontal-default);
5599
+ }
5600
+
5601
+ .muka-section--padding-spacious {
5602
+ padding-block: var(--section-padding-vertical-spacious);
5603
+ padding-inline: var(--section-padding-horizontal-spacious);
5604
+ }
5605
+
5606
+
5249
5607
  /* RangeSlider */
5250
5608
  /* RangeSlider Component Styles - Using Muka Design Tokens */
5251
5609
 
@@ -9879,6 +10237,19 @@ li.muka-listitem {
9879
10237
  /* Combobox */
9880
10238
  /* Combobox Component Styles */
9881
10239
 
10240
+ /* ─── Trigger group (positioning context for the trailing controls) ── */
10241
+
10242
+ /*
10243
+ * The clear control is a sibling of the trigger, not a child (a <button> may
10244
+ * not contain interactive content), so it is overlaid on the trigger's trailing
10245
+ * padding. The trigger reserves that space with padding-right below.
10246
+ */
10247
+ .muka-combobox__trigger-group {
10248
+ position: relative;
10249
+ display: block;
10250
+ width: 100%;
10251
+ }
10252
+
9882
10253
  /* ─── Trigger (looks like an Input field, behaves like a button) ── */
9883
10254
 
9884
10255
  .muka-combobox {
@@ -9886,7 +10257,7 @@ li.muka-listitem {
9886
10257
  align-items: center;
9887
10258
  gap: var(--spacing-2);
9888
10259
  width: 100%;
9889
- padding: 0 var(--input-field-padding-x);
10260
+ padding: 0 var(--muka-combobox-trailing-space) 0 var(--input-field-padding-x);
9890
10261
  background-color: var(--input-field-color-default-background);
9891
10262
  border: var(--border-width-regular) solid var(--input-field-color-default-border);
9892
10263
  color: var(--color-text-default-default);
@@ -9898,6 +10269,19 @@ li.muka-listitem {
9898
10269
  line-height: var(--text-body-md-regular-lineHeight);
9899
10270
  -webkit-tap-highlight-color: transparent;
9900
10271
  transition: border-color 0.12s ease;
10272
+
10273
+ /* Room for the chevron overlaid on the trailing edge. */
10274
+ --muka-combobox-trailing-space: calc(
10275
+ var(--input-field-padding-x) + var(--icon-size-sm) + var(--spacing-2)
10276
+ );
10277
+ }
10278
+
10279
+ /* …and for the clear button next to it, when one is rendered. */
10280
+ .muka-combobox--clearable {
10281
+ --muka-combobox-trailing-space: calc(
10282
+ var(--input-field-padding-x) + var(--icon-size-sm) + var(--spacing-2) +
10283
+ var(--icon-size-xs) + var(--spacing-1) * 2 + var(--spacing-2)
10284
+ );
9901
10285
  }
9902
10286
 
9903
10287
  .muka-combobox--sm {
@@ -9950,6 +10334,23 @@ li.muka-listitem {
9950
10334
  text-overflow: ellipsis;
9951
10335
  }
9952
10336
 
10337
+ /* ─── Trailing controls (clear + chevron) ─────────────── */
10338
+
10339
+ .muka-combobox__actions {
10340
+ position: absolute;
10341
+ top: 0;
10342
+ right: var(--input-field-padding-x);
10343
+ height: 100%;
10344
+ display: flex;
10345
+ align-items: center;
10346
+ gap: var(--spacing-2);
10347
+ /*
10348
+ * The strip sits on top of the trigger, so it must not swallow taps meant to
10349
+ * open the picker. Only the clear button takes pointer events back.
10350
+ */
10351
+ pointer-events: none;
10352
+ }
10353
+
9953
10354
  .muka-combobox__clear,
9954
10355
  .muka-combobox__chevron {
9955
10356
  display: inline-flex;
@@ -9960,9 +10361,13 @@ li.muka-listitem {
9960
10361
  }
9961
10362
 
9962
10363
  .muka-combobox__clear {
10364
+ pointer-events: auto;
9963
10365
  cursor: pointer;
9964
10366
  padding: var(--spacing-1);
10367
+ border: none;
10368
+ background: none;
9965
10369
  border-radius: var(--radius-sm);
10370
+ -webkit-tap-highlight-color: transparent;
9966
10371
  }
9967
10372
 
9968
10373
  .muka-combobox__clear:hover {
@@ -9970,6 +10375,17 @@ li.muka-listitem {
9970
10375
  background-color: var(--color-surface-level1);
9971
10376
  }
9972
10377
 
10378
+ .muka-combobox__clear:focus-visible {
10379
+ outline: 2px solid var(--color-border-focus);
10380
+ outline-offset: 2px;
10381
+ color: var(--color-text-default-default);
10382
+ }
10383
+
10384
+ .muka-combobox--disabled ~ .muka-combobox__actions,
10385
+ .muka-combobox:disabled ~ .muka-combobox__actions {
10386
+ opacity: 0.5;
10387
+ }
10388
+
9973
10389
  /* ─── Picker sheet body ───────────────────────────────── */
9974
10390
 
9975
10391
  .muka-combobox__picker {
@@ -10779,7 +11195,7 @@ button.muka-chat-photo-grid__tile:focus-visible {
10779
11195
  align-items: stretch;
10780
11196
  gap: var(--spacing-8);
10781
11197
  width: 100%;
10782
- max-width: var(--container-max-width-sm);
11198
+ max-width: var(--chat-column-max-width);
10783
11199
  margin: 0 auto;
10784
11200
  }
10785
11201
 
@@ -10865,7 +11281,13 @@ button.muka-chat-photo-grid__tile:focus-visible {
10865
11281
  * no length measuring needed (Figma `Text length` on 5355:44091).
10866
11282
  */
10867
11283
  width: fit-content;
10868
- max-width: var(--chatbubble-max-width);
11284
+ /*
11285
+ * Stops short of the far edge at every width: the fixed cap once the
11286
+ * conversation column reaches its own cap, the ratio below that, where the
11287
+ * column runs full-bleed. Without that gap a long `own` bubble spans the
11288
+ * column and reads no differently from a `peer` one.
11289
+ */
11290
+ max-width: min(var(--chatbubble-max-width), var(--chatbubble-max-width-ratio));
10869
11291
  position: relative;
10870
11292
  display: flex;
10871
11293
  flex-direction: column;
@@ -11988,19 +12410,34 @@ button.muka-chat-photo-grid__tile:focus-visible {
11988
12410
 
11989
12411
  .muka-bottombar--chat .muka-bottombar__content {
11990
12412
  flex-direction: row;
11991
- max-width: var(--bottombar-chat-max-width);
11992
12413
  width: 100%;
11993
12414
  margin: 0 auto;
11994
12415
  }
11995
12416
 
11996
- /* Docked chat pads its content; the floating card supplies its own padding. */
12417
+ /*
12418
+ * `--bottombar-chat-max-width` is the conversation column (it derives from
12419
+ * `chat.column.max-width`, the same token `ChatMessageList` caps its column
12420
+ * with). The cap here carries the padding on top of it, so it is the
12421
+ * composer's own edges — not the padding around it — that land on the column.
12422
+ */
12423
+
12424
+ /*
12425
+ * Docked chat pads its content; the floating card supplies its own padding.
12426
+ * The inline half is the section gutter `ChatMessageList` pads its scroller
12427
+ * with, so below the cap — where the column runs full-bleed — the composer
12428
+ * keeps to the same gutters as the messages.
12429
+ */
11997
12430
  .muka-bottombar--chat:not(.muka-bottombar--floating) .muka-bottombar__content {
11998
- padding: var(--bottombar-chat-padding);
12431
+ padding: var(--bottombar-chat-padding)
12432
+ var(--section-padding-horizontal-default, var(--spacing-4));
12433
+ max-width: calc(
12434
+ var(--bottombar-chat-max-width) + 2 * var(--section-padding-horizontal-default, var(--spacing-4))
12435
+ );
11999
12436
  }
12000
12437
 
12001
12438
  /* Floating chat card widens to the chat cap (overrides the md default below). */
12002
12439
  .muka-bottombar--chat.muka-bottombar--floating .muka-bottombar__content {
12003
- max-width: var(--bottombar-chat-max-width);
12440
+ max-width: calc(var(--bottombar-chat-max-width) + 2 * var(--bottombar-floating-padding));
12004
12441
  }
12005
12442
 
12006
12443
  /* ─── Tab item ────────────────────────────────────────── */
@@ -13069,185 +13506,16 @@ button.muka-chat-photo-grid__tile:focus-visible {
13069
13506
  .muka-alert__dismiss:hover {
13070
13507
  opacity: 0.85;
13071
13508
  background-color: rgba(0, 0, 0, 0.05);
13072
- }
13073
-
13074
- .muka-alert__dismiss:focus-visible {
13075
- outline: 2px solid var(--color-border-focus);
13076
- outline-offset: 2px;
13077
- }
13078
-
13079
- .muka-alert__dismiss svg {
13080
- width: 16px;
13081
- height: 16px;
13082
- }
13083
-
13084
-
13085
- /* AgentTaskList */
13086
- /* AgentTaskList Component Styles */
13087
-
13088
- .muka-agent-task-list {
13089
- display: flex;
13090
- flex-direction: column;
13091
- gap: var(--spacing-2);
13092
- width: 100%;
13093
- padding: 0 var(--spacing-2);
13094
- }
13095
-
13096
- /* ─── Header ───────────────────────────────────────────── */
13097
-
13098
- .muka-agent-task-list__header {
13099
- display: inline-flex;
13100
- align-items: center;
13101
- gap: var(--spacing-3);
13102
- background: none;
13103
- border: none;
13104
- padding: 0;
13105
- margin: 0;
13106
- cursor: pointer;
13107
- color: var(--color-text-subtle-default);
13108
- font-family: var(--text-body-sm-regular-fontFamily);
13109
- font-weight: var(--text-body-sm-regular-fontWeight);
13110
- font-size: var(--text-body-sm-regular-fontSize);
13111
- line-height: var(--text-body-sm-regular-lineHeight);
13112
- text-align: left;
13113
- -webkit-tap-highlight-color: transparent;
13114
- }
13115
-
13116
- .muka-agent-task-list--open .muka-agent-task-list__header {
13117
- font-family: var(--text-body-sm-bold-fontFamily);
13118
- font-weight: var(--text-body-sm-bold-fontWeight);
13119
- font-size: var(--text-body-sm-bold-fontSize);
13120
- line-height: var(--text-body-sm-bold-lineHeight);
13121
- }
13122
-
13123
- .muka-agent-task-list__header:focus-visible {
13124
- outline: 2px solid var(--color-action-default);
13125
- outline-offset: 2px;
13126
- border-radius: var(--radius-sm);
13127
- }
13128
-
13129
- .muka-agent-task-list__title {
13130
- text-align: left;
13131
- }
13132
-
13133
- .muka-agent-task-list__chevron {
13134
- display: inline-flex;
13135
- align-items: center;
13136
- justify-content: center;
13137
- transition: transform 0.16s ease;
13138
- color: var(--color-text-subtle-default);
13139
- }
13140
-
13141
- .muka-agent-task-list__chevron[data-open='false'] {
13142
- transform: rotate(-90deg);
13143
- }
13144
-
13145
- /* ─── Task list ────────────────────────────────────────── */
13146
-
13147
- .muka-agent-task-list__tasks {
13148
- list-style: none;
13149
- padding: 0;
13150
- margin: 0;
13151
- display: flex;
13152
- flex-direction: column;
13153
- }
13154
-
13155
- /* ─── Single task row ──────────────────────────────────── */
13156
-
13157
- .muka-agent-task-list__task {
13158
- display: flex;
13159
- align-items: stretch;
13160
- gap: var(--spacing-4);
13161
- min-height: 32px;
13162
- padding: 0;
13163
- }
13164
-
13165
- /* ─── Bullet column (icon + timeline connector) ────────── */
13166
-
13167
- .muka-agent-task-list__bullet {
13168
- position: relative;
13169
- flex-shrink: 0;
13170
- width: 16px;
13171
- align-self: stretch;
13172
- }
13173
-
13174
- .muka-agent-task-list__line {
13175
- position: absolute;
13176
- left: 7px;
13177
- width: 1px;
13178
- background-color: var(--color-border-default);
13179
- }
13180
-
13181
- .muka-agent-task-list__line--top {
13182
- top: 0;
13183
- height: 6px;
13184
- }
13185
-
13186
- .muka-agent-task-list__line--bottom {
13187
- top: 32px;
13188
- bottom: 0;
13189
- }
13190
-
13191
- .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13192
- display: none;
13193
- }
13194
-
13195
- .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13196
- display: none;
13197
- }
13198
-
13199
- .muka-agent-task-list__icon {
13200
- position: absolute;
13201
- top: 8px;
13202
- left: 0;
13203
- width: 16px;
13204
- height: 16px;
13205
- display: inline-flex;
13206
- align-items: center;
13207
- justify-content: center;
13208
- color: var(--color-text-subtle-default);
13209
- z-index: 1;
13210
- }
13211
-
13212
- /* ─── State color treatments ───────────────────────────── */
13213
-
13214
- .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13215
- color: var(--color-action-default);
13216
- }
13217
-
13218
- .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13219
- color: var(--color-text-subtle-default);
13220
- }
13221
-
13222
- .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13223
- color: var(--color-text-muted-default, var(--color-text-subtle-default));
13224
- opacity: 0.6;
13225
- }
13226
-
13227
- /* ─── Label ────────────────────────────────────────────── */
13228
-
13229
- .muka-agent-task-list__label {
13230
- flex: 1 1 0;
13231
- min-width: 0;
13232
- padding: var(--spacing-2) 0;
13233
- color: var(--color-text-subtle-default);
13234
- font-family: var(--text-body-sm-regular-fontFamily);
13235
- font-weight: var(--text-body-sm-regular-fontWeight);
13236
- font-size: var(--text-body-sm-regular-fontSize);
13237
- line-height: var(--text-body-sm-regular-lineHeight);
13238
- word-break: break-word;
13239
- }
13240
-
13241
- /* ─── Print ────────────────────────────────────────────── */
13509
+ }
13242
13510
 
13243
- @media print {
13244
- .muka-agent-task-list {
13245
- break-inside: avoid;
13246
- }
13511
+ .muka-alert__dismiss:focus-visible {
13512
+ outline: 2px solid var(--color-border-focus);
13513
+ outline-offset: 2px;
13514
+ }
13247
13515
 
13248
- .muka-agent-task-list__chevron {
13249
- display: none;
13250
- }
13516
+ .muka-alert__dismiss svg {
13517
+ width: 16px;
13518
+ height: 16px;
13251
13519
  }
13252
13520
 
13253
13521
 
@@ -13393,407 +13661,302 @@ button.muka-chat-photo-grid__tile:focus-visible {
13393
13661
  }
13394
13662
 
13395
13663
 
13396
- /* Accordion */
13397
- /* Accordion Component Styles */
13664
+ /* AgentTaskList */
13665
+ /* AgentTaskList Component Styles */
13398
13666
 
13399
- .muka-accordion {
13667
+ .muka-agent-task-list {
13668
+ display: flex;
13669
+ flex-direction: column;
13670
+ gap: var(--spacing-2);
13400
13671
  width: 100%;
13672
+ padding: 0 var(--spacing-2);
13401
13673
  }
13402
13674
 
13403
- /* Item */
13404
- .muka-accordion__item {
13405
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
13406
- }
13407
-
13408
- .muka-accordion__item:last-child {
13409
- border-bottom: none;
13410
- }
13411
-
13412
- /* Header reset */
13413
- .muka-accordion__header {
13414
- margin: 0;
13415
- }
13675
+ /* ─── Header ───────────────────────────────────────────── */
13416
13676
 
13417
- /* Trigger */
13418
- .muka-accordion__trigger {
13419
- display: flex;
13677
+ .muka-agent-task-list__header {
13678
+ display: inline-flex;
13420
13679
  align-items: center;
13421
- justify-content: space-between;
13422
- width: 100%;
13423
- padding: var(--spacing-4);
13680
+ gap: var(--spacing-3);
13424
13681
  background: none;
13425
13682
  border: none;
13683
+ padding: 0;
13684
+ margin: 0;
13426
13685
  cursor: pointer;
13427
- font-family: var(--text-label-md-semibold-fontFamily);
13428
- font-weight: var(--text-label-md-semibold-fontWeight);
13429
- font-size: var(--text-label-md-semibold-fontSize);
13430
- line-height: var(--text-label-md-semibold-lineHeight);
13431
- color: var(--color-text-default-default);
13686
+ color: var(--color-text-subtle-default);
13687
+ font-family: var(--text-body-sm-regular-fontFamily);
13688
+ font-weight: var(--text-body-sm-regular-fontWeight);
13689
+ font-size: var(--text-body-sm-regular-fontSize);
13690
+ line-height: var(--text-body-sm-regular-lineHeight);
13432
13691
  text-align: left;
13433
- gap: var(--spacing-3);
13434
- transition: background-color 0.15s ease;
13692
+ -webkit-tap-highlight-color: transparent;
13435
13693
  }
13436
13694
 
13437
- .muka-accordion__trigger:hover {
13438
- background-color: var(--color-surface-level1);
13695
+ .muka-agent-task-list--open .muka-agent-task-list__header {
13696
+ font-family: var(--text-body-sm-bold-fontFamily);
13697
+ font-weight: var(--text-body-sm-bold-fontWeight);
13698
+ font-size: var(--text-body-sm-bold-fontSize);
13699
+ line-height: var(--text-body-sm-bold-lineHeight);
13439
13700
  }
13440
13701
 
13441
- .muka-accordion__trigger[data-disabled] {
13442
- cursor: not-allowed;
13443
- opacity: 0.4;
13702
+ .muka-agent-task-list__header:focus-visible {
13703
+ outline: 2px solid var(--color-action-default);
13704
+ outline-offset: 2px;
13705
+ border-radius: var(--radius-sm);
13444
13706
  }
13445
13707
 
13446
- .muka-accordion__trigger-text {
13447
- flex: 1;
13708
+ .muka-agent-task-list__title {
13709
+ text-align: left;
13448
13710
  }
13449
13711
 
13450
- /* Chevron rotation */
13451
- .muka-accordion__chevron {
13712
+ .muka-agent-task-list__chevron {
13452
13713
  display: inline-flex;
13453
13714
  align-items: center;
13715
+ justify-content: center;
13716
+ transition: transform 0.16s ease;
13454
13717
  color: var(--color-text-subtle-default);
13455
- transition: transform 200ms ease;
13456
- }
13457
-
13458
- .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13459
- transform: rotate(180deg);
13460
- }
13461
-
13462
- /* Content */
13463
- .muka-accordion__content {
13464
- overflow: hidden;
13465
13718
  }
13466
13719
 
13467
- .muka-accordion__content[data-state='open'] {
13468
- animation: muka-accordion-slideDown 200ms ease;
13469
- }
13470
-
13471
- .muka-accordion__content[data-state='closed'] {
13472
- animation: muka-accordion-slideUp 200ms ease;
13473
- }
13474
-
13475
- @keyframes muka-accordion-slideDown {
13476
- from {
13477
- height: 0;
13478
- }
13479
- to {
13480
- height: var(--radix-accordion-content-height);
13481
- }
13720
+ .muka-agent-task-list__chevron[data-open='false'] {
13721
+ transform: rotate(-90deg);
13482
13722
  }
13483
13723
 
13484
- @keyframes muka-accordion-slideUp {
13485
- from {
13486
- height: var(--radix-accordion-content-height);
13487
- }
13488
- to {
13489
- height: 0;
13490
- }
13491
- }
13724
+ /* ─── Task list ────────────────────────────────────────── */
13492
13725
 
13493
- .muka-accordion__content-inner {
13494
- padding: 0 var(--spacing-4) var(--spacing-5);
13495
- color: var(--color-text-default-default);
13726
+ .muka-agent-task-list__tasks {
13727
+ list-style: none;
13728
+ padding: 0;
13729
+ margin: 0;
13730
+ display: flex;
13731
+ flex-direction: column;
13496
13732
  }
13497
13733
 
13498
- /* ─── Variant: flush ────────────────────────────────────────────────────── */
13499
-
13500
- .muka-accordion--flush .muka-accordion__trigger {
13501
- padding-left: 0;
13502
- padding-right: 0;
13503
- }
13734
+ /* ─── Single task row ──────────────────────────────────── */
13504
13735
 
13505
- .muka-accordion--flush .muka-accordion__content-inner {
13506
- padding-left: 0;
13507
- padding-right: 0;
13736
+ .muka-agent-task-list__task {
13737
+ display: flex;
13738
+ align-items: stretch;
13739
+ gap: var(--spacing-4);
13740
+ min-height: 32px;
13741
+ padding: 0;
13508
13742
  }
13509
13743
 
13510
- /* ─── Variant: contained ────────────────────────────────────────────────── */
13511
-
13512
- .muka-accordion--contained {
13513
- border: var(--border-width-regular) solid var(--color-border-default);
13514
- border-radius: var(--radius-md);
13515
- overflow: hidden;
13516
- }
13744
+ /* ─── Bullet column (icon + timeline connector) ────────── */
13517
13745
 
13518
- .muka-accordion--contained .muka-accordion__item {
13519
- background-color: var(--color-surface-level3);
13746
+ .muka-agent-task-list__bullet {
13747
+ position: relative;
13748
+ flex-shrink: 0;
13749
+ width: 16px;
13750
+ align-self: stretch;
13520
13751
  }
13521
13752
 
13522
- .muka-accordion--contained .muka-accordion__item:last-child {
13523
- border-bottom: none;
13753
+ .muka-agent-task-list__line {
13754
+ position: absolute;
13755
+ left: 7px;
13756
+ width: 1px;
13757
+ background-color: var(--color-border-default);
13524
13758
  }
13525
13759
 
13526
-
13527
- /* Sheet */
13528
- /* Sheet Component Styles */
13529
-
13530
- /* ─── Backdrop ────────────────────────────────────────── */
13531
-
13532
- .muka-sheet__overlay {
13533
- position: fixed;
13534
- inset: 0;
13535
- background-color: var(--color-surface-backdrop);
13536
- z-index: 50;
13760
+ .muka-agent-task-list__line--top {
13761
+ top: 0;
13762
+ height: 6px;
13537
13763
  }
13538
13764
 
13539
- /* ─── Surface ─────────────────────────────────────────── */
13540
-
13541
- .muka-sheet {
13542
- position: fixed;
13543
- left: 0;
13544
- right: 0;
13765
+ .muka-agent-task-list__line--bottom {
13766
+ top: 32px;
13545
13767
  bottom: 0;
13546
- z-index: 51;
13547
-
13548
- display: flex;
13549
- flex-direction: column;
13550
-
13551
- max-height: 96dvh;
13552
-
13553
- background-color: var(--color-surface-level3);
13554
- border-top-left-radius: var(--radius-lg);
13555
- border-top-right-radius: var(--radius-lg);
13556
- box-shadow: var(--shadow-level5);
13557
-
13558
- outline: none;
13559
- }
13560
-
13561
- /* Safe-area bottom inset for the iPhone home indicator. */
13562
- .muka-sheet:not(.muka-sheet--no-safe-area) {
13563
- padding-bottom: env(safe-area-inset-bottom);
13564
- }
13565
-
13566
- /* ─── Drag handle ─────────────────────────────────────── */
13567
-
13568
- .muka-sheet__handle-container {
13569
- display: flex;
13570
- justify-content: center;
13571
- flex-shrink: 0;
13572
- padding: var(--spacing-3) 0;
13573
13768
  }
13574
13769
 
13575
- .muka-sheet__handle {
13576
- width: var(--dialog-drag-handle-width);
13577
- height: var(--dialog-drag-handle-height);
13578
- background-color: var(--dialog-drag-handle-color);
13579
- border-radius: var(--dialog-drag-handle-radius);
13770
+ .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13771
+ display: none;
13580
13772
  }
13581
13773
 
13582
- /* ─── Body (scrollable) ───────────────────────────────── */
13583
-
13584
- .muka-sheet__body {
13585
- flex: 1 1 0%;
13586
- min-height: 0;
13587
- overflow-y: auto;
13588
- -webkit-overflow-scrolling: touch;
13589
- overscroll-behavior: contain;
13774
+ .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13775
+ display: none;
13590
13776
  }
13591
13777
 
13592
- /* ─── Visually-hidden title (a11y) ────────────────────── */
13593
-
13594
- .muka-sheet__sr-title {
13778
+ .muka-agent-task-list__icon {
13595
13779
  position: absolute;
13596
- width: 1px;
13597
- height: 1px;
13598
- padding: 0;
13599
- margin: -1px;
13600
- overflow: hidden;
13601
- clip: rect(0, 0, 0, 0);
13602
- white-space: nowrap;
13603
- border: 0;
13780
+ top: 8px;
13781
+ left: 0;
13782
+ width: 16px;
13783
+ height: 16px;
13784
+ display: inline-flex;
13785
+ align-items: center;
13786
+ justify-content: center;
13787
+ color: var(--color-text-subtle-default);
13788
+ z-index: 1;
13604
13789
  }
13605
13790
 
13791
+ /* ─── State color treatments ───────────────────────────── */
13606
13792
 
13607
- /* Select */
13608
- /* Select Component Styles - Aligned with Input for consistency */
13793
+ .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13794
+ color: var(--color-action-default);
13795
+ }
13609
13796
 
13610
- .muka-select {
13611
- display: inline-flex;
13612
- flex-direction: column;
13613
- gap: var(--spacing-2);
13797
+ .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13798
+ color: var(--color-text-subtle-default);
13614
13799
  }
13615
13800
 
13616
- .muka-select--full-width {
13617
- width: 100%;
13801
+ .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13802
+ color: var(--color-text-muted-default, var(--color-text-subtle-default));
13803
+ opacity: 0.6;
13618
13804
  }
13619
13805
 
13620
- /* Label */
13621
- .muka-select__label {
13622
- color: var(--color-text-default-default);
13623
- cursor: pointer;
13806
+ /* ─── Label ────────────────────────────────────────────── */
13807
+
13808
+ .muka-agent-task-list__label {
13809
+ flex: 1 1 0;
13810
+ min-width: 0;
13811
+ padding: var(--spacing-2) 0;
13812
+ color: var(--color-text-subtle-default);
13813
+ font-family: var(--text-body-sm-regular-fontFamily);
13814
+ font-weight: var(--text-body-sm-regular-fontWeight);
13815
+ font-size: var(--text-body-sm-regular-fontSize);
13816
+ line-height: var(--text-body-sm-regular-lineHeight);
13817
+ word-break: break-word;
13624
13818
  }
13625
13819
 
13626
- .muka-select__label--sm {
13627
- font-family: var(--text-label-sm-semibold-fontFamily);
13628
- font-weight: var(--text-label-sm-semibold-fontWeight);
13629
- font-size: var(--text-label-sm-semibold-fontSize);
13630
- line-height: var(--text-label-sm-semibold-lineHeight);
13820
+ /* ─── Print ────────────────────────────────────────────── */
13821
+
13822
+ @media print {
13823
+ .muka-agent-task-list {
13824
+ break-inside: avoid;
13825
+ }
13826
+
13827
+ .muka-agent-task-list__chevron {
13828
+ display: none;
13829
+ }
13631
13830
  }
13632
13831
 
13633
- .muka-select__label--md {
13634
- font-family: var(--text-label-md-semibold-fontFamily);
13635
- font-weight: var(--text-label-md-semibold-fontWeight);
13636
- font-size: var(--text-label-md-semibold-fontSize);
13637
- line-height: var(--text-label-md-semibold-lineHeight);
13832
+
13833
+ /* Accordion */
13834
+ /* Accordion Component Styles */
13835
+
13836
+ .muka-accordion {
13837
+ width: 100%;
13638
13838
  }
13639
13839
 
13640
- .muka-select__label--lg {
13641
- font-family: var(--text-label-lg-semibold-fontFamily);
13642
- font-weight: var(--text-label-lg-semibold-fontWeight);
13643
- font-size: var(--text-label-lg-semibold-fontSize);
13644
- line-height: var(--text-label-lg-semibold-lineHeight);
13840
+ /* Item */
13841
+ .muka-accordion__item {
13842
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
13645
13843
  }
13646
13844
 
13647
- .muka-select__required {
13648
- color: var(--color-state-error-foreground);
13845
+ .muka-accordion__item:last-child {
13846
+ border-bottom: none;
13649
13847
  }
13650
13848
 
13651
- .muka-select__label--sm + .muka-select__field--disabled,
13652
- .muka-select__label--md + .muka-select__field--disabled,
13653
- .muka-select__label--lg + .muka-select__field--disabled {
13654
- cursor: not-allowed;
13849
+ /* Header reset */
13850
+ .muka-accordion__header {
13851
+ margin: 0;
13655
13852
  }
13656
13853
 
13657
- /* Field container — same as Input: 1px border, radius, padding, inset shadow */
13658
- .muka-select__field {
13854
+ /* Trigger */
13855
+ .muka-accordion__trigger {
13659
13856
  display: flex;
13660
13857
  align-items: center;
13661
- gap: var(--spacing-2);
13662
- position: relative;
13663
- background-color: var(--input-field-color-default-background);
13664
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
13665
- border-radius: var(--input-field-radius-md);
13666
- padding: var(--input-field-padding-y) var(--input-field-padding-x);
13667
- transition: border-color 0.2s ease, background-color 0.2s ease;
13858
+ justify-content: space-between;
13859
+ width: 100%;
13860
+ padding: var(--spacing-4);
13861
+ background: none;
13862
+ border: none;
13668
13863
  cursor: pointer;
13669
- box-sizing: border-box;
13864
+ font-family: var(--text-label-md-semibold-fontFamily);
13865
+ font-weight: var(--text-label-md-semibold-fontWeight);
13866
+ font-size: var(--text-label-md-semibold-fontSize);
13867
+ line-height: var(--text-label-md-semibold-lineHeight);
13868
+ color: var(--color-text-default-default);
13869
+ text-align: left;
13870
+ gap: var(--spacing-3);
13871
+ transition: background-color 0.15s ease;
13670
13872
  }
13671
13873
 
13672
- /* Inset shadow — same as Input (single subtle line) */
13673
- .muka-select__field::after {
13674
- content: '';
13675
- position: absolute;
13676
- inset: 0;
13677
- border-radius: inherit;
13678
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.08);
13679
- pointer-events: none;
13874
+ .muka-accordion__trigger:hover {
13875
+ background-color: var(--color-surface-level1);
13680
13876
  }
13681
13877
 
13682
- /* Size variants — same radius/height as Input */
13683
- .muka-select__field--sm {
13684
- min-height: var(--input-field-height-sm);
13685
- border-radius: var(--input-field-radius-sm);
13878
+ .muka-accordion__trigger[data-disabled] {
13879
+ cursor: not-allowed;
13880
+ opacity: 0.4;
13686
13881
  }
13687
13882
 
13688
- .muka-select__field--md {
13689
- min-height: var(--input-field-height-default);
13690
- border-radius: var(--input-field-radius-md);
13883
+ .muka-accordion__trigger-text {
13884
+ flex: 1;
13691
13885
  }
13692
13886
 
13693
- .muka-select__field--lg {
13694
- min-height: var(--input-field-height-lg);
13695
- border-radius: var(--input-field-radius-lg);
13887
+ /* Chevron rotation */
13888
+ .muka-accordion__chevron {
13889
+ display: inline-flex;
13890
+ align-items: center;
13891
+ color: var(--color-text-subtle-default);
13892
+ transition: transform 200ms ease;
13696
13893
  }
13697
13894
 
13698
- /* Hover — no visual change (same as Input) */
13699
-
13700
- /* Focus (active) — same as Input: 2px border, padding compensation */
13701
- .muka-select__field--focused:not(.muka-select__field--disabled) {
13702
- border-width: var(--border-width-bold);
13703
- border-color: var(--input-field-color-focus-border);
13704
- background-color: var(--input-field-color-focus-background);
13705
- padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
13895
+ .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13896
+ transform: rotate(180deg);
13706
13897
  }
13707
13898
 
13708
- /* Error — same as Input: 2px border, padding compensation */
13709
- .muka-select__field--error:not(.muka-select__field--disabled) {
13710
- border-width: var(--border-width-bold);
13711
- border-color: var(--input-field-color-error-border);
13712
- background-color: var(--input-field-color-error-background);
13713
- padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
13899
+ /* Content */
13900
+ .muka-accordion__content {
13901
+ overflow: hidden;
13714
13902
  }
13715
13903
 
13716
- /* Disabled — same as Input */
13717
- .muka-select__field--disabled {
13718
- background-color: var(--input-field-color-disabled-background);
13719
- border-color: var(--input-field-color-disabled-border);
13720
- cursor: not-allowed;
13904
+ .muka-accordion__content[data-state='open'] {
13905
+ animation: muka-accordion-slideDown 200ms ease;
13721
13906
  }
13722
13907
 
13723
- .muka-select__field--disabled::after {
13724
- display: none;
13908
+ .muka-accordion__content[data-state='closed'] {
13909
+ animation: muka-accordion-slideUp 200ms ease;
13725
13910
  }
13726
13911
 
13727
- /* Native select — padding on field so native has 0 + right space for chevron */
13728
- .muka-select__native {
13729
- appearance: none;
13730
- -webkit-appearance: none;
13731
- flex: 1;
13732
- border: none;
13733
- outline: none;
13734
- background: transparent;
13735
- color: var(--input-field-color-default-foreground);
13736
- font-family: var(--text-input-md-fontFamily);
13737
- font-weight: var(--text-input-md-fontWeight);
13738
- font-size: var(--text-input-md-fontSize);
13739
- line-height: var(--text-input-md-lineHeight);
13740
- padding: 0;
13741
- padding-right: calc(var(--input-field-padding-x) + 1.5rem);
13742
- cursor: pointer;
13743
- min-width: 0;
13744
- width: 100%;
13912
+ @keyframes muka-accordion-slideDown {
13913
+ from {
13914
+ height: 0;
13915
+ }
13916
+ to {
13917
+ height: var(--radix-accordion-content-height);
13918
+ }
13745
13919
  }
13746
13920
 
13747
- .muka-select__field--sm .muka-select__native {
13748
- font-family: var(--text-input-sm-fontFamily);
13749
- font-weight: var(--text-input-sm-fontWeight);
13750
- font-size: var(--text-input-sm-fontSize);
13751
- line-height: var(--text-input-sm-lineHeight);
13921
+ @keyframes muka-accordion-slideUp {
13922
+ from {
13923
+ height: var(--radix-accordion-content-height);
13924
+ }
13925
+ to {
13926
+ height: 0;
13927
+ }
13752
13928
  }
13753
13929
 
13754
- .muka-select__field--lg .muka-select__native {
13755
- font-family: var(--text-input-lg-fontFamily);
13756
- font-weight: var(--text-input-lg-fontWeight);
13757
- font-size: var(--text-input-lg-fontSize);
13758
- line-height: var(--text-input-lg-lineHeight);
13930
+ .muka-accordion__content-inner {
13931
+ padding: 0 var(--spacing-4) var(--spacing-5);
13932
+ color: var(--color-text-default-default);
13759
13933
  }
13760
13934
 
13761
- .muka-select__field--disabled .muka-select__native {
13762
- color: var(--input-field-color-disabled-foreground);
13763
- cursor: not-allowed;
13935
+ /* ─── Variant: flush ────────────────────────────────────────────────────── */
13936
+
13937
+ .muka-accordion--flush .muka-accordion__trigger {
13938
+ padding-left: 0;
13939
+ padding-right: 0;
13764
13940
  }
13765
13941
 
13766
- /* Chevron — aligned with field padding */
13767
- .muka-select__chevron {
13768
- display: inline-flex;
13769
- align-items: center;
13770
- position: absolute;
13771
- right: var(--input-field-padding-x);
13772
- pointer-events: none;
13773
- color: var(--color-text-subtle-default);
13942
+ .muka-accordion--flush .muka-accordion__content-inner {
13943
+ padding-left: 0;
13944
+ padding-right: 0;
13774
13945
  }
13775
13946
 
13776
- .muka-select__field--disabled .muka-select__chevron {
13777
- color: var(--input-field-color-disabled-foreground);
13947
+ /* ─── Variant: contained ────────────────────────────────────────────────── */
13948
+
13949
+ .muka-accordion--contained {
13950
+ border: var(--border-width-regular) solid var(--color-border-default);
13951
+ border-radius: var(--radius-md);
13952
+ overflow: hidden;
13778
13953
  }
13779
13954
 
13780
- /* Helper text — same as Input */
13781
- .muka-select__helper {
13782
- font-family: var(--text-label-sm-regular-fontFamily);
13783
- font-weight: var(--text-label-sm-regular-fontWeight);
13784
- font-size: var(--text-label-sm-regular-fontSize);
13785
- line-height: var(--text-label-sm-regular-lineHeight);
13786
- color: var(--color-text-subtle-default);
13787
- margin: 0;
13955
+ .muka-accordion--contained .muka-accordion__item {
13956
+ background-color: var(--color-surface-level3);
13788
13957
  }
13789
13958
 
13790
- /* Error message — same as Input */
13791
- .muka-select__error {
13792
- font-family: var(--text-label-sm-regular-fontFamily);
13793
- font-weight: var(--text-label-sm-regular-fontWeight);
13794
- font-size: var(--text-label-sm-regular-fontSize);
13795
- line-height: var(--text-label-sm-regular-lineHeight);
13796
- color: var(--color-state-error-foreground);
13797
- margin: 0;
13959
+ .muka-accordion--contained .muka-accordion__item:last-child {
13960
+ border-bottom: none;
13798
13961
  }
13799
13962