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