@revikornmann/muka-ui 0.12.0 → 0.13.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 (109) hide show
  1. package/build/manifest.json +10 -0
  2. package/dist/cjs/components/AgentTaskList/AgentTaskList.js +1 -1
  3. package/dist/cjs/components/BadgeNumber/BadgeNumber.css +105 -0
  4. package/dist/cjs/components/BadgeNumber/BadgeNumber.js +19 -0
  5. package/dist/cjs/components/BadgeNumber/BadgeNumber.js.map +1 -0
  6. package/dist/cjs/components/BadgeNumber/index.js +11 -0
  7. package/dist/cjs/components/BadgeNumber/index.js.map +1 -0
  8. package/dist/cjs/components/{ChatBubble/ChatBubble.css → ChatMessage/ChatMessage.css} +133 -105
  9. package/dist/cjs/components/ChatMessage/ChatMessage.js +141 -0
  10. package/dist/cjs/components/ChatMessage/ChatMessage.js.map +1 -0
  11. package/dist/cjs/components/ChatMessage/index.js +7 -0
  12. package/dist/cjs/components/ChatMessage/index.js.map +1 -0
  13. package/dist/cjs/components/ChatMessageList/ChatMessageList.js +1 -1
  14. package/dist/cjs/components/ChatMessageStack/ChatMessageStack.css +51 -0
  15. package/dist/cjs/components/ChatMessageStack/ChatMessageStack.js +49 -0
  16. package/dist/cjs/components/ChatMessageStack/ChatMessageStack.js.map +1 -0
  17. package/dist/cjs/components/ChatMessageStack/index.js +6 -0
  18. package/dist/cjs/components/ChatMessageStack/index.js.map +1 -0
  19. package/dist/cjs/components/ChatPhotoGrid/ChatPhotoGrid.css +8 -2
  20. package/dist/cjs/components/ChatPhotoGrid/ChatPhotoGrid.js +1 -1
  21. package/dist/cjs/components/Menu/Menu.js +5 -4
  22. package/dist/cjs/components/Menu/Menu.js.map +1 -1
  23. package/dist/cjs/components/index.js +9 -5
  24. package/dist/cjs/components/index.js.map +1 -1
  25. package/dist/cjs/utils/useLongPress.js +71 -0
  26. package/dist/cjs/utils/useLongPress.js.map +1 -0
  27. package/dist/esm/components/AgentTaskList/AgentTaskList.js +1 -1
  28. package/dist/esm/components/BadgeNumber/BadgeNumber.css +105 -0
  29. package/dist/esm/components/BadgeNumber/BadgeNumber.js +15 -0
  30. package/dist/esm/components/BadgeNumber/BadgeNumber.js.map +1 -0
  31. package/dist/esm/components/BadgeNumber/index.js +3 -0
  32. package/dist/esm/components/BadgeNumber/index.js.map +1 -0
  33. package/dist/esm/components/{ChatBubble/ChatBubble.css → ChatMessage/ChatMessage.css} +133 -105
  34. package/dist/esm/components/ChatMessage/ChatMessage.js +137 -0
  35. package/dist/esm/components/ChatMessage/ChatMessage.js.map +1 -0
  36. package/dist/esm/components/ChatMessage/index.js +2 -0
  37. package/dist/esm/components/ChatMessage/index.js.map +1 -0
  38. package/dist/esm/components/ChatMessageList/ChatMessageList.js +1 -1
  39. package/dist/esm/components/ChatMessageStack/ChatMessageStack.css +51 -0
  40. package/dist/esm/components/ChatMessageStack/ChatMessageStack.js +42 -0
  41. package/dist/esm/components/ChatMessageStack/ChatMessageStack.js.map +1 -0
  42. package/dist/esm/components/ChatMessageStack/index.js +2 -0
  43. package/dist/esm/components/ChatMessageStack/index.js.map +1 -0
  44. package/dist/esm/components/ChatPhotoGrid/ChatPhotoGrid.css +8 -2
  45. package/dist/esm/components/ChatPhotoGrid/ChatPhotoGrid.js +1 -1
  46. package/dist/esm/components/Menu/Menu.js +5 -4
  47. package/dist/esm/components/Menu/Menu.js.map +1 -1
  48. package/dist/esm/components/index.js +3 -1
  49. package/dist/esm/components/index.js.map +1 -1
  50. package/dist/esm/utils/useLongPress.js +68 -0
  51. package/dist/esm/utils/useLongPress.js.map +1 -0
  52. package/dist/styles/components/BadgeNumber.css +105 -0
  53. package/dist/styles/components/{ChatBubble.css → ChatMessage.css} +133 -105
  54. package/dist/styles/components/ChatMessageStack.css +51 -0
  55. package/dist/styles/components/ChatPhotoGrid.css +8 -2
  56. package/dist/styles/index.css +1672 -1449
  57. package/dist/styles/muka-dark.css +1672 -1449
  58. package/dist/styles/muka-light.css +1672 -1449
  59. package/dist/styles/tokens-bouwplan-dark.css +32 -5
  60. package/dist/styles/tokens-bouwplan-light.css +32 -5
  61. package/dist/styles/tokens-fscl-dark.css +32 -5
  62. package/dist/styles/tokens-fscl-light.css +32 -5
  63. package/dist/styles/tokens-grip-dark.css +32 -5
  64. package/dist/styles/tokens-grip-light.css +32 -5
  65. package/dist/styles/tokens-muka-dark.css +32 -5
  66. package/dist/styles/tokens-muka-light.css +32 -5
  67. package/dist/styles/tokens-wireframe-dark.css +31 -4
  68. package/dist/styles/tokens-wireframe-light.css +31 -4
  69. package/dist/styles/wireframe-dark.css +1671 -1448
  70. package/dist/styles/wireframe-light.css +1671 -1448
  71. package/dist/types/components/AgentTaskList/AgentTaskList.d.ts +1 -1
  72. package/dist/types/components/BadgeNumber/BadgeNumber.d.ts +17 -0
  73. package/dist/types/components/BadgeNumber/BadgeNumber.d.ts.map +1 -0
  74. package/dist/types/components/BadgeNumber/index.d.ts +3 -0
  75. package/dist/types/components/BadgeNumber/index.d.ts.map +1 -0
  76. package/dist/types/components/ChatMessage/ChatMessage.d.ts +130 -0
  77. package/dist/types/components/ChatMessage/ChatMessage.d.ts.map +1 -0
  78. package/dist/types/components/ChatMessage/index.d.ts +2 -0
  79. package/dist/types/components/ChatMessage/index.d.ts.map +1 -0
  80. package/dist/types/components/ChatMessageList/ChatMessageList.d.ts +2 -2
  81. package/dist/types/components/ChatMessageList/ChatMessageList.d.ts.map +1 -1
  82. package/dist/types/components/ChatMessageStack/ChatMessageStack.d.ts +46 -0
  83. package/dist/types/components/ChatMessageStack/ChatMessageStack.d.ts.map +1 -0
  84. package/dist/types/components/ChatMessageStack/index.d.ts +2 -0
  85. package/dist/types/components/ChatMessageStack/index.d.ts.map +1 -0
  86. package/dist/types/components/ChatPhotoGrid/ChatPhotoGrid.d.ts +1 -1
  87. package/dist/types/components/Menu/Menu.d.ts +12 -0
  88. package/dist/types/components/Menu/Menu.d.ts.map +1 -1
  89. package/dist/types/components/index.d.ts +3 -1
  90. package/dist/types/components/index.d.ts.map +1 -1
  91. package/dist/types/utils/useLongPress.d.ts +28 -0
  92. package/dist/types/utils/useLongPress.d.ts.map +1 -0
  93. package/package.json +1 -1
  94. package/tokens/t3-semantics/ui.json +29 -0
  95. package/tokens/t4-components/badge-number.json +48 -0
  96. package/tokens/t4-components/chatbubble.json +33 -7
  97. package/tokens/t4-components/chatphotogrid.json +2 -2
  98. package/dist/cjs/components/ChatBubble/ChatBubble.js +0 -37
  99. package/dist/cjs/components/ChatBubble/ChatBubble.js.map +0 -1
  100. package/dist/cjs/components/ChatBubble/index.js +0 -6
  101. package/dist/cjs/components/ChatBubble/index.js.map +0 -1
  102. package/dist/esm/components/ChatBubble/ChatBubble.js +0 -33
  103. package/dist/esm/components/ChatBubble/ChatBubble.js.map +0 -1
  104. package/dist/esm/components/ChatBubble/index.js +0 -2
  105. package/dist/esm/components/ChatBubble/index.js.map +0 -1
  106. package/dist/types/components/ChatBubble/ChatBubble.d.ts +0 -85
  107. package/dist/types/components/ChatBubble/ChatBubble.d.ts.map +0 -1
  108. package/dist/types/components/ChatBubble/index.d.ts +0 -2
  109. package/dist/types/components/ChatBubble/index.d.ts.map +0 -1
@@ -1382,6 +1382,18 @@ body {
1382
1382
  --text-heading-overline-lineHeight: 1rem;
1383
1383
  --text-heading-overline-letterSpacing: 0.025em;
1384
1384
  --text-heading-overline-textCase: uppercase;
1385
+ --text-label-xs-regular-fontFamily: Helvetica;
1386
+ --text-label-xs-regular-fontWeight: 400;
1387
+ --text-label-xs-regular-fontSize: 0.75rem;
1388
+ --text-label-xs-regular-lineHeight: 0.75rem;
1389
+ --text-label-xs-semibold-fontFamily: Helvetica;
1390
+ --text-label-xs-semibold-fontWeight: 600;
1391
+ --text-label-xs-semibold-fontSize: 0.75rem;
1392
+ --text-label-xs-semibold-lineHeight: 0.75rem;
1393
+ --text-label-xs-bold-fontFamily: Helvetica;
1394
+ --text-label-xs-bold-fontWeight: 700;
1395
+ --text-label-xs-bold-fontSize: 0.75rem;
1396
+ --text-label-xs-bold-lineHeight: 0.75rem;
1385
1397
  --text-label-sm-regular-fontFamily: Helvetica;
1386
1398
  --text-label-sm-regular-fontWeight: 400;
1387
1399
  --text-label-sm-regular-fontSize: 0.875rem;
@@ -1651,11 +1663,14 @@ body {
1651
1663
  --card-border-selected: 0.125rem solid #113264;
1652
1664
  --chatbubble-max-width: 640px;
1653
1665
  --chatbubble-radius: 0px;
1654
- --chatbubble-padding: 1rem;
1666
+ --chatbubble-padding-block: 0.75rem;
1667
+ --chatbubble-padding-inline: 1rem;
1655
1668
  --chatbubble-gap: 0.25rem;
1656
- --chatbubble-body-gap: 1.5rem;
1657
1669
  --chatbubble-row-gap: 0.75rem;
1670
+ --chatbubble-row-gap-compact: 0.5rem;
1671
+ --chatbubble-stack-gap: 0.75rem;
1658
1672
  --chatbubble-avatar-size: 3rem;
1673
+ --chatbubble-avatar-size-compact: 2rem;
1659
1674
  --chatbubble-color-own-background: #e9f6ec;
1660
1675
  --chatbubble-color-own-border: #ccebd1;
1661
1676
  --chatbubble-color-own-foreground: #202020;
@@ -1666,7 +1681,9 @@ body {
1666
1681
  --chatbubble-color-agent-border: #fbe577;
1667
1682
  --chatbubble-color-agent-foreground: #202020;
1668
1683
  --chatbubble-color-timestamp: #202020;
1669
- --chatbubble-embed-padding: 0.75rem;
1684
+ --chatbubble-embed-padding-block: 0.75rem;
1685
+ --chatbubble-embed-padding-inline: 1rem;
1686
+ --chatbubble-embed-margin-block: 0.75rem;
1670
1687
  --chatbubble-embed-gap: 0.5rem;
1671
1688
  --chatbubble-embed-radius: 0px;
1672
1689
  --chatbubble-embed-color-own-background: #f2fcf4;
@@ -1679,7 +1696,7 @@ body {
1679
1696
  --chatbubble-embed-color-agent-border: #fbe577;
1680
1697
  --chatbubble-embed-color-agent-foreground: #202020;
1681
1698
  --chatbubble-action-stack-gap: 0.75rem;
1682
- --chatphotogrid-gap: 0.5rem;
1699
+ --chatphotogrid-gap: 0.25rem;
1683
1700
  --chatphotogrid-radius: 0px;
1684
1701
  --chatphotogrid-color-placeholder: #e8e8e8;
1685
1702
  --chatphotogrid-color-overflow-background: rgba(0, 0, 0, 0.565);
@@ -2094,6 +2111,16 @@ body {
2094
2111
  --badge-padding-leading-sm: 0.5rem;
2095
2112
  --badge-padding-leading-md: 0.75rem;
2096
2113
  --badge-padding-leading-lg: 0.75rem;
2114
+ --badge-number-size-2xs: 1rem;
2115
+ --badge-number-size-xs: 1.25rem;
2116
+ --badge-number-size-sm: 1.5rem;
2117
+ --badge-number-size-md: 2rem;
2118
+ --badge-number-size-lg: 2.5rem;
2119
+ --badge-number-padding-2xs: 0.25rem;
2120
+ --badge-number-padding-xs: 0.375rem;
2121
+ --badge-number-padding-sm: 0.5rem;
2122
+ --badge-number-padding-md: 0.5rem;
2123
+ --badge-number-padding-lg: 0.75rem;
2097
2124
  --table-cell-padding-x-sm: 0.5rem;
2098
2125
  --table-cell-padding-x-md: 0.75rem;
2099
2126
  --table-cell-padding-x-lg: 1rem;
@@ -2860,196 +2887,6 @@ body {
2860
2887
  }
2861
2888
 
2862
2889
 
2863
- /* Toast */
2864
- /* Toast Component Styles - Using Muka Design Tokens */
2865
-
2866
- .muka-toast {
2867
- display: flex;
2868
- align-items: flex-start;
2869
- gap: var(--toast-gap);
2870
- padding: var(--toast-padding-y) var(--toast-padding-x);
2871
- border-radius: var(--toast-radius);
2872
- box-shadow: var(--toast-shadow);
2873
- min-width: var(--toast-width-min);
2874
- max-width: var(--toast-width-max);
2875
- pointer-events: auto;
2876
- animation: muka-toast-slide-in 0.2s ease-out;
2877
- }
2878
-
2879
- /* Entry animation */
2880
- @keyframes muka-toast-slide-in {
2881
- from {
2882
- opacity: 0;
2883
- transform: translateY(8px);
2884
- }
2885
- to {
2886
- opacity: 1;
2887
- transform: translateY(0);
2888
- }
2889
- }
2890
-
2891
- /* Position variants (for standalone use - typically managed by ToastProvider) */
2892
- .muka-toast--top-right,
2893
- .muka-toast--top-left,
2894
- .muka-toast--top-center,
2895
- .muka-toast--bottom-right,
2896
- .muka-toast--bottom-left,
2897
- .muka-toast--bottom-center {
2898
- position: fixed;
2899
- z-index: 9999;
2900
- }
2901
-
2902
- .muka-toast--top-right {
2903
- top: var(--spacing-4);
2904
- right: var(--spacing-4);
2905
- }
2906
-
2907
- .muka-toast--top-left {
2908
- top: var(--spacing-4);
2909
- left: var(--spacing-4);
2910
- }
2911
-
2912
- .muka-toast--top-center {
2913
- top: var(--spacing-4);
2914
- left: 50%;
2915
- transform: translateX(-50%);
2916
- }
2917
-
2918
- .muka-toast--bottom-right {
2919
- bottom: var(--spacing-4);
2920
- right: var(--spacing-4);
2921
- }
2922
-
2923
- .muka-toast--bottom-left {
2924
- bottom: var(--spacing-4);
2925
- left: var(--spacing-4);
2926
- }
2927
-
2928
- .muka-toast--bottom-center {
2929
- bottom: var(--spacing-4);
2930
- left: 50%;
2931
- transform: translateX(-50%);
2932
- }
2933
-
2934
- /* Variant: Info */
2935
- .muka-toast--info {
2936
- background-color: var(--toast-color-info-background);
2937
- color: var(--toast-color-info-foreground);
2938
- }
2939
-
2940
- .muka-toast--info .muka-toast__icon {
2941
- color: var(--toast-color-info-accent);
2942
- }
2943
-
2944
- /* Variant: Success */
2945
- .muka-toast--success {
2946
- background-color: var(--toast-color-success-background);
2947
- color: var(--toast-color-success-foreground);
2948
- }
2949
-
2950
- .muka-toast--success .muka-toast__icon {
2951
- color: var(--toast-color-success-accent);
2952
- }
2953
-
2954
- /* Variant: Warning */
2955
- .muka-toast--warning {
2956
- background-color: var(--toast-color-warning-background);
2957
- color: var(--toast-color-warning-foreground);
2958
- }
2959
-
2960
- .muka-toast--warning .muka-toast__icon {
2961
- color: var(--toast-color-warning-accent);
2962
- }
2963
-
2964
- /* Variant: Error */
2965
- .muka-toast--error {
2966
- background-color: var(--toast-color-error-background);
2967
- color: var(--toast-color-error-foreground);
2968
- }
2969
-
2970
- .muka-toast--error .muka-toast__icon {
2971
- color: var(--toast-color-error-accent);
2972
- }
2973
-
2974
- /* Icon */
2975
- .muka-toast__icon {
2976
- display: flex;
2977
- align-items: center;
2978
- justify-content: center;
2979
- flex-shrink: 0;
2980
- width: var(--toast-icon-size);
2981
- height: var(--toast-icon-size);
2982
- }
2983
-
2984
- .muka-toast__icon svg {
2985
- width: 100%;
2986
- height: 100%;
2987
- }
2988
-
2989
- /* Content */
2990
- .muka-toast__content {
2991
- flex: 1;
2992
- min-width: 0;
2993
- }
2994
-
2995
- .muka-toast__title {
2996
- font-family: var(--text-label-md-semibold-fontFamily);
2997
- font-weight: var(--text-label-md-semibold-fontWeight);
2998
- font-size: var(--text-label-md-semibold-fontSize);
2999
- line-height: var(--text-label-md-semibold-lineHeight);
3000
- margin-bottom: var(--spacing-1);
3001
- }
3002
-
3003
- .muka-toast__message {
3004
- font-family: var(--text-body-sm-regular-fontFamily);
3005
- font-weight: var(--text-body-sm-regular-fontWeight);
3006
- font-size: var(--text-body-sm-regular-fontSize);
3007
- line-height: var(--text-body-sm-regular-lineHeight);
3008
- }
3009
-
3010
- /* Action slot */
3011
- .muka-toast__action {
3012
- display: flex;
3013
- align-items: center;
3014
- flex-shrink: 0;
3015
- }
3016
-
3017
- /* Dismiss button */
3018
- .muka-toast__dismiss {
3019
- display: flex;
3020
- align-items: center;
3021
- justify-content: center;
3022
- flex-shrink: 0;
3023
- width: 24px;
3024
- height: 24px;
3025
- padding: 0;
3026
- margin: -2px -4px -2px 0;
3027
- border: none;
3028
- background: transparent;
3029
- color: inherit;
3030
- opacity: 0.7;
3031
- cursor: pointer;
3032
- border-radius: var(--border-radius-sm);
3033
- transition: opacity 0.15s ease, background-color 0.15s ease;
3034
- }
3035
-
3036
- .muka-toast__dismiss:hover {
3037
- opacity: 1;
3038
- background-color: rgba(0, 0, 0, 0.05);
3039
- }
3040
-
3041
- .muka-toast__dismiss:focus-visible {
3042
- outline: 2px solid var(--color-border-focus);
3043
- outline-offset: 2px;
3044
- opacity: 1;
3045
- }
3046
-
3047
- .muka-toast__dismiss svg {
3048
- width: 16px;
3049
- height: 16px;
3050
- }
3051
-
3052
-
3053
2890
  /* Tile */
3054
2891
  /* Tile Component Styles - Using Muka Design Tokens */
3055
2892
 
@@ -3411,45 +3248,235 @@ body {
3411
3248
  }
3412
3249
 
3413
3250
 
3414
- /* Thumbnail */
3415
- /* Thumbnail Component Styles - Using Muka Design Tokens */
3251
+ /* Toast */
3252
+ /* Toast Component Styles - Using Muka Design Tokens */
3416
3253
 
3417
- .muka-thumbnail {
3418
- position: relative;
3419
- flex-shrink: 0;
3254
+ .muka-toast {
3255
+ display: flex;
3256
+ align-items: flex-start;
3257
+ gap: var(--toast-gap);
3258
+ padding: var(--toast-padding-y) var(--toast-padding-x);
3259
+ border-radius: var(--toast-radius);
3260
+ box-shadow: var(--toast-shadow);
3261
+ min-width: var(--toast-width-min);
3262
+ max-width: var(--toast-width-max);
3263
+ pointer-events: auto;
3264
+ animation: muka-toast-slide-in 0.2s ease-out;
3420
3265
  }
3421
3266
 
3422
- /* The frame carries the border, background and shape clip. Keeping it separate
3423
- from the root lets the remove (×) button sit outside the clip (needed for the
3424
- circular/ellipse shape, whose corners would otherwise clip the button). */
3425
- .muka-thumbnail__frame {
3426
- position: absolute;
3427
- inset: 0;
3428
- overflow: hidden;
3429
- border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3430
- border-radius: var(--border-radius-lg);
3431
- background-color: var(--color-surface-level1);
3267
+ /* Entry animation */
3268
+ @keyframes muka-toast-slide-in {
3269
+ from {
3270
+ opacity: 0;
3271
+ transform: translateY(8px);
3272
+ }
3273
+ to {
3274
+ opacity: 1;
3275
+ transform: translateY(0);
3276
+ }
3432
3277
  }
3433
3278
 
3434
- /* ─── Shapes ──────────────────────────────────────────── */
3435
- .muka-thumbnail--4-3 {
3436
- width: 160px;
3437
- height: 120px;
3279
+ /* Position variants (for standalone use - typically managed by ToastProvider) */
3280
+ .muka-toast--top-right,
3281
+ .muka-toast--top-left,
3282
+ .muka-toast--top-center,
3283
+ .muka-toast--bottom-right,
3284
+ .muka-toast--bottom-left,
3285
+ .muka-toast--bottom-center {
3286
+ position: fixed;
3287
+ z-index: 9999;
3438
3288
  }
3439
3289
 
3440
- .muka-thumbnail--1-1 {
3441
- width: 120px;
3442
- height: 120px;
3290
+ .muka-toast--top-right {
3291
+ top: var(--spacing-4);
3292
+ right: var(--spacing-4);
3443
3293
  }
3444
3294
 
3445
- .muka-thumbnail--ellipse {
3446
- width: 120px;
3447
- height: 120px;
3295
+ .muka-toast--top-left {
3296
+ top: var(--spacing-4);
3297
+ left: var(--spacing-4);
3448
3298
  }
3449
3299
 
3450
- .muka-thumbnail--ellipse .muka-thumbnail__frame {
3451
- border-radius: var(--border-radius-full);
3452
- }
3300
+ .muka-toast--top-center {
3301
+ top: var(--spacing-4);
3302
+ left: 50%;
3303
+ transform: translateX(-50%);
3304
+ }
3305
+
3306
+ .muka-toast--bottom-right {
3307
+ bottom: var(--spacing-4);
3308
+ right: var(--spacing-4);
3309
+ }
3310
+
3311
+ .muka-toast--bottom-left {
3312
+ bottom: var(--spacing-4);
3313
+ left: var(--spacing-4);
3314
+ }
3315
+
3316
+ .muka-toast--bottom-center {
3317
+ bottom: var(--spacing-4);
3318
+ left: 50%;
3319
+ transform: translateX(-50%);
3320
+ }
3321
+
3322
+ /* Variant: Info */
3323
+ .muka-toast--info {
3324
+ background-color: var(--toast-color-info-background);
3325
+ color: var(--toast-color-info-foreground);
3326
+ }
3327
+
3328
+ .muka-toast--info .muka-toast__icon {
3329
+ color: var(--toast-color-info-accent);
3330
+ }
3331
+
3332
+ /* Variant: Success */
3333
+ .muka-toast--success {
3334
+ background-color: var(--toast-color-success-background);
3335
+ color: var(--toast-color-success-foreground);
3336
+ }
3337
+
3338
+ .muka-toast--success .muka-toast__icon {
3339
+ color: var(--toast-color-success-accent);
3340
+ }
3341
+
3342
+ /* Variant: Warning */
3343
+ .muka-toast--warning {
3344
+ background-color: var(--toast-color-warning-background);
3345
+ color: var(--toast-color-warning-foreground);
3346
+ }
3347
+
3348
+ .muka-toast--warning .muka-toast__icon {
3349
+ color: var(--toast-color-warning-accent);
3350
+ }
3351
+
3352
+ /* Variant: Error */
3353
+ .muka-toast--error {
3354
+ background-color: var(--toast-color-error-background);
3355
+ color: var(--toast-color-error-foreground);
3356
+ }
3357
+
3358
+ .muka-toast--error .muka-toast__icon {
3359
+ color: var(--toast-color-error-accent);
3360
+ }
3361
+
3362
+ /* Icon */
3363
+ .muka-toast__icon {
3364
+ display: flex;
3365
+ align-items: center;
3366
+ justify-content: center;
3367
+ flex-shrink: 0;
3368
+ width: var(--toast-icon-size);
3369
+ height: var(--toast-icon-size);
3370
+ }
3371
+
3372
+ .muka-toast__icon svg {
3373
+ width: 100%;
3374
+ height: 100%;
3375
+ }
3376
+
3377
+ /* Content */
3378
+ .muka-toast__content {
3379
+ flex: 1;
3380
+ min-width: 0;
3381
+ }
3382
+
3383
+ .muka-toast__title {
3384
+ font-family: var(--text-label-md-semibold-fontFamily);
3385
+ font-weight: var(--text-label-md-semibold-fontWeight);
3386
+ font-size: var(--text-label-md-semibold-fontSize);
3387
+ line-height: var(--text-label-md-semibold-lineHeight);
3388
+ margin-bottom: var(--spacing-1);
3389
+ }
3390
+
3391
+ .muka-toast__message {
3392
+ font-family: var(--text-body-sm-regular-fontFamily);
3393
+ font-weight: var(--text-body-sm-regular-fontWeight);
3394
+ font-size: var(--text-body-sm-regular-fontSize);
3395
+ line-height: var(--text-body-sm-regular-lineHeight);
3396
+ }
3397
+
3398
+ /* Action slot */
3399
+ .muka-toast__action {
3400
+ display: flex;
3401
+ align-items: center;
3402
+ flex-shrink: 0;
3403
+ }
3404
+
3405
+ /* Dismiss button */
3406
+ .muka-toast__dismiss {
3407
+ display: flex;
3408
+ align-items: center;
3409
+ justify-content: center;
3410
+ flex-shrink: 0;
3411
+ width: 24px;
3412
+ height: 24px;
3413
+ padding: 0;
3414
+ margin: -2px -4px -2px 0;
3415
+ border: none;
3416
+ background: transparent;
3417
+ color: inherit;
3418
+ opacity: 0.7;
3419
+ cursor: pointer;
3420
+ border-radius: var(--border-radius-sm);
3421
+ transition: opacity 0.15s ease, background-color 0.15s ease;
3422
+ }
3423
+
3424
+ .muka-toast__dismiss:hover {
3425
+ opacity: 1;
3426
+ background-color: rgba(0, 0, 0, 0.05);
3427
+ }
3428
+
3429
+ .muka-toast__dismiss:focus-visible {
3430
+ outline: 2px solid var(--color-border-focus);
3431
+ outline-offset: 2px;
3432
+ opacity: 1;
3433
+ }
3434
+
3435
+ .muka-toast__dismiss svg {
3436
+ width: 16px;
3437
+ height: 16px;
3438
+ }
3439
+
3440
+
3441
+ /* Thumbnail */
3442
+ /* Thumbnail Component Styles - Using Muka Design Tokens */
3443
+
3444
+ .muka-thumbnail {
3445
+ position: relative;
3446
+ flex-shrink: 0;
3447
+ }
3448
+
3449
+ /* The frame carries the border, background and shape clip. Keeping it separate
3450
+ from the root lets the remove (×) button sit outside the clip (needed for the
3451
+ circular/ellipse shape, whose corners would otherwise clip the button). */
3452
+ .muka-thumbnail__frame {
3453
+ position: absolute;
3454
+ inset: 0;
3455
+ overflow: hidden;
3456
+ border: var(--border-width-regular, 1px) solid var(--color-black-alpha-3);
3457
+ border-radius: var(--border-radius-lg);
3458
+ background-color: var(--color-surface-level1);
3459
+ }
3460
+
3461
+ /* ─── Shapes ──────────────────────────────────────────── */
3462
+ .muka-thumbnail--4-3 {
3463
+ width: 160px;
3464
+ height: 120px;
3465
+ }
3466
+
3467
+ .muka-thumbnail--1-1 {
3468
+ width: 120px;
3469
+ height: 120px;
3470
+ }
3471
+
3472
+ .muka-thumbnail--ellipse {
3473
+ width: 120px;
3474
+ height: 120px;
3475
+ }
3476
+
3477
+ .muka-thumbnail--ellipse .muka-thumbnail__frame {
3478
+ border-radius: var(--border-radius-full);
3479
+ }
3453
3480
 
3454
3481
  /* Image fills the frame, cropped to cover. Sits at scale(1) by default so the
3455
3482
  interactive hover zoom has a clean origin. */
@@ -7114,34 +7141,6 @@ body {
7114
7141
  }
7115
7142
 
7116
7143
 
7117
- /* NavigationTransition */
7118
- /* NavigationTransition Component Styles */
7119
-
7120
- /* ─── Wrapper ────────────────────────────────────────── */
7121
-
7122
- .muka-nav-transition {
7123
- position: relative;
7124
- height: 100vh;
7125
- overflow: hidden;
7126
- }
7127
-
7128
- /* Disable interaction during animation */
7129
- .muka-nav-transition--active {
7130
- pointer-events: none;
7131
- }
7132
-
7133
- /* ─── View slots ─────────────────────────────────────── */
7134
-
7135
- .muka-nav-transition--active .muka-nav-transition__view {
7136
- position: absolute;
7137
- inset: 0;
7138
- }
7139
-
7140
- /* Z-index layering */
7141
- .muka-nav-transition__view--bottom { z-index: 1; }
7142
- .muka-nav-transition__view--top { z-index: 2; }
7143
-
7144
-
7145
7144
  /* NumberInput */
7146
7145
  /* NumberInput — reuses Input field styles (../Input/Input.css). */
7147
7146
  /* Only the prefix/suffix affixes are NumberInput-specific. */
@@ -7172,6 +7171,34 @@ body {
7172
7171
  }
7173
7172
 
7174
7173
 
7174
+ /* NavigationTransition */
7175
+ /* NavigationTransition Component Styles */
7176
+
7177
+ /* ─── Wrapper ────────────────────────────────────────── */
7178
+
7179
+ .muka-nav-transition {
7180
+ position: relative;
7181
+ height: 100vh;
7182
+ overflow: hidden;
7183
+ }
7184
+
7185
+ /* Disable interaction during animation */
7186
+ .muka-nav-transition--active {
7187
+ pointer-events: none;
7188
+ }
7189
+
7190
+ /* ─── View slots ─────────────────────────────────────── */
7191
+
7192
+ .muka-nav-transition--active .muka-nav-transition__view {
7193
+ position: absolute;
7194
+ inset: 0;
7195
+ }
7196
+
7197
+ /* Z-index layering */
7198
+ .muka-nav-transition__view--bottom { z-index: 1; }
7199
+ .muka-nav-transition__view--top { z-index: 2; }
7200
+
7201
+
7175
7202
  /* Menu */
7176
7203
  /* Menu Component Styles */
7177
7204
 
@@ -8717,22 +8744,178 @@ li.muka-listitem {
8717
8744
  }
8718
8745
 
8719
8746
 
8720
- /* DocumentViewer */
8721
- /* DocumentViewer Component Styles - Using Muka Design Tokens */
8747
+ /* Drawer */
8748
+ /* Drawer Component Styles */
8722
8749
 
8723
- .muka-documentviewer {
8724
- display: flex;
8725
- flex-direction: column;
8726
- background-color: var(--documentviewer-container-background);
8727
- border-radius: var(--documentviewer-container-borderRadius);
8728
- overflow: hidden;
8729
- position: relative;
8750
+ /* Size tokens (local to Drawer) */
8751
+ .muka-drawer {
8752
+ --drawer-width-sm: 18rem;
8753
+ --drawer-width-md: 26rem;
8754
+ --drawer-width-lg: 36rem;
8730
8755
  }
8731
8756
 
8732
- .muka-documentviewer--fullscreen {
8733
- position: fixed;
8734
- top: 0;
8735
- left: 0;
8757
+ /* Reset native dialog */
8758
+ .muka-drawer {
8759
+ border: none;
8760
+ padding: 0;
8761
+ max-width: none;
8762
+ max-height: none;
8763
+ background: transparent;
8764
+ overflow: visible;
8765
+ }
8766
+
8767
+ /* Backdrop */
8768
+ .muka-drawer::backdrop {
8769
+ background-color: var(--color-surface-backdrop);
8770
+ opacity: 0;
8771
+ transition: opacity 200ms ease;
8772
+ }
8773
+
8774
+ .muka-drawer--slide-in::backdrop {
8775
+ opacity: 1;
8776
+ }
8777
+
8778
+ /* Surface */
8779
+ .muka-drawer__surface {
8780
+ display: flex;
8781
+ flex-direction: column;
8782
+ background-color: var(--color-surface-level3);
8783
+ box-shadow: var(--shadow-level5);
8784
+ height: 100%;
8785
+ overflow: hidden;
8786
+ position: fixed;
8787
+ transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
8788
+ }
8789
+
8790
+ /* Side positioning + initial transforms */
8791
+ .muka-drawer--right .muka-drawer__surface {
8792
+ top: 0;
8793
+ right: 0;
8794
+ bottom: 0;
8795
+ border-radius: var(--radius-lg) 0 0 var(--radius-lg);
8796
+ transform: translateX(100%);
8797
+ }
8798
+
8799
+ .muka-drawer--left .muka-drawer__surface {
8800
+ top: 0;
8801
+ left: 0;
8802
+ bottom: 0;
8803
+ border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
8804
+ transform: translateX(-100%);
8805
+ }
8806
+
8807
+ .muka-drawer--bottom .muka-drawer__surface {
8808
+ left: 0;
8809
+ right: 0;
8810
+ bottom: 0;
8811
+ border-radius: var(--radius-lg) var(--radius-lg) 0 0;
8812
+ transform: translateY(100%);
8813
+ }
8814
+
8815
+ .muka-drawer--top .muka-drawer__surface {
8816
+ left: 0;
8817
+ right: 0;
8818
+ top: 0;
8819
+ border-radius: 0 0 var(--radius-lg) var(--radius-lg);
8820
+ transform: translateY(-100%);
8821
+ }
8822
+
8823
+ /* Slide-in state */
8824
+ .muka-drawer--slide-in .muka-drawer__surface {
8825
+ transform: translate(0, 0);
8826
+ }
8827
+
8828
+ /* Width sizes (left/right) */
8829
+ .muka-drawer--right .muka-drawer__surface,
8830
+ .muka-drawer--left .muka-drawer__surface {
8831
+ width: var(--drawer-width-md);
8832
+ }
8833
+
8834
+ .muka-drawer--sm.muka-drawer--right .muka-drawer__surface,
8835
+ .muka-drawer--sm.muka-drawer--left .muka-drawer__surface {
8836
+ width: var(--drawer-width-sm);
8837
+ }
8838
+
8839
+ .muka-drawer--lg.muka-drawer--right .muka-drawer__surface,
8840
+ .muka-drawer--lg.muka-drawer--left .muka-drawer__surface {
8841
+ width: var(--drawer-width-lg);
8842
+ }
8843
+
8844
+ .muka-drawer--full.muka-drawer--right .muka-drawer__surface,
8845
+ .muka-drawer--full.muka-drawer--left .muka-drawer__surface {
8846
+ width: 100%;
8847
+ }
8848
+
8849
+ /* Height sizes (top/bottom) */
8850
+ .muka-drawer--top .muka-drawer__surface,
8851
+ .muka-drawer--bottom .muka-drawer__surface {
8852
+ height: auto;
8853
+ max-height: 80vh;
8854
+ }
8855
+
8856
+ .muka-drawer--full.muka-drawer--top .muka-drawer__surface,
8857
+ .muka-drawer--full.muka-drawer--bottom .muka-drawer__surface {
8858
+ max-height: 100vh;
8859
+ }
8860
+
8861
+ /* Header */
8862
+ .muka-drawer__header {
8863
+ display: flex;
8864
+ align-items: center;
8865
+ gap: var(--spacing-3);
8866
+ padding: var(--spacing-4);
8867
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
8868
+ flex-shrink: 0;
8869
+ }
8870
+
8871
+ .muka-drawer__title {
8872
+ flex: 1;
8873
+ margin: 0;
8874
+ font-family: var(--text-label-lg-semibold-fontFamily);
8875
+ font-weight: var(--text-label-lg-semibold-fontWeight);
8876
+ font-size: var(--text-label-lg-semibold-fontSize);
8877
+ line-height: var(--text-label-lg-semibold-lineHeight);
8878
+ color: var(--color-text-default-default);
8879
+ }
8880
+
8881
+ .muka-drawer__leading,
8882
+ .muka-drawer__trailing {
8883
+ display: flex;
8884
+ align-items: center;
8885
+ flex-shrink: 0;
8886
+ }
8887
+
8888
+ /* Body */
8889
+ .muka-drawer__body {
8890
+ flex: 1;
8891
+ overflow-y: auto;
8892
+ padding: var(--spacing-4);
8893
+ }
8894
+
8895
+ /* Footer */
8896
+ .muka-drawer__footer {
8897
+ padding: var(--spacing-4);
8898
+ border-top: var(--border-width-regular) solid var(--color-border-default);
8899
+ flex-shrink: 0;
8900
+ }
8901
+
8902
+
8903
+ /* DocumentViewer */
8904
+ /* DocumentViewer Component Styles - Using Muka Design Tokens */
8905
+
8906
+ .muka-documentviewer {
8907
+ display: flex;
8908
+ flex-direction: column;
8909
+ background-color: var(--documentviewer-container-background);
8910
+ border-radius: var(--documentviewer-container-borderRadius);
8911
+ overflow: hidden;
8912
+ position: relative;
8913
+ }
8914
+
8915
+ .muka-documentviewer--fullscreen {
8916
+ position: fixed;
8917
+ top: 0;
8918
+ left: 0;
8736
8919
  right: 0;
8737
8920
  bottom: 0;
8738
8921
  width: 100vw;
@@ -8996,212 +9179,83 @@ li.muka-listitem {
8996
9179
  }
8997
9180
 
8998
9181
 
8999
- /* Drawer */
9000
- /* Drawer Component Styles */
9182
+ /* Divider */
9183
+ /* Divider Component Styles - Using Muka Design Tokens */
9001
9184
 
9002
- /* Size tokens (local to Drawer) */
9003
- .muka-drawer {
9004
- --drawer-width-sm: 18rem;
9005
- --drawer-width-md: 26rem;
9006
- --drawer-width-lg: 36rem;
9185
+ .muka-divider {
9186
+ flex-shrink: 0;
9007
9187
  }
9008
9188
 
9009
- /* Reset native dialog */
9010
- .muka-drawer {
9189
+ .muka-divider--horizontal {
9190
+ width: 100%;
9191
+ height: var(--separator-width);
9192
+ }
9193
+
9194
+ .muka-divider--vertical {
9195
+ height: 100%;
9196
+ width: var(--separator-width);
9197
+ align-self: stretch;
9198
+ }
9199
+
9200
+ .muka-divider--default {
9201
+ background-color: var(--separator-color-default);
9202
+ }
9203
+
9204
+ .muka-divider--contrast {
9205
+ background-color: var(--separator-color-contrast);
9206
+ }
9207
+
9208
+
9209
+ /* Dialog */
9210
+ /* Dialog Component Styles */
9211
+
9212
+ /* ─── Native dialog reset ─────────────────────────────── */
9213
+
9214
+ .muka-dialog {
9011
9215
  border: none;
9012
9216
  padding: 0;
9013
9217
  max-width: none;
9014
9218
  max-height: none;
9015
- background: transparent;
9016
9219
  overflow: visible;
9220
+ background: transparent;
9221
+ color: inherit;
9222
+ box-shadow: none;
9017
9223
  }
9018
9224
 
9019
- /* Backdrop */
9020
- .muka-drawer::backdrop {
9021
- background-color: var(--color-surface-backdrop);
9022
- opacity: 0;
9023
- transition: opacity 200ms ease;
9225
+ .muka-dialog:not([open]) {
9226
+ display: none;
9024
9227
  }
9025
9228
 
9026
- .muka-drawer--slide-in::backdrop {
9027
- opacity: 1;
9229
+ /* ─── Backdrop ────────────────────────────────────────── */
9230
+
9231
+ .muka-dialog::backdrop {
9232
+ background-color: var(--dialog-color-backdrop);
9028
9233
  }
9029
9234
 
9030
- /* Surface */
9031
- .muka-drawer__surface {
9235
+ /* ─── Non-modal modifier ──────────────────────────────── */
9236
+
9237
+ .muka-dialog--non-modal::backdrop {
9238
+ pointer-events: auto;
9239
+ }
9240
+
9241
+ /* ─── Mobile: all sizes bottom-attached (< 1024px) ───── */
9242
+
9243
+ .muka-dialog--sm,
9244
+ .muka-dialog--md,
9245
+ .muka-dialog--lg {
9246
+ width: 100%;
9247
+ height: 100%;
9248
+ max-width: 100vw;
9249
+ max-height: 100vh;
9250
+ margin: 0;
9032
9251
  display: flex;
9033
9252
  flex-direction: column;
9034
- background-color: var(--color-surface-level3);
9035
- box-shadow: var(--shadow-level5);
9036
- height: 100%;
9037
- overflow: hidden;
9038
- position: fixed;
9039
- transition: transform 200ms cubic-bezier(0.16, 1, 0.3, 1);
9253
+ justify-content: flex-end;
9254
+ align-items: stretch;
9040
9255
  }
9041
9256
 
9042
- /* Side positioning + initial transforms */
9043
- .muka-drawer--right .muka-drawer__surface {
9044
- top: 0;
9045
- right: 0;
9046
- bottom: 0;
9047
- border-radius: var(--radius-lg) 0 0 var(--radius-lg);
9048
- transform: translateX(100%);
9049
- }
9050
-
9051
- .muka-drawer--left .muka-drawer__surface {
9052
- top: 0;
9053
- left: 0;
9054
- bottom: 0;
9055
- border-radius: 0 var(--radius-lg) var(--radius-lg) 0;
9056
- transform: translateX(-100%);
9057
- }
9058
-
9059
- .muka-drawer--bottom .muka-drawer__surface {
9060
- left: 0;
9061
- right: 0;
9062
- bottom: 0;
9063
- border-radius: var(--radius-lg) var(--radius-lg) 0 0;
9064
- transform: translateY(100%);
9065
- }
9066
-
9067
- .muka-drawer--top .muka-drawer__surface {
9068
- left: 0;
9069
- right: 0;
9070
- top: 0;
9071
- border-radius: 0 0 var(--radius-lg) var(--radius-lg);
9072
- transform: translateY(-100%);
9073
- }
9074
-
9075
- /* Slide-in state */
9076
- .muka-drawer--slide-in .muka-drawer__surface {
9077
- transform: translate(0, 0);
9078
- }
9079
-
9080
- /* Width sizes (left/right) */
9081
- .muka-drawer--right .muka-drawer__surface,
9082
- .muka-drawer--left .muka-drawer__surface {
9083
- width: var(--drawer-width-md);
9084
- }
9085
-
9086
- .muka-drawer--sm.muka-drawer--right .muka-drawer__surface,
9087
- .muka-drawer--sm.muka-drawer--left .muka-drawer__surface {
9088
- width: var(--drawer-width-sm);
9089
- }
9090
-
9091
- .muka-drawer--lg.muka-drawer--right .muka-drawer__surface,
9092
- .muka-drawer--lg.muka-drawer--left .muka-drawer__surface {
9093
- width: var(--drawer-width-lg);
9094
- }
9095
-
9096
- .muka-drawer--full.muka-drawer--right .muka-drawer__surface,
9097
- .muka-drawer--full.muka-drawer--left .muka-drawer__surface {
9098
- width: 100%;
9099
- }
9100
-
9101
- /* Height sizes (top/bottom) */
9102
- .muka-drawer--top .muka-drawer__surface,
9103
- .muka-drawer--bottom .muka-drawer__surface {
9104
- height: auto;
9105
- max-height: 80vh;
9106
- }
9107
-
9108
- .muka-drawer--full.muka-drawer--top .muka-drawer__surface,
9109
- .muka-drawer--full.muka-drawer--bottom .muka-drawer__surface {
9110
- max-height: 100vh;
9111
- }
9112
-
9113
- /* Header */
9114
- .muka-drawer__header {
9115
- display: flex;
9116
- align-items: center;
9117
- gap: var(--spacing-3);
9118
- padding: var(--spacing-4);
9119
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
9120
- flex-shrink: 0;
9121
- }
9122
-
9123
- .muka-drawer__title {
9124
- flex: 1;
9125
- margin: 0;
9126
- font-family: var(--text-label-lg-semibold-fontFamily);
9127
- font-weight: var(--text-label-lg-semibold-fontWeight);
9128
- font-size: var(--text-label-lg-semibold-fontSize);
9129
- line-height: var(--text-label-lg-semibold-lineHeight);
9130
- color: var(--color-text-default-default);
9131
- }
9132
-
9133
- .muka-drawer__leading,
9134
- .muka-drawer__trailing {
9135
- display: flex;
9136
- align-items: center;
9137
- flex-shrink: 0;
9138
- }
9139
-
9140
- /* Body */
9141
- .muka-drawer__body {
9142
- flex: 1;
9143
- overflow-y: auto;
9144
- padding: var(--spacing-4);
9145
- }
9146
-
9147
- /* Footer */
9148
- .muka-drawer__footer {
9149
- padding: var(--spacing-4);
9150
- border-top: var(--border-width-regular) solid var(--color-border-default);
9151
- flex-shrink: 0;
9152
- }
9153
-
9154
-
9155
- /* Dialog */
9156
- /* Dialog Component Styles */
9157
-
9158
- /* ─── Native dialog reset ─────────────────────────────── */
9159
-
9160
- .muka-dialog {
9161
- border: none;
9162
- padding: 0;
9163
- max-width: none;
9164
- max-height: none;
9165
- overflow: visible;
9166
- background: transparent;
9167
- color: inherit;
9168
- box-shadow: none;
9169
- }
9170
-
9171
- .muka-dialog:not([open]) {
9172
- display: none;
9173
- }
9174
-
9175
- /* ─── Backdrop ────────────────────────────────────────── */
9176
-
9177
- .muka-dialog::backdrop {
9178
- background-color: var(--dialog-color-backdrop);
9179
- }
9180
-
9181
- /* ─── Non-modal modifier ──────────────────────────────── */
9182
-
9183
- .muka-dialog--non-modal::backdrop {
9184
- pointer-events: auto;
9185
- }
9186
-
9187
- /* ─── Mobile: all sizes bottom-attached (< 1024px) ───── */
9188
-
9189
- .muka-dialog--sm,
9190
- .muka-dialog--md,
9191
- .muka-dialog--lg {
9192
- width: 100%;
9193
- height: 100%;
9194
- max-width: 100vw;
9195
- max-height: 100vh;
9196
- margin: 0;
9197
- display: flex;
9198
- flex-direction: column;
9199
- justify-content: flex-end;
9200
- align-items: stretch;
9201
- }
9202
-
9203
- .muka-dialog__surface:focus {
9204
- outline: none;
9257
+ .muka-dialog__surface:focus {
9258
+ outline: none;
9205
9259
  }
9206
9260
 
9207
9261
  .muka-dialog--sm .muka-dialog__surface,
@@ -10443,33 +10497,6 @@ li.muka-listitem {
10443
10497
  }
10444
10498
 
10445
10499
 
10446
- /* Divider */
10447
- /* Divider Component Styles - Using Muka Design Tokens */
10448
-
10449
- .muka-divider {
10450
- flex-shrink: 0;
10451
- }
10452
-
10453
- .muka-divider--horizontal {
10454
- width: 100%;
10455
- height: var(--separator-width);
10456
- }
10457
-
10458
- .muka-divider--vertical {
10459
- height: 100%;
10460
- width: var(--separator-width);
10461
- align-self: stretch;
10462
- }
10463
-
10464
- .muka-divider--default {
10465
- background-color: var(--separator-color-default);
10466
- }
10467
-
10468
- .muka-divider--contrast {
10469
- background-color: var(--separator-color-contrast);
10470
- }
10471
-
10472
-
10473
10500
  /* CheckboxTile */
10474
10501
  /* CheckboxTile Component Styles - Using Muka Design Tokens */
10475
10502
 
@@ -10798,11 +10825,17 @@ li.muka-listitem {
10798
10825
  /* ChatPhotoGrid */
10799
10826
  /* ChatPhotoGrid Component Styles */
10800
10827
 
10828
+ /*
10829
+ * The grid clips to its own radius and the tiles stay square, so only the four
10830
+ * outer corners round — matching the Figma "Wrapper" frame (5225:1394).
10831
+ */
10801
10832
  .muka-chat-photo-grid {
10802
10833
  display: grid;
10803
10834
  gap: var(--chatphotogrid-gap);
10804
10835
  width: 100%;
10805
10836
  min-width: 0;
10837
+ overflow: hidden;
10838
+ border-radius: var(--chatphotogrid-radius);
10806
10839
  }
10807
10840
 
10808
10841
  /* ─── Tiles ────────────────────────────────────────────── */
@@ -10815,7 +10848,6 @@ li.muka-listitem {
10815
10848
  padding: 0;
10816
10849
  margin: 0;
10817
10850
  border: none;
10818
- border-radius: var(--chatphotogrid-radius);
10819
10851
  background-color: var(--chatphotogrid-color-placeholder);
10820
10852
  aspect-ratio: 1 / 1;
10821
10853
  }
@@ -10827,7 +10859,8 @@ button.muka-chat-photo-grid__tile {
10827
10859
 
10828
10860
  button.muka-chat-photo-grid__tile:focus-visible {
10829
10861
  outline: var(--border-width-bold) solid var(--color-border-focus);
10830
- outline-offset: var(--spacing-1);
10862
+ /* Inset, so the grid's overflow clip cannot cut the ring off on corner tiles */
10863
+ outline-offset: calc(-1 * var(--border-width-bold));
10831
10864
  }
10832
10865
 
10833
10866
  .muka-chat-photo-grid__image {
@@ -10911,6 +10944,60 @@ button.muka-chat-photo-grid__tile:focus-visible {
10911
10944
  }
10912
10945
 
10913
10946
 
10947
+ /* ChatMessageStack */
10948
+ /* ChatMessageStack Component Styles */
10949
+
10950
+ .muka-chat-message-stack {
10951
+ display: flex;
10952
+ flex-direction: column;
10953
+ gap: var(--chatbubble-stack-gap);
10954
+ width: 100%;
10955
+ max-width: 100%;
10956
+ }
10957
+
10958
+ .muka-chat-message-stack__messages {
10959
+ display: flex;
10960
+ flex-direction: column;
10961
+ gap: var(--chatbubble-stack-gap);
10962
+ width: 100%;
10963
+ }
10964
+
10965
+ /*
10966
+ * Reasoning sits above the stack, indented past the avatar rail so it lines up
10967
+ * with the bubbles rather than with the avatar (Figma 5379:47300).
10968
+ */
10969
+ .muka-chat-message-stack__reasoning {
10970
+ min-width: 0;
10971
+ }
10972
+
10973
+ .muka-chat-message-stack--has-avatar .muka-chat-message-stack__reasoning {
10974
+ padding-left: calc(var(--chatbubble-avatar-size) + var(--chatbubble-row-gap));
10975
+ }
10976
+
10977
+ .muka-chat-message-stack--own.muka-chat-message-stack--has-avatar
10978
+ .muka-chat-message-stack__reasoning {
10979
+ padding-left: 0;
10980
+ padding-right: calc(var(--chatbubble-avatar-size) + var(--chatbubble-row-gap));
10981
+ }
10982
+
10983
+ /* Follow the message's compact rail and gap below the desktop breakpoint */
10984
+ @media (max-width: 1023px) {
10985
+ .muka-chat-message-stack--has-avatar .muka-chat-message-stack__reasoning {
10986
+ padding-left: calc(
10987
+ var(--chatbubble-avatar-size-compact) + var(--chatbubble-row-gap-compact)
10988
+ );
10989
+ }
10990
+
10991
+ .muka-chat-message-stack--own.muka-chat-message-stack--has-avatar
10992
+ .muka-chat-message-stack__reasoning {
10993
+ padding-left: 0;
10994
+ padding-right: calc(
10995
+ var(--chatbubble-avatar-size-compact) + var(--chatbubble-row-gap-compact)
10996
+ );
10997
+ }
10998
+ }
10999
+
11000
+
10914
11001
  /* ChatMessageList */
10915
11002
  /* ChatMessageList Component Styles */
10916
11003
 
@@ -10954,221 +11041,111 @@ button.muka-chat-photo-grid__tile:focus-visible {
10954
11041
  }
10955
11042
 
10956
11043
 
10957
- /* ChatComposer */
10958
- /* ChatComposer Component Styles */
11044
+ /* ChatMessage */
11045
+ /* ChatMessage Component Styles */
10959
11046
 
10960
- /*
10961
- * The composer is a bare, fill-width row: no padding, background, border or
10962
- * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
10963
- * container — see BottomBar's `chat` variant.
10964
- */
10965
- .muka-chat-composer {
11047
+ .muka-chat-message {
10966
11048
  display: flex;
10967
11049
  flex-direction: column;
10968
- gap: var(--spacing-3);
10969
11050
  width: 100%;
11051
+ max-width: 100%;
10970
11052
  }
10971
11053
 
10972
- .muka-chat-composer--disabled {
10973
- opacity: 0.6;
10974
- pointer-events: none;
10975
- }
10976
-
10977
- /* ─── Input row ────────────────────────────────────────── */
11054
+ /* ─── Row: avatar rail + bubble ────────────────────────── */
10978
11055
 
10979
- .muka-chat-composer__row {
10980
- display: flex;
11056
+ .muka-chat-message__row {
11057
+ display: grid;
11058
+ grid-template-columns: minmax(0, 1fr);
11059
+ grid-template-areas: 'bubble';
11060
+ column-gap: var(--chatbubble-row-gap);
10981
11061
  width: 100%;
10982
- align-items: flex-end;
10983
- gap: var(--spacing-3);
10984
11062
  }
10985
11063
 
10986
- /* ─── Text field ───────────────────────────────────────── */
10987
-
10988
- .muka-chat-composer__field {
10989
- display: flex;
10990
- flex: 1 1 auto;
10991
- min-width: 0;
10992
- box-sizing: border-box;
10993
- align-items: center;
10994
- gap: var(--spacing-1);
10995
- min-height: var(--input-field-height-lg, 48px);
10996
- padding: 0 var(--spacing-2);
10997
- border: var(--border-width-regular) solid var(--input-field-color-default-border);
10998
- border-radius: var(--input-field-radius-lg);
10999
- background-color: var(--input-field-color-default-background);
11000
- transition: border-color 0.12s ease;
11064
+ .muka-chat-message--has-avatar .muka-chat-message__row {
11065
+ grid-template-columns: auto minmax(0, 1fr);
11066
+ grid-template-areas: 'rail bubble';
11001
11067
  }
11002
11068
 
11003
- .muka-chat-composer__field:focus-within {
11004
- border-color: var(--input-field-color-focus-border, var(--color-action-default));
11069
+ .muka-chat-message--own.muka-chat-message--has-avatar .muka-chat-message__row {
11070
+ grid-template-columns: minmax(0, 1fr) auto;
11071
+ grid-template-areas: 'bubble rail';
11005
11072
  }
11006
11073
 
11007
- .muka-chat-composer__input {
11008
- flex: 1 1 auto;
11009
- min-width: 0;
11010
- width: 100%;
11011
- box-sizing: border-box;
11012
- resize: none;
11013
- border: none;
11014
- background: transparent;
11015
- outline: none;
11016
- padding: 0 var(--spacing-1);
11017
- color: var(--color-text-default-default);
11018
- font-family: var(--text-body-base-regular-fontFamily);
11019
- font-weight: var(--text-body-base-regular-fontWeight);
11020
- font-size: var(--text-body-base-regular-fontSize);
11021
- line-height: var(--text-body-base-regular-lineHeight);
11022
- appearance: none;
11023
- -webkit-appearance: none;
11024
- }
11025
-
11026
- .muka-chat-composer__input::placeholder {
11027
- color: var(--color-text-subtle-default);
11028
- }
11029
-
11030
- /* Keep the in-field emoji button flush to the bottom-right as the field grows */
11031
- .muka-chat-composer__emoji {
11032
- flex-shrink: 0;
11033
- }
11034
-
11035
- /* ─── Recording bar ────────────────────────────────────── */
11036
-
11037
- .muka-chat-composer__recording {
11038
- display: flex;
11039
- flex: 1 1 auto;
11040
- min-width: 0;
11041
- box-sizing: border-box;
11042
- align-items: center;
11043
- min-height: var(--input-field-height-lg, 48px);
11044
- padding: var(--card-padding-sm);
11045
- border: var(--border-width-regular) solid var(--card-color-default-border);
11046
- border-radius: var(--radius-lg);
11047
- background-color: var(--card-color-default-background);
11048
- }
11049
-
11050
- /* ─── Staged attachments strip ─────────────────────────── */
11051
-
11052
- .muka-chat-composer__attachments-strip {
11053
- position: relative;
11054
- width: 100%;
11055
- }
11056
-
11057
- .muka-chat-composer__attachments {
11058
- display: flex;
11059
- gap: var(--spacing-3);
11060
- overflow-x: auto;
11061
- scroll-behavior: smooth;
11062
- scrollbar-width: none;
11063
- }
11064
-
11065
- .muka-chat-composer__attachments::-webkit-scrollbar {
11066
- display: none;
11067
- }
11068
-
11069
- .muka-chat-composer__overflow {
11070
- position: absolute;
11071
- top: 50%;
11072
- right: var(--spacing-2);
11073
- transform: translateY(-50%);
11074
- }
11075
-
11076
- /* ─── Print ────────────────────────────────────────────── */
11077
-
11078
- @media print {
11079
- .muka-chat-composer {
11080
- display: none;
11081
- }
11082
- }
11083
-
11084
-
11085
- /* ChatBubble */
11086
- /* ChatBubble Component Styles */
11087
-
11088
- .muka-chat-bubble {
11074
+ .muka-chat-message__rail {
11075
+ grid-area: rail;
11076
+ /* Sits on the bubble's baseline (Figma 5355:44091) */
11077
+ align-self: end;
11089
11078
  display: flex;
11090
- flex-direction: column;
11091
- width: 100%;
11092
- max-width: 100%;
11079
+ justify-content: center;
11080
+ min-width: var(--chatbubble-avatar-size);
11093
11081
  }
11094
11082
 
11095
- /* ─── Row: avatar rail + bubble + action bar ───────────────
11096
- *
11097
- * A two-row grid rather than a flex column, so the avatar bottom-aligns to the
11098
- * bubble itself and not to the action bar underneath it (Figma 5223:8520).
11083
+ /*
11084
+ * The Small size in Figma (5373:44702) halves the avatar to 32px and tightens
11085
+ * the gap to the bubble. Size the avatar itself, not just the rail, so the
11086
+ * bubbles keep their alignment. The header row keeps its own gap.
11099
11087
  */
11088
+ @media (max-width: 1023px) {
11089
+ .muka-chat-message__row {
11090
+ column-gap: var(--chatbubble-row-gap-compact);
11091
+ }
11100
11092
 
11101
- .muka-chat-bubble__row {
11102
- display: grid;
11103
- grid-template-columns: minmax(0, 1fr);
11104
- grid-template-areas:
11105
- 'bubble'
11106
- 'actions';
11107
- column-gap: var(--chatbubble-row-gap);
11108
- row-gap: var(--chatbubble-gap);
11109
- width: 100%;
11110
- }
11111
-
11112
- .muka-chat-bubble--has-avatar .muka-chat-bubble__row {
11113
- grid-template-columns: auto minmax(0, 1fr);
11114
- grid-template-areas:
11115
- 'rail bubble'
11116
- '. actions';
11117
- }
11118
-
11119
- .muka-chat-bubble--own.muka-chat-bubble--has-avatar .muka-chat-bubble__row {
11120
- grid-template-columns: minmax(0, 1fr) auto;
11121
- grid-template-areas:
11122
- 'bubble rail'
11123
- 'actions .';
11124
- }
11093
+ .muka-chat-message__rail {
11094
+ min-width: var(--chatbubble-avatar-size-compact);
11095
+ }
11125
11096
 
11126
- .muka-chat-bubble__rail {
11127
- grid-area: rail;
11128
- /* Sits on the bubble's baseline, above the action bar */
11129
- align-self: end;
11130
- display: flex;
11131
- justify-content: center;
11132
- min-width: var(--chatbubble-avatar-size);
11097
+ /* Outweighs the avatar's own size class, which sets width/height directly */
11098
+ .muka-chat-message .muka-chat-message__rail > * {
11099
+ width: var(--chatbubble-avatar-size-compact);
11100
+ height: var(--chatbubble-avatar-size-compact);
11101
+ }
11133
11102
  }
11134
11103
 
11135
11104
  /* ─── Bubble surface ───────────────────────────────────── */
11136
11105
 
11137
- .muka-chat-bubble__bubble {
11106
+ .muka-chat-message__bubble {
11138
11107
  grid-area: bubble;
11139
11108
  max-width: var(--chatbubble-max-width);
11140
11109
  position: relative;
11141
11110
  display: flex;
11142
11111
  flex-direction: column;
11143
11112
  gap: var(--chatbubble-gap);
11144
- width: 100%;
11145
- padding: var(--chatbubble-padding);
11113
+ padding: var(--chatbubble-padding-block) var(--chatbubble-padding-inline);
11146
11114
  border-radius: var(--chatbubble-radius);
11147
11115
  border: var(--border-width-regular) solid transparent;
11116
+ box-shadow: var(--shadow-level2);
11148
11117
  word-break: break-word;
11149
11118
  }
11150
11119
 
11151
- .muka-chat-bubble--own .muka-chat-bubble__bubble,
11152
- .muka-chat-bubble--own .muka-chat-bubble__actions {
11120
+ /*
11121
+ * Length axis (Figma `Text length` on 5355:44091): short messages hug their
11122
+ * content, long ones fill the row up to the shared max width.
11123
+ */
11124
+ .muka-chat-message--long .muka-chat-message__bubble {
11125
+ width: 100%;
11126
+ }
11127
+
11128
+ .muka-chat-message--short .muka-chat-message__bubble {
11129
+ width: fit-content;
11130
+ }
11131
+
11132
+ .muka-chat-message--own .muka-chat-message__bubble {
11153
11133
  justify-self: end;
11154
11134
  }
11155
11135
 
11156
- .muka-chat-bubble--own .muka-chat-bubble__bubble {
11136
+ .muka-chat-message--own .muka-chat-message__bubble {
11157
11137
  background-color: var(--chatbubble-color-own-background);
11158
11138
  border-color: var(--chatbubble-color-own-border);
11159
11139
  color: var(--chatbubble-color-own-foreground);
11160
- /* Room for the inset timestamp in the bottom-right corner */
11161
- padding-right: var(--spacing-6);
11162
11140
  }
11163
11141
 
11164
- .muka-chat-bubble--peer .muka-chat-bubble__bubble {
11142
+ .muka-chat-message--peer .muka-chat-message__bubble {
11165
11143
  background-color: var(--chatbubble-color-peer-background);
11166
11144
  border-color: var(--chatbubble-color-peer-border);
11167
11145
  color: var(--chatbubble-color-peer-foreground);
11168
- box-shadow: var(--shadow-level2);
11169
11146
  }
11170
11147
 
11171
- .muka-chat-bubble--agent .muka-chat-bubble__bubble {
11148
+ .muka-chat-message--agent .muka-chat-message__bubble {
11172
11149
  background-color: var(--chatbubble-color-agent-background);
11173
11150
  border-color: var(--chatbubble-color-agent-border);
11174
11151
  color: var(--chatbubble-color-agent-foreground);
@@ -11176,21 +11153,21 @@ button.muka-chat-photo-grid__tile:focus-visible {
11176
11153
 
11177
11154
  /* ─── Header row (author · meta · time · badge) ────────── */
11178
11155
 
11179
- .muka-chat-bubble__header {
11156
+ .muka-chat-message__header {
11180
11157
  display: flex;
11181
11158
  flex-flow: row wrap;
11182
11159
  align-items: center;
11183
11160
  gap: var(--chatbubble-row-gap);
11184
11161
  }
11185
11162
 
11186
- .muka-chat-bubble__author {
11163
+ .muka-chat-message__author {
11187
11164
  font-family: var(--text-body-base-bold-fontFamily);
11188
11165
  font-weight: var(--text-body-base-bold-fontWeight);
11189
11166
  font-size: var(--text-body-base-bold-fontSize);
11190
11167
  line-height: var(--text-body-base-bold-lineHeight);
11191
11168
  }
11192
11169
 
11193
- .muka-chat-bubble__author-meta {
11170
+ .muka-chat-message__author-meta {
11194
11171
  /* Inherits the variant's body colour from the bubble */
11195
11172
  color: inherit;
11196
11173
  font-family: var(--text-body-base-regular-fontFamily);
@@ -11199,7 +11176,7 @@ button.muka-chat-photo-grid__tile:focus-visible {
11199
11176
  line-height: var(--text-body-base-regular-lineHeight);
11200
11177
  }
11201
11178
 
11202
- .muka-chat-bubble__badge {
11179
+ .muka-chat-message__badge {
11203
11180
  display: inline-flex;
11204
11181
  align-items: center;
11205
11182
  }
@@ -11208,30 +11185,30 @@ button.muka-chat-photo-grid__tile:focus-visible {
11208
11185
  * Keep the first line of content clear of the absolutely positioned menu
11209
11186
  * button in the bubble's top-right corner.
11210
11187
  */
11211
- .muka-chat-bubble--has-menu .muka-chat-bubble__header,
11212
- .muka-chat-bubble--has-menu.muka-chat-bubble--no-header .muka-chat-bubble__message {
11213
- padding-right: var(--spacing-6);
11188
+ .muka-chat-message--has-menu .muka-chat-message__header,
11189
+ .muka-chat-message--has-menu.muka-chat-message--no-header .muka-chat-message__message {
11190
+ padding-right: var(--spacing-10);
11191
+ }
11192
+
11193
+ /* …and the last line clear of the inset timestamp in the bottom-right corner */
11194
+ .muka-chat-message--has-timestamp .muka-chat-message__message {
11195
+ padding-right: var(--spacing-10);
11214
11196
  }
11215
11197
 
11216
11198
  /* ─── Body ─────────────────────────────────────────────── */
11217
11199
 
11218
- .muka-chat-bubble__body {
11200
+ .muka-chat-message__body {
11219
11201
  display: flex;
11220
11202
  flex-direction: column;
11221
11203
  gap: var(--chatbubble-gap);
11222
11204
  min-width: 0;
11223
11205
  }
11224
11206
 
11225
- /* The agent balloon spaces its blocks further apart (Figma 5223:8520) */
11226
- .muka-chat-bubble--agent .muka-chat-bubble__body {
11227
- gap: var(--chatbubble-body-gap);
11228
- }
11229
-
11230
- .muka-chat-bubble__media {
11207
+ .muka-chat-message__media {
11231
11208
  min-width: 0;
11232
11209
  }
11233
11210
 
11234
- .muka-chat-bubble__message {
11211
+ .muka-chat-message__message {
11235
11212
  font-family: var(--text-body-base-regular-fontFamily);
11236
11213
  font-weight: var(--text-body-base-regular-fontWeight);
11237
11214
  font-size: var(--text-body-base-regular-fontSize);
@@ -11241,18 +11218,20 @@ button.muka-chat-photo-grid__tile:focus-visible {
11241
11218
  }
11242
11219
 
11243
11220
  /* Empty message block should not add a gap of its own */
11244
- .muka-chat-bubble__message:empty {
11221
+ .muka-chat-message__message:empty {
11245
11222
  display: none;
11246
11223
  }
11247
11224
 
11248
11225
  /* ─── Embedded card ────────────────────────────────────── */
11249
11226
 
11250
- .muka-chat-bubble__embed {
11227
+ .muka-chat-message__embed {
11251
11228
  position: relative;
11252
11229
  display: flex;
11253
11230
  flex-direction: column;
11254
11231
  gap: var(--chatbubble-embed-gap);
11255
- padding: var(--chatbubble-embed-padding);
11232
+ /* The card is inset from the blocks above and below it (Figma 5289:40562) */
11233
+ margin-block: var(--chatbubble-embed-margin-block);
11234
+ padding: var(--chatbubble-embed-padding-block) var(--chatbubble-embed-padding-inline);
11256
11235
  border-radius: var(--chatbubble-embed-radius);
11257
11236
  border: var(--border-width-regular) solid transparent;
11258
11237
  }
@@ -11261,127 +11240,135 @@ button.muka-chat-photo-grid__tile:focus-visible {
11261
11240
  * The embed sits on the raised surface of its author's role, one step apart
11262
11241
  * from the bubble it is nested in, and reuses that role's border colour.
11263
11242
  */
11264
- .muka-chat-bubble--own .muka-chat-bubble__embed {
11243
+ .muka-chat-message--own .muka-chat-message__embed {
11265
11244
  background-color: var(--chatbubble-embed-color-own-background);
11266
11245
  border-color: var(--chatbubble-embed-color-own-border);
11267
11246
  color: var(--chatbubble-embed-color-own-foreground);
11268
11247
  }
11269
11248
 
11270
- .muka-chat-bubble--peer .muka-chat-bubble__embed {
11249
+ .muka-chat-message--peer .muka-chat-message__embed {
11271
11250
  background-color: var(--chatbubble-embed-color-peer-background);
11272
11251
  border-color: var(--chatbubble-embed-color-peer-border);
11273
11252
  color: var(--chatbubble-embed-color-peer-foreground);
11274
11253
  }
11275
11254
 
11276
- .muka-chat-bubble--agent .muka-chat-bubble__embed {
11255
+ .muka-chat-message--agent .muka-chat-message__embed {
11277
11256
  background-color: var(--chatbubble-embed-color-agent-background);
11278
11257
  border-color: var(--chatbubble-embed-color-agent-border);
11279
11258
  color: var(--chatbubble-embed-color-agent-foreground);
11280
11259
  }
11281
11260
 
11282
- .muka-chat-bubble__embed-content {
11261
+ .muka-chat-message__embed-content {
11283
11262
  display: flex;
11284
11263
  flex-direction: column;
11285
11264
  gap: var(--chatbubble-embed-gap);
11286
11265
  min-width: 0;
11287
11266
  }
11288
11267
 
11289
- .muka-chat-bubble__embed-copy {
11268
+ .muka-chat-message__embed-copy {
11290
11269
  position: absolute;
11291
- top: var(--chatbubble-embed-padding);
11292
- right: var(--chatbubble-embed-padding);
11270
+ top: var(--chatbubble-embed-padding-block);
11271
+ right: var(--chatbubble-embed-padding-inline);
11293
11272
  }
11294
11273
 
11295
11274
  /* ─── Stacked full-width action buttons ────────────────── */
11296
11275
 
11297
- .muka-chat-bubble__action-stack {
11276
+ .muka-chat-message__action-stack {
11298
11277
  display: flex;
11299
11278
  flex-direction: column;
11300
11279
  gap: var(--chatbubble-action-stack-gap);
11301
11280
  }
11302
11281
 
11303
- /* ─── Inset timestamp (user variant) ───────────────────── */
11282
+ /* ─── Inset timestamp ──────────────────────────────────── */
11283
+
11284
+ /*
11285
+ * Every author puts its timestamp in the bubble's bottom-right corner, below
11286
+ * the message — never in the header row (Figma 5355:44091).
11287
+ */
11304
11288
 
11305
- .muka-chat-bubble__timestamp {
11289
+ .muka-chat-message__timestamp {
11306
11290
  color: var(--chatbubble-color-timestamp);
11307
- font-family: var(--text-body-sm-regular-fontFamily);
11308
- font-weight: var(--text-body-sm-regular-fontWeight);
11309
- font-size: var(--text-body-sm-regular-fontSize);
11310
- line-height: var(--text-body-sm-regular-lineHeight);
11291
+ font-family: var(--text-body-xs-regular-fontFamily);
11292
+ font-weight: var(--text-body-xs-regular-fontWeight);
11293
+ font-size: var(--text-body-xs-regular-fontSize);
11294
+ line-height: var(--text-body-xs-regular-lineHeight);
11311
11295
  white-space: nowrap;
11312
11296
  }
11313
11297
 
11314
- .muka-chat-bubble__timestamp--inset {
11315
- align-self: flex-end;
11298
+ /*
11299
+ * Pinned to the corner rather than stacked below the message, so a one-line
11300
+ * message stays one line tall. The message reserves the width it needs.
11301
+ */
11302
+ .muka-chat-message__timestamp--inset {
11303
+ position: absolute;
11304
+ right: var(--spacing-2);
11305
+ bottom: var(--spacing-1);
11306
+ }
11307
+
11308
+ /*
11309
+ * Media, an embed or an action stack run the full width of the bubble, so the
11310
+ * corner the timestamp sits in has to be cleared for it.
11311
+ */
11312
+ .muka-chat-message--has-timestamp.muka-chat-message--has-blocks .muka-chat-message__body {
11313
+ padding-bottom: var(--text-body-xs-regular-lineHeight);
11316
11314
  }
11317
11315
 
11318
11316
  /* ─── Menu affordance ──────────────────────────────────── */
11319
11317
 
11320
- .muka-chat-bubble__menu {
11318
+ /*
11319
+ * Hidden at rest. Revealed on hover on pointer devices, on keyboard focus
11320
+ * everywhere, and pinned while its menu is open. On touch the equivalent
11321
+ * affordance is a long-press on the bubble, which opens an ActionSheet.
11322
+ */
11323
+ .muka-chat-message__menu {
11321
11324
  position: absolute;
11322
11325
  top: var(--spacing-1);
11323
11326
  right: var(--spacing-1);
11327
+ opacity: 0;
11328
+ pointer-events: none;
11324
11329
  }
11325
11330
 
11326
- /* ─── Meta action row (below the bubble) ───────────────── */
11327
-
11328
- .muka-chat-bubble__actions {
11329
- grid-area: actions;
11330
- max-width: var(--chatbubble-max-width);
11331
- display: flex;
11332
- align-items: center;
11333
- gap: 0;
11334
- }
11335
-
11336
- .muka-chat-bubble--own .muka-chat-bubble__actions,
11337
- .muka-chat-bubble--agent .muka-chat-bubble__actions {
11338
- justify-content: flex-end;
11331
+ .muka-chat-message__menu:focus-within,
11332
+ .muka-chat-message--menu-open .muka-chat-message__menu {
11333
+ opacity: 1;
11334
+ pointer-events: auto;
11339
11335
  }
11340
11336
 
11341
- /*
11342
- * The meta row uses 32px icon buttons per the design. Expand the pointer/touch
11343
- * target to the 44px WCAG 2.1 AA minimum without changing the visual size.
11344
- */
11345
- .muka-chat-bubble__actions .muka-button--icon-only {
11346
- position: relative;
11337
+ @media (hover: hover) and (pointer: fine) and (min-width: 1024px) {
11338
+ .muka-chat-message__bubble:hover .muka-chat-message__menu {
11339
+ opacity: 1;
11340
+ pointer-events: auto;
11341
+ }
11347
11342
  }
11348
11343
 
11349
- .muka-chat-bubble__actions .muka-button--icon-only::after {
11350
- content: '';
11351
- position: absolute;
11352
- top: 50%;
11353
- left: 50%;
11354
- width: 44px;
11355
- height: 44px;
11356
- transform: translate(-50%, -50%);
11344
+ /* Suppress iOS Safari's own callout so the long-press sheet can take over */
11345
+ @media (pointer: coarse) {
11346
+ .muka-chat-message--has-menu .muka-chat-message__bubble {
11347
+ -webkit-touch-callout: none;
11348
+ }
11357
11349
  }
11358
11350
 
11359
11351
  /* ─── Print ────────────────────────────────────────────── */
11360
11352
 
11361
11353
  @media print {
11362
- .muka-chat-bubble__bubble {
11354
+ .muka-chat-message__bubble {
11363
11355
  box-shadow: none;
11364
11356
  break-inside: avoid;
11365
11357
  print-color-adjust: exact;
11366
11358
  -webkit-print-color-adjust: exact;
11367
11359
  }
11368
11360
 
11369
- .muka-chat-bubble__embed {
11361
+ .muka-chat-message__embed {
11370
11362
  break-inside: avoid;
11371
11363
  print-color-adjust: exact;
11372
11364
  -webkit-print-color-adjust: exact;
11373
11365
  }
11374
11366
 
11375
- .muka-chat-bubble__menu,
11376
- .muka-chat-bubble__actions,
11377
- .muka-chat-bubble__embed-copy,
11378
- .muka-chat-bubble__action-stack {
11367
+ .muka-chat-message__menu,
11368
+ .muka-chat-message__embed-copy,
11369
+ .muka-chat-message__action-stack {
11379
11370
  display: none;
11380
11371
  }
11381
-
11382
- .muka-chat-bubble__column {
11383
- max-width: 100%;
11384
- }
11385
11372
  }
11386
11373
 
11387
11374
 
@@ -11652,400 +11639,213 @@ button.muka-chat-photo-grid__tile:focus-visible {
11652
11639
  }
11653
11640
 
11654
11641
 
11655
- /* Button */
11656
- /* Button Component Styles - Using Muka Design Tokens */
11657
-
11658
- /* Base button styles */
11659
- .muka-button {
11660
- /* Layout */
11661
- display: inline-flex;
11662
- align-items: center;
11663
- justify-content: center;
11642
+ /* ChatComposer */
11643
+ /* ChatComposer Component Styles */
11664
11644
 
11665
- /* Typography - using semantic tokens */
11666
- font-family: var(--alias-font-brand-family);
11667
- font-weight: var(--alias-font-brand-weight-semibold);
11668
- text-decoration: none;
11669
-
11670
- /* Interaction */
11671
- border: none;
11672
- cursor: pointer;
11673
- user-select: none;
11674
- transition: all 0.2s ease;
11675
-
11676
- /* Accessibility */
11677
- outline: none;
11678
- position: relative;
11645
+ /*
11646
+ * The composer is a bare, fill-width row: no padding, background, border or
11647
+ * max-width of its own (Figma 5243:14141). Whatever hosts it owns the
11648
+ * container — see BottomBar's `chat` variant.
11649
+ */
11650
+ .muka-chat-composer {
11651
+ display: flex;
11652
+ flex-direction: column;
11653
+ gap: var(--spacing-3);
11654
+ width: 100%;
11679
11655
  }
11680
11656
 
11681
- /* Focus styles for accessibility */
11682
- .muka-button:focus-visible {
11683
- outline: 2px solid var(--color-border-focus);
11684
- outline-offset: 2px;
11657
+ .muka-chat-composer--disabled {
11658
+ opacity: 0.6;
11659
+ pointer-events: none;
11685
11660
  }
11686
11661
 
11687
- /* Size variants
11688
- Height is driven by min-height; vertical padding is 0 and the label carries
11689
- tight (Figma) line-height. Horizontal spacing matches Figma's nested model:
11690
- the button's padding is the outer container inset, and the label's own
11691
- padding is the icon-to-text gap (so text-only buttons keep both insets). */
11692
- .muka-button--sm {
11693
- padding: 0 var(--button-padding-sm-x);
11694
- border-radius: var(--button-radius-sm);
11695
- font-size: var(--text-label-sm-semibold-fontSize);
11696
- line-height: var(--text-label-sm-semibold-lineHeight);
11697
- min-height: 32px;
11698
- }
11662
+ /* ─── Input row ────────────────────────────────────────── */
11699
11663
 
11700
- .muka-button--sm .muka-button__label {
11701
- padding: 0 var(--button-gap-sm);
11664
+ .muka-chat-composer__row {
11665
+ display: flex;
11666
+ width: 100%;
11667
+ align-items: flex-end;
11668
+ gap: var(--spacing-3);
11702
11669
  }
11703
11670
 
11704
- .muka-button--md {
11705
- padding: 0 var(--button-padding-md-x);
11706
- border-radius: var(--button-radius-md);
11707
- font-size: var(--text-label-sm-semibold-fontSize);
11708
- line-height: var(--text-label-sm-semibold-lineHeight);
11709
- min-height: 40px;
11710
- }
11671
+ /* ─── Text field ───────────────────────────────────────── */
11711
11672
 
11712
- .muka-button--md .muka-button__label {
11713
- padding: 0 var(--button-gap-md);
11673
+ .muka-chat-composer__field {
11674
+ display: flex;
11675
+ flex: 1 1 auto;
11676
+ min-width: 0;
11677
+ box-sizing: border-box;
11678
+ align-items: center;
11679
+ gap: var(--spacing-1);
11680
+ min-height: var(--input-field-height-lg, 48px);
11681
+ padding: 0 var(--spacing-2);
11682
+ border: var(--border-width-regular) solid var(--input-field-color-default-border);
11683
+ border-radius: var(--input-field-radius-lg);
11684
+ background-color: var(--input-field-color-default-background);
11685
+ transition: border-color 0.12s ease;
11714
11686
  }
11715
11687
 
11716
- .muka-button--lg {
11717
- padding: 0 var(--button-padding-lg-x);
11718
- border-radius: var(--button-radius-lg);
11719
- font-size: var(--text-label-lg-semibold-fontSize);
11720
- line-height: var(--text-label-lg-semibold-lineHeight);
11721
- min-height: 48px;
11688
+ .muka-chat-composer__field:focus-within {
11689
+ border-color: var(--input-field-color-focus-border, var(--color-action-default));
11722
11690
  }
11723
11691
 
11724
- .muka-button--lg .muka-button__label {
11725
- padding: 0 var(--button-gap-lg);
11692
+ .muka-chat-composer__input {
11693
+ flex: 1 1 auto;
11694
+ min-width: 0;
11695
+ width: 100%;
11696
+ box-sizing: border-box;
11697
+ resize: none;
11698
+ border: none;
11699
+ background: transparent;
11700
+ outline: none;
11701
+ padding: 0 var(--spacing-1);
11702
+ color: var(--color-text-default-default);
11703
+ font-family: var(--text-body-base-regular-fontFamily);
11704
+ font-weight: var(--text-body-base-regular-fontWeight);
11705
+ font-size: var(--text-body-base-regular-fontSize);
11706
+ line-height: var(--text-body-base-regular-lineHeight);
11707
+ appearance: none;
11708
+ -webkit-appearance: none;
11726
11709
  }
11727
11710
 
11728
- .muka-button--xl {
11729
- padding: 0 var(--button-padding-xl-x);
11730
- border-radius: var(--button-radius-xl);
11731
- font-size: var(--text-label-2xl-semibold-fontSize);
11732
- line-height: var(--text-label-2xl-semibold-lineHeight);
11733
- min-height: 64px;
11711
+ .muka-chat-composer__input::placeholder {
11712
+ color: var(--color-text-subtle-default);
11734
11713
  }
11735
11714
 
11736
- .muka-button--xl .muka-button__label {
11737
- padding: 0 var(--button-gap-xl);
11715
+ /* Keep the in-field emoji button flush to the bottom-right as the field grows */
11716
+ .muka-chat-composer__emoji {
11717
+ flex-shrink: 0;
11738
11718
  }
11739
11719
 
11740
- /* Primary variant - your main CTA button */
11741
- .muka-button--primary {
11742
- background-color: var(--button-color-primary-background-default);
11743
- color: var(--button-color-primary-foreground-default);
11744
- box-shadow: var(--button-color-primary-shadow-default);
11745
- }
11720
+ /* ─── Recording bar ────────────────────────────────────── */
11746
11721
 
11747
- .muka-button--primary:hover:not(:disabled) {
11748
- background-color: var(--button-color-primary-background-hover);
11749
- color: var(--button-color-primary-foreground-hover);
11750
- box-shadow: var(--button-color-primary-shadow-hover);
11722
+ .muka-chat-composer__recording {
11723
+ display: flex;
11724
+ flex: 1 1 auto;
11725
+ min-width: 0;
11726
+ box-sizing: border-box;
11727
+ align-items: center;
11728
+ min-height: var(--input-field-height-lg, 48px);
11729
+ padding: var(--card-padding-sm);
11730
+ border: var(--border-width-regular) solid var(--card-color-default-border);
11731
+ border-radius: var(--radius-lg);
11732
+ background-color: var(--card-color-default-background);
11751
11733
  }
11752
11734
 
11753
- /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
11754
- trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
11755
- gives toggle buttons a visible selected state, so the toggle is not conveyed
11756
- to sighted users by the accessibility tree alone. */
11757
- .muka-button--primary:active:not(:disabled),
11758
- .muka-button--primary.muka-button--pressed:not(:disabled),
11759
- .muka-button--primary[data-state="open"]:not(:disabled),
11760
- .muka-button--primary[aria-pressed="true"]:not(:disabled) {
11761
- background-color: var(--button-color-primary-background-pressed);
11762
- color: var(--button-color-primary-foreground-pressed);
11763
- box-shadow: var(--button-color-primary-shadow-pressed);
11764
- }
11735
+ /* ─── Staged attachments strip ─────────────────────────── */
11765
11736
 
11766
- .muka-button--primary:disabled {
11767
- background-color: var(--button-color-primary-background-disabled);
11768
- color: var(--button-color-primary-foreground-disabled);
11769
- box-shadow: var(--button-color-primary-shadow-disabled);
11770
- cursor: not-allowed;
11771
- opacity: 1; /* Remove opacity since we have proper disabled tokens */
11737
+ .muka-chat-composer__attachments-strip {
11738
+ position: relative;
11739
+ width: 100%;
11772
11740
  }
11773
11741
 
11774
- /* Secondary variant - supporting actions, no border, only bottom inner shadow */
11775
- .muka-button--secondary {
11776
- background-color: var(--button-color-secondary-background-default);
11777
- color: var(--button-color-secondary-foreground-default);
11778
- box-shadow: var(--button-color-secondary-shadow-default);
11742
+ .muka-chat-composer__attachments {
11743
+ display: flex;
11744
+ gap: var(--spacing-3);
11745
+ overflow-x: auto;
11746
+ scroll-behavior: smooth;
11747
+ scrollbar-width: none;
11779
11748
  }
11780
11749
 
11781
- .muka-button--secondary:hover:not(:disabled) {
11782
- background-color: var(--button-color-secondary-background-hover);
11783
- color: var(--button-color-secondary-foreground-hover);
11784
- box-shadow: var(--button-color-secondary-shadow-hover);
11750
+ .muka-chat-composer__attachments::-webkit-scrollbar {
11751
+ display: none;
11785
11752
  }
11786
11753
 
11787
- .muka-button--secondary:active:not(:disabled),
11788
- .muka-button--secondary.muka-button--pressed:not(:disabled),
11789
- .muka-button--secondary[data-state="open"]:not(:disabled),
11790
- .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
11791
- background-color: var(--button-color-secondary-background-pressed);
11792
- color: var(--button-color-secondary-foreground-pressed);
11793
- box-shadow: var(--button-color-secondary-shadow-pressed);
11754
+ .muka-chat-composer__overflow {
11755
+ position: absolute;
11756
+ top: 50%;
11757
+ right: var(--spacing-2);
11758
+ transform: translateY(-50%);
11794
11759
  }
11795
11760
 
11796
- .muka-button--secondary:disabled {
11797
- background-color: var(--button-color-secondary-background-disabled);
11798
- color: var(--button-color-secondary-foreground-disabled);
11799
- box-shadow: var(--button-color-secondary-shadow-disabled);
11800
- cursor: not-allowed;
11801
- opacity: 1;
11802
- }
11761
+ /* ─── Print ────────────────────────────────────────────── */
11803
11762
 
11804
- /* Tertiary variant - tinted background with accent text and border */
11805
- .muka-button--tertiary {
11806
- background-color: var(--button-color-tertiary-background-default);
11807
- color: var(--button-color-tertiary-foreground-default);
11808
- border: 1px solid var(--button-color-tertiary-border-default);
11763
+ @media print {
11764
+ .muka-chat-composer {
11765
+ display: none;
11766
+ }
11809
11767
  }
11810
11768
 
11811
- .muka-button--tertiary:hover:not(:disabled) {
11812
- background-color: var(--button-color-tertiary-background-hover);
11813
- color: var(--button-color-tertiary-foreground-hover);
11814
- border-color: var(--button-color-tertiary-border-hover);
11815
- }
11816
11769
 
11817
- .muka-button--tertiary:active:not(:disabled),
11818
- .muka-button--tertiary.muka-button--pressed:not(:disabled),
11819
- .muka-button--tertiary[data-state="open"]:not(:disabled),
11820
- .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
11821
- background-color: var(--button-color-tertiary-background-pressed);
11822
- color: var(--button-color-tertiary-foreground-pressed);
11823
- border-color: var(--button-color-tertiary-border-pressed);
11770
+ /* Breadcrumb */
11771
+ /* Breadcrumb Component Styles */
11772
+
11773
+ .muka-breadcrumb__list {
11774
+ display: flex;
11775
+ align-items: center;
11776
+ flex-wrap: wrap;
11777
+ list-style: none;
11778
+ margin: 0;
11779
+ padding: 0;
11780
+ gap: var(--spacing-1);
11824
11781
  }
11825
11782
 
11826
- .muka-button--tertiary:disabled {
11827
- background-color: var(--button-color-tertiary-background-disabled);
11828
- color: var(--button-color-tertiary-foreground-disabled);
11829
- border-color: var(--button-color-tertiary-border-disabled);
11830
- cursor: not-allowed;
11831
- opacity: 1;
11783
+ .muka-breadcrumb__item {
11784
+ display: inline-flex;
11785
+ align-items: center;
11786
+ gap: var(--spacing-1);
11832
11787
  }
11833
11788
 
11834
- /* Ghost variant - minimal styling, border appears on hover */
11835
- .muka-button--ghost {
11836
- background-color: var(--button-color-ghost-background-default);
11837
- color: var(--button-color-ghost-foreground-default);
11838
- border: 1px solid var(--button-color-ghost-border-default);
11789
+ .muka-breadcrumb__icon {
11790
+ display: inline-flex;
11791
+ align-items: center;
11792
+ color: var(--color-text-subtle-default);
11839
11793
  }
11840
11794
 
11841
- .muka-button--ghost:hover:not(:disabled) {
11842
- background-color: var(--button-color-ghost-background-hover);
11843
- color: var(--button-color-ghost-foreground-hover);
11844
- border-color: var(--button-color-ghost-border-hover);
11795
+ /* Link styles */
11796
+ .muka-breadcrumb__link {
11797
+ color: var(--color-text-subtle-default);
11798
+ text-decoration: none;
11799
+ border: none;
11800
+ background: none;
11801
+ padding: 0;
11802
+ cursor: pointer;
11803
+ font: inherit;
11804
+ transition: color 0.15s ease;
11845
11805
  }
11846
11806
 
11847
- .muka-button--ghost:active:not(:disabled),
11848
- .muka-button--ghost.muka-button--pressed:not(:disabled),
11849
- .muka-button--ghost[data-state="open"]:not(:disabled),
11850
- .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
11851
- background-color: var(--button-color-ghost-background-pressed);
11852
- color: var(--button-color-ghost-foreground-pressed);
11853
- border-color: var(--button-color-ghost-border-pressed);
11807
+ .muka-breadcrumb__link:hover {
11808
+ color: var(--color-text-action-default);
11809
+ text-decoration: underline;
11854
11810
  }
11855
11811
 
11856
- .muka-button--ghost:disabled {
11857
- background-color: var(--button-color-ghost-background-disabled);
11858
- color: var(--button-color-ghost-foreground-disabled);
11859
- border-color: var(--button-color-ghost-border-disabled);
11860
- cursor: not-allowed;
11861
- opacity: 1;
11812
+ /* Current page (last item) */
11813
+ .muka-breadcrumb__current {
11814
+ color: var(--color-text-default-default);
11815
+ font-weight: 600;
11862
11816
  }
11863
11817
 
11864
- /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
11865
- .muka-button--muted {
11866
- background-color: var(--button-color-muted-background-default);
11867
- color: var(--button-color-muted-foreground-default);
11868
- border: 1px solid var(--button-color-muted-border-default);
11818
+ /* Separator */
11819
+ .muka-breadcrumb__separator {
11820
+ color: var(--color-text-subtle-default);
11821
+ user-select: none;
11869
11822
  }
11870
11823
 
11871
- .muka-button--muted:hover:not(:disabled) {
11872
- background-color: var(--button-color-muted-background-hover);
11873
- color: var(--button-color-muted-foreground-hover);
11874
- border-color: var(--button-color-muted-border-hover);
11824
+ /* Ellipsis */
11825
+ .muka-breadcrumb__ellipsis {
11826
+ color: var(--color-text-subtle-default);
11875
11827
  }
11876
11828
 
11877
- .muka-button--muted:active:not(:disabled),
11878
- .muka-button--muted.muka-button--pressed:not(:disabled),
11879
- .muka-button--muted[data-state="open"]:not(:disabled),
11880
- .muka-button--muted[aria-pressed="true"]:not(:disabled) {
11881
- background-color: var(--button-color-muted-background-pressed);
11882
- color: var(--button-color-muted-foreground-pressed);
11883
- border-color: var(--button-color-muted-border-pressed);
11829
+ /* Size variants */
11830
+ .muka-breadcrumb--sm {
11831
+ font-family: var(--text-label-sm-regular-fontFamily);
11832
+ font-weight: var(--text-label-sm-regular-fontWeight);
11833
+ font-size: var(--text-label-sm-regular-fontSize);
11834
+ line-height: var(--text-label-sm-regular-lineHeight);
11884
11835
  }
11885
11836
 
11886
- .muka-button--muted:disabled {
11887
- background-color: var(--button-color-muted-background-disabled);
11888
- color: var(--button-color-muted-foreground-disabled);
11889
- border-color: var(--button-color-muted-border-disabled);
11890
- cursor: not-allowed;
11891
- opacity: 1;
11837
+ .muka-breadcrumb--md {
11838
+ font-family: var(--text-label-md-regular-fontFamily);
11839
+ font-weight: var(--text-label-md-regular-fontWeight);
11840
+ font-size: var(--text-label-md-regular-fontSize);
11841
+ line-height: var(--text-label-md-regular-lineHeight);
11892
11842
  }
11893
11843
 
11894
- /* General disabled state - fallback */
11895
- .muka-button:disabled {
11896
- cursor: not-allowed;
11897
- pointer-events: none;
11898
- }
11899
-
11900
- /* Full width modifier */
11901
- .muka-button--full-width {
11902
- width: 100%;
11903
- }
11904
-
11905
- /* Icons - forced to the Figma per-size dimension regardless of the icon passed */
11906
- .muka-button__icon {
11907
- display: inline-flex;
11908
- align-items: center;
11909
- justify-content: center;
11910
- flex-shrink: 0;
11911
- }
11912
-
11913
- /* Make the icon content (raw <svg> or a nested Icon span) fill the wrapper.
11914
- Scoped under .muka-button to outrank Icon.css's own `.muka-icon--{size}`
11915
- rule, so the button's size wins even when the icon hardcodes its own size. */
11916
- .muka-button .muka-button__icon > *,
11917
- .muka-button .muka-button__icon svg {
11918
- width: 100%;
11919
- height: 100%;
11920
- display: block;
11921
- }
11922
-
11923
- .muka-button--sm .muka-button__icon {
11924
- width: var(--button-icon-sm);
11925
- height: var(--button-icon-sm);
11926
- }
11927
-
11928
- .muka-button--md .muka-button__icon {
11929
- width: var(--button-icon-md);
11930
- height: var(--button-icon-md);
11931
- }
11932
-
11933
- .muka-button--lg .muka-button__icon {
11934
- width: var(--button-icon-lg);
11935
- height: var(--button-icon-lg);
11936
- }
11937
-
11938
- .muka-button--xl .muka-button__icon {
11939
- width: var(--button-icon-xl);
11940
- height: var(--button-icon-xl);
11941
- }
11942
-
11943
- .muka-button__label {
11944
- display: inline-flex;
11945
- align-items: center;
11946
- }
11947
-
11948
- /* Icon-only buttons - square, sized to the button height per size */
11949
- .muka-button--icon-only {
11950
- padding: 0;
11951
- }
11952
-
11953
- .muka-button--icon-only.muka-button--sm {
11954
- width: 32px;
11955
- }
11956
-
11957
- .muka-button--icon-only.muka-button--md {
11958
- width: 40px;
11959
- }
11960
-
11961
- .muka-button--icon-only.muka-button--lg {
11962
- width: 48px;
11963
- }
11964
-
11965
- .muka-button--icon-only.muka-button--xl {
11966
- width: 64px;
11967
- }
11968
-
11969
-
11970
- /* Breadcrumb */
11971
- /* Breadcrumb Component Styles */
11972
-
11973
- .muka-breadcrumb__list {
11974
- display: flex;
11975
- align-items: center;
11976
- flex-wrap: wrap;
11977
- list-style: none;
11978
- margin: 0;
11979
- padding: 0;
11980
- gap: var(--spacing-1);
11981
- }
11982
-
11983
- .muka-breadcrumb__item {
11984
- display: inline-flex;
11985
- align-items: center;
11986
- gap: var(--spacing-1);
11987
- }
11988
-
11989
- .muka-breadcrumb__icon {
11990
- display: inline-flex;
11991
- align-items: center;
11992
- color: var(--color-text-subtle-default);
11993
- }
11994
-
11995
- /* Link styles */
11996
- .muka-breadcrumb__link {
11997
- color: var(--color-text-subtle-default);
11998
- text-decoration: none;
11999
- border: none;
12000
- background: none;
12001
- padding: 0;
12002
- cursor: pointer;
12003
- font: inherit;
12004
- transition: color 0.15s ease;
12005
- }
12006
-
12007
- .muka-breadcrumb__link:hover {
12008
- color: var(--color-text-action-default);
12009
- text-decoration: underline;
12010
- }
12011
-
12012
- /* Current page (last item) */
12013
- .muka-breadcrumb__current {
12014
- color: var(--color-text-default-default);
12015
- font-weight: 600;
12016
- }
12017
-
12018
- /* Separator */
12019
- .muka-breadcrumb__separator {
12020
- color: var(--color-text-subtle-default);
12021
- user-select: none;
12022
- }
12023
-
12024
- /* Ellipsis */
12025
- .muka-breadcrumb__ellipsis {
12026
- color: var(--color-text-subtle-default);
12027
- }
12028
-
12029
- /* Size variants */
12030
- .muka-breadcrumb--sm {
12031
- font-family: var(--text-label-sm-regular-fontFamily);
12032
- font-weight: var(--text-label-sm-regular-fontWeight);
12033
- font-size: var(--text-label-sm-regular-fontSize);
12034
- line-height: var(--text-label-sm-regular-lineHeight);
12035
- }
12036
-
12037
- .muka-breadcrumb--md {
12038
- font-family: var(--text-label-md-regular-fontFamily);
12039
- font-weight: var(--text-label-md-regular-fontWeight);
12040
- font-size: var(--text-label-md-regular-fontSize);
12041
- line-height: var(--text-label-md-regular-lineHeight);
12042
- }
12043
-
12044
- .muka-breadcrumb--lg {
12045
- font-family: var(--text-label-lg-regular-fontFamily);
12046
- font-weight: var(--text-label-lg-regular-fontWeight);
12047
- font-size: var(--text-label-lg-regular-fontSize);
12048
- line-height: var(--text-label-lg-regular-lineHeight);
11844
+ .muka-breadcrumb--lg {
11845
+ font-family: var(--text-label-lg-regular-fontFamily);
11846
+ font-weight: var(--text-label-lg-regular-fontWeight);
11847
+ font-size: var(--text-label-lg-regular-fontSize);
11848
+ line-height: var(--text-label-lg-regular-lineHeight);
12049
11849
  }
12050
11850
 
12051
11851
 
@@ -12353,12 +12153,13 @@ button.muka-chat-photo-grid__tile:focus-visible {
12353
12153
  }
12354
12154
 
12355
12155
 
12356
- /* Badge */
12357
- /* Badge Component Styles - Using Muka Design Tokens */
12156
+ /* BadgeNumber */
12157
+ /* BadgeNumber Component Styles - Using Muka Design Tokens */
12358
12158
 
12359
- .muka-badge {
12159
+ .muka-badge-number {
12360
12160
  display: inline-flex;
12361
12161
  align-items: center;
12162
+ justify-content: center;
12362
12163
  border-radius: var(--border-radius-full);
12363
12164
  white-space: nowrap;
12364
12165
  user-select: none;
@@ -12366,174 +12167,412 @@ button.muka-chat-photo-grid__tile:focus-visible {
12366
12167
  }
12367
12168
 
12368
12169
  /*
12369
- * Sizes — height, gap, type, and default (label-edge) horizontal padding.
12370
- * Mirrors Chip so the two components share sizing, fonts, and spacing.
12371
- * Vertical centering is handled by the fixed height + align-items: center.
12372
- * The leading side gets a tighter padding when an icon/dot is present, via the
12373
- * --has-icon / --has-dot modifiers below.
12170
+ * Sizes — fixed height, matching min-width (so a single digit renders as a
12171
+ * circle), horizontal padding, and bold label typography. Vertical centering
12172
+ * is handled by the fixed height + align-items: center.
12374
12173
  */
12375
- .muka-badge--sm {
12376
- height: var(--badge-size-height-sm);
12377
- gap: var(--badge-gap-sm);
12378
- padding: 0 var(--badge-padding-label-sm);
12379
- font-family: var(--text-label-sm-regular-fontFamily);
12380
- font-weight: var(--text-label-sm-regular-fontWeight);
12381
- font-size: var(--text-label-sm-regular-fontSize);
12382
- line-height: var(--text-label-sm-regular-lineHeight);
12174
+ .muka-badge-number--2xs {
12175
+ height: var(--badge-number-size-2xs);
12176
+ min-width: var(--badge-number-size-2xs);
12177
+ padding: 0 var(--badge-number-padding-2xs);
12178
+ font-family: var(--text-label-xs-bold-fontFamily);
12179
+ font-weight: var(--text-label-xs-bold-fontWeight);
12180
+ font-size: var(--text-label-xs-bold-fontSize);
12181
+ line-height: var(--text-label-xs-bold-lineHeight);
12182
+ }
12183
+
12184
+ .muka-badge-number--xs {
12185
+ height: var(--badge-number-size-xs);
12186
+ min-width: var(--badge-number-size-xs);
12187
+ padding: 0 var(--badge-number-padding-xs);
12188
+ font-family: var(--text-label-sm-bold-fontFamily);
12189
+ font-weight: var(--text-label-sm-bold-fontWeight);
12190
+ font-size: var(--text-label-sm-bold-fontSize);
12191
+ line-height: var(--text-label-sm-bold-lineHeight);
12383
12192
  }
12384
12193
 
12385
- .muka-badge--md {
12386
- height: var(--badge-size-height-md);
12387
- gap: var(--badge-gap-md);
12388
- padding: 0 var(--badge-padding-label-md);
12389
- font-family: var(--text-label-md-regular-fontFamily);
12390
- font-weight: var(--text-label-md-regular-fontWeight);
12391
- font-size: var(--text-label-md-regular-fontSize);
12392
- line-height: var(--text-label-md-regular-lineHeight);
12194
+ .muka-badge-number--sm {
12195
+ height: var(--badge-number-size-sm);
12196
+ min-width: var(--badge-number-size-sm);
12197
+ padding: 0 var(--badge-number-padding-sm);
12198
+ font-family: var(--text-label-md-bold-fontFamily);
12199
+ font-weight: var(--text-label-md-bold-fontWeight);
12200
+ font-size: var(--text-label-md-bold-fontSize);
12201
+ line-height: var(--text-label-md-bold-lineHeight);
12393
12202
  }
12394
12203
 
12395
- .muka-badge--lg {
12396
- height: var(--badge-size-height-lg);
12397
- gap: var(--badge-gap-lg);
12398
- padding: 0 var(--badge-padding-label-lg);
12399
- font-family: var(--text-label-lg-regular-fontFamily);
12400
- font-weight: var(--text-label-lg-regular-fontWeight);
12401
- font-size: var(--text-label-lg-regular-fontSize);
12402
- line-height: var(--text-label-lg-regular-lineHeight);
12204
+ .muka-badge-number--md {
12205
+ height: var(--badge-number-size-md);
12206
+ min-width: var(--badge-number-size-md);
12207
+ padding: 0 var(--badge-number-padding-md);
12208
+ font-family: var(--text-label-lg-bold-fontFamily);
12209
+ font-weight: var(--text-label-lg-bold-fontWeight);
12210
+ font-size: var(--text-label-lg-bold-fontSize);
12211
+ line-height: var(--text-label-lg-bold-lineHeight);
12403
12212
  }
12404
12213
 
12405
- /* Tighter leading padding when a leading icon or dot is present */
12406
- .muka-badge--sm.muka-badge--has-icon,
12407
- .muka-badge--sm.muka-badge--has-dot {
12408
- padding-left: var(--badge-padding-leading-sm);
12409
- }
12410
- .muka-badge--md.muka-badge--has-icon,
12411
- .muka-badge--md.muka-badge--has-dot {
12412
- padding-left: var(--badge-padding-leading-md);
12413
- }
12414
- .muka-badge--lg.muka-badge--has-icon,
12415
- .muka-badge--lg.muka-badge--has-dot {
12416
- padding-left: var(--badge-padding-leading-lg);
12214
+ .muka-badge-number--lg {
12215
+ height: var(--badge-number-size-lg);
12216
+ min-width: var(--badge-number-size-lg);
12217
+ padding: 0 var(--badge-number-padding-lg);
12218
+ font-family: var(--text-label-2xl-bold-fontFamily);
12219
+ font-weight: var(--text-label-2xl-bold-fontWeight);
12220
+ font-size: var(--text-label-2xl-bold-fontSize);
12221
+ line-height: var(--text-label-2xl-bold-lineHeight);
12417
12222
  }
12418
12223
 
12419
- /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
12420
- .muka-badge__icon {
12421
- display: inline-flex;
12422
- align-items: center;
12423
- justify-content: center;
12424
- flex-shrink: 0;
12224
+ .muka-badge-number__label {
12225
+ /*
12226
+ * The badge sets a tight line-height for compact sizing, which would clip
12227
+ * glyph descenders; give the label a roomier line-height. Vertical centering
12228
+ * is unaffected because the badge height is fixed and content is centered.
12229
+ */
12230
+ line-height: normal;
12425
12231
  }
12426
12232
 
12427
- .muka-badge--sm .muka-badge__icon {
12428
- width: var(--icon-size-xs);
12429
- height: var(--icon-size-xs);
12430
- }
12431
- .muka-badge--md .muka-badge__icon {
12432
- width: var(--icon-size-sm);
12433
- height: var(--icon-size-sm);
12434
- }
12435
- .muka-badge--lg .muka-badge__icon {
12436
- width: var(--icon-size-default);
12437
- height: var(--icon-size-default);
12233
+ /* Neutral variant */
12234
+ .muka-badge-number--neutral {
12235
+ background-color: var(--color-surface-level1);
12236
+ color: var(--color-text-default-default);
12438
12237
  }
12439
12238
 
12440
- /* Force the passed content (raw <svg> or an <Icon> wrapper) to the slot size,
12441
- so callers don't have to size the icon to match each badge size. The
12442
- .muka-icon selector is intentionally 2 classes deep to override .muka-icon--md. */
12443
- .muka-badge__icon .muka-icon,
12444
- .muka-badge__icon svg {
12445
- width: 100%;
12446
- height: 100%;
12239
+ /* Info variant */
12240
+ .muka-badge-number--info {
12241
+ background-color: var(--color-state-info-contrast);
12242
+ color: var(--color-text-default-inverse);
12447
12243
  }
12448
12244
 
12449
- /* Icons inherit the badge's per-variant foreground color */
12450
- .muka-badge .muka-icon {
12451
- color: inherit;
12245
+ /* Success variant */
12246
+ .muka-badge-number--success {
12247
+ background-color: var(--color-state-success-contrast);
12248
+ color: var(--color-text-default-inverse);
12452
12249
  }
12453
12250
 
12454
- /* Dot indicator */
12455
- .muka-badge__dot {
12456
- flex-shrink: 0;
12457
- border-radius: var(--border-radius-full);
12251
+ /* Warning variant */
12252
+ .muka-badge-number--warning {
12253
+ background-color: var(--color-state-warning-contrast);
12254
+ color: var(--color-text-default-inverse);
12458
12255
  }
12459
12256
 
12460
- .muka-badge--sm .muka-badge__dot {
12461
- width: var(--badge-size-dot-sm);
12462
- height: var(--badge-size-dot-sm);
12257
+ /* Error variant */
12258
+ .muka-badge-number--error {
12259
+ background-color: var(--color-state-error-contrast);
12260
+ color: var(--color-text-default-inverse);
12463
12261
  }
12464
12262
 
12465
- .muka-badge--md .muka-badge__dot {
12466
- width: var(--badge-size-dot-md);
12467
- height: var(--badge-size-dot-md);
12263
+
12264
+ /* Button */
12265
+ /* Button Component Styles - Using Muka Design Tokens */
12266
+
12267
+ /* Base button styles */
12268
+ .muka-button {
12269
+ /* Layout */
12270
+ display: inline-flex;
12271
+ align-items: center;
12272
+ justify-content: center;
12273
+
12274
+ /* Typography - using semantic tokens */
12275
+ font-family: var(--alias-font-brand-family);
12276
+ font-weight: var(--alias-font-brand-weight-semibold);
12277
+ text-decoration: none;
12278
+
12279
+ /* Interaction */
12280
+ border: none;
12281
+ cursor: pointer;
12282
+ user-select: none;
12283
+ transition: all 0.2s ease;
12284
+
12285
+ /* Accessibility */
12286
+ outline: none;
12287
+ position: relative;
12468
12288
  }
12469
12289
 
12470
- .muka-badge--lg .muka-badge__dot {
12471
- width: var(--badge-size-dot-lg);
12472
- height: var(--badge-size-dot-lg);
12290
+ /* Focus styles for accessibility */
12291
+ .muka-button:focus-visible {
12292
+ outline: 2px solid var(--color-border-focus);
12293
+ outline-offset: 2px;
12473
12294
  }
12474
12295
 
12475
- .muka-badge__label {
12476
- flex: 0 1 auto;
12477
- min-width: 0;
12478
- overflow: hidden;
12479
- text-overflow: ellipsis;
12480
- /*
12481
- * The badge sets a tight line-height for compact sizing, but the label's
12482
- * `overflow: hidden` (needed for ellipsis) then clips glyph descenders (g, y, p). Give the
12483
- * label its own roomier line-height so descenders render; vertical centering is unaffected
12484
- * because the badge height is fixed and content is centered via align-items: center.
12485
- */
12486
- line-height: normal;
12296
+ /* Size variants
12297
+ Height is driven by min-height; vertical padding is 0 and the label carries
12298
+ tight (Figma) line-height. Horizontal spacing matches Figma's nested model:
12299
+ the button's padding is the outer container inset, and the label's own
12300
+ padding is the icon-to-text gap (so text-only buttons keep both insets). */
12301
+ .muka-button--sm {
12302
+ padding: 0 var(--button-padding-sm-x);
12303
+ border-radius: var(--button-radius-sm);
12304
+ font-size: var(--text-label-sm-semibold-fontSize);
12305
+ line-height: var(--text-label-sm-semibold-lineHeight);
12306
+ min-height: 32px;
12307
+ }
12308
+
12309
+ .muka-button--sm .muka-button__label {
12310
+ padding: 0 var(--button-gap-sm);
12311
+ }
12312
+
12313
+ .muka-button--md {
12314
+ padding: 0 var(--button-padding-md-x);
12315
+ border-radius: var(--button-radius-md);
12316
+ font-size: var(--text-label-sm-semibold-fontSize);
12317
+ line-height: var(--text-label-sm-semibold-lineHeight);
12318
+ min-height: 40px;
12319
+ }
12320
+
12321
+ .muka-button--md .muka-button__label {
12322
+ padding: 0 var(--button-gap-md);
12323
+ }
12324
+
12325
+ .muka-button--lg {
12326
+ padding: 0 var(--button-padding-lg-x);
12327
+ border-radius: var(--button-radius-lg);
12328
+ font-size: var(--text-label-lg-semibold-fontSize);
12329
+ line-height: var(--text-label-lg-semibold-lineHeight);
12330
+ min-height: 48px;
12331
+ }
12332
+
12333
+ .muka-button--lg .muka-button__label {
12334
+ padding: 0 var(--button-gap-lg);
12335
+ }
12336
+
12337
+ .muka-button--xl {
12338
+ padding: 0 var(--button-padding-xl-x);
12339
+ border-radius: var(--button-radius-xl);
12340
+ font-size: var(--text-label-2xl-semibold-fontSize);
12341
+ line-height: var(--text-label-2xl-semibold-lineHeight);
12342
+ min-height: 64px;
12343
+ }
12344
+
12345
+ .muka-button--xl .muka-button__label {
12346
+ padding: 0 var(--button-gap-xl);
12347
+ }
12348
+
12349
+ /* Primary variant - your main CTA button */
12350
+ .muka-button--primary {
12351
+ background-color: var(--button-color-primary-background-default);
12352
+ color: var(--button-color-primary-foreground-default);
12353
+ box-shadow: var(--button-color-primary-shadow-default);
12354
+ }
12355
+
12356
+ .muka-button--primary:hover:not(:disabled) {
12357
+ background-color: var(--button-color-primary-background-hover);
12358
+ color: var(--button-color-primary-foreground-hover);
12359
+ box-shadow: var(--button-color-primary-shadow-hover);
12360
+ }
12361
+
12362
+ /* `[data-state="open"]` keeps a Button pressed while it's an open disclosure
12363
+ trigger (Radix Menu/Popover set this on the trigger). `[aria-pressed="true"]`
12364
+ gives toggle buttons a visible selected state, so the toggle is not conveyed
12365
+ to sighted users by the accessibility tree alone. */
12366
+ .muka-button--primary:active:not(:disabled),
12367
+ .muka-button--primary.muka-button--pressed:not(:disabled),
12368
+ .muka-button--primary[data-state="open"]:not(:disabled),
12369
+ .muka-button--primary[aria-pressed="true"]:not(:disabled) {
12370
+ background-color: var(--button-color-primary-background-pressed);
12371
+ color: var(--button-color-primary-foreground-pressed);
12372
+ box-shadow: var(--button-color-primary-shadow-pressed);
12373
+ }
12374
+
12375
+ .muka-button--primary:disabled {
12376
+ background-color: var(--button-color-primary-background-disabled);
12377
+ color: var(--button-color-primary-foreground-disabled);
12378
+ box-shadow: var(--button-color-primary-shadow-disabled);
12379
+ cursor: not-allowed;
12380
+ opacity: 1; /* Remove opacity since we have proper disabled tokens */
12381
+ }
12382
+
12383
+ /* Secondary variant - supporting actions, no border, only bottom inner shadow */
12384
+ .muka-button--secondary {
12385
+ background-color: var(--button-color-secondary-background-default);
12386
+ color: var(--button-color-secondary-foreground-default);
12387
+ box-shadow: var(--button-color-secondary-shadow-default);
12388
+ }
12389
+
12390
+ .muka-button--secondary:hover:not(:disabled) {
12391
+ background-color: var(--button-color-secondary-background-hover);
12392
+ color: var(--button-color-secondary-foreground-hover);
12393
+ box-shadow: var(--button-color-secondary-shadow-hover);
12394
+ }
12395
+
12396
+ .muka-button--secondary:active:not(:disabled),
12397
+ .muka-button--secondary.muka-button--pressed:not(:disabled),
12398
+ .muka-button--secondary[data-state="open"]:not(:disabled),
12399
+ .muka-button--secondary[aria-pressed="true"]:not(:disabled) {
12400
+ background-color: var(--button-color-secondary-background-pressed);
12401
+ color: var(--button-color-secondary-foreground-pressed);
12402
+ box-shadow: var(--button-color-secondary-shadow-pressed);
12403
+ }
12404
+
12405
+ .muka-button--secondary:disabled {
12406
+ background-color: var(--button-color-secondary-background-disabled);
12407
+ color: var(--button-color-secondary-foreground-disabled);
12408
+ box-shadow: var(--button-color-secondary-shadow-disabled);
12409
+ cursor: not-allowed;
12410
+ opacity: 1;
12411
+ }
12412
+
12413
+ /* Tertiary variant - tinted background with accent text and border */
12414
+ .muka-button--tertiary {
12415
+ background-color: var(--button-color-tertiary-background-default);
12416
+ color: var(--button-color-tertiary-foreground-default);
12417
+ border: 1px solid var(--button-color-tertiary-border-default);
12418
+ }
12419
+
12420
+ .muka-button--tertiary:hover:not(:disabled) {
12421
+ background-color: var(--button-color-tertiary-background-hover);
12422
+ color: var(--button-color-tertiary-foreground-hover);
12423
+ border-color: var(--button-color-tertiary-border-hover);
12424
+ }
12425
+
12426
+ .muka-button--tertiary:active:not(:disabled),
12427
+ .muka-button--tertiary.muka-button--pressed:not(:disabled),
12428
+ .muka-button--tertiary[data-state="open"]:not(:disabled),
12429
+ .muka-button--tertiary[aria-pressed="true"]:not(:disabled) {
12430
+ background-color: var(--button-color-tertiary-background-pressed);
12431
+ color: var(--button-color-tertiary-foreground-pressed);
12432
+ border-color: var(--button-color-tertiary-border-pressed);
12433
+ }
12434
+
12435
+ .muka-button--tertiary:disabled {
12436
+ background-color: var(--button-color-tertiary-background-disabled);
12437
+ color: var(--button-color-tertiary-foreground-disabled);
12438
+ border-color: var(--button-color-tertiary-border-disabled);
12439
+ cursor: not-allowed;
12440
+ opacity: 1;
12441
+ }
12442
+
12443
+ /* Ghost variant - minimal styling, border appears on hover */
12444
+ .muka-button--ghost {
12445
+ background-color: var(--button-color-ghost-background-default);
12446
+ color: var(--button-color-ghost-foreground-default);
12447
+ border: 1px solid var(--button-color-ghost-border-default);
12448
+ }
12449
+
12450
+ .muka-button--ghost:hover:not(:disabled) {
12451
+ background-color: var(--button-color-ghost-background-hover);
12452
+ color: var(--button-color-ghost-foreground-hover);
12453
+ border-color: var(--button-color-ghost-border-hover);
12454
+ }
12455
+
12456
+ .muka-button--ghost:active:not(:disabled),
12457
+ .muka-button--ghost.muka-button--pressed:not(:disabled),
12458
+ .muka-button--ghost[data-state="open"]:not(:disabled),
12459
+ .muka-button--ghost[aria-pressed="true"]:not(:disabled) {
12460
+ background-color: var(--button-color-ghost-background-pressed);
12461
+ color: var(--button-color-ghost-foreground-pressed);
12462
+ border-color: var(--button-color-ghost-border-pressed);
12463
+ }
12464
+
12465
+ .muka-button--ghost:disabled {
12466
+ background-color: var(--button-color-ghost-background-disabled);
12467
+ color: var(--button-color-ghost-foreground-disabled);
12468
+ border-color: var(--button-color-ghost-border-disabled);
12469
+ cursor: not-allowed;
12470
+ opacity: 1;
12471
+ }
12472
+
12473
+ /* Muted variant - same as ghost but resting foreground is subtle, darkens on interaction */
12474
+ .muka-button--muted {
12475
+ background-color: var(--button-color-muted-background-default);
12476
+ color: var(--button-color-muted-foreground-default);
12477
+ border: 1px solid var(--button-color-muted-border-default);
12478
+ }
12479
+
12480
+ .muka-button--muted:hover:not(:disabled) {
12481
+ background-color: var(--button-color-muted-background-hover);
12482
+ color: var(--button-color-muted-foreground-hover);
12483
+ border-color: var(--button-color-muted-border-hover);
12484
+ }
12485
+
12486
+ .muka-button--muted:active:not(:disabled),
12487
+ .muka-button--muted.muka-button--pressed:not(:disabled),
12488
+ .muka-button--muted[data-state="open"]:not(:disabled),
12489
+ .muka-button--muted[aria-pressed="true"]:not(:disabled) {
12490
+ background-color: var(--button-color-muted-background-pressed);
12491
+ color: var(--button-color-muted-foreground-pressed);
12492
+ border-color: var(--button-color-muted-border-pressed);
12493
+ }
12494
+
12495
+ .muka-button--muted:disabled {
12496
+ background-color: var(--button-color-muted-background-disabled);
12497
+ color: var(--button-color-muted-foreground-disabled);
12498
+ border-color: var(--button-color-muted-border-disabled);
12499
+ cursor: not-allowed;
12500
+ opacity: 1;
12501
+ }
12502
+
12503
+ /* General disabled state - fallback */
12504
+ .muka-button:disabled {
12505
+ cursor: not-allowed;
12506
+ pointer-events: none;
12507
+ }
12508
+
12509
+ /* Full width modifier */
12510
+ .muka-button--full-width {
12511
+ width: 100%;
12512
+ }
12513
+
12514
+ /* Icons - forced to the Figma per-size dimension regardless of the icon passed */
12515
+ .muka-button__icon {
12516
+ display: inline-flex;
12517
+ align-items: center;
12518
+ justify-content: center;
12519
+ flex-shrink: 0;
12520
+ }
12521
+
12522
+ /* Make the icon content (raw <svg> or a nested Icon span) fill the wrapper.
12523
+ Scoped under .muka-button to outrank Icon.css's own `.muka-icon--{size}`
12524
+ rule, so the button's size wins even when the icon hardcodes its own size. */
12525
+ .muka-button .muka-button__icon > *,
12526
+ .muka-button .muka-button__icon svg {
12527
+ width: 100%;
12528
+ height: 100%;
12529
+ display: block;
12487
12530
  }
12488
12531
 
12489
- /* Neutral variant */
12490
- .muka-badge--neutral {
12491
- background-color: var(--color-surface-level1);
12492
- color: var(--color-text-default-default);
12532
+ .muka-button--sm .muka-button__icon {
12533
+ width: var(--button-icon-sm);
12534
+ height: var(--button-icon-sm);
12493
12535
  }
12494
12536
 
12495
- .muka-badge--neutral .muka-badge__dot {
12496
- background-color: var(--color-text-subtle-default);
12537
+ .muka-button--md .muka-button__icon {
12538
+ width: var(--button-icon-md);
12539
+ height: var(--button-icon-md);
12497
12540
  }
12498
12541
 
12499
- /* Info variant */
12500
- .muka-badge--info {
12501
- background-color: var(--color-state-info-background);
12502
- color: var(--color-state-info-contrast);
12542
+ .muka-button--lg .muka-button__icon {
12543
+ width: var(--button-icon-lg);
12544
+ height: var(--button-icon-lg);
12503
12545
  }
12504
12546
 
12505
- .muka-badge--info .muka-badge__dot {
12506
- background-color: var(--color-state-info-default);
12547
+ .muka-button--xl .muka-button__icon {
12548
+ width: var(--button-icon-xl);
12549
+ height: var(--button-icon-xl);
12507
12550
  }
12508
12551
 
12509
- /* Success variant */
12510
- .muka-badge--success {
12511
- background-color: var(--color-state-success-background);
12512
- color: var(--color-state-success-contrast);
12552
+ .muka-button__label {
12553
+ display: inline-flex;
12554
+ align-items: center;
12513
12555
  }
12514
12556
 
12515
- .muka-badge--success .muka-badge__dot {
12516
- background-color: var(--color-state-success-default);
12557
+ /* Icon-only buttons - square, sized to the button height per size */
12558
+ .muka-button--icon-only {
12559
+ padding: 0;
12517
12560
  }
12518
12561
 
12519
- /* Warning variant */
12520
- .muka-badge--warning {
12521
- background-color: var(--color-state-warning-background);
12522
- color: var(--color-state-warning-contrast);
12562
+ .muka-button--icon-only.muka-button--sm {
12563
+ width: 32px;
12523
12564
  }
12524
12565
 
12525
- .muka-badge--warning .muka-badge__dot {
12526
- background-color: var(--color-state-warning-default);
12566
+ .muka-button--icon-only.muka-button--md {
12567
+ width: 40px;
12527
12568
  }
12528
12569
 
12529
- /* Error variant */
12530
- .muka-badge--error {
12531
- background-color: var(--color-state-error-background);
12532
- color: var(--color-state-error-contrast);
12570
+ .muka-button--icon-only.muka-button--lg {
12571
+ width: 48px;
12533
12572
  }
12534
12573
 
12535
- .muka-badge--error .muka-badge__dot {
12536
- background-color: var(--color-state-error-default);
12574
+ .muka-button--icon-only.muka-button--xl {
12575
+ width: 64px;
12537
12576
  }
12538
12577
 
12539
12578
 
@@ -13009,98 +13048,282 @@ button.muka-chat-photo-grid__tile:focus-visible {
13009
13048
  height: var(--alert-icon-size);
13010
13049
  }
13011
13050
 
13012
- .muka-alert__icon svg {
13013
- width: 100%;
13014
- height: 100%;
13051
+ .muka-alert__icon svg {
13052
+ width: 100%;
13053
+ height: 100%;
13054
+ }
13055
+
13056
+ /* The leading icon and the dismiss (×) icon inherit the variant accent set on
13057
+ their container, overriding the Icon component's default color. */
13058
+ .muka-alert__icon .muka-icon,
13059
+ .muka-alert__dismiss .muka-icon {
13060
+ color: inherit;
13061
+ }
13062
+
13063
+ /* Content */
13064
+ .muka-alert__content {
13065
+ flex: 1;
13066
+ min-width: 0;
13067
+ }
13068
+
13069
+ .muka-alert__title {
13070
+ font-family: var(--text-label-md-semibold-fontFamily);
13071
+ font-weight: var(--text-label-md-semibold-fontWeight);
13072
+ font-size: var(--text-label-md-semibold-fontSize);
13073
+ line-height: var(--text-label-md-semibold-lineHeight);
13074
+ margin-bottom: var(--spacing-1);
13075
+ }
13076
+
13077
+ .muka-alert--sm .muka-alert__title {
13078
+ font-family: var(--text-label-sm-semibold-fontFamily);
13079
+ font-weight: var(--text-label-sm-semibold-fontWeight);
13080
+ font-size: var(--text-label-sm-semibold-fontSize);
13081
+ line-height: var(--text-label-sm-semibold-lineHeight);
13082
+ }
13083
+
13084
+ .muka-alert--lg .muka-alert__title {
13085
+ font-family: var(--text-label-lg-semibold-fontFamily);
13086
+ font-weight: var(--text-label-lg-semibold-fontWeight);
13087
+ font-size: var(--text-label-lg-semibold-fontSize);
13088
+ line-height: var(--text-label-lg-semibold-lineHeight);
13089
+ }
13090
+
13091
+ .muka-alert__message {
13092
+ font-family: var(--text-body-sm-regular-fontFamily);
13093
+ font-weight: var(--text-body-sm-regular-fontWeight);
13094
+ font-size: var(--text-body-sm-regular-fontSize);
13095
+ line-height: var(--text-body-sm-regular-lineHeight);
13096
+ }
13097
+
13098
+ .muka-alert--lg .muka-alert__message {
13099
+ font-family: var(--text-body-base-regular-fontFamily);
13100
+ font-weight: var(--text-body-base-regular-fontWeight);
13101
+ font-size: var(--text-body-base-regular-fontSize);
13102
+ line-height: var(--text-body-base-regular-lineHeight);
13103
+ }
13104
+
13105
+ /* Action slot */
13106
+ .muka-alert__action {
13107
+ display: flex;
13108
+ align-items: center;
13109
+ flex-shrink: 0;
13110
+ }
13111
+
13112
+ /* Dismiss button - uses accent color per variant, aligned with icon row */
13113
+ .muka-alert__dismiss {
13114
+ display: flex;
13115
+ align-items: center;
13116
+ justify-content: center;
13117
+ flex-shrink: 0;
13118
+ align-self: flex-start;
13119
+ width: 24px;
13120
+ height: 24px;
13121
+ padding: 0;
13122
+ margin: 0 0 0 auto;
13123
+ border: none;
13124
+ background: transparent;
13125
+ cursor: pointer;
13126
+ border-radius: var(--border-radius-sm);
13127
+ transition: opacity 0.15s ease, background-color 0.15s ease;
13128
+ }
13129
+
13130
+ .muka-alert__dismiss:hover {
13131
+ opacity: 0.85;
13132
+ background-color: rgba(0, 0, 0, 0.05);
13133
+ }
13134
+
13135
+ .muka-alert__dismiss:focus-visible {
13136
+ outline: 2px solid var(--color-border-focus);
13137
+ outline-offset: 2px;
13138
+ }
13139
+
13140
+ .muka-alert__dismiss svg {
13141
+ width: 16px;
13142
+ height: 16px;
13143
+ }
13144
+
13145
+
13146
+ /* Badge */
13147
+ /* Badge Component Styles - Using Muka Design Tokens */
13148
+
13149
+ .muka-badge {
13150
+ display: inline-flex;
13151
+ align-items: center;
13152
+ border-radius: var(--border-radius-full);
13153
+ white-space: nowrap;
13154
+ user-select: none;
13155
+ box-sizing: border-box;
13156
+ }
13157
+
13158
+ /*
13159
+ * Sizes — height, gap, type, and default (label-edge) horizontal padding.
13160
+ * Mirrors Chip so the two components share sizing, fonts, and spacing.
13161
+ * Vertical centering is handled by the fixed height + align-items: center.
13162
+ * The leading side gets a tighter padding when an icon/dot is present, via the
13163
+ * --has-icon / --has-dot modifiers below.
13164
+ */
13165
+ .muka-badge--sm {
13166
+ height: var(--badge-size-height-sm);
13167
+ gap: var(--badge-gap-sm);
13168
+ padding: 0 var(--badge-padding-label-sm);
13169
+ font-family: var(--text-label-sm-regular-fontFamily);
13170
+ font-weight: var(--text-label-sm-regular-fontWeight);
13171
+ font-size: var(--text-label-sm-regular-fontSize);
13172
+ line-height: var(--text-label-sm-regular-lineHeight);
13173
+ }
13174
+
13175
+ .muka-badge--md {
13176
+ height: var(--badge-size-height-md);
13177
+ gap: var(--badge-gap-md);
13178
+ padding: 0 var(--badge-padding-label-md);
13179
+ font-family: var(--text-label-md-regular-fontFamily);
13180
+ font-weight: var(--text-label-md-regular-fontWeight);
13181
+ font-size: var(--text-label-md-regular-fontSize);
13182
+ line-height: var(--text-label-md-regular-lineHeight);
13183
+ }
13184
+
13185
+ .muka-badge--lg {
13186
+ height: var(--badge-size-height-lg);
13187
+ gap: var(--badge-gap-lg);
13188
+ padding: 0 var(--badge-padding-label-lg);
13189
+ font-family: var(--text-label-lg-regular-fontFamily);
13190
+ font-weight: var(--text-label-lg-regular-fontWeight);
13191
+ font-size: var(--text-label-lg-regular-fontSize);
13192
+ line-height: var(--text-label-lg-regular-lineHeight);
13193
+ }
13194
+
13195
+ /* Tighter leading padding when a leading icon or dot is present */
13196
+ .muka-badge--sm.muka-badge--has-icon,
13197
+ .muka-badge--sm.muka-badge--has-dot {
13198
+ padding-left: var(--badge-padding-leading-sm);
13199
+ }
13200
+ .muka-badge--md.muka-badge--has-icon,
13201
+ .muka-badge--md.muka-badge--has-dot {
13202
+ padding-left: var(--badge-padding-leading-md);
13203
+ }
13204
+ .muka-badge--lg.muka-badge--has-icon,
13205
+ .muka-badge--lg.muka-badge--has-dot {
13206
+ padding-left: var(--badge-padding-leading-lg);
13207
+ }
13208
+
13209
+ /* Leading icon slot — Figma icon sizes: sm 16, md 20, lg 24 (matches Chip) */
13210
+ .muka-badge__icon {
13211
+ display: inline-flex;
13212
+ align-items: center;
13213
+ justify-content: center;
13214
+ flex-shrink: 0;
13215
+ }
13216
+
13217
+ .muka-badge--sm .muka-badge__icon {
13218
+ width: var(--icon-size-xs);
13219
+ height: var(--icon-size-xs);
13220
+ }
13221
+ .muka-badge--md .muka-badge__icon {
13222
+ width: var(--icon-size-sm);
13223
+ height: var(--icon-size-sm);
13224
+ }
13225
+ .muka-badge--lg .muka-badge__icon {
13226
+ width: var(--icon-size-default);
13227
+ height: var(--icon-size-default);
13228
+ }
13229
+
13230
+ /* Force the passed content (raw <svg> or an <Icon> wrapper) to the slot size,
13231
+ so callers don't have to size the icon to match each badge size. The
13232
+ .muka-icon selector is intentionally 2 classes deep to override .muka-icon--md. */
13233
+ .muka-badge__icon .muka-icon,
13234
+ .muka-badge__icon svg {
13235
+ width: 100%;
13236
+ height: 100%;
13237
+ }
13238
+
13239
+ /* Icons inherit the badge's per-variant foreground color */
13240
+ .muka-badge .muka-icon {
13241
+ color: inherit;
13242
+ }
13243
+
13244
+ /* Dot indicator */
13245
+ .muka-badge__dot {
13246
+ flex-shrink: 0;
13247
+ border-radius: var(--border-radius-full);
13248
+ }
13249
+
13250
+ .muka-badge--sm .muka-badge__dot {
13251
+ width: var(--badge-size-dot-sm);
13252
+ height: var(--badge-size-dot-sm);
13253
+ }
13254
+
13255
+ .muka-badge--md .muka-badge__dot {
13256
+ width: var(--badge-size-dot-md);
13257
+ height: var(--badge-size-dot-md);
13015
13258
  }
13016
13259
 
13017
- /* The leading icon and the dismiss (×) icon inherit the variant accent set on
13018
- their container, overriding the Icon component's default color. */
13019
- .muka-alert__icon .muka-icon,
13020
- .muka-alert__dismiss .muka-icon {
13021
- color: inherit;
13260
+ .muka-badge--lg .muka-badge__dot {
13261
+ width: var(--badge-size-dot-lg);
13262
+ height: var(--badge-size-dot-lg);
13022
13263
  }
13023
13264
 
13024
- /* Content */
13025
- .muka-alert__content {
13026
- flex: 1;
13265
+ .muka-badge__label {
13266
+ flex: 0 1 auto;
13027
13267
  min-width: 0;
13268
+ overflow: hidden;
13269
+ text-overflow: ellipsis;
13270
+ /*
13271
+ * The badge sets a tight line-height for compact sizing, but the label's
13272
+ * `overflow: hidden` (needed for ellipsis) then clips glyph descenders (g, y, p). Give the
13273
+ * label its own roomier line-height so descenders render; vertical centering is unaffected
13274
+ * because the badge height is fixed and content is centered via align-items: center.
13275
+ */
13276
+ line-height: normal;
13028
13277
  }
13029
13278
 
13030
- .muka-alert__title {
13031
- font-family: var(--text-label-md-semibold-fontFamily);
13032
- font-weight: var(--text-label-md-semibold-fontWeight);
13033
- font-size: var(--text-label-md-semibold-fontSize);
13034
- line-height: var(--text-label-md-semibold-lineHeight);
13035
- margin-bottom: var(--spacing-1);
13279
+ /* Neutral variant */
13280
+ .muka-badge--neutral {
13281
+ background-color: var(--color-surface-level1);
13282
+ color: var(--color-text-default-default);
13036
13283
  }
13037
13284
 
13038
- .muka-alert--sm .muka-alert__title {
13039
- font-family: var(--text-label-sm-semibold-fontFamily);
13040
- font-weight: var(--text-label-sm-semibold-fontWeight);
13041
- font-size: var(--text-label-sm-semibold-fontSize);
13042
- line-height: var(--text-label-sm-semibold-lineHeight);
13285
+ .muka-badge--neutral .muka-badge__dot {
13286
+ background-color: var(--color-text-subtle-default);
13043
13287
  }
13044
13288
 
13045
- .muka-alert--lg .muka-alert__title {
13046
- font-family: var(--text-label-lg-semibold-fontFamily);
13047
- font-weight: var(--text-label-lg-semibold-fontWeight);
13048
- font-size: var(--text-label-lg-semibold-fontSize);
13049
- line-height: var(--text-label-lg-semibold-lineHeight);
13289
+ /* Info variant */
13290
+ .muka-badge--info {
13291
+ background-color: var(--color-state-info-background);
13292
+ color: var(--color-state-info-contrast);
13050
13293
  }
13051
13294
 
13052
- .muka-alert__message {
13053
- font-family: var(--text-body-sm-regular-fontFamily);
13054
- font-weight: var(--text-body-sm-regular-fontWeight);
13055
- font-size: var(--text-body-sm-regular-fontSize);
13056
- line-height: var(--text-body-sm-regular-lineHeight);
13295
+ .muka-badge--info .muka-badge__dot {
13296
+ background-color: var(--color-state-info-default);
13057
13297
  }
13058
13298
 
13059
- .muka-alert--lg .muka-alert__message {
13060
- font-family: var(--text-body-base-regular-fontFamily);
13061
- font-weight: var(--text-body-base-regular-fontWeight);
13062
- font-size: var(--text-body-base-regular-fontSize);
13063
- line-height: var(--text-body-base-regular-lineHeight);
13299
+ /* Success variant */
13300
+ .muka-badge--success {
13301
+ background-color: var(--color-state-success-background);
13302
+ color: var(--color-state-success-contrast);
13064
13303
  }
13065
13304
 
13066
- /* Action slot */
13067
- .muka-alert__action {
13068
- display: flex;
13069
- align-items: center;
13070
- flex-shrink: 0;
13305
+ .muka-badge--success .muka-badge__dot {
13306
+ background-color: var(--color-state-success-default);
13071
13307
  }
13072
13308
 
13073
- /* Dismiss button - uses accent color per variant, aligned with icon row */
13074
- .muka-alert__dismiss {
13075
- display: flex;
13076
- align-items: center;
13077
- justify-content: center;
13078
- flex-shrink: 0;
13079
- align-self: flex-start;
13080
- width: 24px;
13081
- height: 24px;
13082
- padding: 0;
13083
- margin: 0 0 0 auto;
13084
- border: none;
13085
- background: transparent;
13086
- cursor: pointer;
13087
- border-radius: var(--border-radius-sm);
13088
- transition: opacity 0.15s ease, background-color 0.15s ease;
13309
+ /* Warning variant */
13310
+ .muka-badge--warning {
13311
+ background-color: var(--color-state-warning-background);
13312
+ color: var(--color-state-warning-contrast);
13089
13313
  }
13090
13314
 
13091
- .muka-alert__dismiss:hover {
13092
- opacity: 0.85;
13093
- background-color: rgba(0, 0, 0, 0.05);
13315
+ .muka-badge--warning .muka-badge__dot {
13316
+ background-color: var(--color-state-warning-default);
13094
13317
  }
13095
13318
 
13096
- .muka-alert__dismiss:focus-visible {
13097
- outline: 2px solid var(--color-border-focus);
13098
- outline-offset: 2px;
13319
+ /* Error variant */
13320
+ .muka-badge--error {
13321
+ background-color: var(--color-state-error-background);
13322
+ color: var(--color-state-error-contrast);
13099
13323
  }
13100
13324
 
13101
- .muka-alert__dismiss svg {
13102
- width: 16px;
13103
- height: 16px;
13325
+ .muka-badge--error .muka-badge__dot {
13326
+ background-color: var(--color-state-error-default);
13104
13327
  }
13105
13328
 
13106
13329
 
@@ -13176,100 +13399,231 @@ button.muka-chat-photo-grid__tile:focus-visible {
13176
13399
 
13177
13400
  /* ─── Single task row ──────────────────────────────────── */
13178
13401
 
13179
- .muka-agent-task-list__task {
13180
- display: flex;
13181
- align-items: stretch;
13182
- gap: var(--spacing-4);
13183
- min-height: 32px;
13184
- padding: 0;
13402
+ .muka-agent-task-list__task {
13403
+ display: flex;
13404
+ align-items: stretch;
13405
+ gap: var(--spacing-4);
13406
+ min-height: 32px;
13407
+ padding: 0;
13408
+ }
13409
+
13410
+ /* ─── Bullet column (icon + timeline connector) ────────── */
13411
+
13412
+ .muka-agent-task-list__bullet {
13413
+ position: relative;
13414
+ flex-shrink: 0;
13415
+ width: 16px;
13416
+ align-self: stretch;
13417
+ }
13418
+
13419
+ .muka-agent-task-list__line {
13420
+ position: absolute;
13421
+ left: 7px;
13422
+ width: 1px;
13423
+ background-color: var(--color-border-default);
13424
+ }
13425
+
13426
+ .muka-agent-task-list__line--top {
13427
+ top: 0;
13428
+ height: 6px;
13429
+ }
13430
+
13431
+ .muka-agent-task-list__line--bottom {
13432
+ top: 32px;
13433
+ bottom: 0;
13434
+ }
13435
+
13436
+ .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13437
+ display: none;
13438
+ }
13439
+
13440
+ .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13441
+ display: none;
13442
+ }
13443
+
13444
+ .muka-agent-task-list__icon {
13445
+ position: absolute;
13446
+ top: 8px;
13447
+ left: 0;
13448
+ width: 16px;
13449
+ height: 16px;
13450
+ display: inline-flex;
13451
+ align-items: center;
13452
+ justify-content: center;
13453
+ color: var(--color-text-subtle-default);
13454
+ z-index: 1;
13455
+ }
13456
+
13457
+ /* ─── State color treatments ───────────────────────────── */
13458
+
13459
+ .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13460
+ color: var(--color-action-default);
13461
+ }
13462
+
13463
+ .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13464
+ color: var(--color-text-subtle-default);
13465
+ }
13466
+
13467
+ .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13468
+ color: var(--color-text-muted-default, var(--color-text-subtle-default));
13469
+ opacity: 0.6;
13470
+ }
13471
+
13472
+ /* ─── Label ────────────────────────────────────────────── */
13473
+
13474
+ .muka-agent-task-list__label {
13475
+ flex: 1 1 0;
13476
+ min-width: 0;
13477
+ padding: var(--spacing-2) 0;
13478
+ color: var(--color-text-subtle-default);
13479
+ font-family: var(--text-body-sm-regular-fontFamily);
13480
+ font-weight: var(--text-body-sm-regular-fontWeight);
13481
+ font-size: var(--text-body-sm-regular-fontSize);
13482
+ line-height: var(--text-body-sm-regular-lineHeight);
13483
+ word-break: break-word;
13484
+ }
13485
+
13486
+ /* ─── Print ────────────────────────────────────────────── */
13487
+
13488
+ @media print {
13489
+ .muka-agent-task-list {
13490
+ break-inside: avoid;
13491
+ }
13492
+
13493
+ .muka-agent-task-list__chevron {
13494
+ display: none;
13495
+ }
13496
+ }
13497
+
13498
+
13499
+ /* Accordion */
13500
+ /* Accordion Component Styles */
13501
+
13502
+ .muka-accordion {
13503
+ width: 100%;
13504
+ }
13505
+
13506
+ /* Item */
13507
+ .muka-accordion__item {
13508
+ border-bottom: var(--border-width-regular) solid var(--color-border-default);
13509
+ }
13510
+
13511
+ .muka-accordion__item:last-child {
13512
+ border-bottom: none;
13513
+ }
13514
+
13515
+ /* Header reset */
13516
+ .muka-accordion__header {
13517
+ margin: 0;
13518
+ }
13519
+
13520
+ /* Trigger */
13521
+ .muka-accordion__trigger {
13522
+ display: flex;
13523
+ align-items: center;
13524
+ justify-content: space-between;
13525
+ width: 100%;
13526
+ padding: var(--spacing-4);
13527
+ background: none;
13528
+ border: none;
13529
+ cursor: pointer;
13530
+ font-family: var(--text-label-md-semibold-fontFamily);
13531
+ font-weight: var(--text-label-md-semibold-fontWeight);
13532
+ font-size: var(--text-label-md-semibold-fontSize);
13533
+ line-height: var(--text-label-md-semibold-lineHeight);
13534
+ color: var(--color-text-default-default);
13535
+ text-align: left;
13536
+ gap: var(--spacing-3);
13537
+ transition: background-color 0.15s ease;
13538
+ }
13539
+
13540
+ .muka-accordion__trigger:hover {
13541
+ background-color: var(--color-surface-level1);
13185
13542
  }
13186
13543
 
13187
- /* ─── Bullet column (icon + timeline connector) ────────── */
13544
+ .muka-accordion__trigger[data-disabled] {
13545
+ cursor: not-allowed;
13546
+ opacity: 0.4;
13547
+ }
13188
13548
 
13189
- .muka-agent-task-list__bullet {
13190
- position: relative;
13191
- flex-shrink: 0;
13192
- width: 16px;
13193
- align-self: stretch;
13549
+ .muka-accordion__trigger-text {
13550
+ flex: 1;
13194
13551
  }
13195
13552
 
13196
- .muka-agent-task-list__line {
13197
- position: absolute;
13198
- left: 7px;
13199
- width: 1px;
13200
- background-color: var(--color-border-default);
13553
+ /* Chevron rotation */
13554
+ .muka-accordion__chevron {
13555
+ display: inline-flex;
13556
+ align-items: center;
13557
+ color: var(--color-text-subtle-default);
13558
+ transition: transform 200ms ease;
13201
13559
  }
13202
13560
 
13203
- .muka-agent-task-list__line--top {
13204
- top: 0;
13205
- height: 6px;
13561
+ .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13562
+ transform: rotate(180deg);
13206
13563
  }
13207
13564
 
13208
- .muka-agent-task-list__line--bottom {
13209
- top: 32px;
13210
- bottom: 0;
13565
+ /* Content */
13566
+ .muka-accordion__content {
13567
+ overflow: hidden;
13211
13568
  }
13212
13569
 
13213
- .muka-agent-task-list__task:first-child .muka-agent-task-list__line--top {
13214
- display: none;
13570
+ .muka-accordion__content[data-state='open'] {
13571
+ animation: muka-accordion-slideDown 200ms ease;
13215
13572
  }
13216
13573
 
13217
- .muka-agent-task-list__task:last-child .muka-agent-task-list__line--bottom {
13218
- display: none;
13574
+ .muka-accordion__content[data-state='closed'] {
13575
+ animation: muka-accordion-slideUp 200ms ease;
13219
13576
  }
13220
13577
 
13221
- .muka-agent-task-list__icon {
13222
- position: absolute;
13223
- top: 8px;
13224
- left: 0;
13225
- width: 16px;
13226
- height: 16px;
13227
- display: inline-flex;
13228
- align-items: center;
13229
- justify-content: center;
13230
- color: var(--color-text-subtle-default);
13231
- z-index: 1;
13578
+ @keyframes muka-accordion-slideDown {
13579
+ from {
13580
+ height: 0;
13581
+ }
13582
+ to {
13583
+ height: var(--radix-accordion-content-height);
13584
+ }
13232
13585
  }
13233
13586
 
13234
- /* ─── State color treatments ───────────────────────────── */
13587
+ @keyframes muka-accordion-slideUp {
13588
+ from {
13589
+ height: var(--radix-accordion-content-height);
13590
+ }
13591
+ to {
13592
+ height: 0;
13593
+ }
13594
+ }
13235
13595
 
13236
- .muka-agent-task-list__task[data-state='active'] .muka-agent-task-list__icon {
13237
- color: var(--color-action-default);
13596
+ .muka-accordion__content-inner {
13597
+ padding: 0 var(--spacing-4) var(--spacing-5);
13598
+ color: var(--color-text-default-default);
13238
13599
  }
13239
13600
 
13240
- .muka-agent-task-list__task[data-state='done'] .muka-agent-task-list__icon {
13241
- color: var(--color-text-subtle-default);
13601
+ /* ─── Variant: flush ────────────────────────────────────────────────────── */
13602
+
13603
+ .muka-accordion--flush .muka-accordion__trigger {
13604
+ padding-left: 0;
13605
+ padding-right: 0;
13242
13606
  }
13243
13607
 
13244
- .muka-agent-task-list__task[data-state='pending'] .muka-agent-task-list__icon {
13245
- color: var(--color-text-muted-default, var(--color-text-subtle-default));
13246
- opacity: 0.6;
13608
+ .muka-accordion--flush .muka-accordion__content-inner {
13609
+ padding-left: 0;
13610
+ padding-right: 0;
13247
13611
  }
13248
13612
 
13249
- /* ─── Label ────────────────────────────────────────────── */
13613
+ /* ─── Variant: contained ────────────────────────────────────────────────── */
13250
13614
 
13251
- .muka-agent-task-list__label {
13252
- flex: 1 1 0;
13253
- min-width: 0;
13254
- padding: var(--spacing-2) 0;
13255
- color: var(--color-text-subtle-default);
13256
- font-family: var(--text-body-sm-regular-fontFamily);
13257
- font-weight: var(--text-body-sm-regular-fontWeight);
13258
- font-size: var(--text-body-sm-regular-fontSize);
13259
- line-height: var(--text-body-sm-regular-lineHeight);
13260
- word-break: break-word;
13615
+ .muka-accordion--contained {
13616
+ border: var(--border-width-regular) solid var(--color-border-default);
13617
+ border-radius: var(--radius-md);
13618
+ overflow: hidden;
13261
13619
  }
13262
13620
 
13263
- /* ─── Print ────────────────────────────────────────────── */
13264
-
13265
- @media print {
13266
- .muka-agent-task-list {
13267
- break-inside: avoid;
13268
- }
13621
+ .muka-accordion--contained .muka-accordion__item {
13622
+ background-color: var(--color-surface-level3);
13623
+ }
13269
13624
 
13270
- .muka-agent-task-list__chevron {
13271
- display: none;
13272
- }
13625
+ .muka-accordion--contained .muka-accordion__item:last-child {
13626
+ border-bottom: none;
13273
13627
  }
13274
13628
 
13275
13629
 
@@ -13414,134 +13768,3 @@ button.muka-chat-photo-grid__tile:focus-visible {
13414
13768
  outline-offset: 2px;
13415
13769
  }
13416
13770
 
13417
-
13418
- /* Accordion */
13419
- /* Accordion Component Styles */
13420
-
13421
- .muka-accordion {
13422
- width: 100%;
13423
- }
13424
-
13425
- /* Item */
13426
- .muka-accordion__item {
13427
- border-bottom: var(--border-width-regular) solid var(--color-border-default);
13428
- }
13429
-
13430
- .muka-accordion__item:last-child {
13431
- border-bottom: none;
13432
- }
13433
-
13434
- /* Header reset */
13435
- .muka-accordion__header {
13436
- margin: 0;
13437
- }
13438
-
13439
- /* Trigger */
13440
- .muka-accordion__trigger {
13441
- display: flex;
13442
- align-items: center;
13443
- justify-content: space-between;
13444
- width: 100%;
13445
- padding: var(--spacing-4);
13446
- background: none;
13447
- border: none;
13448
- cursor: pointer;
13449
- font-family: var(--text-label-md-semibold-fontFamily);
13450
- font-weight: var(--text-label-md-semibold-fontWeight);
13451
- font-size: var(--text-label-md-semibold-fontSize);
13452
- line-height: var(--text-label-md-semibold-lineHeight);
13453
- color: var(--color-text-default-default);
13454
- text-align: left;
13455
- gap: var(--spacing-3);
13456
- transition: background-color 0.15s ease;
13457
- }
13458
-
13459
- .muka-accordion__trigger:hover {
13460
- background-color: var(--color-surface-level1);
13461
- }
13462
-
13463
- .muka-accordion__trigger[data-disabled] {
13464
- cursor: not-allowed;
13465
- opacity: 0.4;
13466
- }
13467
-
13468
- .muka-accordion__trigger-text {
13469
- flex: 1;
13470
- }
13471
-
13472
- /* Chevron rotation */
13473
- .muka-accordion__chevron {
13474
- display: inline-flex;
13475
- align-items: center;
13476
- color: var(--color-text-subtle-default);
13477
- transition: transform 200ms ease;
13478
- }
13479
-
13480
- .muka-accordion__trigger[data-state='open'] .muka-accordion__chevron {
13481
- transform: rotate(180deg);
13482
- }
13483
-
13484
- /* Content */
13485
- .muka-accordion__content {
13486
- overflow: hidden;
13487
- }
13488
-
13489
- .muka-accordion__content[data-state='open'] {
13490
- animation: muka-accordion-slideDown 200ms ease;
13491
- }
13492
-
13493
- .muka-accordion__content[data-state='closed'] {
13494
- animation: muka-accordion-slideUp 200ms ease;
13495
- }
13496
-
13497
- @keyframes muka-accordion-slideDown {
13498
- from {
13499
- height: 0;
13500
- }
13501
- to {
13502
- height: var(--radix-accordion-content-height);
13503
- }
13504
- }
13505
-
13506
- @keyframes muka-accordion-slideUp {
13507
- from {
13508
- height: var(--radix-accordion-content-height);
13509
- }
13510
- to {
13511
- height: 0;
13512
- }
13513
- }
13514
-
13515
- .muka-accordion__content-inner {
13516
- padding: 0 var(--spacing-4) var(--spacing-5);
13517
- color: var(--color-text-default-default);
13518
- }
13519
-
13520
- /* ─── Variant: flush ────────────────────────────────────────────────────── */
13521
-
13522
- .muka-accordion--flush .muka-accordion__trigger {
13523
- padding-left: 0;
13524
- padding-right: 0;
13525
- }
13526
-
13527
- .muka-accordion--flush .muka-accordion__content-inner {
13528
- padding-left: 0;
13529
- padding-right: 0;
13530
- }
13531
-
13532
- /* ─── Variant: contained ────────────────────────────────────────────────── */
13533
-
13534
- .muka-accordion--contained {
13535
- border: var(--border-width-regular) solid var(--color-border-default);
13536
- border-radius: var(--radius-md);
13537
- overflow: hidden;
13538
- }
13539
-
13540
- .muka-accordion--contained .muka-accordion__item {
13541
- background-color: var(--color-surface-level3);
13542
- }
13543
-
13544
- .muka-accordion--contained .muka-accordion__item:last-child {
13545
- border-bottom: none;
13546
- }
13547
-