@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
@@ -1661,7 +1661,9 @@ body {
1661
1661
  --card-border-hover: 0.0625rem solid #606060;
1662
1662
  --card-border-pressed: 0.125rem solid #b4b4b4;
1663
1663
  --card-border-selected: 0.125rem solid #b4b4b4;
1664
- --chatbubble-max-width: 640px;
1664
+ --chat-column-max-width: 768px;
1665
+ --chatbubble-max-width: 37rem;
1666
+ --chatbubble-max-width-ratio: 77%;
1665
1667
  --chatbubble-radius: 0px;
1666
1668
  --chatbubble-padding-block: 0.75rem;
1667
1669
  --chatbubble-padding-inline: 1rem;
@@ -2084,7 +2086,7 @@ body {
2084
2086
  --bottombar-floating-backdrop-start: transparent;
2085
2087
  --bottombar-floating-backdrop-end: rgba(0, 0, 0, 0.027);
2086
2088
  --bottombar-floating-padding-top: 2rem;
2087
- --bottombar-chat-max-width: 1024px;
2089
+ --bottombar-chat-max-width: 768px;
2088
2090
  --bottombar-chat-padding: 0.75rem;
2089
2091
  --bottombar-tab-icon-size: 24px;
2090
2092
  --bottombar-tab-gap: 0.25rem;
@@ -2887,196 +2889,6 @@ body {
2887
2889
  }
2888
2890
 
2889
2891
 
2890
- /* Toast */
2891
- /* Toast Component Styles - Using Muka Design Tokens */
2892
-
2893
- .muka-toast {
2894
- display: flex;
2895
- align-items: flex-start;
2896
- gap: var(--toast-gap);
2897
- padding: var(--toast-padding-y) var(--toast-padding-x);
2898
- border-radius: var(--toast-radius);
2899
- box-shadow: var(--toast-shadow);
2900
- min-width: var(--toast-width-min);
2901
- max-width: var(--toast-width-max);
2902
- pointer-events: auto;
2903
- animation: muka-toast-slide-in 0.2s ease-out;
2904
- }
2905
-
2906
- /* Entry animation */
2907
- @keyframes muka-toast-slide-in {
2908
- from {
2909
- opacity: 0;
2910
- transform: translateY(8px);
2911
- }
2912
- to {
2913
- opacity: 1;
2914
- transform: translateY(0);
2915
- }
2916
- }
2917
-
2918
- /* Position variants (for standalone use - typically managed by ToastProvider) */
2919
- .muka-toast--top-right,
2920
- .muka-toast--top-left,
2921
- .muka-toast--top-center,
2922
- .muka-toast--bottom-right,
2923
- .muka-toast--bottom-left,
2924
- .muka-toast--bottom-center {
2925
- position: fixed;
2926
- z-index: 9999;
2927
- }
2928
-
2929
- .muka-toast--top-right {
2930
- top: var(--spacing-4);
2931
- right: var(--spacing-4);
2932
- }
2933
-
2934
- .muka-toast--top-left {
2935
- top: var(--spacing-4);
2936
- left: var(--spacing-4);
2937
- }
2938
-
2939
- .muka-toast--top-center {
2940
- top: var(--spacing-4);
2941
- left: 50%;
2942
- transform: translateX(-50%);
2943
- }
2944
-
2945
- .muka-toast--bottom-right {
2946
- bottom: var(--spacing-4);
2947
- right: var(--spacing-4);
2948
- }
2949
-
2950
- .muka-toast--bottom-left {
2951
- bottom: var(--spacing-4);
2952
- left: var(--spacing-4);
2953
- }
2954
-
2955
- .muka-toast--bottom-center {
2956
- bottom: var(--spacing-4);
2957
- left: 50%;
2958
- transform: translateX(-50%);
2959
- }
2960
-
2961
- /* Variant: Info */
2962
- .muka-toast--info {
2963
- background-color: var(--toast-color-info-background);
2964
- color: var(--toast-color-info-foreground);
2965
- }
2966
-
2967
- .muka-toast--info .muka-toast__icon {
2968
- color: var(--toast-color-info-accent);
2969
- }
2970
-
2971
- /* Variant: Success */
2972
- .muka-toast--success {
2973
- background-color: var(--toast-color-success-background);
2974
- color: var(--toast-color-success-foreground);
2975
- }
2976
-
2977
- .muka-toast--success .muka-toast__icon {
2978
- color: var(--toast-color-success-accent);
2979
- }
2980
-
2981
- /* Variant: Warning */
2982
- .muka-toast--warning {
2983
- background-color: var(--toast-color-warning-background);
2984
- color: var(--toast-color-warning-foreground);
2985
- }
2986
-
2987
- .muka-toast--warning .muka-toast__icon {
2988
- color: var(--toast-color-warning-accent);
2989
- }
2990
-
2991
- /* Variant: Error */
2992
- .muka-toast--error {
2993
- background-color: var(--toast-color-error-background);
2994
- color: var(--toast-color-error-foreground);
2995
- }
2996
-
2997
- .muka-toast--error .muka-toast__icon {
2998
- color: var(--toast-color-error-accent);
2999
- }
3000
-
3001
- /* Icon */
3002
- .muka-toast__icon {
3003
- display: flex;
3004
- align-items: center;
3005
- justify-content: center;
3006
- flex-shrink: 0;
3007
- width: var(--toast-icon-size);
3008
- height: var(--toast-icon-size);
3009
- }
3010
-
3011
- .muka-toast__icon svg {
3012
- width: 100%;
3013
- height: 100%;
3014
- }
3015
-
3016
- /* Content */
3017
- .muka-toast__content {
3018
- flex: 1;
3019
- min-width: 0;
3020
- }
3021
-
3022
- .muka-toast__title {
3023
- font-family: var(--text-label-md-semibold-fontFamily);
3024
- font-weight: var(--text-label-md-semibold-fontWeight);
3025
- font-size: var(--text-label-md-semibold-fontSize);
3026
- line-height: var(--text-label-md-semibold-lineHeight);
3027
- margin-bottom: var(--spacing-1);
3028
- }
3029
-
3030
- .muka-toast__message {
3031
- font-family: var(--text-body-sm-regular-fontFamily);
3032
- font-weight: var(--text-body-sm-regular-fontWeight);
3033
- font-size: var(--text-body-sm-regular-fontSize);
3034
- line-height: var(--text-body-sm-regular-lineHeight);
3035
- }
3036
-
3037
- /* Action slot */
3038
- .muka-toast__action {
3039
- display: flex;
3040
- align-items: center;
3041
- flex-shrink: 0;
3042
- }
3043
-
3044
- /* Dismiss button */
3045
- .muka-toast__dismiss {
3046
- display: flex;
3047
- align-items: center;
3048
- justify-content: center;
3049
- flex-shrink: 0;
3050
- width: 24px;
3051
- height: 24px;
3052
- padding: 0;
3053
- margin: -2px -4px -2px 0;
3054
- border: none;
3055
- background: transparent;
3056
- color: inherit;
3057
- opacity: 0.7;
3058
- cursor: pointer;
3059
- border-radius: var(--border-radius-sm);
3060
- transition: opacity 0.15s ease, background-color 0.15s ease;
3061
- }
3062
-
3063
- .muka-toast__dismiss:hover {
3064
- opacity: 1;
3065
- background-color: rgba(0, 0, 0, 0.05);
3066
- }
3067
-
3068
- .muka-toast__dismiss:focus-visible {
3069
- outline: 2px solid var(--color-border-focus);
3070
- outline-offset: 2px;
3071
- opacity: 1;
3072
- }
3073
-
3074
- .muka-toast__dismiss svg {
3075
- width: 16px;
3076
- height: 16px;
3077
- }
3078
-
3079
-
3080
2892
  /* Tile */
3081
2893
  /* Tile Component Styles - Using Muka Design Tokens */
3082
2894
 
@@ -3438,45 +3250,235 @@ body {
3438
3250
  }
3439
3251
 
3440
3252
 
3441
- /* Thumbnail */
3442
- /* Thumbnail Component Styles - Using Muka Design Tokens */
3253
+ /* Toast */
3254
+ /* Toast Component Styles - Using Muka Design Tokens */
3443
3255
 
3444
- .muka-thumbnail {
3445
- position: relative;
3446
- flex-shrink: 0;
3256
+ .muka-toast {
3257
+ display: flex;
3258
+ align-items: flex-start;
3259
+ gap: var(--toast-gap);
3260
+ padding: var(--toast-padding-y) var(--toast-padding-x);
3261
+ border-radius: var(--toast-radius);
3262
+ box-shadow: var(--toast-shadow);
3263
+ min-width: var(--toast-width-min);
3264
+ max-width: var(--toast-width-max);
3265
+ pointer-events: auto;
3266
+ animation: muka-toast-slide-in 0.2s ease-out;
3447
3267
  }
3448
3268
 
3449
- /* The frame carries the border, background and shape clip. Keeping it separate
3450
- from the root lets the remove (×) button sit outside the clip (needed for the
3451
- circular/ellipse shape, whose corners would otherwise clip the button). */
3452
- .muka-thumbnail__frame {
3453
- position: absolute;
3454
- inset: 0;
3455
- overflow: hidden;
3456
- border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3457
- border-radius: var(--border-radius-lg);
3458
- background-color: var(--color-surface-level1);
3269
+ /* Entry animation */
3270
+ @keyframes muka-toast-slide-in {
3271
+ from {
3272
+ opacity: 0;
3273
+ transform: translateY(8px);
3274
+ }
3275
+ to {
3276
+ opacity: 1;
3277
+ transform: translateY(0);
3278
+ }
3459
3279
  }
3460
3280
 
3461
- /* ─── Shapes ──────────────────────────────────────────── */
3462
- .muka-thumbnail--4-3 {
3463
- width: 160px;
3464
- height: 120px;
3281
+ /* Position variants (for standalone use - typically managed by ToastProvider) */
3282
+ .muka-toast--top-right,
3283
+ .muka-toast--top-left,
3284
+ .muka-toast--top-center,
3285
+ .muka-toast--bottom-right,
3286
+ .muka-toast--bottom-left,
3287
+ .muka-toast--bottom-center {
3288
+ position: fixed;
3289
+ z-index: 9999;
3465
3290
  }
3466
3291
 
3467
- .muka-thumbnail--1-1 {
3468
- width: 120px;
3469
- height: 120px;
3292
+ .muka-toast--top-right {
3293
+ top: var(--spacing-4);
3294
+ right: var(--spacing-4);
3470
3295
  }
3471
3296
 
3472
- .muka-thumbnail--ellipse {
3473
- width: 120px;
3474
- height: 120px;
3297
+ .muka-toast--top-left {
3298
+ top: var(--spacing-4);
3299
+ left: var(--spacing-4);
3475
3300
  }
3476
3301
 
3477
- .muka-thumbnail--ellipse .muka-thumbnail__frame {
3478
- border-radius: var(--border-radius-full);
3479
- }
3302
+ .muka-toast--top-center {
3303
+ top: var(--spacing-4);
3304
+ left: 50%;
3305
+ transform: translateX(-50%);
3306
+ }
3307
+
3308
+ .muka-toast--bottom-right {
3309
+ bottom: var(--spacing-4);
3310
+ right: var(--spacing-4);
3311
+ }
3312
+
3313
+ .muka-toast--bottom-left {
3314
+ bottom: var(--spacing-4);
3315
+ left: var(--spacing-4);
3316
+ }
3317
+
3318
+ .muka-toast--bottom-center {
3319
+ bottom: var(--spacing-4);
3320
+ left: 50%;
3321
+ transform: translateX(-50%);
3322
+ }
3323
+
3324
+ /* Variant: Info */
3325
+ .muka-toast--info {
3326
+ background-color: var(--toast-color-info-background);
3327
+ color: var(--toast-color-info-foreground);
3328
+ }
3329
+
3330
+ .muka-toast--info .muka-toast__icon {
3331
+ color: var(--toast-color-info-accent);
3332
+ }
3333
+
3334
+ /* Variant: Success */
3335
+ .muka-toast--success {
3336
+ background-color: var(--toast-color-success-background);
3337
+ color: var(--toast-color-success-foreground);
3338
+ }
3339
+
3340
+ .muka-toast--success .muka-toast__icon {
3341
+ color: var(--toast-color-success-accent);
3342
+ }
3343
+
3344
+ /* Variant: Warning */
3345
+ .muka-toast--warning {
3346
+ background-color: var(--toast-color-warning-background);
3347
+ color: var(--toast-color-warning-foreground);
3348
+ }
3349
+
3350
+ .muka-toast--warning .muka-toast__icon {
3351
+ color: var(--toast-color-warning-accent);
3352
+ }
3353
+
3354
+ /* Variant: Error */
3355
+ .muka-toast--error {
3356
+ background-color: var(--toast-color-error-background);
3357
+ color: var(--toast-color-error-foreground);
3358
+ }
3359
+
3360
+ .muka-toast--error .muka-toast__icon {
3361
+ color: var(--toast-color-error-accent);
3362
+ }
3363
+
3364
+ /* Icon */
3365
+ .muka-toast__icon {
3366
+ display: flex;
3367
+ align-items: center;
3368
+ justify-content: center;
3369
+ flex-shrink: 0;
3370
+ width: var(--toast-icon-size);
3371
+ height: var(--toast-icon-size);
3372
+ }
3373
+
3374
+ .muka-toast__icon svg {
3375
+ width: 100%;
3376
+ height: 100%;
3377
+ }
3378
+
3379
+ /* Content */
3380
+ .muka-toast__content {
3381
+ flex: 1;
3382
+ min-width: 0;
3383
+ }
3384
+
3385
+ .muka-toast__title {
3386
+ font-family: var(--text-label-md-semibold-fontFamily);
3387
+ font-weight: var(--text-label-md-semibold-fontWeight);
3388
+ font-size: var(--text-label-md-semibold-fontSize);
3389
+ line-height: var(--text-label-md-semibold-lineHeight);
3390
+ margin-bottom: var(--spacing-1);
3391
+ }
3392
+
3393
+ .muka-toast__message {
3394
+ font-family: var(--text-body-sm-regular-fontFamily);
3395
+ font-weight: var(--text-body-sm-regular-fontWeight);
3396
+ font-size: var(--text-body-sm-regular-fontSize);
3397
+ line-height: var(--text-body-sm-regular-lineHeight);
3398
+ }
3399
+
3400
+ /* Action slot */
3401
+ .muka-toast__action {
3402
+ display: flex;
3403
+ align-items: center;
3404
+ flex-shrink: 0;
3405
+ }
3406
+
3407
+ /* Dismiss button */
3408
+ .muka-toast__dismiss {
3409
+ display: flex;
3410
+ align-items: center;
3411
+ justify-content: center;
3412
+ flex-shrink: 0;
3413
+ width: 24px;
3414
+ height: 24px;
3415
+ padding: 0;
3416
+ margin: -2px -4px -2px 0;
3417
+ border: none;
3418
+ background: transparent;
3419
+ color: inherit;
3420
+ opacity: 0.7;
3421
+ cursor: pointer;
3422
+ border-radius: var(--border-radius-sm);
3423
+ transition: opacity 0.15s ease, background-color 0.15s ease;
3424
+ }
3425
+
3426
+ .muka-toast__dismiss:hover {
3427
+ opacity: 1;
3428
+ background-color: rgba(0, 0, 0, 0.05);
3429
+ }
3430
+
3431
+ .muka-toast__dismiss:focus-visible {
3432
+ outline: 2px solid var(--color-border-focus);
3433
+ outline-offset: 2px;
3434
+ opacity: 1;
3435
+ }
3436
+
3437
+ .muka-toast__dismiss svg {
3438
+ width: 16px;
3439
+ height: 16px;
3440
+ }
3441
+
3442
+
3443
+ /* Thumbnail */
3444
+ /* Thumbnail Component Styles - Using Muka Design Tokens */
3445
+
3446
+ .muka-thumbnail {
3447
+ position: relative;
3448
+ flex-shrink: 0;
3449
+ }
3450
+
3451
+ /* The frame carries the border, background and shape clip. Keeping it separate
3452
+ from the root lets the remove (×) button sit outside the clip (needed for the
3453
+ circular/ellipse shape, whose corners would otherwise clip the button). */
3454
+ .muka-thumbnail__frame {
3455
+ position: absolute;
3456
+ inset: 0;
3457
+ overflow: hidden;
3458
+ border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3459
+ border-radius: var(--border-radius-lg);
3460
+ background-color: var(--color-surface-level1);
3461
+ }
3462
+
3463
+ /* ─── Shapes ──────────────────────────────────────────── */
3464
+ .muka-thumbnail--4-3 {
3465
+ width: 160px;
3466
+ height: 120px;
3467
+ }
3468
+
3469
+ .muka-thumbnail--1-1 {
3470
+ width: 120px;
3471
+ height: 120px;
3472
+ }
3473
+
3474
+ .muka-thumbnail--ellipse {
3475
+ width: 120px;
3476
+ height: 120px;
3477
+ }
3478
+
3479
+ .muka-thumbnail--ellipse .muka-thumbnail__frame {
3480
+ border-radius: var(--border-radius-full);
3481
+ }
3480
3482
 
3481
3483
  /* Image fills the frame, cropped to cover. Sits at scale(1) by default so the
3482
3484
  interactive hover zoom has a clean origin. */
@@ -3776,6 +3778,88 @@ body {
3776
3778
  }
3777
3779
 
3778
3780
 
3781
+ /* TextLink */
3782
+ /* TextLink Component Styles - Using Muka Design Tokens */
3783
+
3784
+ .muka-text-link {
3785
+ display: inline;
3786
+ cursor: pointer;
3787
+ text-decoration: underline;
3788
+ /* Nudge the rule clear of descenders; the Figma underline sits off baseline. */
3789
+ text-underline-offset: 0.2em;
3790
+ text-decoration-thickness: from-font;
3791
+ /* Rounds the focus ring's corners; the link itself has no visible box. */
3792
+ border-radius: var(--border-radius-sm);
3793
+ transition: color var(--motion-duration-micro, 0.15s) var(--motion-easing-enter, ease);
3794
+ }
3795
+
3796
+ /* ─── Sizes ───────────────────────────────────────────────
3797
+ Mirrors the body text scale so a link matches the copy it sits in. */
3798
+ .muka-text-link--sm {
3799
+ font-family: var(--text-body-sm-regular-fontFamily);
3800
+ font-weight: var(--text-body-sm-regular-fontWeight);
3801
+ font-size: var(--text-body-sm-regular-fontSize);
3802
+ line-height: var(--text-body-sm-regular-lineHeight);
3803
+ }
3804
+
3805
+ .muka-text-link--base {
3806
+ font-family: var(--text-body-base-regular-fontFamily);
3807
+ font-weight: var(--text-body-base-regular-fontWeight);
3808
+ font-size: var(--text-body-base-regular-fontSize);
3809
+ line-height: var(--text-body-base-regular-lineHeight);
3810
+ }
3811
+
3812
+ .muka-text-link--lg {
3813
+ font-family: var(--text-body-lg-regular-fontFamily);
3814
+ font-weight: var(--text-body-lg-regular-fontWeight);
3815
+ font-size: var(--text-body-lg-regular-fontSize);
3816
+ line-height: var(--text-body-lg-regular-lineHeight);
3817
+ }
3818
+
3819
+ /* ─── Variant: default (accent) ───────────────────────────
3820
+ Visited repeats the default colour on purpose: the design treats visited and
3821
+ default the same, and pinning it stops the browser's purple from showing. */
3822
+ .muka-text-link--default,
3823
+ .muka-text-link--default:visited {
3824
+ color: var(--color-text-action-default);
3825
+ }
3826
+
3827
+ .muka-text-link--default:hover,
3828
+ .muka-text-link--default:focus-visible {
3829
+ color: var(--color-text-action-hover);
3830
+ }
3831
+
3832
+ .muka-text-link--default:active {
3833
+ color: var(--color-text-action-pressed);
3834
+ }
3835
+
3836
+ /* ─── Variant: subtle (neutral) ───────────────────────────
3837
+ Hover, focus and pressed all darken to the default text colour. */
3838
+ .muka-text-link--subtle,
3839
+ .muka-text-link--subtle:visited {
3840
+ color: var(--color-text-subtle-default);
3841
+ }
3842
+
3843
+ .muka-text-link--subtle:hover,
3844
+ .muka-text-link--subtle:focus-visible,
3845
+ .muka-text-link--subtle:active {
3846
+ color: var(--color-text-default-default);
3847
+ }
3848
+
3849
+ /* ─── Focus ───────────────────────────────────────────────
3850
+ Same ring as every other focusable Muka component. */
3851
+ .muka-text-link:focus-visible {
3852
+ outline: 2px solid var(--color-border-focus);
3853
+ outline-offset: 2px;
3854
+ }
3855
+
3856
+ @media (prefers-reduced-motion: reduce) {
3857
+ .muka-text-link {
3858
+ transition: none;
3859
+ }
3860
+ }
3861
+
3862
+
3779
3863
  /* Tabs */
3780
3864
  /* Tabs Component Styles - Clean underline style tabs matching Figma */
3781
3865
 
@@ -4833,33 +4917,307 @@ body {
4833
4917
  }
4834
4918
 
4835
4919
 
4836
- /* SegmentGroup */
4837
- /* SegmentGroup Component Styles - Using Muka Design Tokens */
4920
+ /* Sheet */
4921
+ /* Sheet Component Styles */
4838
4922
 
4839
- /* Container */
4840
- .muka-segmentgroup {
4841
- display: inline-flex;
4842
- align-items: center;
4843
- gap: 0;
4844
- padding: var(--segmentgroup-container-padding);
4845
- background-color: var(--segmentgroup-container-background);
4846
- border-radius: var(--segmentgroup-container-radius);
4847
- position: relative;
4848
- transition: background-color 0.2s ease, box-shadow 0.2s ease;
4849
- }
4923
+ /* ─── Backdrop ────────────────────────────────────────── */
4850
4924
 
4851
- /* Inset shadow on container */
4852
- .muka-segmentgroup::after {
4853
- content: '';
4854
- position: absolute;
4925
+ .muka-sheet__overlay {
4926
+ position: fixed;
4855
4927
  inset: 0;
4856
- border-radius: inherit;
4857
- box-shadow: var(--segmentgroup-container-shadow);
4858
- pointer-events: none;
4928
+ background-color: var(--color-surface-backdrop);
4929
+ z-index: 50;
4859
4930
  }
4860
4931
 
4861
- /* Full width variant */
4862
- .muka-segmentgroup--full-width {
4932
+ /* ─── Surface ─────────────────────────────────────────── */
4933
+
4934
+ .muka-sheet {
4935
+ position: fixed;
4936
+ left: 0;
4937
+ right: 0;
4938
+ bottom: 0;
4939
+ z-index: 51;
4940
+
4941
+ display: flex;
4942
+ flex-direction: column;
4943
+
4944
+ max-height: 96dvh;
4945
+
4946
+ background-color: var(--color-surface-level3);
4947
+ border-top-left-radius: var(--radius-lg);
4948
+ border-top-right-radius: var(--radius-lg);
4949
+ box-shadow: var(--shadow-level5);
4950
+
4951
+ outline: none;
4952
+ }
4953
+
4954
+ /* Safe-area bottom inset for the iPhone home indicator. */
4955
+ .muka-sheet:not(.muka-sheet--no-safe-area) {
4956
+ padding-bottom: env(safe-area-inset-bottom);
4957
+ }
4958
+
4959
+ /* ─── Drag handle ─────────────────────────────────────── */
4960
+
4961
+ .muka-sheet__handle-container {
4962
+ display: flex;
4963
+ justify-content: center;
4964
+ flex-shrink: 0;
4965
+ padding: var(--spacing-3) 0;
4966
+ }
4967
+
4968
+ .muka-sheet__handle {
4969
+ width: var(--dialog-drag-handle-width);
4970
+ height: var(--dialog-drag-handle-height);
4971
+ background-color: var(--dialog-drag-handle-color);
4972
+ border-radius: var(--dialog-drag-handle-radius);
4973
+ }
4974
+
4975
+ /* ─── Body (scrollable) ───────────────────────────────── */
4976
+
4977
+ .muka-sheet__body {
4978
+ flex: 1 1 0%;
4979
+ min-height: 0;
4980
+ overflow-y: auto;
4981
+ -webkit-overflow-scrolling: touch;
4982
+ overscroll-behavior: contain;
4983
+ }
4984
+
4985
+ /* ─── Visually-hidden title (a11y) ────────────────────── */
4986
+
4987
+ .muka-sheet__sr-title {
4988
+ position: absolute;
4989
+ width: 1px;
4990
+ height: 1px;
4991
+ padding: 0;
4992
+ margin: -1px;
4993
+ overflow: hidden;
4994
+ clip: rect(0, 0, 0, 0);
4995
+ white-space: nowrap;
4996
+ border: 0;
4997
+ }
4998
+
4999
+
5000
+ /* Select */
5001
+ /* Select Component Styles - Aligned with Input for consistency */
5002
+
5003
+ .muka-select {
5004
+ display: inline-flex;
5005
+ flex-direction: column;
5006
+ gap: var(--spacing-2);
5007
+ }
5008
+
5009
+ .muka-select--full-width {
5010
+ width: 100%;
5011
+ }
5012
+
5013
+ /* Label */
5014
+ .muka-select__label {
5015
+ color: var(--color-text-default-default);
5016
+ cursor: pointer;
5017
+ }
5018
+
5019
+ .muka-select__label--sm {
5020
+ font-family: var(--text-label-sm-semibold-fontFamily);
5021
+ font-weight: var(--text-label-sm-semibold-fontWeight);
5022
+ font-size: var(--text-label-sm-semibold-fontSize);
5023
+ line-height: var(--text-label-sm-semibold-lineHeight);
5024
+ }
5025
+
5026
+ .muka-select__label--md {
5027
+ font-family: var(--text-label-md-semibold-fontFamily);
5028
+ font-weight: var(--text-label-md-semibold-fontWeight);
5029
+ font-size: var(--text-label-md-semibold-fontSize);
5030
+ line-height: var(--text-label-md-semibold-lineHeight);
5031
+ }
5032
+
5033
+ .muka-select__label--lg {
5034
+ font-family: var(--text-label-lg-semibold-fontFamily);
5035
+ font-weight: var(--text-label-lg-semibold-fontWeight);
5036
+ font-size: var(--text-label-lg-semibold-fontSize);
5037
+ line-height: var(--text-label-lg-semibold-lineHeight);
5038
+ }
5039
+
5040
+ .muka-select__required {
5041
+ color: var(--color-state-error-foreground);
5042
+ }
5043
+
5044
+ .muka-select__label--sm + .muka-select__field--disabled,
5045
+ .muka-select__label--md + .muka-select__field--disabled,
5046
+ .muka-select__label--lg + .muka-select__field--disabled {
5047
+ cursor: not-allowed;
5048
+ }
5049
+
5050
+ /* Field container — same as Input: 1px border, radius, padding, inset shadow */
5051
+ .muka-select__field {
5052
+ display: flex;
5053
+ align-items: center;
5054
+ gap: var(--spacing-2);
5055
+ position: relative;
5056
+ background-color: var(--input-field-color-default-background);
5057
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
5058
+ border-radius: var(--input-field-radius-md);
5059
+ padding: var(--input-field-padding-y) var(--input-field-padding-x);
5060
+ transition: border-color 0.2s ease, background-color 0.2s ease;
5061
+ cursor: pointer;
5062
+ box-sizing: border-box;
5063
+ }
5064
+
5065
+ /* Inset shadow — same as Input (single subtle line) */
5066
+ .muka-select__field::after {
5067
+ content: '';
5068
+ position: absolute;
5069
+ inset: 0;
5070
+ border-radius: inherit;
5071
+ box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.08);
5072
+ pointer-events: none;
5073
+ }
5074
+
5075
+ /* Size variants — same radius/height as Input */
5076
+ .muka-select__field--sm {
5077
+ min-height: var(--input-field-height-sm);
5078
+ border-radius: var(--input-field-radius-sm);
5079
+ }
5080
+
5081
+ .muka-select__field--md {
5082
+ min-height: var(--input-field-height-default);
5083
+ border-radius: var(--input-field-radius-md);
5084
+ }
5085
+
5086
+ .muka-select__field--lg {
5087
+ min-height: var(--input-field-height-lg);
5088
+ border-radius: var(--input-field-radius-lg);
5089
+ }
5090
+
5091
+ /* Hover — no visual change (same as Input) */
5092
+
5093
+ /* Focus (active) — same as Input: 2px border, padding compensation */
5094
+ .muka-select__field--focused:not(.muka-select__field--disabled) {
5095
+ border-width: var(--border-width-bold);
5096
+ border-color: var(--input-field-color-focus-border);
5097
+ background-color: var(--input-field-color-focus-background);
5098
+ padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
5099
+ }
5100
+
5101
+ /* Error — same as Input: 2px border, padding compensation */
5102
+ .muka-select__field--error:not(.muka-select__field--disabled) {
5103
+ border-width: var(--border-width-bold);
5104
+ border-color: var(--input-field-color-error-border);
5105
+ background-color: var(--input-field-color-error-background);
5106
+ padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
5107
+ }
5108
+
5109
+ /* Disabled — same as Input */
5110
+ .muka-select__field--disabled {
5111
+ background-color: var(--input-field-color-disabled-background);
5112
+ border-color: var(--input-field-color-disabled-border);
5113
+ cursor: not-allowed;
5114
+ }
5115
+
5116
+ .muka-select__field--disabled::after {
5117
+ display: none;
5118
+ }
5119
+
5120
+ /* Native select — padding on field so native has 0 + right space for chevron */
5121
+ .muka-select__native {
5122
+ appearance: none;
5123
+ -webkit-appearance: none;
5124
+ flex: 1;
5125
+ border: none;
5126
+ outline: none;
5127
+ background: transparent;
5128
+ color: var(--input-field-color-default-foreground);
5129
+ font-family: var(--text-input-md-fontFamily);
5130
+ font-weight: var(--text-input-md-fontWeight);
5131
+ font-size: var(--text-input-md-fontSize);
5132
+ line-height: var(--text-input-md-lineHeight);
5133
+ padding: 0;
5134
+ padding-right: calc(var(--input-field-padding-x) + 1.5rem);
5135
+ cursor: pointer;
5136
+ min-width: 0;
5137
+ width: 100%;
5138
+ }
5139
+
5140
+ .muka-select__field--sm .muka-select__native {
5141
+ font-family: var(--text-input-sm-fontFamily);
5142
+ font-weight: var(--text-input-sm-fontWeight);
5143
+ font-size: var(--text-input-sm-fontSize);
5144
+ line-height: var(--text-input-sm-lineHeight);
5145
+ }
5146
+
5147
+ .muka-select__field--lg .muka-select__native {
5148
+ font-family: var(--text-input-lg-fontFamily);
5149
+ font-weight: var(--text-input-lg-fontWeight);
5150
+ font-size: var(--text-input-lg-fontSize);
5151
+ line-height: var(--text-input-lg-lineHeight);
5152
+ }
5153
+
5154
+ .muka-select__field--disabled .muka-select__native {
5155
+ color: var(--input-field-color-disabled-foreground);
5156
+ cursor: not-allowed;
5157
+ }
5158
+
5159
+ /* Chevron — aligned with field padding */
5160
+ .muka-select__chevron {
5161
+ display: inline-flex;
5162
+ align-items: center;
5163
+ position: absolute;
5164
+ right: var(--input-field-padding-x);
5165
+ pointer-events: none;
5166
+ color: var(--color-text-subtle-default);
5167
+ }
5168
+
5169
+ .muka-select__field--disabled .muka-select__chevron {
5170
+ color: var(--input-field-color-disabled-foreground);
5171
+ }
5172
+
5173
+ /* Helper text — same as Input */
5174
+ .muka-select__helper {
5175
+ font-family: var(--text-label-sm-regular-fontFamily);
5176
+ font-weight: var(--text-label-sm-regular-fontWeight);
5177
+ font-size: var(--text-label-sm-regular-fontSize);
5178
+ line-height: var(--text-label-sm-regular-lineHeight);
5179
+ color: var(--color-text-subtle-default);
5180
+ margin: 0;
5181
+ }
5182
+
5183
+ /* Error message — same as Input */
5184
+ .muka-select__error {
5185
+ font-family: var(--text-label-sm-regular-fontFamily);
5186
+ font-weight: var(--text-label-sm-regular-fontWeight);
5187
+ font-size: var(--text-label-sm-regular-fontSize);
5188
+ line-height: var(--text-label-sm-regular-lineHeight);
5189
+ color: var(--color-state-error-foreground);
5190
+ margin: 0;
5191
+ }
5192
+
5193
+
5194
+ /* SegmentGroup */
5195
+ /* SegmentGroup Component Styles - Using Muka Design Tokens */
5196
+
5197
+ /* Container */
5198
+ .muka-segmentgroup {
5199
+ display: inline-flex;
5200
+ align-items: center;
5201
+ gap: 0;
5202
+ padding: var(--segmentgroup-container-padding);
5203
+ background-color: var(--segmentgroup-container-background);
5204
+ border-radius: var(--segmentgroup-container-radius);
5205
+ position: relative;
5206
+ transition: background-color 0.2s ease, box-shadow 0.2s ease;
5207
+ }
5208
+
5209
+ /* Inset shadow on container */
5210
+ .muka-segmentgroup::after {
5211
+ content: '';
5212
+ position: absolute;
5213
+ inset: 0;
5214
+ border-radius: inherit;
5215
+ box-shadow: var(--segmentgroup-container-shadow);
5216
+ pointer-events: none;
5217
+ }
5218
+
5219
+ /* Full width variant */
5220
+ .muka-segmentgroup--full-width {
4863
5221
  width: 100%;
4864
5222
  }
4865
5223
 
@@ -5004,43 +5362,20 @@ body {
5004
5362
  outline-offset: 2px;
5005
5363
  z-index: 2;
5006
5364
  }
5007
-
5008
- /* Disabled state */
5009
- .muka-segmentgroup__segment--disabled,
5010
- .muka-segmentgroup__segment:disabled {
5011
- cursor: not-allowed;
5012
- opacity: 0.5;
5013
- }
5014
-
5015
- /* Label */
5016
- .muka-segmentgroup__label {
5017
- display: inline-flex;
5018
- align-items: center;
5019
- white-space: nowrap;
5020
- user-select: none;
5021
- }
5022
-
5023
-
5024
- /* Section */
5025
- /* Section Component - Layout tokens (section.padding) */
5026
-
5027
- .muka-section {
5028
- box-sizing: border-box;
5029
- }
5030
-
5031
- .muka-section--padding-compact {
5032
- padding-block: var(--section-padding-vertical-compact);
5033
- padding-inline: var(--section-padding-horizontal-compact);
5034
- }
5035
-
5036
- .muka-section--padding-default {
5037
- padding-block: var(--section-padding-vertical-default);
5038
- padding-inline: var(--section-padding-horizontal-default);
5365
+
5366
+ /* Disabled state */
5367
+ .muka-segmentgroup__segment--disabled,
5368
+ .muka-segmentgroup__segment:disabled {
5369
+ cursor: not-allowed;
5370
+ opacity: 0.5;
5039
5371
  }
5040
5372
 
5041
- .muka-section--padding-spacious {
5042
- padding-block: var(--section-padding-vertical-spacious);
5043
- padding-inline: var(--section-padding-horizontal-spacious);
5373
+ /* Label */
5374
+ .muka-segmentgroup__label {
5375
+ display: inline-flex;
5376
+ align-items: center;
5377
+ white-space: nowrap;
5378
+ user-select: none;
5044
5379
  }
5045
5380
 
5046
5381
 
@@ -5213,6 +5548,29 @@ body {
5213
5548
  }
5214
5549
 
5215
5550
 
5551
+ /* Section */
5552
+ /* Section Component - Layout tokens (section.padding) */
5553
+
5554
+ .muka-section {
5555
+ box-sizing: border-box;
5556
+ }
5557
+
5558
+ .muka-section--padding-compact {
5559
+ padding-block: var(--section-padding-vertical-compact);
5560
+ padding-inline: var(--section-padding-horizontal-compact);
5561
+ }
5562
+
5563
+ .muka-section--padding-default {
5564
+ padding-block: var(--section-padding-vertical-default);
5565
+ padding-inline: var(--section-padding-horizontal-default);
5566
+ }
5567
+
5568
+ .muka-section--padding-spacious {
5569
+ padding-block: var(--section-padding-vertical-spacious);
5570
+ padding-inline: var(--section-padding-horizontal-spacious);
5571
+ }
5572
+
5573
+
5216
5574
  /* RangeSlider */
5217
5575
  /* RangeSlider Component Styles - Using Muka Design Tokens */
5218
5576
 
@@ -9846,6 +10204,19 @@ li.muka-listitem {
9846
10204
  /* Combobox */
9847
10205
  /* Combobox Component Styles */
9848
10206
 
10207
+ /* ─── Trigger group (positioning context for the trailing controls) ── */
10208
+
10209
+ /*
10210
+ * The clear control is a sibling of the trigger, not a child (a <button> may
10211
+ * not contain interactive content), so it is overlaid on the trigger's trailing
10212
+ * padding. The trigger reserves that space with padding-right below.
10213
+ */
10214
+ .muka-combobox__trigger-group {
10215
+ position: relative;
10216
+ display: block;
10217
+ width: 100%;
10218
+ }
10219
+
9849
10220
  /* ─── Trigger (looks like an Input field, behaves like a button) ── */
9850
10221
 
9851
10222
  .muka-combobox {
@@ -9853,7 +10224,7 @@ li.muka-listitem {
9853
10224
  align-items: center;
9854
10225
  gap: var(--spacing-2);
9855
10226
  width: 100%;
9856
- padding: 0 var(--input-field-padding-x);
10227
+ padding: 0 var(--muka-combobox-trailing-space) 0 var(--input-field-padding-x);
9857
10228
  background-color: var(--input-field-color-default-background);
9858
10229
  border: var(--border-width-regular) solid var(--input-field-color-default-border);
9859
10230
  color: var(--color-text-default-default);
@@ -9865,6 +10236,19 @@ li.muka-listitem {
9865
10236
  line-height: var(--text-body-md-regular-lineHeight);
9866
10237
  -webkit-tap-highlight-color: transparent;
9867
10238
  transition: border-color 0.12s ease;
10239
+
10240
+ /* Room for the chevron overlaid on the trailing edge. */
10241
+ --muka-combobox-trailing-space: calc(
10242
+ var(--input-field-padding-x) + var(--icon-size-sm) + var(--spacing-2)
10243
+ );
10244
+ }
10245
+
10246
+ /* …and for the clear button next to it, when one is rendered. */
10247
+ .muka-combobox--clearable {
10248
+ --muka-combobox-trailing-space: calc(
10249
+ var(--input-field-padding-x) + var(--icon-size-sm) + var(--spacing-2) +
10250
+ var(--icon-size-xs) + var(--spacing-1) * 2 + var(--spacing-2)
10251
+ );
9868
10252
  }
9869
10253
 
9870
10254
  .muka-combobox--sm {
@@ -9917,6 +10301,23 @@ li.muka-listitem {
9917
10301
  text-overflow: ellipsis;
9918
10302
  }
9919
10303
 
10304
+ /* ─── Trailing controls (clear + chevron) ─────────────── */
10305
+
10306
+ .muka-combobox__actions {
10307
+ position: absolute;
10308
+ top: 0;
10309
+ right: var(--input-field-padding-x);
10310
+ height: 100%;
10311
+ display: flex;
10312
+ align-items: center;
10313
+ gap: var(--spacing-2);
10314
+ /*
10315
+ * The strip sits on top of the trigger, so it must not swallow taps meant to
10316
+ * open the picker. Only the clear button takes pointer events back.
10317
+ */
10318
+ pointer-events: none;
10319
+ }
10320
+
9920
10321
  .muka-combobox__clear,
9921
10322
  .muka-combobox__chevron {
9922
10323
  display: inline-flex;
@@ -9927,9 +10328,13 @@ li.muka-listitem {
9927
10328
  }
9928
10329
 
9929
10330
  .muka-combobox__clear {
10331
+ pointer-events: auto;
9930
10332
  cursor: pointer;
9931
10333
  padding: var(--spacing-1);
10334
+ border: none;
10335
+ background: none;
9932
10336
  border-radius: var(--radius-sm);
10337
+ -webkit-tap-highlight-color: transparent;
9933
10338
  }
9934
10339
 
9935
10340
  .muka-combobox__clear:hover {
@@ -9937,6 +10342,17 @@ li.muka-listitem {
9937
10342
  background-color: var(--color-surface-level1);
9938
10343
  }
9939
10344
 
10345
+ .muka-combobox__clear:focus-visible {
10346
+ outline: 2px solid var(--color-border-focus);
10347
+ outline-offset: 2px;
10348
+ color: var(--color-text-default-default);
10349
+ }
10350
+
10351
+ .muka-combobox--disabled ~ .muka-combobox__actions,
10352
+ .muka-combobox:disabled ~ .muka-combobox__actions {
10353
+ opacity: 0.5;
10354
+ }
10355
+
9940
10356
  /* ─── Picker sheet body ───────────────────────────────── */
9941
10357
 
9942
10358
  .muka-combobox__picker {
@@ -10746,7 +11162,7 @@ button.muka-chat-photo-grid__tile:focus-visible {
10746
11162
  align-items: stretch;
10747
11163
  gap: var(--spacing-8);
10748
11164
  width: 100%;
10749
- max-width: var(--container-max-width-sm);
11165
+ max-width: var(--chat-column-max-width);
10750
11166
  margin: 0 auto;
10751
11167
  }
10752
11168
 
@@ -10832,7 +11248,13 @@ button.muka-chat-photo-grid__tile:focus-visible {
10832
11248
  * no length measuring needed (Figma `Text length` on 5355:44091).
10833
11249
  */
10834
11250
  width: fit-content;
10835
- max-width: var(--chatbubble-max-width);
11251
+ /*
11252
+ * Stops short of the far edge at every width: the fixed cap once the
11253
+ * conversation column reaches its own cap, the ratio below that, where the
11254
+ * column runs full-bleed. Without that gap a long `own` bubble spans the
11255
+ * column and reads no differently from a `peer` one.
11256
+ */
11257
+ max-width: min(var(--chatbubble-max-width), var(--chatbubble-max-width-ratio));
10836
11258
  position: relative;
10837
11259
  display: flex;
10838
11260
  flex-direction: column;
@@ -11955,19 +12377,34 @@ button.muka-chat-photo-grid__tile:focus-visible {
11955
12377
 
11956
12378
  .muka-bottombar--chat .muka-bottombar__content {
11957
12379
  flex-direction: row;
11958
- max-width: var(--bottombar-chat-max-width);
11959
12380
  width: 100%;
11960
12381
  margin: 0 auto;
11961
12382
  }
11962
12383
 
11963
- /* Docked chat pads its content; the floating card supplies its own padding. */
12384
+ /*
12385
+ * `--bottombar-chat-max-width` is the conversation column (it derives from
12386
+ * `chat.column.max-width`, the same token `ChatMessageList` caps its column
12387
+ * with). The cap here carries the padding on top of it, so it is the
12388
+ * composer's own edges — not the padding around it — that land on the column.
12389
+ */
12390
+
12391
+ /*
12392
+ * Docked chat pads its content; the floating card supplies its own padding.
12393
+ * The inline half is the section gutter `ChatMessageList` pads its scroller
12394
+ * with, so below the cap — where the column runs full-bleed — the composer
12395
+ * keeps to the same gutters as the messages.
12396
+ */
11964
12397
  .muka-bottombar--chat:not(.muka-bottombar--floating) .muka-bottombar__content {
11965
- padding: var(--bottombar-chat-padding);
12398
+ padding: var(--bottombar-chat-padding)
12399
+ var(--section-padding-horizontal-default, var(--spacing-4));
12400
+ max-width: calc(
12401
+ var(--bottombar-chat-max-width) + 2 * var(--section-padding-horizontal-default, var(--spacing-4))
12402
+ );
11966
12403
  }
11967
12404
 
11968
12405
  /* Floating chat card widens to the chat cap (overrides the md default below). */
11969
12406
  .muka-bottombar--chat.muka-bottombar--floating .muka-bottombar__content {
11970
- max-width: var(--bottombar-chat-max-width);
12407
+ max-width: calc(var(--bottombar-chat-max-width) + 2 * var(--bottombar-floating-padding));
11971
12408
  }
11972
12409
 
11973
12410
  /* ─── Tab item ────────────────────────────────────────── */
@@ -13036,185 +13473,16 @@ button.muka-chat-photo-grid__tile:focus-visible {
13036
13473
  .muka-alert__dismiss:hover {
13037
13474
  opacity: 0.85;
13038
13475
  background-color: rgba(0, 0, 0, 0.05);
13039
- }
13040
-
13041
- .muka-alert__dismiss:focus-visible {
13042
- outline: 2px solid var(--color-border-focus);
13043
- outline-offset: 2px;
13044
- }
13045
-
13046
- .muka-alert__dismiss svg {
13047
- width: 16px;
13048
- height: 16px;
13049
- }
13050
-
13051
-
13052
- /* AgentTaskList */
13053
- /* AgentTaskList Component Styles */
13054
-
13055
- .muka-agent-task-list {
13056
- display: flex;
13057
- flex-direction: column;
13058
- gap: var(--spacing-2);
13059
- width: 100%;
13060
- padding: 0 var(--spacing-2);
13061
- }
13062
-
13063
- /* ─── Header ───────────────────────────────────────────── */
13064
-
13065
- .muka-agent-task-list__header {
13066
- display: inline-flex;
13067
- align-items: center;
13068
- gap: var(--spacing-3);
13069
- background: none;
13070
- border: none;
13071
- padding: 0;
13072
- margin: 0;
13073
- cursor: pointer;
13074
- color: var(--color-text-subtle-default);
13075
- font-family: var(--text-body-sm-regular-fontFamily);
13076
- font-weight: var(--text-body-sm-regular-fontWeight);
13077
- font-size: var(--text-body-sm-regular-fontSize);
13078
- line-height: var(--text-body-sm-regular-lineHeight);
13079
- text-align: left;
13080
- -webkit-tap-highlight-color: transparent;
13081
- }
13082
-
13083
- .muka-agent-task-list--open .muka-agent-task-list__header {
13084
- font-family: var(--text-body-sm-bold-fontFamily);
13085
- font-weight: var(--text-body-sm-bold-fontWeight);
13086
- font-size: var(--text-body-sm-bold-fontSize);
13087
- line-height: var(--text-body-sm-bold-lineHeight);
13088
- }
13089
-
13090
- .muka-agent-task-list__header:focus-visible {
13091
- outline: 2px solid var(--color-action-default);
13092
- outline-offset: 2px;
13093
- border-radius: var(--radius-sm);
13094
- }
13095
-
13096
- .muka-agent-task-list__title {
13097
- text-align: left;
13098
- }
13099
-
13100
- .muka-agent-task-list__chevron {
13101
- display: inline-flex;
13102
- align-items: center;
13103
- justify-content: center;
13104
- transition: transform 0.16s ease;
13105
- color: var(--color-text-subtle-default);
13106
- }
13107
-
13108
- .muka-agent-task-list__chevron[data-open='false'] {
13109
- transform: rotate(-90deg);
13110
- }
13111
-
13112
- /* ─── Task list ────────────────────────────────────────── */
13113
-
13114
- .muka-agent-task-list__tasks {
13115
- list-style: none;
13116
- padding: 0;
13117
- margin: 0;
13118
- display: flex;
13119
- flex-direction: column;
13120
- }
13121
-
13122
- /* ─── Single task row ──────────────────────────────────── */
13123
-
13124
- .muka-agent-task-list__task {
13125
- display: flex;
13126
- align-items: stretch;
13127
- gap: var(--spacing-4);
13128
- min-height: 32px;
13129
- padding: 0;
13130
- }
13131
-
13132
- /* ─── Bullet column (icon + timeline connector) ────────── */
13133
-
13134
- .muka-agent-task-list__bullet {
13135
- position: relative;
13136
- flex-shrink: 0;
13137
- width: 16px;
13138
- align-self: stretch;
13139
- }
13140
-
13141
- .muka-agent-task-list__line {
13142
- position: absolute;
13143
- left: 7px;
13144
- width: 1px;
13145
- background-color: var(--color-border-default);
13146
- }
13147
-
13148
- .muka-agent-task-list__line--top {
13149
- top: 0;
13150
- height: 6px;
13151
- }
13152
-
13153
- .muka-agent-task-list__line--bottom {
13154
- top: 32px;
13155
- bottom: 0;
13156
- }
13157
-
13158
- .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13159
- display: none;
13160
- }
13161
-
13162
- .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13163
- display: none;
13164
- }
13165
-
13166
- .muka-agent-task-list__icon {
13167
- position: absolute;
13168
- top: 8px;
13169
- left: 0;
13170
- width: 16px;
13171
- height: 16px;
13172
- display: inline-flex;
13173
- align-items: center;
13174
- justify-content: center;
13175
- color: var(--color-text-subtle-default);
13176
- z-index: 1;
13177
- }
13178
-
13179
- /* ─── State color treatments ───────────────────────────── */
13180
-
13181
- .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13182
- color: var(--color-action-default);
13183
- }
13184
-
13185
- .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13186
- color: var(--color-text-subtle-default);
13187
- }
13188
-
13189
- .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13190
- color: var(--color-text-muted-default, var(--color-text-subtle-default));
13191
- opacity: 0.6;
13192
- }
13193
-
13194
- /* ─── Label ────────────────────────────────────────────── */
13195
-
13196
- .muka-agent-task-list__label {
13197
- flex: 1 1 0;
13198
- min-width: 0;
13199
- padding: var(--spacing-2) 0;
13200
- color: var(--color-text-subtle-default);
13201
- font-family: var(--text-body-sm-regular-fontFamily);
13202
- font-weight: var(--text-body-sm-regular-fontWeight);
13203
- font-size: var(--text-body-sm-regular-fontSize);
13204
- line-height: var(--text-body-sm-regular-lineHeight);
13205
- word-break: break-word;
13206
- }
13207
-
13208
- /* ─── Print ────────────────────────────────────────────── */
13476
+ }
13209
13477
 
13210
- @media print {
13211
- .muka-agent-task-list {
13212
- break-inside: avoid;
13213
- }
13478
+ .muka-alert__dismiss:focus-visible {
13479
+ outline: 2px solid var(--color-border-focus);
13480
+ outline-offset: 2px;
13481
+ }
13214
13482
 
13215
- .muka-agent-task-list__chevron {
13216
- display: none;
13217
- }
13483
+ .muka-alert__dismiss svg {
13484
+ width: 16px;
13485
+ height: 16px;
13218
13486
  }
13219
13487
 
13220
13488
 
@@ -13360,407 +13628,302 @@ button.muka-chat-photo-grid__tile:focus-visible {
13360
13628
  }
13361
13629
 
13362
13630
 
13363
- /* Accordion */
13364
- /* Accordion Component Styles */
13631
+ /* AgentTaskList */
13632
+ /* AgentTaskList Component Styles */
13365
13633
 
13366
- .muka-accordion {
13634
+ .muka-agent-task-list {
13635
+ display: flex;
13636
+ flex-direction: column;
13637
+ gap: var(--spacing-2);
13367
13638
  width: 100%;
13639
+ padding: 0 var(--spacing-2);
13368
13640
  }
13369
13641
 
13370
- /* Item */
13371
- .muka-accordion__item {
13372
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
13373
- }
13374
-
13375
- .muka-accordion__item:last-child {
13376
- border-bottom: none;
13377
- }
13378
-
13379
- /* Header reset */
13380
- .muka-accordion__header {
13381
- margin: 0;
13382
- }
13642
+ /* ─── Header ───────────────────────────────────────────── */
13383
13643
 
13384
- /* Trigger */
13385
- .muka-accordion__trigger {
13386
- display: flex;
13644
+ .muka-agent-task-list__header {
13645
+ display: inline-flex;
13387
13646
  align-items: center;
13388
- justify-content: space-between;
13389
- width: 100%;
13390
- padding: var(--spacing-4);
13647
+ gap: var(--spacing-3);
13391
13648
  background: none;
13392
13649
  border: none;
13650
+ padding: 0;
13651
+ margin: 0;
13393
13652
  cursor: pointer;
13394
- font-family: var(--text-label-md-semibold-fontFamily);
13395
- font-weight: var(--text-label-md-semibold-fontWeight);
13396
- font-size: var(--text-label-md-semibold-fontSize);
13397
- line-height: var(--text-label-md-semibold-lineHeight);
13398
- color: var(--color-text-default-default);
13653
+ color: var(--color-text-subtle-default);
13654
+ font-family: var(--text-body-sm-regular-fontFamily);
13655
+ font-weight: var(--text-body-sm-regular-fontWeight);
13656
+ font-size: var(--text-body-sm-regular-fontSize);
13657
+ line-height: var(--text-body-sm-regular-lineHeight);
13399
13658
  text-align: left;
13400
- gap: var(--spacing-3);
13401
- transition: background-color 0.15s ease;
13659
+ -webkit-tap-highlight-color: transparent;
13402
13660
  }
13403
13661
 
13404
- .muka-accordion__trigger:hover {
13405
- background-color: var(--color-surface-level1);
13662
+ .muka-agent-task-list--open .muka-agent-task-list__header {
13663
+ font-family: var(--text-body-sm-bold-fontFamily);
13664
+ font-weight: var(--text-body-sm-bold-fontWeight);
13665
+ font-size: var(--text-body-sm-bold-fontSize);
13666
+ line-height: var(--text-body-sm-bold-lineHeight);
13406
13667
  }
13407
13668
 
13408
- .muka-accordion__trigger[data-disabled] {
13409
- cursor: not-allowed;
13410
- opacity: 0.4;
13669
+ .muka-agent-task-list__header:focus-visible {
13670
+ outline: 2px solid var(--color-action-default);
13671
+ outline-offset: 2px;
13672
+ border-radius: var(--radius-sm);
13411
13673
  }
13412
13674
 
13413
- .muka-accordion__trigger-text {
13414
- flex: 1;
13675
+ .muka-agent-task-list__title {
13676
+ text-align: left;
13415
13677
  }
13416
13678
 
13417
- /* Chevron rotation */
13418
- .muka-accordion__chevron {
13679
+ .muka-agent-task-list__chevron {
13419
13680
  display: inline-flex;
13420
13681
  align-items: center;
13682
+ justify-content: center;
13683
+ transition: transform 0.16s ease;
13421
13684
  color: var(--color-text-subtle-default);
13422
- transition: transform 200ms ease;
13423
- }
13424
-
13425
- .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13426
- transform: rotate(180deg);
13427
- }
13428
-
13429
- /* Content */
13430
- .muka-accordion__content {
13431
- overflow: hidden;
13432
13685
  }
13433
13686
 
13434
- .muka-accordion__content[data-state='open'] {
13435
- animation: muka-accordion-slideDown 200ms ease;
13436
- }
13437
-
13438
- .muka-accordion__content[data-state='closed'] {
13439
- animation: muka-accordion-slideUp 200ms ease;
13440
- }
13441
-
13442
- @keyframes muka-accordion-slideDown {
13443
- from {
13444
- height: 0;
13445
- }
13446
- to {
13447
- height: var(--radix-accordion-content-height);
13448
- }
13687
+ .muka-agent-task-list__chevron[data-open='false'] {
13688
+ transform: rotate(-90deg);
13449
13689
  }
13450
13690
 
13451
- @keyframes muka-accordion-slideUp {
13452
- from {
13453
- height: var(--radix-accordion-content-height);
13454
- }
13455
- to {
13456
- height: 0;
13457
- }
13458
- }
13691
+ /* ─── Task list ────────────────────────────────────────── */
13459
13692
 
13460
- .muka-accordion__content-inner {
13461
- padding: 0 var(--spacing-4) var(--spacing-5);
13462
- color: var(--color-text-default-default);
13693
+ .muka-agent-task-list__tasks {
13694
+ list-style: none;
13695
+ padding: 0;
13696
+ margin: 0;
13697
+ display: flex;
13698
+ flex-direction: column;
13463
13699
  }
13464
13700
 
13465
- /* ─── Variant: flush ────────────────────────────────────────────────────── */
13466
-
13467
- .muka-accordion--flush .muka-accordion__trigger {
13468
- padding-left: 0;
13469
- padding-right: 0;
13470
- }
13701
+ /* ─── Single task row ──────────────────────────────────── */
13471
13702
 
13472
- .muka-accordion--flush .muka-accordion__content-inner {
13473
- padding-left: 0;
13474
- padding-right: 0;
13703
+ .muka-agent-task-list__task {
13704
+ display: flex;
13705
+ align-items: stretch;
13706
+ gap: var(--spacing-4);
13707
+ min-height: 32px;
13708
+ padding: 0;
13475
13709
  }
13476
13710
 
13477
- /* ─── Variant: contained ────────────────────────────────────────────────── */
13478
-
13479
- .muka-accordion--contained {
13480
- border: var(--border-width-regular) solid var(--color-border-default);
13481
- border-radius: var(--radius-md);
13482
- overflow: hidden;
13483
- }
13711
+ /* ─── Bullet column (icon + timeline connector) ────────── */
13484
13712
 
13485
- .muka-accordion--contained .muka-accordion__item {
13486
- background-color: var(--color-surface-level3);
13713
+ .muka-agent-task-list__bullet {
13714
+ position: relative;
13715
+ flex-shrink: 0;
13716
+ width: 16px;
13717
+ align-self: stretch;
13487
13718
  }
13488
13719
 
13489
- .muka-accordion--contained .muka-accordion__item:last-child {
13490
- border-bottom: none;
13720
+ .muka-agent-task-list__line {
13721
+ position: absolute;
13722
+ left: 7px;
13723
+ width: 1px;
13724
+ background-color: var(--color-border-default);
13491
13725
  }
13492
13726
 
13493
-
13494
- /* Sheet */
13495
- /* Sheet Component Styles */
13496
-
13497
- /* ─── Backdrop ────────────────────────────────────────── */
13498
-
13499
- .muka-sheet__overlay {
13500
- position: fixed;
13501
- inset: 0;
13502
- background-color: var(--color-surface-backdrop);
13503
- z-index: 50;
13727
+ .muka-agent-task-list__line--top {
13728
+ top: 0;
13729
+ height: 6px;
13504
13730
  }
13505
13731
 
13506
- /* ─── Surface ─────────────────────────────────────────── */
13507
-
13508
- .muka-sheet {
13509
- position: fixed;
13510
- left: 0;
13511
- right: 0;
13732
+ .muka-agent-task-list__line--bottom {
13733
+ top: 32px;
13512
13734
  bottom: 0;
13513
- z-index: 51;
13514
-
13515
- display: flex;
13516
- flex-direction: column;
13517
-
13518
- max-height: 96dvh;
13519
-
13520
- background-color: var(--color-surface-level3);
13521
- border-top-left-radius: var(--radius-lg);
13522
- border-top-right-radius: var(--radius-lg);
13523
- box-shadow: var(--shadow-level5);
13524
-
13525
- outline: none;
13526
- }
13527
-
13528
- /* Safe-area bottom inset for the iPhone home indicator. */
13529
- .muka-sheet:not(.muka-sheet--no-safe-area) {
13530
- padding-bottom: env(safe-area-inset-bottom);
13531
- }
13532
-
13533
- /* ─── Drag handle ─────────────────────────────────────── */
13534
-
13535
- .muka-sheet__handle-container {
13536
- display: flex;
13537
- justify-content: center;
13538
- flex-shrink: 0;
13539
- padding: var(--spacing-3) 0;
13540
13735
  }
13541
13736
 
13542
- .muka-sheet__handle {
13543
- width: var(--dialog-drag-handle-width);
13544
- height: var(--dialog-drag-handle-height);
13545
- background-color: var(--dialog-drag-handle-color);
13546
- border-radius: var(--dialog-drag-handle-radius);
13737
+ .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13738
+ display: none;
13547
13739
  }
13548
13740
 
13549
- /* ─── Body (scrollable) ───────────────────────────────── */
13550
-
13551
- .muka-sheet__body {
13552
- flex: 1 1 0%;
13553
- min-height: 0;
13554
- overflow-y: auto;
13555
- -webkit-overflow-scrolling: touch;
13556
- overscroll-behavior: contain;
13741
+ .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13742
+ display: none;
13557
13743
  }
13558
13744
 
13559
- /* ─── Visually-hidden title (a11y) ────────────────────── */
13560
-
13561
- .muka-sheet__sr-title {
13745
+ .muka-agent-task-list__icon {
13562
13746
  position: absolute;
13563
- width: 1px;
13564
- height: 1px;
13565
- padding: 0;
13566
- margin: -1px;
13567
- overflow: hidden;
13568
- clip: rect(0, 0, 0, 0);
13569
- white-space: nowrap;
13570
- border: 0;
13747
+ top: 8px;
13748
+ left: 0;
13749
+ width: 16px;
13750
+ height: 16px;
13751
+ display: inline-flex;
13752
+ align-items: center;
13753
+ justify-content: center;
13754
+ color: var(--color-text-subtle-default);
13755
+ z-index: 1;
13571
13756
  }
13572
13757
 
13758
+ /* ─── State color treatments ───────────────────────────── */
13573
13759
 
13574
- /* Select */
13575
- /* Select Component Styles - Aligned with Input for consistency */
13760
+ .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13761
+ color: var(--color-action-default);
13762
+ }
13576
13763
 
13577
- .muka-select {
13578
- display: inline-flex;
13579
- flex-direction: column;
13580
- gap: var(--spacing-2);
13764
+ .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13765
+ color: var(--color-text-subtle-default);
13581
13766
  }
13582
13767
 
13583
- .muka-select--full-width {
13584
- width: 100%;
13768
+ .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13769
+ color: var(--color-text-muted-default, var(--color-text-subtle-default));
13770
+ opacity: 0.6;
13585
13771
  }
13586
13772
 
13587
- /* Label */
13588
- .muka-select__label {
13589
- color: var(--color-text-default-default);
13590
- cursor: pointer;
13773
+ /* ─── Label ────────────────────────────────────────────── */
13774
+
13775
+ .muka-agent-task-list__label {
13776
+ flex: 1 1 0;
13777
+ min-width: 0;
13778
+ padding: var(--spacing-2) 0;
13779
+ color: var(--color-text-subtle-default);
13780
+ font-family: var(--text-body-sm-regular-fontFamily);
13781
+ font-weight: var(--text-body-sm-regular-fontWeight);
13782
+ font-size: var(--text-body-sm-regular-fontSize);
13783
+ line-height: var(--text-body-sm-regular-lineHeight);
13784
+ word-break: break-word;
13591
13785
  }
13592
13786
 
13593
- .muka-select__label--sm {
13594
- font-family: var(--text-label-sm-semibold-fontFamily);
13595
- font-weight: var(--text-label-sm-semibold-fontWeight);
13596
- font-size: var(--text-label-sm-semibold-fontSize);
13597
- line-height: var(--text-label-sm-semibold-lineHeight);
13787
+ /* ─── Print ────────────────────────────────────────────── */
13788
+
13789
+ @media print {
13790
+ .muka-agent-task-list {
13791
+ break-inside: avoid;
13792
+ }
13793
+
13794
+ .muka-agent-task-list__chevron {
13795
+ display: none;
13796
+ }
13598
13797
  }
13599
13798
 
13600
- .muka-select__label--md {
13601
- font-family: var(--text-label-md-semibold-fontFamily);
13602
- font-weight: var(--text-label-md-semibold-fontWeight);
13603
- font-size: var(--text-label-md-semibold-fontSize);
13604
- line-height: var(--text-label-md-semibold-lineHeight);
13799
+
13800
+ /* Accordion */
13801
+ /* Accordion Component Styles */
13802
+
13803
+ .muka-accordion {
13804
+ width: 100%;
13605
13805
  }
13606
13806
 
13607
- .muka-select__label--lg {
13608
- font-family: var(--text-label-lg-semibold-fontFamily);
13609
- font-weight: var(--text-label-lg-semibold-fontWeight);
13610
- font-size: var(--text-label-lg-semibold-fontSize);
13611
- line-height: var(--text-label-lg-semibold-lineHeight);
13807
+ /* Item */
13808
+ .muka-accordion__item {
13809
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
13612
13810
  }
13613
13811
 
13614
- .muka-select__required {
13615
- color: var(--color-state-error-foreground);
13812
+ .muka-accordion__item:last-child {
13813
+ border-bottom: none;
13616
13814
  }
13617
13815
 
13618
- .muka-select__label--sm + .muka-select__field--disabled,
13619
- .muka-select__label--md + .muka-select__field--disabled,
13620
- .muka-select__label--lg + .muka-select__field--disabled {
13621
- cursor: not-allowed;
13816
+ /* Header reset */
13817
+ .muka-accordion__header {
13818
+ margin: 0;
13622
13819
  }
13623
13820
 
13624
- /* Field container — same as Input: 1px border, radius, padding, inset shadow */
13625
- .muka-select__field {
13821
+ /* Trigger */
13822
+ .muka-accordion__trigger {
13626
13823
  display: flex;
13627
13824
  align-items: center;
13628
- gap: var(--spacing-2);
13629
- position: relative;
13630
- background-color: var(--input-field-color-default-background);
13631
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
13632
- border-radius: var(--input-field-radius-md);
13633
- padding: var(--input-field-padding-y) var(--input-field-padding-x);
13634
- transition: border-color 0.2s ease, background-color 0.2s ease;
13825
+ justify-content: space-between;
13826
+ width: 100%;
13827
+ padding: var(--spacing-4);
13828
+ background: none;
13829
+ border: none;
13635
13830
  cursor: pointer;
13636
- box-sizing: border-box;
13831
+ font-family: var(--text-label-md-semibold-fontFamily);
13832
+ font-weight: var(--text-label-md-semibold-fontWeight);
13833
+ font-size: var(--text-label-md-semibold-fontSize);
13834
+ line-height: var(--text-label-md-semibold-lineHeight);
13835
+ color: var(--color-text-default-default);
13836
+ text-align: left;
13837
+ gap: var(--spacing-3);
13838
+ transition: background-color 0.15s ease;
13637
13839
  }
13638
13840
 
13639
- /* Inset shadow — same as Input (single subtle line) */
13640
- .muka-select__field::after {
13641
- content: '';
13642
- position: absolute;
13643
- inset: 0;
13644
- border-radius: inherit;
13645
- box-shadow: inset 0 1px 2px 0 rgba(26, 26, 26, 0.08);
13646
- pointer-events: none;
13841
+ .muka-accordion__trigger:hover {
13842
+ background-color: var(--color-surface-level1);
13647
13843
  }
13648
13844
 
13649
- /* Size variants — same radius/height as Input */
13650
- .muka-select__field--sm {
13651
- min-height: var(--input-field-height-sm);
13652
- border-radius: var(--input-field-radius-sm);
13845
+ .muka-accordion__trigger[data-disabled] {
13846
+ cursor: not-allowed;
13847
+ opacity: 0.4;
13653
13848
  }
13654
13849
 
13655
- .muka-select__field--md {
13656
- min-height: var(--input-field-height-default);
13657
- border-radius: var(--input-field-radius-md);
13850
+ .muka-accordion__trigger-text {
13851
+ flex: 1;
13658
13852
  }
13659
13853
 
13660
- .muka-select__field--lg {
13661
- min-height: var(--input-field-height-lg);
13662
- border-radius: var(--input-field-radius-lg);
13854
+ /* Chevron rotation */
13855
+ .muka-accordion__chevron {
13856
+ display: inline-flex;
13857
+ align-items: center;
13858
+ color: var(--color-text-subtle-default);
13859
+ transition: transform 200ms ease;
13663
13860
  }
13664
13861
 
13665
- /* Hover — no visual change (same as Input) */
13666
-
13667
- /* Focus (active) — same as Input: 2px border, padding compensation */
13668
- .muka-select__field--focused:not(.muka-select__field--disabled) {
13669
- border-width: var(--border-width-bold);
13670
- border-color: var(--input-field-color-focus-border);
13671
- background-color: var(--input-field-color-focus-background);
13672
- padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
13862
+ .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13863
+ transform: rotate(180deg);
13673
13864
  }
13674
13865
 
13675
- /* Error — same as Input: 2px border, padding compensation */
13676
- .muka-select__field--error:not(.muka-select__field--disabled) {
13677
- border-width: var(--border-width-bold);
13678
- border-color: var(--input-field-color-error-border);
13679
- background-color: var(--input-field-color-error-background);
13680
- padding: calc(var(--input-field-padding-y) - 1px) calc(var(--input-field-padding-x) - 1px);
13866
+ /* Content */
13867
+ .muka-accordion__content {
13868
+ overflow: hidden;
13681
13869
  }
13682
13870
 
13683
- /* Disabled — same as Input */
13684
- .muka-select__field--disabled {
13685
- background-color: var(--input-field-color-disabled-background);
13686
- border-color: var(--input-field-color-disabled-border);
13687
- cursor: not-allowed;
13871
+ .muka-accordion__content[data-state='open'] {
13872
+ animation: muka-accordion-slideDown 200ms ease;
13688
13873
  }
13689
13874
 
13690
- .muka-select__field--disabled::after {
13691
- display: none;
13875
+ .muka-accordion__content[data-state='closed'] {
13876
+ animation: muka-accordion-slideUp 200ms ease;
13692
13877
  }
13693
13878
 
13694
- /* Native select — padding on field so native has 0 + right space for chevron */
13695
- .muka-select__native {
13696
- appearance: none;
13697
- -webkit-appearance: none;
13698
- flex: 1;
13699
- border: none;
13700
- outline: none;
13701
- background: transparent;
13702
- color: var(--input-field-color-default-foreground);
13703
- font-family: var(--text-input-md-fontFamily);
13704
- font-weight: var(--text-input-md-fontWeight);
13705
- font-size: var(--text-input-md-fontSize);
13706
- line-height: var(--text-input-md-lineHeight);
13707
- padding: 0;
13708
- padding-right: calc(var(--input-field-padding-x) + 1.5rem);
13709
- cursor: pointer;
13710
- min-width: 0;
13711
- width: 100%;
13879
+ @keyframes muka-accordion-slideDown {
13880
+ from {
13881
+ height: 0;
13882
+ }
13883
+ to {
13884
+ height: var(--radix-accordion-content-height);
13885
+ }
13712
13886
  }
13713
13887
 
13714
- .muka-select__field--sm .muka-select__native {
13715
- font-family: var(--text-input-sm-fontFamily);
13716
- font-weight: var(--text-input-sm-fontWeight);
13717
- font-size: var(--text-input-sm-fontSize);
13718
- line-height: var(--text-input-sm-lineHeight);
13888
+ @keyframes muka-accordion-slideUp {
13889
+ from {
13890
+ height: var(--radix-accordion-content-height);
13891
+ }
13892
+ to {
13893
+ height: 0;
13894
+ }
13719
13895
  }
13720
13896
 
13721
- .muka-select__field--lg .muka-select__native {
13722
- font-family: var(--text-input-lg-fontFamily);
13723
- font-weight: var(--text-input-lg-fontWeight);
13724
- font-size: var(--text-input-lg-fontSize);
13725
- line-height: var(--text-input-lg-lineHeight);
13897
+ .muka-accordion__content-inner {
13898
+ padding: 0 var(--spacing-4) var(--spacing-5);
13899
+ color: var(--color-text-default-default);
13726
13900
  }
13727
13901
 
13728
- .muka-select__field--disabled .muka-select__native {
13729
- color: var(--input-field-color-disabled-foreground);
13730
- cursor: not-allowed;
13902
+ /* ─── Variant: flush ────────────────────────────────────────────────────── */
13903
+
13904
+ .muka-accordion--flush .muka-accordion__trigger {
13905
+ padding-left: 0;
13906
+ padding-right: 0;
13731
13907
  }
13732
13908
 
13733
- /* Chevron — aligned with field padding */
13734
- .muka-select__chevron {
13735
- display: inline-flex;
13736
- align-items: center;
13737
- position: absolute;
13738
- right: var(--input-field-padding-x);
13739
- pointer-events: none;
13740
- color: var(--color-text-subtle-default);
13909
+ .muka-accordion--flush .muka-accordion__content-inner {
13910
+ padding-left: 0;
13911
+ padding-right: 0;
13741
13912
  }
13742
13913
 
13743
- .muka-select__field--disabled .muka-select__chevron {
13744
- color: var(--input-field-color-disabled-foreground);
13914
+ /* ─── Variant: contained ────────────────────────────────────────────────── */
13915
+
13916
+ .muka-accordion--contained {
13917
+ border: var(--border-width-regular) solid var(--color-border-default);
13918
+ border-radius: var(--radius-md);
13919
+ overflow: hidden;
13745
13920
  }
13746
13921
 
13747
- /* Helper text — same as Input */
13748
- .muka-select__helper {
13749
- font-family: var(--text-label-sm-regular-fontFamily);
13750
- font-weight: var(--text-label-sm-regular-fontWeight);
13751
- font-size: var(--text-label-sm-regular-fontSize);
13752
- line-height: var(--text-label-sm-regular-lineHeight);
13753
- color: var(--color-text-subtle-default);
13754
- margin: 0;
13922
+ .muka-accordion--contained .muka-accordion__item {
13923
+ background-color: var(--color-surface-level3);
13755
13924
  }
13756
13925
 
13757
- /* Error message — same as Input */
13758
- .muka-select__error {
13759
- font-family: var(--text-label-sm-regular-fontFamily);
13760
- font-weight: var(--text-label-sm-regular-fontWeight);
13761
- font-size: var(--text-label-sm-regular-fontSize);
13762
- line-height: var(--text-label-sm-regular-lineHeight);
13763
- color: var(--color-state-error-foreground);
13764
- margin: 0;
13926
+ .muka-accordion--contained .muka-accordion__item:last-child {
13927
+ border-bottom: none;
13765
13928
  }
13766
13929